среда, 11 июня 2014 г.

Написание модели для iOS

Все-таки написание модели для нового проекта полностью на Objective-C++ оказалось не такой хорошей идеей как это казалось на первый взгляд. Конечно, работа со строками, коллекциями и алгоритмами намного приятнее на С++ чем на Objective-C в связи с строгой проверкой типов, но возникли непредвиденные осложнения:

  • очень не удобно (многословно) преобразовывать между std::string и NSString*
  • фактическое отсутствие в С++ на уровне языка удобного механизма сериализации (в отличии от objective-c)
  • очень слабая поддержка в XCode Objective-C++ (например не работает рефакторинг, не очень удобно создавать новые файлы). Тут очень помогает AppCode последней версии, но у него хватает своих недостатков: например после выхода XCode 6 preview он опять безнадежно устарел
  • Для Core Data невозможно генерировать классы на С++ (что ожидаемо) - а это в итоге получается довольно большая часть модели
  • ARC все-таки намного менее многословно чем smart pointers :).
 Недавний выход Swift собственно показал, какой теперь самый удобный язык для написания приложений для ios - замыкания, статическая проверка типов, функциональность, продвинутые enums, pattern matching, вывод типов. В общем очень много напоминает Scala, что не может не радовать. Как итог кажется, что весь новый код стоит уже пробовать писать на Swift,  и старый код на Objective-C++ потихоньку переводить на новый язык, благо интеграция между языками очень хорошая.

Языки

  • до 2011: C, C++, Perl
  • 2011: Erlang, Python
  • 2012: Java, Objective-C
  • 2013: Scala, Javascript (+ HTML5, CSS)
  • 2014: SQL, Swift ...
Исключая всякий шлак типа Pascal, Basic, Assembler и т.п.

суббота, 31 августа 2013 г.

Пара слов о легальности

Давно в тайне лелеял мечту полностью отказаться от использования нелегального контента. Этому мешало лень, отсутствие нужного легального контента, предоставляемого в удобной форме, деньги (а точнее их нехватка). Время шло - ситуация потихоньку менялась, что-то исправлялось в лучшую сторону и сейчас уже можно подвести некоторые предварительные итоги. Итак, какой-же контент хочется сделать полностью легальным:

  1. ПО и компьютерные игры
  2. Музыка
  3. Фильмы
  4. Сериалы
  5. Подкасты
  6. Футбольные трансляции
  7. Книги
  8. Журналы
  9. Аудио книги
Это вроде весь список того, чем я регулярно пользуюсь. Теперь рассмотри текущую ситуацию по каждому пункту подробнее.

ПО и компьютерные игры сейчас фактически полностью продаются онлайн и нет никаких проблем с доступом к контекнту (особенно если не нужна русская локализация). Цена так же падает (особенно на программы под ios). Таким образом у меня абсолютно все программы и игры легальны - как на всех мобильных устройствах, так и на компьютере.

После выхода iTunes с музыкой в России вопрос в легальном приобретении отпал моментально, благодаря отличной полноте и вполне разумным ценам. В итоге весь каталог с пиратской музыкой был безжалостно удален и ему на замену в iTunes были куплены аналоги. Да, пришлось раскошелиться, но дело того стоило.   

C фильмами дело сложнее - в iTunes отличные цены на прокат фильмов (речь конечно только про HD качество), но есть два недостатка: 
- не для всех фильмов есть прокат (а стоимость покупки превышает 300 рублей, да и не пересматриваю я обычно фильмы по 2 раза)
- очень маленький выбор фильмов. По сравнению с музыкой это просто катастрофа.
В итоге то что есть смотрим легально через Apple TV, того чего нет приходится качать через торренты.

С сериалами ситуация намного хуже, чем с фильмами. Где онлайн в России можно купить легальную копию "Игры престолов" абсолютно не ясно. В итоге тут пока полный провал и единственным спасением являются торренты.

Подкасты доступны абсолютно бесплатно и удобно скачиваются - тут вообще нет проблем с легальностью, что очень радует.

После выпуска программы для iOS от НТВ-Плюс с поддержкой AirPlay футбольные трансляции почти перестали быть проблемой. За сто баксов в год можно получить легальный просмотр Лиги чемпионов, Лиги Европы, Чемпионатов России, Италии, Германии и Испании. А так же разных программ НТВ-Футбол и записи всех прошедших игр. Для полного счастья не хватает только чемпионата Англии - надеюсь в следующим году добавят.

С книгами все сложно. С одной стороны на iOS куча отличных читалок с достаточно хорошим разнообразием внтуренних покупок. Но я не привык читать на планшетах, а предпочитаю электронную книгу - на нее же купить легально что-то достаточно затруднительно, так что тут ситуация у меня плачевная и единственным выходом видится переход на планшеты.

Журналы уже фактически полностью переехали он-лайн так что подписаться в iTunes на все интересное (в том числе и из США) не составляет проблем.

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

Итого:
  1. ПО и компьютерные игры - 100%
  2. Музыка - 100%
  3. Фильмы - 60%
  4. Сериалы - 0%
  5. Подкасты - 100%
  6. Футбольные трансляции - 90%
  7. Книги - 0%
  8. Журналы - 100%
  9. Аудио книги - 100%
В среднем получаем 72% легальности. Есть куда стремиться как мне так и производителям контента.

воскресенье, 11 августа 2013 г.

Не угнаться

Прочитав (а в некоторых местах и пробежав) недавно две книги, связанные с программирование под iOS, пришел для себя к неутешительному выводу: читать печатные книги по программированию для iOS не новичку бесполезно (да впрочем и новичку не особо полезно). Объясню.

Вообще Apple молодцы. Они двигают iOS и Objective-C вперед семимильными шагами с каждым релизом. Кажется вот совсем недавно только слегка освоились с новшествами iOS 6 и бах - встречайте - на пороге уже iOS 7 с не то что холмиком, целой горой, новшеств, освоить которых еще надо постараться.

Вообще история развития поражает динамикой и смелостью в принятии решений: очень долго считали ручками ссылки и были довольны как бегемот, когда в итоге не текла память? Получите: ARC - и забудьте о ручном подсчете  и при это не надо раскапывать gc! Привыкли к xib файлам и те стали для вас что сын родной? Так не расслабляйтесь! Вот вам storyboard и не чувствуйте себя ни в чем ущемленным. Вы уже прекрасно плаваете в омуте делегатов, интерфейсов, data source и прочих суровых представителей ООП? А как насчет элегантно вписать в свою картину мира лямбды (под названием блоков)? В общем в этой истории так просто в седле не посидишь - все время надо держать равновесие что бы не полететь.

Бедные авторы книг по Objective-C и (особенно) по iOS стараются и пыхтят как могут. Выпускают по 25 подправленных и улучшенных изданий своих книг, фиксят свои примеры на сайтах и вообще трудятся как пчелки. Но не складывается аленький цветочек. Книги уже устарели более чем на половину когда доходят до читателя. Примеры уже не соответствуют текущим рекомендациям Apple, а умные советы, которыми стараются делиться авторы, уже пахнут нафталином. Даже если автор путем невероятных усилий успевает издать книгу с описанием свежих iOS или Objective-C в срок, содержимое книги вызывает полное разочарование - все по верхам, никакого заплыва на глубину: у автора просто банально не было времени, что бы просто даже окунуться не то что нырнуть - Apple жмет на пятки.

И в итоге у автора остается один более-менее нормальный вариант - писать книгу для новичков. Описать как открыть XCode и создать в нем первый проект, как нарисовать свой первый экран и, конечно,  как же написать этот волшебный текст "Hello world". Ну не мило ли? Да может эти примеры и советы слегка устареют когда юный (или не очень) любитель программирования начнет читать сие произведение, но это не страшно так как:
1. основные принципы все равно будут более-менее верными,
2. новичок все равно ничего не заметит по первости.

Так что не тратьте ваше время и деньги на эти книги. Начните лучше с официальной документации Apple - она всегда актуальна и намного полнее и точнее чем все то, что можно найти на Amazon.

понедельник, 8 июля 2013 г.

Scala: делаем enterprise по новому



Java очень популярен в enterprise разработке и фактически является стандартом де-факто в этой области. Среди его многочисленных достоинств есть и существенные недостатки, среди которых главным, с моей точки зрения, является отсутствие фана при его использовании. Поясню. Очень сложно получать удовольствие от программирования если использование текущего языка не "возбуждает". И чем больше пишешь на Java чем больше он кажется пресным, скучным и не интересным. Начинают раздражать все его устаревшие конструкции, длинные имена, сплошной ООП, классы в отдельных файлах на каждый чих и т.д. Хочется использовать что-то новенькое и свежее, но при этом не потерять возможность вызывать те стопятьсот прекрасных библиотек на Java, которые мы привыкли использовать каждый день. Решением данной проблемы являются новые языки программирования появившиеся последние несколько лет на JVM: Clojure, Groovy и Scala. Первый очень интересный, но сильно функциональный и у него слишком много скобок, так что пока отложим; второй является динамическим, так что не подходит для больших систем, а вот третий претендент выглядит очень интересным. У него статическая типизация, поддержка ООП, функционального программирования, отличная интеграция с Java и еще куча классных плюшек. Кроме того на нем уже было написано несколько проектов у нас в отделе. Так что новую задачу мы решили делать именно на Scala.

Для изучения Scala прочитал две книги: Programming in Scala от создателя языка Мартина Одерски и Scala in Depth от прожженного перца Joshua D. Suereth. Первая книга произвела просто грандиозное впечатление - без сомнения одна из лучших книг по языкам программирования, которые я читал (вполне может соперничать с тем же Страутрупом). Да, описана не самая свежая версия 2.8; да, есть уже устаревшие разделы (в частности про нативные акторы); да, некоторые сложные темы освещены не до конца, как выяснилось в последствии, но все это меркнет перед отличным изложением, продуманное структурой и понятными примерами. Конечно, возможно на меня такое впечатление произвел сам язык, и поэтому книга показалась особенной, но в любом случае, если надо научиться программировать на Scala, то надо читать Programming in Scala - там есть все что бы начать писать свои собственные классные программы.



Вторая книга представляет из себя этакую смесь полезных советов в стиле Майерса/Шилда/Блоха с разделами особенно глубокого погружения в различные аспекты языка. Описывается версия 2.9. Затрагиваются такие темы, как стиль, интеграция с java, акторы (да, опять устаревшая часть), ООП, функцианальное программирования и т.д. Особенно большие разделы просвещенны системе типов и implicit'ам. Темы очень важные и действительно сложные (но что за магия оказывается при этом на кончиках пальцев!). Вообще вся книга далеко не для новичков - лучше иметь уже хотя бы небольшой опыт продакшен разработки на языке что бы понимать некоторые вещи. В целом, must read для всех, кто пишет на Scala.  

В качестве одной из killer фич языка являются акторы Akka (стандарт с версии 2.10) - созданы по мотивам акторов в Erlang. Писать многопоточные , распределенные программы на них удобно и, я бы сказал, кайфово. Отличная документация по Akka есть на сайте - вроде скоро обещают выпустить пару стоящих книг.

Поддержка Scala есть в IntelliJ IDEA в виде плагина. Поддержка хуже чем для Java, наверное на порядок (но на 2 порядка лучше чем то, что сейчас есть в разных IDE для C++), что связанно со сложностью языка. Есть удобный REPL и фактически прозрачная интеграция с кодом на Java.

Подводя итоги: язык - первый сорт. Книги по нему уже есть высшего качества (чего не скажешь о некоторых других интересных языках). Давно уже я не ловил такой кайф от программирования, наверное в последний раз это было во время моих экспериментов с Erlang и с написанием С++ проекта без legacy-кода - на чистом boost. Если еще не попробовали, очень рекомендую!

пятница, 29 марта 2013 г.

Новые планы на ближайшее время

Продолжая славную традицию личных около рабочих планов, начатую тут, решил написать новый список. Наученный опытом полученным от анализа предыдущих планов решил сразу увеличить срок выполнения для новых и установить их в районе года - полтора.  Опять разделим список на приоритетные задачи и менее важные. Итак приступим. Задачи в каждом списке в произвольном порядке.

Приоритетный список:

  1. Изучить язык Scala и написать проект на нем. Этот язык мне давно интересен и очень хочется его потрогать. Так как за прошедший год успел освоиться с jvm и стандартной библиотекой Java, то попробовать на jvm новый язык кажется очень логичным. Scala у нас уже кое-где используется в отделе в продакшене и вроде парни довольны. В качестве IDE конечно пойдет IntelliJ.
  2. Обновить HabraReader и сделать второе приложение для iOS. Обновление выпустить просто необходимо и оно уже под парами. Для второго приложения уже есть куча идей: думаю будет очень интересно.
  3. Поработать с big data и NoSQL хранилищами. За последнее время по работе плотно столкнулся с этими вопросам и знаете, мне понравилось. К сожалению сейчас процесс несколько приостановился, но надеюсь что будет продолжение. Это как сладкие жевательные медвежонки - чем больше ешь, тем больше хочется.

Список с задачами второго приоритета:
  1. Попробовать реанимировать изучение English - перед этим придется найти стимул для этого. Задача переехала из предыдущего списка.
  2. Попасть на конференцию по интересующим сейчас тематикам (C++, Java, high load computations, iOS). Продолжаем с предыдущего года. Думаю эта задача так и будет тянуться все время. Уже планирую идти на JPoint.
  3. Углубить Python. Тут по пунктам: дочитать большой справочник по python, получше изучить батарейки из комплекта python,  попробовать плотно PyCharm в качестве IDE (вместо Sublime Text 2 и Emacs).
  4. Попробовать C++x11. Кажется компиляторы уже почти готовы. Да и Страуструп уже на пороге с новой книгой. Осталось только найти нужный проект.

Список получился интересный. Даже не терпится погрузиться в это.

среда, 27 марта 2013 г.

Ревизия планов

Когда то давно (уже больше года назад) я составил для себя список личного, около рабочего, развития. Время пролетело не заметно и прошло явно больше намеченных 3-4 месяцев и я решил проверить что из запланированного мной реализовано, и наверное составить новый список на грядущий год-полтора. Итак приступим к осмотру.

1. Расширить свои теоретические познания в области data mining. В списке сейчас 3 книги:
- Web Data Mining от Bing Liu (прочитано 70%). Отличное введение в майнинг и поисковые технологии
- Программируем коллективный разум от Тоби Сегаран (прочитано 10%). Книга с практическим уклоном с периметрами на python.
- Введение в информационный поиск от Маннинга и компания. Чем то похоже на первую книгу - читать пока не начал.

Тут прочитаны первые 2 книги (вот их обзор: здесь и здесь). Третья книга пока только бегло просмотрена. Итого выполнено на 70%.

2. Написать свое первое приложение для iOS и выложить в стор. Кажется что это будет очень интересно - во всяком случае первые впечатления от документации Apple оставили очень принятые впечатления. Objective C пока кажется несколько странным, но посмотрим...
Приложение написано и даже написал о нем пост на хабре. Сейчас готовится обновление с исправлением ошибок и новым функционалом. Об этом планирую потом написать подробнее. Итого выполнено на 100%.

3. Углубить знания в области Python. Все скрип ты писать исключительно на нем (вместо Perl) и изучить недавно купленный справочник по сему очень интересному языку.

Все скрипты теперь в основном пишутся мною на python. Perl, shell и awk остались только для поддержки legacy и для быстрого написания однострочников в основном по анализу данных. Справочник по python так пока и не был прочитан. Итого выполнено на 50%.

Теперь по планам из во второй очереди по приоритетам.

4. Продолжать изучать Java.
- дочитать двухтомник Хортсманна Java 2 (первый прочитан на 80%)
- продолжить изучение IntellyJ IDE
- возможно достанется какой-то проект на нем что-бы по практиковаться
Двухтомник прочитан и даже прочитаны еще две очень полезные книги о Java.  IntellyJ IDE активно используется. И даже готов проект на java (по бронированию отелей) - он уже вышел для карт. Планируются и дальнейшие релизы. Итого выполнено я бы оценил на 120%.

5. Попасть на конференцию по интересующим сейчас тематикам (C++, mining, high load computations, iOS).

В прошлом году был на двух интересных конференциях: HighLoad++ и Application Developer Days. В ближайшее время планирую посетить JPoint. Итого выполнено на 100%.
6. Попробовать реанимировать изучение English - перед этим придется найти стимул для этого.
Стимул за этот год фактически так и не был найден. Итог заслуженные 0%.

7. Дождаться ту пару книжек по boost которые я заказал и прочитать их.
Обе книги прочитал. Остался разочарован - уровень не самый высокий. Но все-таки выполнено на 100%.

Подведем итоги:
( 70 + 100 + 50 + 120 + 100 + 0 + 100) / 7 = 77%
В общем за срок ~ в 4 раза превышающий запланированный выполнено чуть больше чем на 3/4. Да конечно, было сделано и еще много всего не вошедшего в этот список, но вообще тенденция показательна. Скоро напишу про планы на ближайший год: возможно удастся их выполнить за пятилетку.