Пет-проекты и OSS — сжато
Быстрый рефреш перед "расскажи про себя" и "какие у тебя есть проекты". Без кода — только что это, зачем, и что можно сказать вслух за 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) до того, как менять хоть строку.