Вклад Блог Досуг
Весь мой труд можно разделить на личный и рабочий, поэтому и разделы тут будут такие:

Рабочие проекты

С октября 2009 года я работал в пермской компании «Прогноз», специализирующейся на продвижении собственного BI-решения и выполнении государственных заказов. Я участвовал во второй части, занимался реализацией проектов для Министерства здравоохранения и Министерства труда и социальной защиты Российской Федерации (правда в 2009 году они ещё были одним ведомством).

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

  • Единая информационная система государственной гражданской службы (Минтруд РФ);
  • Подсистема мониторинга предоставления государственным гражданским служащим единовременной субсидии на приобретение жилого помещения (Минтруд РФ);
  • Подсистема мониторинга проведения диспансеризации детей-сирот и детей, находящихся в трудной жизненной ситуации, и проведения профилактических осмотров несовершеннолетних (Минздрав РФ);
  • Реестр нормативно-справочной информации системы здравоохранения, социального развития и трудовых отношений (Минздрав РФ).

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

В ходе работы над проектами компании «Прогноз» я изучил не только тонкости написания приложений с использованием PHP, JavaScript и Oracle PL/SQL, но также получил опыт в нескольких специфичных областях.

  1. Работа с Active Directory по протоколу LDAP PHP

    Если разбудить меня посреди ночи и задать вопрос по LDAP, то высока вероятность, что я на него отвечу. Нет, в теории я не эксперт, но прикладные знания имеются обширные.

    Как доказательство могу предоставить публично доступный набор классов для работы с «директорией»: Ldapper. Он предполагает более последовательную логику работы с протоколом и упрощает некоторые аспекты взаимодействия.

    На полное покрытие различных use-case он не претендует, ибо был написан исходя из имеющейся на практике информации. Именно поэтому заметную часть пакета занимает работа с сертификатами X509.

  2. COM-объекты C#

    Опыт экспериментирования с C# пригодился с неожиданной стороны, когда потребовалось интегрировать PHP-приложение с продуктами компании «Крипто-ПРО». Поскольку библиотека для работы с чистым .NET в PHP имеет больше проблем, чем нет, в качестве прослойки были выбраны COM-объекты.

    В результате, я научился создавать COM-объекты с использованием C# и платформы .NET так, чтобы PHP-приложение могло с ним взаимодействовать.

    Про сами COM-объекты информации написано достаточно, однако, как результатом работы, могу поделиться краткой инструкцией о том, как их регистрировать в произвольной среде (в рабочей среде об этом позаботится «Студия» на этапе сборки).

    Регистрируем свой COM-объект.
  3. Сервисы SOAP и СМЭВ PHP JavaScript Oracle PL/SQL

    Один из проектов, указанных выше, предоставляет публичный сервис за моим авторством. Это Реестр НСИ — портал, который представляет собой централизованное хранилище справочников, необходимых для системы здравоохранения Российской Федерации.

    Для данного портала неважно, откуда придёт информация и как она попадёт на портал (вручную или, например, посредством хитрого промежуточного сервиса для парсинга КЛАДР в версионную структуру). Главное — это единая точка входа и общий подход к информации для пользователей Реестра.

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

    Конечно, в связи со сферой деятельности значительная часть интересных знаний связана с интеграцией в СМЭВ. Ох уж этот СМЭВ...

  4. КЛАДР PHP Oracle PL/SQL

    Хоть ФНС и пытается заменить КЛАДР на ФИАС, по сути меняется шило на мыло. Надо признать, что ФИАС предоставляется изначально в более приятных форматах. Что не отменяет ряда проблем с достоверностью и качеством информации в справочнике. Но нас не испугать тонкостями работы с КЛАДР и его улицами, привязанным к районам городов, вместо самих городов; да территориями в 0,1 километре восточнее села Малая Минуса.

    Самой же главной проблемой является отсутствие прозрачной версионности, что мешает корректно обновлять справочник локально. Решением проблемы стал разработанный мною промежуточный сервис, упомянутый выше, который объединял записи по их «идентификационному коду» (код объекта КЛАДР без кода актуальности), сортировал по коду актуальности объекта и выбирал наиболее «свежий» вариант объекта. Между версиями «потерянные» объекты сохранялись. Таким образом обеспечивалась преемственность данных от обновления к обновлению.

    Пример PL/SQL и DDL скриптов для организации КЛАДР.
  5. Маленькие радости

    Безусловно, иногда в результате труда появляются некоторые наработки, которыми нестыдно поделиться.

    Вот, например, визуализатор XSD-схемы (пример работы в комплекте).

Личные проекты

Вообще, программировать я люблю, для меня это не просто хлеб. Решение задач, создание инструментов, изящный код, большие, полные жизни проекты. А главное, результат! Хорошо, когда есть для кого стараться.
Поэтому в свободное время я иногда нахожу, для кого.
  1. Турбофильм: Режим кинотеатра (Turbofilm Cinema Mode, TCM) JavaScript

    Да, наверное это мой самый большой проект. Он начинался с довольно простого расширения для Google Chrome, которое делало область просмотра на сайте «Турбофильм» больше, в соответствием с пропорциями экрана.

    А потом оно обросло фичами и было за шесть месяцев полностью переписано в свой текущий вид. В качестве основы для расширения лежит база в виде класса Platform, реализующая внутренние возможности браузеров. Когда я взялся переписывать, я хотел портировать его на все доступные платформы. Но Opera в тот момент официально заявила о переходе на Webkit (Blink), а Firefox оказался слишком усложнённым для функций расширения. Так что руки не дошли.

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

    К сожалению, по некоторым соображениям я больше не пользуюсь порталом «Турбофильм» и не поддерживаю расширение. Однако, совесть может спать спокойно: в нём нет недоделок, всё запланированное реализовано.

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

    Исходный код Turbofilm Cinema Mode.
    Установить расширение Turbofilm Cinema Mode.
  2. Ultra Hardcore, Minecraft Java

    Возможно, вы знакомы с игрой Minecraft, а также может знаете режим игры UHC, Ultra Hardcore, в котором игроки сражаются за победу в матче без регенерации здоровья и респауна после смерти. Ну, если не знаете, я вам только что рассказал.

    С апреля 2014 года мы с приятелями регулярно проводим матчи в этом режиме. Но вот есть нюанс: этот режим придуман игроками и требует некоторой подготовки и контроля за процессом игры. А Minecraft пока не поддерживает модификаций...

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

    Поскольку я являюсь «тыжпрограммистом», то взялся за написание плагина под Bukkit 1.8 для проведения матчей. И это оказалось очень увлекательным!

    Код плагина для UHC и ещё одного вспомогательного плагина открыт для всех желающих, а по настроению я реализую доработки, пожелания о которых можно оставить там же.

    Исходный код плагина UHCForKeks (там же можно найти ссылку на собранный плагин).
    Исходный код плагина JSONTexter (собранный плагин также присутствует).