Самые популярные блоги рунета Топ 10

«Топ-10» самых популярных блогеров рунета

2025/12/24 - Qdrant и lleo.me

24 декабря 2025, автор: https://lleo.me/dnevnik/, источник

Сайт lleo.me стал настолько летописью моей жизни и работы, что сам я постоянно ищу на нем разную забытую информацию. В каком году я впервые ездил в Минск? Нужно ли обжаривать лук с морковкой для моего рецепта рассольника? Где фотка Васи Обломова в Чертаново? Помню, когда-то мне советовали в комментах библиотеки синтеза речи, какие? И каждый раз я лезу искать.А история системы поиска на lleo.me классическая. Сперва это был тупой поиск подстроки по всей базе заметок и комментариев. С годами база разрослась, ожидание результатов могло занимать целую минуту, иногда вешая сайт. И если ты ставил ключевое слово не в том падеже, поиск ничего не находил. Год назад я привинтил для экспериментов рядом с MySQL базу Postgres и включил там опции полнотекстового поиска. Стало быстро, но хреново. Поэтому лично для себя в админке я оставил опцию прежнего поиска подстроки. И на время прервал эксперименты. Но эпоха нейросетей подарила нам технологии смыслового поиска — когда нейросеть понимает смысл заметки и индексирует какими-то своими цифрами в форме вектора в своем 1000-мерном пространстве. А потом такой же смысловой вектор делается для каждого поискового запроса и база ищет близкие результаты. Проще говоря, на запрос «рассказ, где учитель вырастил слоненка» система должна выдать первым результатом поэму «Про тигренка», хотя совпадений слов нет вообще. Самый модный сегодня для этой цели инструмент — база Qdrant, и я собираюсь ею воспользоваться сперва по рабочим задачам, а затем для своего сайта и конечно для Биноника. Вспомнить стих Иртеньева, Быкова или Седова, не помня точных фраз, — та ещё задача.Поэтому хочу посоветоваться с вами — кто в теме и имеет опыт.1) Какие модели советуете именно для русского языка?2) Какие есть нюансы подготовки букв? Надо ли заменять кавычки на единообразные, удалять знаки препинания или спецсимволы, приводить к нижнему регистру?3) Какие нюансы представления разных элементов заметки? Нужно ли как-то отдельно размечать заголовок, тело, тэги, дату? Как это лучше делать? В виде промпта «заголовок: ..., эпиграф: ... текст: ...»? А виде JSON? Никак не размечать, валить в кучу? Или там есть специальные опции в API?4) Что делать с лонгридами, которые не лезут в окно? Следует ли повесть разбивать на куски, и какой длины? Хранить эти куски отдельными векторами, адресуя каждый к своей части текста, типа смысл главы/абзаца? Следует ли отдельно делать для каждой главы смысловую выжимку с целью в конце создать один общий смысловой вектор всей повести?5) Какие ещё есть нюансы и рекомендации?Речь именно про тексты на русском языке и опыт создания автономной системы поиска. Понятно, что Гугль и прочие внешние индексаторы открытого контента удобны пользователю, но не решают моих личных и учебно-рабочих задач и не помогают изучить новые технологии.

2025/12/22 - Немножко про работу и бассейны

22 декабря 2025, автор: https://lleo.me/dnevnik/, источник

Здесь будет скучное для программистов. Но у меня тут много классных программистов, может, кому будет интересно.Итак. Хоть у меня сейчас фактически нет работы и финансовая жопа, но тем не менее, есть по крайней мере один интересный проект для друзей-химиков из Испании, над которым с удовольствием работаю. О самом проекте я как-нибудь потом расскажу вам подробнее: это автоматизированная система подготовки воды для частных бассейнов, электроника которой и датчики позволяют поддерживать оптимальные и своевременные режимы очистки с использованием минимума химикатов из нетоксичных. Соответственно, проекту нужна электроника, и до меня их моделька была на моей любимой ESP. Понятно, что бассейны разбросаны по глобусу хрен знает, где. Нужна хорошая связь с ними и управление в реальном времени, особенно на первых порах, пока отлаживается технология и нужно много наблюдать, делать эксперименты, включать разные агрегаты и снова смотреть данные. Это нужно и авторам проекта, и самим владельцам, и вообще. Короче, нужна какая-то надежная, быстрая и мгновенно реагирующая система связи с устройствами.Во фреймворке ESP, который я пилю уже десять лет, у меня и раньше чипы были доступны извне. Ну, как доступны... каждые 15 секунд они пингали сервер-матку и могли выполнять какие-то присланные в ответ команды и возвращать какие-то данные. Но, скажем, смотреть графики датчиков в реальном времени было нельзя — только находясь рядом с чипом и открыв его веб-страницу. Почему-то тот факт, что у ESP есть возможность изображать крошечный вебсервер и показывать у себя внутри какие-то куцые странички — это завораживало и казалось важным. А проблему надежной удаленной связи я когда-то собирался решать при помощи UDP-пакетов и даже писал какие-то бэкенды, но слава богу, что не погрузился в эту бесовщину низкого уровня.Поскольку моя прошлая работа в huly.io была связана с вебсокет-серверами на Rust, а позапрошлая в Алзимологисте — с криптографией 25519... я решил сделать уже всё по-взрослому. Для начала вообще пересмотреть концепцию фреймворка ESP. На хера там внутренний вебсервер? Чтобы что? Пароль от вайфай однажды вбить, запуская первый раз? Веб нужен там, где принято смотреть веб — в интернете. А данные от ESP пусть бегают по вебсокетам. На первых порах я не стал выключать в прошивке вебсервер совсем, оставил про запас, но сама его концепция, считаю, себя изжила.В итоге получилась многопользовательская система, которая через центральный сайт позволяет полностью управлять своими устройствами — смотреть графики, обновлять прошивки, программировать скрипты, редактируя файлы прямо на флешке внутри чипа, тыкать GPIO, вообще всё, что угодно. Даже местные wifi-сетки можно посканировать.Фреймворк CFAQЯ принялся за дело и доработал свой фреймворк CFAQ для ESP32 (с ESP8266 он тоже должен продолжать работать, но не тестировал пока). Первое, что оказалось: в ESP32 очень и очень плохо с вебсокетами. Либо какие-то совсем громоздкие библиотеки, либо не работают. Более того: судя по всему, на ESP32 вообще нет годного вебсокет-клиента, который способен бегать по wss на сервера за CloudFlare — там какие-то нововведения протоколов, которые сбивают с толку старые библиотеки ESP. Поэтому вебсокет-клиент пришлось писать заново почти с нуля на основе простенькой Socketyee. С wss возиться вообще не стал, решив, что на ESP вся эта беготня с сертификатами «всегда боль», как выражается наш ЧатГПТ. Вместо этого я беру обычный нешифрованный канал ws — прослушивайте. Зато сам трафик шифрую и подписываю современной криптографией 25519 на эллиптических кривых, которая, мягко скажем, посильнее всех этих протоколов https/wss. Результат вышел чудесный — теперь чипы постоянно в сети, и в любой момент авторизованный хозяин с центрального сервера может зайти и выполнить любые действия. В том числе — накидать скрипт прямо на чипе, какие датчики опрашивать, и рисовать любые графики онлайн. Забавная задница приключилась, когда у меня кончилась память: скетч стал занимать 99.6% и не запускаться. Допрограммировался, называется. И понятно, почему такое: всего 4Мб памяти, а я еще хочу обновление прошивки OTA и внутреннюю флешку, да еще натащил во фреймворк вообще всё, что было можно (там же у меня текстовый язык команд, он должен уметь всё), да еще для электроники бассейна подцепил мощный дисплей с развесистой графической библиотекой. Проблему решил временно, откатив саму систему esp32 на чуть более раннюю версию, она не такая громоздкая. Но конечно надо прекратить покупать ESP32 c 4Мб, а брать 8 или 16.Язык: C++ GitHub: https://github.com/lleokaganov/cfaqЦентральный серверСоответственно системе нужен центральный сервер. В нем нужны минимальные протоколы, прием телеметрии от устройств в базу данных, API, разделение доступов и какая-то авторизация по емайлу. Пришлось наконец освоить сервис отправки емайла через smtp2go, а то некоторые криптодрузья мне говорили, будто нет способа отсылать письма от имени своего сайта — мол, либо платить миллион денег Гуглю и богомерзкому Яндексу, либо стыд и грех со сраной поделкой ProtonMail. А оказалось, какой-нибудь smtp2go решает проблему быстро и бесплатно, рекомендую. Сам ws-протокол для данных придумывался довольно мучительно, хотя в итоге оказался прост: ws ходит бинарными посылками, где первые 4 байта — номер адресата, а дальше — шифрованный и подписанный payload. Получая такую посылку (если она не для номера 0 — сервер), сервер тупо пересылает ее адресату, подменяя первые 4 байта номером отправителя. А дальше пусть разбираются получатели, все равно у сервера нету их приватных ключей и заглянуть внутрь трафика он не может. В итоге получилась система, через которую могут обмениваться шифрованным трафиком любые пользователи за двумя NAT — люди, устройства, роботы. Ну и к этому пришлось накидать по-быстрому какое-то подобие фреймворка, без особого дизайна.Язык: Rust (ну JS для фреймфорка) GitHub: https://github.com/lleokaganov/aguardia_serverКриптобиблиотекиПоскольку самая капризная у нас ESP, долбить крипточасть начал на ней — использовал криптобиблиотеку monocypher. Ок. На сервере после небольших танцев с бубнами поднялась совместимая библиотека Dalek. А вот с фронтендом что-то сразу не вышло. В принципе в своих былых проектах я использовал noble типа как на демке. Но это уже отдельная какая-то вещь в себе и показалась не слишком совместимой с нынешними задачами, поэтому чтобы не париться, я собрал тот же Dalek в виде WASM для браузера. Получилось компактно, удобно, а главное — полностью совместимо с сервером и ESP.Язык: Rust — WASM GitHub: https://github.com/lleokaganov/wasm-25519Мост wsuartНу и поигравшись вдоволь с получившейся системой, я задумался: как ее еще можно применить? И последние пару дней занялся побочной демкой — сделал утилитку, которая через вебсокеты и два NAT пробрасывает порт одной машины на другую. Запущенный клиент берет скажем /dev/ttyUSB0, а такой же софт на другой машине, запущенный в режиме slave, создает какой-нибудь /dev/pts/3, который можно точно так же читать-писать. Ну или можно с веб-страницы сервера к своему устройству подключиться и там читать-писать консоль. Вообще мне консоль сама по себе была не нужна. Я планировал из чистого интереса делать всякие звуковые webrtc-девайсики на микролинуксах (например, дистанционно звонить по симкарте), но им-то нужен какой-то канал сигналинга для установки соединения, а чего его искать, если у меня уже всё написано? Так что для начала появилась вот эта утилитка для проброса портов. Ну а в будущем я еще конечно на той же системе шифрованный мессенжер сделаю наподобие того, что делал на позапрошлой работе на DOT-блокчейне, который мессенджеру на фиг не нужен.Язык: Rust GitHub: https://github.com/lleokaganov/wsuartВ общем, вот такими был занят нынче скучными технологиями, копаться в которых было так интересно, что даже в дневник месяц не писал почти.

2025/12/20 - Признание

20 декабря 2025, автор: https://lleo.me/dnevnik/, источник

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