Как стать автором
Обновить
12
0

Пользователь

Отправить сообщение

С++ для Perl программистов

Время на прочтение1 мин
Количество просмотров5.4K
Есть старая шутка, что программист на фортране будет писать на фортране на любом языке программирования.

Вот программа на 3 строки, которая компилируется любым C++11 компилятором, после этого нормально запускается и работает.
int main(){
    return !<:]()<%;[=:>(){<:&](){;%>();%>();};
}


Пример в Online IDE
В принципе эту строку можно использовать как детектор на C++ программистов — не все сразу могут понять как это работает.
Читать дальше →
Всего голосов 53: ↑17 и ↓36-19
Комментарии29

Не бойтесь велосипедов. Или еще один Grand Central Dispatch (GCD) на C++11

Время на прочтение8 мин
Количество просмотров22K

ИМХО (Имею Мнение Хрен Оспоришь)


С моей точки зрения самое полезное, что может сделать программист для повышения своего профессионального уровня — это написание велосипедов. Велосипедостроение — очень увлекательный процесс. Иногда он увлекает больше, чем задача, ради которой сам велосипед и затевался. При написании велосипеда (под велосипедом я понимаю реализацию уже существующего) происходит более глубокое понимание уже существующих решений и техник.

Читать дальше →
Всего голосов 24: ↑21 и ↓3+18
Комментарии26

Избавляемся от строковых констант в Objective-C

Время на прочтение5 мин
Количество просмотров14K
Магические константы в коде — зло. Строковые константы в коде — еще большее зло.
И вроде бы от них никуда не денешься, они повсюду:

1) При загрузке объектов из xib-ов:
MyView* view = [[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil] lastObject];

MyViewController* controller = [MyViewController initWithNibName:@"MyViewController" bundle:nil];

2) При работе с CoreData:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"MyCoreDataClass" inManagedObjectContext:moc]];
[request setSortDescriptors:@[ [[NSSortDescriptor alloc] initWithKey:@"someProperty" ascending:NO] ]];

3) Если вы используете KVO, то строки появляются и тут:
[self addObserver:someObservedObject 
       forKeyPath:@"someProperty"
          options:(NSKeyValueObservingOptionNew |  NSKeyValueObservingOptionOld) 
          context:nil];

4) Ну и KVC:
NSInteger maxValue = [[arrayOfMyClassObjects valueForKeyPath:@"@max.someProperty"] intValue];

5) Но даже если CoreData вы предпочитаете работу с SQLite напраямую, xib-ами вы брезгуете, то вот такой код вам должен быть знаком:
[self.tableView dequeueReusableCellWithIdentifier:@"MyTableViewCell"];

6) Ну и когда Apple представила миру Storyboard — это было замечательно, если-бы не одно но:
[self performSegueWithIdentifier:@"MySegue" sender:nil]

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:( id )sender {
   if ( [segue.identifier isEqual:@"MySegue"] );
}

Вы видите проблему? Она состоит в том, что компилятор никак не проверяет содержимое строк, поскольку не знает (да и не может в принципе знать), что в них содержится. И если вы опечатаетесь или измените значение соответствующих полей в xcdatamodel / xib / storyboard / переименуете property, то ошибка вылезет не на стадии компиляции, а в рантайме, и отловить и исправить ее будет дольше и дороже.
Так что-же можно сделать?
Читать дальше →
Всего голосов 30: ↑26 и ↓4+22
Комментарии41

Простой JSON Schema валидатор для Objective-C

Время на прочтение5 мин
Количество просмотров10K

Или сказ о том, как разработка JSON валидатора превратилась в очередной JSON binding


Пока нормальные разработчики пишут приложения я изобретаю велосипеды.

Наверное многие разработчики сталкивались с ситуацией, когда мобильное приложение разрабатывается параллельно с бэкэндом. При этом частенько структуры данных, приходящие в ответ на запрос с сервера, могут меняться. Например, на стороне бэкэнда решат поменять именование одного из ключиков JSON-а, забыв предупредить о этом мобильную команду. Я уже не говорю про ситуации, когда CamelCase нотацию «внезапно» решили поменять на underscore или наоборот. Вы можете сказать, что налицо плохая организация процесса и недостаток общения команд, и будете абсолютно правы. Но когда приложение на смартфоне заказчика перестает работать на демо все взгляды устремляются на мобильщиков.

Один из способов решения этой проблемы - под катом
Всего голосов 18: ↑13 и ↓5+8
Комментарии6

HelloWorld под iOS с jailbreak

Время на прочтение3 мин
Количество просмотров8.5K
Информации на русском языке о разработке под джеилбрэйкнутую iOS не так уж и много, так что надеюсь эта информация кому-нибудь пригодится.
Подробности
Всего голосов 24: ↑16 и ↓8+8
Комментарии5

Добавляем Pattern Matching и параметризованные методы в Objective-C

Время на прочтение8 мин
Количество просмотров2.2K
Все больше и больше статей на тему «добавь функциональные косты плюшки в свой любимый императивный язык программирования». Вот недавний пример для Java.

В Objective-C не так давно были добавлены блоки (blocks), с помощью которых реализованы замыкания. Но хочется чего-то большего. Например сопоставления с образом (Pattern Matching) и параметризованные методы.

Исключительно Just For Fun попробуем добавить их в язык без патчинга компилятора и танцев с препроцессором, только средствами самого языка.

Что из этого получилось?
Читать дальше →
Всего голосов 22: ↑17 и ↓5+12
Комментарии8

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность