2012-08-31

Элементы ФП в ObjC (BlocksKit)

Когда-то жаловался, что ObjC у массива нету поиска по условию.
Нашел фреймворк, который позволяет писать на ObjC "функциональненько".
3 типа map (each:, apply:, map:), filter (select:, reject:), find(match:), any, all, none, fold (reduce:withBlock:). Плюс in-place варианты для мутабельных коллекций (performMap:, performSelect:, performReject:). Все принимают блок (ака лямбда).
Имхо, эта штука должна быть в ObjC "искаропки".

Юнит-тесты и iOS.

Хотел в новом проекте под ios сделать все кошерно -- отделить логику от гуя, обложить логику юнит-тестами. Ага, щаз.
Вынес логику как статическую либу -- потерялись некоторые методы. Проект компилируется без ошибок, а в рантайме падает - Unrecognized Selector. Как оказалось, без флага -ObjC линкер не подтягивает категории (аналог extension methods из C#) из статических библиотек. Благо сотрудник уже с таким сталкивался, подсказал.
Начал пилить тесты. Инициализация MagicRecord (библиотека для active record) падает с исключением "URL is nil".  Не находит схему данных. Смотрю внутрь бандла теста - лежит. Оказалось, она пытается загрузить схему из ресурсов главного модуля. А для юнит-тестов главным модулем является программа otest из SDK.

Upd. Юнит-тесты поборол. Решение со StackOverflow:

Assuming you have an application target called "MyApp"
  1. Add a new target of type "other/Cocoa Unit Testing Bundle" to the project e.g "MyAppTesting". Here all Unit test files are located.
  2. Go to MyAppTesting Build Phases and add MyApp as Target Dependency. This assures that MyApp is build before building the MyAppTesting target.
  3. Open the Build Settings of MyAppTesting and change
    • Bundle Loader: $(BUILT_PRODUCTS_DIR)/MyApp.app/MyApp
    • Test host: $(BUNDLE_LOADER)
    That causes the tests to run within MyApp.
  4. Open the Build Settings of MyApp and change
    • Symbols Hidden by default: NO (for both)
    • Strip debug Symbols during Copy: Debug:NO
    By doing so you do not have to include every .m-file into the test target.

2012-08-28

osx gui trick

System Preferences -> Keyboard -> Keyboard Shortcuts -> Application Shortcuts
добавить шорткат: All Applications, Zoom, Cmd+Shift+Up

После этого хоть как-то можно жить. Хотя до Win7 или Unity все еще далеко.

2012-08-23

Кавычки нам не нравятся

gcc-llvm в макос игнорирует параметры -isysroot и -idirafter, если их параметр указать в кавычках.
g++ -idirafter /opt/local/include
работает, а
g++ -idirafter "/opt/local/include"
нет.
И кто они после этого. 

2012-08-22

Java Borshch

Заходит джавист в столовую и говорит "Паблик статик файнал Борщ борщ равно нью Борщ, пожалуйста" (c) твитор
Upd. из жуйка: Заходит C-программист в столовую, а столовая его прибивает 11-м сигналом. Адресом ошибся.

2012-08-13

IT-ужастики

Увидел в твиттере и жуйке:

"Я знаю, что вы коммитили прошлым летом"
"Техасский мердж бензопилой"
"Страх и ненависть в репозитарии"
"Коммит не туда."
"От заката до коммита".


2012-08-09

libtool, мать его.

2012 год на дворе.
Космические корабли бороздят ...
А факин libtool до сих пор не умеет готовить пути с пробелами.
Ненависть!

2012-08-06

В копилку к OMG Ponies

в дополнение к OMG Ponies!!! (Aka Humanity: Epic Fail)

У одного из наших клиентов были проблемы с регистрацией продукта.
Ключ принимался, но сервер активации давал отлуп.
Локально проблема не воспроизводилась.
Попросили удаленный доступ, зашли к нему на машину.
Оказалось, что у пользователя сейчас 2555 год, ибо он находится в Таиланде, где официальным является Буддийский календарь.

2012-08-02

Вот что я ненавижу в программировании под linux/unix, так это PIC и RPATH.