Я (Лена) и моя (не)работа: nelenkin.club


Гео и язык канала: Россия, Русский
Категория: Технологии


Я Лена, ex-Googler, жила в Германии, Великобритании и еще много где. У меня есть global talent виза в Лондон, но сейчас живу в Белграде.
My opinions about System Engineering
Вот я: @lenka_colenka
https://boosty.to/lenaan

Связанные каналы  |  Похожие каналы

Гео и язык канала
Россия, Русский
Категория
Технологии
Статистика
Фильтр публикаций


Новый поток Designing Data-Intensive Applications, второе издание со следующей недели!

Звонки будут по четвергам в 18:00 по Берлину (неважно, летнее или зимнее время в Берлине), первая встреча 27 августа

Обсуждение в топике t.me/lenka_ne_club/18033.

Успейте записаться на поток в боте: /courses -> "Хочу читать кабанчика" -> "Хочу участвовать"

928 0 10 5 24

смотрите что мне Patreon пишет!

это мой клуб приносит людям пользу, а они мне за это платят! Приятно!


скоро будут большие изменения 👀


есть такое развлечение у (ex)-FAANG-еров — раз в несколько лет не проходить собес в Jane Street

Я вот в свое время не прошла собес на стажировку на research позицию, теперь буду на Software Engineer пробовать!🫡


Jeff Dean уходит из Гугла!🤯🤯🤯

Чел был тридцатым сотрудником Гугла, придумал во все датацентры Гугла поставить по атомным часам, Protobuf, MapReduce, TensorFlow и очень много всего другого!

С 2018 года он был в Google AI, а теперь ушел делать свою компанию DiscoveryLoop, чтобы с помощью AI решать научные задачи.

Видимо пора продавать свои GOOG (не инвестиционная рекомендация)


Andy Pavlo (вы его можете знать по лекциям про базы данных на YouTube) теперь в ClickHouse! 🤯


Контента не будет, админ в Риме мочит ручки в фонтане и кушает джелато


А тем временем в клубе закончился третий поток по Leetcode Grind — поток совместного решения задач из списка Blind 75 на самые популярные темы с собеседований.

У каждого потока в клубе есть куратор -- тот, кому надо больше всех и кто не забросит поток даже если другие забросят.

Я познакомилась с Владимиром в марте, на звонке по чтению Designing Data-Intensive Applications. Он мне рассказал, что сам прорешивает литкод и готовится к собеседованиям. Он хотел бы это делать регулярно в группе, но в принципе будет этим заниматься и сам.

А на прошлой неделе подошел к концу поток, который Владимир курировал! 16 встреч, 75 задач, регулярность и взаимная поддержка. Посмотрите, какой отзыв он оставил в конце потока 🥹


Bun, Zig и Rust: я не договорил!!

Прочитала две ответочки на пост про переписывание Bun на Rust.

1. Естественно, пост автора языка Zig Andrew Kelly.

Andrew — панк в мире программирования. В посте есть разбор характера Jarred-а (создатель Bun, который и переписал сейчас его на Rust) и много нефильтрованного презрения. Andrew остается верен своим принципам и публично говорит о ситуациях, где миллиардные компании расходятся с ним в интересах.

Технических деталей в этом посте не ждите (только разве кроме того, что compilation time — важный фактор в выборе между Zig и Rust, и именно это Jarred решил опустить в своем посте), но будет интересно почитать тем, кто хочет узнать, как строится коммюнити вокруг языка программирования.

2. Подробный и взвешенный пост от Ray Myers

Автора нельзя назвать луддитом, он сам работал Chief Architect в стартапе, который делает coding агентов. Но он обращает внимание на много логических провалов в оригинальном посте, суть которых можно свести к

AI was powerful enough to do this rewrite... not powerful enough to catch a use-after-free


В Bun были проблемы с memory safety в версии на Zig, но Jarred не попробовал ни один способ, кроме как переписать полностью на Rust.

- Style guide, который якобы невозможно поддерживать в проекте на Zig, вполне себе использовался в виде PORTING.md документа агентом при переписывании на Rust.
- добавление трех строчек кода для обработки указателя в функции в Zig представляется как невозможное решение, когда сам Jarred говорит, что в компании никто уже давно не печатает код руками
- ну и Andrew в своем посте предполагает, что пост писался два месяца как раз потому что в Bun приложили инженерные усилия в версию на Rust, чтобы улучшить размер бинарника. Хотя таких же результатов можно было добиться и на Zig, но Jarred решил не пытаться улучшить код на Zig

Итого, переписывание Bun на Rust — отличная маркетинговая кампания для Anthropic и возможно хорошее решение с бизнес точки зрения, но с технической точки как минимум плохо объяснено.


Прочитала большой пост про переписывание Bun на Rust, чтобы вам не надо было!

Напомню, что 14 мая Bun смерждил пулл-реквест с 6755 коммитами, который переписывал весь проект с языка Zig на язык Rust. Переписать проект в полмиллиона строк кода заняло 11 дней, а написать про это блог-пост — еще два месяца😄

https://bun.com/blog/bun-in-rust

tl;dr:
- Переписывание заняло 11 дней, 64 Claud-ов управляемые через dynamic workflows, по цене API это вышло бы $165,000

- для портирования использовалась тогда еще не доступная публично Claude Fable 5

- Просто сказать "Claude, перепеши с Zig на Rust, не делай ошибок" не помогло бы, автор очень технически сильный, он уже портировал (руками, до LLM) esbuild-овский транспайлер с Go на Zig (так и получился Bun с самого начала)

- Автор использовал различные сценарии динамических workflow для переписывания, исправления ошибок компиляции и исправления кода, чтобы проходили тесты

- Например, для написания кода использовался один "писатель" и два отдельных от него "ревьюера". Отдельно автор запретил им некоторые git команды, чтобы они не мешали друг другу

Что получилось в итоге?
- да, очень много unsafe кода, потому что это ненативный Rust код, а механический порт с Zig, но автор обещает, что со временем станет лучше

- да, баги есть, в том числе и те, которых в версии на Zig не было, но их уже починили, и новые обещают чинить быстро

- Целый класс ошибок, связанных с lifetime management и освобождением памяти передвинулись из runtime в compile time, что в принципе и было целью переписывания

Лично я смотрю на это все еще скептически, надо иметь в виду, что автор работает на Anthropic, который хочет продать миру как можно больше токенов. Но разбор получился интересный, невозможно не уважать автора за упорство и за то, что довел проект до конца.

Thanks to all the parallelization & this prep work, at peak Claude wrote about 1,300 lines of code per minute. ... Absolutely none of it worked yet.


Если бы я оказалась в такой ситуации, навряд ли я довела бы это до конца)


Как у меня попытались украсть еще не написанный курс

Я планировала читать курс по 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, где будет разбор конкретных вопросов

Дай бог собрать все мысли в кучку и не забить оформить это в нужный формат!

2k 0 4 6 116

personal update: я теперь замужняя женщина!

2.5k 0 17 49 630

а я все еще провожу консультации по 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

6.1k 1 118 12 47

Если честно захотелось...

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.

Почему опен-сорс мейнтейнеры такие снобы?

Опен-сорс проекты существуют для того, чтобы они работали, а не для того, чтобы удовлетворять чье-то тщеславие. Представьте, что в ваш дом каждый день приходят толпы студентов-дизайнеров и пытаются все поменять в вашем доме, потому что им в дипломе нужна строчка, что они внесли изменение в ваш дом. Звучит неприятно! Так вот, люди, которые будут чинить баги после того, как вы запишете себе строчку в резюме "контрибьютил в опен-сорс" — это и есть мейнтернеры проекта. Тот факт, что вам дали право смотреть на дом, не означает, что ваше предложение снести капитальную стену должны принять. Относитесь к жильцам с уважением!

Показано 20 последних публикаций.