<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" >

  <channel>
    <title><![CDATA[Статьи]]></title>
    <link>https://habr.com/ru/users/code_monkey/publications/articles/</link>
    <description><![CDATA[Хабр: статьи пользователя code_monkey]]></description>
    <language>ru</language>
    <managingEditor>editor@habr.com</managingEditor>
    <generator>habr.com</generator>
    <pubDate>Sat, 11 Apr 2026 22:39:37 GMT</pubDate>
    
    
      <image>
        <link>https://habr.com/ru/</link>
        <url>https://habrastorage.org/webt/ym/el/wk/ymelwk3zy1gawz4nkejl_-ammtc.png</url>
        <title>Хабр</title>
      </image>
    

    
      
        
    
    <item>
      <title><![CDATA[С++ для Perl программистов]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/215339/</guid>
      <link>https://habr.com/ru/articles/215339/?utm_campaign=215339&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[Есть старая шутка, что программист на фортране будет писать на фортране на любом языке программирования.<br/>
<br/>
Вот программа на 3 строки, которая компилируется любым C++11 компилятором, после этого нормально запускается и работает.<br/>
<pre><code class="cpp">int main(){
    return !&lt;:]()&lt;%;[=:&gt;(){&lt;:&](){;%&gt;();%&gt;();};
}
</code></pre><br/>
<br/>
Пример в <a href="http://ideone.com/poq7SJ">Online IDE</a><br/>
В принципе эту строку можно использовать как детектор на C++ программистов — не все сразу могут понять как это работает.<br/>
 <a href="https://habr.com/ru/articles/215339/?utm_campaign=215339&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Tue, 11 Mar 2014 10:22:33 GMT</pubDate>
      <dc:creator><![CDATA[code_monkey]]></dc:creator>
      <category><![CDATA[Ненормальное программирование]]></category><category><![CDATA[Программирование]]></category><category><![CDATA[C++]]></category>
      <category><![CDATA[C++11]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Не бойтесь велосипедов. Или еще один Grand Central Dispatch (GCD) на C++11]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/186200/</guid>
      <link>https://habr.com/ru/articles/186200/?utm_campaign=186200&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<h4>ИМХО (Имею Мнение Хрен Оспоришь)</h4><br/>
С моей точки зрения самое полезное, что может сделать программист для повышения своего профессионального уровня — это написание велосипедов. Велосипедостроение — очень увлекательный процесс. Иногда он увлекает больше, чем задача, ради которой сам велосипед и затевался. При написании велосипеда (под велосипедом я понимаю реализацию уже существующего) происходит более глубокое понимание уже существующих решений и техник.<br/>
<img src="https://habrastorage.org/storage2/15a/1bf/b69/15a1bfb6986f94d613aeaab475a50e86.jpg"/><br/>
 <a href="https://habr.com/ru/articles/186200/?utm_campaign=186200&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Wed, 10 Jul 2013 17:59:41 GMT</pubDate>
      <dc:creator><![CDATA[code_monkey]]></dc:creator>
      <category><![CDATA[Программирование]]></category><category><![CDATA[C++]]></category><category><![CDATA[Параллельное программирование]]></category>
      <category><![CDATA[c++11]]></category><category><![CDATA[параллельное программирование]]></category><category><![CDATA[GCD]]></category><category><![CDATA[велосипедостроение]]></category><category><![CDATA[велосипеды]]></category><category><![CDATA[велосипед на ракетном топливе]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Избавляемся от строковых констант в Objective-C]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/184394/</guid>
      <link>https://habr.com/ru/articles/184394/?utm_campaign=184394&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[Магические константы в коде — зло. Строковые константы в коде — еще большее зло.<br/>
И вроде бы от них никуда не денешься, они повсюду:<br/>
<br/>
1) При загрузке объектов из xib-ов:<br/>
<pre><code class="objectivec">MyView* view = [[[NSBundle mainBundle] loadNibNamed:@&quot;MyView&quot; owner:self options:nil] lastObject];</code></pre><br/>
<pre><code class="objectivec">MyViewController* controller = [MyViewController initWithNibName:@&quot;MyViewController&quot; bundle:nil];</code></pre><br/>
2) При работе с CoreData:<br/>
<pre><code class="objectivec">NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@&quot;MyCoreDataClass&quot; inManagedObjectContext:moc]];
[request setSortDescriptors:@[ [[NSSortDescriptor alloc] initWithKey:@&quot;someProperty&quot; ascending:NO] ]];</code></pre><br/>
3) Если вы используете KVO, то строки появляются и тут:<br/>
<pre><code class="objectivec">[self addObserver:someObservedObject 
       forKeyPath:@&quot;someProperty&quot;
          options:(NSKeyValueObservingOptionNew |  NSKeyValueObservingOptionOld) 
          context:nil];</code></pre><br/>
4) Ну и KVC:<br/>
<pre><code class="objectivec">NSInteger maxValue = [[arrayOfMyClassObjects valueForKeyPath:@&quot;@max.someProperty&quot;] intValue];</code></pre><br/>
5) Но даже если CoreData вы предпочитаете работу с SQLite напраямую, xib-ами вы брезгуете, то вот такой код вам должен быть знаком:<br/>
<pre><code class="objectivec">[self.tableView dequeueReusableCellWithIdentifier:@&quot;MyTableViewCell&quot;];</code></pre><br/>
6) Ну и когда Apple представила миру Storyboard — это было замечательно, если-бы не одно но:<br/>
<pre><code class="objectivec">[self performSegueWithIdentifier:@&quot;MySegue&quot; sender:nil]</code></pre><br/>
<pre><code class="objectivec">-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:( id )sender {
   if ( [segue.identifier isEqual:@&quot;MySegue&quot;] );
}</code></pre><br/>
Вы видите проблему? Она состоит в том, что компилятор никак не проверяет содержимое строк, поскольку не знает (да и не может в принципе знать), что в них содержится. И если вы опечатаетесь или измените значение соответствующих полей в xcdatamodel / xib / storyboard / переименуете property, то ошибка вылезет не на стадии компиляции, а в рантайме, и отловить и исправить ее будет дольше и дороже.<br/>
Так что-же можно сделать? <a href="https://habr.com/ru/articles/184394/?utm_campaign=184394&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Sun, 30 Jun 2013 11:32:03 GMT</pubDate>
      <dc:creator><![CDATA[code_monkey]]></dc:creator>
      <category><![CDATA[Программирование]]></category><category><![CDATA[Objective C]]></category>
      <category><![CDATA[CoreData]]></category><category><![CDATA[mogenerator]]></category><category><![CDATA[KVO]]></category><category><![CDATA[KVC]]></category><category><![CDATA[Storyboard]]></category><category><![CDATA[ssgenerator]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Простой JSON Schema валидатор для Objective-C]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/180923/</guid>
      <link>https://habr.com/ru/articles/180923/?utm_campaign=180923&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<h4>Или сказ о том, как разработка JSON валидатора превратилась в очередной JSON binding</h4><br/>
Пока нормальные разработчики пишут приложения я изобретаю велосипеды.<br/>
<br/>
Наверное многие разработчики сталкивались с ситуацией, когда мобильное приложение разрабатывается параллельно с бэкэндом. При этом частенько структуры данных, приходящие в ответ на запрос с сервера, могут меняться. Например, на стороне бэкэнда решат поменять именование одного из ключиков JSON-а, забыв предупредить о этом мобильную команду. Я уже не говорю про ситуации, когда CamelCase нотацию «внезапно» решили поменять на underscore или наоборот. Вы можете сказать, что налицо плохая организация процесса и недостаток общения команд, и будете абсолютно правы. Но когда приложение на смартфоне заказчика перестает работать на демо все взгляды устремляются на мобильщиков.<br/>
<br/>
 <a href="https://habr.com/ru/articles/180923/?utm_campaign=180923&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Один из способов решения этой проблемы - под катом</a>]]></description>
      
      <pubDate>Sat, 25 May 2013 20:45:59 GMT</pubDate>
      <dc:creator><![CDATA[code_monkey]]></dc:creator>
      <category><![CDATA[Objective C]]></category><category><![CDATA[Программирование]]></category><category><![CDATA[iOS]]></category>
      <category><![CDATA[objective-c]]></category><category><![CDATA[json]]></category><category><![CDATA[json-schema]]></category><category><![CDATA[validator]]></category><category><![CDATA[binding]]></category><category><![CDATA[iOS]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[HelloWorld под iOS с jailbreak]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/149402/</guid>
      <link>https://habr.com/ru/articles/149402/?utm_campaign=149402&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[Информации на русском языке о разработке под джеилбрэйкнутую iOS не так уж и много, так что надеюсь эта информация кому-нибудь пригодится.<br/>
 <a href="https://habr.com/ru/articles/149402/?utm_campaign=149402&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Подробности</a>]]></description>
      
      <pubDate>Fri, 10 Aug 2012 14:28:20 GMT</pubDate>
      <dc:creator><![CDATA[code_monkey]]></dc:creator>
      <category><![CDATA[Разработка мобильных приложений]]></category><category><![CDATA[Objective C]]></category><category><![CDATA[iOS]]></category>
      <category><![CDATA[iOS]]></category><category><![CDATA[jailbreak]]></category><category><![CDATA[development]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Добавляем Pattern Matching и параметризованные методы в Objective-C]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/123187/</guid>
      <link>https://habr.com/ru/articles/123187/?utm_campaign=123187&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[Все больше и больше статей на тему «добавь функциональные <s>косты</s> плюшки в свой любимый императивный язык программирования». <a href="http://habrahabr.ru/blogs/java/122919/">Вот недавний пример для Java</a>.<br/>
<br/>
В Objective-C не так давно были добавлены блоки (blocks), с помощью которых реализованы замыкания. Но хочется чего-то большего. Например сопоставления с образом (<a href="http://en.wikipedia.org/wiki/Pattern_matching">Pattern Matching</a>) и параметризованные методы. <br/>
<br/>
Исключительно Just For Fun попробуем добавить их в язык без патчинга компилятора и танцев с препроцессором, только средствами самого языка.<br/>
<br/>
Что из этого получилось?<br/>
 <a href="https://habr.com/ru/articles/123187/?utm_campaign=123187&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Fri, 01 Jul 2011 09:44:07 GMT</pubDate>
      <dc:creator><![CDATA[code_monkey]]></dc:creator>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[objective-c]]></category><category><![CDATA[runtime-модификация]]></category><category><![CDATA[pattern matching]]></category>
    </item>
  

  

  

	
  

  

  

      

      

      

    
  </channel>
</rss>
