Ваня инженер 🇸🇪
709 subscribers
122 photos
29 videos
114 links
Заметки про IT, развитие и жизнь из Швеции.
Дзен канала: без нравоучений, только моё мнение и опыт.
За оскорбления в комментариях предупреждение, затем бан.

Написать мне t.me/skatromb
Download Telegram
dbt в PyCharm

О боги, они меня услышали. Наконец-то в PyCharm 2024.1.1 завезли поддержку dbt! Теперь можно и ткнуть в макрос с называнием модели и провалиться в него, и увидеть нечитаемый lineage моделей, и не беситься наконец, что пайчарм не может подсветить код, т.к. ломается об джинджя макросы.

Ваня дата инженер доволен
🔥23🥰5🫡2😁1💩1
Велозаезд (Halv)Vätternrundan

Шведы в среднем довольно упоротые по спорту. Они бегают, плавают, катают на велике или на лыжах, и порой ты совершенно не ожидаешь, что, например, твой CTO несколько раз проехал полный Vätternrundan на велике, что есть 315 км в один заход. И это не то, что бы редкость, у шведов есть даже понятие Swedish classics, которое для них что-то вроде «построить дом, посадить дерево и выратить сына»: это диплом, который выдаётся если за 12 месяцев осилить 90 км кросс-кантри лыжи, 315 км велозаезд, 3 км заплыв (в которым плывёшь по и против течения) и кросс-кантри забег 30 км. То есть они в 1971 придумали айрон мэн, когда это ещё не было мейнстримом.

Я вообще ни разу не такой упоротый, в беге и плавании я эффективен, как топор, а на лыжах не стоял десять лет. Но велик очень люблю, а потому решил, почему бы не попробовать себя в половинке Vätternrundan? Это «всего» 150 км, вокруг тысячи велосипедистов, должно быть весело, не так ли? Сказано, сделано, я зарегался, и потихонечку начал тренироваться за месяц до события. Эвристика была такая: если я могу проехать 50 км без особой усталости в конце, то 150 км я сдохну, но осилю. Тем более, что 10 лет назад я ездил из Троицка в Серпухов и обратно (180 км в сумме), так что некоторый опыт у меня уже был.

При этом мне совершенно не хотелось упаковываться по всем правилам, покупая шоссейник, велотрусы и красивые светоотражающие очёчки, а хотелось по панку проехаться как есть: на своём МТБ, в джинсиках и футболочке, и с рюкзаком наперевес, как будто только вышел из Пятёрочки. Сказать, что я был там белой вороной — не сказать ничего — процентов 98% участников выглядели как профи велосипедисты. Штош, я тут олицетворяю лозунг заезда "Race at your own pace", и не гонюсь за результатом, а чисто пытаюсь выжить и доехать до финиша 😤

Погода была средней паршивости: температура 12-16 градусов, первые 70 км почти постоянно ветер дул в рожу, заставляя прокачивать смирение, периодически лил дождь. Меня обгоняли просто ВСЕ: идеальные мужики на шоссейниках (им простительно), бабули за 70, толстые женщины, ребятки на ситибайках с корзиночкой на руле (!). Там были даже люди на тандемах, мечта) А CTO рассказывал, что когда он ездил 315 км, там были люди на карго-велосипедах — это такие велики с грузовым гробиком спереди.

У меня было только одно утешение: я взял с собой насос и инструменты для велика с мыслями, что это может кому-то помочь. Так и оказалось: на одном из подъёмов женщина в 20 метрах передо мной просто свалилась в бессилии в канаву, и у неё слетела цепь со звезды. Помог ей натянуть цепь, сама она отделалась лёгким испугом, поехали дальше. На другом подъёме у одного из бодрых дедушек слетела цепь и жёстко застряла в колесе: тут пригодился мой тулсет, смогли её выковырять и поставить на место. В общем, я был немножко доброй феей, что немножко ублажило моё самолюбие 😇

В итоге самыми сложными были первые 70 км: в силу встречного ветра и мысли о том, что осталось ещё порядка 100 км. Но благодаря слабому темпу в начале, последние 30 км я топил как не в себя и даже смог обогнать кого-то 😃. Было ощущение, что в целом, можно было и все 200 км проехать. И тогда я понял, что с погодой нам, вообще-то повезло — сразу как я получил медаль и призовую шаверму, полил ЛЮТЕЙШИЙ дождь. В итоге я даже уложился в 9 часов, хотя рассчитывал на 10! 🚴

Момент, который меня удивил — Vätternrundan это non-competition race: ты не можешь узнать ничьи результаты (если только кто-то сам тебе их не скажет), кроме своего собственного, не можешь узнать, на каком ты месте. Так что никакого сравнения себя с другими, ты молодец, что проехал, и всё :)
🔥51🏆103👍1
На одном из видео панорама на озеро Vättern — собственно, от него и пошло название гонки, Vätternrundan означает буквально «вокруг озера Vättern», и это и есть те самые 315 км.
🔥27🏆10👍4
phind.com делает все ваши треды публичными по дефолту

Я тут не раз рекомендовал пользоваться phind.com для разработки. Однако, сегодня я обнаружил у него очень неприятную особенность: по дефолту, если не настраивать никакие галки в профиле, он не только использует историю запросов для обучения (что делают практически все в бесплатных версиях, хотя в chatGPT даже в бесплатной версии можно выписаться).

Самая жесть, что по дефолту phind.com ещё и делает всю историю вашего с ним общения публичной для всего интернета — можно взять ссылку на тред и пошарить с кем угодно — другой сможет её прочитать. И это полбеды, ведь ссылка уникальная и сгенерирована случайно, но эти треды через этот же самый phind можно искать промптом! Обнаружил я это случайно, когда спросил его о чём-то, а в ответ он мне навыдавал кучу ссылок на чужие треды. И что-то я сомневаюсь, что люди, которые их создавали, были морально готовы, что другие люди смогут их прочитать.

То есть кто угодно может забить промпт в phind.com или тупо в гугле, и выйти на ссылку вашего с ним треда, если вы не поставили соответствующую галку в настройках. Это пиздец 🤬. Как если бы гугол по умолчанию сливал всю мою историю поисков в интернет.
🤯151🔥1😁1
И вишенка на торте. Я задал один и тот же вопрос phind и perplexity. И кое-кто тут нагло врёт.
😁11
Прекрасный пост от Василия Половнёва на тему, как эффективно онбордиться в новую компанию. И замечательно встроенная рекламная интеграция по ходу дела 😀
3
Середина лета в бюро и новые сотрудники

В бюро проходит середина лета — скидка 25% на электронные продукты и неделя мастер-классов преподавателей:
https://bureau.ru/news/2024/midsummer/

Я, к сожалению, в мастер-классах не участвую, потому что в дороге. Но если бы участвовал, то рассказал бы, как новичку или стажёру произвести впечатление на коллег в первые недели работы.

Я бы начал с минимальной гигиены, базовых навыков, без которых работать мучительно. Понимание задачи, дедлайны, согласование, умение формулировать просьбы и вопросы. Вот это всё:
https://www.youtube.com/watch?v=qe8agAd5omw&list=PLHxrtSGVWqFu8oM9EPZ95OPbnoKMdMYar

Затем я бы дал два совета:
Не страдайте в тишине. Если вы застряли, если ничего не получается, поднимите руку и попросите о помощи. Лучше отвлечь коллегу на 15 минут, чем просидеть пару дней без дела в страхе побеспокоить коллегу или показаться тупым.

Если вас наняли, значит, компания заинтересована в том, чтобы вы как можно скорее начали приносить ей пользу. Значит, у вашего лида, ментора или старшего товарища зарезервировано время на помощь и онбординг. Ничего страшного не произойдёт, если вы попросите его о помощи.

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

Зачем мы используем jQuery в 2024? Почему мы используем Preact, а не React? Почему расстояние от картинки до картинки 72 пикселя? Зачем в сертификатах текст с отличием? Почему сертификаты выдаются через неделю после окончания курса?

Ответы на подобные вопросы помогут быстрее въехать в продукт, код и доменную область. Больше того, помогут в будущем принимать хорошие решения и, конечно, подсветят проблемные зоны. Если ответ «так сложилось исторически» или «мы не успевали к релизу», то это неплохой кандидат на рефакторинг.

Заметьте, что я пишу «неплохой кандидат», потому что не стоит сразу кидаться исправлять и рефакторить что-то без «зачем» и «почему». Может оказаться так, что вы отрефакторите что-то, что просто не нужно было трогать.


Советы я бы обязательно приправил историями из жизни. Например, о том, как я отрефакторил рейк-таск, который никому не был нужен. Видели бы вы этот код, СОЛИДнее некуда.

Или как я просидел 20 часов за компом, гоняясь за багом в Хроме, а можно было просто перенести релиз на день вперёд. Достаточно было поднять руку и поговорить с дизайнером.

И конечно, я бы навтыкал кучу всратых мемов в слайды. Просто потому, что могу.

Тут я бы свернул мастер-класс и напомнил бы об акции и скидке на все электронные продукты бюро:
https://bureau.ru/news/2024/midsummer/
5😁3🤔1
Блогерский кризис

Раз за разом нахожу себя в ситуации, когда последний пост был месяц назад, а о чём написать — не нахожу. Похоже, у меня случился творческий кризис блогера-перееха, когда все свежие впечатления уже позади, установилась рутинная жизнь, а новое если и происходит, то не факт, что заслуживает публикации. Ведь когда я пишу посты, хочу, чтобы они были полезны, хоть бы и в самом широком смысле. При этом, я и бросать писать не собираюсь. Так и бьюсь в конфликте: и написать хочется, и непонятно о чём. Чтобы разорвать этот порочный круг, расскажу, что происходило/происходит в моей жизни.

Мы купили минимальный набор шведского хайкера в виде палатки, надувного матраса и одеялся и съездили в отпуск на Аландские острова. Особо не буду распространяться здесь, они заслуживают отдельного поста, но я не Варламов, так что просто скажу, что это очень приятная, богатая красивой природой финско-шведская островная даль, где самый крупный город — чуть более 10 тысяч человек населения. Было хорошо 🙂

Я продолжаю работать в Fishbrain. Здесь хорошо: несмотря на уже пятую (или шестую? 😀) за три года смену менеджеров, со всеми работать комфортно, в чём, несомненно, заслуга наших прошлого и настоящего CEO, а также People & Culture отдела. Есть и грустная сторона: за прошедшие два года численность компании упала практически в два раза, в ближайший год роста не намечается, а значит, сидеть нам, двум дата инженерам, ещё неопределённое время без перспектив роста, как карьерных, там и зарплатных — ведь причина этих сокращений в финансах. Так что я лениво просматриваю входящие предложения и откликаюсь на вакансии компаний, где хотел бы работать. Пока из этого ничего не вышло, во многом из-за моего желания работать 4/5 дней в неделю удалённо, в то время как компании опять охватила идея вернуть всех в офис. Штош, не мне их судить.

Я начал учить Rust. Так как на работе я изучил большую часть полезного для компании и интересного мне и, я немножко заскучал. Сперва мои вечера скрашивала шестая Цива, но потом я обнаружил себя учащим язык программирования Rust. Долго порывался выучить что-то ещё, кроме питона, но для дата инженера совершенно непонятно, что и зачем учить: эскуэль с питоном и фреймворками покрывает 95% задач, к скале у меня предубеждение из-за близости к джяве (да и, опять-таки, зачем, чисто чтобы экстеншны к спарку писать? Сомнительно...). Остальные языки применимы в дата инженерии примерно на 1%.

Раст же долгое время привлекал моё внимание: сперва появился убойный линтер для питона Ruff, написанный на нём, потом те же ребята запилили замену pip (под названием uv), но это были лишь тулзы для питона, ради которых не было смысла учить раст. И вот, на расте запилили датафрейм фреймворк pola.rs, пригодный для дата инженерных задач, а пара коллег рассказали, что знают отличный курс по расту от Алексея Кладова, написавшего для него server protocol (штука, которая позволяет вашей IDE проверять код, подчёркивать его и советовать советы). Так что я открыл книгу по расту и пошёл учить. Впечатления от него тянут на отдельный пост, так что оставлю их на потом)
🔥22👍74🤔2
Rust

Надо сразу оговориться, что единственный язык программирования, который я знаю — Python, а потому мой взгляд на Rust будет искажён этим восприятием. Конечно, более уместно было бы сравнивать его с плюсами, которые он косплеит, но последний раз я писал на них 20 лет назад в школе и это был хеллоуворлд. Поэтому сравнение будет с питоном, а значит я не буду ничего писать про memory safety и отсуствие сборщика мусора, главные рекламируемые преимущества раста.

Питон и раст очень разные языки в разрезе сферы их использования. Насколько я знаю, единственное, в чём они пересекаются — на обоих можно писать бэкенд) Дальше идут различия: питон используется в Data, ML, в CI/CD как замена башу, Rust же используется в системном программировании (драйверы, системные утилиты), программировании микроконтроллеров, криптографии, игровых движках, дев-тулы для других языков (привет, ruff и uv). Так что раст практически не даёт мне альтернативы для решения задач, решаемых питоном — но он открывает дверь в новые направления разработки.

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

Компилятор в расте это топ. Признаюсь, я НИКОГДА не могу написать на питоне код с первого раза, чтобы он делал то, что мне надо. То отступ потеряешь, то тип перепутаешь, то параметры местами. И это следствие динамичности питона — встроенный линтер пайчарма не отругает тебя за эти действия в большинстве случаев, и даже если поставить ruff и mypy, они не всегда способны вывести и проверить типы. В расте же это решает линтер компилятора. Типы выводятся компилятором всегда. Так что если ты написал фигню, редактор кода сразу подчеркнёт код красненьким. В итоге, когда ты исправил все ошибки до компиляции, программма РАБОТАЕТ с первого раза. Это просто меджик после питона.

Вообще линтер из компилятора раста это отдельная песня. Мало того, что он отлавливает большинство ошибок до запуска, он ещё и предлагает, как переписать куски кода, которые ты по незнанию написал криво. Иногда доходит до смешного: напишешь 20 строчек кода, потом начинаешь принимать саджешнсы от линтера, и через 3 итерации ОК-ОК-ОК твой код схлопывается в три строчки. Да, линтер умеет генерировать замену коду, чтобы вы просто ткнули в редакторе ОК и новый код встал вместо вашего. Топ.

В расте вообще прекрасно устроен DevEx. Это и подробная и понятная документация, в которой прямо на сайте ты можешь запустить куски кода и увидеть результат, а потом побаловаться и поменять что-то в этом коде; и выдаваемые компилятором и линтером объяснения ошибок, которые просто за ручку тебя водят по коду и объясняют откуда, почему и зачем эта ошибка, и как её исправить; и чудесная обучающая программа прямо на офф. сайте, где можно выбрать, как учить раст: по книге, по примерам или по интерактивному курсу. Всё бесплатно.

В чём же наколка? Да в том, что раст, сука, сложный. И это не только потому, что я блондинка питонист — практически все интернеты жалуются, что раст язык с тугим learning curve. Тут дело не только в том, что он низкоуровневый, как си++, у раста очень богатый синтаксис. Мне кажется, он использует все существующие в природе виды скобок, комбинации амперсандов, вертикальных черт, нижних подчёркиваний, и всё это что-то значит. Иногда в одной семантической единице умещается пара десятков идентификаторов, которые надо прочитать, распарсить и удержать в голове. Конечно, это тренируется, но порой мне приходится тратить 20 минут, чтобы воткнуть, что тут вообще блин происходит (см. пример со скрина).
👍25