Pull to refresh
-1
0.1
Send message

GRASP: почему настоящая архитектура начинается не с SOLID

Level of difficultyMedium
Reading time12 min
Views48K

Хочу начать с личной предыстории. Давным‑давно, как и многие из вас, я читал умные книжки: «Чистый код» и «Чистая архитектура» Роберта Мартина, «Совершенный код» Стива Макконнелла и другие.

Также не обошли меня и классические принципы проектирования — SOLID, KISS, DRY — и, думаю, каждый читатель добавит сюда свои.

Безусловно, это всё важные и фундаментальные вещи.

Но однажды на горизонте появилось DDD — предметно‑ориентированное проектирование в изложении Эрика Эванса. Именно его «синяя книга» стала культовой и задала язык для архитектурного мышления.

Позже я открыл и «красную книгу» Вона Вернона, где DDD уже рассматривался с точки зрения практической имплементации: архитектура, код, реальные подходы в проектах.

Читая Эванса, рассматривая его диаграммы классов и примеры кода, я всё думал: как он это делает?

Самым большим открытием для меня стало то, что книга DDD хоть и показывает стратегические и тактические приёмы — агрегаты, объекты‑значения, спецификации, фабрики и т. д. — но не учит проектировать саму предметную область.

Складывалось ощущение, что мы это уже откуда‑то должны были знать. А откуда — остаётся загадкой.

Читать далее

Мониторинг бэкапов PostgreSQL, сделанных в pg_probackup

Level of difficultyMedium
Reading time2 min
Views3.4K

Хочу поделиться с сообществом свой наработкой по мониторингу бэкапов PostgreSQL.

Для того чтобы делать сами бэкапы, используется сторонний open source инструмент pg_probackup (разработка компании Postgres Professional).

Этот инструмент умеет делать инкрементные бэкапы, а также автоматизирует сопутствующие процессы, такие как, сжатие данных, merge, удаление старых бэкапов и wal-файлов.

Остается проблема мониторинга. Предположим, мы настроили pg_probackup и он трудится упорно, вызываемый регулярно через cron.

Как мы узнаем, о том, что что-то сломалось?

Для решения этой проблемы был написан небольшой экспортер метрик pg_probackup для Prometheus.

Читать далее

Клонируем правильно: structuredClone() в JS

Level of difficultyEasy
Reading time4 min
Views2.7K

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

Глубокое копирование в JavaScript всегда было немного проблемой. До тех пор, пока в языке не появился structuredClone() — метод, который решил многие наши проблемы.

Читать далее

Qwen2.5-Omni: Мультимодальная модель нового поколения

Level of difficultyEasy
Reading time8 min
Views3.1K

🚀 Qwen2.5-Omni — революция в мире искусственного интеллекта!

Представьте AI, который понимает не только текст, но и изображения, звуки и даже речь — и делает это мгновенно, в режиме реального времени! Qwen2.5-Omni от Alibaba Group — это прорывная мультимодальная модель, которая объединяет все эти возможности в единую мощную систему.

Почему это меняет всё?
Полная мультимодальность — обработка текста, изображений и аудио в одной архитектуре.
Мгновенное взаимодействие — потоковая передача данных без задержек.
Универсальность — идеально подходит для чат-ботов, анализа медиа, голосовых ассистентов и многого другого!

Хотите узнать, как Qwen2.5-Omni превосходит конкурентов и какие уникальные возможности предлагает?

Читайте наш технический обзор и убедитесь сами — это будущее AI уже здесь!

Читать далее

RAG без эмбеддингов для энтерпрайза (опыт ИИ-чемпионата)

Level of difficultyMedium
Reading time6 min
Views1.5K

Как я отказался от оверинжиниринга и переместился с 30 места на 7 в Enterprise RAG Challenge. И чего не хватило до 1 места.

Сейчас облась ИИ – дикий запад. Никто не знает, как правильно решать задачи, а результаты экспериментов лежат приватными под NDA. Тем ценнее, когда кто-то делится реальным опытом с разбором деталей и подводных камней. Так что делюсь с хабром своей мартовской статьей про участие в Enterprise RAG Challenge от Рината LLM под капотом

Если вы интересуетесь разработкой продуктов поверх LLM, то

Читать далее

Так ли плох Go в глазах C++ разработчика: пишем микросервис и учимся на ошибках

Level of difficultyMedium
Reading time15 min
Views27K

Миллионы пользователей ежедневно заходят на Яндекс Маркет. И одна из ключевых задач сервиса — показывать им точные сроки доставки на поиске и в корзине. При пиковых нагрузках это около 40 тысяч запросов в секунду. Как обеспечить столь быструю и точную обработку данных о доставке?

Привет, Хабр! Меня зовут Никита Деревянко. Я руковожу разработкой логистической платформы Яндекс Маркета. Люблю играть в шахматы, бильярд и программировать. Изучаю японский язык, чтобы тренировать мозг и смотреть аниме в оригинале. Расскажу о том, как построить логистический runtime на Go, не являясь Golang-разработчиком. Рассмотрим, как справиться с большим объёмом данных и какие преимущества может (или не может) предложить Golang для масштабной задачи.

Читать далее

Кто такие городские герои: как мы в 2ГИС краудсорс развивали

Level of difficultyEasy
Reading time6 min
Views1.3K

В 2ГИС мы знаем: лучшие продукты создаются вместе с пользователями. Уже почти 7 лет наше комьюнити помогает нам дополнять и актуализировать справочник. Мы называем этих людей спецагентами — они уточняют информацию, пишут отзывы, добавляют фотографии и делают 2ГИС удобнее для миллионов пользователей. 

И мы захотели вовлечь ещё больше людей в развитие продукта. Так появился новый краудсорсинговый инструмент — Telegram-бот, который мотивирует пользователей добавлять фото к местам и организациям. Запуск показал, как правильно выстроенный краудсорс может решать бизнес-задачи, масштабироваться и вовлекать пользователей. Этот кейс будет полезен продакт-менеджерам и маркетологам, которые ищут новые способы роста и взаимодействия с аудиторией.

Читать далее

Стриминг музыки со своего сервера

Level of difficultyMedium
Reading time5 min
Views17K


YouTube Music, «Яндекс Музыка», Spotify, SoundCloud — относительно удобные музыкальные сервисы, но с недостатками:

  • плохая работа в офлайне;
  • отсутствие поддержки lossless;
  • абонентская плата;
  • неполная фонотека;
  • многое другое...

Их коллекции далеки от полноты. Редких треков вообще нет. Более того, музыка иногда просто пропадает из-за каких-то заморочек с авторскими правами.

К счастью, очень легко организовать стриминг музыки со своего сервера. Хранить всю музыкальную коллекцию у себя на компьютере — зачастую надёжнее, удобнее и дешевле, чем облачный сервис.
Читать дальше →

Микроклональная лаборатория своими руками

Level of difficultyEasy
Reading time14 min
Views15K

Мои приключения с растениями продолжаются. Я выращиваю настоящий васаби в Москве и планирую построить для него целую ферму. Сейчас я озабочен поиском посадочного материала для своей фермы, но купить рассаду настоящего васаби в России невозможно, её нет физически. Поэтому я решил производить её самостоятельно. И не абы как, а с помощью микроклонального размножения. Для этого я из подручных средств организовал себе лабораторию, о ней и будет этот пост.

Читать далее

Планировщик Go — самый подробный гайд простым языком

Level of difficultyMedium
Reading time27 min
Views49K

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

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

Приступить к проектированию

Пишем свой FDW для PostgreSQL

Level of difficultyEasy
Reading time10 min
Views3.9K

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

В этой статье быстро разберём, как устроен PostgreSQL – от хранения данных в Heap и работы с FSM/VM до создания своего FDW с компрессией на базе zlib.

Читать далее

Глубокий разбор новых указателей в Go 1.24: слабые указатели и их реализация

Level of difficultyEasy
Reading time13 min
Views6.7K

Go 1.24 привнес в язык новый тип указателей – слабые указатели (weak pointers). В этой статье разберёмся, что они из себя представляют, как устроены внутри компилятора и runtime, а также как их использовать для оптимизации кода. Мы подробно изучим внутреннее устройство новых указателей, примеры их применения (например, для создания самоочищающихся кешей) и посмотрим, как они работают под капотом с точки зрения управления памятью и производительности.

Читать далее

Модели T-lite и T-pro: training report

Level of difficultyHard
Reading time31 min
Views9.4K

Привет! Я Дима Стоянов, MLE в команде разработки фундаментальных моделей. Мы продолжаем рассказывать о наших моделях T-lite и T-pro. Общие характеристики и результаты бенчмарков описывали в предыдущей публикации. В этой статье раскроем детали предобучения: от подготовки данных до финальных экспериментов, а совсем скоро поделимся особенностями этапа post-training.

Читать далее

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

Level of difficultyEasy
Reading time11 min
Views19K

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

Читать далее

Доставка день в день: погружение в базовые алгоритмы поиска и назначения курьеров в Яндекс Доставке

Level of difficultyHard
Reading time27 min
Views5.6K

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

Изначально Яндекс Доставка была тарифом внутри Яндекс Такси. Но спрос был таким большим, что довольно быстро стало ясно: надо развивать доставку как отдельный продукт, покрывающий множество пользовательских сценариев. И с 2019 года Яндекс Доставка стала самостоятельным сервисом.

Доставка день в день — это не только сценарий «сходи за меня в магазин», но и возможность передать посылку с помощью сервиса. Эти сценарии объединяет то, что они происходят в рамках одного города. Про этот вид доставки мы и поговорим: я расскажу, что уже изобретено для этого сценария, а чего нам не хватало и какие задачи предстояло решить с помощью алгоритмов доставки.

Читать далее

LLM во временных рядах: от предикта температуры до криптовалют

Level of difficultyEasy
Reading time17 min
Views4K

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

Тем более LLM уже может прогнозировать будущее! Ниже вы можете посмотреть результаты прогноза для разных временных рядов из статьи Large Language Models Are Zero Shot Time Series Forecasters.

Остается лишь вопрос, а можно ли лучше?

Давайте разберемся!

Как я интернет по электропроводке передавал. Часть 2

Reading time4 min
Views22K

Всем привет! Это Антон Комаров, автор команды спецпроектов МТС Диджитал. В прошлый раз я рассказывал, как мне удалось вернуть к жизни сломанный PLC-адаптер, передающий интернет по электропроводке. Ну а сейчас опишу мои эксперименты с тестированием подобной сети. Я попытался выяснить, как на качество связи влияют разные факторы — от бытовых приборов, таких как микроволновка, до раздельных линий подключения в единой электросети. Результаты оказались неожиданными — от впечатляющей стабильности до критичных падений скорости.

Читать далее

О новых алгоритмах хеш-таблиц

Reading time1 min
Views17K

Хотелось бы прокомментировать публикацию Ильи Кабанова в Медузе по поводу новых разработок в алгоритмах хеширования: "Optimal Bounds for Open Addressing Without Reordering" (Farach-Colton, Krapivin, and Kuszmaul, 2025) и последующую "The Bathroom Model: A Realistic Approach to Hash Table Algorithm Optimization" (Wang, 2025). И особенно кликбейтное: "в перспективе метод Крапивина и его коллег может ускорить многие процессы в интернете."

Я около 7 лет очень плотно занимался темой хеш-таблиц и написал много их вариантов: Koloboke, SmoothieMap, memory-mapped вариации.

Я потерял к теме интерес с выходом гугловской SwissTable (2018), и ее фейсбучного варианта F14, которые основаны на SIMD. Они проверяют загруженность ячеек и совпадения "тега" элемента сразу блоками по 8 соседних слотов. Поэтому на любых разумных загрузках таблиц (до 90%) - "цепочка проверки" очень редко превышает 1 (то есть, одну проверку 8-элементного блока).

В этих SIMD-based алгоритмах, ухищрения и теоретические по поводу "алгоритма шагания" просто не играют никакой роли -- алгоритм шагания можно сказать отсутствует, потому что если можно вставить элемент внутри 8-элементного блока, то это и стоит сделать.

Именно эти разработки, а не Крут и не статья Yao, которую "опровергли" новые работы, стали "практическим концом теории" хеш-таблиц, на мой взгляд.

SwissTable стали стандартным алгоритмом хеш-таблиц в Расте, и, буквально в этом месяце, в Golang 1.24.

В заключение, отвечая Илье Кабанову: к "ускорению интернета" эти теоретические алгоритмы не приведут :)

Читать далее

Тимлид или ведущий дейликов?

Level of difficultyEasy
Reading time8 min
Views2.5K

«У меня не тимлид, а просто ведущий дейликов!» — с горечью однажды воскликнул мой знакомый, и эта фраза послужила для меня поводом к написанию этой статьи. Ведь я тоже уже давно замечаю, что с ролью тимлида в последние годы происходит что-то не то. Причем как со стороны самих лидов, так и со стороны их руководителей

Читать далее

Information

Rating
4,305-th
Registered
Activity