Ne v kontakte Antisocial programmer's blog

Rogue Ninja support in CLion

Rogue Ninja support in CLion

    c++     clion     cmake     ninja     projects     dev

In a past few years I’ve been using C++ as my main programming language and during this time I’ve been in constant search for better IDE for it which would run on Linux. I was very happy when Jetbrains released CLion IDE and immediately gave it a try. Though there is a lot to improve yet, I’d say that it has best autocompletion and modern C++ support among C++ IDEs on Linux. The only problem I had with it was a build toolchain which it uses.

Currently CLion supports only CMake projects (with is totally fine for me) with GNU Make generator (which is sad). When using CMake, I always preferred Ninja build system, especially for large projects like one I work on as my main job. For some reason Make does not a very good job at incremental builds. For example, even if there is nothing to rebuild, it spends 5 seconds to only verify this fact, which is pretty annoying. On other hand, Ninja does this in like 200 ms.

Unfortunately, CLion developers currently have no plans on supporting Ninja (I realize that they have many things to do way more important than Ninja support), so I decided to solve this problem by myself.

CMake-Ninja wrapper for CLion

Read more →

Что такое веб фреймворки?

Что такое веб фреймворки?

    thoughts     dev     web

Я уже довольно давно являюсь слушателем Радио-Т и, хотя частенько не разделяю мнения ведущих, нахожу шоу довольно интересным. Однако, в выпуске Radio-T от 8 марта было два эпизода, которые меня слегка покоробили. Первый — фирменный троллинг от Umputun’a на тему ненужности сисадминов. Впрочем, я склонен считать, что у него с логикой все в порядке, и этот пассаж является всего лишь любимой, хоть и надоевшей, шуткой.

Второй раз я расстроился в тот момент, когда ни гости, ни ведущие подкаста не смогли дать внятного ответа на поставленный Umputun’ом вопрос о том, что такое веб-фреймворки. Между тем, этот вопрос одновременно и близок мне, и достаточно прост. На него я и попытаюсь ответить.

Что такое фреймфорк?

В программистском миру бытует путаница между понятиями «библиотека» и «фреймворк», поэтому я начну именно с них.

Read more →

Притча о Junior'е

Притча о Junior'е

    thoughts     dev     articles     essay

Хочу предложить вашему вниманию историю, которая приснилась мне не далее как сегодня под утро. Проснувшись, я первым делом подумал: “ну и к чему вообще мне это приснилось?..”, но потом понял, что этот нехитрый сюжет имеет прямое отношение к нашей отрасли. Строго говоря, это применимо к молодым специалистам практически в любой области, но именно в программировании это цветёт пышным цветом и даёт сочные плоды :-) Сон получился на удивление связный, так что привожу его почти без литературной правки. История приключилась с двумя мальчишками-приятелями, будем называть их Сашей и Петей. День был солнечный, тёплый — пожалуй, идеальный день с точки зрения шестиклассника на каникулах. Поэтому, когда Петя зашёл за Сашей и позвал его гулять, Саша немедля согласился, задержавшись лишь чтобы завязать шнурки кроссовок. Родители были на работе, а потому предполагалось, что они не против прогулки, по крайней мере, если они о ней не узнают.

Здесь будет уместно заметить, что жил Саша на шестом этаже довольно нового дома, и его подъезд до сих пор избегала неприятная участь быть загаженным с первого этажа до последнего. Сашу не особо интересовало, кто за этим присматривал, но кого вообще могут интересовать такие скучные вещи? С другой стороны, Саше было приятно, что их подъезд был чистый и аккуратный, по крайней мере в тех местах, где Саше доводилось проходить.

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

— Петь, смотри, какой-то дурак нам стену покорябал! Кажется, у нас дома в коридоре как раз стояла банка с краской именно такого цвета! Ты спускайся и зови пацанов в футбол, а я сейчас подкрашу и к вам!

Read more →

Обновления для разработчиков и людей — несерьезно о серьезном.

Обновления для разработчиков и людей — несерьезно о серьезном.

    dev     articles     database     migrations

Пост вышел многабукаф, поэтому ленивые могут пропускать части, помеченные как иллюстративные.

При разработке хоть сколь-нибудь сложных систем среди прочих всегда возникает проблема обновлений, а именно — миграции данных со старой версии в новую. И все бы ничего, но структуры данных имеют свойство меняться от версии к версии. Для веб-приложений это в первую очередь касается схемы БД, но сюда же относится изменение формата конфига, удаление/добавление отдельных параметров настроек, пересборка разных кэшей, индексов и так далее.

Типичный подход к решению этой проблемы выглядит так:

  1. Делается публичный релиз продукта.
  2. Начинается работа над следующим релизом, в ходе которой пишется и обновляется конвертор с предыдущего релиза в будущий. Таким образом, текущий релиз всегда можно обновить до dev-ветки.
  3. Публикуется новый релиз, который способен спокойно обновиться с предыдущего, пользователи счастливы.

Read more →

Путь во фрилансеры

Путь во фрилансеры

    thoughts     dev     freelance     phpbb

Сегодня у меня немного философское настроение, и по такому случаю я хочу поделиться кое-каким своим опытом, связанным с фрилансом. В первую очередь, я, опираясь на свой опыт, попытаюсь описать ещё один способ начала фрилансерской деятельности.

Сам я довольно долго занимался фрилансом, в основном выполняя заказы, связанные с форумным движком phpBB. В прошедшем времени — потому что этот род деятельности мне наскучил, мне стало больше нравиться заниматься длительными и сложными проектами вроде Plesk Mobile или phpBB Constructor. Однако, это не значит, что во фрилансе нет денег или там только нудятина. Наоборот, он прекрасно подойдет тем, кто любит делать много не очень больших, но разнообразных проектов.

И так, если вы желаете заняться фрилансом, вот что я могу вам посоветовать.

0. Специализируйтесь.

Read more →

С днем программиста!

    life     dev     congrats

Поздравляю, коллеги, с профессиональным праздником!

Не буду долго перечислять пожелания — всё всем и так понятно :-) Ну а кому все же хочется пожеланий — добро пожаловать на Хабр, по такому случаю там целых два топика: первый и второй. А для тех, кому не лень пошевелить мозгами, там же есть набор праздничных головоломок. Сумеете решить?

Возвращаясь к пожеланиям, я пожелаю лишь одно: не пускайте корни в своей берлоге. Она хоть и уютная, но за ее пределами есть много интересного!

Read more →

MODX Library - в Open Source!

MODX Library - в Open Source!

    dev     soft     projects     phpbb     modx

Как я и планировал, я начинаю по-тихоньку публиковать полезные наработки, использованные мною в phpBB Constructor. Сегодня черед, пожалуй, наиболее важной из них — это MODX Library.

MODX Library — это библиотека, обеспечивающая автоматическую обработку инструкций по установке модов в формате MODX. Идейно этот формат является развитием патчей со значительно расширенным набором операций, удобных при установке модов. В настоящее время подавляющее большинство модов для phpBB3 распространяется именно в этом формате. MODX Library практически полностью реализует поддержку последней версии стандарта MODX 1.2.5, отличия от стандарта описаны в README файле.

Замечу, что именно с этой библиотеки началась работа над phpBB Constructor в начале февраля 2010 года. Впрочем, история разработки конструктора — это отдельная и местами поучительная тема, которой я коснусь как-нибудь в другой раз.

Идеологическим предшественником этой библиотеки была другая моя, гораздо более ранняя разработка под названием Lite MOD Parser, занимавшегося теми же задачами, но только для более раннего формата MOD, популярного в эпоху phpBB2. Сейчас эта штука может быть полезна разве что в исторических целях, а тогда планировалось ее использование в претензиозном проекте Web Update, призванном накорню автоматизировать обновление сайтовых движков. И, вероятно, будь у меня тогда больше настырности и опыта, из этого чего-нибудь бы и вышло :-)

Read more →

Обработка множества исключений: решение

Обработка множества исключений: решение

    dev     articles     exceptions

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

Решение 1, читерское.

В условии было сказано, что надо обрабатывать исключения в методах init(), run() и shutdown(). И хотя это явно не оговаривалось, по логике функционирования эти методы вызываются подряд. Следовательно, можно сделать так:

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

Read more →

Упражнение: обработка множества исключений

Упражнение: обработка множества исключений

    dev     articles     exceptions

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

Есть корневой класс, условно назовем его ApiDispatcher, который управляет основным потоком исполнения. В нем есть три основных метода:

  1. init() — инициализирует, необходимые для обработки запроса объекты.
  2. run() — запускает обработку бизнес-логики.
  3. shutdown() — освободжает ресурсы.

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

Read more →

Аспекты реализации нового движка блога

Аспекты реализации нового движка блога

    blog     upgrade     todo     plans     dev

В прошлой заметке я сформулировал основные требования к движку блога. Теперь пришло время в общих чертах разобаться с реализацией. На начальном этапе здесь можно сказать совсем немного, поэтому пост будет небольшим.

Технические требования

  • Язык программирования: PHP 5.1+
    В принципе, я мог бы себе позволить и использовать PHP 5.3, мигрировав блог на мою VPS, но я не вижу в этом большой необходимости, тем более, что хостинг от EOMY за много лет показал себя с лучшей стороны.
  • СУБД: MySQL.
    Здесь выбор тоже практически очевиден: MySQL есть на любом хостинге и мне привычно с ним работать.
  • Фреймворк: Yii Framework
    Выбор фреймворка — тема не простая, так что ее я прокомментирую отдельно.
  • Миграция и обратная совместимость: весь контент должен быть перенесен и адаптирован к новому движку, все ссылки в постах должны остаться действующими, со старых URL постов должен быть редирект на соответствующие новые.

Yii Framework

Read more →