Обо мне

Меня зовут Арсений, и вот уже 8 лет я профессионально занимаюсь веб-разработкой. За это время я успел поучаствовать во всяких классных проектах в качестве фрилансера, позаниматься opensource-разработкой, записать немного обучающих скринкастов, и в сумме несколько лет проработать разработчиком на фулл-тайме, в том числе в роли техлида, в нескольких неплохих компаниях. У меня сейчас около 5 лет опыта работы с Python/Django, а вообще опыт программирования около 12 лет.

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

Некоторые задачи, над которыми я работал

— Реализовал на Python такой вариант транслитерации текста на русском языке, который корректно (в отличие от других вариантов, которые на тот момент можно было найти в Интернете) работает с буквами в разном регистре. [Подробнее об этом я написал в этой статье]
— Написал WebSocket-чат на Tornado, использующий очередь сообщений для поддержки отправки сообщений собеседнику, подключившемуся к другому воркеру. [Статья на Хабре, в которой я описал, как это можно сделать]
— Разработал инструмент конвертирования видео на основе ffmpeg, позволяющий выбирать настройки кодирования с помощью веб-интерфейса
— Реализовал API бэкэнда веб-приложения, написал документацию и консультировал коллег из Лондона, которые разрабатывали мобильное приложение для работы с сервисом
— Написал приложение django-qrauth, позволяющее входить на сайт с мобильного устройства, сканируя отображающийся на веб-странице QR-код. [Статья на Хабре, обсуждение на Hacker News]

Frontend

Я умею писать на JavaScript, а также на CoffeeScript, применяя jQuery, DataTables, D3.js и другие библиотеки, а также современные веб-технологии, в том числе WebSocket, HTML5 File API, Fullscreen API, Page Visibility API. Умею делать валидную семантическую вёрстку на HTML5 и CSS3, а также SASS. Использую фронтэнд-фреймворки, в том числе работал с Ember и Angular.

Backend

Я умею писать на Python, и обычно использую для веба Django. Есть опыт реализации более-менее всего, что обычно требуется, включая кэширование, очереди задач (с помощью Celery), работу с нереляционными БД, юнит-тесты, журналирование, загрузку файлов, обработку картинок, валидацию, пагинацию, древовидные категории, отображение времени в часовом поясе пользователя и автоматическое объединение JS/CSS. Также писал многопоточные и асинхронные приложения.

QA

Помимо, собственно, самого процесса разработки (приведения программного продукта в соответствие с бизнес-требованиями), мне интересно заниматься контролем качества: от орфографии/грамматики/пунктуации до валидности HTML, соответствия исходного кода общепринятым практикам (best practices), UX-тестирования, pentest'ов и так далее.

Парсинг данных

Имел дело с парсингом HTML и XML, в основном пользовался библиотекой BeautifulSoup. Парсеры были разного уровня сложности: от программы для автоматического составления отчётов о позициях сайтов по определённым запросам в поисковиках до рекурсивного прохождения по всем дочерним элементам (child nodes) в DOM-дереве XML-документа для считывания их значений и записи в БД с возможностью довольно тщательной настройки схемы сохранения данных.

Системное администрирование

Я умею настраивать и администрировать *nix-системы (в том числе Linux и FreeBSD). Есть опыт развёртывания виртуальных машин (в основном работал с VirtualBox и XEN). Также длительное время работал с AWS, поэтому, конечно, умею разворачивать инстансы EC2, настраивать автоматическое создание снимков EBS-разделов и так далее. Представляю, как реализуется автоматизация настройки серверов (например, при автоматическом масштабировании инфраструктуры веб-сервиса) с помощью Chef Server и других аналогичных инструментов, а также изоляция рабочего окружения приложений с помощью Linux-контейнеров (LXC).

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

В 2012 я написал сайт, который называется Background Dating. Что-то вроде сайта знакомств, только лучше. :)

При разработке этого сайта разбирался, как использовать WebSocket, publish/subscribe в Redis, и некоторые довольно новые веб-технологии (вот тут можно подробнее почитать про технические детали).

Ещё есть другие проекты, они поменьше (да они и делались в скоростном режиме, то есть за пару дней): tinycmd (об этом проекте есть публикация на Хабре), rehelp, realweight.

Ещё я делал сайт для Аэро ГЭС (это технология для получения экологичного электричества и воды).

OpenSource

Довольно много исходников у меня выложено на Github и Gist.

Статьи

Мои статьи можно почитать тут. Вот некоторые:

Unity Web API, или как сделать интеграцию вашего сайта в Ubuntu
Django: Генерируем безопасные отчёты об ошибках на сайте
Смотрим кино с субтитрами сразу на двух языках
Автоматизируем щелчки мышкой в Linux: xdotool
Почти линейное увеличение производительности bzip2 на многопроцессорных системах
Простым языком об HTTP
bcat: просмотр вывода консольных программ в браузере
Команда nice, или вежливые процессы

Скринкасты

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

Programming an Image Hosting Application with Django (2010 год, на YT только первые 10 минут — целиком можно скачать тут)
How a simple Django application works (2008 год, тогда я ещё только недавно стал изучать Django, и смешно произносил английские слова)

Стиль разработки

Если позволяют сроки, я предпочитаю потратить больше времени, но убедиться, что программа работает быстро, в ней нет багов (либо они по крайней мере задокументированы для дальнейшего исправления), и нет уязвимостей (например, XSS, возможности внедрения SQL-кода, CSRF и прочего). Я предпочитаю со временем оптимизировать и упрощать код проектов, над которыми работаю (в некоторых случаях удаётся уменьшить объём кода отдельных компонентов в несколько раз) — таким образом, чтобы затем можно было быстро вносить правки и улучшения, не вчитываясь часами напролёт в хитросплетения функций, циклов и операторов, пытаясь понять, что же всё-таки ку имел в виду автор.

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

Я также предпочитаю комментировать код в тех местах, где реализация той или иной возможности может вызвать вопросы у других разработчиков, писать подробные docsting'и. Кроме того, я вообще стараюсь избегать применения хаков и запутанных, сложных для понимания решений. Код, мне кажется, должен быть простой и красивый.

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

Жаль, что нельзя выделить все варианты навыков в предлагаемом списке, т.к. по ним всем Арсений обладает отличными знаниями. Даже если он что-то сейчас не знает, то это дело ближайшего времени. Трудно найти человека столь разностороннего. Одним словом - "универсальный солдат"!

Письмо написано 22 мая 2014 в 03:51
Фронтенд, интерфейсы, Руби • знакомый

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

Письмо написано 11 марта 2014 в 22:39