Pull to refresh
2
0

Fullstack dev

Send message

Техника TOAST (The Oversized-Attribute Storage Technique) в PostgreSQL

Level of difficultyMedium
Reading time13 min
Reach and readers1.4K

Если строка не помещается в блок (страницу), то в PostgreSQL применяется техника выноса полей в отдельную таблицу, называемую TOAST-таблица. Техника выноса и хранения называется TOAST (The Oversized-Attribute Storage Technique, техника хранения атрибутов большого размера). В статье достаточно детально рассматривается алгоритм работы TOAST. Знание алгорима и его граничные значения полезно, чтобы понимать каким образом хранятся данные в таблицах.

Читать далее

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

Reading time12 min
Reach and readers7.1K

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

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

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

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

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

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

4. Бонус: BM25

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

Читать далее

Обработка ошибок Axios

Reading time10 min
Reach and readers3.4K

Привет, Хабр! Меня зовут Алёна, я senior фронтенд-разработчик отдела разработки ПО для розничного бизнеса в Райффайзенбанке. Недавно передо мной встала задача улучшения пользовательского опыта обработки ошибок запросов к бэкенду. Я решила комплексно исследовать эту тему на примере HTTP-клиента Axios.

Если при отправке запросов с помощью Axios возникает ошибка — клиентское приложение получает аргумент, который может быть экземпляром объекта, производного от системного класса Error, или любым типом. Он может содержать много информации и не всегда понятно, что самое важное для определения типа исключения и способа обработки. Поэтому я выделала 4 категории ошибок запросов, сделанных при помощи Axios, которые нужно по-разному интерпретировать.

Читать далее

Чеклист для tsconfig.json

Level of difficultyMedium
Reading time15 min
Reach and readers6.3K



В этой статье я расскажу о настройках TypeScript, определяемых в файле tsconfig.json, которых я использую в своих проектах.


❯ 1. Возможности, не затрагиваемые в этой статье


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


Также мы не будем говорить о следующем:


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

Обзор Kotlin Flow

Level of difficultyEasy
Reading time5 min
Reach and readers5.1K

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

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

Читать далее

Разработка эффективных агентов с помощью Spring AI (Часть 1)

Level of difficultyEasy
Reading time8 min
Reach and readers3.2K

Команда Spring АйО перевела статью, в которой рассказывается про разработку эффективных агентов с помощью Spring AI. Исследование Anthropic "Building effective agents" подчеркивает важность простоты и модульности в разработке LLM-агентов.

В статье рассматривается, как эти принципы реализуются в Spring AI через пять ключевых паттернов: Chain Workflow, Parallelization Workflow, Routing Workflow, Orchestrator-Workers и Evaluator-Optimizer.

Читать далее

Книга: «Эффективный TypeScript: 83 способа улучшить код. 2-е изд.»

Reading time5 min
Reach and readers2.6K
imageПривет, Хаброжители!

В 2020 году у издательского дома «Питер» вышел перевод «Эффективный TypeScript: 62 способа улучшить код», и книга сразу стала бестселлером. Прошло почти полных четыре года! Многое изменилось с тех пор, в том числе и вышла новая версия TypeScript. Дэн Вандеркам полностью переработал книгу, и мы представляем вам новый «Эффективный TypeScript: 83 способа улучшить код. 2-е изд.». Подробный! Понятный! С неизменным скворцом на обложке!

Но обо всём по порядку.
Читать дальше →

PostgreSQL 13: happy pagination WITH TIES

Reading time2 min
Reach and readers13K
На прошедшей неделе вышло сразу две статьи (от Hubert 'depesz' Lubaczewski и автора самого патча Alvaro Herrera), посвященные реализованной в грядущей версии PostgreSQL 13 поддержке опции WITH TIES из стандарта SQL:2008:
OFFSET start { ROW | ROWS }
FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } { ONLY | WITH TIES }
Что это, и как оно избавляет от проблем с реализацией пейджинга, о которых я рассказывал в статье «PostgreSQL Antipatterns: навигация по реестру»?


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

Что нового в Spring Boot 3.4: Spring Security

Level of difficultyEasy
Reading time10 min
Reach and readers1.9K

Команда Spring АйО перевела статью об улучшениях Spring Security 6.4.1 в новом релизе.

В новой версии поддержаны современные методы аутентификации, такие как Passkeys и одноразовые OTTs токены. Josh Long называет этот релиз doozie - что-то сильно потрясающее. Действительно ли это так?

Читать далее

Как развернуть React приложение с помощью AWS S3 и CloudFront

Reading time13 min
Reach and readers8.6K

Создадим приложение с использованием фреймворка Next.js, настроим облачные сервисы Amazon S3, Amazon CloudFront, AWS Lambda@Edge, развернем приложение и настроим маршрутизацию доменного имени.

Читать далее

Kotlin Coroutines под капотом: отмена корутин

Reading time24 min
Reach and readers6.9K

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

Читать далее

Decompose: покоряем Generic-навигацию на примере навигации по вкладкам

Level of difficultyMedium
Reading time19 min
Reach and readers1.5K

Разберемся, как работать с Generic Navigation, которую предоставляет Decompose, на примере табов — навигации, часто используемой браузерах.

Generic Navigation помогает управлять жизненным циклом дочерних компонентов через концепцию навигации — некоторое поведение, привычное пользователю.

Читать далее

pg-index-health – статический анализ структуры PostgreSQL баз данных

Level of difficultyHard
Reading time19 min
Reach and readers4.4K

С 2019 года я занимаюсь разработкой open source инструмента под названием pg-index-health, который позволяет анализировать структуру БД и находить потенциальные проблемы.

Все эти годы pg-index-health эволюционировал и развивался. За 2024 год мне при поддержке нескольких контрибьюторов удалось решить большинство остававшихся «детских болячек» и довести проект до состояния, когда он готов к масштабной экспансии.

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

Читать далее

Получение SQL для PostgreSQL из DAX на основе AI

Reading time3 min
Reach and readers2.2K

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

Тем, кто интересуется «переводом» DAX на PostgreSQL — добро пожаловать под кат :)

Читать далее

Performance и оптимизация TypeScript-типов в больших проектах

Level of difficultyMedium
Reading time8 min
Reach and readers7K

Узнайте, почему большие TypeScript-проекты начинают "захлёбываться" от рекурсивных типов и обилия импортов, и как с помощью правильной структуры монорепы, настройки tsconfig и диагностики ускорить время компиляции и работу IDE. Рассматриваем инструменты, параллельную сборку, оптимизацию рекурсивных типов и прочие техники, которые помогут сохранить ваш проект быстрым и удобным.

Читать далее

Волшебные ссылки теперь в Spring Security

Level of difficultyHard
Reading time4 min
Reach and readers4.6K

Концепция волшебных ссылок (magic link) далеко не нова, однако долгое время у разработчиков не было надежного решения с полноценным комьюнити, которое позволяло бы быстро и просто реализовывать волшебные ссылки в своих приложениях. И вот, наконец, такая фича появилась в spring security. Давайте подробно разберем что у нас получилось, какие проблемы остались, и что планируется реализовать.

Читать далее

Парольная защита статичной HTML-страницы на JS

Reading time3 min
Reach and readers5.5K


Обычно парольная защита производится через веб-сервер, который проверяет пароль и выдаёт контент. Стандартный способ: .htaccess и htpasswd. Но что, если нужно выложить зашифрованную веб-страницу и файлы на публичном хостинге, где у нас нет контроля над сервером? Эту проблему решают инструменты StatiCrypt и Portable Secret.

Для шифрования HTML перед публикацией StatiCrypt использует AES-256 и WebCrypto, а расшифровка происходит с помощью ввода пароля в браузере на стороне клиента, как показано в демо (пароль test).

StatiCrypt генерирует статическую страницу, которую можно безопасно заливать на любой хостинг, в том числе бесплатный сторонний хостинг, такой как GitHub Pages.
Читать дальше →

Gradle: Исправление зависимостей в один клик

Level of difficultyEasy
Reading time11 min
Reach and readers2.2K

Работаете с Gradle? Dependency Analysis Gradle Plugin помогает не только находить лишние зависимости, но и автоматически исправлять проблемы с ними.

Механизм fixDependencies переписывает скрипты сборки, чтобы они соответствовали реальной структуре проекта. Последние обновления сделали процесс анализа ещё точнее, а работу с Kotlin DSL — проще и надёжнее. Читайте про фикс зависимостей в один клик в новом переводе от команды SpringАйО.

Читать далее

TS Extend: полезная утилитарная функция для расширения type

Reading time3 min
Reach and readers1.7K

В текущей версии TS (5.7) нет нативного расширения типов.

Расширение в TS реализуют интерфейсы через ключевое слово extend, причем интерфейсы могут быть расширены только от одного объекта.

Хотя для типов (type/interface) предусмотрена операция интерсекции (&), которая объединяет свойства двух или более типов - она обладает важным ограничивающим свойством - при наличии одинаковых свойств, операция интерсекции присваивает их результирующему типу значение never.

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

Читать далее

Information

Rating
Does not participate
Date of birth
Registered
Activity

Specialization

Бэкенд разработчик, Фронтенд разработчик
Старший
From 8,000 €
SQL
Git
Docker
ООП
Linux
Java
Spring Boot
PostgreSQL
Java Spring Framework
Gradle