Обо мне

Основные навыки:

  • С (Visual C, GNU C и clang; WinAPI, GTK+, embed)
  • Java (ME, SE, applets, servlets, Reflection API, ASM, ByteBuddy)
  • Ruby (Rails 4/5, Sinatra, Padrino)
  • Lua (LuaJIT, PUC-Rio, openresty, luvit)
  • JavaScript (Node.js, WebSocket, React.js)
  • Elixir (Phoenix, Erlang OTP)
  • PHP 5.6/7 (Laravel, CodeIgniter, Wordpress, Drupal, Joomla)
  • Linux (DevOps, kernel)
  • HTML5/CSS3 (SASS, LESS, Slim).
  • MySQL, PostgreSQL, Redis, ElasticSearch, Git, Subversion

Linux

Более 7 лет активно пользуюсь различными дистрибутивами как на desktop-е, так и на серверах: Debian, Ubuntu, Fedora, Arch Linux, CoreOS. Хорошо разбираюсь в администрировании (iptables, systemd и upstart, BIND, nginx и openresty, Apache, Dovecot, PostgreSQL, MySQL, Redis, memcached, Docker, ProFTPD и vsftpd, Quagga). Писал несложные модули для ядра (например, драйвер для сканера штрихкодов и модуль для тестирования купюроприемников CashCode). Не раз собирал ядра для различных embedded систем и умею их тонко настраивать (scheduler-ы, сетевой стек, файловые системы). Работал с различными технологиями виртулизации (KVM, Xen, libvirt, QEMU) и контейнеризации (Docker, rkt). Для одного проекта разворачивал кластер Kubernetes на rkt и CoreOS.

C

На C я пишу еще дольше, чем пользуюсь Linux. Начинал с низкоуровнего программирования на WinAPI (делал небольшие утилиты разного назначения), позже писал сетевые приложения под Linux, модули ядра, модули nginx, а так же приложения на GTK+ (в т. ч. на WebKitGTK).

Assembler

Хорошо знаю IA-32 assembler (NASM, FASM, MASM). Писал небольшие приложения как в реальном режиме (DOS, MBR), так и в защищённом (PE с использованием WinAPI и ELF-ы под различные платформы), а так же фрагменты кода в GNU C. Детально знаком с архитектурой IBM PC и с некоторыми из ее многочисленных родственников.

Java

На Java суммарно разрабатывал более 3-х лет. Писал как GUI (AWT, Swing), так и мобильные приложения (на тот момент был актуален Java ME), а так же сетевые (servlet-ы и на базе Jetty и Netty). Хорошо знаком с архитектурой JVM, поскольку плотно занимался reverse engineering, работал с Reflection API и всячески манипулировал байт-кодом. Помимо Java как таковой писал на JRuby, Groovy и эпизодически на других JVM-based языках.

Lua

Часто использую его для прототипирования. Писал на нем различные микросервисы (luvit), использовал для настройки nginx (ngx_lua и openresty). Пишу как на PUC-Rio, так и на LuaJIT. LuaJIT с его FFI часто использую в качестве "клея" для различных библиотек.

Ruby

На Ruby пишу более 3-х лет. Работал с Rails, Sinatra и Padrino. На Rails делал с нуля два больших сервиса, на Padrino сделал несколько интернет-магазинов. Sinatra часто использую для вспомогательных задач. Хорошо знаю gem-ы из стека Rails: Devise, Paperclip, Kaminari, CanCanCan, RMagick. Не раз deploy-ил проекты под Passenger и с помощью Capistrano.

Elixir

На Elixir пишу с его первого стабильного релиза (более двух лет). Делал на нем с нуля интернет-магазин (Phoenix) и один highload-проект. В highload-проекте задача состояла в сборе статистики по посещениям в сети из более чем 200 сайтов высокой посещаемости в real-time и осуществлении обмена трафиком с сайтами-партнерами. В качестве БД использовалась Mnesia; проект предполагал горизонтальное масштабирование с помощью Erlang distribution.

PHP

Часто пишу на PHP 5.6 и 7 (всего более 5 лет). Делаю это скорее по необходимости в силу большой востребованности на рынке, но язык знаю досконально. В разное время разрабатывал модули для Wordpress, Drupal и Joomla; писал на Laravel (Symfony), CodeIgniter и Kohana. Писал и без использования framework-ов (небольшие сайты и микросервисы), а так же один форумный движок.

ECMAScript

Писал на разных диалектах, в т. ч. ActionScript (Adobe Flash). Хорошо знаю Node.js (более 4 лет опыта). В web-разработке предпочитаю писать, где возможно, Vanilla JS; в проектах покрупнее использовал React.js и Backbone. Пристально слежу за развитием JavaScript и его Web API. Работал с различными JavaScript-движками (JavaScriptCore, V8, SpiderMonkey, Nashorn и др.) и хорошо понимаю их тонкости.

CSS

Версткой активно занимаюсь последние три года. Мой основной стек - SASS, Brunch, Slim и Autoprefixer. Много работал со сложными анимациями (включая SVG); не раз верстал сложные элементы управления для web-интерфейсов. Использую best practices вроде web fonts для иконок, тщательно оптимизирую ресурсы, добиваясь показателей выше 90 в Google PageSpeed Insights. Верстать стараюсь в БЭМ. Хорошо понимаю принципы работы браузера (например, я бегло ориентируюсь в исходниках WebKit и не раз его встраивал в различные приложения). Помимо верстки я зачастую занимаюсь и дизайном (доработкой уже существующего или даже отрисовка макетов с нуля).

ElasticSearch

Делал несколько проектов с его использованием. В одном из них кластер ElasticSearch использовался для аналитики (построение различных отчетов для оценки посещаемости сайтов и качества трафика). В другом ElasticSearch использовался по его прямому назначению: полнотекстовый поиск по 1 млн. web-страниц на 8 языках с нетривиальной системой ранжирования. Поскольку Java - один из моих основных языков, проблем с настройкой и администрированием, включая tuning JVM не испытываю.

Redis

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

MySQL

С MySQL работаю давно и постоянно. Неплохо знаком с ее внутренностями (как-то раз писал модуль для InnoDB и не раз восстанавливал рассыпавшиеся таблицы). Хорошо знаю SQL как таковой, понимаю принципы работы СУБД и умею писать и оптимизировать сложные запросы.

PostgreSQL

Моя любимая реляционная СУБД. Использовал в разных проектах views, JSON и всевозможные расширения.

Информационная безопасность

Эпизодически занимаюсь поиском уязвимостей в web-приложениях. Находил уязвимости у Google, CERN, Fermilab, CodePen и у одного крупного российского банка.

Прочее

Помимо перечисленного я в разное время писал на Python, Visual Basic, C# и Pascal (Turbo, Free, Object) и многих других mainstream-вых языках.

Общие навыки

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

Технический английский у меня неплохой; разговорный вполне сносный.

Коротко обо мне

В настоящее время занимаюсь фрилансом. В свободное время поддерживаю некоторые open source проекты.

Профессиональные навыки
CPHPMySQLNode.jsJavaScriptRubyLinuxNginxElixirPostgreSQL
Опыт работы
Ноябрь 2012 — по настоящее время (5 лет и 1 месяц)
ОАО "НИИ "Субмикрон"
техник
Зеленоград
Высшее образование
Сентябрь 2011 — Январь 2014
МГУ
Вычислительной математики и кибернетики, ВМиК
Москва