Профессиональные навыки
HTMLJavascriptC++ CSS.NETDelphiSeleniumC#JavaScala
Опыт работы
Январь 2015 — по настоящее время
Различные побочные проекты
Ярославль
Обязанности и достижения

Выполняю задачи на библиотеках React + Reflux в одном стартапе (список с автодополнением с подгрузкой данных, табличный список с формами редактирования, и т.п.).

Март 2012 — по настоящее время
JS-разработчик в отделе Web-платформы
Ярославль
Обязанности и достижения

Разработка веб-платформы: набора компонентов, использующихся внутри компании при разработке интерфейса и бизнес-логики веб-приложений http://online.sbis.ru, http://reg.tensor.ru, и http://inside.tensor.ru.

Используемые языки и технологии: html, css3, javascript, jquery, ajax, requirejs, doT, svg.

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

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

Компоненты представляют собой иерархию классов, оформленных в виде модулей requirejs, что позволяет загружать их динамически, вместе со всеми зависимостями (css- и html-модулями, содержащими стили и шаблон вёрстки компонента).
Также есть возможность статической сборки базовой библиотеки и пользовательского кода в один или несколько пакетов, для более быстрой загрузки.

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

Широко используется promise-объекты в качестве результатов асинхронных запросов, диалогов, анимации, что позволяет удобно работать с асинхронными процессами, и строить довольно сложную асинхронную логику.

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

Для регрессионного тестирования компонентов используется Selenium - на нём работают тесты, которым нужен браузер (тесты вёрстки и тесты со сложным визуальным сценарием, и jstestdriver для юнит-тестов, малозависимых от среды исполнения).
Тесты запускаются и исполняются автоматически на сервере сборок teamcity.

В мои обязанности входит разработка базового кода компонентов: шин событий, promise-объектов, подсистемы классов и наследования, механизма загрузки модулей и
шаблонов, подсистемы расчёта размеров, и другого низкоуровневого кода, а также поддержка библиотек и инструментов для системы тестирования.
Также я участвую в разработке и поддержке компонентов совместно с остальными сотрудниками веб-платформы.

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

Также при разработке собственной библиотеки компонентов постоянно приходится изучать подходы и решения из других библиотек - таких как React, Ember, Angular, redux, virtual-dom.

В последнее время занимаюсь разработкой новой версии ядра библиотеки компонентов - с использованием подхода, похожего на React (c виртуальным DOM), с шаблонизатором для vdom, и моделью компонентов, похожей на Ember.

Такой подход имеет большие преимущества по сравнению с нынешней версией библиотеки, сделанной по принципам традиционного MVC.

Декабрь 2010 — Март 2012
ООО Брайнсматч
Web-программист
Москва
Обязанности и достижения

Участие в разработке системы профессионального тестирования и поиска работы "Брейнсматч".

Обязанности: разработка веб-интерфейса - серверной части на php с использованием библиотеки yii, клиентской части на javascript с использованием библиотек jquery, jquery-ui, backbone (MVC-библиотека для javascript-приложений), сервисов авторизации yandex, facebook, vk, и других.

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

Базы данных, использованные в проекте: MySql 5.2, MongoDb.

Также в проекте реализована возможность звонков через sip-сервер, с помощью flash-клиента, и прокси-сервер на Питоне, соединяющий flash-клиента с sip-сервером. Для этого был использован доработанный нами opensource-сервер siprtmp, в результате чего удалось добиться стабильной работы веб-телефона и возможности созвона между соискателями и работодателями через сайт.
Также, совмещён биллинг sip-сервера (utm5) с биллингом нашего сервиса через триггеры в базе sip-биллинга.

Sip-cервер работает на asterisk и администрируется другой компанией, предоставляющей услуги sip-телефонии.

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

Моё участие заключалось в разработке телефонной части (полностью), а также - в разработке серверной и клиентской части интерфейса (вместе с остальной командой).

Декабрь 2006 — Сентябрь 2010
LMD Innovative
Программист
Ярославль
Обязанности и достижения

Обязанности:
- Разработка компонентов для Delphi и Delphi.Net

Участие в разработке различных компонентов:
- Текстовый редактор с подсветкой синтаксиса и настраиваемыми синтаксическими схемами
на XML (ссылка: http://www.lmdinnovative.com/products/vcl/lmdsyntaxedit/) .
- Сетка с типизированными полями и разными редакторами, зависящими от типа поля (ссылка: http://www.lmdinnovative.com/products/vcl/lmdgridpack/). .
- Пакет компонентов для интеграции Delphi/Delphi.Net и движка Microsoft Active Scripting (http://www.lmdinnovative.com/products/vcl/lmdscriptpack/).
Возможности: разбор Delphi-модулей, обработка событий скрипта модулем Delphi и наоборот, поддержка отладчика ActiveScript, интеграция с платформой .Net

- Адаптация компонента TRegExp к юникоду, Delphi.Net, встраивание его в текстовый редактор.
- Написание различных вспомогательных утилит и функций.

Декабрь 2005 — Январь 2010
Различные проекты
Программист
Ярославль
Обязанности и достижения

- Интеграция системы распознавания автомобильных номеров "Поток" с системой безопасности предприятия "Lenel" для компании Теннекс.
Проект обеспечивает хранение в базе данных о машинах сотрудников, и автоматическое открытие шлагбаума для авторизованных сотрудников и гостей.
Технологии, использованные в проекте: WMI-интерфейс системы Lenel, MSSQL, среда разработки Delphi для реализации клиентского приложения и сервиса.

-В компании "Теннекс": Утилита для системы безопасности предприятия "Lenel", позволяющая отслеживать нахождение работников в различных зонах здания, в целях пожарной безопасности.
Технологии, использованные в проекте: WMI-интерфейс системы Lenel, MSSQL, MIDAS, среда разработки Delphi для интерфейса.

- Простой корпоративный CRM-интернет-сайт на ASP.Net для торговой фирмы, позволяющий регистрировать контакты фирмы с другими компаниями, управлять заметками по компаниям, и выполнять поиск компаний и заметок по различным условиям. База данных – MS Access.

- Рекламный тулбар для Internet Explorer, с перехватом на себя поиска из адресной строки, редиректом с некорректных адресов на свой поисковик, с полноцветными иконками с альфа - каналом, и т.д.

Ноябрь 2004 — Сентябрь 2006
Корпорация PTC
Программист, системный администратор
Ярославль
Обязанности и достижения

Обязанности:
- разработка и поддержка расчётной части системы автоматического проектирования Pro/Engineer (http://ptc.com/products/proengineer/)
- Расчёт плоских заготовок для объёмных моделей, использование систем линейных и нелинейных уравнений и численных методов для их решения.
- установка и поддержка средств разработки на системах Windows, Linux (Redhat 4) и Solaris 10, настройка и поддержка локальной сети и серверного ПО для групповой работы (Mantis, svn, Wiki - багтрекер, контроль версий и движок для внутренней документации и о

Разработка велась на системах Linux, Solaris, и Windows.
Используемые инструменты и технологии:
Профайлеры: AQTime/gprof, компиляция и отладка: Visual Studio, gcc+gdb+gnu make+Emacs+SunStudio.
Языки: C - основной язык приложения, небольшая часть (библиотека для работы с графами) на C++.
Также использовались bash, Java, JScript и VB.Net для написания различных вспомогательных скриптов и мелких расширений сред разработки (Visual Studio, Emacs, NetBeans).

Февраль 2000 — Октябрь 2004
«Tradal LTD»
Программист
Лимассол
Обязанности и достижения

Обязанности:
- разработка разнообразных программ под Windows
- администрирование MSSQL
- администрирование локальной сети на Windows 2000
- администрирование систем контроля версий CVS, SVN
- администрирование веб-серверов Apache2 и IIS

Проекты:
1. Различные утилиты - интернет-боты для SMTP/POP/HTTP протоколов
2. Система для автоматизации позиционирования слов и управления аккаунтами на платных поисковых сайтах – Overture, Findwhat, Lycos, Espotting, GoClick, PageSeeker, SearchFeed и 7search.
Использованные языки и технологии:
Веб-бот на C# + dll-библиотеки к нему на C++, ASP и ASP.Net + MSSQL для веб-интерфейса.
Модули веб-бота написаны с использованием движка Internet Explorer-a и библиотеки MSHTML.
Серверная часть рассылала оповещения по SMTP и SMS о различных событиях, а также умела распознавать картинки-капчи, используя FineReader.
Прочие инструменты и технологии, использованные в проекте:
Subversion - контроль версий, NDoc - документирование, NUnit-юнит-тесты, XML-сериализация для различных настроек.

Сентябрь 1999 — Февраль 2000
Завод фрикционных материалов, ОАО «Фритекс», Ярославль
Инженер-программист
Ярославль
Обязанности и достижения

Обязанности:
- разработка программ под Windows, программирование микроконтроллеров.

Разрабатывал программу для учёта, контроля и анализа для испытательных стендов.
Для управления стендами использовались микроконтроллеры, данные с которых по COM-порту передавались программе, которая их обсчитывала, хранила в локальной базе, показывала в виде графиков, и строила обобщённые отчёты по испытаниям в Word-е и Excel-е.
Программа была написана на Borland C++ Builder, Delphi, с использованием VCL и WinAPI.

Также писал небольшие программы для микроконтроллеров

Высшее образование
Январь 1994 — Январь 1999
ЯГТУ
Машиностроительный
Ярославль
Специализация и достижения

Специальность:
Техническая кибернетика