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

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

  • Доступ к паролям 1Password через браузер (1Password anywhere)

    00_1pass<p>Когда после установки Snow Leopard я обновлял 1Password до версии 3.0 beta, мне попалось упоминание о новой функции “1Password anywhere”, позволяющей иметь доступ к своим паролям не только со своего Mac’а, но и с Windows, Linux, etc. Эта функция меня чрезвычайно заинтересовала, так как я вынужден продолжать использовать кроссплатформенную систему хранения паролей Keepass, которая под MacOS X (KeepassX), ведь только она запускалась под всеми операционными системами, которыми я пользуюсь. Были жалкие попытки переписать Keepass под Cocoa, но дальше анонсов сторонних разработчиков не пошло. И вот я решил разобраться, что же такое “1Password anywhere” и наконец-то уйти от Keepass.</p>

    Идея была описана в статье разработчиков 1Password "1Password 3 Feature Spotlight: 1PasswordAnywhere". Возможно функция будет работать и в 1Password версии 2, я не испытывал.

    Read on →

  • Система web-статистики Woopra и исследование её сетевой активности при помощи Wireshark

    Я перепробовал несколько систем статистики посещений для сайтов. Когда-то давно пользовался анализаторами логов web-сервера Analog, Webalizer, AwStats. Но их возможности анализа были ограничены, например отслеживать возвращающихся посетителей с динамических IP-адресов было невозможно, отсев краулеров поисковых систем и прочих ботов можно было производить только вручную, да и визуальное оформление отчётов мне не нравилось. Поэтому Webalizer у меня работает до сих пор, но на его статистику я не смотрел уже больше года.

    Дальше я использовал всяческие кнопки рейтингов со сбором статистики, но их наличие вступало в притиворечие с моим чувством прекрасного, и я быстро от них избавился. И наконец-то (на самом деле все методы я пробовал параллельно) я остановился на службах Google Analytics, Яндекс.Метрика и Woopra. Последняя система меня покорила всерьёз и надолго - в отличие от других систем она не только показывает активность посетителей в режиме реального времени (а у того же Google Analytics задержка на сутки), но и имеет красивый desktop-клиент, написанный на Java, что даёт возможность его запускать под Windows, MacOS и Linux.

    Описывать Woopra я не буду - посмотреть её функциональность можно на сайте. Покажу свой скриншот закладки Dashboard:

    Системой я пользуюсь давно и с удовольствием, но вчера @andy_shev обратил моё внимание на то, что при открытии этого блога в Opera раз в несколько секунд идёт странная сетевая активность, будто бы делается обновление страницы. Конечно же, как только зашла речь об исследовании сетевой активности, я привычно применил Wireshark, установку которого описал в статье "Готовимся анализировать сетевой трафик при помощи Wireshark".

    Открываю сайт http://theapplegeek.ru. Запускаю Terminal.app, затем консольную утилиту tshark:

    sudo tshark -i en1 -R 'http.request.method == "GET"' \
      -T fields -e frame.time -e http.host -e http.request.uri
    
    • sudo Для захвата трафика требуются права администратора, sudo даёт их, запрашивая пользовательский пароль. Обратите внимание, что пользователь должен иметь права на администрирование компьютера (это выставляется в настройках учётной записи), иначе sudo выдаст сообщение "username is not in the sudoers file. This incident will be reported".
    • -i en1 Указывается интерфейс, который нужно прослушивать. Обычно en0 - ethernet, en1 - AirPort, но можно уточнить, запустив команду ifconfig. К сожалению мета-интерфейс "any", позволяющий слушать трафик по всем интерфейсам, под MacOS не срабатывает.
    • -R ... Read (display) filter, определяет, что захватывать нужно только трафик, удовлетворяющий критерию.
    • http.request.method == "GET" Критерий отбора - HTTP-запросы GET, стандартные обращения к web-серверам.
    • -T fields Выводить поля из пакетов, перечисленные далее в параметрах "-e".
    • -e frame.time Время прихода пакета.
    • -e http.host Имя хоста (поле Host: после запроса "GET /uri HTTP/1.1).
    • -e http.request.uri URI.

    Название полей можно найти в "Display Filter Reference", например в описании полей протокола HTTP. Второй вариант - можно захватить трафик в Wireshark, затем выделить интересующее поле, тогда в левой нижней части экрана на статус-баре будет отображено имя поля. Для того, чтобы появилась возможность захвата трафика в Wireshark, самый простой способ - его нужно запустить из Terminal.app командой "sudo wireshark".

    Вернёмся к Woopra. Отсеяв трафик других программ (dropbox, facebook и т.д.), получаем такие такие запросы:

    Sep 19, 2009 19:08:19	woopra.com.woopra-ns.com	/ping/cookie=DQHSOKCE25U9U37JYSOPC9FXNR3FPOEM&idle=0&ra=1XMYR9XSLF7RF0HND2BDK1QBEH3CZ4LT
    Sep 19, 2009 19:08:39	woopra.com.woopra-ns.com	/ping/cookie=DQHSOKCE25U9U37JYSOPC9FXNR3FPOEM&idle=0&ra=PVXARGWAEXFQ25WAIEF4VJYEMKX65WBW
    Sep 19, 2009 19:08:41	theapplegeek.ru.woopra-ns.com		/ping/cookie=ZO50TUOUOY37S133MNWTOB42QVKN3DE9&ra=IHN8DUX5C8ZAF5S4VV1AOBA4Y8ZDF643
    Sep 19, 2009 19:08:50	woopra.com.woopra-ns.com	/ping/cookie=DQHSOKCE25U9U37JYSOPC9FXNR3FPOEM&idle=0&ra=C2A88WBRW8S41PZFU9LLYZHTSCGP31C4
    Sep 19, 2009 19:08:52	woopra.com.woopra-ns.com	/ping/cookie=DQHSOKCE25U9U37JYSOPC9FXNR3FPOEM&idle=0&ra=DF1OD4USZAHPQKWOO65JZTL30LMLDZL4
    Sep 19, 2009 19:09:06	theapplegeek.ru.woopra-ns.com		/ping/cookie=ZO50TUOUOY37S133MNWTOB42QVKN3DE9&ra=BPE9FX2TKVLEQUZ01ZXTADRI2WSDJVJ0
    Sep 19, 2009 19:09:11	woopra.com.woopra-ns.com	/ping/cookie=DQHSOKCE25U9U37JYSOPC9FXNR3FPOEM&idle=0&ra=5ENUMAPTVGCFTYTVYE5BUPJ8RDD5V0RV
    Sep 19, 2009 19:09:23	woopra.com.woopra-ns.com	/ping/cookie=DQHSOKCE25U9U37JYSOPC9FXNR3FPOEM&idle=0&ra=93RKHH6CEI6EZ42K7O70DHSOM6R90JJD
    Sep 19, 2009 19:09:24	woopra.com.woopra-ns.com	/ping/cookie=DQHSOKCE25U9U37JYSOPC9FXNR3FPOEM&idle=0&ra=Y16BXDE2TY94LSQD00JY9YOUMBU28FKB
    Sep 19, 2009 19:09:31	theapplegeek.ru.woopra-ns.com		/ping/cookie=ZO50TUOUOY37S133MNWTOB42QVKN3DE9&ra=N08KNNMAQGODTJMP6U2M3LBW5HZZA8QZ
    Sep 19, 2009 19:09:44	woopra.com.woopra-ns.com	/ping/cookie=DQHSOKCE25U9U37JYSOPC9FXNR3FPOEM&idle=0&ra=LDM2WTP08FQAIKXGGAS4OEUQR9I9F9BG
    Sep 19, 2009 19:09:55	woopra.com.woopra-ns.com	/ping/cookie=DQHSOKCE25U9U37JYSOPC9FXNR3FPOEM&idle=24&ra=QB20A1LXW26Q3D65RCC4O7ZDYGE7LA8N
    Sep 19, 2009 19:09:57	theapplegeek.ru.woopra-ns.com		/ping/cookie=ZO50TUOUOY37S133MNWTOB42QVKN3DE9&ra=6YM6J00Q88JJPPYASVS37H7KJSZLDL6L
    Sep 19, 2009 19:09:57	woopra.com.woopra-ns.com	/ping/cookie=DQHSOKCE25U9U37JYSOPC9FXNR3FPOEM&idle=36&ra=3VFUBJWJ9YYJEKZJ9IKLGKX05V6T4FLF
    Sep 19, 2009 19:10:16	woopra.com.woopra-ns.com	/ping/cookie=DQHSOKCE25U9U37JYSOPC9FXNR3FPOEM&idle=37&ra=0U415OZXXXU576SV69RZ05KQNEBO2N85
    Sep 19, 2009 19:10:22	theapplegeek.ru.woopra-ns.com		/ping/cookie=ZO50TUOUOY37S133MNWTOB42QVKN3DE9&ra=V4O1MR9G6069857YPHMIRVB02SSPVEDZ
    Sep 19, 2009 19:10:28	woopra.com.woopra-ns.com	/ping/cookie=DQHSOKCE25U9U37JYSOPC9FXNR3FPOEM&idle=57&ra=8L8WI1IPX8JKXUF6JSX9906Z13X0WOB2
    Sep 19, 2009 19:10:30	woopra.com.woopra-ns.com	/ping/cookie=DQHSOKCE25U9U37JYSOPC9FXNR3FPOEM&idle=68&ra=57QDITV9DPDW8SORHAE27OXBW08PU0W7
    Sep 19, 2009 19:10:47	theapplegeek.ru.woopra-ns.com		/ping/cookie=ZO50TUOUOY37S133MNWTOB42QVKN3DE9&ra=0CDQK2WA823UIX2IQID5SR9WVTBOJI7A
    Sep 19, 2009 19:10:49	woopra.com.woopra-ns.com	/ping/cookie=DQHSOKCE25U9U37JYSOPC9FXNR3FPOEM&idle=0&ra=U03MO0VLYO3TWJJUE9VZKCW0H59A8J48
    

    Т.е. видим, что при открытии сайта с установленной статистикой Woopra из браузера посетителя идут регулярные обращения на сервера статистики Woopra. Размер каждого пакета 256 байт, в минуту имеем порядка 4-8 запросов или же 1-2 KB трафика. Конечно же, это немного, но если посетитель заходит через дорогой GRPS, то подобные системы статистики могут нагнать достаточно много трафика.

    Что же это за обращения? Ответ прост - Woopra отслеживает, находится ли посетитель на сайте, или уже ушёл с него путём регулярной отсылки "keepalive ping". Именно так реализована функция "With Woopra, you get live track of visitors coming and going and moving through your site".

    Однако нужно признать - Woopra система хорошая и отслеживать посетилей "real-time" иначе невозможно. Детали о реализации функции можно прочитать в блоге Woopra в статье "Long Time Visitors in Woopra Are Not Really “Stuck”, They’re Just Idle". Каждый владелец сайта сам принимает решение, использовать такую систему, или нет. Но теперь мы благодаря Wireshark знаем об этой особенности Woopra. И, продолжая анализировать сетевую активность, будем знать и о поведении других программ.


  • Готовимся анализировать сетевой трафик при помощи Wireshark

    Одним из полезнейших инструментов для исследования сетевого трафика является Wireshark. Это кроссплатформенная программа, доступная для MacOS X в частности и для Unix в общем, для Windows. Консольную часть я даже видел на сетевом оборудовании под управлением какого-то проприетарного диалекта Unix. Кроссплатформенность - это огромное достоинство, но для MacOS оно же является и недостатком - для запуска GUI требуется X Window (я его ставлю всегда, но некоторым придётся доставать диски с дистрибутивом MacOS X и его доставлять), и интерфейс программы вызывает отнюдь не самые тёплые эмоции (с внешним видом можно смириться, но есть проблемы с копированием, отработкой клавиатурных комбинаций и прочие мелочи, не дающие нормально работать). Поэтому для MacOS (да и для других Unix) я использую консольную часть, в основном это tshark.

    Read on →

  • Требуется менеджер окон

    Вчера, когда я шёл домой через подземный переход, мне в глаза бросилось странное объявление - я даже вернулся, пройдя вперёд метров 20. "Менеджер окон"... Вот это да, - подумал я, - неужели уже системный софт начали продвигать расклейкой бумажных объявлений, или у меня уже начались галлюцинации на почве компьютеров? Но нет, с психикой у меня оказалось всё в порядке - слова "по продаже" были напечатаны мелким шрифтом:

    Остаток пути я размышлял об оконных менеджерах Gnome, KDE, Enlightenment в сравнении с Apple. А потом вспомнил о полезной программе "SizeUp", которую недавно купил, устав от ручной максимизации на весь экран окон в MacOS. Учитывая функциональность, её также можно назвать "менеджером окон". Используя настраиваемые клавиатурные комбинации, можно всячески менять раположение и размер активного окна:

    Read on →

  • Отладка файловой активности процессов с помощью DTrace, или как написать деинсталлятор

    Предупреждение: я не претендую на полноту изложения и с точки зрения опытного системного программиста под MacOS X часть статьи может выглядеть бредом :-) Но мой метод работает, и его можно рассматривать как взгляд системного администратора на MacOS X.

    Недавно мне попалась на глаза новость об обновлении деинсталлятора "Yank - Your Mac's Uninstaller". Он отрабатывает самые сложные случаи - когда программа устанавливается не только перетаскиванием в Applications, но и с помощью инсталлятора, когда достаточно много файлов записывается в разные каталоги. Краткое описание программы есть на DeepApple. Yank следит за файловой активностью инсталлятора и записывает в отдельный файл перечень устанавливаемых файлов, а далее, используя этот файл, может всё чисто деинсталлировать. Также есть онлайн-сервис, который содержит файлы для удаления более 150 программ, т.е. можно удалять программы, которые были установлены до начала использования Yank.

    Yank - это пример программы, которая выстроена вокруг нескольких команд в shell. Я хочу продемонстрировать принцип, по которому она работает, а заодно продемонстрировать очень мощную технику отладки - DTrace.

    Read on →

  • Творческое применение Dropbox для списывания торрентов

    Бывает, что прочитаешь статью и говоришь себе: "Вау! Какая идея! Мне этого очень не хватало". Как раз такую статью я прочитал вчера на Lifehacker.

    Я периодически качаю торренты (да, таким образом я списываю дистрибутивы Linux ;-). Но удобнее и дешевле всего это делать с машины, подключенного в Интернет по безлимитному тарифу (я использую два подключения в Интернет - один безлимитный, другой с оплатой по трафику, так сложилось). У меня есть слабый компьютер, находящийся где-то в районе кладовки, на нём стоит Linux, и там запущен консольный клиент rtorrent, наблюдающий за появлением torrent-файлов в каталоге watch, и автоматически их закачивающий. Под Mac то же самое может делать Transmission (самая нижняя опция "Auto add: watch for torrent files in..."):

    Раньше процесс добавления торрента был мучителен - сначала на ноутбуке или на рабочей станции я списывал torrent-файл, а дальше через scp (бывало, что через два промежуточных хоста) копировал его на машину с rtorrent. Долго и неудобно.

    И вот вчерашняя статья открыла мне глаза на элегантное решение. Скажу одно-единственное слово: "Dropbox". И всё становится понятным.

    Создаём на сервере каталог ~/Dropbox/Private/Watch (конечно же, Dropbox должен быть установлен и настроен), настраиваем rtorrent или Transmission на автоподхватывание из этого каталога файлов, Dropbox синхронизируется на всех компьютерах. И теперь в этот каталог можно забросить torrent-файл на любом рабочем месте, и torrent начнёт закачиваться. Приходим домой, а файлы скачаны.

    Можно пойти ещё немного дальше. В описанном сценарии нужно ложить файлы вручную. А можно поставить Hazel, и в нём настроить автоперенос torrent-файлов из каталога ~/Downloads (куда списываются все файлы из браузера) в наш ~/Dropbox/Private/Watch.

    Если вы ещё не используете Dropbox, вы просто обязаны его посмотреть, базово этот сервис бесплатен. А если будете регистрироваться, то можете сделать мне приятное - зарегистрируйтесь по моей реферальной ссылке, и я получу лишние 250 MB бонуса :-)


  • Очередное созерцание рабочего места

    К чему я привёл эту фотографию? Исключительно для того, чтобы показать, что поворот монитора на 90 градусов даёт ни с чем не сравнимое удобство чтения документации, электронных книг и работы с браузером.
    Сегодня сделал ещё две фотографии. Рабочее место у меня огранизовано буквой "Г". Вот стационарное место:

    Как вы уже заметили, на нём девственно чисто, ни бумаг, ни органайзеров, ни подобного хлама. Процитирую "The Big Bang Theory": "Мой знак зодиака - Дева. Теперь вы знаете обо мне гораздо больше, чем должны." ;-) Ещё добавлю, что моя работа связана с системным и сетевым администрированием.
    Два монитора подключены к одному системному блоку. Операционная система - Ubuntu 9.04. На левом мониторе - консоль (для меня программа screen - must have), и в фоне - браузер. На втором - Windows XP под VirtualBox (мне нужен для работы Microsoft Office, OpenOffice я недолюбливаю по некоторым причинам, о которых не буду здесь говорить, и ещё под Unix нет поддержки Exchange 2007).
    Второе рабочее место находится сбоку, я всегда могу развернуться. Все три монитора, включая подключённый к ноутбуку - обычные 19" формата 4x3.

    Здесь ноутбук и развёрнутый на 90 градусов монитор для работы с документацией и прочим (очень часто я читаю специализированную литературу с Oreilly SafariBooks Online).
    По поводу замечания @hitech о том, что длительные повороты при чтении с бокового экрана могут негативно сказаться на осанке - возможно это так, нужно поискать рекомендации, но за день работы в такой конфигурации у меня не возникает дискомфорта, потому что я всего лишь слегка поворачиваю голову, спина остаётся неподвижной.
    Интересно было бы посмотреть и ваши рабочие места - с удовольствием поставлю ссылки на ваши блоги с фотографиями.


  • Какую полосу пропускания используют iChat и Skype?

    После того, как я начал переходить на iChat, меня заинтересовало, какая полоса используется тем же Skype и iChat (с разными ограничениями).

    Для слежения за трафиком я использую утилиту "Net Monitor", ещё для этой цели можно применить iStat Menus, но она менее удобна для этой цели.

    Похоже, что Skype при установке соединения проверяет доступную полосу, и, если это возможно, устанавливает видеочат в режиме 640x480. По крайней мере у меня он так работает без прописывания твиков в файле config.xml.

    Skype в режиме видео hires использует 64 KBps (512 Kbps) на вход и на выход:

    Skype в режиме разговора без видео занимает 42 Kbps:

    В iChat под Snow Leopard можно выставлять ограничение по полосе пропускания (Preferences..., Audio/Video, Bandwidth Limit), причём используемая полоса действительно будет примерно около ограничения:

    В режиме без ограничения и с ограничением 2 Mbps iChat использует до 1792 Kbps:

    При ограничении 1 Mbps:

    При ограничении 500 Kbps:

    При ограничении 200 Kbps:

    При ограничении 100 Kbps:

    Особых предпочтений у меня нет, и Skype, и iChat работают хорошо. Но при наличии широкого канала стоит использовать iChat без ограничения полосы. Ещё хочу заметить, что обратная акустическая связь в iChat (в отличие от Skype) очень хорошо гасится. Но огромный минус iChat как средства для видеосвязи в том, что его используют очень немногие люди из моего списка контактов. Поэтому с избранными я общаюсь по iChat с максимальными настройками качества, а с остальными - через Skype, благо его используют очень многие.