Сергей Ткачук, django-программист, резюме
URL: www.stkachuk.ru
E-mail: finn@stkachuk.ru
Цель
Ищу работу, связанную с Python/Django.
О себе
39 лет. Женат. Сыну 6 лет. Живу в Хабаровске.
Навыки
- Python:
- Django, BeautifulSoup, urllib, PIL, xlrd, sorl.thumbail, south, django-tagging и т.п.
- Perl:
- DBI, TemplateToolkit, FastCGI.
- PHP:
- PEAR, Smarty, Curl.
- Java:
- 1.4/1.5, JDBC, Hibernate, Tomcat, Struts, JSP, Freemaker, Log4j, Dom4j, JUnit, Ant, Elixir Report.
- Разное:
- Unix, vim, cvs, svn, SQL, XML, XPath, JavaScript, Firebug, Eclipse, IntelliJ IDEA.
Последнее время программирую, в основном, на python/django и чуть-чуть на PHP.
Основная рабочая система - Ubuntu Linux.
Из "классики" прочитал:
"Программист-прагматик" (супер! регулярно перечитываю),
"Рефакторинг",
"Паттерны проектирования",
"Архитектура программных приложений" (гораздо полезней, чем GoF),
"Мифический человеко-месяц".
Подписан и регулярно читаю reddit.com/programming
Знание английского: легко читаю и понимаю технические тексты, сносно
воспринимаю на слух, средненько пишу, очень плохо говорю.
Опыт работы
Работаю программистом с 1988 года, разработкой веб-проектов занимаюсь с 1997 года.
| Последние места работы |
| 01/08/06 - настоящее время |
Программист-фрилансер. Разработка веб-сайтов (Python/django).
|
| 01/09/05 - 30/06/06 |
ООО "Сервис Онлайн". Ведущий инженер-программист. Разработка системы электронных платежей (PHP, Java).
|
| 03/11/03 - 31/08/05 |
ООО "Елена Инжениеринг". Руководитель проекта. Разработка рабочего места аптекаря (Java).
|
| 01/10/01 - 02/11/03 |
Программист-фрилансер. Разработка веб-сайтов (Perl, PHP).
|
| 02/04/99 - 31/09/01 |
ООО "Маркон". Инженер-программист. Разработка интернет-магазинов (Perl, PHP).
|
| 01/12/97 - 31/03/99 |
ЗАО "Эдисофт". Программист. Разработка веб-сайтов (Perl, PHP).
|
Некоторые проекты
Мисс Интернет Дальнего Востока
Программирование сайта конкурса "Мисс Интернет Дальнего Востока" с использованием django.
Сам по себе сайт ничего сложного не содержит и единственная головная боль - это борьба с накрутками голосов.
Приложение для голосования много чего запоминает, анализирует и пытается найти нестандартные моменты в поведении пользователя.
Помимо интернет-голосования на одном из этапов есть и голосование через SMS. Для него было реализовано небольшое приложение,
взаимодействующее с одним из SMS-сервисов, обеспечивающих прием и отправку сообщений.
Фотографии участниц приводятся к нужным размерам через sorl.thumbnail. Так же был написан watermark-процессор, который
накладывает на фотографии логотип конкурса.
Новости, фотогалерея, подписка и прочее такое же сделано через готовые django-приложения.
Boatplans.ru
Каталог проектов лодок, яхт и катеров для самостоятельной постройки
- это попытка собрать в одном месте информацию о различных проектах. К каждому проекту помимо
технических данных и описания можно прицеплять иллюстрации и фотографии, ссылки на чертежи, строящиеся
и построенные лодки. Так же система по характерным признакам лодки автоматически подбирает похожие
проекты.
Сайт реализован на django. Управление каталогом проектов сделано через
стандартную django-вскую админку с небольшой настройкой через new forms.
Для превьюшек изображений использовался sorl.thumbnail. Теги сделаны через django-tagging.
Миграция схемы базы данных - south.
Премия "Стерх-2009"
Программирование сайта Дальневосточной интернет-премии "Стерх" на django.
Было реализовано:
-
Система управления номинациями. Разные номинации помимо названия и описания имеют
служебную информацию о необходимости ввода претендентами в форму регистрации тех или
иных полей. Сами поля в зависимости от номинации так же могут иметь различные описания.
-
Регистрация претендентом на премию. Форма регистрации подстраивается под каждую
номинацию согласно описанию, заданному администратором системы.
-
Система голосования для экспертного совета.
-
Для управления текстовым содержимым, новостями, фотогалереей, видеофайлами и прочим
были использованы готовые django-приложения (как самодельные, так и от сторонних
разработчиков).
Express Parts Network
Система поиска и продажи запчастей на любую спецтехнику, грузовики, погрузчики.
По сути - это набор приложений django, используемых в разных сочетаниях
на нескольких родственных сайтах (пример 1,
пример 2).
Есть версии и на английском языке.
Приложения, разработанные для этой системы:
-
Взаимосвязанные справочники видов, производителей и моделей техники, отраслей
и видов деятельности компании.
-
Профили компаний с большим набором полей (название, координаты, виды
деятельности, марки техники и прочее). На основе этих данных строятся каталог
дилеров и каталог сайтов, посвященных спецтехнике.
-
Публикация и поиск по прайс-листам компаний. Позиции в прайсах можно
редактировать как индивидуально, так и пакетно, импортом данных из .XLS- или
.CSV-файлов.
-
Размещение заявок на поставку техники и возможность ответа на эти заявки.
-
Специализированная доска объявлений о покупке/продаже спецтехники с возможностью
поиска объявлений по отрасли, производителю и типу техники.
-
Внутренняя система сообщений для связи покупателей и поставщиков. Она же
используется и для рассылки групповых сообщений от администратора. При желании
сообщения дублируются на e-mail получателя.
-
Система публикации текстовых документов. Изначально использовалось стандартное
приложение django-flatpages, но впоследствии его возможностей показалось мало и
было разработано приложение, позволяющее разбивать документы по папкам, вести
метаинформацию о документах, ссылки и т.п. Из этих документов автоматически
формируются ленты новостей для главной страницы и рассылок.
-
Для того, чтобы редакторы сайта могли заливать файлы через обычный браузер, а не
через ftp-клиент было написано несложное WebFTP-приложение, доступное через
стандартный административный интерфейс django.
Мультиязычный портал Alilon.com
Alilon.com - система для
публикации бизнес-предложений. Особенностью сайта является то, что одна
и та же информация о фирме или товаре может быть представлена на нескольких языках
При выборе технологии для разработки основным критерием была хорошая поддержка
unicode. После рассмотрения фреймворков на Java/Perl/Python
(PHP и Ruby отпали сразу) было решено использовать Python/django.
Весь сайт и все данные на нем представлены на 10 языках. Локализация в основном
реализована через gettext, но в некоторых случаях (к примеру письма
с большим текстом) для разных языков сделаны разные шаблоны.
Возможности системы:
-
Регистрация пользователей, редактирование профиля, напоминание пароля и прочие
стандартные вещи. Пользователи имеют разные уровни членства (обычное, платное,
VIP), которые влияют на допустимое количество товаров/переводов.
-
Редактирование информации о фирме/товарах на нескольких языках. При этом часть
полей остается неизменной (например номер модели или страна происхождения), а
часть (название, описание) - меняется от языка к языку.
-
Система переводов. Пользователь может ввести товар на одном языке и заказать
платный перевод описания на другие языки. При этом есть возможность отследить
весь процесс перевода (первичный перевод, редактура/корректировка носителем языка,
окончательное утверждение перевода) и увидеть, какие фрагменты текста и на
каком этапе были изменены.
-
Внутренняя система сообщений для пользователей сайта. При отправке сообщения
отправитель видит языки, которые понимает получатель и либо сам пишет на
указанном языке, либо пользуется системой перевода. Для частых случаев есть
набор стандартных запросов/ответов. Например
"Какова минимальная партия товара #[____]"/"Минимальная партия товара #[____] - [___] единиц".
Все стандартные сообщения заранее переведены, поэтому отправитель и получатель
могут видеть одно и то же сообщения на своем родном языке.
-
Пользователи могут отдельные фирмы/товары заносить в папку "Избранное" (на сайте,
а не в браузере) для дальнейшего просмотра. При этом сообщения от "избранных"
пользователей показываются отдельно. Так же есть и "черный список" для
нежелательных корреспондентов.
Система электронных услуг "Сервис Онлайн"
Хабаровский сервис для оплаты
коммунальных услуг, городской/мобильной связи, пополнения электронных кошельков
и т.п. через Интернет/SMS/WAP.
Во время разработки платежной части,
работающей с клиентами, мной на PHP/Smarty/MySQL-InnoDB было
реализовано:
-
Ядро платежной системы, поддерживающее различные типы поставщиков услуг и
предоставляющее интерфейс для запроса списка поставщиков и их параметров, а
также для совершения платежей.
-
Модули взаимодействия (XML-over-HTTP) с различными поставщиками:
ОСМП, E-Port,
местными интернет-провайдерами и интернет-магазинами.
-
Модуль для пополнения лицевых счетов пользователей при помощи кредитных
карт через CyberPlat.
-
Модуль для приема/отправки SMS-сообщений через GSM-модем.
-
Регистрация пользователей, настройки пользовательских профилей, настройки
регулярных платежей (лицевые счета, телефоны и т.п.).
-
Три пользовательских интерфейса для работы с системой: Интернет,
WAP, SMS.
-
Различные режимы заполнения платежных форм: в сторону одного или нескольких
поставщиков одновременно, с нуля или на основании предыдущих платежей или
заранее настроенных шаблонов.
-
Для Интернет-интерфейса были созданы
дополнительные сервисы:
прием объявлений в газеты и, бегущей строкой, на телевидение, доставка
питьевой воды.
-
Формирование различных отчетов и реестров для менеджеров системы.
На ранних этапах разработки PHP-версии было решено использовать её как прототип
для проверки/обкатки решений и параллельно писать "боевую" версию системы на
(Java5/Tomcat/Struts/Hibernate). Я принимал участие и в этом
проекте:
-
Пользовательский Интернет-интерфейс (вся связанная с этим бизнес-логика,
Struts actions, JSP, custom JSP-tags).
-
SMS-интерфейс для работы дилеров.
-
Универсальный модуль для формирования реестров платежей (XML-конфиги
читаются через Dom4J/XPath, текстовые и RTF-реестры генерируются при помощи
Freemaker).
NexGen Pharmacy Application
Разработку нового рабочего места аптекаря для
RiteAid вело несколько оффшорных команд.
В русской команде я был тестером, кодером, а потом и руководителем. Приложение
- "толстый" Swing-клиент на Java со сложной бизнес-логикой
(>1500 классов), общающийся с мэйнфреймом при помощи XML-запросов/ответов
и использующий MS SQL Server в качестве локального кэша.
Наша команда (естественно и я в том числе) занималась:
-
Реализацией/тестированием бизнес-логики согласно usecases/UML-диаграммам,
присылаемым архитекторами с "той стороны" и интегрированием этой бизнес-логики
с GUI, который писался другой командой. Работа несложная - JDBC, SQL,
XML, JUnit и прочие стандартные buzzwords.
-
Техническими исследованиями (проверка тех или иных возможностей
используемых библиотек, поиск эффективных способов для решения различных
технических проблем, написание всевозможных врапперов и утилит). Например мне
пришлось заниматься задачами вроде:
-
Создание сложных отчетов для
Elixir Report Engine. Для
манипуляции данными из нескольких источников активно применялись
функции на Scheme. Для управления внешним видом
в runtime DOM-представление отчета изменялось кодом на
JavaScript. В связи со слабыми возможностями
Elixir Report по форматированию текста иногда приходилось перед
отправкой данных на рендеринг самостоятельно форматировать их
в RTF (причем возможностей встроенных в JRE средства для работы
с RTF тоже оказалось недостаточно).
-
Для встраивания в отчет рекламных блоков поступающих из внешнего
источника в формате PostScript (не EPS) была написана утилита
слияния двух PostScript-файлов в один.
-
Обработка изображений отсканированных рецептов (определение и обрезание
полей, оптимальное уменьшение цветов) перед сохранением их в базу данных.
-
Поиск "тяжелых" SQL-запросов и их "тюнинг" для увеличения быстродействия.
-
Регулярным CodeReview кода, написанного другими командами. Поскольку в
проекте участвовало много индусов, то занятие это было веселым и продуктивным.
Страница о Любви и Ненависти
Идея этого сайта появилась у меня зимой
1998 года после просмотра очередных "Старых песен о главном". Мне к тому
времени до того осточертели все эти
Киркоровы,
Долины и прочие
Буйновы, что захотелось высказаться
самому и дать высказаться другим. Первая версия сайта была написана на коленке
за пару дней и, несмотря на очень ограниченную функциональность, сразу после
запуска вокруг него стало образовываться сообщество пользователей, некоторые из
которых живут на ЛХ до сих пор.
Изначально страница о Любви и Ненависти была реализована на
Perl. После того, как посещаемость сайта возросла и
CGI-скрипты стали тормозить, пришлось переписать его на
PHP/PEAR::DB/Smarty (в те времена было трудно найти дешевый
хостинг с mod_perl или FastCGI). Несколько лет сайт развивался, в него от
случая к случаю совершенно бессистемно добавлялись новые возможности, отчего
код становился все уродливей и в конце концов я решил переписать его с нуля.
При этом из спортивного интереса попробовал написать его в процедурном стиле
без ООП и без использования сторонних библиотек. Эксперимент удался: размер
кода контроллеров и бизнес-логики сократился с семи тысяч строк до четырех с
половиной.
Основные возможности сайта:
-
База пользователей. В профиле показывается масса интересных вещей вроде
индекса любви (отношение положительных сообщений к отрицательным) или списка
любимых тем. См. пример профиля
-
Форум с разделением сообщений по
чувстам любви и ненависти.
-
Дневники с поддержкой RSS (куда
ж без них). Естественно, сообщения тоже разделяются на
любовь/ненависть/равнодушие.
-
Приватные сообщения между пользователями (опять же с любовью и ненавистью :-).
-
Чат.
-
Рейтинги и статистика.
-
Раздел для модераторов (несколько человек на добровольной основе
поддерживают на сайте порядок).
Атлас-маркет
При редизайне этого интернет-магазина
выяснилось, что первый разработчик сайта не зная про MVC смешал PHP- и
HTML-код, из-за чего переверстать сайт стало очень проблематично. Меня
попросили переписать публичную часть сервера не ломая при этом структуру
базы данных и административную часть. И несмотря на то, что оригинальный
код был довольно запутан и во время переписывания в нем находились
серьезные ошибки (вплоть до SQL Injections), в итоге вся работа заняла
всего около недели.
3arabzone.com
Это был интересный проект - чат с очень большим количеством возможностей.
Публичные и приватные комнаты, полный контроль со стороны пользователей над
видом своих сообщений (почему-то для арабов это было очень важно),
конфиденциальные сообщения и почта, 31 уровень пользователей, мощная система
администрирования. К сожалению сайт уже умер, но у меня осталась
подсказка по некоторым командам на "арабском" английском.
В общей сложности поддерживалось около 200 команд.
Все это было написано на Perl/FastCGI/TemplateToolkit/MySQL.
Причем команды реализовывались как плагины и при желании можно было собирать
чат-сервер в произвольной комплектации.
Embellishments Inc. - ювелирный online-магазин
Это первый интернет-магазин,
который я написал. В 1998 году одна хозяйка обычного ювелирного магазина решила
его закрыть и
начать работу исключительно через Интернет.
На тот момент подходящего готового софта не было, поэтому для разработки сайта
пригласили меня. Пригласили прямо в штаты (тогда она жила на Аляске :-) Самое
для меня интересное в этой истории то, что сайт уже столько лет функционирует
без каких-либо существенных изменений (обратите внимание на .php3 в расширениях
файлов!).
По нынешним стандартам этот магазин ничего особенного из себя не представляет:
-
Каталог товаров,
разбитый на многоуровневые категории. Поскольку складской учет
ведется прямо в административной части сайта, то наличие товаров в каталоге
отражается с точностью до одной бусинки.
-
Корзина заказа и форма заказа с возможностью заполнения полей на основе
предыдущих заказов.
-
Прием платежей кредитными картами через CyberCash.
-
Стоимость доставки рассчитывается автоматически через
USPS Web Tools.
-
Административный интерфейс позволяет управлять складом, ценами, скидками,
заказами, вести переписку с клиентами, изменять
подсказки для посетителей и т.д и т.п.
Разное
Я разработал множество разных веб-сайтов, но большинство из них уже
умерло, другими занимаются посторонние люди, а про третьи ничего интересного
сказать не могу. Так что вот просто наугад несколько ссылок на архивы сайтов,
которые я когда-то разработал.
URL: www.stkachuk.ru
E-mail: finn@stkachuk.ru