Как отсекать партиции PostgreSQL при поиске не по ключу разбиения
Таблица событий разбита по времени, но запрос по
Приём применим, когда события только добавляются, ID сессий растут последовательно, а сессии обычно длятся минуты или часы. Тогда ID связан со временем: для каждой партиции можно задать его диапазон через
В обстоятельной статье Хаки Бениты разобраны локальные и глобальные индексы, выбросы и схема «пробелы и острова». Материал пригодится тем, кто выбирает ключ разбиения таблицы: проверьте связь данных и план через
Таблица событий разбита по времени, но запрос по
session_id обращается ко всем партициям. Локальный индекс ускоряет поиск в каждой, однако их число не сокращает: при сотне партиций это похоже на запрос к сотне таблиц.Приём применим, когда события только добавляются, ID сессий растут последовательно, а сессии обычно длятся минуты или часы. Тогда ID связан со временем: для каждой партиции можно задать его диапазон через
CHECK. Оптимизатор исключит партицию, где нужного ID быть не может. В примере для ID 1000 сканируется только партиция 2025 года вместо двух.В обстоятельной статье Хаки Бениты разобраны локальные и глобальные индексы, выбросы и схема «пробелы и острова». Материал пригодится тем, кто выбирает ключ разбиения таблицы: проверьте связь данных и план через
EXPLAIN, прежде чем закреплять диапазоны ограничениями.Почему одинаковый nvJPEG2000 даёт разные результаты в тестах
Обстоятельный разбор показывает, как границы таймера и подача кадров меняют результаты nvJPEG2000 на RTX 4090. Асинхронная очередь GPU делает методику частью результата.
В образце NVIDIA декодирование замеряют CUDA-событиями корректно, но разбор сжатого потока считают в целых секундах. Миллисекунды превращаются в ноль, поэтому число охватывает лишь часть работы. В подробном разборе методики авторский стенд включает оба этапа; код и логи открыты.
Есть и второй подвох: восемь потоков с двумя кадрами в работе дают 16 одновременных задач, хотя пакетного вызова у библиотеки нет. Разбор пригодится разработчикам GPU-конвейеров и авторам бенчмарков: сверяйте не только кадры в секунду, но и границы таймера, синхронизацию и число активных кадров.
Обстоятельный разбор показывает, как границы таймера и подача кадров меняют результаты nvJPEG2000 на RTX 4090. Асинхронная очередь GPU делает методику частью результата.
В образце NVIDIA декодирование замеряют CUDA-событиями корректно, но разбор сжатого потока считают в целых секундах. Миллисекунды превращаются в ноль, поэтому число охватывает лишь часть работы. В подробном разборе методики авторский стенд включает оба этапа; код и логи открыты.
Есть и второй подвох: восемь потоков с двумя кадрами в работе дают 16 одновременных задач, хотя пакетного вызова у библиотеки нет. Разбор пригодится разработчикам GPU-конвейеров и авторам бенчмарков: сверяйте не только кадры в секунду, но и границы таймера, синхронизацию и число активных кадров.
❤1
Как собрать GraphRAG для данных ServiceNow на Python и Neo4j
Обстоятельная книга о пути от данных ServiceNow до ответов языковой модели. Python читает записи, Neo4j связывает их в граф, а найденные сущности становятся контекстом для ответа.
На 39 заранее записанных вопросах автор сравнивает восемь методов извлечения: от ключевых слов до обхода графа. Ни один не ответил на исходный вопрос книги.
Материал пригодится разработчикам поиска и внутренних баз знаний: он показывает, как заранее определить тесты, сравнить подходы и зафиксировать провалы.
Обстоятельная книга о пути от данных ServiceNow до ответов языковой модели. Python читает записи, Neo4j связывает их в граф, а найденные сущности становятся контекстом для ответа.
На 39 заранее записанных вопросах автор сравнивает восемь методов извлечения: от ключевых слов до обхода графа. Ни один не ответил на исходный вопрос книги.
Материал пригодится разработчикам поиска и внутренних баз знаний: он показывает, как заранее определить тесты, сравнить подходы и зафиксировать провалы.
Как настроить распределённую трассировку Java-микросервисов с OpenTelemetry
Обстоятельный разбор OpenTelemetry показывает, как связать путь запроса через Java-микросервисы и найти сервис, запрос к базе или внешний вызов, который добавляет задержку.
Карта материала:
1. почему разрозненные логи и метрики не восстанавливают путь запроса;
2. как SDK собирает трассы, метрики и логи, а процессоры фильтруют и группируют их;
3. как подключить Maven, экспорт по OTLP, Jaeger и собственные участки трассы.
Примеры рассчитаны на Spring Boot 3.x и OpenTelemetry 1.35.0: стартер автоматически охватывает HTTP, JDBC, JPA, Kafka и RabbitMQ. Локальный Jaeger запускается через Docker Compose; бизнес-операции можно размечать собственными участками трассы.
Подойдёт Java-бэкендерам и SRE: на тестовом стенде проверьте сквозной идентификатор trace_id, а перед рабочей средой пересмотрите выборку в 100%.
Обстоятельный разбор OpenTelemetry показывает, как связать путь запроса через Java-микросервисы и найти сервис, запрос к базе или внешний вызов, который добавляет задержку.
Карта материала:
1. почему разрозненные логи и метрики не восстанавливают путь запроса;
2. как SDK собирает трассы, метрики и логи, а процессоры фильтруют и группируют их;
3. как подключить Maven, экспорт по OTLP, Jaeger и собственные участки трассы.
Примеры рассчитаны на Spring Boot 3.x и OpenTelemetry 1.35.0: стартер автоматически охватывает HTTP, JDBC, JPA, Kafka и RabbitMQ. Локальный Jaeger запускается через Docker Compose; бизнес-операции можно размечать собственными участками трассы.
Подойдёт Java-бэкендерам и SRE: на тестовом стенде проверьте сквозной идентификатор trace_id, а перед рабочей средой пересмотрите выборку в 100%.
Как вынести тени в отдельные проходы Custom SRP в Unity
Обстоятельное продолжение серии о собственном конвейере рендеринга на Unity 6000.5.8f1. Рефакторинг ведут поэтапно: после каждого раздела тени остаются рабочими, поэтому материал читается как карта безопасного изменения архитектуры.
Сначала объект Shadows уходит из LightingPass под управление CameraRenderer. Затем LightingPass получает структуру Handles и возвращает только буферы освещения. После появляется отдельный ShadowsPass: он строит списки отрисовки, запускает рендеринг теней и отдаёт их дескрипторы.
Дальше код из Shadows переносят в новый проход, чтобы затем разделить обработку направленных и остальных источников света.
Разбор с правками кода полезен тем, кто уже строит Custom SRP. Ориентир для рефакторинга: разделяйте владение состоянием и запись проходов небольшими шагами, проверяя тени после каждого.
Обстоятельное продолжение серии о собственном конвейере рендеринга на Unity 6000.5.8f1. Рефакторинг ведут поэтапно: после каждого раздела тени остаются рабочими, поэтому материал читается как карта безопасного изменения архитектуры.
Сначала объект Shadows уходит из LightingPass под управление CameraRenderer. Затем LightingPass получает структуру Handles и возвращает только буферы освещения. После появляется отдельный ShadowsPass: он строит списки отрисовки, запускает рендеринг теней и отдаёт их дескрипторы.
Дальше код из Shadows переносят в новый проход, чтобы затем разделить обработку направленных и остальных источников света.
Разбор с правками кода полезен тем, кто уже строит Custom SRP. Ориентир для рефакторинга: разделяйте владение состоянием и запись проходов небольшими шагами, проверяя тени после каждого.
Как устроена криптография Ethereum-кошелька на Go
Статья о цепочке «создать ключ, получить адрес, подписать транзакцию»: автор собирает учебный CLI-кошелёк на Go и показывает детали, от которых зависят совместимость и безопасность.
В практическом разборе разбираются BIP39, путь BIP44 и соглашения для поля
Тест «зашифровали и расшифровали» не нашёл ошибку в параметрах scrypt: обе операции повторяли её. Нужен эталонный набор данных.
CLI создан для обучения, не для реальных средств. Читайте, если хотите проверить реализацию Ethereum-стандартов в Go.
Статья о цепочке «создать ключ, получить адрес, подписать транзакцию»: автор собирает учебный CLI-кошелёк на Go и показывает детали, от которых зависят совместимость и безопасность.
В практическом разборе разбираются BIP39, путь BIP44 и соглашения для поля
v, защищающего транзакции от повторного воспроизведения.Тест «зашифровали и расшифровали» не нашёл ошибку в параметрах scrypt: обе операции повторяли её. Нужен эталонный набор данных.
CLI создан для обучения, не для реальных средств. Читайте, если хотите проверить реализацию Ethereum-стандартов в Go.
Как исследовать легаси-код с ИИ до первого рефакторинга
Гайд по «археологии» незнакомой системы: странное условие или повторный расчёт могут хранить бизнес-исключение либо внешний контракт. ИИ здесь нужен для поиска вопросов, а не мгновенной переписи кода.
Начните с карты репозитория и точек входа: HTTP-запросов, фоновых задач, скриптов, импортов и вебхуков. Каждый вывод модели должен ссылаться на конкретные файлы, а сомнения нужно отмечать явно.
Готовые запросы к ИИ и маршрут анализа пригодятся при миграции или работе со старым проектом. До рефакторинга составьте проверяемую карту системы и список открытых вопросов.
Гайд по «археологии» незнакомой системы: странное условие или повторный расчёт могут хранить бизнес-исключение либо внешний контракт. ИИ здесь нужен для поиска вопросов, а не мгновенной переписи кода.
Начните с карты репозитория и точек входа: HTTP-запросов, фоновых задач, скриптов, импортов и вебхуков. Каждый вывод модели должен ссылаться на конкретные файлы, а сомнения нужно отмечать явно.
Готовые запросы к ИИ и маршрут анализа пригодятся при миграции или работе со старым проектом. До рефакторинга составьте проверяемую карту системы и список открытых вопросов.
Как запускать асинхронное GRPO без общей машины
Обстоятельный разбор рабочей системы: тренер с LoRA и серверы генерации работают в отдельных Hugging Face Jobs, без общей машины и межузлового обмена через NCCL.
Тренер кладёт адаптер в объектное хранилище, которое каждый Job видит как файловую систему. Прокси добавляет авторизацию, выбирает реплику, где уже вычислено начало запроса, и сообщает всем репликам о новой версии.
Адаптер ранга 1 для модели на 1,5 млрд параметров занимает несколько мегабайт против примерно 3 ГБ у полной модели. При max_staleness=4 нужны шесть слотов LoRA, иначе vLLM может вытеснить версию с незавершёнными запросами.
Схема и пять последовательных прогонов показывают, где искать узкое место: 500 шагов удалось сократить с 3 часов 27 минут до 53 минут. Читать ML-инженерам, которые разносят обучение и генерацию по отдельным машинам.
Обстоятельный разбор рабочей системы: тренер с LoRA и серверы генерации работают в отдельных Hugging Face Jobs, без общей машины и межузлового обмена через NCCL.
Тренер кладёт адаптер в объектное хранилище, которое каждый Job видит как файловую систему. Прокси добавляет авторизацию, выбирает реплику, где уже вычислено начало запроса, и сообщает всем репликам о новой версии.
Адаптер ранга 1 для модели на 1,5 млрд параметров занимает несколько мегабайт против примерно 3 ГБ у полной модели. При max_staleness=4 нужны шесть слотов LoRA, иначе vLLM может вытеснить версию с незавершёнными запросами.
Схема и пять последовательных прогонов показывают, где искать узкое место: 500 шагов удалось сократить с 3 часов 27 минут до 53 минут. Читать ML-инженерам, которые разносят обучение и генерацию по отдельным машинам.
Почему 118 зелёных тестов не спасли MQTT-брокер на Rust
Обстоятельный инженерный разбор MQTT-брокера, написанного на Rust без сторонних пакетов. 118 автоматических тестов прошли, но mosquitto_pub в режиме доставки QoS 1 ждал подтверждения четыре секунды и завершался по тайм-ауту.
Тесты проверяли кодирование пакета подтверждения PUBACK, однако обработчик вообще его не отправлял. После разделения реестра тем на четыре сегмента вскрылся второй сбой: подписка sensors/+/temp и публикация sensors/kitchen/temp попадали в разные сегменты.
В разборе BlitzBroker есть и замер: около 495 тыс. сообщений в секунду против 402 тыс. у одного сегмента.
Читать разработчикам сетевых протоколов и интеграционных тестов. Проверяйте собранный бинарник независимым клиентом: подтверждения, подписки с подстановкой и переполнение очередей.
Обстоятельный инженерный разбор MQTT-брокера, написанного на Rust без сторонних пакетов. 118 автоматических тестов прошли, но mosquitto_pub в режиме доставки QoS 1 ждал подтверждения четыре секунды и завершался по тайм-ауту.
Тесты проверяли кодирование пакета подтверждения PUBACK, однако обработчик вообще его не отправлял. После разделения реестра тем на четыре сегмента вскрылся второй сбой: подписка sensors/+/temp и публикация sensors/kitchen/temp попадали в разные сегменты.
В разборе BlitzBroker есть и замер: около 495 тыс. сообщений в секунду против 402 тыс. у одного сегмента.
Читать разработчикам сетевых протоколов и интеграционных тестов. Проверяйте собранный бинарник независимым клиентом: подтверждения, подписки с подстановкой и переполнение очередей.
Как переводить целые книги с LLM и не терять контекст
Практический разбор Python-пайплайна для EPUB и PDF. Книгу делят по главам, затем на фрагменты по 2 000–4 000 токенов. В новый запрос обычно добавляют два последних абзаца только как контекст и словарь имён и терминов: так связность сохраняется без повторного перевода.
В разборе пайплайна есть код для подсчёта токенов и разбиения абзацев. Внутри главы запросы идут по очереди: следующий зависит от предыдущего. Параллельно обрабатывают разные книги. Для романа на 100 000 токенов авторы приводят ориентир: около 30 запросов и 4–6 минут.
Сохраните разбор, если работаете с длинными документами. Инженерный вывод: перекрытие фрагментов и отдельная память о терминах улучшают связность, но зависимые части придётся обрабатывать по очереди.
Практический разбор Python-пайплайна для EPUB и PDF. Книгу делят по главам, затем на фрагменты по 2 000–4 000 токенов. В новый запрос обычно добавляют два последних абзаца только как контекст и словарь имён и терминов: так связность сохраняется без повторного перевода.
В разборе пайплайна есть код для подсчёта токенов и разбиения абзацев. Внутри главы запросы идут по очереди: следующий зависит от предыдущего. Параллельно обрабатывают разные книги. Для романа на 100 000 токенов авторы приводят ориентир: около 30 запросов и 4–6 минут.
Сохраните разбор, если работаете с длинными документами. Инженерный вывод: перекрытие фрагментов и отдельная память о терминах улучшают связность, но зависимые части придётся обрабатывать по очереди.
❤🔥1
Как ИИ меняет большие миграции: опыт Asana, Airbnb и Uber
В обстоятельном разборе крупных миграций важно сравнение процессов: срок одной компании нельзя переносить в свой план.
Asana начала перенос 4 000+ файлов с Enzyme на React Testing Library в 2024 году, обработала около 25%, а остаток завершила с ИИ за две недели и $12 000. Пять лет до этого были сроком низкоприоритетной миграции, а не непрерывной работы команды.
Сначала спроектируйте проверку результата, затем оценивайте, сколько типовых изменений можно поручить ИИ.
В обстоятельном разборе крупных миграций важно сравнение процессов: срок одной компании нельзя переносить в свой план.
Asana начала перенос 4 000+ файлов с Enzyme на React Testing Library в 2024 году, обработала около 25%, а остаток завершила с ИИ за две недели и $12 000. Пять лет до этого были сроком низкоприоритетной миграции, а не непрерывной работы команды.
Сначала спроектируйте проверку результата, затем оценивайте, сколько типовых изменений можно поручить ИИ.
Как искать нарушения IEEE 754 в математических ядрах ИИ-ускорителей
Обстоятельный разбор аудита tt-metal показывает, почему случайные тесты не заменяют таблицу особых значений. Функция ttnn.atan2 для +∞ и +0 возвращала 0 вместо π/2: конечный диапазон тестов этот случай не создавал.
Карта расследования:
1. Заранее записать эталон для ±0, ±∞, NaN и значений у границ диапазона;
2. восстановить алгоритм ядра и вручную провести через него каждый случай;
3. заменить ошибочную проверку
4. закрепить точные входы детерминированным тестом.
В полном разборе поиска и исправления ошибки ценен порядок работы: спецификация идёт раньше кода, а крайние значения становятся регрессионными тестами. Читать разработчикам вычислительных библиотек и ML-инфраструктуры, которые проверяют численную корректность ускорителей.
Обстоятельный разбор аудита tt-metal показывает, почему случайные тесты не заменяют таблицу особых значений. Функция ttnn.atan2 для +∞ и +0 возвращала 0 вместо π/2: конечный диапазон тестов этот случай не создавал.
Карта расследования:
1. Заранее записать эталон для ±0, ±∞, NaN и значений у границ диапазона;
2. восстановить алгоритм ядра и вручную провести через него каждый случай;
3. заменить ошибочную проверку
min == 0 на max == 0 во всех трёх аппаратных копиях;4. закрепить точные входы детерминированным тестом.
В полном разборе поиска и исправления ошибки ценен порядок работы: спецификация идёт раньше кода, а крайние значения становятся регрессионными тестами. Читать разработчикам вычислительных библиотек и ML-инфраструктуры, которые проверяют численную корректность ускорителей.