face

Functions

Такое ощущение, что некоторые программисты решают, в какой класс добавить метод, с помощью бросания костей. При рефакторинге используют ту же методику. А уж если название метода отражает его суть, то звёзды сошлись совсем удачно.
face

NSToolBar in fullscreen

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

Стоило бы сразу догадаться по его анимации, да.
face

NSUserDefaults cache

NSUserDefaults вообще-то работает с кэшем настроек где-то в памяти системы. Так что ситуация, когда удаляешь com.mycompany.myapp.plist из ~/Library/Preferences/, запускаешь программу, а настройки на месте - это норма.

На помощь приходит консольная утилита defaults:

defaults delete com.mycompany.myapp

Ну, после этого можно и файл грохнуть - на всякий случай.
face

osx + zsh

zsh - очень удобная штука. Особенно круто с oh my zsh - гитовые ветки прямо в строке приветствия.

Про комплит по неполным путям и гитовым командам/веткам вообще молчу.
face

Причта о слепцах и слоне

Несколько учеников пришли к Будде и спросили: "Господин, живет в Саватти много бродячих отшельников и ученых, которые постоянно спорят; одни говорят, что мир является бесконечным и вечным и другие, что мир конечен. Некоторые утверждают,что душа умирает вместе с телом,а друге, что душа бессмертна, и тому подобное. Что, Господин, Вы скажете о них? "

Будда ответил: "Однажды некий раджа позвал слугу и сказал: "Добрый человек, иди, и собери в одном месте всех людей из Саватти, которые слепы от рождения и покажи им слона. "Хорошо, Господин", ответил слуга, и сделал так, как ему приказали. Он сказал слепым людям, собранным там: "Это слон", и одному человеку он представил голову слона, другому уши, третьему бивень, четвертому хобот, остальным ногу, спину, хвост и кисточку на хвосте.

Когда слепцы ощупали слона, раджа подошел к каждому из них и спросил: "Слепой человек, видел ли ты слона? Скажи мне, что есть слон?"

И человек, ощупавший голову слона ответил: "Господин, слон подобен горшку". Человек, которому досталось ухо, сказал: "Слон подобен ситу". Слепец, щупавший бивень, сказал, что слон - это лемех плуга, а тот, кто трогал хобот, ответил, что слон - это плуг. Остальные же ответили, что туловище слона - мешок с зерном, нога - столб, спина - ступа, хвост - пестик, а кисточка на хвосте - щётка.

Тогда они начали ссориться и кричать: "Да, это так! Нет, это неверно! Слон - вовсе не то! Да, слон подобен этому!" И так далее, пока не пришли к тому, с чего начали.

Братья, раджа был восхищен сценой.

Точно также эти праведники и учёные, проповедуют различные взгляды, не видя и вслепую... В их невежестве они склочны, несговорчивы и утверждают, что реальность есть то или это."

И затем Великий объяснил значение своих слов, произнеся следующее:

"О, как пререкаются и цепляются те, кто требуют
Для проповедника и монаха достойное имя!
Цепляются к каждому, ссорясь,
Такие люди видят только одну сторону вещи."
face

install own ios app on a jailed device

Оказалось, что всё предельно просто. Ну, или беспредельно просто.

Открываем файл /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/SDKSettings.plist в люб[им]ом текстовом редакторе, находим ключик CODE_SIGNING_REQUIRED, значение для него ставим NO. Сохраняем.

В настройках проекта теперь надо выбрать везде "Don't Code Sign", выбрать сборку для девайса, нажать Product -> Archive. Всё собирается, открывается органайзер, в нём на нашем архиве вызываем меню, показать в файндере. Там жмём "показать содержимое пакета", заходим в Products/Applications, берём наш .app и драг-н-дропаем его в тунец, прямо на наш девайс. Собственно, прорамма установлена!

Теперь в тунце выбираем медиатека -> программы, оттуда драг-н-дропаем нашу прогу куда-нибудь в файндер и - вуаля! - у нас есть .ipa, готовый к установке на любой джейлнутый девайс.
face

photoshop and adobe

Бесит. Ставлю фотошоп на мак - и любуюсь непрерывно крутящимся апдейтером в системном меню (его ещё принято называть треем). Ладно, лицензия есть, могу и обновиться. Но НЕ ХОЧУ! Но всеми нами любимая и уважаемая корпорация adobe не даёт нам права настроить это поведение.

Лечим так:

$ ps -A | grep Upd
 9993 ??         0:00.56 /Library/Application Support/Adobe/OOBE/PDApp/UWA/AAM Updates Notifier.app/Contents/MacOS/AAM Updates Notifier -psn_0_3334958
kill -9 9993
open /Library/Application\ Support/Adobe/OOBE/PDApp/UWA/


Далее переименовываем "AAM Updates Notifier.app" в "AAM Updates Notifier [killed].app". Для хедшота можно ещё и "Adobe Application Manager (Updater)" переименовать.

И всё. Ну а если захотим апдейтнуться, возвращаем всё как было и уходим в ребут (релогин вроде тоже покатит).
face

ObjC

А так всё просто - добавил к чужому классу пару методов, переопределил ещё пару, переименовал старые... И всё это без наследования и доступа к исходникам класса. Прямо в рантайме.

Магия.