Обо мне

Специализация и профессиональные навыки:
Технический директор.
Руководство, разработка, автоматизированное тестирование, эксплуатация.
Организация технического департамента (в том числе процессов разработки, тестирования и эксплуатации).

Языки программирования: Ruby, С, PHP, Python, С++, JavaScript, ActionScript 3, есть опыт разработки апплетов на Java, а также оконных приложений на C#.
Библиотеки и фреймворки:
Ruby: Ruby On Rails
PHP: Zend Framework, Smarty, Symfony, Horde Framework, PEAR
С++/C#: QT
Инструменты тестирования и отладки: Selenium, unittest, PHPUnit, jmeter, qtUnit, phpt, gdb, xdebug, strace, ltrace, tcpdump, valgrind, Apache Benchmark, PHP CodeSniffer, firebug
Базы данных: MySQL, PostgreSQL
Средства непрерывной интеграции: jenkins, cruisecontrol, phpUnderControl
Контроль версий: svn, git
Системы баг-трекинга: Trac, Jira

Доклады на конференциях SQAdays'2008, Highload++'2009, RichClient'2010, Highload++'2012, Форум Технологий Mail.Ru'2013

Профессиональные цели:
Безграничны

Награды, сертификаты, портфолио, проекты:
Медаль "За укрепление дружественности" от компании "Бегун".

Добавил в PHPEmbed поддержку бинарных строк: http://github.com/facebook/phpembed
Решил паззл: http://www.facebook.com/careers/puzzles.php?puzzle_id=1

Опыт работы
Ноябрь 2015 — по настоящее время
Contractor
Сан-Франциско и район залива
Июнь 2014 — Март 2015
CTO
Москва
Обязанности и достижения

Достижения:
- Создана команда разработки (Ruby on Rails), производительность которой превышает производительность всех предыдущих команд. Команда под моим руководством и с моим непосредственным участием выпустила InMyRoom.Ru 2.0 и FamilyBoom.ru,
- Организованы регулярные митинги и планирование итераций. Налажены системы таск-трекинга и документирования. Организован code-flow. Организована система непрерывной интеграции, починены unit-тесты, появились selenium-тесты.
- Найден админ. Приняты на поддержку от удаленной команды эксплуатации продакшен-серверы. Код перенесен с публичного хостинга на серверы компании. Организованы бэкапы. Организован мониторинг. Налажена регулярная оплата хостинга и других платных сервисов

Сентябрь 2011 — Сентябрь 2013
Руководитель тестирования
Москва
Обязанности и достижения

Достижения:
- Построил автоматизированное тестирование, в котором интересно работать (супер-команда, инфраструктура, тестирование, автоматизация, непрерывная сборка, управление требованиями, взаимодействие с заказчиками, менеджерами, разработчиками, админами, HR и PR).
- Создал общедоступный для всей компании стабильный многопоточный сервис Selenium Webdriver, который теперь используется в тестировании множества продуктов компании.
- Нашей командой с нуля покрыты автоматизированными тестами на python'е сишные демоны проектов РБ и Таргет, основной модуль отдачи рекламы, общий для компании шаблонизатор и основные части веб-интерфейса target.mail.ru.
- Создал доступную всей компании инфраструктуру (виртуализация xen с веб-интерфейсом convirt, управление конфигурациями chef, непрерывная интеграция jenkins), приютившую Continuous Integration совершенно разных проектов компании.
- Написал и внедрил для тестируемых проектов инструмент управления миграциями БД.

Июнь 2011 — Сентябрь 2011
Руководитель управления разработки
Москва
Обязанности и достижения

Достижения:
- Совмещал руководство управлением разработки с руководством отделами ruby-разработки и тестирования.
- Активно участвовал в разработке в качестве основного ruby-программиста.
- За это время внедрено подтверждение регистрации c помощью sms, добавлена возможность совершать обещанный платеж, исправлено огромное количество багов, ускорена работа javascript-кода в панели управления, выпущена первая стабильная версия облака (1.00).
- Обучал коллег программированию на Ruby on Rails, JavaScript + JQuery, написанию тестов rspec.
- Содействовал первой линии в решении технических проблем, бухгалтерии и другим отделам в создании отчетов. Участвовал в совещаниях, посвященных развитию продукта.

Октябрь 2010 — Май 2011
Руководитель отдела тестирования
Москва
Обязанности и достижения

Достижения:
- Наладил процессы тестирования в условиях острой нехватки ресурсов.
- Взаимодействовал с отделами разработки, эксплуатации и техподдержки, донося до программистов жалобы пользователей и ускоряя доведение задач до готовности. Участвовал в обсуждении архитектуры функционала по задачам.
- Тестировал программные разработки компании (как прикладные, так и системные) с помощью автоматизированных, полуавтоматизированных (с использованием ruby, rspec, с, netperf, netpipe, litmus, iozone, средств unix и т.п.) и ручных тестов.
- Составлял планы тестирования и написания автотестов. Проверял функциональные и нагрузочные требования. Ставил задачи на исправление дефектов и развитие системы мониторинга.
- Обучал коллег написанию selenium-тестов на cucumber.
- Восстановил браузерные selenium-тесты (сucumber, ruby, selenium-rc). Внедрил их запуск в систему непрерывной интеграции. Наладил параллельный прогон selenium-тестов в различных браузерах (в том числе с помощью патча в selenium-rc).

Март 2010 — Апрель 2010
РИТ++'2010
Руководитель секции "Качество"
Москва
Обязанности и достижения

Достижения:
- Сильная секция "Качество", именитые докладчики, интересные доклады
- Пригласил хедлайнера конференции из Facebook

Сентябрь 2007 — Июль 2010
руководитель отдела тестирования
Москва
Обязанности и достижения

Организовал отдел тестирования, занимался наймом персонала и руководил отделом, организовал автоматизированное тестирование веб-интерфейсов (PHP), демонов (C++), js-блоков, ActionScript VPAID библиотеки и т.п. на PHPUnit, а также Selenium-RC и Zend Framework.

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

Планировал работу команды, создал фреймворк автоматизированного тестирования и настройки тестовой среды, взаимодействовал с отделами разработки, системного администрирования и менеджерами проектов и бизнес-заказчиками.

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

Также обучал сотрудников приемам тестирования, тонкостям программирования высоконагруженных систем и оптимизации работы с базами данных.

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

Также создал расширение для PHP (extension) для внутреннего использования в проектах компании. Внес заметное количество исправлений в расширение runkit и PHPUnit.

Июнь 2006 — Сентябрь 2007
ведущий программист
Москва
Обязанности и достижения

Проект Почта.Ру (массовый веб-сервис)
+ Правильное отображение в веб-интерфейсе всех типов писем
+ Правильное формирование писем
+ Поддержка множества комбинаций MIME и кодировок
+ "Почта на своем домене"
+ Оптимизировал веб-интерфейс по скорости
+ Устранил множество XSS- и SQL-уязвимостей в проекте.
+ Разработал клиентскую часть прототипа онлайн-мессенджера XMPP
+ Спроектировал и разработал каталог ссылок Почты.Ру
+ Сделал поддержку OpenId и RSS

Сентябрь 2003 — Январь 2006
Дизайн студия «АртАлл»
программист, проектировщик баз данных, системный администратор
Москва
Обязанности и достижения

Создал более 40-а сайтов и административных интерфейсов к ним на основе собственных библиотек классов PHP;
Проектировал базы данных (MySQL), исправлял ошибки верстки HTML;
Администрировал Linux и FreeBSD, уставливал и настроивал Apache, PHP, MySQL, vsFTPd, Samba, VPN (pptpd);
Занимался поисковой оптимизацией.

Август 2001 — Май 2002
renew.ru
программист
Москва
Обязанности и достижения

Программировал на PHP + PHPLib + MySQL + XSLT (Sablotron): быстро доработал сайт trainings.ru (перевел статику в динамику, добавил 16 новых разделов‚ включая форум и поиск по сайту), запрограммировал 6 сайтов.
В кратчайшие сроки созданил универсальный административный интерфейс для всех сайтов.

Рекомендательные письма
Senior backend developer • знакомый

Багоискатель #1

Письмо написано 03 июня 2014 в 10:03