Search
Write a publication
Pull to refresh
3
0

Пирожочек

Send message

A/B-тесты в PostgreSQL

Level of difficultyEasy
Reading time7 min
Views2.7K

Привет, Хабр! Сегодня разберём, как реализовать A/B-тестирование на чистом PostgreSQL, без выгрузки данных в сторонние системы. Рассмотрим полный цикл: от структуры таблиц и оптимизации запросов до статистического анализа (T-тест, Манна-Уитни, байесовские методы) и визуализации результатов.

Читать далее

Снимаем оковы Webpack: как мы ускорили сборку проекта в 10 раз, потратив меньше рабочего дня

Level of difficultyMedium
Reading time6 min
Views4.4K

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

Это касается и одного из самых ключевых этапов в разработке - сборка проекта. Множество проектов, на которых я работал, собирались (и собираются) с помощью Webpack. Это классический и проверенный временем инструмент: со своими преимуществами и недостатками.  

В какой-то момент недостатки стали перешивать:  

Читать далее

Переключение контекста — главный убийца продуктивности разработчика

Level of difficultyEasy
Reading time11 min
Views19K

Новый перевод от команды Spring АйО расскажет вам о том, почему так вредно отвлекать разработчиков от их работы и как избежать большого убытка для компании из-за прерывания рабочего процесса сотрудников.

Читать далее

Синхронизация файлов при запуске экземпляра PostgreSQL

Level of difficultyMedium
Reading time8 min
Views1.9K

Если экземпляр PostgreSQL был некорректно остановлен, то перед восстановлением файлов выполняется синхронизаций всех файлов кластера. Способ синхронизации определяется параметром конфигурации recovery_init_sync_method. В статье рассматривается, как ускорить запуск экземпляра и резервирование, если в директории PGDATA много файлов.

Читать далее

Запускаем код на Go снизу вверх

Level of difficultyMedium
Reading time7 min
Views3K

В этой статье, как небольшое дополнение к предыдущей, я хочу рассмотреть, как Go работает с AST, и заодно реализовать конструкцию InverseCode{} которая будет читать код снизу вверх силами компилятора.

Читать далее

Java-тестирование приватных методов

Level of difficultyEasy
Reading time11 min
Views2.3K

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

Сегодня я расскажу вам, как, зачем и когда тестировать приватные методы в Java.

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

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

Читать далее

Сколько стоит собрать топовый игровой ПК в 2025: RTX 4090 + Ryzen 7 9800X3D — оптимальная конфигурация для 4K-гейминга

Level of difficultyEasy
Reading time9 min
Views81K

Сборка мощного игрового ПК – задача, требующая внимательного подхода и глубокого понимания реальных возможностей комплектующих. Главенствующие позиции маркетологов, а не инженеров давно подвели рынок к той черте, когда переплата за косметические улучшения, не дающие практической пользы, стала обычным делом. А, между тем, делать на них ставку зачастую совершенно необязательно. В этой статье мы рассмотрим оптимальную сборку топового геймерского ПК, сосредоточившись на компонентах, которые действительно влияют на производительность и, как следствие, на игровой опыт.

Читать далее

Postgres как поисковый движок

Reading time12 min
Views11K

Поиск — это сложно. Важная часть многих приложений, которую нелегко реализовать правильно. Особенно в случае с RAG-пайплайнами, где на качество поиска завязан весь процесс.

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

Эрик Закариассон, разработчик и автор блога Anyblockers, рассмотрел в своей статье, как использовать Postgres для создания надёжной поисковой системы. В рамках задачи автор объединил три техники:

1. Полнотекстовый поиск с tsvector

2. Семантический поиск с pgvector

3. Нечёткое сопоставление с pg_trgm

4. Бонус: BM25

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

Читать далее

Вам не нужна Чистая архитектура. Скорее всего

Level of difficultyMedium
Reading time22 min
Views22K

Сейчас среди Java/Kotlin команд распространено применение Чистой (ака Гексагональной, ака Луковой — Clean, Hexagonal, Onion) архитектуры для разработки бакэндов прикладных приложений (да и Android‑приложений тоже). Однако это семейство архитектур в контексте прикладной разработки зачастую не даёт никаких преимуществ, а только привносит лишние церемонии и тем самым замедляет её.

В этом посте я подробно разбираю, почему, на мой взгляд Чистая архитектура не является лучшим выбором по умолчанию для прикладных приложений, и кратко рассказываю об альтернативной архитектуре (спойлер: Промышленная функциональная архитектура), которую использую в качестве дефолтной последние 3 года и пока что доволен.

Но перед тем как перейти к Чистой архитектуре, сначала надо разобрать принцип инверсии зависимостей (Dependency Inversion Principle, DIP).

Читать далее

Ретроспектива взломов Web3 за 2024 год

Reading time12 min
Views2.9K

Прошлый год продемонстрировал впечатляющее разнообразие атак на блокчейн-проекты. Хакеры находили способы извлечь выгоду как из уязвимостей смарт-контрактов, так и из ошибок пользователей. Ландшафт угроз оказался чрезвычайно разнообразным. Векторы атак варьировались от относительно простых методов, таких как фишинг и использование вредоносного программного обеспечения для компрометации устройств владельцев кошельков, до более сложных атак, требующих глубокого понимания работы блокчейн-протоколов, например эксплуатации ошибок reentrancy, и знания особенностей некоторых версий контрактов.

Меня зовут Елизавета, в настоящее время занимаюсь в Positive Technologies безопасностью блокчейна. В рамках этого обзора хочу познакомить вас с ключевыми трендами из мира безопасности web3 за 2024 год, расскажу про наиболее популярные методы и векторы атак, а также масштабы ущерба для индустрии.

Подробнее

Пишем свой загрузчик операционной системы Linux

Level of difficultyMedium
Reading time23 min
Views25K


Меня давно интересовал вопрос, насколько сложно написать собственный загрузчик операционной системы. Я не говорю о простой программе, выводящей «Hello, World!», а о полноценном загрузчике, который передаёт управление от встроенного программного обеспечения компьютера ядру операционной системы. Современные загрузчики представляют собой сложные программы, способные загружать множество операционных систем различными способами, учитывая массу нюансов, связанных с программным и аппаратным обеспечением. Читая их исходный код, легко утонуть в деталях и потерять понимание сути и реализации.


Я решил начать изучение с максимально простого подхода, постепенно усложняя задачи, экспериментируя и получая новые знания. Если мне удалось вас заинтересовать, добро пожаловать под кат.

Читать дальше →

Базовая архитектура сервиса на GO

Level of difficultyEasy
Reading time11 min
Views16K

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

Читать далее

Реализация постквантовых алгоритмов на Java и Go

Reading time4 min
Views3.9K


В последнее время в СМИ много публикаций о новых квантовых компьютерах, которые представляют угрозу для современной криптографии. Например, недавно Google сообщила о разработке квантового процессора Willow, который в специально сформулированной задаче превышает производительность самого мощного суперкомпьютера в септиллион раз (септиллион = 1025).

Хотя квантовая криптография быстро развивается, ей ещё далеко до того, чтобы угрожать современной криптографии. Более того, разработан ряд постквантовых алгоритмов и шифров, которые устойчивы к квантовым вычислениям.
Читать дальше →

Разработка пользовательских агрегатных функций для аналитики в MySQL

Level of difficultyEasy
Reading time7 min
Views1.1K

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

Вы когда-нибудь писали аналитические запросы в MySQL и понимали, что встроенных функций вам не хватает? Хотите посчитать медиану зарплат? 99-й процентиль времени ответа запросов? Собрать JSON-массив прямо в базе данных?

В MySQL нет MEDIAN(), PERCENTILE_CONT() и нормального способа объединить данные в JSON. Всё приходится делать через костыли.

Решение? Написать собственную агрегатную функцию на C++, которая будет работать так же, как SUM() и AVG(), но делать то, что вам реально нужно.

Читать далее

Как сделать своё хранилище образов контейнеров

Level of difficultyMedium
Reading time6 min
Views9.6K

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

Читать далее

Ordered map на Go

Reading time2 min
Views2.5K

Omap — это пакет Golang для работы с потокобезопасными упорядоченными map. Упорядоченная map содержит map golang, list и mutex для выполнения функций упорядоченной map.

Упорядоченная map— это map, которая запоминает порядок элементов. Map можно итерировать для извлечения элементов в том порядке, в котором они были добавлены.

Читать далее

О чем говорит YouTube

Reading time7 min
Views11K
image

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

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

В моем проекте пользователи создают и обмениваются сотнями различных материалов: текстом, картинками, видеороликами, статьями, документами в различных форматах.

Поиск по документам представляется достаточно просто. Но что делать с поиском по мультимедиа контенту? Для полноценного сервиса пользователя надо обязать заполнить описание, дать название видеоролику или картинке, не помешает несколько тегов. К сожалению, далеко не все хотят тратить время на подобные улучшения контента. Обычно пользователь загружает ссылку на youtube, сообщает что это новое видео и нажимает сохранить. Что же делать сервису с таким “серым” контентом. Первая идея — спросить у YouTube? Но YouTube тоже наполняют пользователи (часто это один и тот же пользователь). Часто видеоматериал может быть и не с Youtube сервиса.
Так мне пришла идея научить наш сервис “слушать” видеоролик и самостоятельно “понимать”, о чем он.
Читать дальше →

Настраиваем память JVM-приложения в Kubernetes

Reading time6 min
Views25K

Друзья, всем привет! Как известно, в Kubernetes у каждого pod’а есть ограничение на  использование памяти (limits.memory), и, как показывает опыт, далеко не всегда очевидно, как JVM-приложение интерпретирует эту настройку, что порой может приводить к OOMKill.

 

Читать далее

Information

Rating
Does not participate
Registered
Activity