Rust
Надо сразу оговориться, что единственный язык программирования, который я знаю — Python, а потому мой взгляд на Rust будет искажён этим восприятием. Конечно, более уместно было бы сравнивать его с плюсами, которые он косплеит, но последний раз я писал на них 20 лет назад в школе и это был хеллоуворлд. Поэтому сравнение будет с питоном, а значит я не буду ничего писать про memory safety и отсуствие сборщика мусора, главные рекламируемые преимущества раста.
Питон и раст очень разные языки в разрезе сферы их использования. Насколько я знаю, единственное, в чём они пересекаются — на обоих можно писать бэкенд) Дальше идут различия: питон используется в Data, ML, в CI/CD как замена башу, Rust же используется в системном программировании (драйверы, системные утилиты), программировании микроконтроллеров, криптографии, игровых движках, дев-тулы для других языков (привет, ruff и uv). Так что раст практически не даёт мне альтернативы для решения задач, решаемых питоном — но он открывает дверь в новые направления разработки.
Раст заставляет по-другому думать про код и даёт глубинное понимание, что происходит внутри. Приходиться думать о том, на стэке будет храниться переменная или в куче (а для начала вообще вспомнить, что это такое), продумывать заранее, какого размера будут коллекции, фиксированного или динамического. В расте приходится сразу писать типы: хотя я это делаю и в питоне, но в питоне они меня ни к чему не обязывают, так как являются лишь аннотациями. В расте же код не скомпилируется, если тип некорректный. Питон снимает с тебя эту когнитивную нагрузку, реализуя всё наиболее обощённым и не самым оптимальным способом, давая взамен простоту синтаксиса.
Компилятор в расте это топ. Признаюсь, я НИКОГДА не могу написать на питоне код с первого раза, чтобы он делал то, что мне надо. То отступ потеряешь, то тип перепутаешь, то параметры местами. И это следствие динамичности питона — встроенный линтер пайчарма не отругает тебя за эти действия в большинстве случаев, и даже если поставить ruff и mypy, они не всегда способны вывести и проверить типы. В расте же это решает линтер компилятора. Типы выводятся компилятором всегда. Так что если ты написал фигню, редактор кода сразу подчеркнёт код красненьким. В итоге, когда ты исправил все ошибки до компиляции, программма РАБОТАЕТ с первого раза. Это просто меджик после питона.
Вообще линтер из компилятора раста это отдельная песня. Мало того, что он отлавливает большинство ошибок до запуска, он ещё и предлагает, как переписать куски кода, которые ты по незнанию написал криво. Иногда доходит до смешного: напишешь 20 строчек кода, потом начинаешь принимать саджешнсы от линтера, и через 3 итерации ОК-ОК-ОК твой код схлопывается в три строчки. Да, линтер умеет генерировать замену коду, чтобы вы просто ткнули в редакторе ОК и новый код встал вместо вашего. Топ.
В расте вообще прекрасно устроен DevEx. Это и подробная и понятная документация, в которой прямо на сайте ты можешь запустить куски кода и увидеть результат, а потом побаловаться и поменять что-то в этом коде; и выдаваемые компилятором и линтером объяснения ошибок, которые просто за ручку тебя водят по коду и объясняют откуда, почему и зачем эта ошибка, и как её исправить; и чудесная обучающая программа прямо на офф. сайте, где можно выбрать, как учить раст: по книге, по примерам или по интерактивному курсу. Всё бесплатно.
В чём же наколка? Да в том, что раст, сука, сложный. И это не только потому, что яблондинка питонист — практически все интернеты жалуются, что раст язык с тугим learning curve. Тут дело не только в том, что он низкоуровневый, как си++, у раста очень богатый синтаксис. Мне кажется, он использует все существующие в природе виды скобок, комбинации амперсандов, вертикальных черт, нижних подчёркиваний, и всё это что-то значит. Иногда в одной семантической единице умещается пара десятков идентификаторов, которые надо прочитать, распарсить и удержать в голове. Конечно, это тренируется, но порой мне приходится тратить 20 минут, чтобы воткнуть, что тут вообще блин происходит (см. пример со скрина).
Надо сразу оговориться, что единственный язык программирования, который я знаю — Python, а потому мой взгляд на Rust будет искажён этим восприятием. Конечно, более уместно было бы сравнивать его с плюсами, которые он косплеит, но последний раз я писал на них 20 лет назад в школе и это был хеллоуворлд. Поэтому сравнение будет с питоном, а значит я не буду ничего писать про memory safety и отсуствие сборщика мусора, главные рекламируемые преимущества раста.
Питон и раст очень разные языки в разрезе сферы их использования. Насколько я знаю, единственное, в чём они пересекаются — на обоих можно писать бэкенд) Дальше идут различия: питон используется в Data, ML, в CI/CD как замена башу, Rust же используется в системном программировании (драйверы, системные утилиты), программировании микроконтроллеров, криптографии, игровых движках, дев-тулы для других языков (привет, ruff и uv). Так что раст практически не даёт мне альтернативы для решения задач, решаемых питоном — но он открывает дверь в новые направления разработки.
Раст заставляет по-другому думать про код и даёт глубинное понимание, что происходит внутри. Приходиться думать о том, на стэке будет храниться переменная или в куче (а для начала вообще вспомнить, что это такое), продумывать заранее, какого размера будут коллекции, фиксированного или динамического. В расте приходится сразу писать типы: хотя я это делаю и в питоне, но в питоне они меня ни к чему не обязывают, так как являются лишь аннотациями. В расте же код не скомпилируется, если тип некорректный. Питон снимает с тебя эту когнитивную нагрузку, реализуя всё наиболее обощённым и не самым оптимальным способом, давая взамен простоту синтаксиса.
Компилятор в расте это топ. Признаюсь, я НИКОГДА не могу написать на питоне код с первого раза, чтобы он делал то, что мне надо. То отступ потеряешь, то тип перепутаешь, то параметры местами. И это следствие динамичности питона — встроенный линтер пайчарма не отругает тебя за эти действия в большинстве случаев, и даже если поставить ruff и mypy, они не всегда способны вывести и проверить типы. В расте же это решает линтер компилятора. Типы выводятся компилятором всегда. Так что если ты написал фигню, редактор кода сразу подчеркнёт код красненьким. В итоге, когда ты исправил все ошибки до компиляции, программма РАБОТАЕТ с первого раза. Это просто меджик после питона.
Вообще линтер из компилятора раста это отдельная песня. Мало того, что он отлавливает большинство ошибок до запуска, он ещё и предлагает, как переписать куски кода, которые ты по незнанию написал криво. Иногда доходит до смешного: напишешь 20 строчек кода, потом начинаешь принимать саджешнсы от линтера, и через 3 итерации ОК-ОК-ОК твой код схлопывается в три строчки. Да, линтер умеет генерировать замену коду, чтобы вы просто ткнули в редакторе ОК и новый код встал вместо вашего. Топ.
В расте вообще прекрасно устроен DevEx. Это и подробная и понятная документация, в которой прямо на сайте ты можешь запустить куски кода и увидеть результат, а потом побаловаться и поменять что-то в этом коде; и выдаваемые компилятором и линтером объяснения ошибок, которые просто за ручку тебя водят по коду и объясняют откуда, почему и зачем эта ошибка, и как её исправить; и чудесная обучающая программа прямо на офф. сайте, где можно выбрать, как учить раст: по книге, по примерам или по интерактивному курсу. Всё бесплатно.
В чём же наколка? Да в том, что раст, сука, сложный. И это не только потому, что я
👍25
Rust basics
Впечатления
Уф, я дочиталь Rust Book. Это было тяжеловато: то было слишком сложно, то я терял мотивацию и делал большие перерывы, так что в итоге на прохождение книги ушло порядка 4 месяцев. И это только база: чтобы писать уверенно, нужно довести эту базу до автоматизма, разведать набор best-in-class библиотек и фреймворков, приучиться писать как расташин, а не как питонист, пересевший на раст. И всё это в условиях отсуствия цели или видения, куда его присунуть 🤷.
Начинать учить язык с лекций Алексея Кладова (который написал Language Server Protocol для раста) оказалось не лучшим выбором для начинающего: если первые пара лекций обзорные и заходят легко, то с каждой последующей сложность растёт экспоненциально. Я отложил их до момента, когда захочу прокачаться до уровня Advanced.
Впечатления
Уф, я дочиталь Rust Book. Это было тяжеловато: то было слишком сложно, то я терял мотивацию и делал большие перерывы, так что в итоге на прохождение книги ушло порядка 4 месяцев. И это только база: чтобы писать уверенно, нужно довести эту базу до автоматизма, разведать набор best-in-class библиотек и фреймворков, приучиться писать как расташин, а не как питонист, пересевший на раст. И всё это в условиях отсуствия цели или видения, куда его присунуть 🤷.
Начинать учить язык с лекций Алексея Кладова (который написал Language Server Protocol для раста) оказалось не лучшим выбором для начинающего: если первые пара лекций обзорные и заходят легко, то с каждой последующей сложность растёт экспоненциально. Я отложил их до момента, когда захочу прокачаться до уровня Advanced.
🔥14😁1
Кому стоит учить Rust?
Девиз языка: "A language empowering everyone to build reliable and efficient software." Раст доставляет перформанс уровня C и бóльшую надёжность из коробки, за которые придётся заплатить сложностью языка, и невозможностью как в питоне наговнякать по-быстренькому в REPL.
Он подойдёт там, где важно не по-быстрее с постоянно изменяющимися требованиями, а заранее запланировав, да понадёжнее: в системном программировании, embedded системах, вероятно, в финтехе. При этом его слабая сторона — относительная негибкость, о чём рассказывает геймдев-разработчик, разочаровавшийся в расте именно по этой причине.
Из-за сложности, я бы так же не советовал его в качестве первого языка, так как мотивация может закончиться раньше, чем язык будет освоен. Тем, кто сомневается, советую учить питон: он простой, понятный и имеющий широчайшую сферу применения. Но если вы уверены в стойкости своего желания и готовы потратить много времени — вперёд, к ржавчине 🤘!
Как учить
Для начала, можно прочитать статью у JetBrains. By default, есть три официальныхстула пути: book, rustlings course, rust by example. Если вам с книгой быстро становится скучно, смотрите book на youtube от прекрасного @letsgetrusty. Также не упустите короткие, понятные и насыщенные другие видео про раст на его канале. Порой сказанное там не 100% корректно, но это с лихвой перекрывается полученной пользой.
Ну и когда оцените свою мощь, переходите к лекциям Кладова — они глубокие, показывают много того, чего нет в rust book, рассказывают о деталях работы rust компилятора. Но дуже сложные.
В качестве бонуса для питонистов, рекомендую почитать статью itamar'а про то, как заворачивать раст код в питонячьи библиотеки. Я не думал, что это настолько просто, и нужен лишь простой советский...
Девиз языка: "A language empowering everyone to build reliable and efficient software." Раст доставляет перформанс уровня C и бóльшую надёжность из коробки, за которые придётся заплатить сложностью языка, и невозможностью как в питоне наговнякать по-быстренькому в REPL.
Он подойдёт там, где важно не по-быстрее с постоянно изменяющимися требованиями, а заранее запланировав, да понадёжнее: в системном программировании, embedded системах, вероятно, в финтехе. При этом его слабая сторона — относительная негибкость, о чём рассказывает геймдев-разработчик, разочаровавшийся в расте именно по этой причине.
Из-за сложности, я бы так же не советовал его в качестве первого языка, так как мотивация может закончиться раньше, чем язык будет освоен. Тем, кто сомневается, советую учить питон: он простой, понятный и имеющий широчайшую сферу применения. Но если вы уверены в стойкости своего желания и готовы потратить много времени — вперёд, к ржавчине 🤘!
Как учить
Для начала, можно прочитать статью у JetBrains. By default, есть три официальных
Ну и когда оцените свою мощь, переходите к лекциям Кладова — они глубокие, показывают много того, чего нет в rust book, рассказывают о деталях работы rust компилятора. Но дуже сложные.
В качестве бонуса для питонистов, рекомендую почитать статью itamar'а про то, как заворачивать раст код в питонячьи библиотеки. Я не думал, что это настолько просто, и нужен лишь простой советский...
Neowin
Rust for Linux team suffers blow as its leader steps down over "nontechnical nonsense"
Microsoft employee Wedson Almeida Filho has stepped down from being head of the Rust for Linux project citing a lack of enthusiasm to defend the team's work from constant push back.
🔥16👍5🤩3✍1
Потерянный пост
Поделюсь блогерской болью. Для меня до сих пор публиковать посты это стресс, так как перфекционист внутри свербит и хочет, чтобы посты были без ошибок, мысль сформулирована чётко, а если пост разделён на несколько, они вышли подряд без опоздания.
Когда я начинал канал, постил сообщения прямо в него. Но каждый раз напрягает, что стоит нажать enter без зажатого shift, и вместо новой строки ты отправишь в канал недоделанное сообщение сотням людей.
Кроме того, написать пост с одного захода у меня никогда не получается: в итоге я пишу, переписываю, меняю местами блоки текста, пока не получится внятно. Иногда на это уходит 10 минут, иногда целый час. Поэтому я быстроподнял кубер перешёл на написание постов в Saved Messages и отправку с помощью Forward message, стирая упоминание имени автора.
Однако, если в сообщении есть картинки, по каким-то одной телеге известным законам форварднуться может только первая картинка — без текста и без остальных картинок. Вроде смотришь в сохранённых сообщениях, вычитываешь, тестируешь — всё в порядке, постишь впрод канал — нате, картиноча. АААА. Бежишь быстренько стирать и перепощивать.
Вот и вчера это случилось вновь. Запостить всё нормально удалось попытки с пятой, и где-то на четвёртой, разволновавшись от собственной и тележьей криворукости, я впопыхах стёр... предыдущий пост про смену работы и уход в hemnet.se. И восстановить его в отведённые 5 секунд на передумывание я не успел. Так что пост исчез не потому, что компания передумала, если что 😃
Я написал в саппорт с просьбой восстановить пост, но надежды на это мало: во-первых телега везде заявляет, что то, что удалено — то удалено (ну-ну), а во-вторых, сколько раз в саппорт не обращался, мне ни разу даже ответа никакого не приходило.
Поделюсь блогерской болью. Для меня до сих пор публиковать посты это стресс, так как перфекционист внутри свербит и хочет, чтобы посты были без ошибок, мысль сформулирована чётко, а если пост разделён на несколько, они вышли подряд без опоздания.
Когда я начинал канал, постил сообщения прямо в него. Но каждый раз напрягает, что стоит нажать enter без зажатого shift, и вместо новой строки ты отправишь в канал недоделанное сообщение сотням людей.
Кроме того, написать пост с одного захода у меня никогда не получается: в итоге я пишу, переписываю, меняю местами блоки текста, пока не получится внятно. Иногда на это уходит 10 минут, иногда целый час. Поэтому я быстро
Однако, если в сообщении есть картинки, по каким-то одной телеге известным законам форварднуться может только первая картинка — без текста и без остальных картинок. Вроде смотришь в сохранённых сообщениях, вычитываешь, тестируешь — всё в порядке, постишь в
Вот и вчера это случилось вновь. Запостить всё нормально удалось попытки с пятой, и где-то на четвёртой, разволновавшись от собственной и тележьей криворукости, я впопыхах стёр... предыдущий пост про смену работы и уход в hemnet.se. И восстановить его в отведённые 5 секунд на передумывание я не успел. Так что пост исчез не потому, что компания передумала, если что 😃
Я написал в саппорт с просьбой восстановить пост, но надежды на это мало: во-первых телега везде заявляет, что то, что удалено — то удалено (ну-ну), а во-вторых, сколько раз в саппорт не обращался, мне ни разу даже ответа никакого не приходило.
🙏9❤5😁4
Спасибо добрым людям, которые переслали мне пост из своих сохранёночек. А также тем, кто подсказал, что в tgstat.com можно найти все опубликованные посты, включая удалённые, если в поиске отжать фильтр Hide deleted.
Ваши прекрасные, тёплые, доброжелательные, поздравительные реакции и комменты это, к сожалению, не вернёт, но по крайней мере я верну пост обратно)
Ваши прекрасные, тёплые, доброжелательные, поздравительные реакции и комменты это, к сожалению, не вернёт, но по крайней мере я верну пост обратно)
❤10
Меняю работу (^ repost ^)
Я проработал в Fishbrain больше 3-х лет — для меня это беспрецедентный срок! До этого лишь на одной работе я задержался больше 2-х лет, и то потому, что она была первая, а я не знал, чего хотел (тогда мне помог сдвинуться психотерапевт).
Я очень многому научился в этой компании: быть фулл-стэк дата инженером, который и инфру подкрутит, и джобу запилит, и дата модельки напишет; впервые поработал с облаком. Я увидел множество инженерных практик здорового человека: от миграции с MySQL на Postgres с возможностью обратного отката, до инцидент-менеджмента без поиска виноватых.
Однако ж, я упёрся в потолок по трём фронтам: зарплата моя выросла до топ-n среди инженеров в ситуации, когда с финансами у компании туго. Профессионально новых горизонтов тоже не предвиделось, так как всё, что могло быть полезно компании, я освоил, а на другое нет ресурсов и приоритета. Карьерного роста также не ожидалось — мы команда из двух инженеров и в ближайший год это не изменилось бы точно. Так что я заскучал настолько, что даже начал учить раст (спойлер: я прочитал Rust Book, фух).
Вообще, я планировал выучить раст и потом искать работу, возможно, на нём. Но в середине этого процесса в мой линкедин ворвался рекрутер из hemnet.se — эдакая Яндекс.Недвижимость в Швеции. Это не был оффер мечты, но был по всем статьям лучше моей ситуации в Фишбрейне, так что я решил его принять. Трудно найти крутой оффер, когда работаешь в отличной компании, гораздо проще, когда готов на что угодно, лишь бы свалить (те, кто знают мою историю с обоссанным туалетом в офисе, понимают о чём речь) :D.
Итак, 2 декабря я выхожу в Hemnet. Забавно, что в моей команде будет Илья, работавший со мной в Fishbrain, а продактом в Hemnet скоро выйдет Юхан, бывший у нас временным продактом. Это огромная разница с Москвой: здесь по ощущениям айти мир связан друг с другом через 3 рукопожатия, в то время как в Москве — через 4-5, из-за чего встретить знакомого было редкостью. Здесь — наоборот) С одной стороны это прикольно, с другой, красноречиво говорит о размере рынка — он на порядок меньше.
Я проработал в Fishbrain больше 3-х лет — для меня это беспрецедентный срок! До этого лишь на одной работе я задержался больше 2-х лет, и то потому, что она была первая, а я не знал, чего хотел (тогда мне помог сдвинуться психотерапевт).
Я очень многому научился в этой компании: быть фулл-стэк дата инженером, который и инфру подкрутит, и джобу запилит, и дата модельки напишет; впервые поработал с облаком. Я увидел множество инженерных практик здорового человека: от миграции с MySQL на Postgres с возможностью обратного отката, до инцидент-менеджмента без поиска виноватых.
Однако ж, я упёрся в потолок по трём фронтам: зарплата моя выросла до топ-n среди инженеров в ситуации, когда с финансами у компании туго. Профессионально новых горизонтов тоже не предвиделось, так как всё, что могло быть полезно компании, я освоил, а на другое нет ресурсов и приоритета. Карьерного роста также не ожидалось — мы команда из двух инженеров и в ближайший год это не изменилось бы точно. Так что я заскучал настолько, что даже начал учить раст (спойлер: я прочитал Rust Book, фух).
Вообще, я планировал выучить раст и потом искать работу, возможно, на нём. Но в середине этого процесса в мой линкедин ворвался рекрутер из hemnet.se — эдакая Яндекс.Недвижимость в Швеции. Это не был оффер мечты, но был по всем статьям лучше моей ситуации в Фишбрейне, так что я решил его принять. Трудно найти крутой оффер, когда работаешь в отличной компании, гораздо проще, когда готов на что угодно, лишь бы свалить (те, кто знают мою историю с обоссанным туалетом в офисе, понимают о чём речь) :D.
Итак, 2 декабря я выхожу в Hemnet. Забавно, что в моей команде будет Илья, работавший со мной в Fishbrain, а продактом в Hemnet скоро выйдет Юхан, бывший у нас временным продактом. Это огромная разница с Москвой: здесь по ощущениям айти мир связан друг с другом через 3 рукопожатия, в то время как в Москве — через 4-5, из-за чего встретить знакомого было редкостью. Здесь — наоборот) С одной стороны это прикольно, с другой, красноречиво говорит о размере рынка — он на порядок меньше.
🔥36👍11
Опрос для аналитиков
Когда количество подписчиков перевалило за 500, ко мне стали периодически приходить с предложениями запартнёриться или прорекламировать что-нибудь в канале. До сих пор я всем отказывал: не потому, что я такой гордый, а потому, что не видел никакой пользы в том, что они предлагают. Но в этот раз случилось приятное исключение 🙂.
Мне написали из newhr.org. Они ищут айтишников и делают исследования рынка айти в России и вне. Я люблю посмотреть, кто и сколько зарабатывает; интересно было почитать про уехавших и неуехавших в 22-24 годах (спойлер: вернулось меньше, чем обычно рассказывают). Довольно тенденциозно выглядит исследование про уехавших CTO, но, вероятно, это нормально для выборки из уехавших (иначе бы они не были уехавшими).
Они делают исследование рынка аналитиков в 2024 году, аналогичное предыдущему за 2023 год, и попросили поделиться ссылкой на опрос, чтобы собрать репрезентативную выборку. В исследовании: какие скиллы используют аналитики, на какие компании работают, удалёнка или офис, какие компании нравятся/не нравятся, и, конечно же, голосом Дудя «СКОЛЬКО ЗАРАБАТЫВАЮТ» с динамикой роста ЗП. Взамен упомянут меня в исследовании и воткнут ссылочек на канал :).
Мне подобные исследования помогают оценить, могу ли я претендовать на большую ЗП, есть ли рядом интересные ответвления по скиллам, которые я упускаю. Стать соучастником этого благого дела можно за 20 минут заполнив опросник.
Проходить могут все, кто считает себя аналитиком: продукта, данных, бизнеса, и т.д. К сожалению, я уже 3 года как не аналитик, но они намереваются в следующем году сделать аналогичное про DE 🔥. Буду ждать!
📋 Опрос тут
Когда количество подписчиков перевалило за 500, ко мне стали периодически приходить с предложениями запартнёриться или прорекламировать что-нибудь в канале. До сих пор я всем отказывал: не потому, что я такой гордый, а потому, что не видел никакой пользы в том, что они предлагают. Но в этот раз случилось приятное исключение 🙂.
Мне написали из newhr.org. Они ищут айтишников и делают исследования рынка айти в России и вне. Я люблю посмотреть, кто и сколько зарабатывает; интересно было почитать про уехавших и неуехавших в 22-24 годах (спойлер: вернулось меньше, чем обычно рассказывают). Довольно тенденциозно выглядит исследование про уехавших CTO, но, вероятно, это нормально для выборки из уехавших (иначе бы они не были уехавшими).
Они делают исследование рынка аналитиков в 2024 году, аналогичное предыдущему за 2023 год, и попросили поделиться ссылкой на опрос, чтобы собрать репрезентативную выборку. В исследовании: какие скиллы используют аналитики, на какие компании работают, удалёнка или офис, какие компании нравятся/не нравятся, и, конечно же, голосом Дудя «СКОЛЬКО ЗАРАБАТЫВАЮТ» с динамикой роста ЗП. Взамен упомянут меня в исследовании и воткнут ссылочек на канал :).
Мне подобные исследования помогают оценить, могу ли я претендовать на большую ЗП, есть ли рядом интересные ответвления по скиллам, которые я упускаю. Стать соучастником этого благого дела можно за 20 минут заполнив опросник.
Проходить могут все, кто считает себя аналитиком: продукта, данных, бизнеса, и т.д. К сожалению, я уже 3 года как не аналитик, но они намереваются в следующем году сделать аналогичное про DE 🔥. Буду ждать!
📋 Опрос тут
👍18❤3🔥3😁1
Питон, файлы, AWS
Питонячу тут очередную загрузку данных из апишки в амазоновский s3. Упрощённо, кладу ответ от API в файл и отгружаю в
На бакет загружается пустой файл. Wat? Пробую ещё раз. Результат, разумеется, не меняется.
В
Внимание, вопрос: почему так происходит? Похожий код на GCP, (внезапно) работает корректно 😃️️️️️️
Питонячу тут очередную загрузку данных из апишки в амазоновский s3. Упрощённо, кладу ответ от API в файл и отгружаю в
s3.upload_file():
with file as open("wb"):
file.write(data) # пишем bytes, потому что так хочет `s3.upload_file`
filename = file.name # `s3.upload_file` требует строковый путь к файлу в качестве аргумента
s3 = boto3.client("s3")
s3.upload_file(filename, "some_bucket", "some_path")
На бакет загружается пустой файл. Wat? Пробую ещё раз. Результат, разумеется, не меняется.
В
file данные записываются. s3.upload_file, разумеется, рядом в сотне мест используется и работает.Внимание, вопрос: почему так происходит? Похожий код на GCP, (внезапно) работает корректно 😃️️️️️️
🤯3😁1
Питон, файлы, AWS, ч. 2
Не забываем смывать
Изначально я пофиксил код с помощью
Поэтому меня удивило, что такой фикс сработал:
Однако ж, как верно подметил Михаил в комментах, более прямолинейная причина была в не вызванном
Конечно же, предыдущий пост задумывался исключительно ради тупого каламбура в заголовке поста: «Не забываем посикать». Но так как мой изначальный фикс с вызовом
Впрочем, трудно переоценить символизм трансформации заголовка из «Не забываем посикать» в «Не забываем смывать» 🤪.
База
Всё дело в том, что когда питон пишет в файл, запись проходит несколько буферов-прослоек, часть из которых находится вне его контроля (например, буфер операционки). Поэтому, перед тем, как читать этот файл из другого места, нужно сделать
Не забываем смывать
Изначально я пофиксил код с помощью
file.seek(0), ведь по опыту, именно из-за его отсутствия обычно возникают проблемы неконсистентности файла при записи и последующем чтении. Правда, это справедливо в случае, когда записываешь и читаешь через один файловый объект, а в примере выше файл читается разными файловыми объектами (s3 открывает файл самостоятельно и отдельно). Поэтому меня удивило, что такой фикс сработал:
...
file.write(data)
filename = file.name
file.seek(0)
s3.upload_file(filename, "some_bucket", "some_path")
...
Однако ж, как верно подметил Михаил в комментах, более прямолинейная причина была в не вызванном
file.flush(). Почему file.seek(0) из моего исправления также фиксит проблему — непонятно. Возможно, он неявным образом продуцирует flush со стороны ОС, но это выше моих познаний питона и линукса, и полагаться на такой «артефакт» точно не стоит.Конечно же, предыдущий пост задумывался исключительно ради тупого каламбура в заголовке поста: «Не забываем посикать». Но так как мой изначальный фикс с вызовом
file.seek(0) после записи оказался хоть и рабочим, но неточным, — заголовок пришлось изменить 🥲.Впрочем, трудно переоценить символизм трансформации заголовка из «Не забываем посикать» в «Не забываем смывать» 🤪.
База
Всё дело в том, что когда питон пишет в файл, запись проходит несколько буферов-прослоек, часть из которых находится вне его контроля (например, буфер операционки). Поэтому, перед тем, как читать этот файл из другого места, нужно сделать
.flush(), чтобы данные из буфера были записаны («смыты») на диск и могли быть целостно прочитаны другим куском кода или процессом (в данном случае, библиотекой AWS).🔥20😁2❤1🤡1🖕1
Подарки от бывшей и новой
На прошлой неделе мы всей семьёй были в отпуске, как, вдруг, мне в приложение шведской почты приходит уведомление о доставке из цветочного магазина. «Да кто мог мне отправить цветы» — подумал я, и решил, что это, наверное, ошибка.
Спустя двое суток мы прилетели домой, вижу, перед дверью стоит коробка. Раскрываю — и правда, цветы. А внутри записка от моего нового работодателя, Hemnet: мол, приветствуем, ждём, рады. Приятно!
На следующий день просыпаюсь, звонок на телефон: тот же самый сервис доставки цветов, спрашивают, буду ли я дома после обеда, для меня доставка. Ну думаю, в этот раз уж точно ошиблись: посчитали, что не доставили вчерашний букет, отправили повторно.
В 13.00 в дверь звонит дядя с букетом в руках и вручает его мне. Внутри, снова, записка, на этот раз от моего прошлого работодателя Fishbrain: «Спасибо за вклад и удачи в новых приключениях!» Ух, крайне приятно. Кажется, я в жизни столько цветов не получал, как за эти два дня!
Мне прямо стало интересно! Поделитесь, особенно парни, кто в европейских компаниях работает: дарил ли вам работодатель цветы? В России это точно было бы из ряда вон, а вот в Швеции/Европе интересно, насколько это общепринятая практика?
На прошлой неделе мы всей семьёй были в отпуске, как, вдруг, мне в приложение шведской почты приходит уведомление о доставке из цветочного магазина. «Да кто мог мне отправить цветы» — подумал я, и решил, что это, наверное, ошибка.
Спустя двое суток мы прилетели домой, вижу, перед дверью стоит коробка. Раскрываю — и правда, цветы. А внутри записка от моего нового работодателя, Hemnet: мол, приветствуем, ждём, рады. Приятно!
На следующий день просыпаюсь, звонок на телефон: тот же самый сервис доставки цветов, спрашивают, буду ли я дома после обеда, для меня доставка. Ну думаю, в этот раз уж точно ошиблись: посчитали, что не доставили вчерашний букет, отправили повторно.
В 13.00 в дверь звонит дядя с букетом в руках и вручает его мне. Внутри, снова, записка, на этот раз от моего прошлого работодателя Fishbrain: «Спасибо за вклад и удачи в новых приключениях!» Ух, крайне приятно. Кажется, я в жизни столько цветов не получал, как за эти два дня!
Мне прямо стало интересно! Поделитесь, особенно парни, кто в европейских компаниях работает: дарил ли вам работодатель цветы? В России это точно было бы из ряда вон, а вот в Швеции/Европе интересно, насколько это общепринятая практика?
🤯25❤🔥20😁4🆒2
Выбирать уважение
Заметил за собой, как, знакомясь с коллегой на работе, я сразу начинаю его оценивать, и обычно это происходит неосознанно. Как он выглядит, как двигается, какая у него мимика, что и как он говорит. За считанные секунды я начинаю ощущать своё отношение к нему. И оно, разумеется, не всегда позитивное.
Так было и в тот раз, когда я встретил нового CFO в Fishbrain. Это был моложавый подкачанный блондин средних лет (ничего не имею против), но говорил он страшно быстро, особенно числа — все эти "три хандред фоти сикс саузенд эйт хандред твенти ту" (!). И говорить он мог очень долго и самовлюблённо. Я, как интровертный инженер, люблю, когда люди говорят коротко, по делу и не выпендриваются. Разумеется, он мне не понравился.
Обычно после такого первого впечатления у меня дальше всё идёт по накатанной: мозгу не нравится человек — он начинает докапываться и искать, что ещё в нём не так, чем он плох, и уже через неделю-другую меня жутко бесит этот тип! Начинаю цепляться к его словам, саботирую сотрудничество, в общем, ничего продуктивного с таким настроем быть не может.
Но в этот раз я подумал, что:
– Чувак Chief Officer, так что мои шансы выйти победителем явно невелики
– Если я буду хейтить его, буду унылым сам, потому что мне с ним ещё работать и работать
Тогда я решил: ок, давай попробуем выбрать уважать его. Обращать внимание на то, в чём он хорош. Да, вот так топорно, сознательно выбрать уважать человека. И это было очень необычно, потому что я-то всегда думал, что человек тебе либо нравится, либо нет, и всё — ничего не попишешь. Однако, то ли уважение рождает уважение, то ли fake it till you make it сработал, но через пару недель я заметил, что вижу в нём много положительных качеств. Моё отношение стало нейтрально-положительным.
И это было круто, потому что я не тяготился работой с ним, не воевал с ним, а, наоборот, у нас было конструктивное и взаимоуважительное сотрудничество. Мы проработали почти три года вместе и сейчас я могу сказать, что он классный. А ведь я мог закончить наши отношения с совершенно негативным впечатлением! И от этой мысли как-то не по себе, насколько мои суждения порой — иллюзорное, самоподтверждающееся пророчество.
Что не отменяет, впрочем, что CFO был вообще-то норм парень, а мудаки — иногда и правда мудаки.
Заметил за собой, как, знакомясь с коллегой на работе, я сразу начинаю его оценивать, и обычно это происходит неосознанно. Как он выглядит, как двигается, какая у него мимика, что и как он говорит. За считанные секунды я начинаю ощущать своё отношение к нему. И оно, разумеется, не всегда позитивное.
Так было и в тот раз, когда я встретил нового CFO в Fishbrain. Это был моложавый подкачанный блондин средних лет (ничего не имею против), но говорил он страшно быстро, особенно числа — все эти "три хандред фоти сикс саузенд эйт хандред твенти ту" (!). И говорить он мог очень долго и самовлюблённо. Я, как интровертный инженер, люблю, когда люди говорят коротко, по делу и не выпендриваются. Разумеется, он мне не понравился.
Обычно после такого первого впечатления у меня дальше всё идёт по накатанной: мозгу не нравится человек — он начинает докапываться и искать, что ещё в нём не так, чем он плох, и уже через неделю-другую меня жутко бесит этот тип! Начинаю цепляться к его словам, саботирую сотрудничество, в общем, ничего продуктивного с таким настроем быть не может.
Но в этот раз я подумал, что:
– Чувак Chief Officer, так что мои шансы выйти победителем явно невелики
– Если я буду хейтить его, буду унылым сам, потому что мне с ним ещё работать и работать
Тогда я решил: ок, давай попробуем выбрать уважать его. Обращать внимание на то, в чём он хорош. Да, вот так топорно, сознательно выбрать уважать человека. И это было очень необычно, потому что я-то всегда думал, что человек тебе либо нравится, либо нет, и всё — ничего не попишешь. Однако, то ли уважение рождает уважение, то ли fake it till you make it сработал, но через пару недель я заметил, что вижу в нём много положительных качеств. Моё отношение стало нейтрально-положительным.
И это было круто, потому что я не тяготился работой с ним, не воевал с ним, а, наоборот, у нас было конструктивное и взаимоуважительное сотрудничество. Мы проработали почти три года вместе и сейчас я могу сказать, что он классный. А ведь я мог закончить наши отношения с совершенно негативным впечатлением! И от этой мысли как-то не по себе, насколько мои суждения порой — иллюзорное, самоподтверждающееся пророчество.
Что не отменяет, впрочем, что CFO был вообще-то норм парень, а мудаки — иногда и правда мудаки.
👍52🔥20❤15👏2😁2💩2🌚1💔1🦄1
Снова привет!
Я давно не писал в канал: пребывал в угнетённом состоянии, в котором не то что делиться ничем не хочется, а и вовсе не видется, какой в этом может быть смысл. В мире вспыхивают очередные войны, в отношениях с сыном появляются ругань, крики и раздражение, внезапно умирает кошка, а на работе уже полгода тянется проект на Go и TypeScript, которых я даже в глаза не видел до этого. На фоне этого писать посты в блог виделось довольно бессмысленным занятием, которое не сделает мир лучше. А хотелось бы.
Спасибо рассылке от Sylvian Kerkour, помогшей отлипнуть от соцсеточек, и подумать о чём-то более созидательном. Я вернулся с мыслью, что хоть я и не поменяю мир своими постами, но могу наточить своё умение заражать хорошими идеями, да и в принципе делать хоть что-то, что в моих силах. А уж рассказать-то мне есть о чём.
Это даже забавно: я с полгода ничего не писал в канал и теперь наглядно вижу, как много всего произошло за эти полгода. Обычно мне всегда кажется, что ничего не происходит, и я стою на месте. Помимо вышеперечисленного: я прошёл испытательный срок в Hemnet, мы переехали в новую (свою ипотечную) квартиру, сын пошёл в школу, я начал писать вайбкодить на Go и TS, я вообще стал гораздо больше вайбкодить (об этом мы ещё поговорим отдельно), пособеседовался на шведском (бедный рекрутер), мы съездили в отпуск в Таллин и на Готланд, выпросил выплату от страховой за сломавшуюся посудомойку. И много других событий, не вошедших в этот список.
Я давно не писал в канал: пребывал в угнетённом состоянии, в котором не то что делиться ничем не хочется, а и вовсе не видется, какой в этом может быть смысл. В мире вспыхивают очередные войны, в отношениях с сыном появляются ругань, крики и раздражение, внезапно умирает кошка, а на работе уже полгода тянется проект на Go и TypeScript, которых я даже в глаза не видел до этого. На фоне этого писать посты в блог виделось довольно бессмысленным занятием, которое не сделает мир лучше. А хотелось бы.
Спасибо рассылке от Sylvian Kerkour, помогшей отлипнуть от соцсеточек, и подумать о чём-то более созидательном. Я вернулся с мыслью, что хоть я и не поменяю мир своими постами, но могу наточить своё умение заражать хорошими идеями, да и в принципе делать хоть что-то, что в моих силах. А уж рассказать-то мне есть о чём.
Это даже забавно: я с полгода ничего не писал в канал и теперь наглядно вижу, как много всего произошло за эти полгода. Обычно мне всегда кажется, что ничего не происходит, и я стою на месте. Помимо вышеперечисленного: я прошёл испытательный срок в Hemnet, мы переехали в новую (
❤37👍6🔥6🐳2🤗2
В LinkedIn только и разговоров, что о вайб-кодинге
Надеюсь, вас так же, как и меня аж трисёт от ленты в линке, на 99% заполненной сблёвом про AI, сгенерированным LLM. Мне понравилась мысль, что «не стоит тратить время на чтение контента, который кто-то даже не удосужился сам написать».
В то же время, за полгода в Hemnet повыходила куча AI агентов для кодинга, и я стал многое делегировать агентам. Я пробовал Claude Code, Opencode, Agentic Panel в Zed IDE и остановился на последнем, посколькуit's blazing fast written in Rust он у меня прямо в IDE, и не надо никуда ходить. Сходу разочарую: никакие большие таски агенты самостоятельно с удовлетворительным качеством выполнять до сих пор не могут, однако, есть несколько вещей, стоящих упоминания:
1. Исследование кодобазы. Это лучшее, что есть в мире агентов! Ты открываешь незнакомую репу, говоришь ей, что за таску тебе поручили, и просишь: «опиши, что тут вообще происходит, где код, который мне надо поменять, и что от этого может поломаться». После того, как онанагаллюцинирует объяснит крупными мазками, можно попросить, «опиши весь флоу объекта от начала до конца, с цитатами из кода, как шаг за шагом происходит происходит вызов функций, и откуда берутся параметры». Экономит часы Сmd+Сlick'ов по коду.
2. Перегнать данные из одного формата в другой. Я был в шоке, когда коллега показал мне ЭТО. Впрочем, это же языковая модель, ей на роду написано переводить, не так ли? Можно переводить JSON в YAML, можно копипастить TSV таблички из веб-страниц и превращать в JSON, и так далее. Разумеется, по ходу будет потеряна пара полей, но это можно порешать, если попросить её проверить себя, считать контрольные суммы или разбить задачку на мелкие кусочки.
3.Навайбкодить Начать писать на незнакомом языке. Если я пишу на питоне или sql, которые знаю хорошо, обычно мне не нужна помощь: я быстрее накожу сам, чем сформулирую задачу и исправлю все косяки за мсье Клодом. Однако ж, когда я стартую новый проект на неизвестном мне языке, в котором вдобавок я не знаю ни одной библиотеки, агенты (да и обычные LLM) дают бесценный толчок вперёд: выдают шорт-лист библиотек, которые стоит заюзать в проекте, наговнякать первый прототип, читая который можно параллельно и тасочку двигать, и язык учить. Работает только если есть солидный опыт хотя бы в одном языке программирования, а также если регулярно рефакторить получившееся, иначе быстро тонешь в болоте из лапши.
Буду рад, если напишите, что ещё годного вы освоили с агентами, я по-любому чего-то не знаю :)
Надеюсь, вас так же, как и меня аж трисёт от ленты в линке, на 99% заполненной сблёвом про AI, сгенерированным LLM. Мне понравилась мысль, что «не стоит тратить время на чтение контента, который кто-то даже не удосужился сам написать».
В то же время, за полгода в Hemnet повыходила куча AI агентов для кодинга, и я стал многое делегировать агентам. Я пробовал Claude Code, Opencode, Agentic Panel в Zed IDE и остановился на последнем, поскольку
1. Исследование кодобазы. Это лучшее, что есть в мире агентов! Ты открываешь незнакомую репу, говоришь ей, что за таску тебе поручили, и просишь: «опиши, что тут вообще происходит, где код, который мне надо поменять, и что от этого может поломаться». После того, как она
2. Перегнать данные из одного формата в другой. Я был в шоке, когда коллега показал мне ЭТО. Впрочем, это же языковая модель, ей на роду написано переводить, не так ли? Можно переводить JSON в YAML, можно копипастить TSV таблички из веб-страниц и превращать в JSON, и так далее. Разумеется, по ходу будет потеряна пара полей, но это можно порешать, если попросить её проверить себя, считать контрольные суммы или разбить задачку на мелкие кусочки.
3.
Буду рад, если напишите, что ещё годного вы освоили с агентами, я по-любому чего-то не знаю :)
❤30🔥13👍6
Оказывается, у меня была туча реквестов на вступление в чат канала, которые нигде не показывались в телеге 🤨 Подобавлял, велкам в чат! И пишите в личку, если ваш запрос висит, добавлю
😁9👍4😱3
The State of Python 2025
Те самые ребята из JetBrains, что по моему мнению делают лучшие в мире платные IDE, периодически выпускают интересные отчёты по прикладным областям разработки, языкам программирования и DevEx. Я люблю их, потому что они совмещают хороший сторителлинг с аналитикой, построенной на приличной выборке данных.
Помимо рассказа о трендах в вебе, DS, и использовании agentic LLM, в статье есть колонка с Actionable Ideas. Она приятно погладила мой чсв, так как я смог закрасить зелёненьким 5/6 пунктов: я понемногу осваиваю uv (а на горизонте ещё и ty!), юзаю последние версии питона, вовсю балуюсь agentic LLM, хорошо знаю Rust, стараюсь писать понятный и простой код.
Единственный незакрытый пункт — освоиться с Python 3.14, в котором отпустят Global Interpreter Lock, что потенциально может привести к race condition. Впрочем, в статье накинута пара ссылок, чего почитать по теме.
Те самые ребята из JetBrains, что по моему мнению делают лучшие в мире платные IDE, периодически выпускают интересные отчёты по прикладным областям разработки, языкам программирования и DevEx. Я люблю их, потому что они совмещают хороший сторителлинг с аналитикой, построенной на приличной выборке данных.
Помимо рассказа о трендах в вебе, DS, и использовании agentic LLM, в статье есть колонка с Actionable Ideas. Она приятно погладила мой чсв, так как я смог закрасить зелёненьким 5/6 пунктов: я понемногу осваиваю uv (а на горизонте ещё и ty!), юзаю последние версии питона, вовсю балуюсь agentic LLM, хорошо знаю Rust, стараюсь писать понятный и простой код.
Единственный незакрытый пункт — освоиться с Python 3.14, в котором отпустят Global Interpreter Lock, что потенциально может привести к race condition. Впрочем, в статье накинута пара ссылок, чего почитать по теме.
🔥11👍5🏆2😁1