Skip to content

Instantly share code, notes, and snippets.

@Rulexec
Last active May 9, 2024 23:43
Show Gist options
  • Save Rulexec/8c0e8583c936e26d8d49613a57b14fce to your computer and use it in GitHub Desktop.
Save Rulexec/8c0e8583c936e26d8d49613a57b14fce to your computer and use it in GitHub Desktop.

Александр Рулёв

  • Начал интересоваться программированием в 2006 году (18 лет назад).
  • Беларусь, Минск/Брест.

Опыт работы

Yandex (1+ год, [2023; по текущий момент))

C января 2023 переустроился в Yandex после пары месяцев перерыва после Дзена в HR Tech в разработку внутренних сервисов, вроде корпоративной части календаря (в основном) и прочих.

На этот раз научился поднимать продакшен-инфраструктуру под новые сервисы (балансировщики/запуск сервиса во внутреннем аля-кубернетесе).

В отличие от Дзена не было отдельной команды SRE следящей за алертами и часто приходилось разбираться в разнообразных проблемах: сетевых, проблемами со смежными сервисами, ложно-позитивными срабатываниями из-за прихода ботов-сканеров. Часть времени занимался повышением стабильности сервиса, чтобы меньше мусорных ошибок было на графиках (путём их починки/переводом в ряд штатных ситуаций), настройки умного лимитера RPS, тюнинга дашбордов для лучшего понимания состояния и причин проблем, всякое разное другое.

Yandex (1+ год, (2021; 2022))

C 2 июня 2021 по 13 сентября 2022 работал фронтенд-разработчиком Yandex над продуктом Дзен (был продан VK, туда не пошёл, не было офиса в Минске).

Разработка новых фич, проведение A/B экспериментов, разработка мобильного интерфейса (на DivKit), инфраструктурные преобразования, дежурства и выкатки релизов на продакшен.

Полностью React c Redux, SSR, БЭМ (далее переход на CSS Modules). Немного коммитов в Java-бэкенд, если было легко пробросить нужные данные с бэкенда и все согласились, что они должны приходить оттуда. Познакомился с восхитительной архитектурой организации микросервисов Apphost.

Gurtam (4 года, [2017; 2021))

C 15 декабря 2016 по 4 января 2021 работал фронтенд-разработчиком Gurtam над продуктом Wialon.

Реализация нового функционала, правки старого, модернизация.

Изначально Vanilla JS (с jQuery) плюс серверная генерация HTML из TCL (использовался как PHP), к концу весь новый функционал реализовывался на React, серверная генерация страниц перешла во фронтенд-часть, C++&TCL бэкенд перевёлся на OpenResty (Lua). Надеюсь что далее это ещё раз переведут на nodejs/полностью статический фронтенд.

Пет-проекты

  • Sesuritu — форк антиспам телеграм-бота Shieldy. Пришлось форкнуть из-за того, что антиспам-механизмы которые были в оригинальном боте перестали быть эффективными, а в один из чатов где я состою начало приходить слишком много ботов. Придумали, что хорошо бы чтобы у бота были вопросы которые касаются тематики чата и для каждого могли быть разными, чтобы боты/нанятые спамерами люди не могли легко пройти каптчу. Сделал PR, но мейнтейнер продал бота и похоже никому не интересно там что-то делать. Причёсываю его код потихоньку если нет других дел, если появлятся какие-то запросы, постараюсь реализовать. Надеюсь дойдут руки до настройки мониторинга его работы, такого я ещё не делал.
  • Fiesta — веб-страничка с событиями относительно моей машины. Прикрутил Directus для хранения данных, первый раз использовал Vite, смог реализовать SSR с ним. Код находится на гитхабе https://github.com/anfivewer/an5wer, можно заглянуть в папку packages-fiesta. Планирую добавить ещё графиков всяких (веду учёт стоимости заправок, сколько потратил на различные сервисные работы).
  • Diffbelt — иммутабельная key-value база данных с возможностью получать список изменений значений с момента прошлого получения изменений, что даёт возможность консистентно преобразовывать одни коллекции в другие, проводить консистентные аггрегации, не боясь что скрипты этих преобразований упадут в какой-то произвольный момент времени (в худшем случае можно будет поправить и перезапустить, не сломав итоговый результат). Пока в разработке, есть только in-memory вариант (в nodejs-прототипе), но уже потихоньку обрабатываю логи от Sesuritu им, превращая логи в графики.

Технологии

Абстрактные

  • Адепт MVC (в разных его формах), Dependency Injection, PubSub.
  • Импонирую тестам и TDD.
  • Композиция > наследование

Фреймворки

  • React — хуки, контексты, рефы, императивные handle'ы, эффекты, вот это всё довольно понятно.
  • MobX / MobX State Tree — очень понравилось класть и забирать данные из одного места, в котором ещё и описаны все возможности их изменения, чтобы всё оставалось консистентным.
  • Effector / Reatom — кажется что этот подход к организации состояния для некоторых случаев сильно всё упрощает. Хотя сложную логику кажется что всё равно лучше написать отдельно, а не пытаться десятком sample и эффектов уместить в рамках эффектора, иначе такое ощущение что не логику запросов описываешь, а решил докторскую по квантовой физике написать.

Инструменты

core

  • git — уверенное владение, понимание workflow, могу преобразовать дерево коммитов как пожелаю, теми операциями, которыми владею.
  • Linux — использую Ubuntu в быту, постоянно имею личный сервер для разных нужд.
  • Docker — открытие контейнеров стало откровением. Пара команд и ты уже развернул TeamCity, пару агентов к нему, PostgreSQL, InfluxDB, Grafana и оно работает (всё для личного использования). Но и по работе писал докерфайлы с всякими multi-stage билдами.

CI/Deploy

  • TeamCity — имеется базовый опыт использования, включая создание билд-конфигураций, зависимостей между ними.
  • Jenkins — опыта меньше, чем с TeamCity, но понравилось больше.
  • GitLab CI — построил столько же пайплайнов, сколько в TeamCity (занимался их переносом), худшая CI, которую я видел.
  • Ansible — если выкатываю какие-то обновления своих проектов довольно часто, то начинаю писать ansible плейбуки для автоматизации этого.

Сборка

  • webpack — JavaScript-проекты стали сложными, приходится как-то их собирать. Умею разбираться с проблемами, несколько раз пришлось читать код webpack, чтобы понять, почему получаются разные хеши у одинакового кода на разных машинах. Писал плагины.
  • Vite — стал использовать в своих пет-проектах из-за простоты настройки, редко нужна та мощь, что даёт webpack (хотя может разберусь как писать плагины к Vite и он и не нужен будет). Плюс он сильно быстрее вебпака (полагаю из-за esbuild).
  • make — если всё что нужно это сделать несколько файлов, а из них сделать другие файлы, то почему бы просто не использовать make? Не буду выделять отдельным пунктом, для сборки C/C++ проектов использовал cmake с CMakeLists.txt.

Языки

Программирования

  • ECMAScript — использую 7+ лет, не страшусь асинхронности, умение бороться с лапшой, есть два-три года использования node.js.
  • TypeScript — начал использовать в Yandex, изменил своё отношение к нему, теперь все новые проекты стартую сразу на нём.
  • Rust — пишу diffbelt с 2023 года, помирился с borrow checker'ом, лайфтаймами, нравится. Хоть и иногда бесит, что все нужные фичи в nightly.
  • Полузабытые:
    • Java 6/7/8 — читал спецификацию, использовал 3 года, без фреймворков.
    • Kotlin — после Java стал использовать Kotlin для личных проектов (но затем вернулся к node.js). Накидал по работе на Spring Cloud Gateway приложение-прокси с описаниями роутов и какие к ним нужно применять правила конфигом, с походами в другие сервисы перед совершением проксирования, даже ничего так получилось вроде.
  • Прочие (мало опыта):
    • Python — после PHP нашёл для себя Django Framework, там первый раз познакомился с MVC, какое-то время писал хобби-проекты на нём, затем перешёл на Java.
    • C/C++ — моё изучение программирования начиналось с книги C Programming Language K&R, понимаю указатели, память, потокобезопасность, но считаю, что правильнее писать на языках высокого уровня, а если где-то начинаются тормоза и единственный способ ускориться это реализовать это на низкоуровневом языке, то ок. Однако сейчас предпочёл бы Rust для встраиваемой библиотеки/микросервис на Go.
    • Erlang — написал пару серверов для себя, разобрался с процессами/сообщениями/поведениями. Очень понравилось.
    • Haskell — встречаю статьи с попытками объяснения монад примерно раз в полгода, решил разобраться, что за оно. Разобрался, но на практике у меня на нём писать код получается слишком медленно (хоть и работает после первой же компиляции).
    • Go — за сутки, ни разу не видев Go ранее накидал интерпретатор недолиспа. Приятный язык, хотелось бы реализовать несколько сервисов.

Декларативные

  • HTML
  • CSS — верстаю флексбоксами, если флексбоксами сложно и выглядит как сетка, то гридами.
  • Less/Sass/etc — пока в CSS не ввели блоки, чтобы не писать все родительские селекторы, удобнее всё-таки пользоваться препроцессорами (кажется что передумал по этому поводу, с CSS Modules и линейно нормально получается, нечего вложенность и файлы стилей под тыщу строк плодить)

Запросов / etc

  • SQL — умею выбирать, добавлять, изменять, join'ить, особо без фанатизма. Предпочитаю написать пару SQL-запросов вместо подключения ORM сразу, если их всего несколько на всё приложение.
  • Regexp — использую регулярные выражения там, где это легко решает задачу. Если в итоге выражение получается нечитаемым, предпочитаю другие варианты (vim-макросы, небольшой скрипт, несколько последовательных регэкспов).
  • PEG (Parsing Expression Grammar) — умею описывать грамматики, навелосипедил свой парсер на Java (вполне себе функционирует, хоть и медленно (плохая модель кодогенерации)). Описал как минимум грамматику описания грамматики :).

Естественные

  • Русский — нативный, люблю читать и писать.
  • Английский — технический, умею читать документации, воспринимаю на слух на уровне youtube-роликов. Разговаривать где-либо помимо баров не приходилось.

Базы данных

Реляционные

  • PostgreSQL — базовое использование.

Нереляционные (NoSQL)

  • MongoDB — использовал короткое время из-под Erlang и node.js.
  • LevelDB — в личных проектах, где всего один сервер обычно не нужна внешняя БД, достаточно embedded-решения. Впрочем, и в больших системах нужны локальные базы для дисковых кешей/реализации своей распределённой БД. Планирую пересесть на RocksDB, похоже что она активнее разрабатывается (хотя мне хватает и того, что есть).
  • RocksDB — в diffbelt таки пересел. KV как KV.

Контакты

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment