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

    На ноутбуках 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. Рецепт прост (эту фразу я использую регулярно, но согласитесь, ведь так оно и есть) - перед выбором действия нужно нажать клавишу-модификатор (одну или несколько), и действие выполнится только если эти курсор мыши попал в нужную зону и эти клавиши нажаты:


  • Коты и Маки, продолжение

    У меня есть три увлечения - Маки, Скалолазанье и Коты. О первом вы читаете здесь, о втором можно почитать на сайте "Команда Траверс и её друзья", а вот третье и постоянное увлечение остаётся неосвещённым. Поэтому объединю две такие похожие темы о Котах и о Маках в этой статье, ведь первые так любят греться на вторых.
    Эту тему очень хорошо описала Arwen в статье "Коты и Маки". Я же просто приведу картинки с Flickr без комментариев. Авторство можно посмотреть, перейдя по ссылке на каждой фотографии.


  • Как заставить работать симлинки в Dropbox

    До обновления до Snow Leopard я активно использовал символические ссылки (симлинки или же symlinks) для того, чтобы синхронизировать файлы и каталоги, находящиеся вне иерархии Dropbox, например каталог проектов или базу данных паролей 1Password. Когда перешёл на Snow Leopard, то почему-то симлинки у меня перестали работать.

    Также эту проблему озвучил @umputun в первом подкасте после выхода Snow Leopard, так что я был не одинок.

    Поясню - я обычно делал относительные симлинки:

    ole-mac:~ ctrld$ cd ~
    ole-mac:~ ctrld$ date > test1.txt
    ole-mac:~ ctrld$ ls -al test1.txt
    -rw-r--r-- 1 ctrld staff 30 Sep 23 23:31 test1.txt
    ole-mac:~ ctrld$ ln -s test1.txt Dropbox/Public/
    ole-mac:~ ctrld$ ls -al Dropbox/Public/test1.txt
    lrwxr-xr-x 1 ctrld staff 9 Sep 23 23:31 Dropbox/Public/test1.txt -> test1.txt
    

    Dropbox 0.6.559 вообще не реагировал на создание симлинка (не было активности на значке в menubar) и ничего не синхронизировал, в версии 0.7.24 активность появлялась, но никогда не заканчивалась (отображался статус "Indexing 1 file...").

    В Интернет я рапортов о проблеме с симлинками не нашёл, и решил написать разработчикам. Rian H. среагировал почти мгновенно - я написал ночью, и утром уже был ответ:

    hi oleg i believe you are using the "ln" command incorrectly. the command you want to execute is:

    $ ln -s $PWD/test1.txt Dropbox/Public/
    

    the reason is that symlink sources are used verbatim by the kernel. meaning if you try to access test1.txt in your Dropbox/Public folder, it's looking for test1.txt in the same folder (a recursive symlink). You need to either a full path or a relative path from Dropbox/Public

    Моя ошибка была "от ума" - я привык создавать относительные симлинки, а нужно было создавать абсолютные:

    Вместо

    $ ln -s test1.txt Dropbox/Public/
    

    Нужно делать так:

    $ ln -s $PWD/test1.txt Dropbox/Public/
    

    Как только я так сделал, симлинки стали синхронизироваться.

    Примечание 1. Я использую Experimental Build, но должно работать и на стабильном.

    Примечание 2. После такого простого решения я задумался о том, что возможно под 10.5 я создавал абсолютные симлинки, а на 10.6 стал создавать относительные. Но по крайней мере теперь ясно, как делать правильно.


  • Слежение за изменениями файловой системы

    При исследовании работы разнообразных программ из интереса или же во время исследования проблемных ситуаций необходимо следить за файловой активностью. Ранее я описал использование DTrace, сейчас же кратко опишу две полезные утилиты, которые мне посоветовал Кирилл Воронин.

    fslogger

    В книге "Mac OS X Internals. A System Approach" была описана командно-строковая утилита fslogger, написанная автором, позволяющая отслеживать различные изменения файловой системы, например:

    • создание файлов и каталогов;
    • удаление файлов и каталогов;
    • изменения структуры stat (например, изменение разрешений);
    • переименование файлов и каталогов;
    • изменение содержимого;
    • обмен содержимым между двумя файлами (это функция HFS+);
    • изменение информации Finder;
    • изменение владельца.

    Пример работы утилиты:

    ole-mac:~ ctrld$ sudo fslogger
    Password:
    fsevents device cloned (fd 4)
    fslogger ready
    => received 654 bytes
    # Event
      type           = FSE_CREATE_FILE
      pid            = 193 (iChatAgent)
      # Details
        # type           len  data
        FSE_ARG_STRING    66  string = /Users/ctrld/Library/Caches/com.apple.iChat/Pictures/.dat00c1.055
        FSE_ARG_DEV        4  dev    = 0xe000002 (major 14, minor 2)
        FSE_ARG_INO        4  ino    = 2766443
        FSE_ARG_MODE       4  mode   = -rw-r--r--  (0x0081a4, vnode type VREG)
        FSE_ARG_UID        4  uid    = 501 (ctrld)
        FSE_ARG_GID        4  gid    = 20 (staff)
        FSE_ARG_INT64      8  tstamp = 8200465994289
        FSE_ARG_DONE (0xb33f)
    # Event
      type           = FSE_CONTENT_MODIFIED
      pid            = 193 (iChatAgent)
      # Details
        # type           len  data
        FSE_ARG_STRING    66  string = /Users/ctrld/Library/Caches/com.apple.iChat/Pictures/.dat00c1.055
        FSE_ARG_DEV        4  dev    = 0xe000002 (major 14, minor 2)
        FSE_ARG_INO        4  ino    = 2766443
        FSE_ARG_MODE       4  mode   = -rw-r--r--  (0x0081a4, vnode type VREG)
        FSE_ARG_UID        4  uid    = 501 (ctrld)
        FSE_ARG_GID        4  gid    = 20 (staff)
        FSE_ARG_INT64      8  tstamp = 8200466392596
        FSE_ARG_DONE (0xb33f)
    

    fseventer

    Компания fernLightning на основании идеи fslogger создала программу fseventer, которая в графическом виде показывает файловую активность. Программа бесплатная, но предлагает сделать добровольное пожертвование разработчикам. Функциональность видна по двум скриншотам:


  • Удаление фантомного письма в Mail/Exchange

    Неоднократно сталкивался с тем, что при использовании Exchange EWS в Mail.app постоянно остаётся “неудаляемым” одно письмо. Пересоздавал учётную запись - ничего не помогало, “неудаляемым” становилось другое письмо.

    <p style="clear: both">При попытке удаления выдаётся следующее сообщение:</p><p style="clear: both">Начал искать решение, нашёл большое обсуждение на сайте Apple “Exchange issue: send/receive mail fine - can’t delete or move messages”. Одна из первых рекомендаций мне помогла - нужно отключить сохранение удаляемых писем на сервере:</p><p style="clear: both">Затем удалить “мистическое” письмо, а потом снова включить при необходимости эту опцию.</p>