Обновить
512K+

Python *

Высокоуровневый язык программирования

540,24
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Рефлексивный бот с долгой памятью: почему универсальный LLM-чат тут не работает, и как я переписал онбординг по данным

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели3.1K

Я какое-то время использовал ChatGPT и Claude как собеседника для рефлексии — выгрузить, что в голове, посмотреть на себя со стороны. С самим разговором у них всё отлично. Проблема в другом: они со временем теряют память в целом управлять этим не сильно удобно из-за раздутого контекста.

Для разовой задачи это норм. Но рефлексия — это процесс во времени: ценность не в одном разговоре, а в том, что собеседник помнит, к чему ты возвращаешься из недели в неделю, и замечает паттерны, которые тебе самому не видны. Универсальный чат каждый раз начинает с чистого листа. Контекст можно вставлять руками, но это ручная работа, которую никто не делает.

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

Читать далее

Новости

Десктопный аналитик криптовалют: как устроена мультифакторная система сигналов на TA-Lib

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели3.8K

Когда я начал торговать криптой, меня раздражало одно: большинство аналитических инструментов выдают «BUY» или «SELL» без объяснений. Три индикатора сказали покупать - вот тебе сигнал. Никаких весов, никакого контекста, никакой логики за цифрой.

Я решил сделать иначе. Программа, о которой пойдёт речь — это десктопное приложение для Windows, которое запускается двойным кликом, подключается к открытому API Binance и выдаёт взвешенный Score по шести категориям индикаторов, бэктест на последних 100 барах, уровни поддержки/сопротивления по фракталам и ATR-метрики риска. В статье расскажу, как всё это устроено изнутри — с формулами и кодом.

Читать далее

Три задачи discovery при работе с PostgreSQL master/replica — и как их решить

Уровень сложностиПростой
Время на прочтение17 мин
Охват и читатели3.9K

Когда у приложения появляется несколько хостов PostgreSQL, начинается головная боль: нужно динамически находить мастера после failover, выбирать реплику с нужным отставанием и гарантировать что пользователь не увидит устаревшие данные после своей же записи. DNS кешируется минутами, libpq не знает про lag, HAProxy не слышал про LSN. Разбираем как устроены существующие решения и как закрыть все три задачи через лёгкий HTTP сервис — pg-status.

Читать далее

Размер позиции под микроскопом: Монте-Карло, где честно меняется ровно одна переменная

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели5.9K

Дисклеймер о конфликте интересов.

Я делаю бесплатные калькуляторы риск-менеджмента для крипто-трейдинга. Чтобы это не выглядело как реклама в каждом абзаце, ссылка на проект в статье ровно одна — в самом конце. Всё остальное здесь — код, математика и числа, которые вы можете воспроизвести у себя за минуту.

И сразу к делу — с вопроса, на который у большинства есть «очевидный», но неверный ответ.

Читать далее

Как я написал свой клиент Miracast для шаринга экрана под Linux в 2026 году и погряз в войне за проприетарные байты

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели16K

Как превратить крик души в работающую утилиту и попасть в официальную ArchWiki? Мне 17 лет, и мне просто надоело тянуть HDMI-кабель от ноутбука к телевизору через всю комнату. В этой статье я расскажу, как написал свой стример экрана FluxCast на Python, с какими багами Smart TV пришлось столкнуться и как устроен «слепой» дебаг проприетарного железа по логам пользователей со всего мира.

Читать далее

Открытый CLI-инструмент для bug bounty на чистом Python — архитектура и разбор плагинов

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели9.9K

WebScan — асинхронный CLI-сканер безопасности на чистом Python. За неделю вырос до 15 плагинов: XSS, SQL инъекции, CORS, Path Traversal, SSRF, утечки API ключей и многое другое. Safe Mode, proxy, SOCKS5, пять форматов отчётов включая SARIF.

В статье разбираю архитектуру и сравниваю с Nikto.

Читать далее

Как я подключил Obsidian к LLM через MCP и перестал копировать заметки вручную

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели15K

Привет, Хабр!

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

И так несколько раз в день.

В какой-то момент стало понятно, что проблема не в Obsidian и не в LLM. Проблема в том, что между ними нет нормального моста.

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

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

Вместо того чтобы продолжать играть в человека-адаптера, я написал MCP-сервер для Obsidian. Он подключает Obsidian vault к любому LLM-клиенту с поддержкой MCP и дает модели нормальные инструменты: читать заметки, искать по ним, смотреть структуру, создавать и обновлять файлы.

Репозиторий: https://github.com/tenqz/obsidian-agent

Читать далее

Сжать четыре токена в один вектор: запускаем автоэнкодер CALM на доменных данных (и на одном CPU)

Уровень сложностиСложный
Время на прочтение9 мин
Охват и читатели8K

Взяли автоэнкодер из свежей работы CALM (Continuous Autoregressive Language Models), который учится упаковывать чанк из K=4 токенов в один непрерывный вектор и разворачивать обратно, и обучили его не на 15 миллиардах токенов Pile на 8 GPU, как в оригинале, а на 18 тысячах коротких строк с требованиями из IT-вакансий - на обычной машине без видеокарты. По дороге выгребли три классических грабли (flash-attn без CUDA, deepspeed, который не импортируется под NumPy 2.x, и тихий OOM на 33 ГБ логитов). Ниже - подробный разбор архитектуры, конфигов и честные результаты round-trip-реконструкции.

Читать далее

Как я построил guardrails, которые не дали моему AI-агенту пойти вразнос

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели8.4K

На третий день в проде мой support-агент на LangGraph и GPT-4o слил email одного клиента в переписку с другим. Причина банальна: модель вставила сырой контекст из базы прямо в ответ, и ничто в пайплайне это не проверяло. Фреймворки для агентов дают оркестрацию, вызов инструментов и память — но не безопасность. В этой статье разбираю стек из четырёх guardrails (валидация входа, валидация выхода, circuit breaker по расходам и проверка вызова инструментов), который умещается в ~200 строк Python и добавляет менее 40 мс latency. С рабочим кодом, схемой пайплайна и честным разбором того, что эти guardrails ловят, а что — нет.

Читать далее

Я научил небольшой Transformer генерировать цифры одной нитью

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели10K

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

Я провел простой эксперимент и превратил цифры MNIST в последовательности переходов между 256 гвоздями и обучил небольшой Transformer продолжать путь нити. В результате модель выдаёт не PNG, а JSON-траекторию, которую можно отрисовать в любом разрешении - или потенциально передать физической string-art установке.

Код выложил на GitHub

Читать далее

Почему миллион корутин на Rust весит меньше, чем сто тысяч на Python

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели11K

Миллион асинхронных задач на Rust спокойно живёт в нескольких сотнях мегабайт. Сто тысяч корутин на Python нередко упираются в память раньше. Дело не в том, что “Rust быстрый, а Python медленный” - дело в том, ГДЕ физически лежит состояние приостановленной задачи.

Разбираю, во что превращается ваш async fn после компиляции: стейт-машина на стеке против объекта в куче. Сравниваю модели Rust (Tokio), Python (asyncio), C# и JavaScript - кто аллоцирует на каждый await, а кто нет, и почему это видно на счётчике RAM при 100k задач.

Внутри: что генерирует компилятор, куда уезжает состояние между await, stackful против stackless, и что с этим делать сегодня.

Читать далее

Telegram Bot API 10.1: Революция форматирования

Время на прочтение6 мин
Охват и читатели8.3K

Всем привет!

Telegram меня наконец-то услышал! Ну ладно, не только меня, а может, и не слышал вовсе, но недавний апдейт клиента и вчерашнее обновление Telegram Bot API 10.1 попали прямо в меня.

Дуров и команда ввели Rich Messages — полноценную альтернативу обычным сообщениям, в которых можно конструировать сложную структуру контента с помощью Rich Markdown или HTML-разметки. Кроме того, теперь появилась возможность явно использовать бота в роли полноценного модератора (гварда) на стыке с Mini Apps. Но обо всём по порядку.

Если вам интересны подобные материалы и разработка в целом, подписывайтесь на Telegram-канал «Код на салфетке».

Читать далее

Не давайте ИИ-агенту прямой доступ к базе. Как я проектировал безопасный контур действий на FastAPI и PostgreSQL

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели7.4K

Последнее время я всё чаще встречаю одну и ту же мысль: бизнес никогда не даст ИИ‑агенту доступ к базе клиентов, заявкам, платежам, CRM или внутренним документам. На первый взгляд звучит логично. Если агент ошибётся, перепутает контекст или выполнит не то действие, ущерб может быть вполне реальным. Но мне кажется, что здесь часто путают две разные вещи.

Давать агенту прямой доступ к базе действительно нельзя. А вот давать ему возможность работать через ограниченный, проверяемый и журналируемый контур действий вполне можно. Примерно так же мы не даём пользователю прямой доступ к PostgreSQL, но разрешаем ему нажимать кнопки в интерфейсе, которые вызывают заранее описанную бизнес‑логику.

В этой статье я хочу как раз таки разобрать, как может выглядеть такой контур на практике: без магии, без «агент всё сам решит», без сырого SQL от модели и без веры в то, что хороший prompt заменяет нормальную архитектуру.

Читать далее

Ближайшие события

Радиоактивный распад урана-238

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели7.4K

В этой статье мы рассмотрим цепочку радиоактивного распада урана-238 и определим, сколько образуется конечного продукта - стабильного свинца через время t.

Читать далее

Shrinking: как property-тест сводит мусорный контрпример к минимуму

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели5.8K

Property‑тесты умеют находить ошибки на самых неожиданных входных данных. Но настоящая магия начинается после падения теста: вместо списка из сотен случайных значений Hypothesis часто показывает один короткий и предельно понятный контрпример.

Разбираемся, как работает shrinking, почему ручные shrinker'ы плохо масштабируются и за счёт чего Hypothesis умеет минимизировать ошибки практически автоматически.

Читать далее

Асинхронный django: новые начинания

Время на прочтение4 мин
Охват и читатели5.8K

Здравствуйте, дорогие читатели! Сегодня - ещё одна статья из рубрики джангологии.

Раньше я уже писал о своих идеях (1 и 2) о том, как сделать django асинхронным. Они основывались, вслед за sqlalchemy, на использовании гринлетов. Несмотря на то, что proof-of-concept был успешно получен, а трудностей - встречено меньше, чем ожидалось, я всё-таки отказался от этого подхода: во-первых, он уже применяется в sqlalchemy. Во-вторых, это ведёт к усложнению, и растёт так называемая test matrix - потому что поддерживается как синхронный случай, так и асинхронный. А simple, как мы знаем, is better than complex.

Так вот, я решил возобновить эти свои попытки, изменив подход на более радикальный. А именно, необратимо переписать django на async-only, сломав совместимость полностью. Для этого потребуется заменить в половине функций def на async def и добавив await при их вызове. Я уверен, что такой подход лучше.

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

Читать далее

Эмерджентная Вселенная как спектральный граф малого мира

Время на прочтение29 мин
Охват и читатели8.3K

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

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

Читать далее

Натягиваем сову на глобус или оценка применимости разработанной методики определения грейда на другие языки

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели8.5K

Привет, Хабр! В прошлых статьях я описала, как через нововведенный параметр TSI теоретически можно определить грейд разработчика.

Читать далее

Алгоритмы векторного поиска: IVF и HNSW

Уровень сложностиСложный
Время на прочтение17 мин
Охват и читатели9.3K

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

Заодно мы затронем тему метрик, чтобы понять, как вообще сравнивают эмбеддинги. Рассмотрим вспомогательный и очень простой алгоритм k-means из классического ML’а, лежащий в основе IVF.

И наконец, подробно разберем два самых главных алгоритма IVF и HNSW с примерами их реализации на Python’е.

Читать далее

Симуляция дуэлей юнитов HoMM III: кто сильнее в честном 1vs1?

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели13K

В Heroes of Might and Magic III у каждого игрока есть своё мнение о том, какие юниты сильнее. Обычно такие сравнения строятся на характеристиках, способностях, личном опыте или ручных дуэлях на специальных картах.

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

Читать далее
1
23 ...