• Работа с образами дисков в Terminal.app (hdiutil)

    Под Mac OS X пишут очень много людей, и всегда можно найти удобную и красивую программу, выполняющего одну или несколько полезных функций. Однако те же функции могут быть уже реализованы в стандартных утилитах операционной системы. Например, я показал, как записать iso-образ на DVD/CD из Terminal.app, не прибегая к программам вроде Disco или бесплатного Burn.

    hdiutil - это мощная консольная утилита, работающая с образами дисков. Информация о ней доступна в привычном для Unix'оидов man'е - можно либо в Terminal.app набрать "man hdiutil".

    Создание iso-образа для обмена с Windows/Unix/etc

    Записываем каталог "~/Documents" в iso-образ cdimage.iso:

    hdiutil makehybrid -o cdimage ~/Documents
    

    В iso-образе одновременно создаются несколько файловых систем, это определяется ключами: стандартная для Mac OS X HFS+ (-hfs), Joliet (-joliet), ISO9660 (-iso) и UDF (-udf). Если не указать явно, то создаются все четыре файловых системы одновременно.

    Спасибо @tsybulin за подсказку, как создать iso-образ. Он использовал три из четырёх файловых систем (ключи -joliet -iso -hfs).

    Создание dmg-образа

    Записываем в notes.dmg содержимое каталога ~/Documents/Notes:

    hdiutil create -srcfolder ~/Documents/Notes notes
    

    Подключение образа диска

    Смонтировать диск можно, открыв образ в Finder, либо запустив команду:

    hdiutil attach image.iso
    

    Создание зашифрованного расширяемого образа

    Бывает необходимость хранить некоторые данные в зашифрованном виде. Для этого можно создать отдельный зашифрованный образ, с возможностью автоматического увеличения его размера:

    hdiutil create ~/Documents/TopSecret -type SPARSEBUNDLE \
      -size 100m -fs HFS+J -volname TopSecret -encryption
    

    При создании будет запрошен пароль. Создастся файл с именем TopSecret.sparsebundle. Затем при каждом его монтировании будет спрашиваться пароль. Однако нужно не забывать отмонтировать образ, когда в нём нет необходимости. Прикладное применение можно посмотреть в статье "Encrypt Mail, Address Book, and iCal data".

    Снятие образа диска с CD/DVD

    Для установки виртуальной машины VMWare (Win XP, например) мне удобнее использовать не CD/DVD, а готовый образ. С помощью следующих команд я снял загрузочную копию с моего лицензионного "Win XP Home" (создаётся файл winxphome.dmg).

    Вставить диск и посмотреть, на какое устройство подмонтировался диск:

    $ mount
    ...
    /dev/disk4s0 on /Volumes/VRMHFPP_RU (cd9660, local, nodev, nosuid, read-only, noowners)
    

    Снять копию:

    hdiutil convert /dev/disk4s0 -format UFBI -o winxphome
    

    Преобразование форматов

    Преобразование образа "только для чтения" image-ro.dmg в образ с возможностью модификации image-rw.dmg:

    hdiutil convert -format UDRW -o image-rw.dmg image-ro.dmg
    

    Обратное преобразование (RW->RO)

    hdiutil convert image-rw.dmg -format UFBI -o image-ro.dmg
    

    Преобразование dmg в iso

    hdiutil convert source.dmg -format UDTO -o destination.iso
    

    Завершение

    Я рассмотрел только часть возможностей hdiutil. Целиком они описаны в "man hdiutil". Не скажу, что описано понятно для неподготовленного человека, но man - это "наше всё" для людей, желающих разобраться в Unix.

    Hdiutil - это только одна из сотен штатных утилит Mac OS X. Зная и применяя даже малое их количество, можно делать с системой всё, что необходимо, и без привлечения дополнительных программ.


  • Запись iso-образов из Terminal.app

    Рассмотрим запись iso в shell на примере дистрибутива Debian. Списываем iso, лучше с torrent.

    Проверяем контрольную сумму (хотя бы md5):

    $ curl http://cdimage.debian.org/debian-cd/5.0.3/i386/iso-dvd/MD5SUMS | \
        grep debian-503-i386-DVD-1.iso
    7ea66fee666fa444f0256ab3c1ec6ba4  debian-503-i386-DVD-1.iso
    $ md5 debian-503-i386-DVD-1.iso
    MD5 (debian-503-i386-DVD-1.iso) = 7ea66fee666fa444f0256ab3c1ec6ba4
    

    Контрольные суммы совпадают, образ нормальный, можем его записывать стандартной утилитой hdiutil:

    $ hdiutil burn debian-503-i386-DVD-1.iso
    
  • Поиск метода установки Mac OS X под VMWare Fusion

    Если вы пытались установить под VMWare Fusion или Parallels Mac OS X, то сталкивались с отказом - есть возможность установить только Mac OS X Server. Это связано с лицензионным ограничением Apple, и, конечно же, ни VMWare, ни Parallels не хотят подвергать себя риску быть обвинёнными в нарушении Software License Agreement.

    Read on →

  • Ответ разработчиков Hazel по поводу влияния программы на время автономной работы

    В комментарии к предыдущей статье по Hazel @stanislavskiy сообщил о своём негативном опыте - на его наборе правил Hazel ноутбук MacBook Pro расходовал батарею всего лишь за час, хотя нормальное время работы с выключенным Hazel было не меньше трёх часов.

    Hazel классная штука, но с запущеным резидентом жрет батарею MB Pro за час. А для стационарных машин - самое то. Я полгода назад его пытался активно юзать и даже паниковал, что батарея навернулась. Вырубил резидента - все наладилось. Экспериментировал трижды - все сходилось, потом вырубил резидента и просто раз в сутки запускал правила на выполнение.

    При работе Hazel с одним правилом, описанным в статье, я не заметил снижения времени автономной работы, поэтому решил задать вопрос непосредственно разработчикам:

    Hi,

    I like your program and I’m planning to buy it. But I‘ve received interesting feedback from my friend:

    "Hazel is a brilliant, but running in background it eats MacBook Pro battery. Battery life is near one hour instead of four hours. For desktop machines it works fine. I tried Hazel six months ago and was in panic - the battery was broken. I tried three times - results was the same."

    Personally I think you are using the same file system event notification mechanism as the Spotlight metadata server, and Hazel doesn't drain the battery.

    Please clarify - do you have any reports about short battery time when using Hazel?

    Я люблю работать с зарубежными разработчиками - практически всегда оперативный и качественный ответ приходит в очень короткие сроки. Разработчики Hazel - не исключение, на следующий день ответ был получен:

    Hazel actually has to poll since it's using an older filesystem notification mechanism (this was for Tiger compatibility). Hazel 3.0 will have a re-written engine which will use the newer system used by Leopard and later. Actually, it's very likely that version 3 will leapfrog Leopard and require Snow Leopard instead.

    That said, I haven't noticed much battery drainage (I run it on an old PowerBook). It does depend on how you use it though. If you have it recursively scanning a large folder tree then that could potentially be draining. I suggest testing it out for yourself as these things are hard to predict. If you (or your friend) do notice drainage, then let me know as I'm always curious about these types of things. It might be helpful to send me a copy of the rules.

    If you have anymore questions, just let me know.

    Вкратце передам смысл. Текущая версия Hazel использует старый механизм получения нотификаций об изменениях файловой системы, это сделано для совместимости с 10.4. При сканировании каталогов с большим количеством данных существует возможность усиленного расходования батареи ноутбука. Если такое проявляется, то нужно написать разработчикам. Сейчас ведётся работа над версией 3, которая будет использовать усовершенствованные механизмы нотификаций Leopard и Snow Leopard, и влияние на время автономной работы будет минимально.


  • Функциональные клавиши на ноутбуке одним нажатием

    На ноутбуках Apple функциональные клавиши управляют в первую очередь такими специальными функциями, как регулировка яркости экрана, громкости звука и т.п., и только во вторую очередь являются функциональными. Для получения, допустим, F6, нужно нажать Fn+F6. Это разумно, ведь большинству людей не нужны F1..F12.

    Однако мне чаще нужны именно функции F1..F12, например, с помощью F6 я перемещаю почту в Mail.App. Для перенастройки поведения функциональных клавиш нужно зайти в "System Preferences/Keyboard" и включить опцию "Use all F1, F2, etc. keys as standart function keys":

    Для вызова же специальных функций нужно теперь нажимать модификатор Fn. Например, отключение звука на MBP'09 доступно при нажатии Fn+F10.


  • Работа с Hazel на примере автоматизации публикации скриншотов в Dropbox

    В обсуждении статьи "Как заставить работать симлинки в Dropbox" Pomidorchi поставил интересную задачу:

    В целом я сейчас ищу решение такой проблемы:

    1. заставить системную скриншотоделалку мака (та что по shift+cmd+3/4) кидать скрины в /Dropbox/Public/scr (добился этого с помощью Onyx)
    2. как-то эти скриншоты автоматически переименовывать в что-то вроде "2009-09-26_scr1.png"
    3. а уже потом кидать результат в буфер.

    Read on →

  • Mail.app + Mail Act-On + клавиатура

    Я работал с разными почтовыми программами под различными операционными системами: Outlook Express, The Bat!, Thunderbird, mutt, Outlook (личная почта в GMail не в счёт). Моей любимой программой был консольный почтовый клиент mutt - я его использовал по крайней мере года три. Он был чрезвычайно удобен в том числе из-за того, что полностью управлялся с клавиатуры. "All mail clients suck. This one just sucks less". Кстати, он и сейчас продолжает развиваться.

    Когда мне пришлось перейти на Exchange, то, к сожалению, нормальной альтернативы Microsoft Outlook не оказалось (включить поддержку IMAP+SMTP и продолжать работать в mutt было невозможно, Evolution/Unix, а затем Entourage/Mac мне не нравились). Сейчас же, с появлениением в Snow Leopard поддержки Exchange, перешёл на штатный Mail и теперь почти полностью работаю с почтой с MacBook Pro, разве что в отдельных случаях запускаю Outlook под виртуальной машиной. Однако ностальгия по mutt не отпускала - хотелось самые частые операции делать не мышкой, а нажатием комбинации клавиш.

    Read on →

  • Скрытие каталогов

    Некоторые программы создают свои каталоги в ~/Documents, и лично мне они не нужны, и в Finder я не хочу их видеть. К таким каталогам относятся, например, "Virtual Machines" (VmWare), "SMS Chat Logs" (BluePhoneElite 2), "iChats".

    Раньше была возможность скрытия каталогов в "Get Info" Finder'а (то ли в 10.4, то ли в ранних версиях 10.5.x), но потом она исчезла. Однако это можно сделать в Terminal.app.

    Есть два варианта - можно использовать либо команду SetFile (она поставляется вместе с Mac OS X Developer Tools, т.е. нужно установить XCode), либо штатную команду chflags.

    Скрыть каталог: "SetFile -a V dir" или же "chflags hidden dir".

    Отображать каталог: "SetFile -a v dir" или "chflags nohidden dir".

    $ cd ~/Documents
    $ ls -al
    drwx------+ 15 ctrld  staff    510 Sep 21 00:33 .
    drwxr-xr-x+ 30 ctrld  staff   1020 Sep 25 15:15 ..
    -rw-------@  1 ctrld  staff  15364 Sep 27 13:05 .DS_Store
    -rw-r--r--   1 ctrld  staff      0 Aug 28 08:38 .localized
    drwxr-xr-x  10 ctrld  staff    340 Sep 25 16:48 Backups
    drwxr-xr-x  19 ctrld  staff    646 Sep 25 16:49 Books
    drwxr-xr-x  16 ctrld  staff    544 Aug 20 11:03 Development
    drwxr-xr-x  65 ctrld  staff   2210 Sep 10 16:31 Notes
    drwxr-xr-x  13 ctrld  staff    442 Sep 21 00:33 Personal
    drwxr-xr-x   4 ctrld  staff    136 Sep  2 17:18 SMS Chat Logs.localized
    drwxr-xr-x  13 ctrld  staff    442 Sep 21 14:44 Travels
    drwxr-xr-x   4 ctrld  staff    136 Aug 29 19:33 Virtual Machines.localized
    drwxr-xr-x  11 ctrld  staff    374 Apr 14 15:47 Work
    drwx------  21 ctrld  staff    714 Sep 25 10:52 iChats
    drwxr-xr-x  19 ctrld  staff    646 Sep 25 12:52 Статьи
    
    

    Read on →

  • Синхронизация Address Book с Google

    Несколько раз, когда я писал письма через GMail, оказалось, что email'ы отсутствовали в адресной книге GMail, но при этом я их аккуратно записал в адресную книгу на Маке. Вспомнив, что в настройках Address Book кроме синхронизации с MobileMe есть ещё и синхронизация с Google, я решил сделать единую адресную книгу для всех используемых мною сервисов.

    Предупреждение: обязательно сделайте бекапы адресной книги в Mac OS X и в Google.

    Для начала я удалил из адресной книги в учётной записи GMail всех, кроме людей, с которыми я общаюсь по Google Talk. Сразу предупреждаю - у меня трижды были ситуации, когда при полной ресинхронизации удалялись контакты GTalk, в итоге могла теряться авторизация и приходится её повторять (или самому, или же контактам). Например, вот вообщения, которые были получены во время чистки, хотя этот контакт не удалялся:

    |2009-09-25T12:57:47|7|from|N---|unsubscribe
    |2009-09-25T12:57:48|8|from|N---|unsubscribed
    |2009-09-25T12:57:48|7|from|N---|unsubscribe
    |2009-09-25T12:57:48|8|from|N---|unsubscribed
    

    Затем я включил синхронизацию в Address Book с Google, согласился с предупреждением, и ввёл имя и пароль учётной записи GMail

    Для ускорения синхронизации воспользовался командой, найденной на форуме MacRumors (Terminal.app). При наведении на команду появляется toolbar, через который можно её скопировать, пока привожу так, а потом буду разбираться с нормальным представлением текста.

    <pre> /System/Library/PrivateFrameworks/GoogleContactSync.framework/Versions/A/Resources/gconsync –sync com.google.ContactSync </pre>

    При выполнении выдались ошибки, но если процесс повторить, провести вычистку дублей (ниже), то они исчезают:

    ole-mac:~ ctrld$ /System/Library/PrivateFrameworks/GoogleContactSync.framework/Versions/A/Resources/gconsync --sync com.google.ContactSync
    2009-09-25 11:51:44.398 gconsync[14521:903] [10af20] |ISyncSession|Warning| com.google.ContactSync: transitioning to cancel - session cancelled by server: SyncServer failed to merge the changes from some clients: ISyncSessionCancelledException session cancelled
    2009-09-25 12:02:02.821 gconsync[14599:903] [10af20] |Miscellaneous|Error| SyncServices precondition failure in [ISyncConcreteSession _commitAcceptedChangesAndStartAnotherTransaction:]: you have unresolved references to the following records - you must resolve all references before you can commit your changes: (
        "gcon:8043E07A48134EB4AE9C7577303B4CF4",
        "gcon:D459FE78D1D4843A4F55A8B6C093C920",
        "gcon:4B5BCB55395EEDB3F9E0AD5D72B01A7E",
        "gcon:4BADF21324A3E74731111037F495D827",
        "gcon:64A7F1889C6ED59F4644C47EAF97EB9F"
    )
    2009-09-25 12:02:02.821 gconsync[14599:903] Top level exception caught [ISyncConcreteSession _commitAcceptedChangesAndStartAnotherTransaction:]: you have unresolved references to the following records - you must resolve all references before you can commit your changes: (
        "gcon:8043E07A48134EB4AE9C7577303B4CF4",
        "gcon:D459FE78D1D4843A4F55A8B6C093C920",
        "gcon:4B5BCB55395EEDB3F9E0AD5D72B01A7E",
        "gcon:4BADF21324A3E74731111037F495D827",
        "gcon:64A7F1889C6ED59F4644C47EAF97EB9F"
    )
    ole-mac:~ ctrld$ /System/Library/PrivateFrameworks/GoogleContactSync.framework/Versions/A/Resources/gconsync --sync com.google.ContactSync
    ole-mac:~ ctrld$
    

    Также может выдаться окно с сообщением о конфликте синхронизации с предложением выбрать, какой контакт правильный. Обратите внимание, что новая запись имеет дополнительное поле "Google Talk", по крайней мере для тех, с кем вы общаетесь по GTalk.

    Затем следует чистка дубликатов в Address Book, их редактирование, слияние и удаление. Приготовьтесь к задвоениям/затроениям контактов, их придётся вычистить вручную и повторить синхронизацию указанной выше командой, и снова повторить процесс.

    В итоге синхронизация работает, при создании контакта в GMail он синхронизируется в Address Book. Я пока не смотрел, как часто производится синхронизация, но я думаю так же часто, как и с MobileMe.

    В заключение хочу сказать, что я описал бесплатное решение, использующее штатные средства системы. Раньше я использовал платную систему Spanning Sync, и она удовлетворяла всем моим запросам по синхронизации. Она кроме адресной книги позволяет синхронизировать календари (в iCal же можно только подписываться на внешние календари, включая Google, но это не то, что нужно).

  • Использование клавиш-модификаторов в System Preferences

    Сегодня наконец-то посмотрел последний выпуск видеоподкаста "Apple Quick Tips". В нём рассказали о простом, но не для всех очевидном приёме. В некоторых настройках в System Preferences можно задействовать клавиши-модификаторы (Shift, Control, Option, или Command).

    Речь шла о включении активных зон экрана в разделе "Exposé". Можно, например, запустить скринсейвер при достижении курсора мыши указанного угла. Но бывает, что это происходит случайно, особенно неудобно, если настроен показ всех окон или же запуск Spaces. Рецепт прост (эту фразу я использую регулярно, но согласитесь, ведь так оно и есть) - перед выбором действия нужно нажать клавишу-модификатор (одну или несколько), и действие выполнится только если эти курсор мыши попал в нужную зону и эти клавиши нажаты: