Со вчерашнего дня в Сети активно обсуждается ситуация со скруткой голосов по инициативе Навального «5 шагов для России». В качестве косвенного доказательства скрутки приводится частичное несоответствие падежей числу голосов:

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

Читать дальше »

Сложность программного проекта является комбинацией его системной (essential, имманентной) и случайной (accidental, ненужной) сложности.

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

Читать дальше »

И еще один забавный случай про то, как мы наткнулись на баг, но теперь уже в самом memcached. Это даже, наверное, не баг, а особенность, не упомянутая в документации.

Всем известно, что у memcached есть текстовый протокол. Можно на tcp порт memcached (11211 по умолчанию) зайти телнетом и написать парочку команд. И есть в протоколе команда stats cachedump, которая не документирована, но которой пользуется утилита memcached-tool, входящая в поставку memcached.

Usage: memcached-tool <host[:port]> [mode]

Читать дальше »

В продолжении разговора о патче в php хочется еще рассказать о наших небольших патчах в pecl-memcached. Это pecl модуль, который реализует интерфейс libmemcached в php и добавляет handler сессий для хранения их в memcached.

Первый патч довольно простой, он добавляет нормальные сообщения об ошибках в код handler-а сессий. До этого патча невозможно было понять, то-ли сессии в мемкеше нет, то-ли отвалилась коннекция от мемкеша, то-ли что-то еще произошло. Во всех случаях код возвращал FAILURE и было непонятно, что на самом деле произошло. Аналогично, при сохранении сессии старый код просто увеличивал количество неудачных попыток и при достижении максимума выкидывал сервер из пула по непонятным снаружи причинам.
Читать дальше »

Всегда приятно начинать новый проект. Простые классы, четкие границы, ясная архитектура — все логично и красиво. Новая функциональность добавляется легко и быстро.

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

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

В определенный момент становится понятно, что история повторилась и у нас в руках очередной “большой ком грязи”. Что же делать и можно ли этого избежать?

Читать дальше »

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

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

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

Естественный вопрос, который возникает — как разделить набор функций системы на обособленные куски, пригодные для вынесения в подсистемы и до какого размера следует производить дробление?

Читать дальше »

16 марта вышли новые версии php — 7.0.17 и 7.1.3. Это приятная новость для многих php разработчиков, но для нас она приятна еще и тем, что туда вошел наш патч, который чинит keep-alive соединения в php-fpm sapi.

Php-fpm появился сначала как отдельный патч для php 5.2, добавляющий менеджер fastcgi процессов, который позволяет организовать отдельные пулы, следит за временами выполнений рабочих процессов и много другое полезное. В ветке php 5.4 его приняли как официальный sapi и мы избавились от необходимости накладывать этот патч всякий раз, как выходит новая версия php с исправлением ошибок.

Читать дальше »

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

В первую очередь необходимо определиться с терминами. Если мы говорим о физическом расположении сотрудников и степени их вовлеченности в проект, возникают две основные дихотомии: «Договор-Штат» и «Офис-Удаленная работа».

remote-dichotomy

Читать дальше »

В сегодняшней статье речь пойдет о фреймворке Angular2. Мы поговорим об недочетах Angular1, расскажем об основных изменениях в новой версии фреймворка и, что на наш взгляд самое интересное, поделимся впечатлениями от использования новой версии Angular. Читать дальше »

Платформа для паблишеров

Приступая к разработке новой системы мы стараемся изучить существующие системы в данном сегменте. Планируя разработку системы управления видеорекламой мы, естественно, не могли пройти мимо такого заметного игрока на рынке решений для видео-рекламы, как компания Videoplaza. Компания Videoplaza основана в 2007 году. Если определить одним предложением, то Videoplaza — это европейский поставщик решений для адсервинга видео. Совсем недавно ее купила американская компания Ooyala, которая, в свою очередь, была куплена австралийским телекоммуникационным гигантом Telstra. Ooyala – это популярная платформа для дистрибуции видеоконтента, клиентами которой являются крупные издатели, поэтому сделка по покупке Videoplaza выглядит достаточно логично: Ooyala купила хорошее решение для монетизации этого контента, в том числе программатически, учитывая последние наработки Videoplaza в этом направлении (Konnect). Изначально продукт Videoplaza представлял собой исключительно рекламный сервер + систему управления рекламными кампаниями, то есть был такой классической технологией для издателя, позволяющей откручивать видео-кампании, основанные на прямых продажах. С самого начала акцент делался именно на видео-рекламу, как наиболее перспективный и быстрорастущий сегмент рынка. В данном обзоре мы будем рассматривать исключительно систему Karbon – основной продукт компании, поэтому для краткости мы будем называть ее Видеоплазой, а не система Карбон компании Videoplaza. Читать дальше »