Я (Лена) и моя (не)работа: nelenkin.club
الذهاب إلى القناة على Telegram
Я Лена, ex-Googler, жила в Германии, Великобритании и еще много где. У меня есть global talent виза в Лондон, но сейчас живу в Белграде. My opinions about System Engineering Вот я: @lenka_colenka https://boosty.to/lenaan
إظهار المزيد2 749
المشتركون
+324 ساعات
+157 أيام
+4530 أيام
أرشيف المشاركات
+1
Как у меня попытались украсть еще не написанный курс
Я планировала читать курс по System Design Case Studies в Harbour Space в Барселоне уже через две недели. Вчера я села за слайды к лекциями и заодно решила поговорить с кем-то опытным, как лучше рассчитать нагрузку на домашку для студентов.
Для этого я полезла на сайт университета и поискала похожие курсы, чтобы найти коллегу, с кем можно будет обсудить учебный процесс. Вот удача! Нашла похожий курс, тоже про System Design, который будет читаться осенью, то есть позже моего курса. Я начала читать описание курса, темы на каждый из 15 дней, цели обучения... И как-то стало не по себе! Курс уж слишком похож!
Я осознала, что описание курса, который будет читать кто-то другой — это слово в слово черновик описания моего курса, который я отдала университету еще в январе! С тех пор я уже переработала курс, какие-то темы убрала, какие-то добавила, перефразировала цели курса. А мои сырые мысли оказались на сайте, без никакого указания меня, зато с красочным описанием другого преподавателя! Очень неприятное чувство, что пытаются украсть мои мысли прямо из головы, еще до того, как я вытащила их на бумагу!
Давайте я поясню за мой курс. Это не школьная программа, когда все учителя в стране учат по одному учебнику. Этот курс очень ценен для меня, я уволилась с хорошо оплачиваемой работы специально для того, чтобы его написать. Я вложила в него свой опыт 8 лет работы в индустрии, сотни собеседований, которые я провела как интервьюер и еще десятков моков и консультаций, которые я провела для тех, кто готовится к собеседованиям.
У меня есть планы на этот курс, которые не заканчиваются на том, чтобы один раз прочитать его в Harbour.Space. Я хочу выложить его на Степик, Udemy, Youtube и куда только дотянутся мои руки. Если у меня и не получится заработать на этом курсе, я как минимум хочу, чтобы интернет знал, что мой текст — это мой текст. К тому же на многих площадках есть проверка на плагиат, я не хочу потом все оставшуюся жизнь доказывать, что я не своровала свои мысли.
После того, как спросила в университете, как так получилось и что это значит, ведь согласно контракту моя интеллектуальная собственность остается моей, они удалили описание курса с моими материалами и другим преподавателем. Но, к сожалению, доверие уже подоравано.
В общем, в Harbour Space я преподавать не буду. Курс я напишу, выложу его на Степик, там хотя бы он будет висеть с моим именем.
Когда я увольнялась, я говорила, что у меня две большие цели: сделать видео-курс по System Design и дальше развивать свой клуб чтения сложных книг по программированию
Над клубом я работаю уже почти полтора года full-time, а вот видео-курс по system design буксует. Осенью я прочитала курс по System Design в университете в Германии, но никак руки не дошли его выложить в интернет. Через две недели уже я буду читать курс System Design Case Studies в университете в Испании, и кажется мысли начинают складываться и для видео-курса.
Когда человек ищет материалы по system design, многие ищут конкретные вопросы (спроектируй TicketMaster, спроектируй Авито), изучать failure modes не так интересно. А как объяснить, в чем загвоздка дизайна TicketMaster, если сначала не проговорить, что машины и сеть могут фейлиться!
В общем, идея пока такая: два видео-курса
- 1. System Design для cобеседований: Основные принципы, где рассказывать про репликацию, партиции, и чем базы данных друг от друга отличаются
- 2. System Design для Собеседований: Case Studies, где будет разбор конкретных вопросов
Дай бог собрать все мысли в кучку и не забить оформить это в нужный формат!
а я все еще провожу консультации по system design!
если у вас собес на следующей неделе, вы в принципе что-то читали, но хочется систематизировать + уложить в формат + потренироваться на английском + получить обратную связь, пишите мне! @lenka_colenka
Алишер поделился моим постом про опен-сорс в виде статьи у себя на сайте!
Кстати, если хотите позвать меня к себе на подкаст (например как это сделали linkmeup), или интервью взять, или совместно статью написать, пишите мне в личку @lenka_colenka!
Расскажу вам и про работу в Google, и про Kafka, и про преподавание в университете заграницей, и что на system design собеседованиях спрашивают!
Как я полгода (не) обновляла access token для Patreon
# Что такое `access token` и как он используется
У меня в клубе nelenkin.club подписку можно получить либо за презентации, либо за донаты на Boosty или Patreon. И естественно, список патронов я веду не руками, а получаю по Patreon API. Для этого создала клиента, Patreon выдал
access token, запросы летают! Казалось бы, все хорошо, но через месяц работы я стала получать вместо списка патронов 401 Unauthorized. Дело в том, что access token-ы работают только месяц, и раз в месяц надо их обновлять.
# Как работало раньше — обновляла руками
Между путешествиями, новыми фичами и новыми потоками у меня не доходили руки решить проблему системно, поэтому в боте у меня была заглушка, которая писала мне в личку каждый раз, когда бот получал 401 Unauthorized от Patreon. Я заходила на сайт Patreon, руками обновляла access token и вставляла его в .env на продакшен машине. Некрасиво, да, но занимает пару минут в месяц, пока можно потерпеть!
# Что такое `refresh token` и как им пользоваться
Для каждого зарегистрированного клиента Patreon дает не только access token, но и refresh token. По refresh token можно получить новый access token запросом к API, а не заходя на сайт мануально. Access token протухает каждый месяц, а refresh token -- только тогда, когда им воспользуешься. Итого, запросом к API можно один refresh token поменять на один новый access token + новый refresh token.
# Как я пыталась решить проблему, в какой rabbit hole закопалась
И вот на этой неделе у меня наконец дошли руки автоматизировать обновление access token используя refresh token, как сложно это может быть? Но то ли белградская жара на меня повлияла, то ли ChatGPT меня специально пытался запутать, но следите за руками, в какую rabbit hole я угодила.
Во-первых, в запросе "получить активных патронов" используется pagination, потому что возвращаемый список может быть большим (slay 💅).
Получается, в коде что-то вроде
url = init_url
while url:
try:
r = requests.get(url, params)
r.raise_for_status()
data = r.json()
except e:
...
process_data(data)
url = data.get("links", {}).get("next") # go to next page if exists
Хочется в обработке exception выделить случай, когда ошибка -- это 401 Unauthorized, в этом случае обновить access_token и еще раз сделать ту же самую итерацию, не обновляя url.
Стоп, продолжать ту же самую итерацию звучит страшно, а что если по какой-то причине Patreon вместо access token начнет возвращать мусор, или например я буду получать 401 Unauthorized не из-за протухшего access token, а из-за чего-то другого? Я зайду в бесконечный цикл очень быстрых запросов к Patreon и сообщений мне в личку, что бот получил 401 Unauthorized. Если бы мой телеграм бот был написан на лямбдах, такое могло бы разорить меня, пока я сплю! У меня бот не на лямбдах, а на EC2 машинке с фиксированной ценой, но все-равно за-rate-limit-енной на Patreon и в телеграме быть неприятно!
Так, ну получается боту нужно иметь ограничение на количество попыток получить новый access token, и если ограничение превышено, то сдаться и позвать человека (меня). Что-то вроде
MAX_ACCESS_TOKEN_RETRY_COUNT = 3
retry_count = 0
url = init_url
while url:
try:
r = requests.get(url, params)
r.raise_for_status()
data = r.json()
except e:
if e.response.status == 401:
if retry_count < MAX_ACCESS_TOKEN_RETRY_COUNT:
retry_count += 1
refresh_access_token()
continue
else:
# позвать живого человека!
# код ниже не доступен на итерации, которая получила 401
# мы его скипнули из-за continue и url не обновили
process_data(data)
url = data.get("links", {}).get("next") # go to next page if exists
Погодите-ка, но ведь access_token протухает каждый месяц и за 3 месяца работы без перезапусков бот гарантированно не сможет больше обновлять access token-ы.
Получается, этот код должен знать что-то про время и обнулять количество попыток раз в месяц...
# Решила следовать KISS принципу
Слава богу в этот момент мне принесли ледяной бамбл кофе и он привел меня в чувства!
Если мне надо делать что-то периодически, то подвесить это на cron и бог с ним!
Так и порешила -- отдельный скрипт, который про бота ничего не знает, а знает только про .env файл и умеет только стучаться в Patreon API и менять refresh token на новый access token + новый refresh token. Подвесить его на cron, не считать, сколько дней в месяце, а исполнять его в первый и шестнадцатый день месяца, чтобы поменьше думать, и пойдет!
Да, этот подход поломается, если Patreon вдруг решит, что access token-ы теперь протухают быстрее, чем за 15 дней. Да, бот сам себе обновить access token не может, и если по какой-то причине cron отвалится, то он все так же напишет мне в личку сообщение и больше ничего сделать не сможет. Зато я сохранила систему довольно простой и точно не сделала ее хуже! А в боте и так многое завязано на то, что я в рабочее время могу в течении 5 минут залогиниться в прод и починить что-то, так что это решение вполне себе приемлимо!
# Мораль
Каждую фичу в реальной системе можно имплементировать множеством способов, и есть много способов на ровном месте усложнить систему до бесконечности.
Знание, как система оперируется -- важный фактор в принятии решений для дизайна системы. Писать код для космического зонда, который будет лететь десятилетия без возможности обновиться — это совсем не то же самое, что писать код для системы, у которой 24/7 есть онколл инженеры, которым платят, чтобы они за 5 минут могли залогиниться в систему в случае проблемы. Используйте это знание и не усложняйте систему без необходимости!А мы в клубе будем писать свою LLM c нуля! Чегооо? Очень страшно!
Но в этот раз у нас не только книга, но и книга, и упражнения, и видосы на youtube! Наверно как-то справимся! Из prerequisites: Python, PyTorch пригодится, но про него еще на первом звонке поговорим, опыт с deep learning будет полезен, но не обязателен!
Ссылки:
- все ссылки на ресурсы на https://sebastianraschka.com/llms-from-scratch/
- книга вот
- упражнения вот
- видосы вот
- что за клуб вот
Звонки по пятницам в 18:00 по Берлину, первый звонок 26 июня, залететь в это можно через бот @nelenkin_bot, подписаться на новости о потоке командой /courses -> Пишем свою LLM с нуля -> Хочу участвовать
@nelenkin_bot
Если честно захотелось...
https://labs.iximiuz.com/skill-paths/linux-storage-101#introduction
Готовишься к BigTech, но не хватает поддержки?
Хочу рассказать про Electi — платформу для подготовки к собеседованиям в Big Tech. Electi не обещает быстрый результат, но обещает направление и поддержку тем, кто хочет упорно работать ради оффера в FAANG. Программа подойдет тем, кто готов выделить 10–15 часов в неделю на протяжении 6–12 месяцев.
Для миддлов есть направление Accelerator:
- 1-1 наставничество с ментором из FAANG
- подготовка по индивидуальному плану
- стадия deployment после 6-месячного интенсива: прямые рефералы, тренировки интервью и помощь в переговорах о зарплате
Для джунов подходит направление Foundation:
- подготовка в небольших группах не более 8 участников
- отслеживание прогресса
- ускоренный онбординг в Accelerator
Подробности в @electi_bigtech и на сайте https://www.tryelecti.com/
#реклама
Часто вижу возмущения, что чей-то PR в опенсорсный проект не смерджили, и некоторые даже говорят, что такие мейнтейнеры не понимают, что такое опен-сорс. Решила внести свои пять копеек в то, что опен-сорсем является, а что нет
- Проект опен-сорсный, значит, его разрабатывают энтузиасты бесплатно
Нет! Многие опен-сорс проекты разрабатываются компаниями, которые платят зарплату разработчикам. Я вот контрибьютила в Redpanda и мне за это вполне платили зарплату. Обычно это значит, что часть репозиториев компании открыты, часть закрыты. Установить систему и попробовать продукт может каждый, но за enterprise фичи уже надо платить
- Проект опен-сорсный, значит, мой "правильный" PR обязаны смерждить
Даже если PR делает то, что описано в issue и компилируется, это не значит, что его смерждат. Большая часть работы разработчика — это не написание кода, а уточнение требований, согласование и прояснение неясных моментов. Описания в issue часто неполные, и почти всегда оставляют пространство для разных способов реализации. И вам, как человеку не из проекта (и, следовательно, без доступа к PM), часто эти требования прояснить невозможно, а писать реализацию вслепую — это лотерея.
Некоторые проекты, например SQLite, open-source, но не open-contribution. То есть посмотреть на исходный код можно, но изменения принимают только от ограниченного числа людей.
Так как же сделать так, чтобы твой PR смерждили?
Самый надежный способ — это быть пользователем проекта. Если ты много используешь проект и нашла баг в каком-то нестандартном сценарии, то PR c фиксом и инструкцией, как воспроизвести баг, обычно залетит на ура! Если хочешь новую фичу — смотри политику contributing.md, но если ты правда пользователь, то обычно сможешь предложить что-то более адекватное и нужное проекту. Например, политика contribution в язык Zig говорит, что самую большую пользу можно принести, если писать свой проект на Zig.
Почему опен-сорс мейнтейнеры такие снобы?
Опен-сорс проекты существуют для того, чтобы они работали, а не для того, чтобы удовлетворять чье-то тщеславие. Представьте, что в ваш дом каждый день приходят толпы студентов-дизайнеров и пытаются все поменять в вашем доме, потому что им в дипломе нужна строчка, что они внесли изменение в ваш дом. Звучит неприятно! Так вот, люди, которые будут чинить баги после того, как вы запишете себе строчку в резюме "контрибьютил в опен-сорс" — это и есть мейнтернеры проекта. Тот факт, что вам дали право смотреть на дом, не означает, что ваше предложение снести капитальную стену должны принять. Относитесь к жильцам с уважением!
cделала дэшборд с данными за последний год, сколько человек ходило на Zoom звонки в моем клубе nelenkin.club по разным потокам!
как можно увидеть, самые бодрые потоки начинаются примерно с 50 человек на созвоне и заканчиваются с примерно 15 людьми на звонке!
Приходите и вы в nelenkin.club!
PR года смерждили 5 часов назад в Bun
https://github.com/oven-sh/bun/pull/30412
PR на 6755 коммитов полностью переписывает Bun с языка Zig на Rust. PR написан с помощью claude code за неделю, детали обещают в блог посте, который еще пишется.
Bun — это runtime, package manager, bundler и all-in-one toolkit для JavaScript. Напомню, Bun был куплен Anthropic еще в декабре прошлого года. Создатель Claude Code говорит, что в Anthropic никто не пишет код руками.
Из-за этого уже был конфликт между Bun и Zig. Bun был самым большим проектом на Zig и поддерживали свой форк языка Zig, в который добавили семантический анализ и дополнительную кодогенерацию. Когда Bun захотели влить свой форк в основной Zig, Zig его не принял из-за своей строгой no AI policy.
Встает вопрос, что дальше случится с Bun? Откроется ли бесконечный ящик с уязвимостями и непредсказуемым поведением? Начнут ли массово уходить клиенты? Или все проедет гладко и это станет примером удачного выполнения огромного проекта в максмимально короткие сроки с помощью AI?
Лично я Bun не пользуюсь и меня это событие очень радует. Чтобы с Bun ни случилось, в индустрии появится конкретный пример, к которому можно будет прибегать в ai спорах, а не только жить в гипотетических предположениях
Летом 2024-го я отважилась на самую большую авантюру в жизни: взяла отпуск за свой счет и уехала в Нью-Йорк на ретрит для программистов в Recurse Center на три месяца, чтобы наконец разобраться, как сделать свой сайт!
Тогда же я начала свой книжный клуб с одной целью -- дочитать наконец Designing Data-Intensive Applications (aka книга с кабанчиком)
Все началось с чата в телеграме -- мы читали по главе в неделю самостоятельно, а раз в неделю собирались на звонок обсудить главу и вели очередь, кто делает презентацию
А через несколько месяцев зашел новый человек и сказал, что присоединится к следующему потоку. Я тогда удивилась, ведь следующего потока я не планировала!
Но раз люди хотят, я организовала его!
Сейчас клубу уже два года, кабанчика мы читаем уже в пятый раз! А между делом прочитали SRE book, Designing ML system и провели более сотни моков по Leetcode!
Вступайте в клуб, давайте вместе разбираться в сложных вещах!
https://nelenkin.club
Ура наконец я сделала сайт для своего клуба nelenkin.club!!
Я давно понимала, что есть много людей, которым инетересен клуб, но непонятно, что это такое и как им пользоваться! Надеюсь этот сайт может помочь сориентироваться новым людям!!
Пожалуйста скажите, как получился сайт и стало ли теперь что-то более понятно!!!
а вот прикол, что если погуглить мое имя, можно в интернете получить страничку преподавателя в универе
https://harbour.space/faculty/Elena-Anyusheva
Мы будем читать The SWE's Guidebook! Книга, которую в DeepMind все друг другу советуют (у меня есть инсайдерская информация!), книга, после которой мы не будем барахтаться как котята в огромном непонятном корпоративном мире, а поймем, какие есть компании (и их tiers), что ожидают от программиста на каждом этапе карьеры, как получить promotion и не выгореть.
https://www.engguidebook.com/
Автор — бывший Principal в Skyscanner и Engineering manager в Uber
Начинаем через неделю, во вторник 12 мая. Как всегда, читаем по главе в неделю самостоятельно, раз в неделю (во вторник в 19:00 по Европе) встречаемся обсудить, кто что по этому поводу думает.
Чтобы участвовать, надо
- в боте @neLenkin_bot представиться командой
/join и вступить в клуб
- опять-таки в боте @neLenkin_bot найти этот поток командой /сourses и сказать, что хочешь участвовать
- в какой-то момент я попрошу либо сделать презентацию, либо $15/мес, но это будет через две недели, тогда уже сам решишь, нужно ли оно тебеесли хотите, чтобы я вам тоже что-нибудь рассказала (про распределенные системы или Kafka, ну или про пет-проекты, ну или как коммюнити менеджить), зовите меня! Лекцию прочитать, на подкаст сходить, dev days в компании, конференцию какую-нибудь, все буду рада! писать @lenka_colenka, вот мой линк
а я недавно была экспертом в стартап-акселераторе в универе, где я лекции осенью читала. Мне благодарность выписали!!
ура новое видео на ютьюб!
https://youtu.be/b175dgyHrPg
рассказываю, как я деплою свой телеграм-бот @neLenkin_bot + это отрывок из встречи клуба!!!
