Кстати в тему продвинутости студентов MIT: программа «выш»мата бакалавриата у меня вызвала гомерический хохот, лекции по Computer Science — грусть и печаль. В MIT Master (наше магистратура\аспирантура) хорош, очень хорош, но бакалавриат в большей своей части это курам насмех.
Ваш первый пост вдохновил меня начать писать лекции на ноутбуке. Действительно, какого черта использовать ручку и бумагу, когда я печатаю со скоростью устной речи лектора? Но все-же заставить себя использовать для этих целей LibreOffice не смог по той простой причине, что в Mac не нативные приложения выглядят и чувствуются так же неуместно, как если бы в BMW вставить обивку от Mercedes. Не то, чтобы обивка Mercedes плоха, но тут ей не место. Да и я любитель хардкора, потому решил посмотреть в сторону LaTeX и вот уже второй день осваиваю новый для себя инструмент. Пока что склоняюсь к использовании Sublime Text 2 как редактора, завтра напишу makefile, сделаю преамбулу с tufte-latex и послезавтра опробую в полевых условиях :). Спасибо, что сподвигли.
Кто может подсказать хорошие макросы для быстрого вбивания матана (много матана, _очень_ много матана, чтоб его) и классы документов для оформления лабораторных работ? Жду не дождусь, когда у меня будет целый, собственноручно написанный pdf со всеми лекциями кафедры вышмата и общей физики МФТИ за третий семестр ^_^.
Кстати я один такой, кому в маке bash да vim чувствуются роднее QT? От последнего аж передергивает.
Как оказалось, у них допилено не до конца, и тык по нотификации приводит не к тому, к чему ожидалось. У меня это реализованно так, как того ожидает юзверь. Я отписал им с предложением помочь. Эххх. Теперь удалять все эти гроулы и возвращать обратно свой CN :)
Модифицировать сам гроул нельзя, потому что он у всех разных версий, а у кого-то вообще жестко залинкован в бинарник (да, есть и такие). Более того, патчевание (есть такое слово?) бинарника приведет к потере подписи кода, из-за чего KeyChain перестанет выдавать приложению ключи. И это жестко нарушает лицензию. Вообще изменять бинарник это Bad.
ЗЫ: Да-да, у каждого приложения свой Growl.Framework и, получается, нужно каждый патчить, при том разный патч под разные версии. Смысл?
А модифицированный гроул == Hiss. Результат такой отправки виден на 1 скриншоте. Отправили нотификацию из процесса гроула — получите нотиф от его же лица. По другому — только редактируя (так же, как я, инжектируясь, но уже в сам Notification Center) поведение самого NC (что собственно и сделали разработчки Bark, см внизу коментариев).
Я думаю, что модификация одной сущности (пусть и без исходников, в случае Obj-C хвадает дампа header'ов в силу любвиКОченьSelfDesrcribingНазваниямМетодов(С) ) гораздо более пряморука, чем модификация целой оравы онных в слепую, как мне кажется :) В любом случае, думаю мой подход тоже имеет право на существование, правда требует, наверное, доработки :)
Ну вообще прямое ее назначение — это и есть внедрение кода :D Сам автор для того его и писал. Кстати очень удобная штука. Например с помощью нее я научил Ecoute принимать клик мышки за даблклик, и листать список песен нормально, а не как было сделано изначально. Очень удобная штука этот SIMBL :)
Ну тык приложения же нужно *заставить* делать нужное, как-то. Это же какой-то код, и он где-то должен исполнятся. В нашем случае код работы с NC *вставляется* в приложения. Регистрация с гроулом была написана самими разработчиками приложения (очевидно :) ), и она полезна тем, что предоставляет список типов нотификаций (тот самый список, который видно в настройках CentralNotifier у приложений).
Регистрироваться в Notification Center не нужно (там, на момент 13.08.12) не было никакой регистрации. Приложение просто шлет нотификацию, а NotificationCenter сам догадывается, кто и что ему прислал. Регистрация с гроулом (какбы регистрация, на самом же деле гроул, например, выключен) позволяет получить этот список, о котором говорил выше, и получить чуть больше контроля над нотификациями.
Думаю самый быстрый способ понять, как это работает, это скачать исходник и посмотреть: кода, как впрочем и коментариев, там мало, и все достаточно прозрачно выглядит :)
Ого! Меня опередели, как с пряморукостью так и со скоростью! :)
Но я уверен, что в начале августа Bark'a не существовало. :) в любом случае я получил много удовольствия и знаний, создавая CN, оно того стоило :)
Ага. 1.5.3 (stable) тоже. Удивительно. Правда, прям в танке живу.
С другой стороны, мой способ позволяет указать, какие нотификации нужны, какие нет, а какие прятать. (Например, если бы нотификации Connected сохранялись в NC — мне бы это очень не нравилось :) )
Где видана на то проверка? :) Да и не представляю, как это можно засечь, ведь ни файлы не модифицируются, ни что бы то ни было еще. Просто происходит подмена указателя на метод, так сказать. Интересно, как это можно поймать. Надо безопасников потыкать…
Хм, да, действительно — Adium 1.5.3 добавил Growl SDK 2. А по клику в нотификацию адиум выскакивает? И есть ли где-нибудь настройки, какие нотификации отображать, какие нет, и хранить их, или нет (например нотификациям Connected в центре явно не место. Отобразили и хватит)?
Что-то я в пещере прям живу, надо было месяц назад это дело выпустить, тогда было бы актуальней некуда :D
На телефоне не торчат иконки в баре сверху (с удивленными глазами полез смотреть на свой iPhone с iOS5). У меня около дофига нотификаций и никаких иконок нет. Сеть, время, замочек да батарейка.
И да, зависит от приложения. Разработчик так написал сам :).
SIMBL.osax — это основной бандл SIMBL.
Проблема: SIMBL не инжектируется в приложения, если у них нет иконки в Dock. (Да, да, да, WTF). Проблема в том, что если у приложения нет в доке иконки, то это NSUIElement приложение, или в новой терминологии — Agent Application. Почти Daemon, только с гуей. И, по каким-то не ясным мне соображениям, имеет место задокументированный, но трудно находимый факт: NSWorkspace не отсылает нотификации о запуске Agent-Apps, а именно эти нотификации запуска слушает SIMBL.
Я его модифицировал и теперь слушаю старты процессов через функции Carbon.
Кто может подсказать хорошие макросы для быстрого вбивания матана (много матана, _очень_ много матана, чтоб его) и классы документов для оформления лабораторных работ? Жду не дождусь, когда у меня будет целый, собственноручно написанный pdf со всеми лекциями кафедры вышмата и общей физики МФТИ за третий семестр ^_^.
Кстати я один такой, кому в маке bash да vim чувствуются роднее QT? От последнего аж передергивает.
ЗЫ: Да-да, у каждого приложения свой Growl.Framework и, получается, нужно каждый патчить, при том разный патч под разные версии. Смысл?
А модифицированный гроул == Hiss. Результат такой отправки виден на 1 скриншоте. Отправили нотификацию из процесса гроула — получите нотиф от его же лица. По другому — только редактируя (так же, как я, инжектируясь, но уже в сам Notification Center) поведение самого NC (что собственно и сделали разработчки Bark, см внизу коментариев).
Регистрироваться в Notification Center не нужно (там, на момент 13.08.12) не было никакой регистрации. Приложение просто шлет нотификацию, а NotificationCenter сам догадывается, кто и что ему прислал. Регистрация с гроулом (какбы регистрация, на самом же деле гроул, например, выключен) позволяет получить этот список, о котором говорил выше, и получить чуть больше контроля над нотификациями.
Думаю самый быстрый способ понять, как это работает, это скачать исходник и посмотреть: кода, как впрочем и коментариев, там мало, и все достаточно прозрачно выглядит :)
Но я уверен, что в начале августа Bark'a не существовало. :) в любом случае я получил много удовольствия и знаний, создавая CN, оно того стоило :)
С другой стороны, мой способ позволяет указать, какие нотификации нужны, какие нет, а какие прятать. (Например, если бы нотификации Connected сохранялись в NC — мне бы это очень не нравилось :) )
Что-то я в пещере прям живу, надо было месяц назад это дело выпустить, тогда было бы актуальней некуда :D
И да, зависит от приложения. Разработчик так написал сам :).
Проблема: SIMBL не инжектируется в приложения, если у них нет иконки в Dock. (Да, да, да, WTF). Проблема в том, что если у приложения нет в доке иконки, то это NSUIElement приложение, или в новой терминологии — Agent Application. Почти Daemon, только с гуей. И, по каким-то не ясным мне соображениям, имеет место задокументированный, но трудно находимый факт: NSWorkspace не отсылает нотификации о запуске Agent-Apps, а именно эти нотификации запуска слушает SIMBL.
Я его модифицировал и теперь слушаю старты процессов через функции Carbon.