Telegram Group Search
Где-то видел пост, что в идеале современное интервью должно выглядеть еще как проверка, какими промтами кандидат пользуется для того, чтобы решить проблему. Остальное считать зашкваром.

С одной стороны — это верно. Сейчас удобнее пользоваться ChatGPT или подобным вместо гугла. Copilot иногда дает очень полезные подсказки и убыстряет время на написание кода. С другой стороны — все стало сложнее и бесполезней.

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

L2 ролапы и прочие чейны пилят дополнительные инструменты и добавляют чего-то своего в ту или иную сеть. Так люди сделали WASM смарт контракты. Они вроде как совместимы с EVM, однако не всегда. Ни один из доступных и продвинутых инструментов для тестирования смартконтрактов (Hardhat, foundry) не поддерживает WASM смартконтракты и поддержки со стороны инициаторов нет.

А что ГПТ? А ГПТ предлагал каким-то образом решать это путем установки несуществующих зависимостей или поиска артефактов, которые не производят те инструменты. Ну оно в целом то и понятно, что все в нейронках галлюцинация и иногда эта галлюцинация совпадает с реальностью.

Таким образом у меня гугл используется для:
1. Поиска пейперов или дополнительных материалов, которые лонг риды
2. Для понимания той или иной проблемы с целью глубокого изучения
3. Найти что-то простое из фактов

ГПТ для:
1. Решения простых проблем, типа импорта ESM модуля в CJS проект на ноде
2. Для всяких рекоммендаций по книгам или подобному
3. Прочие всякие полезные мелочи, которые проще получить в виде текстового ответа

Копилот для того, чтобы пилить код и генерить его более менее в нормальном виде.

А в остальном интернет превратился в какую-то околоскамерскую свалку генеренного контента. Благо можно найти тематические сообщества где можно обсудить ту или иную проблему. А по пройденным темам или проблемам гпт вполне себе хорош
Интенты.

Intents что в переводе значит намерение по замыслу должно было улучшить UX (user experience) в Dex и Defi, а по факту стало просто обычными лимитками.

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

Так в целом и появились интенты. Это в целом говорит о намерении пользователя купить или продать ту или иную монету. Однако, купить или продать можно как минимум двумя способами: это по рынку или лимиткой.

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

Однако, вокруг интернтов есть несколько дополнительных сущностей, потому что вот это намерение надо в итоге превратить в транзакцию, а для этого надо кое-что уметь. Кто вообще есть:

1. Какая-то платформа или приложение, которое собирает интенты. Их в целом на рынке сейчас больше одного и Cow Swap с их батч аукционами как один из примеров. Еще есть 1inch фьюжн с датским аукционом, но в итоге все равно собирают интенты от пользователей
2. Резолверы. Они в целом берут и разбивают интенты перед тем как отправить их на солвинг. Могут отфильтровывать заранее невыгодные или неисполнимые интенты. (Например мы хотим поменять один токен на другой токен и у какого-то из них нет ликвидности)
3. Солверы Они как раз таки смотрят на интенты, ищут ликвидность и думают о том, как засетлить итоговую транзакцию. Считают сколько это будет по газу и остальным комиссиям и участвуют в аукционе
4. MM/MT. Они же Fillers/Takes, Они же мейкеры/тейкеры. Мейкеры или филлеры предоставляют ликвидность. Это может быть или RFQ(Request for Quote) провайдер, или AMM (Automated Market Maker). Солверы тоже могут быть частично в этой роли
5. Серчеры, которые в целом охотятся на возможностью извлечь MEV

По идее, как интент объявлен, солвер забрал и решил его, выиграл в аукционе и засетлил это все ончейн то можно считать интент выполненым.

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


Вот думал написать что-то про крипту, но пост будет частично про крипту 😄

Сходил вчера в прокуратуру, потому что что? Потому что я продолбал узнать когда будет ответ. Узнал что прокурор запросил материалы дела, рассказал что в целом если я прошел по ссылке и не сам перевел бабки, то это преступление. Также я сказал ему, что я уже и так все концы нашел а дальше нужно чтобы кто-то делал запрос в рамках дела имея полномочия, иначе это просто бессмысленно. В итоге сказали что дело рассматриваться будет 14 рабочих дней и мне придет письмо на почту. Кто-то ждет от Хогвартса, а я теперь от прокуратуры 😄

Но вообще я прошел мимо прокуратуры потому что я сам себе стал третьим лицом xD. Отсюда у меня вообще ряд вопросов по тому как оно в целом работает и может я чего-то не понимаю.

Мне нужно вывести денег с брокерского счета. Я привязывал уже карту к ним, чтобы в нужный момент вывести деньги. Плюс, у ребят запустился процесс комплаенса чтобы перепроверить все данные, а у меня обновилась и фамилия и адрес проживания.

Привязываю я карту, пополняю счет на доллар, чтобы карта была регнута и вывожу этот доллар чтобы проверить по комиссиям что и как. Транзакция была моментальной, я был удивлен скоростью и всё подобное и потом я меняю фамилию.

Во вторник пытался вывести денег но система меня послала нафиг и сказала чтобы обратился в службу поддержки. В поддержке говорят что карта на третье лицо, хотя я на нее уже выводил денег. Ситуация конечно краеугольная, но всё же.

В итоге прихожу к тому, что проще просто перевыпустить карту. В Оптиме сказали что срочный перевыпуск займет день, если прийти с утра. Когда пришел, то сказали что не можем мы вам открыть счет, потому что еще сумма в обработке. На мои вопросы какого хуя вы мне вчера говорили другую инфу и мне нужно прям срочно-срочно вплоть до того, что можно поменять банк. На это мне собственно быстро все сделали и отправили на кассу оплачивать.

Во время смены фамилии в оптиме я карты не перевыпускал и никто мне ничего не сказал. Карты остались на старой фамилии. Угадайте теперь что произошло на кассе? Правильно, мы не можем принять оплату этой картой, потому что на ней другая фамилия (БЛЯЯЯЯ).

Учитывая что я был на пределе терпения то на кассира и заведущую мои возмущения полились в бОльшем объеме. Но в целом распечатав скрин с Тундука и прикрепив его в итоге сняли с моей карты (А это было дело принципа и быстрее было конечно снять с карты в банкомате).

Почему оно так я не понимаю, учитывая что эта карта привязана к моей новой фамилии и так. Но благо что завтра вечером я заберу карту и такой ситуации уже не будет.

Тем временем я подумавал и так, но сейчас решил диверсифицировать хранение денег в банке и собственно вопрос что можете порекомендовать, кроме Демира с их комиссиями на каждый чих, Оптимы с их приколами, Мбанк потому что он у меня есть и он может прилечь на пару часов. Мне в целом нужно удобное приложение и чтобы в отделение не ходить почти никогда.

А еще я закончил читать книгу Mastering BlockChain и завтра расскажу про нее что-нибудь.
Спасибо за рекомендации в комментариях про банки. Решил попробовать Бакай и Симбанк

Симбанковский пользовательский опыт прикольный. Лев приколдесный и в целом вроде как даже карту заказал. Правда печалит что пока карты не будет, то фиг тебе а не понять что есть по функционалу.

БакАЙ. Это просто замечательно что они AI выделяют, но им больше подходит АЙ. Потому что это гребанная боль, а не пользовательский опыт.

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

Еще прикол в том, что они почему-то решили использовать мои личные данные после того, как тыщу лет назад я через них свифтом отправлял платеж даже не помню в каком году. А данные там старые. А как поменять — непонятно. А приложение с формочками ничего особо не говорит, чтобы понять что не так. Но пишут что Системная ошибка turnover_currency_id. Очень понятно что делать дальше.

Попробовал удалить аккаунт и регнуться по-новой, правда я успел заказать пару карт у них. Также ребята не умеют в нормальную мультиязычность и часто выходят детские баги перевода типа “Поздаврялем. You have successfully updated your passport details”.

Офигенные инновации.

Их распознавалка паспортных данных распознает их криво. Заполняет через задницу. Ну и на этом этапе мне вообще огромный жсон выстрелил в экран.

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

Если все эти баги — следствие миграции на новый процессинг, то снаружи говорит о хреновых процессах разработки и доверия вообще не вызывает, потому что это просто детские болезни недостатка тестирования приложений. А класть все платежи и работу банка на 28 часов — это просто нонсенс.

Но глянем что там дальше будет. Симба прикольны черной картой и прикольным приложением. а Бакай пока что только ай
2014-2021 были года, когда я взращивал стажеров. На тот момент я решал бизнесовую задачу нехватки кадров и как бы цинично не звучало — это просто был хороший вариант найти специалистов по-дешевле и продать по-дороже (В целом весь аутсорс/аутстафф про продажу/перепродажу людей). Но моя мотивация в целом была понятна, потому что с этого я зарабатывал.

Я не совсем понимаю людей, которые делают это бесплатно или потому что попросили. К сожалению собственники любят на этом играть.

Вспоминая те времена — это были хорошие и интересные времена, которые помогли мне прокачать лидерские качества или получить опыт в управлении людьми. Много ребят вошли в программирование и спустя годы писали какие-то слова благодарности. Хоть конечно это и приятно, но я не считаю это своей заслугой и чаще всего это просто заслуга того или иного человека.

Как-то в 19м году я помог раскидать контракт одному из стажеров. Просто снял денег и принес ему. Я даже не помню сколько но сказал что эти деньги без возврата. Мне просто нужно было чтобы человек не парил себе мозги с тем, где взять денег.

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

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

Спасибо вам: Токтоназар, Вовчик, Дастан, Белек, Рустом, Пашок, Гуля, Эмир, Эрик, Тахмина, Катя, Толя, Баур, Парвиз, Ксюша, Айбек, Сула, Дарья, Глеб, Руслан, Сабина, Нурс, Нурсейит, Айдар, Саня (Е), Димас (хоть и не был прям стажером), Айсалкын, Малик, Метрик, Эльдар, Медер, Полина, Илья, Фокс, Женёк, Макс, еще Макс но другой, Айжан, Джаныл, Алтынай, еще одна Алтынай, Лиля, Димон Е, Артур, Ахмед, Муса, Тамара, Айдай, Алиса, Баха, Тимур, Антон, Муслима. Денис и еще много других очень классных ребят (и Ксюша Бородина, лол xD)


Поэтому: Press F to pay respects

Так что

F
По нашим банкам.

Очень надеюсь что у Симбанка всё получится и они будут такими же классными как они есть сейчас.

В целом это как раз таки тот самый банк без отделений и карту могут доставить куда угодно. Правда в отделение я еще сходил, потому что был рядом. Активация карты была прикольной. Девушка чот потыкала в телефоне, дала карту и сказала что мне был одобрен кредитный лимит в 60к.

Прила удобная и прикольная, активация карты происходит достаточно быстро. Кешбек приятный. Всё прям замечательно.

Вау эффект вызвала оплата подарка жене на НГ через интернет и 3d secure код я не вводил и не печатал, а просто в приле тыкнул на подтвердить.

Очень удобно, особенно если сравнивать с ужасным UX Бакая, тормознутостью в развитии Оптимы и перегруженностью Мбанка (он кстати надоел попапы в лицо кидать).

Из минусов у них только сомовая карта, но ее можно пополнить с любого банка без комсы.

Ну и карта стильная. А еще стикерочков дают в комплекте приколдесных.
На прошлой неделе чуть плотнее поработал с асинхронностью и многопоточностью в Rust. В целом всё достаточно даже хорошо. Однако, я кое что заметил.

В целом если хочется в асинхронность — можно взять и обмазаться async/await и в целом всё будет замечательно. Если хочешь что-то серьезнее, то крейт future с футурами внутри тоже может дать какие-то бенефиты.

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

Что в целом делает мой код: идет в интернеты, получает какие-то жсоны с какой-то сторонней API, кеширует ответ на файловую систему, дальше делает какие-то манипуляции с данными.

Что заметил в расте и tokio:
1. Операции с ФС всегда синхронные, даже в tokio::fs.
2. Хоть tokio::fs и делает из std::fs асинхронные вызовы, но он всегда складывает их к основному потоку
3. Синхронные вызовы в асинхронном коде — зло, которое мешает раскидывать функции по разным потокам

В итоге на tokio у меня не получилось сделать код многопоточным, из-за того что всё всегда прибивалось к основному потоку. При этом не важно как вызывался код через tokio::spawn или через tokio::task::spawn_blocking.

В итоге распаралелил через rayon. Основную работу он делает под капотом, но


file_ids.par_iter().for_each(|&file_id| analyze(auction_id))

Делает всю магию за меня.

Вроде как слышал мнение, что Go для операций с файлами в многопоточном режиме не очень хорошо подходит, потому что он всё пинит в один тред или одно ядро. Может кто подтвердить это или опровергнуть? Желательно с ссылками на код реализации в рантайме или скедулере
О, а это прям хорошая статья про техдолг и использование AI

Тезисы в ней валидны. ГПТ хоть и помогает иногда, но не скажу что для раста она прям отлично подходит. Ну или дело не в расте. Но очень часто приходится дописывать что я имею в виду на самом деле, где есть пробелмы в той или иной галлюцинации и всё подобное.

Вот буквально вчера была простая задача, однако помощь гпт хоть и была оценена, но всё равно управлять сложностью и в итоге кодом приходится самостоятельно.

Задача по-сути простая. Нужно было сделать на расте аналог abi.encode(struct). GPT подсказал какие-то варианты, однако они видимо или устарели или еще что-то. Но вооружившись тестом допинал решение до нормального состояния.

Иногда ГПТ может быть полезным для того, чтобы найти более подходящее решение и чаще это просто как уточка, которая может отвечать, но всё же в day by day работе больше помогает copilot, однако сложность он не умеет хендлить так, чтобы он экономил время.

Но подсказки от него хороши, да. Иногда пишу код в старом стиле, особенно если надо пройтись по nested структурам в цикле. Но то, что можно напилить кложуры которые просто сократят код с трех вложенных форов до 1 полезны.

Конечно под капотом будет вся та же итерация по вложенным структурам, но код получается выразительнее и лаконичнее
Вам пришло письмо с прокуратуры.

А в письме давай на го перепишем 😄

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

Спустя больше полугода программирования на расте решил попробовать Go. И вот у меня смешанные чувства от любимого языка.

Я вот прям точно привык к Enum в Расте. Они восхитительны


enum Error {
InvalidBalance,
BadReserve,
String(&’static str)
}

И если мы используем этот тип, то у нас есть только такие варианты. Можно разрулить это частично константами в го, но это всё же не та удобность и та уверенность.

if err != nil теперь бесит. Нет, раньше тоже бесил, но как-то можно было жить, но после того как в расте можно вернуть Result<SomeType, Error> ну и вторая штука может быть не обязательно ошибкой. Смысл не в том, что мы возвращаем тут пару, а мы делаем


Ok(some_value)

Или

Err(some_error)


И из плюсов, что везде где возвращающий тип Result и какая-то пара, то все методы можно вызывать с ? в конце. Всё в итоге вернется по стеку наверх, а дальше можно либо сделать match, unwrap, expect, catch_unwind или подобное. Явно обработка ошибок в расте сделана лучше.

А еще трейты. К трейтам я быстро привык. Они помогают расширять те или иные типы так, как угодно.

Так что я не думал, что мне будет комфортнее таки писать на нем с точки зрения написания кода и моей продуктивности.

Пет проект я таки попробую бахнуть и может быть будет еще что-то. Но обещаю не набрасывать на кодогенерацию в го 😄
С наступающим всех новым годом и пусть у каждого что он загадал то исполнится 🎉.

Кратко итоги:

1. Женился
2. Сменил сферу и теперь в крипте
3. Свичнулся в раст

Обычно все ставят цели на следующий год для себя. Я этим тоже страдал, но потом решил от себя отъебаться. А когда отъебался от себя, то стало всё в разы проще.

Как-то где-то вычитал пост, что можно вычекрнуть любую цель из списка задав вопрос будешь ли ты об этом вспоминать/жалеть перед тем как ты умрешь. В итоге, высокоуровнево цель есть и она одна. Связана с семьей, но еще очень сложно как-то сформировать в емкое предложение и пока она просто витает в мозгу в виде сумбурных хотелок.

А от этой цели уже и пойдут другие поменьше, но которые будут нужные.

С наступащим еще раз. Спасибо что читаете ❤️
Kafka & GraphQL

Вообще я эту неделю в целом обычно говорю о том, что люди в индустрии в целом разучились делать всё просто и понятно.

Давайте поднимем Kubernetes кластер вместо того, чтобы запустить на 5 долларовом дроплете. Давайте воткнем Кафку для доставки сообщений вместо использования Redis Pub sub/NATS и чего-то более простого. Давайте сделаем GraphQL вместо рест, потому что это удобно.

Однако, с GraphQL не всё так удобно как кажется на самом деле. Когда только GraphQL заанонсили, я уже во всю ковырял gRPC. gRPC предоставлял мне

1. Стримы, при этом Bidirectional. В целом можно на них для коммуникации даже оттягивать добавление Message Broker и подобных типа NATS
2. Design First с код геном
3. Более понятный подход для проектирования API.

А потом примерно в это же время люди в целом научились как-то правильно и сносно готовить REST.

Вот и получилось что GraphQL появился тогда, когда по индустрии мало говорили про дизайн REST и подобного, плюс был gRPC и в итоге оно как-то стало набирать популярность.

Однако, когда я посмотрел на первые примеры, то у меня были в целом почти те же самые вопросы, что в статье но

1. Гранулярный доступ сделать хз как на GraphQL
2. В целом не очень понятно как подвязать быстро аутентификацию/авторизацию (в целом сюда можно добавить и gRPC, потому что там нужно делать дополнительные пляски)

Однако, глянув на пару реализаций GraphQL были странные впечатления. Чтобы разобраться как оно работает нужно пройти через кучу мутаторов, забиральщиков данных и подобного.

В целом, у меня пока не было юзкейса где бы Kafka или GraphQL были более менее применимы.
GPT мозг.

Вот раньше были операторы фреймворков и теперь их сменили операторы GPT. Все эти модели — это замечательный инструмент в руках человека, который знает что делает.

Игрался тут недавно со scratch докер контейнерами. В целом для гошки это прям нобрейн тема, потому что просто можно закинуть бинарь + сертификаты и приложение будет работать. Если дистролесс от гугла дает +50% от веса контейнера по сравнению с apline, то scratch дает еще +20-30% по сравнению с дистролесс.

Если с гошкой в целом всё просто, то вот раст собрать — это был тот еще челлендж. Вот вроде указываешь RUSTFLAGS='-C target-feature=+crt-static’ что в целом должно сбилдить статически слинкованный бинарь, а на деле оно генерит динамически слинкованный ELF файл.

Просишь помочь GPT а оно в целом галлюцинирует и предлагает установить несуществующие пакеты и подобные вещи.

Однако, если пойти и почитать документацию, то в целом всё становится понятно как это можно сбилдить.

Суть в том, что такой сгенерированный код, который чаще всего работает криво или косо попадает таки в мастер и потом его чаще всего приходится переписывать.

ГПТ в целом хорош для девопсов или других людей, где нужна широта знаний и вообще не подходит для задач где нужна глубина в паре технологий.

Кажись что через пару лет таки нужны будут люди, которые будут приводить в порядок всё то, что нагенерит AI и причесывать это AI Legacy.
Если вы шарите за AI и прочие инструменты, то появитесь в комментариях пожалуйста 😄

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

В чем проблема. Когда-то давно я профилактически лечил щитовидку, там некритично подскочил один гормон. Курс лечения прошел, анализ сдал, но мне не с чем было сравнить результат, потому что старый бланк я продолбал, как и код от лаборатории.

Так и появилась идея. В целом реализовать ее можно просто, тупо парся данные с лабораторий. Однако, в идеале доставать эти данные с распечатанных бланков, либо PDF.

Поэтому, если есть какие-то варианты классифицировать эту информацию — было бы замечательно. Форматы либо фотки, либо ПДФ.

Поэтому если знаете как примерно решать эту задачу и что можно попробовать или поресерчить — дайте знать пожалуйста.

А так в целом работать с блокчейнами — это точно также перекладывать жсоны с одного места в другой.
Спасибо за рекомендации инструментов. Какой итог

Cursor не зашел и затупил на первом же промпте. В целом остался на ChatGPT и копилоту.

С помощью OpenAI, Rust, Regex и пары матов получилось распарсить PDF от Аквы и получить JSON с результатами. Пора масштабироваться (лол). А теперь пошагово.

1. Сначала попробовал просто в боте посмотреть какие результаты он выведет по “Распарсь PDF и верни результаты в JSON”. Результатом я оказался доволен и он сам предложил сгенерить приложение на расте, которое это сделает
2. Сгенерил он херню конечно же, которая не очень то и работает
3. ГПТ затупил на том, чтобы показать пример использования себя (ну тут и человеку будет не очень понятно)
4. Пошел на доку Open AI и в целом вроде как стали понятны варианты использования
5. Попросил ГПТ сгенерить прилу на расте чтобы опен аи распарсил пдф
6. Попробовал, понял что недостаточно квоты на использование, регнулся, пополнил баланс и дело сдвинулось с мертвой точки
7. Поправил галлюцинации ГПТ по использованию API Open AI, но использовался не тот эндпоинт
8. Взял примеры с сайта Open AI, которые тоже не очень и заработали
9. Посмотрел как оно работает в девелоперском чате и зареверся эндпоинты поправил все модели и получил результат
10. Результат вышел в тексте, из которого надо было вытащить жсон
11. Напилил простую регулярку чтобы забрать весь текст между триапострофаjsonтриапострофа
12. Спарсил жсон и вывел результаты

В целом основную проблему я решил и можно пробовать прототипировать какую-то норм прилу или бота.

Кстати, а продуктом стали бы пользоваться, где можно удобно следить за результатами анализов? =)
Пытался я тут на вайбкодить фронтенд для приложения и в целом поделиться впечатлениями от вайб кодинга.

В целом, в курсоре я пока не вижу никакого профита по сравнению с VSCode+Copilot. Работу никак сильно не ускоряет и больше тупит на самом деле на самых простых вопросах.

Пробовал давать разные промпты и результаты такие, что после какого-то шага он просто тупо зависает. Пробовал: Create react app и он умудрился даже на этом затупить.

Посоветовали еще lovable.dev, и тут результаты куда более интересные. Я закинул ему простой Create a react application for a website that used to analyze medical tests и он долго думал, а потом в итоге сгенерил https://med-check-webapp.lovable.app/. Скорее всего тут есть куча интеграций, потому что деплой был явно сделан на vercel или подобное, но сгенеренный результат порадовал.

По коду в целом для простого аля лендинга вопросов нет. К верстке тоже. Правда есть пару багов в адаптивке, но что вы хотите от AI fullstack разработчика.

По основной задаче с парсингом после игр с пдфками разными и картинками стало понятно, что gpt-4o-mini, которая самая дешевая хватает за глаза.

Правда есть несколько вопросов к документации по API, потому что она частенько мислидит. Если вдруг захотите заэмбедить pdf файл как base64 на /responses эндпоинт, то ничего не получится.

В целом код хоть и идентичный, но для пдфок алгосик такой:

1. Загрузить файл
2. Залинковать файл вместе с промптом
3. Распарсить

Для картинок же

1. Открыть и заэнкодить файл в base64
2. Закинуть в промпт
3. Распарсить

На этом всё, самая интересная часть практически закончилась. Дальше осталось только взять и сбилдить это всё дело.

Из открытых вопросов пока что — это как сделать удобную и безопасную аутентификацию для мобилок и веба, желательно не разделяя эти два механизма
Как работают смарт контракты в EVM.

Автор: https://x.com/0xgojoarc/status/1900064285717651665

Достаточно подробная диаграмма, которая объясняет все достаточно подробно
Был занятный (на самом деле не очень) баг вчера.

Есть приложение на расте, оно многопоточное и использует tokio. В целом у него логика простая:

1. Подписаться по вебсокетам и обрабатывать входящие сообщения
2. Если критерии выполнения совпадают, то запустить действие в отдельном потоке

В целом всё достаточно просто в реализации. Мы просто берем и запускаем основной цикл в tokio::spawn, а потом новую задачу через tokio:spawn и создаем. Выглядит в целом норм.

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

1. Посмотрел и за одно оптимизировал все хттп вызовы и за одно убрал ненужные инициализации хттп клиента
2. Поковырял фича флаги и стал использовать rustls вместо обычного openssl варианта
3. Поймал пару багов с включенем только http2 в хттп клиенте (зачем мне обычный протокол, если есть поддержка х2)
4. Разбирался почему не работает днс и закопался в кишки, что в целом было хорошо и у reqwest есть несколько вариантов прокинуть тот или иной резолвер. Но дело оказалось в том, что я опечатался в хосте
5. Добавил небольших метрик по тому сколько и где занимает времени на работу

Но это всё не особо помогало решить проблему. А проблема была достаточно простой. У меня основной цикл подписки по вебсокетам был в асинхронном контексте, но реализация сама была синхронной, что в целом и блокировало треды выполнения.

После переписывания клиента и внедрения nonblocking клиента всё заработало отлично.

В поиске и понимании бага помогли как раз таки логи и метрики, которые я расставил. У меня была еще одна задача, которая была запущена фоном, которая как раз таки останавливалась после старта подписки на вебсокеты.
Вот за что я люблю Go, так это за то, что он чаще всего работает предсказуемо.

Если ты написал приложение, которое расходует нужное количество памяти, то можно быть уверенным что так будет в целом всегда и на любой операционной системе (если нет никаких завязок на что-то другое).

Плюс, компиляция в один статический бинарь в Go всё-таки удобнее сделана, потому что можно просто GOOS=linux GOARCH=amd64 go build и оно собереться и можно дальше или в distroless или в scratch контейнер прокидывать и всё будет замечательно.


Я в целом фанат статической линковки, ведь в контейнере тогда только бинарь и всё. В Расте же пришлось чтобы добиться этого то думать как это вообще можно собрать в статический бинарь.


В целом, всё решалось просто тем, что мы берем gcc-musl компилятор, который в отвязке от glibc может всё собрать вместе с флагами '-C target-feature=+crt-static’.

Однако OpenSSL библиотека скажет “давно пальцы веером, заюш” и откажется компилиться. Хоть в Расте и есть замена rustls но не все либы ее поддерживают и не везде есть нужные фича флаги, так что выкорчевать ее не получилось. Но можно ее втащить в Cargo с vendored фича флагом.

Вроде всё собралось и работало даже отлично какое-то время, но я думал, что musl может стрельнуть откуда-нибудь. Почитал какие есть минусы и все говорят, что в целом оно хоть и шустрое, но аллокация памяти у него хреновая. Ну я забил.

Однако, простое приложение, которое должно отжирать до 512 мегабайт оперативы решило жрать до 32 гигов и пришлось втаскивать jemalloc или mimalloc или еще что-нибудь другое более предсказуемое.

В итоге то, что должно было собраться без проблем решило еще повыпендриваться и не собираться, добавляя -m64 флаги для CC

В итоге после долгих попыток собрать всё это дело пришел к таким энвам, чтобы всё завелось


ENV CC=musl-gcc

ENV OPENSSL_NO_VENDOR=0 \
OPENSSL_STATIC=1 \
OPENSSL_DIR=/usr/local \
OPENSSL_LIB_DIR=/usr/local/lib \
OPENSSL_INCLUDE_DIR=/usr/local/include \
CARGO_NET_GIT_FETCH_WITH_CLI=true


ENV CFLAGS="-O2 -fPIC"
ENV SQLX_OFFLINE=true


ENV OPENSSL_BUILD_CPU=generic
ENV RUSTFLAGS='-C target-feature=+crt-static -C link-args='


А после переезда на jemalloc память стала использоваться нормально.
Пока я потихоньку пилил бекенд для распознавания результатов анализов, ребята с Казахстана запилили приложение, которое я и так хотел запилить. Называется Qomek.

Я хз почему такой нейминг, может потому что никто не кумекает за анализы или над анализами надо кумекать, но всё равно у них есть сайт, прила и куча всякого.

Свою поделку на расте я думаю просто заопенсорсю через пару дней, как раскидаюсь с рабочими моментами и напилю хоть какое-то ридми для этого.

Ну и помимо ридми надо посмотреть и причесать код, сделать конфигурацию для всяких дополнительных параметров и тому подобное.

Кстати, у кумека есть интеграшка с Бонецкого, как минимум, потому что они на своих бланках пишут про эту прилу. В целом я так вот и узнал о ней 😄

А дальше в целом можно будет попилить фича реквесты и подобное и в целом доработать парсинг до вразумительного результата и сохранением в базу.

А дальше пускай проект идет в свободное плаванье =)
В целом мне было лень причесывать и допиливать прям конфигурябельное что-то. Поэтому проект опенсоршу as is под MIT лицензией. В целом там мало что нового.


Проект написан на Rust, но писан просто (хотя немного асинка есть, но он простой и тупой). Почему на Rust? Потому что я знаю Rust и он сейчас удобный, да и в целом мне нужен был инструмент, который помог бы быстро прототипировать, а если поделие на расте скомпилилось, то 99% оно работает.


https://github.com/gen1us2k/medtest проект живет тут, ридмиха на английском (потому что мне лень было переключить раскладку на русский)

В целом если что, то можно открыть src/main.rs для того, чтобы вставить свои файлы для анализа. Требуется ключик от open AI, но я потратил в целом на тесты меньше $1. Выбрал самую простую и дешевую модель.

Если вдруг хочется поиграть с промтами, то они в константах в src/ai/client.rs для картинок и пдфок.

В планах было сделать автодетект для типа файла по содержимому файла, а не по расширению, ну и почистить данные нормально.

В проекте даж есть тестики для парсинга референсных значений, но в целом парсинг на этом ток начинается.

Пулреквесты, ишью велкам. Мож что-то и докидаю для пользования.

PS. Были идеи еще подключить чот типа airflow и подобного для того, чтобы с базы читать результаты, но в целом можно это делать как вам удобно.
2025/05/31 04:57:23
Back to Top
HTML Embed Code: