Я как-то делал ролик и пост по его мотивам.
Там я говорил, что программист не интроверт и надо ходить:
• общаться с коллегами,
• делиться знаниями,
• мыслями,
• настроениями.
И вот! Скоро пройдет еще одна встречка в Мск, где будет парное програмирование по TDD. Я думаю такого анонса достаточно, вот ссылка: https://scrum.ru/code_retreat_2026
Там я говорил, что программист не интроверт и надо ходить:
• общаться с коллегами,
• делиться знаниями,
• мыслями,
• настроениями.
И вот! Скоро пройдет еще одна встречка в Мск, где будет парное програмирование по TDD. Я думаю такого анонса достаточно, вот ссылка: https://scrum.ru/code_retreat_2026
Telegram
Куда войти?
Умудрился поехать в Москву, чтобы пообщаться про TDD & Парное программирование. Мне понравилось, хочу поделиться.
Поделиться не только настроением и впечатлениями, но и клавиатурой. Отдам свою K:02, которую упоминал в прошлом ролике.
Раздача!!!! UPD. Итоги…
Поделиться не только настроением и впечатлениями, но и клавиатурой. Отдам свою K:02, которую упоминал в прошлом ролике.
Раздача!!!! UPD. Итоги…
👍9👨💻4🔥1🗿1
Привет! Мне интересно насколько AI распространен сейчас, среди работяг. Давайте узнавать.
Anonymous Poll
43%
Использую для всего🐀
15%
Использую для личных проектов😏
20%
Использую для работы😎
10%
Не использую🐱
12%
Смотрю что там вышло👀
⚡6
Куда войти?
Привет! Мне интересно насколько AI распространен сейчас, среди работяг. Давайте узнавать.
telegram-cloud-document-2-5249458000111904082.jpg
23.6 KB
Пишите в комметарии, чем пользуетесь из инструментов.
Я пользуюсь GitHub Copilot, Copilot CLI & opencode.
Накину еще для разогрева. Мне кажется, что Vim с приходом AI станет еще более популярным и востребованным. Редактирование текста никуда не уходит. Даже думаю, что его надо будет все больше и больше. Делать это в Vim проще всего, если надо точный результат. Если не надо точный, то проще попросить AI.
Я пользуюсь GitHub Copilot, Copilot CLI & opencode.
Накину еще для разогрева. Мне кажется, что Vim с приходом AI станет еще более популярным и востребованным. Редактирование текста никуда не уходит. Даже думаю, что его надо будет все больше и больше. Делать это в Vim проще всего, если надо точный результат. Если не надо точный, то проще попросить AI.
Forwarded from Куда Войти? Разное
Если вы еще не делали: попросите AI ускорить ваш setup. У меня всегде zsh довольно долго стартовал. Я просто ленился разбираться. Вот AI все сделал без меня. Кайф.
Основной проблемой был nvm. Он стартовал почти секунду. Это еще вторая итерация: completion был до этого. Все это было почти 2 секунды.
То есть ускорение получилось где-то в 14 раз.
Да, это скорее мои руки из жопы, но я просто не хотел править это. А LLM взяла, все замерила, все обновила.
Попробуйте сами!
PS. Скоро выйдет новый neovim, буду переходить на новый package manager. Уже вижу как AI мне кучу првмени спасет.
Основной проблемой был nvm. Он стартовал почти секунду. Это еще вторая итерация: completion был до этого. Все это было почти 2 секунды.
То есть ускорение получилось где-то в 14 раз.
Да, это скорее мои руки из жопы, но я просто не хотел править это. А LLM взяла, все замерила, все обновила.
Попробуйте сами!
PS. Скоро выйдет новый neovim, буду переходить на новый package manager. Уже вижу как AI мне кучу првмени спасет.
Привет! Я поехал в Москву на встречку по TDD. У нас там был блок про AI.
Я решил записать подкаст с Сашей, а как иначе? Может быть вы не видели наш старый подкаст у него на канале про Vim/TDD/клавы. Мне он очень понравился.
Сегодня публикую просто наши посиделки в баре. Надеюсь, вам хоть чуточку получится уловить атмосферу, которая была у меня во время записи и на монтаже. Очень лампово и по делу вышло: шутки, советы, мысли.
Подписывайтесь на Сашу @tfeat, он крутой!
YouTube
Я решил записать подкаст с Сашей, а как иначе? Может быть вы не видели наш старый подкаст у него на канале про Vim/TDD/клавы. Мне он очень понравился.
Сегодня публикую просто наши посиделки в баре. Надеюсь, вам хоть чуточку получится уловить атмосферу, которая была у меня во время записи и на монтаже. Очень лампово и по делу вышло: шутки, советы, мысли.
Подписывайтесь на Сашу @tfeat, он крутой!
YouTube
YouTube
Трезво про LLM-агентов в баре
Подписывайтесь: @apkhmv
- https://www.youtube.com/watch?v=0b6x5eJK4WM
- https://www.youtube.com/watch?v=z91tffR8m0Q
Подписывайтесь на канал и на ссылке ниже, там обсуждают правду:
- Telegram Channel: https://t.me/kydavoiti
- Telegram Chat: https://t…
- https://www.youtube.com/watch?v=0b6x5eJK4WM
- https://www.youtube.com/watch?v=z91tffR8m0Q
Подписывайтесь на канал и на ссылке ниже, там обсуждают правду:
- Telegram Channel: https://t.me/kydavoiti
- Telegram Chat: https://t…
🔥29👍10
Все можно делать через агента, надо просто...
Посмотреть шортс! Наконец-то, можно не открывать ее, не для этого мы созданы.
Please open Telegram to view this post
VIEW IN TELEGRAM
✍9🔥6⚡2👍1
Еще не смотрели подкаст, тогда у меня для вас замануха: Shorts
Саша поделился классной историей, как он с Claude Code & OpenClaw поймал Prompt Injection. А почему это веселая история, а не страшная? Все есть в подкасте.
Важно настроить правила доступа агента к вашим ресурсам и, чтобы все работало по принципу least privilege. Минимум секретов, все должно быть ротируемо. Хотя, что я тут рассказываю, все есть в подкасте интереснее и живее.
ЗЫ. Один из самых веселых моментов. Подписывайтесь на Сашу: @tfeat
Саша поделился классной историей, как он с Claude Code & OpenClaw поймал Prompt Injection. А почему это веселая история, а не страшная? Все есть в подкасте.
Важно настроить правила доступа агента к вашим ресурсам и, чтобы все работало по принципу least privilege. Минимум секретов, все должно быть ротируемо. Хотя, что я тут рассказываю, все есть в подкасте интереснее и живее.
ЗЫ. Один из самых веселых моментов. Подписывайтесь на Сашу: @tfeat
🔥14👍3
Поговорили про нейронки и хватит.
Сегодня скину вам материал о детерминированной системе, которую любят обсуждать на собеседованиях (до сих пор, для меня это культурный шок).
У Саши вышел отличный подкаст, где он с гостем поясняет про GC в GO & Java. Для меня сейчас это Go-To материал, если кому-то надо отправить большой материал по погружению в GC. Обсудили разные алгоритмы, особенности их применения - годнота, вкуснота.
PS. Раньше я всем кидал выпуск другого подкаста с Иваном Углянским, либо один из его докладов. Сможете легко найти это все по имени автора + GC в Google.
PPS. Ладно, остался последний shorts про The Prompt.
Сегодня скину вам материал о детерминированной системе, которую любят обсуждать на собеседованиях (до сих пор, для меня это культурный шок).
У Саши вышел отличный подкаст, где он с гостем поясняет про GC в GO & Java. Для меня сейчас это Go-To материал, если кому-то надо отправить большой материал по погружению в GC. Обсудили разные алгоритмы, особенности их применения - годнота, вкуснота.
PS. Раньше я всем кидал выпуск другого подкаста с Иваном Углянским, либо один из его докладов. Сможете легко найти это все по имени автора + GC в Google.
PPS. Ладно, остался последний shorts про The Prompt.
✍8🔥4 3
Сегодня поговорим про цветовые схемы для всего. Лучше времени для этого не будет, лучше уже некуда.
• покажу код,
• дам полезные ссылочки,
• мотивация,
• опыт,
• побалуемся с LLM,
• немного весеннего карьера + уточки (самое важное)
YouTube
• покажу код,
• дам полезные ссылочки,
• мотивация,
• опыт,
• побалуемся с LLM,
• немного весеннего карьера + уточки (самое важное)
YouTube
YouTube
От анализа к готовой теме: процесс создания цветовых схем
Делаю свою единую цветовую тему для Neovim и WezTerm: почти монохромную, с нормальным контрастом, светлым и темным режимом, и без цветового шума в коде.
В видео показываю, почему мне надоели разрозненные темы в редакторе, терминале и diff, как я пришел к…
В видео показываю, почему мне надоели разрозненные темы в редакторе, терминале и diff, как я пришел к…
👍16🔥7👨💻3
Месяц тишины. Развею его небольшими находками.
Всё, что сейчас происходит, заставило меня отказаться от других задачников. Пришлось перейти на Singularity (пусть он и неплохой). Ко всему этому я перешёл на Codex с Copilot. Хочу попробовать, каков он. Думаю, что должно быть получше, в конце концов, ИИ — их основной продукт.
Так о чём это я! Работать с Singularity можно через вашего ИИ-агента. У них есть MCP. С доступом на чтение к Singularity и календарю у меня получился хороший ассистент по декомпозиции задач и анализу выполненного.
Проблема только одна. Из коробки MCP поставляется в формате MCPB, который поддерживается только в Claude Desktop. Но! Я парень простой, заставил его работать и в Codex. Для этого надо просто:
• распаковать MCPB — это zip-архив;
• запустить его как node.js-приложение.
Особенно хорошо это сочетается с заметками в Obsidian, которые — просто файлы на диске.
А как вы подружили ИИ и task-tracking/knowledge-management?
Всё, что сейчас происходит, заставило меня отказаться от других задачников. Пришлось перейти на Singularity (пусть он и неплохой). Ко всему этому я перешёл на Codex с Copilot. Хочу попробовать, каков он. Думаю, что должно быть получше, в конце концов, ИИ — их основной продукт.
Так о чём это я! Работать с Singularity можно через вашего ИИ-агента. У них есть MCP. С доступом на чтение к Singularity и календарю у меня получился хороший ассистент по декомпозиции задач и анализу выполненного.
Проблема только одна. Из коробки MCP поставляется в формате MCPB, который поддерживается только в Claude Desktop. Но! Я парень простой, заставил его работать и в Codex. Для этого надо просто:
• распаковать MCPB — это zip-архив;
• запустить его как node.js-приложение.
Особенно хорошо это сочетается с заметками в Obsidian, которые — просто файлы на диске.
А как вы подружили ИИ и task-tracking/knowledge-management?
👍10
Те, кто давно меня читают, знают: я люблю Vim за архитектуру. И особенно — за фичи, которые не висят в воздухе. Сегодня — как раз такой пример: cursor-text-objects.nvim.
В Vim есть textobject — способ оперировать логическими блоками текста: iw, ap, if и т.д. Это работает отлично… пока не упираешься в ограничение: объект можно взять только целиком. А хочется выделить только часть функции ниже курсора!! Очень! Именно это и решается плагином.
Добавляются всего два префикса:
• [ — от начала объекта до курсора
• ] — от курсора до конца объекта
Дальше — всё как всегда, operator + textobject:
• d]ap — удалить от курсора до конца абзаца
• d[if — удалить от начала функции до курсора
• c]iw — изменить слово от курсора до конца
Плагин внешний, но ощущается так, как будто это всегда было частью Vim.
В Vim есть textobject — способ оперировать логическими блоками текста: iw, ap, if и т.д. Это работает отлично… пока не упираешься в ограничение: объект можно взять только целиком. А хочется выделить только часть функции ниже курсора!! Очень! Именно это и решается плагином.
Добавляются всего два префикса:
• [ — от начала объекта до курсора
• ] — от курсора до конца объекта
Дальше — всё как всегда, operator + textobject:
• d]ap — удалить от курсора до конца абзаца
• d[if — удалить от начала функции до курсора
• c]iw — изменить слово от курсора до конца
Плагин внешний, но ощущается так, как будто это всегда было частью Vim.
GitHub
GitHub - ColinKennedy/cursor-text-objects.nvim: Use [ and ] to enhance all of your Neovim text-objects and text-operators!
Use [ and ] to enhance all of your Neovim text-objects and text-operators! - ColinKennedy/cursor-text-objects.nvim
🔥20👍7
На этой неделе будет ролик. Пока он готовится, я хочу написать о чем-то реальном, а не агентах и прочей ерунде. Для некоторых настолько реальным, что сложно представить, что такое может случится именно с ним или близким. Для меня даже сама возможность того, что рядом может оказаться человек, которому я не смогу помочь в такой критичный момент, оставляет ком в горле. А о том, что это будет близкий человек, даже думать не хочется.
В своем канале @kydavoiti_live я писал про видео. Оно мне напомнило, что есть такая вещь: первая помощь; о которой я почти ничего не знаю и точно ничего не умею. Хотя все мы ее проходили на работе/школе, так или иначе (чаще мимо)? Подписывали документы? Почти сразу после просмотра, я поставил себе задачу пойти на курсы первой помощи.
У меня есть опыт дежурств на работе, я знаю насколько важно: решать проблемы с холодной головой, иметь в арсенале отточенные алгоритмы, понимать что ты можешь сделать, а что нет. Умение должно оттачиваться на практике. Мой опыт участия в учениях показывает, что они помогают этот опыт получить. После них ты всегда узнаешь что-то новое о системе, извлекаешь уроки и получаешь навыки.
Вот, на этих выходных я прошел курс из 16 часов, где мы изучали теорию и практиковались: в алгоритме оказания первой помощи, вызове скорой помощи, проверке дыхания у человека без сознания, как (и когда) перевести пострадавшего в безопасное положение, опросе пострадавшего, помощи в организации, сердечно-легочной реанимации (детей, школьников, взрослых), перевязке кровотечений, транспортировке пострадавших множеством способов, прием Геймлиха - это (не полный) список того, что мы делали на практике друг с другом или экипировкой. Все это оттачивалось в сценках-инсценировках, даже с искусственной кровью. И конечно, была теория, в том числе и юридические права и обязанности.
Я помню ощущение пустоты, когда ты не можешь ничего сделать на рабочих авариях, я даже не представляю какое оно может быть в ситуации, к которой мы готовились. Надеюсь, что мне это не пригодится, но у меня теперь есть хотя бы чему пригодиться.
Подробнее про эти курсы вы можете прочитать на сайте РКК: https://www.redcross.ru/. Еще делюсь каналом нашего инструктора Ивана, который на основной работе инженер, а по выходным: @first_aid_and_common_sense.
В оказании первой помощи ИИ нас не заменит. Будь то в качестве субъекта и/или объекта (как бы грустно и смешно это ни было)
В своем канале @kydavoiti_live я писал про видео. Оно мне напомнило, что есть такая вещь: первая помощь; о которой я почти ничего не знаю и точно ничего не умею. Хотя все мы ее проходили на работе/школе, так или иначе (чаще мимо)? Подписывали документы? Почти сразу после просмотра, я поставил себе задачу пойти на курсы первой помощи.
У меня есть опыт дежурств на работе, я знаю насколько важно: решать проблемы с холодной головой, иметь в арсенале отточенные алгоритмы, понимать что ты можешь сделать, а что нет. Умение должно оттачиваться на практике. Мой опыт участия в учениях показывает, что они помогают этот опыт получить. После них ты всегда узнаешь что-то новое о системе, извлекаешь уроки и получаешь навыки.
Вот, на этих выходных я прошел курс из 16 часов, где мы изучали теорию и практиковались: в алгоритме оказания первой помощи, вызове скорой помощи, проверке дыхания у человека без сознания, как (и когда) перевести пострадавшего в безопасное положение, опросе пострадавшего, помощи в организации, сердечно-легочной реанимации (детей, школьников, взрослых), перевязке кровотечений, транспортировке пострадавших множеством способов, прием Геймлиха - это (не полный) список того, что мы делали на практике друг с другом или экипировкой. Все это оттачивалось в сценках-инсценировках, даже с искусственной кровью. И конечно, была теория, в том числе и юридические права и обязанности.
Я помню ощущение пустоты, когда ты не можешь ничего сделать на рабочих авариях, я даже не представляю какое оно может быть в ситуации, к которой мы готовились. Надеюсь, что мне это не пригодится, но у меня теперь есть хотя бы чему пригодиться.
Подробнее про эти курсы вы можете прочитать на сайте РКК: https://www.redcross.ru/. Еще делюсь каналом нашего инструктора Ивана, который на основной работе инженер, а по выходным: @first_aid_and_common_sense.
В оказании первой помощи ИИ нас не заменит. Будь то в качестве субъекта и/или объекта (как бы грустно и смешно это ни было)
👍32⚡5
Видео.
Поговорил о том, как я изучал bubbletea через прототипы с LLM.
Теперь там появились интересные эффекты, спасибо Codex + Remotion.
YouTube
Поговорил о том, как я изучал bubbletea через прототипы с LLM.
Теперь там появились интересные эффекты, спасибо Codex + Remotion.
YouTube
YouTube
LLM-прототип — путь к знаниям 🧠
LLM не заменяет обучение, но может сильно ускорить его, если правильно встроить ее в рабочий процесс.
В этом видео я рассказываю, как взял новый для себя TUI-фреймворк, сначала дал AI слишком много свободы, столкнулся с проблемами архитектуры, тестов и UX…
В этом видео я рассказываю, как взял новый для себя TUI-фреймворк, сначала дал AI слишком много свободы, столкнулся с проблемами архитектуры, тестов и UX…
👍14
Куда войти?
Видео. Поговорил о том, как я изучал bubbletea через прототипы с LLM. Теперь там появились интересные эффекты, спасибо Codex + Remotion. YouTube
Alt-screen в TUI
Пользуетесь вы своим любимым Claude Code или другие Agent Harness. Все начинает прыгать, моргать, страшно, очень страшно.
У нас может быть такая ситуация, что текст приложения не помещается в экран. И часто это не проблема:
- горизонтальный текст просто переносится на следующие строки: да, это некрасиво, но не критично.
- текст не помещается вертикально - можно скроллить.
Проблема встает в полный рост, когда включается режим alt-screen. В этом режиме мы уже не сможем просто пролистать вверх или вниз, этим должен заниматься сам TUI. То есть ответственность за то, что именно видит пользователь, полностью переходит к приложению.
Для продвинутых приложений, которые хотят адаптироваться к размеру терминала и полностью управлять тем, что видит пользователь, надо пользоваться viewport. Это компонент, который накладывает ограничения на компоненты, которые работают внутри него, но позволяет вписывать компоненты в ограничения.
Он следит, какой у нас размер экрана, какой размер содержимого и как его лучше отобразить.
Вы можете писать его сами, но часто он уже реализован библиотекой, которую вы используете. Например, он есть в bubbles.
Пользуетесь вы своим любимым Claude Code или другие Agent Harness. Все начинает прыгать, моргать, страшно, очень страшно.
У нас может быть такая ситуация, что текст приложения не помещается в экран. И часто это не проблема:
- горизонтальный текст просто переносится на следующие строки: да, это некрасиво, но не критично.
- текст не помещается вертикально - можно скроллить.
Проблема встает в полный рост, когда включается режим alt-screen. В этом режиме мы уже не сможем просто пролистать вверх или вниз, этим должен заниматься сам TUI. То есть ответственность за то, что именно видит пользователь, полностью переходит к приложению.
Что за alt-screen?
Это не субкультура, это чисто технический термин. Приложения с TUI могут работать в нескольких режимах: обычный и alt-screen.
Пример приложения:
- что работает в alt-screen: neovim, opencode.
- что работает в обычном режиме: codex (по крайней мере в tmux), cat, git status.
Вы сразу увидите, если приложение работает в режиме alt-screen. Оно займет все пространство вашего терминала.
Для продвинутых приложений, которые хотят адаптироваться к размеру терминала и полностью управлять тем, что видит пользователь, надо пользоваться viewport. Это компонент, который накладывает ограничения на компоненты, которые работают внутри него, но позволяет вписывать компоненты в ограничения.
Он следит, какой у нас размер экрана, какой размер содержимого и как его лучше отобразить.
Вы можете писать его сами, но часто он уже реализован библиотекой, которую вы используете. Например, он есть в bubbles.
👍1
Особенности работы bubbletea
Обещал поделиться техническими особенностями, которые вызвали у меня проблемы. Делюсь.
много событий, случайный порядок
Порядок завершения асинхронных операций может быть случайным, поэтому важно синхронизировать доступ к
В
Должен быть мем, но я просто опишу его.
• Drake hates: установить значение
- Так у нас победит последнее примененное сообщение, а не обязательно последнее действие пользователя.
• Drake likes: изменить значение
- Так у нас может измениться порядок применения, но результат останется тем же.
Но! И тут тоже надо очень осторожно подходить, потому что возможно конкурентное чтение текущего состояния для
Короче, многопоточка (tm).
Что мы делали?
- сначала перестали мутировать состояние до
- ранее мы сначала изменяли
- теперь мы сначала ходим в
- а затем добавили
Коммиты:
• 2efd2c0
• 79eb212.
Вывод простой: сообщения и его обработчики должны быть безопасны к переупорядочиванию или явно защищены от устаревших результатов, иначе многопоточка (tm).
тест закончился, фоновые операции нет
Здесь проблема была уже не в порядке применения, а в жизненном цикле приложения. В
В моем случае такие операции пытались делать свои грязные делишки после завершения приложения и удаления директории.
В
Все просто...Или нет?
Обещал поделиться техническими особенностями, которые вызвали у меня проблемы. Делюсь.
много событий, случайный порядок
Порядок завершения асинхронных операций может быть случайным, поэтому важно синхронизировать доступ к
storage`/`state. Я встречался с этой проблемой в тестах toggle-значения завершенности задачи (и не только, это один из примеров).В
bubbletea Update обрабатывает сообщения последовательно, но tea.Cmd запускаются асинхронно. Несколько команд могут завершиться не в том порядке, в котором их создали, поэтому обработчики их сообщений должны переживать переупорядочивания.Должен быть мем, но я просто опишу его.
• Drake hates: установить значение
counter = n.- Так у нас победит последнее примененное сообщение, а не обязательно последнее действие пользователя.
• Drake likes: изменить значение
counter + k.- Так у нас может измениться порядок применения, но результат останется тем же.
Но! И тут тоже надо очень осторожно подходить, потому что возможно конкурентное чтение текущего состояния для
diff и применение обновления.Короче, многопоточка (tm).
Что мы делали?
- сначала перестали мутировать состояние до
*DoneMsg.- ранее мы сначала изменяли
state, потом ходили в store, а потом уже отправляли сообщение, на которое мог кто-то реагировать;- теперь мы сначала ходим в
store, а потом отправляем *DoneMsg, в обработчике которого обновляется state.- а затем добавили
nonce к сообщениям thinglist. nonce здесь - это идентификатор конкретного времени жизни: сообщения от старого экземпляра модели пропускаются.Коммиты:
• 2efd2c0
• 79eb212.
Вывод простой: сообщения и его обработчики должны быть безопасны к переупорядочиванию или явно защищены от устаревших результатов, иначе многопоточка (tm).
тест закончился, фоновые операции нет
Здесь проблема была уже не в порядке применения, а в жизненном цикле приложения. В
bubbletea тест мог уже дойти до tm.Quit(), но это еще не значило, что все ранее запущенные tea.Cmd действительно закончили работу, no-no-no. Было бы слишком просто.В моем случае такие операции пытались делать свои грязные делишки после завершения приложения и удаления директории.
В
cosas это в итоге починилось коммитом 6f46daf: в storage добавили Close(), который запрещает новые операции (будет отдаваться ошибочка) и ждет завершения уже идущих записей.Все просто...Или нет?
Да! Обычно, в таком стиле и о таких штуках не пишу в этом канале, но сейчас я не могу молчать.
Inspired by: <https://www.youtube.com/watch?v=WqSWZuGS9pc>
Я ненавижу: <https://github.com/golang/go/issues/77273>.
Это шаг в сторону, где Go нечего ловить. Есть куча языков, который позволяют писать код с method-receivers, позволяют делать это удобнее...И мы все знаем куда это приходит:
Вот такая бздень у нас получится на Go. Хотя нет, на Go будет даже хуже, потому что на Go нет синтаксиса, чтобы сделать lambda-функции без явного указания всех типов. То есть код выше будет таким:
Даже раньше, когда Go-феры использовали lo, для меня это было культурных шоком:
1. мусор: каждая операция делала мусор, с которым (слабому, если сравнить с Java) GC надо было бороться;
2. елочка: вызов оператора надо вставлять как операнд для другого оператора;
3. шум: везде указывать явные типы для lambda.
И что теперь? Да, добавление нового подхода решит проблему 1, потому сделают ленивые коллекции (сделают же? не будут же они eager? и использовать все их будут?)
Я знаю точно, что изменится. На собесах (и без того бесполезных), появится еще один вопрос: сколько allocations сделает код и как его оптимизировать. Правильным ответом будет переписывание с неправильной либы на правильную. И попутный рассказ почему одна из них плохая, а вторая нет.
PS. Хорошо, что код сейчас писать почти не нужно. Пора становится кодерам gown'a
Inspired by: <https://www.youtube.com/watch?v=WqSWZuGS9pc>
Я ненавижу: <https://github.com/golang/go/issues/77273>.
Это шаг в сторону, где Go нечего ловить. Есть куча языков, который позволяют писать код с method-receivers, позволяют делать это удобнее...И мы все знаем куда это приходит:
var result = users.stream()
.filter(u -> u != null && u.isActive() && u.getEmail() != null)
.flatMap(u -> u.getOrders().stream()
.filter(o -> o.getStatus() == PAID)
.flatMap(o -> o.getItems().stream()
.filter(i -> i.getProduct().getCategory() != INTERNAL)
.map(i -> entry(domain(u), priceWithDiscount(o, i)))))
.collect(groupingBy(Entry::getKey, summingDouble(Entry::getValue)))
.entrySet().stream().filter(e -> e.getValue() > 1000)
.sorted(comparingByValue().reversed()).limit(10).toList();
Вот такая бздень у нас получится на Go. Хотя нет, на Go будет даже хуже, потому что на Go нет синтаксиса, чтобы сделать lambda-функции без явного указания всех типов. То есть код выше будет таким:
result := From(users).
Filter(func(u *User) bool {
return u != nil &&
u.Active &&
u.Email != ""
}).
FlatMap[Entry[string, float64]](func(u *User) Stream[Entry[string, float64]] {
return From(u.Orders).
Filter(func(o *Order) bool {
return o.Status == Paid
}).
FlatMap[Entry[string, float64]](func(o *Order) Stream[Entry[string, float64]] {
return From(o.Items).
Filter(func(i *Item) bool {
return i.Product.Category != Internal
}).
Map[Entry[string, float64]](func(i *Item) Entry[string, float64] {
return Entry[string, float64]{
Key: domain(u),
Value: priceWithDiscount(o, i),
}
})
})
}).
GroupBy[string, float64](
func(e Entry[string, float64]) string {
return e.Key
},
func(e Entry[string, float64]) float64 {
return e.Value
},
).
Entries().
Filter(func(e Entry[string, float64]) bool {
return e.Value > 1000
}).
Sort(func(a, b Entry[string, float64]) int {
return cmp.Compare(b.Value, a.Value)
}).
Take(10).
ToSlice()
Даже раньше, когда Go-феры использовали lo, для меня это было культурных шоком:
1. мусор: каждая операция делала мусор, с которым (слабому, если сравнить с Java) GC надо было бороться;
2. елочка: вызов оператора надо вставлять как операнд для другого оператора;
3. шум: везде указывать явные типы для lambda.
И что теперь? Да, добавление нового подхода решит проблему 1, потому сделают ленивые коллекции (сделают же? не будут же они eager? и использовать все их будут?)
Я знаю точно, что изменится. На собесах (и без того бесполезных), появится еще один вопрос: сколько allocations сделает код и как его оптимизировать. Правильным ответом будет переписывание с неправильной либы на правильную. И попутный рассказ почему одна из них плохая, а вторая нет.
PS. Хорошо, что код сейчас писать почти не нужно. Пора становится кодерам gown'a
YouTube
I am done with Golang
Blacksmith is the fastest way to run your Github Actions. 2x faster job runs, 4x faster on caches, and 40x faster on Docker builds, slashing costs by up to 75%. Already trusted by over 3,500 companies, including Ashby, Veed, Clerk, and Mintlify → https:/…
👍8🗿3👨💻1
У меня есть канал, где я пишу всякое. Можете подписываться, если интересно всякое.
- интерактивно проверить все ошибки написания в Vim,
- разные фоточки,
- шутки про gown,
- поиски самого-самого браузера.
И это только вершина айзберга...
https://t.me/kydavoiti_live
- интерактивно проверить все ошибки написания в Vim,
- разные фоточки,
- шутки про gown,
- поиски самого-самого браузера.
И это только вершина айзберга...
https://t.me/kydavoiti_live
Telegram
Куда Войти? Разное
Ответвление канала @kydavoiti не только об IT.
👍1 1