MBL
Go / avito / Сжато / Пет-проекты и OSS — сжато
Go средний

Пет-проекты и OSS — сжато

avitosummaryportfolio

Быстрый рефреш перед "расскажи про себя" и "какие у тебя есть проекты". Без кода — только что это, зачем, и что можно сказать вслух за 30-60 секунд на каждый.

SessionProxy — self-hosted шаринг веб-сессии без раскрытия кук

Что: Go-утилита, reverse proxy. Владелец аккаунта на любом сайте даёт гостю временный доступ "как будто залогинен он", не раскрывая логин/пароль/реальные куки — гость работает через прокси-ссылку с TTL, лимитом запросов и лимитом трафика.

Зачем такая задача интересна для собеса: это не CRUD, а система с реальными требованиями к безопасности и консистентности состояния — есть за что зацепиться на вопросах "а как ты защитил X".

Ключевые сущности (3НФ): users/devices/api_keys (кто и с чего импортирует сессию) → original_session (импортированная сессия владельца) → shared_links (расшаренная ссылка, N:1 к сессии, свои лимиты и TTL на каждую) → guest_sessions (гостевая сессия по ссылке, может быть несколько активных на одну ссылку) → proxy_access_logs + security_events (аудит).

Бизнес-правила, которые стоит проговорить: ссылка не может существовать без владельца и без сессии; превышение usage_counters (запросы/трафик/время) переводит ссылку в terminated, все новые запросы отклоняются; попытка зайти в blacklisted_endpoints (например /settings, /billing) логируется в security_events, после порога max_violation_count — тоже terminated.

Если спросят "почему не просто расшарить пароль": гость физически не видит настоящих кук/токенов — прокси подменяет заголовки на лету, поэтому даже полный дамп трафика на стороне гостя не даёт доступа к аккаунту напрямую и не переживает истечение TTL/лимитов.

itmo-schedule-export — экспорт расписания ITMO в .ics

Что: Python-скрипт, тянет расписание с my.itmo.ru и конвертирует в .ics (стандартный календарный формат, импортируется в любой календарь).

Главная техническая находка, которую стоит озвучить как есть: у my.itmo.ru НЕТ публичного API расписания произвольной группы — только один эндпоинт /api/schedule/schedule/personal, привязанный к текущему авторизованному пользователю через OAuth2/PKCE (Keycloak, id.itmo.ru, тот же логин, что у самого сайта). Проверено эмпирически: без токена — 403 (роут существует, но защищён), варианты вида /schedule/schedule/groups/{id} — 404 (такого роута нет вообще, не просто скрыт).

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

OSS-контрибьюции — реальные PR в известные проекты

Мержены (можно называть с уверенностью, это факт, не "в процессе"): - helm/helm #31957 — fix(engine): make toToml return empty string on error. MERGED. - grafana/loki #21223 — MERGED.

В работе на момент последнего обновления (апрель 2026 — если спросят статус, честно сказать "могло продвинуться, не проверял прямо перед собесом"): - helm/helm #31958 — fix(engine): make toToml return empty string on error-класса фикс, один апрув от мейнтейнера уже есть. - helm/helm #32009 — feat(push): add --output json/yaml/table flag to helm push. Технически интересная деталь: пришлось поменять интерфейс Pusher (возвращает (*registry.PushResult, error) вместо просто error), чтобы прокинуть данные для форматирования вывода — если спросят "почему не просто добавить флаг", ответ: без смены интерфейса неоткуда взять данные для json/yaml-вывода, флаг был бы фиктивным. - prometheus/prometheus #18337, #18457 — добавление параметра match[] в /api/v1/status/tsdb (фильтрация статистики по TSDB вместо выгрузки всего). - dapr/dapr #9667 — fix: preserve trailing slash in direct messaging path sanitization — конкретный баг с потерей завершающего слэша при санитайзинге пути. - jesseduffield/lazygit #5401, #5399 — reset to custom ref в меню git reset; keybinding "скопировать URL ветки в буфер".

Если спросят "зачем контрибьютишь в чужие проекты, а не только пишешь свой код": это единственный способ увидеть, как реально устроен код и процесс ревью в проектах с десятками тысяч звёзд и жёстким CI — требования к качеству там выше, чем в большинстве коммерческих кодовых баз, это прямая тренировка того же навыка, который проверяет код-ревью на собесе.

Если спросят прямо

  • "Расскажи о своём самом сложном проекте" → SessionProxy: реальная модель безопасности (TTL/лимиты/blacklist/аудит), не просто CRUD.
  • "Какой у тебя опыт с open source?" → перечислить 2 смерженных PR по имени (helm, loki) + что ещё в процессе, честно про статус.
  • "Почему сам придумал именно такую задачу (SessionProxy)?" → реальная потребность делиться доступом без риска для аккаунта — не учебная, а практическая мотивация.
  • "Работал ли с OAuth2?" → да, на стороне клиента, интеграция с Keycloak (id.itmo.ru) в itmo-schedule-export, включая PKCE-флоу.
  • "Приходилось ли разбираться в чужом большом кодовом опыте, а не строить с нуля?" → да, каждый OSS PR — сначала эффективное чтение чужого кода (Pusher-интерфейс в helm, санитайзинг путей в dapr) до того, как менять хоть строку.
Как усвоено?