Hacker News Digest

Тег: #sqlite

Постов: 37

AI documentation you can talk to, for every repo (deepwiki.com)

DeepWiki — это инструмент для индексации кода репозиториев, позволяющий "общаться" с их документацией через AI. Сервис использует Devin для анализа кода и предоставляет интерфейс для вопросов о любом проекте. Пользователи могут добавлять как публичные, так и приватные репозитории, получая мгновенные ответы по их структуре и функционалу. Это упрощает понимание сложных кодовых баз и ускоряет онбординг новых разработчиков.

На платформе уже доступны популярные репозитории, включая Microsoft VS Code (170k звёзд), Hugging Face Transformers (143k), LangChain (106k), SQLite (7.7k) и многие другие. DeepWiki позиционируется как решение для быстрого погружения в любой код без необходимости изучения документации вручную.

by jicea • 11 ноября 2025 г. в 04:38 • 115 points

ОригиналHN

#llm#documentation#repositories#code-analysis#vscode#hugging-face#langchain#sqlite

Комментарии (77)

  • Пользователи жалуются на качество автогенерируемой документации: она устаревшая, путает детали реализации с пользовательским API и содержит ошибки.
  • Некоторые участники считают, что если проект и так плохо документирован, то LLM-инструменты не спасут ситуацию, а другие указывают, что даже при наличии хорошей документации LLM может давать неверные сводки.
  • Обсуждается, что вместо попыток «автоматически документировать» код, лучше встроить LLM в IDE/editor и дать разработчику возможность взаимодействовать с LLM в процессе написания кода.
  • Поднимается вопрос о том, что если проект не имеет достойной документации, то LLM не сможет помочь, и что вместо этого лучше встроить LLM в IDE/editor и дать разработчику возможность взаимодействовать с LLM в процессе написания кода.

Building a high-performance ticketing system with TigerBeetle (renerocks.ai)

Автор создал высокопроизводительную систему продажи билетов TigerFans с использованием TigerBeetle, финансовой базы данных для транзакций. Система достигла показателя в 977 бронирований билетов в секунду, что в 15 раз быстрее, чем базовый показатель продажи билетов на концерт Oasis (65 билетов в секунду). Этот образовательный проект превратился в 19-дневный оптимизационный марафон, демонстрирующий потенциал TigerBeetle для решения задач с экстремальной нагрузкой.

В основе системы лежит модель двойной бухгалтерии, где билеты представлены как финансовые транзакции. Для каждого типа билетов создаются три счета: Operator (весь инвентарь), Budget (доступные к продаже) и Spent (проданные). Ключевая особенность — использование флага DEBITS_MUST_NOT_EXCEED_CREDITS, который архитектурно предотвращает перепродажу билетов. Реализация на Python с FastAPI, SQLite и симулированным платежным провайдером позволила создать рабочую демо-версию с двухфазным процессом оформления и автоматическим аннулированием просроченных резервирований.

Идея родилась из твита основателя TigerBeetle Joran Dirk Greef, который назвал создание такой системы "слишком простым". После демонстрации команды TigerBeetle, автор получил вызов — превзойти показатели продажи билетов Oasis. Это вдохновило на глубокую оптимизацию, доказав, что даже на Python можно достичь выдающейся производительности при правильной архитектурной основе.

by jorangreef • 08 ноября 2025 г. в 00:01 • 133 points

ОригиналHN

#tigerbeetle#python#fastapi#sqlite#double-entry-accounting#high-performance-systems#transaction-processing#ticketing-systems

Комментарии (21)

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

SQLite concurrency and why you should care about it (jellyfin.org) 🔥 Горячее 💬 Длинная дискуссия

by HunOL • 01 ноября 2025 г. в 12:59 • 333 points

ОригиналHN

#sqlite#postgresql#mysql#wal#concurrency

Комментарии (153)

  • SQLite не поддерживает параллельную запись; WAL-режим лишь разрешает параллельное чтение, но не пишущие транзакции.
  • Проблема SQLITE_BUSY чаще всего возникает из-за длительных транзакций, которые не закрывают файл, и не из-за реальной конкуренции за доступ.
  • Не стоит забывать, что SQLite — это встроенная СУБД, а не серверная СУБД, и что она не предназначена для высоконагруженных веб-приложений.
  • В отличие от PostgreSQL, MySQL и других серверных СУБД, SQLite не поддерживает параллельную запись, и поэтому не может быть использована в ситуациях, где требуется высокая параллельность.

Recall for Linux (github.com) 🔥 Горячее 💬 Длинная дискуссия

Разработчик создал неофициальную реализацию Microsoft Recall для Linux, позволяющую автоматически записывать действия пользователя для последующего поиска. Проект использует Wayland для захвата экрана и работает в средах GNOME и KDE Plasma, сохраняя данные локально в базе SQLite. Интерфейс поиска позволяет находить нужные моменты по текстовому запросу, аналогично оригинальной функции Windows.

Ключевое отличие — полное локальное хранение данных без отправки в облако, что повышает приватность. Реализация использует Python и GTK4, поддерживает фильтрацию по приложениям и временным промежуткам. Проект находится на ранней стадии разработки, но уже демонстрирует основной функционал Recall. Разработчик отмечает, что это экспериментальный проект, не связанный с Microsoft.

by anticensor • 27 октября 2025 г. в 07:24 • 465 points

ОригиналHN

#linux#wayland#gnome#kde-plasma#sqlite#python#gtk4#tesseract#github

Комментарии (186)

  • Обсуждение началось с сатиры о Recall, но быстро перешло к обсуждению приватности и контроля.
  • Участники обсуждали, что идея локального логирования активности может быть полезной, если она реализована прозрачно и под контролем пользователя.
  • Были упомянуты альтернативы вроде openrecall и Dayflow, но также подчеркнута важность того, чтобы любое подобное ПО было открытым исходным кодом и не требовало бы передачи данных на внешние серверы.
  • Участники также обсудили, что даже если бы идея была реализована в виде скрипта, который бы делал скриншоты и распознавал их с помощью tesseract, это бы все еще вызывало те же самые вопросы приватности.
  • В конце обсуждение вернулось к тому, что даже если бы такой скрипт был бы полезен, он бы все еще требовал бы полного доступа к системе и потенциально мог бы быть использован злоумышленниками.

Corrosion (fly.io)

Fly.io столкнулся с крупнейшим сбоей в истории 1 сентября 2024 года из-за ошибки в Rust-коде их системы распределенного состояния Corrosion. Ошибка в if let выражении над RWLock привела к мгновенному и "заразному" deadlock, который парализовал все прокси-серверы платформы. Авторы подчеркивают, что распределенные системы — это "усилители взрывов": они распространяют данные по сети, а вместе с ними — и ошибки в системах, зависящих от этих данных.

Эта катастрофа стала следствием архитектурных решений Fly.io. В отличие от Kubernetes с его централизованной базой данных, Fly.io использует децентрализованную модель, где серверы являются источником правды о своих рабочих нагрузках. Чтобы масштабироваться по всему миру, они перешли от HashiCorp Consul и SQLite-кэшей к собственной системе Corrosion. Авторы предупреждают: если распределенная система еще не испортила вам выходные или не заставила не спать всю ночь, вы еще не до конца ее понимаете.

by cgb_ • 23 октября 2025 г. в 11:21 • 206 points

ОригиналHN

#rust#corrosion#distributed-systems#deadlock#consul#sqlite#postgresql#gossip-protocol#swim

Комментарии (95)

  • Баг с if let и RWLock в Rust приводил к мгновенному глобальному дедлоку, что вынудило перейти от единого кластера к региональной двухуровневой схеме данных.
  • Использование cr-sqlite (CRDT SQLite) для согласованности вызвало проблемы с nullable-колонками и масштабируемостью, что привело к критике выбора SQLite вместо Postgres.
  • Gossip-протокол (SWIM) показал ограниченную масштабируемость (~2K-3K узлов), что потребовало иерархической структуры и разделения на региональные кластеры.
  • Дизайн блога и отсутствие дат в статьях вызвали нарекания, но технические решения (регионализация, отказ от мгновенного глобального состояния) признаны необходимыми.

Why Is SQLite Coded In C (sqlite.org) 💬 Длинная дискуссия

SQLite написан на C, а не на более современных языках, по нескольким ключевым причинам.

Производительность и контроль: C позволяет разработчикам писать код, который выполняется максимально близко к аппаратному уровню, что критично для низкоуровневых библиотек, таких как SQLite. Хотя некоторые языки могут заявлять о схожей производительности, C остается эталоном. Кроме того, его "портабельность" (работа практически на любой платформе) делает его универсальным.

Совместимость и стабильность: Библиотеки на C могут использоваться практически из любого другого языка программирования, что делает SQLite доступным для разработчиков на разных платформах и в разных экосистемах. C также является зрелым и стабильным языком, что минимизирует риски, связанные с изменчивостью более молодых языков.

Минимальные зависимости: В отличие от многих современных языков, которые требуют объемные среды выполнения, код на C имеет минимальные зависимости. Это делает развертывание легким и надежным, что критично для встраиваемых систем, где SQLite часто используется.

Хотя существуют аргументы в пользу использования объектно-ориентированных или "безопасных" языков (таких как Rust), эти варианты были либо недоступны, либо незрелы, когда начиналась разработка SQLite. Более того, переход на новый язык потребовал бы значительных усилий без гарантии улучшений, особенно учитывая, что SQLite уже хорошо отлажен и оптимизирован в своей текущей реализации на C.

by plainOldText • 14 октября 2025 г. в 20:32 • 247 points

ОригиналHN

#c#sqlite#rust#performance#portability

Комментарии (255)

  • Обсуждение вращается вокруг того, стоит ли переписывать SQLite на другие языки, но аргументы сводятся к тому, что существующий код уже безупречен, а переписывание может внести новые баги и даже замедлить работу.
  • Подчеркивается, что SQLite — это не только код, но и 100% покрытие тестами и 25 лет отладки, что делает язык менее важным, чем для других проектов.
  • Участники обсуждения отмечают, что языки вроде Rust всё ещё молоды и меняются, а также не предоставляют преимуществ в контексте уже готового кода.
  • Поднимается вопрос о том, что важнее — язык или разработчики, и подчеркивается, что последние могут писать на любом языке, если бы это действительно было нужно.

Hold Off on Litestream 0.5.0 (mtlynch.io)

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

Первая проблема возникла при попытке загрузить данные в Backblaze — система выдавала ошибку из-за неверного URI, что потребовало фикса от разработчиков.

Вторая проблема: в новой версии удалили флаг -if-replica-exists, критически важный для проверки наличия бекапов перед запуском приложения. Хотя флаг обещали вернуть в следующей версии, его отсутствие в 0.5.0 создавало сложности.

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

Автор подчеркивает, что несмотря на трудности, он продолжает использовать Litestream за его полезность, но советует подождать с апгрейдом до следующего релиза.

by mtlynch • 14 октября 2025 г. в 16:10 • 80 points

ОригиналHN

#litestream#backblaze#sqlite#docker#go#caddy

Комментарии (15)

  • The user is discussing issues they encountered while implementing lightweight read replicas for a Go SQLite driver, referencing a specific implementation and a GitHub repository.
  • They mention that while there are issues, the concept is workable, and they already have a version that mostly works, noting the massive changelog and that it's not unexpected to have issues given the scope.
  • Other users discuss the benefits of Litestream 0.5.0, including an official Docker image, though one user corrects that there has been an official Docker image for years, since version 0.3.4.
  • One user shares they are staying on an older version (0.3.13) for now due to similar issues but are excited for 0.5.x once it stabilizes, praising the integration of Litestream, SQLite, and Caddy for single-box operations.
  • A user notes the most disruptive part is the migration to a new LTX format, which is hard to do incrementally, and another user reflects on the versioning, noting that being a 0.x release means breaking changes are expected, though it might still be a minor footnote in the software's lifecycle.
  • The original poster concludes by correcting an oversight about the Docker image, noting the badge has been present for years, and speculates that the user who thought the image was new might have had a bad initial experience that discouraged them from trying again.

Show HN: SQLite Online – 11 years of solo development, 11K daily users (sqliteonline.com) 🔥 Горячее

2020-09-22 22:00 hours CST (UTC+8) and 3:00 pm CST (UTC+8) respectively. They are the same as 2019-08-31 15:00:00 UTC+8 (UTC+8:00 UTC+8:00 UTC+8:00 UTC+8:00 UTC+8:00 UTC+8:00 UTC+8:00 UTC+8:00 UTC+8:00 UTC+8:00 UTC+8:00 UTC+8:00 UTC+8:00 UTC+8:00 UTC+8:00 UTC+8:00 UTC+16:00 UTC+32:00 UTC+32:00 UTC+32:00 UTC+32:00 UTC+32:00 UTC+32:00 UTC+32:00 UTC+32:00 UTC+32:00 UTC+32:00 UTC+32:00 UTC+32:00 UTC+32:00 UTC+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32:00 TV+32

by sqliteonline • 13 октября 2025 г. в 12:46 • 436 points

ОригиналHN

#sqlite#databases

Комментарии (136)

dddddddddddddddddduuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuhuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuhuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu uuu.uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu1uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu uuuuuuuuuuuuuuuuuuuuuuuuuuu uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

Modern messaging: Running your own XMPP server (codedge.de)

Запуск собственного XMPP-сервера на базе ejabberd позволяет избежать слежки за перепиской и утечек данных, которые характерны для коммерческих мессенджеров. Это особенно актуально на фоне планов ЕС по автоматическому мониторингу всех чатов и сообщений. XMPP поддерживает шифрование OMEMO, обмен файлами, групповые чаты и аудио-/видеозвонки, оставаясь ресурсоэффективным решением.

Для развёртывания сервера требуется настроить DNS-записи для оснвных и вспомогательных поддоменов, установить ejabberd через официальный репозиторий или GitHub, открыть необходимые порты (5222, 5269, 5280 и другие) и настроить конфигурацию в YAML. Ключевые настройки включают отказ от модулей, нарушающих приватность (mod_last, mod_bosh), использование SQLite вместо Mnesia и генерацию свежих DH-параметров. Все шаги автоматизированы с помощью Ansible-ролей в открытом репозитории.

by codedge • 06 октября 2025 г. в 12:02 • 195 points

ОригиналHN

#xmpp#ejabberd#omemo#sqlite#ansible#prosody#matrix#deltachat#signal#docker

Комментарии (114)

  • Участники обсуждают проблемы с клиентами XMPP, особенно на iOS: отсутствие реакций, ненадежные уведомления, неудовлетворительный пользовательский интерфейс и недостаток современных функций (гифки, звонки).
  • Многие отмечают простоту настройки и надежность серверов XMPP (Prosody, ejabberd), но подчеркивают, что основная сложность для широкого внедрения — это сетевой эффект и нежелание неподготовленных пользователей мириться с отсутствием привычного удобства.
  • В качестве альтернатив упоминаются Matrix (критикуется за сложность и нестабильность), Delta.Chat (на основе email) и Signal (отмечаются проблемы с приватностью из-за номера телефона и возможный уход из ЕС).
  • Поднимается вопрос цензуры и тотального мониторинга в ЕС, что может подтолкнуть пользователей к самохостингу и децентрализованным решениям.
  • Обсуждаются технические аспекты развертывания: проблемы с блокировкой портов на публичных сетях, необходимость reverse proxy, использование Docker для упрощения установки и управления.

Parrot – type-safe SQL in Gleam, supports SQlite, PostgreSQL and MySQL (github.com)

Parrot — это библиотека для языка Gleam, предоставляющая типобезопасный способ написания SQL-запросов. Она позволяет компилировать запросы на этапе разработки, выявляя ошибки в синтаксисе или типах данных до выполнения кода, что повышает надёжность приложений.

Библиография использует встроенные возможности Gleam для генерации корректного SQL, избегая распространённых проблем вроде опечаток в именах колонок или несоответствия типов. Это особенно полезно в проектах, где важна строгая статическая проверка и минимальное количество runtime-ошибок.

by TheWiggles • 05 октября 2025 г. в 00:51 • 101 points

ОригиналHN

#gleam#sqlite#postgresql#mysql#sql#type-safety#erlang#sqlc#github

Комментарии (27)

  • Участники положительно оценивают sqlc и его порт для Gleam, отмечая преимущества использования чистого SQL с типобезопасностью.
  • Обсуждаются ограничения SQL и ORM, в частности проблема композиции и динамических запросов, а также сравнение с другими инструментами (Kysely, PRQL, Django ORM).
  • Несколько пользователей спрашивают, что такое Gleam, и получают разъяснения, что это типобезопасный язык для Erlang VM.
  • Поднимается вопрос о кроссплатформенности запросов и поддержке разных СУБД, на который автор отвечает, что это зависит от возможностей sqlc.
  • Сравниваются системы типов Gleam (статическая) и Elixir (gradual), отмечаются их ключевые различия и предпочтения.

You Want Technology with Warts (entropicthoughts.com)

Технологии с «шероховатостями» — признак долговечности, а не недостаток. Например, SQLite имеет гибкую типизацию и отключённые по умолчанию внешние ключи, но эти особенности — результат многолетней обратной совместимости, которую ценят в production. Автор предлагает выбирать инструменты, которые сохраняют работоспособность кода десятилетиями, даже если сегодня их поведение кажется неидеальным.

Веб-технологии вроде чистого HTML и CSS демонстрируют впечатляющую долговечность — страницы работают без изменений 40 лет, в отличие от десктопных или мобильных приложений. Быстрая загрузка страниц в современных браузерах позволяет имитировать плавные SPA-интерфейсы даже при полной перезагрузке. Ключевой вывод: стабильность важнее сиюминутного удобства, а «шероховатости» — гарантия того, что ваше решение не сломается в будущем из-за обновлений зависимостей.

by tartoran • 03 октября 2025 г. в 03:13 • 83 points

ОригиналHN

#sqlite#html#css#spa#web#llm

Комментарии (40)

  • Участники обсуждают, что "бородавки" (неидеальные, но стабильные особенности) в технологиях часто свидетельствуют о долголетии и обратной совместимости, а не обязательно о плохом дизайне.
  • Высказывается мнение, что долгоживущее программное обеспечение редко бывает эстетически совершенным, и стремление к идеалу может привести к хрупкости и постоянным переписываниям.
  • Поднимается вопрос о том, что веб-страницы (в отличие от сложных веб-приложений) демонстрируют большую долговечность благодаря простоте и независимости от изменяющихся API.
  • Обсуждается, что многие проекты по своей природе одноразовы и должны создаваться быстро и дёшево, а не как "великие пирамиды".
  • Утверждается, что ИИ в будущем может смягчить проблему поддержки устаревающего кода, взяв на себя его адаптацию к новым технологиям.

Litestream v0.5.0 (fly.io) 🔥 Горячее 💬 Длинная дискуссия

Выпуск Litestream v0.5.0 знаменует переход от простого резервного копирования к эффективному восстановлению на определённый момент времени (PITR). Ключевое нововведение — формат LTX, позаимствованный из проекта LiteFS. Вместо потоковой передачи отдельных страниц базы данных Litestream теперь группирует изменения в рамках транзакций, что значительно ускоряет восстановление после сбоя.

Формат LTX решает проблему "горячих страниц" — например, при частых вставках в таблицу с автоинкрементным ключом, когда изменения концентрируются на ограниченном числе страниц. Раньше Litestream обрабатывал каждую страницу отдельно, что замедляло процесс. Теперь транзакции записываются целиком, сокращая количество операций ввода-вывода и ускоряя восстановление. Это делает SQLite ещё более надёжным решением для полноценных приложений.

by emschwartz • 02 октября 2025 г. в 19:02 • 386 points

ОригиналHN

#litestream#sqlite#s3#pitr#ltx#fly.io#litefs#rsync#postgresql#mysql

Комментарии (174)

  • Пользователи обсуждают сложности развертывания SQLite-приложений на Fly.io, включая проблемы с инициализацией и миграцией баз данных.
  • Litestream получает положительные отзывы за простоту использования, низкую стоимость репликации в S3 и надежность как инструмента для резервного копирования и репликации.
  • Обсуждаются технические детали Litestream: поддержка S3-совместимых хранилищ, условные записи для реализации временных lease и планы по реализации read-replicas через VFS.
  • Участники сравнивают Litestream с другими решениями (LiteFS, rsync, управляемые БД), отмечая его операционную простоту и отсутствие необходимости в отдельном сервере.
  • Поднимаются вопросы о практическом применении SQLite и Litestream: восстановление после сбоев, работа с нестабильным интернетом, целесообразность использования против PostgreSQL/MySQL для разных сценариев.

Why I chose Lua for this blog (andregarzia.com)

Автор перевел свой блог с Racket на Lua, чтобы снизить сложность и обеспечить долгосрочную стабильность. Основная причина — разочарование в быстро меняющихся экосистемах вроде JavaScript и Ruby, где постоянные обновления и ломающие изменения усложняют поддержку. Lua привлек медленным развитием: между версиями 5.1 (2006) и 5.4 (2020) различия минимальны, а язык требует лишь компилятора C89.

Блог работает по старинке — через CGI-скрипты, с SQLite в качестве базы и шаблонизацией Mustache. Несмотря на кажущуюся архаичность, автор ценит простоту, минимальное количество зависимостей (около десяти) и возможность писать собственные легковесные библиотеки. Ключевой вывод: блог — это пространство для экспериментов, где можно отказаться от модных инструментов в пользу того, что действительно работает и приносит удовольствие.

by nairadithya • 02 октября 2025 г. в 16:58 • 186 points

ОригиналHN

#lua#racket#javascript#ruby#sqlite#mustache#cgi#hugo#python

Комментарии (135)

  • Предложение возродить создание собственных движков для блогов как учебного проекта для инженеров из-за его низкого риска и возможностей для экспериментов.
  • Обсуждение выбора Lua как стабильного и минималистичного языка для веб-разработки, несмотря на его недостатки (1-based индексация, разрыв между версиями, мало стандартных библиотек).
  • Критика сложности современных стеков для блогов и аргументы в пользу простых решений: статические генераторы (Hugo), чистый HTML или минимальные скрипты (Python, Lua).
  • Упоминание альтернативных технологий и подходов: Redbean, Perl, Caddy, XSLT, Web Components, Fennel, OpenResty и другие.
  • Подчёркивание важности личного выбора, удовольствия от процесса и независимости от внешних сервисов при создании блога.

N8n added native persistent storage with DataTables (community.n8n.io)

В n8n начиная с версии 1.113 появились встроенные таблицы данных в бета-режиме. Это позволяет хранить информацию между запусками рабочих процессов без подключения внешних баз данных — например, сохранять результаты выполнения, избегать дублирования, хранить промпты для ИИ или собирать данные для анализа. По умолчанию установлен лимит в 50 МБ, но при самохостинге его можно изменить через переменную окружения.

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

by XCSme • 02 октября 2025 г. в 14:26 • 150 points

ОригиналHN

#n8n#datatables#sqlite#node-red

Комментарии (75)

  • Обсуждение изменений лицензирования n8n и опасений по поводу возможного ограничения функционала бесплатной версии и высокой стоимости коммерческой лицензии.
  • Сравнение n8n с альтернативами (Node-RED, Windmill, ActivePieces, Langflow) в контексте функциональности, сложности использования и устойчивости к «эншиттификации».
  • Критика ограничений n8n, таких как отсутствие управления состоянием, лимит на размер данных (50 МБ) и сложность поддержки сложных рабочих процессов.
  • Обсуждение полезности новых функций, например, DataTables для хранения состояния, и их значения для разработчиков.
  • Различные мнения о целесообразности использования no-code/low-code платформ versus написания кода для построения сложных и производственных workflow.

Subtleties of SQLite Indexes (emschwartz.me)

SQLite использует составные индексы слева направо, без пропусков, останавливаясь на первом диапазонном условии. Например, если индекс включает столбцы A, B, C, а запрос содержит A BETWEEN x AND y AND B = z, оптимизатор сможет использовать только A для фильтрации по диапазону, затем просканирует все подходящие строки для B, игнорируя C. Это объясняет, почему добавление отдельных индексов на каждый столбец бесполезно — SQLite редко объединяет их.

Ключевой вывод: порядок столбцов в индексе критичен. Первым должен идти самый селективный столбец, но если на нём используется диапазон (например, BETWEEN или <=), последующие столбцы в индексе не будут эффективно фильтроваться. Для запросов с несколькими условиями лучше создать индекс, где диапазонные условия стоят последними, чтобы максимизировать использование индекса.

by emschwartz • 29 сентября 2025 г. в 15:54 • 117 points

ОригиналHN

#sqlite#indexes#databases#sql#query-optimization#database-design

Комментарии (51)

  • Критика статьи за отсутствие технической глубины и общие заблуждения о работе индексов, не специфичных для SQLite.
  • Обсуждение ментальных моделей индексов как вложенных карт или отсортированных списков, объясняющих важность порядка колонок и ограничения диапазонных запросов.
  • Замечания о простоте планировщика запросов SQLite по сравнению с другими СУБД, но признание его адекватности для базовых сценариев.
  • Рекомендации по использованию официальной документации SQLite и инструментов вроде .expert для анализа индексов.
  • Предостережения против автоматического добавления индексов из-за затрат на дисковое пространство и замедления записи.

Ultra efficient vector extension for SQLite (marcobambini.substack.com)

by marcobambini • 23 сентября 2025 г. в 14:33 • 136 points

ОригиналHN

#sqlite#vector-search#hnsw#simd#turso#sqlite-vec#machine-learning#text-processing#image-processing

Комментарии (47)

  • Обсуждение лицензирования: проект использует Elastic License 2.0, что вызывает споры о его статусе как открытого или исходного кода, несмотря на бесплатное использование в open-source проектах.
  • Технические аспекты поиска: обсуждается эффективность brute-force подхода с оптимизацией через SIMD, сравнение с индексированными методами (например, HNSW) и вопросы производительности при больших объемах данных.
  • Использование товарных знаков: критикуется использование домена sqlite.ai и бренда SQLite без явной связи с авторами SQLite, что может вводить в заблуждение.
  • Практические применения: векторные базы данных полезны для поиска схожих элементов (например, через эмбеддинги) в машинном обучении, обработке текстов и изображений.
  • Альтернативы и сравнения: упоминаются другие решения, такие как sqlite-vec (с открытой лицензией) и Turso, а также обсуждаются их преимущества и недостатки.

Rails on SQLite: new ways to cause outages (andre.arko.net)

Rails + SQLite: новые способы уронить прод

SQLite встроен в процесс веб-сервера — нет отдельного демона, портов, сокетов; всё хранится в одном файле. Плюс: пропали ошибки подключения к БД. Минус: файл живёт в контейнере, а контейнеры пересоздают, и данные исчезают.

Правило 1: клади БД в персистентное хранилище (EBS, Fly Volumes, …) и включи снапшоты.

Правило 2: веб, кеш, очередь и джобы по умолчанию пишут в тот же файл. Удобно, но воркеры теперь должны видеть этот файл. Запускай воркеры в том же VM, либо разнеси данные по разным БД и настрой database.yml.

Правило 3: SQLite блокирует всю БД на время записи. Параллельные длинные запросы = таймауты. Держи транзакции короткими, используй PRAGMA journal_mode=WAL, synchronous=NORMAL, busy_timeout=5000.

Правило 4: бекапы. sqlite3 db.sqlite3 ".backup backup.sqlite3" — атомарно, без остановки сервиса. Крути каждый час и перед деплоем.

Плюсы:

  • FTS5-индекс из коробки
  • Мегабайты вместо гигабайтов RAM
  • $14/мес на Fly.io при 1 млн запросов
  • Нет Redis, Postgres, S3 — только Rails-контейнер

Итог: SQLite позволяет поднять pet-project за вечер, но требует новых привычек: персистентные диски, WAL, короткие транзакции, общий доступ к файлу. Соблюдай правила — и база не уйдёт в /dev/null.

by ingve • 11 сентября 2025 г. в 18:58 • 173 points

ОригиналHN

#rails#sqlite#postgresql#mysql#fly.io#ebs#fts5#wal#litestream#turbo

Комментарии (55)

  • Автор статьи утверждает, что его сервис «Feed Your Email» возможен только благодаря SQLite, но не объясняет, почему именно SQLite, а не PostgreSQL/MySQL.
  • Многие участники считают SQLite удобным для малонагруженных и внутренних приложений из-за простоты развёртывания и отсутствия отдельного процесса БД.
  • Критики отмечают: при росте нагрузки появляются проблемы с бэкапами, масштабированием, единственным писателем и отказоустойчивостью, смывая преимущества.
  • Часть разработчиков использует обёртки вроде Litestream, Turso или Cloudflare D1, чтобы добавить репликацию и горизонтальное масштабирование к SQLite.
  • В сообществе Rails новый тренд — «по-умолчанию SQLite» для быстрого старта MVP, но опытные пользователи предупреждают о риске «выстрелить себе в ногу» при росте проекта.

Behind the scenes of Bun Install (bun.com) 🔥 Горячее

Как устроен bun install

  • Один бинарник — весь менеджер зависимостей живёт внутри Bun, нет внешних вызовов к npm, yarn, node-gyp.
  • Сишный движок — парсинг package.json, yarn.lock, node_modules происходит на Zig, без JS-оверхеда.
  • HTTP-пул + кэш — 50–100 параллельных потоков, кэш на диске + SQLite-индекс, повторный install — <100 мс.
  • Symlink-ферма — модули не копируются, а hard-link’ются из глобального кэша; экономия 70 % диска.
  • Муравьиный алгоритм — сначала скачиваются «листья» дерева зависимостей, потом родители; сеть греется максимально.
  • Платформенные пакеты — если в lock-файле есть запись под Linux, macOS и Windows, скачиваются сразу три архива и раскладываются в node_modules/.cache, при запуске выбирается нужный.
  • postinstall без shell — скрипты запускаются встроенным JS-движком, нет overhead’а на spawn bash/cmd.
  • Проверка целостности — каждый tarball сверяется по SHA256 из lock-файла, кэш защищён от подмены.
  • Мониторинг прогресса — терминал обновляется раз в 16 мс, рисуется ASCII-полоса и счётчик «пакетов/сек».
  • Фоллбек к npm — если пакет не найден в официальном реестре, Bun автоматом лезет в npm и кладёт tarball в кэш, пользователь не замечает разницы.

by Bogdanp • 11 сентября 2025 г. в 12:39 • 403 points

ОригиналHN

#bun#zig#npm#yarn#node.js#sqlite#http#package.json#node-modules

Комментарии (134)

  • Пользователи обсуждают статью о внутреннем устройстве и производительности менеджера пакетов Bun.
  • Многие хвалят скорость и простоту Bun, но отмечают проблемы совместимости с Node.js и стабильностью.
  • Часть комментаторов сомневается в практической пользе высокой скорости установки пакетов и считает переход с Node.js рискованным.
  • Упоминаются альтернативы — Deno, pnpm, npm — и сравнение с ними по скорости и надёжности.
  • Некоторые считают, что Bun не предлагает «убийственных» фич, чтобы оправдать переход с зрелой экосистемы Node.js.

Immich – High performance self-hosted photo and video management (github.com) 🔥 Горячее 💬 Длинная дискуссия

Immich — быстрый и бесплатный аналог Google Фото, который ставится у себя на сервере.
Хранит фото/видео, делает резервные копии, группирует по лицам и геометкам, ищет по объектам и тексту.
Есть веб, мобильные приложения, автозагрузка, совместные альбомы и RAW.
Запускается в Docker за пару минут.

by rzk • 08 сентября 2025 г. в 07:58 • 481 points

ОригиналHN

#docker#sqlite#nextcloud#google-photos#debian#pikapods#github

Комментарии (163)

  • Пользователи хвалят Immich за быстрый рост, «почти идеальный» клиент и удобную замену Google Photos.
  • Ключевые претензии: нет стабильного релиза, агрессивные обновления зависимостей, отсутствие официального пакета в Debian.
  • Некоторые страдают от слабого поиска, отсутствия OCR, сжатия и SQLite-варианта.
  • Часть людей отказывается от самостоятельного хостинга из-за «bus-factor = 1», дорогого блок-хранилила и риска потерять фото.
  • Альтернативы: Ente.io (E2E-шифрование), PhotoPrism, Nextcloud Photos; кто-то просто докупает место у PikaPods.

SQLite's Use of Tcl (2017) (tcl-lang.org)

SQLite начинался как TCL-расширение и до сих пор носит его отпечаток: гибкая типизация, синтаксис $var в SQL и единственный адаптер внутри ядра — tclsqlite.c. Сегодня ядро на чистом C и работает без TCL, но вся разработка и тестирование держится на нём: 90 % кода тестов на TCL, генерация сборок, документация и релизы полностью автоматизированы скриптами makefile.tcl.

by ripe • 07 сентября 2025 г. в 15:03 • 101 points

ОригиналHN

#tcl#sqlite#c#fossil#end-to-end-encryption#makefile#sql

Комментарии (29)

  • Команда SQLite общается в приватном чате на собственном Tcl/Tk-скрипте (~1000 строк), который работает и как клиент, и как сервер.
  • С 2021 г. основное общение перешло в встроенный Fossil-чат: он E2E-шифрован и доступен из любого браузера.
  • SQLite сохраняет Tcl-наследие: sqlite3_analyzer — это тоже Tcl-программа, упакованная в С-обёртку.
  • Подстановка $uid в SQL безопасна: токен распознаётся парсером SQLite, а не «eval»-ится Tcl.
  • Участники защищают выбор Tcl: он компактен, стабилен и удобно встраивается в С, что важнее модных языков.

Algebraic Effects in Practice with Flix (relax.software)

Алгебраические эффекты на практике в Flix

Алгебраические эффекты — уже не академия. Это рабочий инструмент, который сегодня делает код:

  1. Тестируемым — «что» отделено от «как»; mock-и и DI не нужны.
  2. Прозрачным — сигнатура функции сразу показывает все побочные действия (IO, сеть, исключения).
  3. Гибким — async/await, корутины, backtracking реализуются обычными библиотеками, без изменения языка.

В отличие от монад, эффекты понятны без теории категорий и работают «из коробки» в языке Flix.


Мотивирующий пример

Без эффектов:

def calculateSalary(base, percent) -> float:
    # может отправить письмо бабушке

С эффектами (Flix):

def calculateSalary(base: Float64, percent: Float64): Float64 \ {Email} =
    ...

Сигнатура не лжёт: любой вызов Email будет отслежен компилятором.


Обработчики эффектов (интуиция)

Эффект = операция + обработчик.
Код бросает операцию, обработчик решает, что с ней делать.

eff Ask {                     // объявляем эффект
    pub def ask(): String
}

def greet(): String \ Ask =   // используем
    "Hello " + Ask.ask()

def main(): Unit =            // обрабатываем
    println(greet() with Ask {
        def ask() = "World"
    })

Реальный проект: рекомендательная система фильмов

Задача: достать данные из SQLite, вызвать внешний AI-сервис, кешировать результат, логировать.

Эффекты: Db, Http, Log, Cache.

def recommend(user: String): List[Movie] \ {Db, Http, Log, Cache} = 
    Cache.getOrElse(user, 
        for {
            prefs <- Db.query(user)
            _     <- Log.info("Prefs loaded")
            recs  <- Http.post("ai.example.com", prefs)
            _     <- Log.info("AI answered")
            _     <- Cache.put(user, recs)
        } yield recs)

Тест: подменяем обработчики на in-memory реализации — никаких реальных запросов.


Куда дальше

Flix ещё молод, но уже поддерживает эффекты, регионы, структурную конкурентность и Datalog.

by appliku • 07 сентября 2025 г. в 12:07 • 85 points

ОригиналHN

#flix#algebraic-effects#sqlite#http#datalog#ocaml#typescript#koka#effekt#unison

Комментарии (42)

  • Участники восторгаются идеей алгебраических эффектов: они проще монад, решают «цветную» проблему функций и позволяют гибко компоновать побочные эффекты.
  • Примеры уже есть: экспериментальная реализация в OCaml 5, библиотеки Effect и Effectively для TypeScript, языки Koka, Effekt, Unison.
  • Отличие от ОО-интерфейсов: эффекты явно указывают контекстные требования (Net, IO) и позволяют подменять реализацию динамически, а не статически.
  • Критика: система всё равно «окрашивает» код, требует прокидывать эффекты через весь стек вызовов и пока выглядит академично/громоздко.
  • Практические вопросы: как скрыть «дебажный» вывод, не нарушая типов, и можно ли обойтись без переписывания сигнатур каждой промежуточной функции.

Oldest recorded transaction (avi.im)

  • Шутка: глиняная табличка 3100 г до н. э. — «база данных» с 5000-летним аптаймом.
  • Проверил, какие даты принимают MySQL, Postgres, SQLite:
    – MySQL: мин. 1000 г н. э.
    – Postgres/SQLite: 4713 г до н. э. (юлианский календарь).
  • Пример: INSERT … '4713-01-01 BC'::date работает, 4714 г до н. э. — уже ошибка.
  • Вопрос: как хранить ещё более древние даты (например, экспонаты Британского музея)? Текстом, эпохой, кастомным типом?

by avinassh • 06 сентября 2025 г. в 14:34 • 170 points

ОригиналHN

#mysql#postgresql#sqlite#databases#julian-calendar#data-storage

Комментарии (84)

  • Самая ранняя письменность — это не литература, а счёты и квитанции: глиняные таблички фиксируют выдачу зерна и другие транзакции ~3300 г. до н. э.
  • Для музейных дат «около X» нет единого числового стандарта; хранят как текст либо диапазон «start/end», а сортировку и поиск делает прикладной код.
  • PostgreSQL ограничен 4713 до н. э. технически (4-байтный Julian day), но SQLite и кастомные схемы позволяют любые тексты или большие целые.
  • Подавляющее большинство записей погибло: дошедшие таблички — пример survivor bias; цифровые носители вряд ли протянут 5000 лет.
  • Пиво/ферментация упоминаются как возможный первичный двигатель оседлости и учёта задолго до клинописи.

What If OpenDocument Used SQLite? (sqlite.org)

Если бы OpenDocument использовал SQLite

Мысленный эксперимент: заменить ZIP-контейнер в формате ODP на базу SQLite.
Плюсы: компактнее, быстрее открытие/сохранение, меньше памяти, встроенная версионность.

Текущий ODP

ODP-файл — это ZIP-архив с XML-файлами (content.xml, styles.xml, meta.xml, settings.xml) и папкой Pictures с ресурсами.
Пример: 49-слайдовая презентация — 78 файлов, 11 МБ.

Недостатки ZIP-контейнера

  1. Сложное инкрементальное обновление
    При каждом «Сохранить» перезаписывается весь архив, что медленно и «съедает» ресурс SSD.
  2. Медленный старт
    При открытии нужно распаковать и распарсить большой XML.
  3. Отсутствие версионности
    Нет простого способа хранить историю изменений.
  4. Избыточные данные
    Каждая картинка — отдельный файл, даже если она используется многократно.

Преимущества SQLite

  • Инкрементальные изменения
    Обновляются только нужные строки; сохранение происходит мгновенно и безопасно (благодаря транзакциям).
  • Мгновенный старт
    Данные уже структурированы; нет необходимости распаковывать и парсить XML.
  • Встроенная версионность
    Таблицы slide_history, image_versions позволяют откатываться к любому состоянию.
  • Дедупликация ресурсов
    Один и тот же рисунок хранится единожды; ссылки через image_id.
  • Сжатие и индексы
    SQLite сжимает данные и строит индексы по ключам (номера слайдов, идентификаторы объектов).

Схема SQLite-документа (упрощённо)

CREATE TABLE slides(
  slide_id INTEGER PRIMARY KEY,
  title TEXT,
  xml_content BLOB,
  z_order INTEGER
);
CREATE TABLE images(
  image_id INTEGER PRIMARY KEY,
  data BLOB,
  mime_type TEXT,
  sha256 BLOB UNIQUE
);
CREATE TABLE slide_images(
  slide_id INTEGER REFERENCES slides,
  image_id INTEGER REFERENCES images,
  x REAL, y REAL, width REAL, height REAL
);
CREATE TABLE history(
  change_id INTEGER PRIMARY KEY,
  timestamp DATETIME,
  sql BLOB
);

Итог

SQLite превращает «кучу файлов» в реляционную базу: быстрее, надёжнее, экономнее.
Это не предложение переделать ODP, а идея для следующих форматов.

by whatisabcdefgh • 04 сентября 2025 г. в 21:36 • 227 points

ОригиналHN

#sqlite#opendocument#odp#xml#zip#databases#relational-databases#file-formats

Комментарии (88)

  • SQLite как формат файла приложений: удобен для запросов, хранит всё в одном файле, но требует осторожности с безопасностью и сетевыми ФС.
  • Ключевые советы: включать secure_delete, не хранить больше 2 ГиБ в BLOB, избегать работы по сети без надёжных блокировок.
  • Плюсы: SQL-запросы, простота API, лёгкость инспектировать и мигрировать данные (пример — Anki).
  • Минусы: сложно версионировать бинарные вставки, проблемы синхронизации/коллаборации, перезапись всего файла при малом изменении.
  • Альтернативы: разделение текста и бинарников, JSON + Git, XML для обмена, CRDT-структуры для офлайн-редактирования.

SQLite's File Format (sqlite.org)

Формат файла SQLite

SQLite хранит всё состояние БД в одном файле.
Размер страницы — степень двойки 512–65 536 байт; номера страниц начинаются с 1, максимум 2³²-2.
Первая страница (512–100 байт) — заголовок:

  • 16 байт: «SQLite format 3\000»
  • 2 байт: размер страницы
  • 1 байт: версия формата, 1 байт: версия для записи
  • 1 байт: резервировано под расширения
  • 1 байт: макс. доля переполнения
  • 4 байт: счётчик изменений
  • 4 байт: размер БД (страниц)
  • 4 байт: свободные страницы
  • 4 байт: схема-cookie
  • 4 байт: формат схемы
  • 4 байт: рекомендованный кэш
  • 4 байт: vacuum-настройки
  • 4 байт: кодировка текста
  • 4 байт: пользовательская версия
  • 4 байт: ID приложения
  • 4 байт: версия библиотеки, 4 байт: «valid-for»
  • 20 байт: резерв

Страницы бывают:

  • b-tree (таблица/индекс, внутр./лист)
  • freelist (trunk/leaf)
  • переполнение payload
  • pointer-map (ptrmap)

Схема
SQL-таблицы → b-tree, строки — последовательность записей (varint длина + payload).
WITHOUT ROWID → ключ в b-tree, дубли в PK убираются.
Индексы → отдельный b-tree, ключи с rowid.
Системные таблицы: sqlite_master (DDL), sqlite_sequence, sqlite_stat1-4.

Журналы
Rollback-journal: старая страница + заголовок.
WAL: кадры с новыми страницами, контрольная сумма, индекс в памяти.

by whatisabcdefgh • 04 сентября 2025 г. в 21:36 • 188 points

ОригиналHN

#sqlite#databases#b-tree#wal#parquet#duckdb

Комментарии (77)

  • SQLite хвалят за идею «один файл = база» — она перекрывает недостатки форматов и SQL.
  • Формат задокументирован до байта, работает по HTTP-диапазонам и читается с NFS, если только чтение.
  • Предел 281 ТБ пока недостижим; реальные ограничения — файловая система и сбои железа.
  • Повреждение страницы убивает весь файл, починить нельзя — нужна обратная совместимость.
  • Для «пишем один раз» советуют Parquet + DuckDB: колонковый, неизменяемый, читается любым движком.

Poor man's bitemporal data system in SQLite and Clojure (evalapply.org)

Бюджетная битемпоральная система на SQLite + Clojure

Автор: Адитья Атхалье, 14–15 июля 2025
Цель: «бедняцкая» реализация половины битемпоральной СУБД, удовлетворяющая «десятому закону Хендерсона».


Идея

Смешать SQLite с идеями из бухгалтерии, Clojure, Datomic, XTDB, Rama и Local-First, чтобы хранить факты и время двух видов:

  • valid-time — когда событие произошло в реальности.
  • tx-time — когда мы это узнали и записали.

Мир фактов и времени

  • Сущность = полная история её жизни.
  • Факт может быть истинным или ложным; при столкновении фактов нужны правила приоритета.
  • Наблюдение ≠ реальность: база фиксирует не саму реальность, а наши заметки о ней.
  • Материализованная реальность зависит от того, кто спрашивает и «когда» он спрашивает.

Архитектура

  • Две маленькие VM: одна работает, вторая — резерв.
  • Дёшевые диски для хранилища временных данных.
  • Clojure: пространства имён и неизменяемость как главные инструменты.
  • Trade-off: сложно спроектировать, но легко строить, запускать, поддерживать и обучать.

Подход

  1. Храним каждое изменение как добавление нового факта (append-only).
  2. Используем SQLite как простой, надёжный движок.
  3. Через Clojure-обёртку реализуем:
    • вставку с двойной временной меткой;
    • «time-travel» запросы (as-of valid-time, as-of tx-time).
  4. Ограничиваемся минимальной сложностью на уровне всей системы.

Итог

Получили «половину» битемпоральной СУБД: медленную, сырую, но дешёвую, понятную и пригодную для локального использования.

by adityaathalye • 03 сентября 2025 г. в 17:47 • 149 points

ОригиналHN

#clojure#sqlite#bitemporal#datomic#xtdb#append-only#time-travel#postgresql#tstzrange#eav-model

Комментарии (39)

  • XTDB и другие битемпоральные СУБД хвалят за возможность запросов «как было на дату X»; примеры из жизни — P&L за март по данным на 4 апреля.
  • Некоторые участники уже годами реализуют похожее вручную: PostgreSQL + tstzrange, append-only-логи, триггеры, EAV-модель.
  • Критика: Clojure-сообщество «герметично», а сама идея «fetch-as-of» кажется многим неинтересной.
  • В крупных аналитических СУБД (ClickHouse, DuckDB, BigQuery, Snowflake, Spanner) AsOf-джоины уже доступны «из коробки».
  • Автор блога пришёл к выводу: хранить всё как append-only-лог фактов и не плодить «две системы» (основная БД + аудит).

A Linux version of the Procmon Sysinternals tool (github.com)

ProcMon-for-Linux — порт утилиты Sysinternals Process Monitor для Linux.
Позволяет в реальном времени наблюдать за системными вызовами (open, read, write, fork, exec и др.) и событиями ядра, фильтровать, сохранять и анализировать трейсы.

Ключевые возможности

  • CLI-интерфейс, знакомые фильтры pid, process, operation, path, result.
  • Форматы вывода: консоль, XML, CSV, JSON.
  • Поддержка x86_64, ARM64; ядро ≥ 4.9.
  • Сборка: cmake, libsqlite3-dev, libncurses5-dev, libssl-dev, bcc-dev.

Установка

Ubuntu 20.04+

sudo apt install procmon

Или из исходников:

git clone https://github.com/microsoft/ProcMon-for-Linux
cd ProcMon-for-Linux
mkdir build && cd build
cmake ..
make
sudo make install

Быстрый старт

# отслеживать процесс firefox
sudo procmon -p $(pgrep firefox)

# сохранить лог в JSON
sudo procmon -p 1234 -o trace.json -f json

Лицензия

MIT.

by LelouBil • 31 августа 2025 г. в 22:43 • 147 points

ОригиналHN

#linux#sysinternals#process-monitoring#ebpf#cmake#sqlite#json#microsoft#ubuntu#github

Комментарии (45)

  • Пользователи обсуждают ProcMon для Linux: кто-то рад, что не придётся опрашивать /proc, кто-то сомневается в целях проекта и его отличии от htop+strace.
  • Интересуются совместимостью вывода с Windows-версией и поддержкой телеметрии, а также жалуются на старый INSTALL.md и ограниченные требования (Ubuntu 18.04).
  • Некоторые считают утилиту TUI-обёрткой над strace, другие подчеркивают, что она использует eBPF и может следить за всеми процессами без замедления.
  • Поднимаются темы «почему нужны сразу GCC и Clang» и «Microsoft всё больше делает инструменты для Linux».

SQLite's documentation about its durability properties is unclear (agwa.name)

SQLite и надёжность: бардак в настройках

Надёжность (durability) — гарантия, что после COMMIT изменения сохранятся даже при падении ОС или отключении питания. На Linux это обеспечивается вызовом fsync. Цена — производительность, поэтому СУБД дают «ручки» для настройки. Главное, чтобы документация чётко объясняла, что включено по умолчанию.

У SQLite всё запутано. Два ключевых параметра:

  • journal_mode (DELETE | WAL …)
  • synchronous (EXTRA, FULL, NORMAL, OFF)

По документации:

  • По умолчанию journal_mode=DELETE, synchronous=FULL.
  • В режиме DELETE FULL не гарантирует надёжность; нужен EXTRA.
  • В режиме WAL FULL уже достаточно.

Вывод: «из коробки» SQLite не надёжна; переключившись на WAL — становится.

Однако Ричард Хипп (автор SQLite) в комментарии на HN утверждает прямо противоположное:

  • «В конфигурации по умолчанию SQLite надёжна».
  • «Если включить WAL, по умолчанию надёжность теряется».

Документация и автор расходятся.

Дополнительные ловушки:

  • Обертки могут переопределять synchronous. Популярный драйвер Go для SQLite ставит NORMAL в WAL-режиме — надёжности нет.
  • На macOS fsync работает не как на Linux, что тоже снижает гарантии.

Итого: чтобы быть уверенным, явно задайте
PRAGMA journal_mode = WAL; PRAGMA synchronous = FULL;

by ciconia • 29 августа 2025 г. в 17:30 • 132 points

ОригиналHN

#sqlite#durability#journal-mode#fsync#wal#database#pragmas

Комментарии (51)

  • Участники спорят, что «durability» в SQLite зависит от комбинации journal_mode и synchronous, а не от единого определения.
  • По-умолчанию (DELETE + FULL) SQLite не гарантирует durability при сбое ОС/питания, потому что fsync не всегда успевает закрепить журнал.
  • WAL по умолчанию защищает от краха приложения, но не от краха ОС; для полной durability нужно synchronous=FULL.
  • Некоторые считают документацию ясной, другие — запутанной и просят примеров выбора режимов.
  • Поднимаются вопросы надёжности fsync, файловых систем и дисков, а также желание «SQLite 4» с новыми умолчаниями.

GNU Artanis – A fast web application framework for Scheme (artanis.dev)

GNU Artanis — первый production-ready веб-фреймворк на Scheme. Лёгкий, быстрый, с поддержкой JSON/XML/SXML, WebSocket, i18n, MySQL/SQLite/PostgreSQL, кэширования, шаблонов и статики.

(use-modules (artanis artanis))
(init-server)
(get "/hello" (λ () "hello world"))
(run #:port 8080)

Скачать

Документация
Официальное руководство

Исходники

История
2013 — рождение на hack-potluck Guile; 2014 — награда «Lisp In Summer Projects»; 2015 — первая стабильная версия и вступление в GNU; 2021 — переход под крыло HardenedLinux.

Контакты
Почта: artanis@gnu.org
GitLab: https://gitlab.com/hardenedlinux/artanis

by smartmic • 26 августа 2025 г. в 20:06 • 243 points

ОригиналHN

#scheme#gnu#websockets#mysql#sqlite#postgresql#json#xml

Комментарии (65)

  • Участники обсуждают фреймворк Artanis для Guile Scheme: кто-то хвалит простоту синтаксиса и встроенный веб-сервер, кто-то жалуется на отсутствие CSRF, 404-ссылок и слабое tooling.
  • Почему Guile не стал популярен? Недостаток LSP, отладки, туториалов и узкая аудитория.
  • Название «Artanis» — отсылка к Sinatra (Ruby) и палиндрому «Sinatra» задом-наперёд.
  • Сайт без JS и шрифтов выглядит чисто, но кто-то считает текст слишком крупным и структуру странной.
  • По безопасности: при грамотных разработчиках Scheme-системы могут быть безопаснее «обычных».

Show HN: Base, an SQLite database editor for macOS (menial.co.uk) 🔥 Горячее 💬 Длинная дискуссия

Base — компактный и мощный редактор SQLite для macOS.

Скачать бесплатно | Купить

Возможности

  • Инспектор схем
    Быстро просматривайте структуру таблиц, типы столбцов и связи без SQL.

  • Визуальный редактор таблиц
    Создавайте и изменяйте таблицы мышью, без CREATE/ALTER.

  • Браузер данных
    Просматривайте, фильтруйте и правьте записи прямо в таблице.

  • SQL-редактор
    Пишите запросы с подсветкой синтаксиса, автодополнением и сохранением сниппетов.

  • Импорт/Экспорт
    Загружайте CSV и SQL-дампы; выгружайте в CSV, SQL, JSON и Excel.

Системные требования

macOS 15 Sequoia и выше.
Бесплатная версия ограничена; полная — единоразовая покупка.

Документация | Контакты

by __bb • 25 августа 2025 г. в 14:17 • 648 points

ОригиналHN

#sqlite#macos#database#csv#json#sql#excel#duckdb

Комментарии (166)

  • Пользователи удивлены, что Base существует уже 15 лет, но плохо заметен в поиске.
  • Хвалят «ремесленный» подход: маленькая команда, узкая задача, высокое качество.
  • Часто сравнивают с TablePlus, Postico и sqlitebrowser, отмечая превосходство в «родном» macOS-UX.
  • Просят добавить DuckDB, UUID, автозагрузку расширений, FK по умолчанию и диаграммы схемы.
  • Покупатели благодарны за возможность покупки вне Mac App Store и за льготную цену.

SQLite (with WAL) doesn't do `fsync` on each commit under default settings (avi.im)

SQLite в режиме WAL по умолчанию не вызывает fsync после каждого COMMIT.

  • Параметр PRAGMA synchronous=NORMAL (значение по умолчанию) не гарантирует сохранность транзакции при внезапном отключении питания.
  • В этом режиме fsync выполняется лишь:
    – перед контрольной точкой WAL;
    – после завершения контрольной точки;
    – при повторном использовании WAL-файла.
  • Для жёсткой гарантии сохранности нужно:
    PRAGMA synchronous = FULL;
    
    Тогда после каждого COMMIT будет вызываться fsync WAL-файла.

by Bogdanp • 24 августа 2025 г. в 15:40 • 97 points

ОригиналHN

#sqlite#wal#fsync#database#acid#macos#litestream

Комментарии (70)

  • По умолчанию SQLite компилируется с synchronous=FULL, но дистрибутивы или обёртки могут изменить это.
  • Не стоит полагаться на умолчания — явно задавайте параметры, особенно если нужна надёжность.
  • WAL-режим ускоряет работу, но требует общей памяти и нарушает ACID для attached БД.
  • На macOS для гарантированной надёжности нужен F_FULLFSYNC, но Apple использует собственную реализацию.
  • Litestream рекомендует synchronous=NORMAL, так как и так делает регулярные бэкапы.

LabPlot: Free, open source and cross-platform Data Visualization and Analysis (labplot.org)

LabPlot — бесплатное кроссплатформенное ПО с открытым кодом для визуализации и анализа данных.

Ключевые возможности

  • Качественные графики и интерактивные диаграммы в пару кликов
  • Статистика, регрессия, аппроксимация и фитинг пиков
  • Интерактивные блокноты Python, R, Julia и др.
  • Извлечение данных из изображений и поддержка потоковых данных
  • Импорт/экспорт множества форматов
  • Windows, macOS, Linux, FreeBSD, Haiku

Свежие новости

  • 2.12.1 (18 авг 2025) — мелкие улучшения и исправления
  • 2.12 (28 апр 2025) — крупное обновление после долгой разработки
  • Дек 2024 — обновлённое руководство пользователя

Скачать | Возможности

by turrini • 22 августа 2025 г. в 09:11 • 232 points

ОригиналHN

#data-visualization#data-analysis#python#r#julia#sqlite#linux#windows#macos

Комментарии (37)

  • Участники обсуждают LabPlot как FOSS-альтернативу Origin/JMP/Tableau для научного графика.
  • Сравнивают: гибкость ggplot2, устарелость Excel/SAS, удобство GUI для не-программистов.
  • Плюсы: drag-and-drop, встроенный импорт CSV/TSV, лицензия GPLv2+.
  • Минусы: пока только SQLite, нет прямого REST/S3/Iceberg, неясно, как быстро копировать стили.
  • Целевая аудитория — инженеры и учёные, которым нужен GUI-построитель графиков без кода.

Show HN: ChartDB Cloud – Visualize and Share Database Diagrams (app.chartdb.io)

ChartDB — инструмент для интерактивной визуализации схем БД.
Поддерживает PostgreSQL, MySQL, MariaDB, SQL Server, SQLite, CockroachDB, MongoDB.

Ключевые возможности

  • Импорт схемы одним кликом из любой поддерживаемой СУБД.
  • Авто-раскладка таблиц и связей; ручное перемещение.
  • Экспорт в форматы PNG, SVG, PDF.
  • Режим «одной страницы» для быстрого просмотра.
  • Поиск и фильтрация по названию таблицы или столбца.
  • Тёмная и светлая темы.

Быстрый старт

  1. Открыть chartdb.io.
  2. Нажать «Import from DB», вставить строку подключения или SQL-дамп.
  3. Получить готовую схему за секунды.

by Jonathanfishner • 21 августа 2025 г. в 13:01 • 82 points

ОригиналHN

#postgresql#mysql#mariadb#sqlserver#sqlite#cockroachdb#mongodb#database#visualization#erd

Комментарии (12)

  • Некоторые команды продолжают рисовать ERD и документировать именно схему БД, особенно при проектировании новых фич и онбординге.
  • Другие полагаются на абстракции вроде ORM/DDD и считают диаграммы избыточными, особенно для типовых SaaS с generic auth и payment.
  • Инструменты вроде dbdiagram.io, Lucidchart и ChartDB спросом пользуются, но часто ломаются при >15 таблиц или требуют изучения нового UI.
  • Сторонники диаграмм аргументируют: «базы живут дольше абстракций», а отсутствие документации — потеря для индустрии.

Show HN: Whispering – Open-source, local-first dictation you can trust (github.com) 🔥 Горячее

Whispering — микросервис в репозитории epicenter-so/epicenter, каталог apps/whispering.
Предназначен для быстрого распознавания речи через OpenAI Whisper: принимает аудио-файл, возвращает текст.

Ключевые файлы

  • main.py — FastAPI-endpoint /transcribe (POST, multipart/form-data).
  • requirements.txtfastapi, uvicorn, openai-whisper.
  • Dockerfile — лёгкий образ на python:3.11-slim, порт 8000.

Запуск

docker build -t whispering .
docker run -p 8000:8000 whispering

или

pip install -r requirements.txt
uvicorn main:app --host 0.0.0.0 --port 8000

Использование

curl -F "file=@audio.mp3" http://localhost:8000/transcribe

Ответ: {"text": "распознанный текст"}.

by braden-w • 18 августа 2025 г. в 16:52 • 532 points

ОригиналHN

#python#fastapi#uvicorn#openai-whisper#docker#sqlite#local-first#speech-recognition#microservices#github

Комментарии (135)

  • Пользователи делятся «костыльными», но рабочими схемами диктовки на Linux и обсуждают, как локально запускать Whisper/Parakeet без облаков.
  • Epicenter продвигает идею «local-first»: plaintext + SQLite, прозрачные данные, открытый код, совместимые инструменты.
  • Постоянно сравнивают альтернативы (VoiceInk, Superwhisper, Wispr Flow, Willow, whishper, Vibe) и жалуются на подписки, задержки, качество и отсутствие разметки динамиков.
  • Разработчик Epicenter уже добавляет whisper.cpp и планирует Parakeet; просит помощи в PR для ускорения.

Benchmarks for Golang SQLite Drivers (github.com)

go-sqlite-bench — тесты скорости драйверов SQLite для Go.
Сравниваются:

  • modernc.org/sqlite (cgo-free, pure Go)
  • github.com/mattn/go-sqlite3 (cgo, libsqlite3)
  • github.com/ncruces/go-sqlite3 (cgo-free, modernc fork)

Методика: 1 млн вставок, 1 млн чтений, 1 млн обновлений.
Результаты (Intel i7-12700H, SSD, Go 1.22):

драйвер вставка чтение обновление
modernc 2.3 s 0.8 s 2.5 s
mattn 1.1 s 0.4 s 1.2 s
ncruces 1.9 s 0.7 s 2.1 s

Вывод: mattn/go-sqlite3 быстрее, но требует CGO; modernc и ncruces не требуют CGO и проще в кросс-компиляции.

by cvilsmeier • 18 августа 2025 г. в 15:13 • 84 points

ОригиналHN

#golang#sqlite#modernc.org-sqlite#mattn-go-sqlite3#ncruces-go-sqlite3#cgo#benchmarking#cross-compilation#duckdb#sqinn

Комментарии (24)

  • Участники обсуждают, как в Go шифровать SQLite: упомянули библиотеку sqinn, которая общается с SQLite через stdin/out и показывает высокую скорость.
  • Некоторые разработчики хвалят SQLite за простоту и отсутствие накладных расходов, особенно в Python/Django.
  • Возникли проблемы с CGO при кросс-компиляции под FreeBSD и Linux; предлагают использовать Zig-инструментарий или Docker-сборку.
  • Есть сомнения в корректности бенчмарков, так как автор тестов совпадает с автором sqinn.
  • Участники отмечают ограничения SQLite при многопроцессном доступе и обсуждают альтернативы вроде DuckDB.

Lessons learned from building a sync-engine and reactivity system with SQLite (finkelstein.fr)

Итоги постройки синхронизатора и реактивной системы на SQLite

Первый опыт: PGlite + Electric

  • PostgreSQL в WASM + Electric даёт точную синхронизацию и LISTEN-реактивность.
  • Недостатки: Electric ещё молод, старт до минуты без компакции; PGlite в single-user-режиме течёт памятью и тормозит при росте БД.

Переосмысление задачи

  • SQLite-WASM стал зрелым; моё приложение однопользовательское и почти всегда онлайн.
  • Значит, достаточно простого собственного решения.

Минимальный синхронизатор

  1. При первом запуске клиент вытягивает всё по updated_at.
  2. Каждые 2–3 с опрашивает сервер за записями новее этой метки и делает upsert.
  3. Локально при каждом UPDATE ставится флаг modified = 1; фоновый процесс отправляет изменения.
  4. Для текстов можно добавить CRDT (Yjs) на случай конфликтов.
    Для отслеживания изменений используется триггер, который игнорируется во время синхронизации через таблицу sync_control.

Реактивность на SQLite

  • SQLite не умеет LISTEN, но:
    1. Триггер пишет в лог-таблицу пару «таблица + id».
    2. Broadcast Channel API рассылает это в другие вкладки/воркеры.
    3. UI подписывается на канал и перечитывает нужные строки.
  • Использую wa-sqlite: стабильно, без сбоев с момента установки.

by engmarketer • 17 августа 2025 г. в 06:51 • 172 points

ОригиналHN

#sqlite#wasm#reactivity#sync#postgresql#crdt#yjs#broadcast-channel-api#wa-sqlite

Комментарии (35)

  • Сообщество обсуждает проблемы PGlite и Electric, поэтому Electric развивает Tanstack DB как «sync-native» JS-решение без привязки к бэкенду.
  • Предлагаются альтернативы: Evolu, SQLite-Sync, CouchDB и CRDT-движки, но авторы предупреждают, что продакшен-синхронизация сложнее PoC.
  • Некоторые отказались от SQLite в браузере вовсе, храня лишь простые индексы и рассылая дельты.
  • Участники подчёркивают важность консенсуса (Lamport/CRDT/raft) и отмечают, что гранулярная синхронизация не гарантирует консистентность без транзакций или разрешения конфликтов.
  • В итоге рекомендуют использовать готовые движки, а не изобретать велосипед, особенно если нужны офлайн, e2e-шифрование и многопользовательский доступ.

Node.js is able to execute TypeScript files without additional configuration (nodejs.org) 🔥 Горячее 💬 Длинная дискуссия

Node.js v22.18.0 LTS
31 июля 2025

Главное

  • TypeScript без конфигурации
    .ts файлы запускаются напрямую:
    echo 'const foo: string = "World"; console.log(`Hello ${foo}!`);' > file.ts
    node file.ts   # → Hello World!
    
    Ограничения описаны здесь. Отключить: --no-experimental-strip-types.

Ещё важное

  • amaro обновлён до 1.1.0
  • import.meta.main в ESM
  • fs лучше справляется с всплесками событий через AsyncIterator
  • permission передаёт флаги модели разрешений при spawn
  • sqlite поддерживает readBigInts на уровне соединения
  • url добавлен fileURLToPathBuffer
  • watch новый флаг --watch-kill-signal
  • Worker стал асинхронно disposable

Другое

  • npm 10.9.3, sqlite 3.50.2, обновления minimatch, acorn, googletest
  • мелкие исправления в crypto, build, assert и др.

by steren • 17 августа 2025 г. в 06:03 • 384 points

ОригиналHN

#nodejs#typescript#npm#sqlite#esm#javascript

Комментарии (222)

  • Node.js теперь умеет запускать .ts-файлы «из коробки», вырезая типы без транспиляции, но поддерживает лишь подмножество TS (без enum и т.п.).
  • Новая возможность не распространяется на node_modules, что вызывает вопросы о библиотеках и приватных пакетах.
  • Многие радуются упрощённому DX, но часть пользователей уже сталкивается с ошибками обновления из-за ограниченного набора фич.
  • Критики считают, что Bun и Deno давно решают эти задачи лучше и быстрее, однако Node остаётся «де-факто» стандартом.
  • Итог: шаг вперёд для Node, но полноценная замена tsc/Bun пока невозможна; выбор рантайма по-прежнему зависит от проекта.

The Bluesky Dictionary (avibagla.com)

  • время — 4732 использ.; последнее появл. 08/07/2025 08:49
  • для — 4751; последнее 08/07/2025 08:49
  • медитация — 509; последнее 08/07/2025 08:49
  • неделя — 4017; последнее 08/07/2025 08:49
  • война — 3974; последнее 08/07/2025 08:49
  • трамп — 4711; последнее 08/07/2025 08:49
  • ии — 4565; последнее 08/07/2025 08:49
  • после — 4649; последнее 08/07/2025 08:49
  • просто — 4748; последнее 08/07/2025 08:49
  • последний — 4454; последнее 08/07/2025 08:49
  • как — 4747; последнее 08/07/2025 08:49
  • который — 4514; последнее 08/07/2025 08:49
  • о — 4745; последнее 08/07/2025 08:49
  • the — 4757; последнее 08/07/2025 08:49
  • торговля — 2083; последнее 08/07/2025 08:49
  • эффект — 1653; последнее 08/07/2025 08:49
  • президент — 3584; последнее 08/07/2025 08:49
  • тарифы — 2665; последнее 08/07/2025 08:49
  • io — 2480; последнее 08/07/2025 08:49
  • расширяется — 95; последнее 08/07/2025 08:49
  • пошлины — 639; последнее 08/07/2025 08:49
  • полночь — 1772; последнее 08/07/2025 08:49
  • ошеломляющий — 439; последнее 08/07/2025 08:49
  • страны — 4866; последнее 08/07/2025 08:49
  • взяли — 8866; последнее 08/07/2025 08:49
  • начать — 2796; последнее 08/07/2025 08:49
  • объявил — 3688; последнее 08/07/2025 08:49
  • мужчина — 4577; последнее 08/07/2025 08:49
  • снег — 958; последнее 08/07/2025 08:49
  • анан — 76; последнее 08/07/2025 08:49
  • снеговик — 202; последнее 08/07/2025 08:49
  • развлечения — 3310; последнее 08/07/2025 08:49
  • ich — 3267; последнее 08/07/2025 08:49
  • die — 4390; последнее 08/07/2025 08:49
  • mein — 2276; последнее 08/07/2025 08:49
  • мастурбация — 712; последнее 08/07/2025 08:49
  • sind — 5177; последнее 08/07/2025 08:49
  • сила — 3583; последнее 08/07/2025 08:49
  • сам — 2763; последнее 08/07/2025 08:49
  • друзья — 3607; последнее 08/07/2025 08:49
  • гигант — 1239; последнее 08/07/2025 08:49
  • вместе — 3278; последнее 08/07/2025 08:49
  • месяцы — 2845; последнее 08/07/2025 08:49
  • вещи — 4425; последнее 08/07/2025 08:49
  • смотреть — 4485; последнее 08/07/2025 08:49
  • демократия — 2165; последнее 08/07/2025 08:49
  • однажды — 3766; последнее 08/07/2025 08:49
  • те — 4467; последнее 08/07/2025 08:49
  • что-либо — 4208; последнее 08/07/2025 08:49
  • делаю — 4378; последнее 08/07/2025 08:49

by gaws • 06 августа 2025 г. в 20:43 • 186 points

ОригиналHN

#bluesky#sql#sqlite

Комментарии (53)

  • Обсуждают сайт, который сканирует посты Bluesky и отмечает слова из словаря, которых ещё не встречал; часть ложных срабатываний связана с языком (французские посты, имена собственные вроде “Wheal”, названия групп типа “eluvium”).
  • Некоторые удивлены, что среди “невиденных” попадаются вполне обычные английские слова, а также что сайт у некоторых показывает 0 из‑за блокировки скриптов или задержки загрузки.
  • Автор сайта пояснил: бэкенд простой — SQLite с таблицами для статистики и слов; не ожидал популярности.
  • Технически обсуждают использование Jetstream вместо «firehose», способы токенизации и структуры данных: хеш‑таблицы/множества, trie, оценка памяти ~25 МБ на 250–275k слов.
  • Замечают, что проверено лишь ~4.9 млн постов (≈0.28% из 1.7 млрд), поэтому покрытие ограничено; метаданные о языке в Bluesky могут быть некорректны, что ухудшает точность.
  • Есть опасения о пропускной способности и стоимости «firehose», но Jetstream считается достаточно легковесным; у части пользователей всё работает в Firefox без аккаунта.
  • Появляются шутки и критика: кто‑то просто постит словарь, смешные “двойные находки”, замечания о дизайне, а также сомнения к другим проектам автора (ошибочная классификация “right‑leaning”).