Skip to content

Latest commit

 

History

History
99 lines (69 loc) · 14.8 KB

README-ru-old.md

File metadata and controls

99 lines (69 loc) · 14.8 KB

Личная информация

ilya.chase

  • Full name: Levin Ilya Viktorovich
  • Birth date: 06.12.1992
  • Family status: single
  • Current location: Russia, Chelyabinsk
  • Email address: ilya.chase@yandex.ru

Working experience

  • Май 2016 – октябрь 2019.
  • Компания: «Hearst Shkulev Digital Regional Network».
  • Должность: PHP-программист, Ведущий PHP-программист, Тимлид.

Образование

Высшее: факультет Вычислительной математики и информатики (ВМИ) ЮУрГУ, направление «Фундаментальная информатика и информационные технологии». Очно, бюджет.

Стэк

  • Languages: PHP (Laravel, Symfony, Yii2, Slim, plain modern php7), Javascript (jQuery, Vue.js, vanilla ES6), Golang, HTML, CSS.
  • Tests: PHPUnit, Codeception, Selenium.
  • DBs: MariaDB, MongoDB, Percona, Apache Cassandra.
  • Cache: Memcache, Redis.
  • Async: RabbitMQ, beanstalkd.
  • Containerization, CI\CD: Docker, drone.io, Jenkins.
  • Infrastructure: Nginx, PHP-FPM, HAProxy, Sentry, Pinba, Grafana.

Примеры кода

Раз и два.

О себе

Кратко о карьере

Сразу после защиты диплома получил должность PHP-программиста в 74.ru. Хотел именно туда, потому что 74.ru – это хайлоад, сложный продукт, разрабатываемый крутой командой. Уже к концу года получил повышение до Ведущего PHP-программиста. После интеграции 74.ru и NGS.ru, занимался такими проектами, как НГС.Знакомства, НГС.Афиша, НГС.Форум, НГС.Объявления и другими. Последний год был Тимлидом команды веб-разработки из 6 человек. Занимался все спектром разработки – не только код, но и инфраструктура, архитектура и дизайн приложений, CI\CD, улучшение процесса разработки (внедрял SCRUM), внедрение стандартов. В свободное время занимаюсь фрилансом на зарубежной бирже.

О компетенциях

Код

В момент устройства в 74.ru, наша команда активно развивала проект, на котором «крутились» все сайты сети Rugion: 74.ru, 72.ru, 63.ru и остальные. Помимо новостных ресурсов, на том же коде работали classified-площадки: domchel.ru (сейчас интегрирован с N1), autochel.ru (интегрирован с auto.ru) и их зеркала на других регионах.

Код представлял собой рукописный фреймворк с более чем 1 300 000 строк (без учёта вендоров). В тот момент для меня это была самая сложная система, над которой я когда-либо работал. В результате, получил скачкообразный рост, познакомился со многими подходами (реализация отказоустойчивости, распределение нагрузки, организация кода в мульти-доменной многосервисной системе) и хайлоадными «фишками» (изменение структуры очень горячих таблиц, работа с «долгими» скриптами (от нескольких дней), умный stale-кэшинг и т.д.).

Stanok code stats

Далее были проекты вертикали НГС: Знакомства, Афиша, Форум, Объявления. Они были написаны давно, на внутреннем фреймворке. По сути, все стандартные элементы любого фреймворка, но написанные руками: роутинг, request\response, ORM, CLI-команды. Для НГС.Афиши писали новое API на фреймворке Slim, описывали Swagger'ом.

Последний год с новой командой, в которой я был Тимлидом, работали над всеми Форумами HSD RN (74.ru, NGS.RU, NN.RU и E1). Из наиболее запомнившегося можно выделить исходный код NN.RU, который в части сложности, запутанности и количества легаси переплюнул всё, с чем приходилось работать до этого. Приняли решение переписывать его постепенно, внедрив рядом микро-фреймворк Slim. Тем самым, бизнес-задачи не стопорились, а код постепенно переносился на новые рельсы. Опыт успешний, сделали несколько довольно крупных задач (например, рездизайн страницы темы на форуме), количество «живого» кода на новых рельсах увеличивалось, а стоимость разработки уменьшалась.

Фреймворки

Помимо основной работы, неприрывно пробую новые технологии на фриланс-заказах. Таким образом наработал навык быстрой разработки на yii2. Нравится gii, но не нравится то, что модули этого фреймворка прибиты к нему гвоздями, не реализуя PSR-интерфейсы.

С Laravel познакомился при работе над NN.RU – там был набор «микросервисов» (по сути, отдельных небольших проектов) на Laravel, реализующих разный бизнес-функционал (работа с форумом, юзерами, галереями и т.д.). В Laravel нравится DI и реализация консольных команд через artisan, но сильно не нравятся Фасады, которые убивают поддержку кода IDE. Приходится использовать специальные хаки (кстати, в yii2 тоже есть такая проблема).

Работая на Slim 3, тут и там сталкиваешься с тем, что нужно внедрить довольно тривиальный функционал: поддержка CLI-команд, авторизация\аутентификация, поддержку кэшей и т.д. Ничего этого нет в Slim «из коробки» (ведь это микрофреймворк), и в данной ситуации отлично помогает Symfony. Их реализация консольных команд остаётся моей любимой, а компонент авторизации действительно framework agnostic и безболезненно интегрируется в Slim (да и любой другой фреймворк). Отдельной похвалы заслуживает DomCrawler, который избавляет от боли работы с разметкой через регулярки или XPath (который не так тривиален, как кажется на первый взгляд).

Stanok code stats

Желание больше писать на микрофреймворках обусловлено стремлением к написанию framework agnostic кода. Со временем хочу прийти к написанию приложений не на MVC, который морально устаревает, а на какой-нибудь реализации Clean Architecture, которая по определению не зависит от фреймворков. Пока что прихожу к тому, чтобы более тщательно раскладывать код по модулям, и более детально разбиваю букву «M» из MVC на слои.

Примеры моего кода можно увидеть здесь и здесь.

Помимо этого, имею представление о современном фронте: на мобильную версию НГС.Знакомств внедряли Webpack + Vue.js. Немного сам умею в Javascript: начинал как и все с jQuery, затем перешёл на ES6 и Vanilla. Проявляю интерес к Golang (есть выполненные фриланс-заказы на нём).

Тестирование

Я люблю тестирование и то, как вследствие написания тестов изменияется и расцепляется код. В компании внедрял сначала end-to-end тесты через Selenium, потом перешли на более быстрые функциональные + юнит тесты. Использовал как Codeception, так и обычный PHPUnit.

Tests output

Инфраструктура и сопутствующие технологии

Помимо непосредственно написания кода, во время работы познакомился с подходами в построении архитектуры для highload-приложений. Довольно плотно работал с Nginx, понимаю, как балансировать с помощью HAProxy и proxy_pass. Работал с кластерными решениями баз (Percona, MongoDB cluster, Apache Cassandra) и хранилищ статики (OpenStack Swift). Для отложенных задач использовал RabbitMQ и beanstalkd.

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

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

Кроме реляционных баз, работал с MongoDB, Redis и Cassandra. Из поисковых индексов работал со Sphinx и Manticore. Есть желание познакомиться с другими – например, с Elasticsearch.

Довольно неплохо понимаю, как работает HTTP: не составит труда рассказать, как работает SSL, что такое CORS или написать простой GET-запрос текстом прямо в telnet.

И вообще, считаю полезным уметь при необходимости из терминала отредактировать файл через vim, что-нибудь grep-нуть, а если надо, то послушать весь трафик по порту через ngrep.

ngrep

Мониторинг

Для команды разработки важно получать сигналы о проблемах на продакшне. Отлов ошибок мы делали в Sentry, а время работы элементов системы измеряли с помощью Pinba – собирали данные и затем складывали в Grafana. Там же агрегировали значения из логов Nginx. Для мониторинга железа и настройки соответствующих триггеров в компании использовался Zabbix.

grafana

Мотивация

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