SQL-совет: `LATERAL` вместо тяжёлого оконного запроса
Нужно получить последнюю операцию каждого пользователя? В PostgreSQL можно не ранжировать всю таблицу через
Добавьте индекс:
Тогда PostgreSQL сможет брать последнюю запись прямо из индекса, не сортируя все заказы пользователя.
Такой приём особенно полезен для задач:
- последняя операция пользователя;
- актуальный статус заказа;
- последнее событие устройства;
- последние
Для больших таблиц это часто быстрее и проще, чем оконная функция по всему набору данных.
Нужно получить последнюю операцию каждого пользователя? В PostgreSQL можно не ранжировать всю таблицу через
ROW_NUMBER().
SELECT
u.id,
last_order.id,
last_order.created_at
FROM users AS u
LEFT JOIN LATERAL (
SELECT id, created_at
FROM orders
WHERE user_id = u.id
ORDER BY created_at DESC
LIMIT 1
) AS last_order ON true;
LATERAL запускает подзапрос отдельно для каждой строки слева и разрешает обращаться к u.id.Добавьте индекс:
CREATE INDEX ON orders (user_id, created_at DESC);
Тогда PostgreSQL сможет брать последнюю запись прямо из индекса, не сортируя все заказы пользователя.
Такой приём особенно полезен для задач:
- последняя операция пользователя;
- актуальный статус заказа;
- последнее событие устройства;
- последние
N записей для каждой группы.Для больших таблиц это часто быстрее и проще, чем оконная функция по всему набору данных.
👍21❤4🥰2
🚀 Neo4j без сервера: GraphForge запускает полноценный Cypher прямо внутри Python-скрипта
GraphForge занимает редкую нишу между NetworkX и серверными графовыми БД. Вы получаете встроенный графовый движок на Rust, полный openCypher и хранение проекта в обычной директории.
Что внутри:
- четыре независимых слоя на Rust: parser → IR → planning → execution;
- результаты сразу возвращаются как Apache Arrow Table;
- данные легко передаются в Pandas и Polars;
- постоянное хранение построено на Parquet;
- встроены PageRank, Louvain и гибридный текстово-векторный поиск;
- Python- и Node.js-биндинги работают поверх одного движка.
При этом GraphForge честно позиционируется как инструмент исследовательского и notebook-масштаба. Для миллиардных графов, высокой нагрузки и многопользовательского доступа по-прежнему нужна серверная БД.
Python и Node.js доступны сейчас, Swift и Kotlin находятся в планах. Лицензия — Apache 2.0.
https://github.com/CurateLabs/graphforge
#RustLang #Python #OpenSource #GraphDatabase #DataScience #KnowledgeGraph
GraphForge занимает редкую нишу между NetworkX и серверными графовыми БД. Вы получаете встроенный графовый движок на Rust, полный openCypher и хранение проекта в обычной директории.
Что внутри:
- четыре независимых слоя на Rust: parser → IR → planning → execution;
- результаты сразу возвращаются как Apache Arrow Table;
- данные легко передаются в Pandas и Polars;
- постоянное хранение построено на Parquet;
- встроены PageRank, Louvain и гибридный текстово-векторный поиск;
- Python- и Node.js-биндинги работают поверх одного движка.
from graphforge import GraphForge
graph = GraphForge("research/")
result = graph.execute("""
MATCH (a)-[:CITES]->(b)
RETURN a.title, b.title
""")
print(result.to_pandas())
При этом GraphForge честно позиционируется как инструмент исследовательского и notebook-масштаба. Для миллиардных графов, высокой нагрузки и многопользовательского доступа по-прежнему нужна серверная БД.
Python и Node.js доступны сейчас, Swift и Kotlin находятся в планах. Лицензия — Apache 2.0.
https://github.com/CurateLabs/graphforge
#RustLang #Python #OpenSource #GraphDatabase #DataScience #KnowledgeGraph
👍3🔥2
💡 SQL-трюк: сравнивайте `NULL` без костылей
В PostgreSQL обычное сравнение может неожиданно сломать условие:
Результат:
Потому что
Из-за этого часто пишут громоздкие условия:
Но есть оператор, о котором многие забывают:
Он работает как NULL-safe equality:
Есть и обратный вариант:
Например, удобно искать реально изменившиеся значения:
Если оба
Без этого обычное:
может просто вернуть
Особенно полезно при синхронизации данных, аудите изменений, ETL и UPSERT-логике.
#SQL #PostgreSQL #Database
В PostgreSQL обычное сравнение может неожиданно сломать условие:
SELECT NULL = NULL;
Результат:
NULL
Потому что
NULL означает «неизвестное значение», а не конкретное значение.Из-за этого часто пишут громоздкие условия:
WHERE a = b
OR (a IS NULL AND b IS NULL)
Но есть оператор, о котором многие забывают:
a IS NOT DISTINCT FROM b
Он работает как NULL-safe equality:
SELECT NULL IS NOT DISTINCT FROM NULL; -- true
SELECT 10 IS NOT DISTINCT FROM 10; -- true
SELECT 10 IS NOT DISTINCT FROM NULL; -- false
Есть и обратный вариант:
a IS DISTINCT FROM b
Например, удобно искать реально изменившиеся значения:
SELECT *
FROM old_data o
JOIN new_data n USING (id)
WHERE o.email IS DISTINCT FROM n.email;
Если оба
email = NULL, строка не считается изменённой.Без этого обычное:
o.email <> n.email
может просто вернуть
NULL и пропустить изменение.Особенно полезно при синхронизации данных, аудите изменений, ETL и UPSERT-логике.
#SQL #PostgreSQL #Database
🔥9👍8❤7
🚀 ИИ-агент ускорил SQLite до 59% меньше чем за 8 часов
Ускорить SQLite хотя бы на 5% уже было бы серьёзным результатом. Это один из самых зрелых и оптимизированных проектов в мире - его команда почти 20 лет выжимает из кода каждую долю производительности.
Но AI-агент KISS Sorcar менее чем за 8 часов и с затратами меньше $150 добился заметного ускорения сразу в нескольких типах нагрузки.
Результаты:
- 2,06× быстрее в официальном
- 1,90× в TATP — транзакционная OLTP-нагрузка
- 1,30× в Star Schema Benchmark — аналитические запросы
- 1,25× в
Агент нашёл места, где стандартная конфигурация SQLite несла лишние расходы — особенно при записи транзакций на диск.
После этого он:
- изменил код и настройки
- прогнал бенчмарки
- проверил свои же изменения на ошибки
- сохранил совместимость с существующими тестами
Более миллиона тестов SQLite продолжают проходить.
анализ зрелой кодовой базы → поиск узких мест → изменение реализации → бенчмарки → проверка собственных решений.
GitHub:
https://github.com/ksenxx/sqlite-optimized/
Blog: https://kisssorcar.github.io/blog/sqlite-optimization-blog.html
#AI #SQLite #Programming #CodingAgents #Performance #OpenSource
Ускорить SQLite хотя бы на 5% уже было бы серьёзным результатом. Это один из самых зрелых и оптимизированных проектов в мире - его команда почти 20 лет выжимает из кода каждую долю производительности.
Но AI-агент KISS Sorcar менее чем за 8 часов и с затратами меньше $150 добился заметного ускорения сразу в нескольких типах нагрузки.
Результаты:
- 2,06× быстрее в официальном
speedtest1 (~30 тыс. операций)- 1,90× в TATP — транзакционная OLTP-нагрузка
- 1,30× в Star Schema Benchmark — аналитические запросы
- 1,25× в
kvtest — работа с BLOB и дисковым I/OАгент нашёл места, где стандартная конфигурация SQLite несла лишние расходы — особенно при записи транзакций на диск.
После этого он:
- изменил код и настройки
- прогнал бенчмарки
- проверил свои же изменения на ошибки
- сохранил совместимость с существующими тестами
Более миллиона тестов SQLite продолжают проходить.
анализ зрелой кодовой базы → поиск узких мест → изменение реализации → бенчмарки → проверка собственных решений.
GitHub:
https://github.com/ksenxx/sqlite-optimized/
Blog: https://kisssorcar.github.io/blog/sqlite-optimization-blog.html
#AI #SQLite #Programming #CodingAgents #Performance #OpenSource
👍11❤4🔥4👎1👏1🤔1
⚡️ SQL-приём: `GROUPING SETS` может заменить несколько тяжёлых `GROUP BY` + `UNION ALL`.
Допустим, нужно одновременно получить статистику:
- по стране и городу;
- только по стране;
- общий итог.
Часто пишут так:
Но SQL умеет это нативно:
() означает grand total.
А если нужно понять, настоящий ли NULL лежит в данных или это строка итогов:
вернут 1 для колонок, которые были свернуты агрегированием.
🔥 Особенно полезно для:
OLAP-запросов;
аналитических отчётов;
дашбордов;
многоуровневых итогов;
запросов, где иначе появляется несколько почти одинаковых GROUP BY.
Ещё есть:
ROLLUP строит иерархические итоги, а CUBE - все комбинации измерений.
Если в аналитическом SQL у вас появляется цепочка из GROUP BY + UNION ALL, возможно, вы просто забыли про GROUPING SETS.
#SQL #PostgreSQL #DataEngineering #Analytics
Допустим, нужно одновременно получить статистику:
- по стране и городу;
- только по стране;
- общий итог.
Часто пишут так:
SELECT country, city, SUM(revenue)
FROM sales
GROUP BY country, city
UNION ALL
SELECT country, NULL, SUM(revenue)
FROM sales
GROUP BY country
UNION ALL
SELECT NULL, NULL, SUM(revenue)
FROM sales;
Но SQL умеет это нативно:
SELECT
country,
city,
SUM(revenue) AS revenue
FROM sales
GROUP BY GROUPING SETS (
(country, city),
(country),
()
);
() означает grand total.
А если нужно понять, настоящий ли NULL лежит в данных или это строка итогов:
GROUPING(country)
GROUPING(city)
вернут 1 для колонок, которые были свернуты агрегированием.
🔥 Особенно полезно для:
OLAP-запросов;
аналитических отчётов;
дашбордов;
многоуровневых итогов;
запросов, где иначе появляется несколько почти одинаковых GROUP BY.
Ещё есть:
ROLLUP(...)
CUBE(...)
ROLLUP строит иерархические итоги, а CUBE - все комбинации измерений.
Если в аналитическом SQL у вас появляется цепочка из GROUP BY + UNION ALL, возможно, вы просто забыли про GROUPING SETS.
#SQL #PostgreSQL #DataEngineering #Analytics
❤9👍8🔥8🤔1😱1
⚡ В SQLite есть кусок кода, который выглядит «грязно», но оставлен таким специально ради скорости.
Каждый SQL-запрос SQLite сначала компилируется в байткод, а затем выполняется собственной виртуальной машиной VDBE.
Внутри — большой цикл диспетчеризации с почти 200 opcode.
И вот интересный момент: SQLite использует обычные
В исходниках прямо написано:
«Код использует неструктурированные goto и выглядит не очень чисто. Но это сделано не из-за плохого стиля, так быстрее».
По замерам разработчиков, такой подход ускоряет
То есть здесь читаемость сознательно пожертвовали ради производительности.
Хорошее напоминание: в системном коде «красивее» не всегда значит «быстрее».
#SQLite #C #Databases #Performance #SystemsProgramming
Каждый SQL-запрос SQLite сначала компилируется в байткод, а затем выполняется собственной виртуальной машиной VDBE.
Внутри — большой цикл диспетчеризации с почти 200 opcode.
И вот интересный момент: SQLite использует обычные
goto, чтобы быстро прыгать между общими ветками выполнения.В исходниках прямо написано:
«Код использует неструктурированные goto и выглядит не очень чисто. Но это сделано не из-за плохого стиля, так быстрее».
По замерам разработчиков, такой подход ускоряет
sqlite3_step() примерно на 1,5%.То есть здесь читаемость сознательно пожертвовали ради производительности.
Хорошее напоминание: в системном коде «красивее» не всегда значит «быстрее».
#SQLite #C #Databases #Performance #SystemsProgramming
🔥7❤4🥰2👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Как SQLite выжимает скорость: байткод, VM и goto
Некрасивый код, который делает SQLite быстрым
Некрасивый код, который делает SQLite быстрым
👎7👍4❤3🔥3🤯1
🔥 PPT Master делает презентации из PDF, DOCX и сайтов прямо внутри Claude Code и Cursor. И на выходе это настоящий редактируемый PowerPoint
ppt-master работает как skill для AI-IDE. Можно просто написать: «сделай презентацию из этого PDF», после чего агент сам разбирает материал, продумывает структуру, собирает дизайн и экспортирует .pptx. Поддерживаются PDF, DOCX, URL и Markdown.
Самая сильная часть проекта в том, что слайды не превращаются в набор картинок. Текст, фигуры, таблицы и графики экспортируются как нативные объекты PowerPoint, которые можно открыть и вручную отредактировать. Есть шаблоны, live preview, анимации, speaker notes и даже генерация озвучки с последующим встраиванием аудио в PPTX.
Работает с Claude Code, Cursor, VS Code + Copilot и другими agent harness. Сам пайплайн выполняется локально, кроме обращений к выбранной AI-модели.
По сути:
PDF / DOCX / URL → AI-agent → структура → дизайн → настоящий editable .pptx
Автор отдельно пишет, что цель не заменить финальную ручную полировку, а убрать примерно 90% работы с пустого листа.
🔗 github.com/hugohe3/ppt-master
#AI #ClaudeCode #PowerPoint #Agents #OpenSource
ppt-master работает как skill для AI-IDE. Можно просто написать: «сделай презентацию из этого PDF», после чего агент сам разбирает материал, продумывает структуру, собирает дизайн и экспортирует .pptx. Поддерживаются PDF, DOCX, URL и Markdown.
Самая сильная часть проекта в том, что слайды не превращаются в набор картинок. Текст, фигуры, таблицы и графики экспортируются как нативные объекты PowerPoint, которые можно открыть и вручную отредактировать. Есть шаблоны, live preview, анимации, speaker notes и даже генерация озвучки с последующим встраиванием аудио в PPTX.
Работает с Claude Code, Cursor, VS Code + Copilot и другими agent harness. Сам пайплайн выполняется локально, кроме обращений к выбранной AI-модели.
По сути:
PDF / DOCX / URL → AI-agent → структура → дизайн → настоящий editable .pptx
Автор отдельно пишет, что цель не заменить финальную ручную полировку, а убрать примерно 90% работы с пустого листа.
🔗 github.com/hugohe3/ppt-master
#AI #ClaudeCode #PowerPoint #Agents #OpenSource
👍5❤4🔥4
🔥 Tailscale полгода ловила «невозможную» порчу SQLite. В итоге нашли баг, который жил в базе минимум 16 лет
В production у Tailscale начали случайно повреждаться SQLite-базы. Никакой стабильной причины: разные шарды, разная нагрузка, иногда между инцидентами проходили недели. За шесть месяцев компания поймала 19 случаев corruption.
После месяцев форензики вместе с core-разработчиками SQLite нашли причину: редкий race condition между записью и WAL checkpoint. При очень точном совпадении по времени SQLite мог решить, что страницы уже перенесены из WAL в основной файл, хотя этого не происходило. Часть данных исчезала, а база становилась повреждённой.
Баг получил название WAL-Reset. По оценке разработчиков SQLite, он существовал минимум 16 лет и был настолько редким, что для тестов пришлось специально писать код, который провоцирует нужную гонку. Tailscale ловила его чаще из-за агрессивного ручного checkpointing.
А дальше стало ещё веселее: версия SQLite 3.52.0 с исправлением обнаружила вторую проблему со stale expression indexes и начала выдавать ложные сообщения о corruption. Релиз отозвали, а фикс WAL-Reset перевыпустили в SQLite 3.51.3.
Редкий пример расследования, где компания полезла искать баг в одной из самых проверенных баз данных мира и действительно нашла его.
🔗
#SQLite #Database #Linux #Backend #Engineering
В production у Tailscale начали случайно повреждаться SQLite-базы. Никакой стабильной причины: разные шарды, разная нагрузка, иногда между инцидентами проходили недели. За шесть месяцев компания поймала 19 случаев corruption.
После месяцев форензики вместе с core-разработчиками SQLite нашли причину: редкий race condition между записью и WAL checkpoint. При очень точном совпадении по времени SQLite мог решить, что страницы уже перенесены из WAL в основной файл, хотя этого не происходило. Часть данных исчезала, а база становилась повреждённой.
Баг получил название WAL-Reset. По оценке разработчиков SQLite, он существовал минимум 16 лет и был настолько редким, что для тестов пришлось специально писать код, который провоцирует нужную гонку. Tailscale ловила его чаще из-за агрессивного ручного checkpointing.
А дальше стало ещё веселее: версия SQLite 3.52.0 с исправлением обнаружила вторую проблему со stale expression indexes и начала выдавать ложные сообщения о corruption. Релиз отозвали, а фикс WAL-Reset перевыпустили в SQLite 3.51.3.
Редкий пример расследования, где компания полезла искать баг в одной из самых проверенных баз данных мира и действительно нашла его.
🔗
tailscale.com/blog/sqlite-wal-reset-bug#SQLite #Database #Linux #Backend #Engineering
❤8🔥4🥰1
🐘 SQL-совет, который многие игнорируют: не используй `COUNT(*)`, если тебе нужно только проверить существование строки.
Часто пишут так:
А потом проверяют, больше ли результат нуля.
Но базе приходится посчитать все совпадения, хотя тебе нужна всего одна информация: есть хотя бы одна строка или нет.
Лучше использовать:
На маленькой таблице разницы почти не заметишь. На миллионах строк и частых проверках это уже может серьёзно экономить ресурсы.
Если нужен ответ «да/нет» — не заставляй SQL считать всё.
Часто пишут так:
SELECT COUNT(*)
FROM orders
WHERE user_id = 42;
А потом проверяют, больше ли результат нуля.
Но базе приходится посчитать все совпадения, хотя тебе нужна всего одна информация: есть хотя бы одна строка или нет.
Лучше использовать:
SELECT EXISTS (
SELECT 1
FROM orders
WHERE user_id = 42
);
EXISTS может остановить поиск сразу после первого совпадения.На маленькой таблице разницы почти не заметишь. На миллионах строк и частых проверках это уже может серьёзно экономить ресурсы.
Если нужен ответ «да/нет» — не заставляй SQL считать всё.
👍22🔥6❤3👎1🤯1
Forwarded from Machinelearning
Модель на 2,4 млрд параметров стала самой маленькой в линейке VLM компании. От большинства таких моделей она отличается тем, что работает с изображением в исходном разрешении.
Обычно картинку перед подачей в модель сжимают, и мелкий текст, разметка таблицы и подписи на графике при этом теряются. Здесь пропорции сохраняются, а верхняя планка соответствует странице A4, отсканированной при 200 dpi.
Отсюда и заявленная область применения - документы, таблицы, графики, скриншоты, формы.
Компактный размер удобен для дообучения под свою предметную область, а квантованные сборки, по словам Cohere, пойдут не только на сервере, но и на ноутбуке или устройстве мобильного класса.
Зрительный энкодер на 400 млн параметров вырос из SigLIP 2 и держит исходное разрешение за счёт двумерного RoPE вместе с обученными одномерными позиционными эмбеддингами.
Языковая часть - собственная North Micro LLM на 2 млрд параметров, повторяющая архитектуру Command A+: три слоя внимания со скользящим окном и RoPE чередуются с одним глобальным слоем, который работает вообще без позиционных эмбеддингов.
Получается разделение труда - окна с RoPE держат локальный контекст, глобальный слой смотрит на всё сразу и в разметке позиций не нуждается.
Между ними проектор, и здесь изюминка. Вместо того чтобы отдать языковой модели один готовый набор признаков, Cohere подмешивает эмбеддинги патчей с нескольких уровней зрительного энкодера в соответствующие ранние слои языковой модели. Так модель видит картинку сразу на разных степенях обобщения. Принцип взят из DeepStack.
Замеры проводили через VLMEvalKit, сравнивая с восемью моделями размером от 1,6 до 5,1 млрд параметров.
Сильнее всего North Micro Vision выглядит там, куда её и целили.
На DocVQA 0,921, на ChartQA 0,808, на AI2D 0,775, на RefCOCO 0,732 (втрое выше, чем у Ministral и Qwen3-VL).
Общий язык и рассуждение даются слабее.
На MMMU 0,329, худший результат в таблице; на MMLU и MMLU-Pro модель тоже уступает большинству соседей.
@ai_machinelearning_big_data
#AI #ML #VLM #NorthMicroVision #Cohere
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1👎1🔥1
🔥 Одна строка в конфиге ускорила production-ответ с 126–230 мс до менее чем 9 мс
Paweł Urbanek собрал очень практичный гайд по профилированию Rust, где оптимизации идут не по принципу «что интереснее», а по реальной отдаче.
Из кейсов:
Три последовательных HTTP-вызова →
Неправильно настроенный Brotli в
Ещё жёстче кейс с
И отдельная классика Tokio: unbounded channel молча накопил 73 сообщения, потому что consumer не успевал. Никакой ошибки, просто медленное движение к OOM.
Полезный порядок из гайда:
сначала SQL и HTTP, потом locks и channels, и только после этого CPU profiling.
Потому что один лишний поход в базу обычно стоит дороже, чем сотни мелких оптимизаций внутри hot loop.
🔗
#Rust #Performance #Profiling #Tokio #Backend
Paweł Urbanek собрал очень практичный гайд по профилированию Rust, где оптимизации идут не по принципу «что интереснее», а по реальной отдаче.
Из кейсов:
N+1 SQL → 21 запрос превратили в один JOIN, функция ускорилась со 104 до 70 мкс.Три последовательных HTTP-вызова →
tokio::try_join!, итоговое время почти вдвое меньше.Неправильно настроенный Brotli в
maplibre/martin → скорость была всего 27,9 KB/s. Одна правка конфига дала примерно 57x ускорение, а latency упала до <9 мс.Ещё жёстче кейс с
write lock, который держали на всём HTTP round trip. После переноса блокировки P95 для читателей рухнул с 1,11 секунды до 9,42 мкс.И отдельная классика Tokio: unbounded channel молча накопил 73 сообщения, потому что consumer не успевал. Никакой ошибки, просто медленное движение к OOM.
Полезный порядок из гайда:
сначала SQL и HTTP, потом locks и channels, и только после этого CPU profiling.
Потому что один лишний поход в базу обычно стоит дороже, чем сотни мелких оптимизаций внутри hot loop.
🔗
hotpath.rs/blog/profiling-rust-guide#Rust #Performance #Profiling #Tokio #Backend
❤7🔥4👍3😱1
PostgreSQL: архитектура и тюнинг SQL-запросов
Погрузись в архитектуру и прокачай оптимизацию запросов одной из самых популярных open source СУБД – PostgreSQL.
🌐 В программе курса:
🤩 Разберём, как работают СУБД вообще и PostgreSQL в частности: что такое MVCC, ACID, WAL, LRU, PPC/TPC и другие фундаментальные понятия архитектуры баз данных
🤩 Получишь теорию и практику EXPLAIN и EXPLAIN ANALYZE на разных типа запросов: без индексов, с индексами, index only, нормализованные и документ-ориентированные данные и json-поля, изменение параметров сессии/конфигурации для ускорения запросов
🤩 Изучишь архитектуру хранения данных в PostgreSQL, типы и особенности индексов, а также полезные советы и трюки оптимизации БД
🤩 Получишь свой собственный выделенный облачный PostgreSQL-сервер (8 vCPU, 12G RAM, 100G NVMe) – предоставляется БЕСПЛАТНО на время обучения + готовый e-commerce датасет TPC-H (миллион пользователей, несколько миллионов заказов на десятки гигабайт)
🗓 Старт курса: 3 сентября. 5 недель обучения.
Изучить программу и записаться можно здесь.
🤩 Кто мы: R&D-центр Devhands, автор курса Николай Ихалайнен, эксперт по СУБД (ex-Percona), со-основатель MyDB, энтузиаст открытого ПО.
Реклама. ИП Рыбак А.А. ИНН 771407709607 Erid: 2VtzquuHE37
Погрузись в архитектуру и прокачай оптимизацию запросов одной из самых популярных open source СУБД – PostgreSQL.
Изучить программу и записаться можно здесь.
Реклама. ИП Рыбак А.А. ИНН 771407709607 Erid: 2VtzquuHE37
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤2
⚡️ Harness Engineering - полный курс на русском
Как заставить AI-агента писать код надёжно. Не «какую модель выбрать», а как спроектировать вокруг неё рабочую систему: инструкции, инструменты, среду, состояние и верификацию.
Курс - от нуля до продвинутых тем: теоретическая база из 11 блоков, 14 модулей, 8 практических проектов, 14 лабораторных работ, диагностический протокол «как починить агента», библиотека готовых шаблонов, карта инструментов, 40 приёмов и каталог антипаттернов.
Главный тезис курса: способность модели и надёжность исполнения - это две разные вещи. Одна и та же модель в «голой» среде и в среде с продуманным harness даёт качественно разные результаты. Апгрейд модели - это самый дорогой и обычно не самый эффективный способ починить агента.
https://github.com/justxor/Harness_ru
Как заставить AI-агента писать код надёжно. Не «какую модель выбрать», а как спроектировать вокруг неё рабочую систему: инструкции, инструменты, среду, состояние и верификацию.
Курс - от нуля до продвинутых тем: теоретическая база из 11 блоков, 14 модулей, 8 практических проектов, 14 лабораторных работ, диагностический протокол «как починить агента», библиотека готовых шаблонов, карта инструментов, 40 приёмов и каталог антипаттернов.
Главный тезис курса: способность модели и надёжность исполнения - это две разные вещи. Одна и та же модель в «голой» среде и в среде с продуманным harness даёт качественно разные результаты. Апгрейд модели - это самый дорогой и обычно не самый эффективный способ починить агента.
https://github.com/justxor/Harness_ru
❤3🔥3🥰2👍1
Вырастили целое дерево из агентов 🌳
Мы в Авито разработали единую платформу для процессов. Самые лучшие и популярные становятся агентами. В итоге каждый сотрудник может создать свой процесс или воспользоваться готовым. Классно? Не то слово! Поэтому мы написали статью, как создавали это решение.
О чём узнаете, если прочитаете:
🔸 как устроена архитектура платформы,
🔸 как процесс становится агентом,
🔸 как измерять качество агентов.
Читать статью🚀
Мы в Авито разработали единую платформу для процессов. Самые лучшие и популярные становятся агентами. В итоге каждый сотрудник может создать свой процесс или воспользоваться готовым. Классно? Не то слово! Поэтому мы написали статью, как создавали это решение.
О чём узнаете, если прочитаете:
Читать статью
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1
Media is too big
VIEW IN TELEGRAM
DELETE не удаляет строку. Кто на самом деле освобождает место в PostgreSQL
DELETE только ставит строке метку, физически она остаётся в файле. Старую версию держит MVCC: пока её могут читать другие транзакции, трогать её нельзя. Мёртвые кортежи убирает уже VACUUM, и только после этого место реально возвращается.
DELETE только ставит строке метку, физически она остаётся в файле. Старую версию держит MVCC: пока её могут читать другие транзакции, трогать её нельзя. Мёртвые кортежи убирает уже VACUUM, и только после этого место реально возвращается.
👍6
Успейте подать заявку на E-CUP 2026 Students от Ozon Tech до 30 августа
E-CUP 2026 Students — ежегодное соревнование от Ozon Tech. В этом сезоне — для студентов, которые интересуются ML, Data Science, Big Data и аналитикой данных.
Вас ждут три трека: поиск дубликатов товаров, ИИ-модерация карточек маркетплейса и прогнозирование поведения пользователей. Все задачи основаны на реальных обезличенных данных Ozon.
Участвовать можно по одиночке или в команде до пяти человек. Соревнование проходит онлайн с финалом на масштабной конференции E-CODE.
Что ждёт участников:
- призовой фонд 7 200 000 ₽;
- обратная связь от инженеров Ozon Tech;
- нетворк с экспертами индустрии;
- лимитированный мерч;
- билеты на конференцию E-CODE, где наградят победителей.
Подробнее — на сайте E-CUP 2026 Students.
➡️ Регистрация уже открыта!
Присоединяйтесь, чтобы выйти за рамки учебных проектов, попробовать свои силы в задачах настоящего бигтеха и сравнить своё решение с лучшими участниками.
E-CUP 2026 Students — ежегодное соревнование от Ozon Tech. В этом сезоне — для студентов, которые интересуются ML, Data Science, Big Data и аналитикой данных.
Вас ждут три трека: поиск дубликатов товаров, ИИ-модерация карточек маркетплейса и прогнозирование поведения пользователей. Все задачи основаны на реальных обезличенных данных Ozon.
Участвовать можно по одиночке или в команде до пяти человек. Соревнование проходит онлайн с финалом на масштабной конференции E-CODE.
Что ждёт участников:
- призовой фонд 7 200 000 ₽;
- обратная связь от инженеров Ozon Tech;
- нетворк с экспертами индустрии;
- лимитированный мерч;
- билеты на конференцию E-CODE, где наградят победителей.
Подробнее — на сайте E-CUP 2026 Students.
➡️ Регистрация уже открыта!
Присоединяйтесь, чтобы выйти за рамки учебных проектов, попробовать свои силы в задачах настоящего бигтеха и сравнить своё решение с лучшими участниками.
👏3❤2🔥1
🚀 SQL: индекс есть, но база специально его игнорирует
Есть индекс:
И запрос:
Кажется, что индекс должен ускорить поиск.
Но если условие возвращает большую часть таблицы, индекс может оказаться дороже обычного Seq Scan.
Например, если 'active' — только 10% строк, то:
вернёт примерно 90% таблицы.
В таком случае базе дешевле один раз последовательно прочитать таблицу, чем прыгать по индексу к огромному количеству строк.
Проверить можно так:
Смотреть нужно не только на наличие индекса, а на селективность условия.
Особенно часто это проявляется с:
Индекс может быть идеальным, но если запрос выбирает почти всю таблицу, оптимизатор вполне разумно его проигнорирует.
Есть индекс:
CREATE INDEX idx_users_status ON users(status);
И запрос:
SELECT *
FROM users
WHERE status != 'active';
Кажется, что индекс должен ускорить поиск.
Но если условие возвращает большую часть таблицы, индекс может оказаться дороже обычного Seq Scan.
Например, если 'active' — только 10% строк, то:
status != 'active'
вернёт примерно 90% таблицы.
В таком случае базе дешевле один раз последовательно прочитать таблицу, чем прыгать по индексу к огромному количеству строк.
Проверить можно так:
EXPLAIN ANALYZE
SELECT *
FROM users
WHERE status != 'active';
Смотреть нужно не только на наличие индекса, а на селективность условия.
Особенно часто это проявляется с:
<>
NOT IN
IS NOT NULL
Индекс может быть идеальным, но если запрос выбирает почти всю таблицу, оптимизатор вполне разумно его проигнорирует.
👍6🔥5❤1
SQL как ремесло и SQL как инструмент бизнеса — разные навыки
Владеть SQL — значит написать корректный запрос под любую задачу. Работать продуктовым аналитиком — значит понять, какую задачу решает заказчик, и превратить выгрузку в ответ на его вопрос. Первое проверяется тестом на соединениях таблиц, второе — на реальных проектах.
25 августа karpovꓸcourses проводят бесплатный вебинар про этот второй пласт. На реальных задачах разберут:
— какие вопросы задать до запроса, чтобы выгрузка отвечала на задачу заказчика;
— как проверять данные после выгрузки и находить ошибки, которые SQL не подсвечивает;
— типичные ловушки в расчетах, из-за которых технически верный запрос дает неверный ответ;
— как переводить таблицу с цифрами в вывод для бизнеса.
Разбирает Дмитрий Бакаев — продуктовый аналитик в «Передовых Платежных Решениях» и выпускник курса «Аналитик данных» karpovꓸcourses. Вопросы принимает в эфире.
За регистрацию сразу приходит карьерный гайд по профессиям в аналитике, после эфира — запись вебинара
Регистрируйтесь по ссылке — https://clc.to/erid_2W5zFJogLHX
Реклама. ООО «КАРПОВ КУРСЫ». ИНН 7811764627. erid: 2W5zFJogLHX
Владеть SQL — значит написать корректный запрос под любую задачу. Работать продуктовым аналитиком — значит понять, какую задачу решает заказчик, и превратить выгрузку в ответ на его вопрос. Первое проверяется тестом на соединениях таблиц, второе — на реальных проектах.
25 августа karpovꓸcourses проводят бесплатный вебинар про этот второй пласт. На реальных задачах разберут:
— какие вопросы задать до запроса, чтобы выгрузка отвечала на задачу заказчика;
— как проверять данные после выгрузки и находить ошибки, которые SQL не подсвечивает;
— типичные ловушки в расчетах, из-за которых технически верный запрос дает неверный ответ;
— как переводить таблицу с цифрами в вывод для бизнеса.
Разбирает Дмитрий Бакаев — продуктовый аналитик в «Передовых Платежных Решениях» и выпускник курса «Аналитик данных» karpovꓸcourses. Вопросы принимает в эфире.
За регистрацию сразу приходит карьерный гайд по профессиям в аналитике, после эфира — запись вебинара
Регистрируйтесь по ссылке — https://clc.to/erid_2W5zFJogLHX
Реклама. ООО «КАРПОВ КУРСЫ». ИНН 7811764627. erid: 2W5zFJogLHX
У SQLite один writer. И иногда это не ограничение, а очень удобная архитектура.
Работал с SQLite и увидел необычную схему: база работала сразу на нескольких машинах, но запись всё равно шла только через одну.
За это отвечал LiteFS.
Он не пытается превратить SQLite в полноценную distributed database. Вместо этого одна машина выбирается primary через distributed lease и получает право писать. Остальные работают как реплики.
Если primary пропадает, lease истекает и другой узел может занять его место.
В итоге сложная на первый взгляд задача сводится к довольно простой идее:
А на скрине как раз часть Go-кода LiteFS, которая продлевает этот lease и следит, чтобы узел не продолжал считать себя primary после истечения TTL.
Работал с SQLite и увидел необычную схему: база работала сразу на нескольких машинах, но запись всё равно шла только через одну.
За это отвечал LiteFS.
Он не пытается превратить SQLite в полноценную distributed database. Вместо этого одна машина выбирается primary через distributed lease и получает право писать. Остальные работают как реплики.
Если primary пропадает, lease истекает и другой узел может занять его место.
В итоге сложная на первый взгляд задача сводится к довольно простой идее:
«Просто гарантируй, что в каждый момент времени пишет только одна машина».
А на скрине как раз часть Go-кода LiteFS, которая продлевает этот lease и следит, чтобы узел не продолжал считать себя primary после истечения TTL.
❤6👍3🔥3