Evgeny Gazdovsky (@gazdovsky) header
Evgeny Gazdovsky (@gazdovsky) profile picture

Learning a Haskell for Great Good!

Stary Oskol
Joined August 2009
Photo by Evgeny Gazdovsky (@gazdovsky)Photo by Evgeny Gazdovsky (@gazdovsky)Photo by Evgeny Gazdovsky (@gazdovsky)Photo by Evgeny Gazdovsky (@gazdovsky)Photo by Evgeny Gazdovsky (@gazdovsky)Photo by Evgeny Gazdovsky (@gazdovsky)Photo by Evgeny Gazdovsky (@gazdovsky)Photo by Evgeny Gazdovsky (@gazdovsky)Photo by Evgeny Gazdovsky (@gazdovsky)Photo by Evgeny Gazdovsky (@gazdovsky)
People ask me why Haskell Up in heaven, all they talk about is Haskell. Feel the pure functional breeze... Your code burns with tears... Never coded in Haskell? Knocked on heaven's door, got drunk on tequila, but you never learned Haskell? They'll call you a loser up there!
people ask me why hyprland is C++ because I had a lot of experience in C++ and I like C++
2
15
3,058
Evgeny Gazdovsky retweeted
Какой 2010 алло, нгмд, нжмд это что шуточки?
1
1
1
57
everything is a file
В какой момент файлы начали называть памятью?
1
11
524
В какой момент файлы начали называть памятью?
Решил, что мне нужна мульти-агентная постоянная память – агенты у меня разные, но работают над общими проектами, было бы неплохо, если бы они знали, что делают/ли их "коллеги". Естесвенно, взять что-то готовое я не мог, поэтмоу начал писать свое. Пока в процессе тестирования. Но в будущем, надеюсь, покажу всем.
21
1
32
3,632
Ожидал прочитать про мьютексы, семафоры и прочие транзакции...
Многие вайбкодеры до этого не программировали приложений с многопоточностью, поэтому как оказалось, стоимость использования субагентов для них это нечто волшебное. Опишу здесь ключевые идеи для тех, у кого нет много денег на всю эту ерунду и надо бюджетно разрабатывать на 1-2 подписках. 1) Стоимость работы растет нелинейно от количества агентов. Чем больше агентов - тем дороже каждый из них. Начиная с какого-то количества, за каждого из агентов ты начинаешь переплачивать раз в 10. Так происходит по многим причинам, одна из самых важных - это ошибки синхронизации. Агенты делают что-то что противоречит друг другу, после чего их нужно синхронизовывать. Точнее, даже не самих агентов, а хуже - результатов той ерунды, что они понаписали в код. Чем больше агентов, тем больше пар агент-агент нужно синхронизовать между собой. Простой подсчет на калькуляторе даст вам очень неприятные цифры. 2) Если включить режим fast у chatgpt, можно заплатить и все x100, и тогда будет то о чем плачут блоггеры типа Бриджмайнда на ютубе: я вкючил fast и подписка закончилась за минуту. Можно считать, что сама разработка с субагентами - это такой своеобразный режим fast, внутренности которого ты видишь на экране. Когда ты работаешь с роем агентов (стоимость x2+) в режиме fast (стоимость x2), получается как бы "fast в квадрате" и твои бабки испаряются. Это не баг, так и должно быть. 3) Невозможно бесконечно масштабировать скорость, закидывая в топку все больше субагентов. Если не придумать никаких умных хитрых схем, то существует очень конкретная точка, где diminishing returns начинают бить все сильнее, пока стоимость каждого следующего субагента не взлетает в бесконечность. === 4) Но всё же, субагенты действительно ускоряют. Просто это стоит x2 - x1000 от базовой стоимости, в зависимости от ваших аппетитов. Это такой супер дорогой режим fast. 5) Если цель - экономить бабки и получать максимальное качество, не нужно этим пользоваться вообще. Запустите процесс в один поток, и он вам замечательно докатится и доделает всё, просто это произойдет через неделю. 6) Если цель - промаксить скорость, не уведя стоимость в бесконечность, то нужно САМОСТОЯТЕЛЬНО продумать схему взаимодействия агентов. И четко заточить их под конкретную, ограниченную задачу, которую вы делаете прямо сейчас. Например, заранее продумать, как именно будет взаимодействовать агент-фронтендер и агент бэкендер. Прямо прописать им протокол взаимодействия. Что конкретно делать когда. То, чем в живых командах людей занимаются проектные менеджеры. 7) Имея всего лишь одну 200-баксовую подписку, проще всего не пытаться играть в рой агентов (у тебя нет столько денег, подписка закончится за считаные часы), а взять готовые роли из реальной жизни. Агенты очень хорошо знают как работают эти роли, и какой для них эффективный протокол. Примерный состав ролей: Директор (CTO/CEO/Producer), Архитектор, Разработчик, Тестировщик. Запускаешь 4 сессии какого-нибудь Claude Code, первой же командой делаешь им /rename сессии по названию роли. Обычно в команде живых людей еще есть Дизайнер, но пока что выделение отдельного Дизайнера по факту кажется бесполезным - дизайн слишком сильно связан с версткой, а верстке нужен Архитектор. Поэтому предлагаю для экономии объединять их в одну сущность. Обычно в команде живых людей есть еще Кибербезник. Но в стеке Anthropic кибербезой может заниматься только Opus 4.6. Почему именно Opus 4.6? Потому что он самый совершенно никудышний никчемный опущенный кибербезник на свете. Поэтому я бы советовал не иметь такой роли среди субагентов вообще. Аудит безопасности делать отдельным проходом GLM 5.3 в их собственном агенте ZCode. Дальше объясняешь: - "ты Директор, ты вместе со мной придумываешь крутые фичи и отдаешь на проработку Архитектору. - "ты Архитектор, ты придумываешь и прорабатываешь всю архитектуру, кроме того занимаешься дизайном ползьовательских интерфейсов." - "ты Разработчик, ты занимаешься реализацией задач от Архитектора и Директора, и специализируешься в глубоко продуманных точных технических решениях" - "ты Тестировщик, ты занимаешься проверкой всего, и говоришь херню или нет сделал Разработчик Для каждой роли в конце задачи дописать: "на компьютере запущены сессии Claude Code с ролями Директор, Архитектор, Разработчик, Тестировщик. Все они могут общаться между собой, отправляя сообщения с помощью встроенных механизмов Claude Code. Ты можешь отправлять сообщения тому, кому посчитаешь важным, чтобы что-то узнать, попросить или поставить задачу. Оставайся внутри своей роли и проси другие сессии исходя из их предполагаемой роли." Дальше ты придумываешь какую-то цель, например: сделать MVP своей новой фичи. Проходишься по всем сессиям и ставишь им "/goal MVP доделан до конца по плану, используя инструкции от коллег". Можно не уточнять, что за план и что за инструкции, они обычно сами придут к каким-то решениям. Что касается выделяемых ресурсов. У модели есть ее типа (Fable/Opus) и есть reasoning effort (low, medium, high). Дальше закройте глаза и представьте типажи своих персонажей, и всё станет ясно. Пример для тех, кто не работал в компании по разработке Software. - Директор обычно нифига не интеллектуал (reasoning = medium), зато с хорошей чуйкой (Fable). - Архитектор обычно самый умный в компаниях по разработке ПО - и на это напрашивается Fable Max. Но очень важно Архитектора не заебывать тупыми вопросами по мелочам, это нужно учесть в промтах. - Разработчики какой-то особой чуйкой не обладают, это Opus. Какой resoning effort? Ну это насколько у вас хватит денег. Можно нанять джунов с /effort low. Можно мидлов /effort medium. Можно синьоров с /effort high и выше. Тут уж как по карману. Главное не понизить модель до Haiku или Luna, это пиздец. - Тестировщики самые контрастные. Обычно полезны двух видов: "обезьяны прокликивающие тестплан" и "гении, которые видят невидимое и думают о том, о чем никто ранее не думал". Средние тестировщики нужны в очень ограниченном количестве. "Господь не любит теплых, будь холоден или будь горяч". Обезьянок можно посадить на любую дешевую модель: Haiku, Luna, даже Jev (если понимаете как). Гении наоборот по настройкам равны Архитекторам - это Fable Max, Astra Max и тому подобное. Специальные агентные ультра-режимы (Fable Ultracode, Astra Ultra) стоит выдавать только если есть конкретная проблема: вам нужно зачем-то запускать много субагентов, и у вас возникли какие-то критические проблемы их синхронизации, которые иначе не решить как повышением уровня до ультры. В описываемой здесь схеме не возникает проблем синхронизации, поэтому эти режимы не нужны. Более того, конкретно в Claude, режим ultracode - более "тупой" чем Max (контр-интуитивно, но они даже в интерфейсе про это пишут!), поэтому для Архитектора это не апгрейд а даунгрейд. Это схема не идеальная. Она нужна только для того, чтобы сэкономить подписку. Она эксплуатирует идею, что моделям не нужно рассказывать о ролях в классических software development компаниях. Попытка придумать в этот стандартный набор какие-то другие роли - потребует описания деталей работы этих ролей, что мгновенно сказывается на стоимости работы. Экономия может быть ну, вплоть до x10 раз. Если вы бомж - признайте это. Не всем быть OpenAI и Google, и запускать рои из сотен тысяч агентов для решения загадок тысячелетия. Бомжи отлично живут у теплотрассы, а вы отлично сможете некоторое время обойтись подпиской за 200 баксов, используя нехитрые тупые приемы. Да, придется делать всякий зашквар, а что делать? Главное что агенты крутятся и бабки мутятся.
10
86
6,022
Сделал Glue для этого
я тут пилил обновление для formhaus и подумал, что ведь можно было бы также декларативно описывать не только формы пока только концептуально, но ведь можно сделать приложение, где не будет ничего, кроме набора компонентов, ИИ и набора самых разных апих и интерфейс будет таким, какой нужен в моменте для выполнения задачи, не больше и не меньше... нужен отель — соберётся букинг, нужен билет — трип ком, нужен заказ такси — убер... конечно, тут ломаются некоторые принципы ui/ux, к которым мы привыкли за последние десятки лет, но всё-таки если помечтать? короче это заметка во втором часу ночи после 16-часового рабочего дня, но как будто бы может быть интересно? 🤔 напишите, что думаете
3
133
Теперь не только клиент-апплет может выполнять запросы на бэке, но и бэк на клиенте-апплете. У каждого апплета свой API. Модуль API так же прилетает с бэка. Пример –звонок:
Еще красоты принес ;)
1
5
238
Еще красоты принес ;)
Ну красота же ;)
1
3
329
Ну красота же ;)
Прогдвигаемся ;)
1
1
10
223
А я поменял все! Отрисовка у меня на GPU прямо в DRI. На бэке Haskell, а стримля все с помощью сврего диалекта LISP вместо JSON
Replying to @sandovin34721
мне надо поменять что-то в этой жизни потому что это не дело нахуй просто когда это был чисто js + php ну оно как-то дружило еще, хуёво жийсон ин жийсон аут, отконвертили, сохранили но я хочу отрисовку на gpu и стримить кучу бинарных вещей через ws и сервак у меня на C
2
9
180
Вот это, как раз, оно xitter.gq/gazdovsky/status/21128…
Прогдвигаемся ;)
1
20
– Да ведь он тут черт знает чего натворит! Как-нибудь его надо изловить? – Вы уже пробовали, и будет с вас, и другим тоже пробовать не советую. А что натворит, это уж будьте благонадежны.
Replying to @nwdeer @selllsky
Ну просто я к тому, что не ясно, где он может еще такой выкрутас сделать. Как с джуном, он тоже вроде сидит, пыхтит, а ты не знаешь, каких интересных решений от него ждать "чтобы заработало"
1
67
Для особо одарённых напишу: а причем тут языки программирования?
Для особо одарённых напишу: ни в одном из языков программирования нет функций для истинного рандома. Эти все типа рандомы всё равно зависят от таймстемпа и процессора.
5
111
Кататься на Гранте, а не на Порше 😭
Вот поэтому Тесла - это шоу, а кататься - это Порше
2
73
Жж же!
Кто-нибудь, кто серфил по раннему интернету в 1995–2010 годах. Какой один сайт/приложение вы всё ещё вспоминаете?
1
5
137
С тепрлом вспоминаю времена, когда починили стиралку и помыли найденную в духовке сковородку в квартире в Барсе ;) А в Париже починили вай-фай и искрящую розетку.
Нифига себе. Airbnb начали что-то подозревать. Одним из моих любимых развлечений было читать ветки с отзывами клиентов этого сервиса. Про то, как ты платишь за уборку и должен ещё начистить апартаменты перед выселением.
6
120
Всем придет харнесс!
Что бы вы сейчас ни делали - от программирования до выпекания пирожков - нужно всё бросать и искать своё место в ИИ. В идеале, переквалифицироваться в ИИ-инженера (т.е. того, кто разрабатывает сам ИИ, а не испоьлзует его) или ИИ-ученого. Если это недоступно, то хотя бы что-то рядом найти, про массовое применение ИИ вместо классических способов делания того, что вы делаете. Если вы делаете что-то не через ИИ, завтра придут за вами.
1
72
Прогдвигаемся ;)
1
5
248
Ощущение, что на всех муралах Безруков ;)
77
Нет ничего более общего, чем случайный перебор 😎
Replying to @TrushinBV
Слушай, а в этих задачках есть какие-то общие принципы, подходы, как их решать? Я, как правило, каким-то случайным перебором, наитием пытаюсь. И зачастую не выходит. Ну то есть понятно, можно посмотреть общую площадь, поделить на число частей и узнать необходимую площадь части. Иногда, наверно, если части на регулярной сетке, можно какую-нибудь шахматную раскраску зафигачить, посчитать число белых и чёрных клеток внутри, это может дать ограничения на чётность кусков. Но больше ничего толкового в голову не приходит. Есть теория за ними?
1
5
216
Это был бы ЭКСПЕРЕМЕНТ!
Понравилось как сегодня обсуждали экранизации Стрцгацких в толпе перед квартирником (гаражником?) и на моих словах про то что стоит экранизировать град обреченный из ниоткуда появился мужчина и панически сказал "НЕТ ПОЖАЛУЙСТА НЕ НАДО"
1
1
75
Это, в принципе, тоже ) xitter.gq/Sigiller/status/211116…
Экранизировать надо "Улитку на склоне"
1
52