Обновить
1
@LuminiteTimeread⁠-⁠only

Пользователь

Отправить сообщение

Не делайте рефакторинг как дядя Боб. Я вас умоляю

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели57K

Несмотря на то, что книга «Чистый код» привнесла в наш лексикон прекрасный термин, она также снискала и дурную славу. Это руководство от 2008 года представляет собой сборник принципов и исследований, которые «дядя Боб» (Uncle Bob, то есть Роберт Мартин) выработал за годы программирования.

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

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

Можно подумать...

Читать далее

Ультимативный Spring-бульдозер на базе GigaIDE

Уровень сложностиПростой
Время на прочтение14 мин
Охват и читатели12K

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

Читать далее

БД без боли: моя шпаргалка для собесов в Java. Часть 4

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели13K

Всем привет!


Я Senior Java Developer в банке, и за эти годы мне довелось пройти немало собеседований. Где-то было спокойно, где-то — как в допросной, с каверзными вопросами, странными задачами и вечным «а почему так, а не иначе?». В процессе я собрал целую коллекцию тем, которые всплывают снова и снова, особенно когда дело касается баз данных.

Сегодня хочу поделиться этим опытом и разобрать вопросы, которые чаще всего задают именно по SQL-базам.

Читать далее

Как я проходил собеседование на Senior Java

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели20K

Всем привет!

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

Читать далее

Как вайбкодить без боли? 11 выводов, к которым я пришёл

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели21K

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

Читать далее

OrbStack: Почему я забыл про Docker Desktop

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели76K

Работая на MacBook с Docker Desktop, я часто сталкивался с тем, что система становилась менее отзывчивой, особенно при запуске нескольких контейнеров одновременно. Высокая нагрузка на CPU и память заметно влияла на время автономной работы.

Но недавно я наткнулся на OrbStack, и это изменило мой рабочий процесс настолько, что я решил поделиться своим опытом. Спойлер: теперь мой MacBook не превращается в печку, батарея держится дольше, а Docker-контейнеры летают.

Читать далее

Паттерн Transactional Outbox: от теории до продакшена

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели13K

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

В статье разберемся, что именно начинает ломаться в outbox-паттерне под нагрузкой, как выбирать и блокировать события в разных СУБД, почему ретранслятор стоит отделить от API и какие гарантии доставки на самом деле получаются. А ещё — почему консюмеры должны быть идемпотентными, как следить за внутренней очередью в базе и не узнавать о проблемах уже после инцидента.

Разобрать outbox

Spring-boot-starter для паттерна Transaction outbox Kafka

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели12K

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

В этой статье я покажу, как я вынес всю логику Transaction Outbox в отдельный Spring Boot Starter, который можно подключить одной зависимостью. Он создаёт таблицу Outbox, конфигурирует шедулер, отвечает за отправку в Kafka и очистку, позволяя микросервисам сосредоточиться только на бизнес-логике.

Читать далее

OpenTelemetry — не то, чем кажется…

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели17K

Привет! Меня зовут — Евгений, работаю в финтехе и проектирую системы, которые обрабатывают миллионы запросов, интегрируются с десятками внешних сервисов и живут в Kubernetes. А еще я преподаю Java/Spring Boot и рассказываю студентам, как не наступать на чужие грабли, а создавать свои и прыгать на них.

Больше 10 лет в разработке — и за эти годы в череде проектов я видел одну и ту же боль: отсутствие системного подхода к наблюдаемости. Логи, метрики и трейсы появляются «по остаточному принципу»: что‑то добавили при отладке, что‑то прилетело из чужой либы, что‑то настроили на проде. Итог — инженеры часами разбирают простые инциденты, а продуктовые команды теряют скорость.

В статье поделюсь нашим опытом: как мы строим наблюдаемость в системах, почему OpenTelemetry — это больше чем стандарт и какими принципами мы руководствуемся.

Ну давай посмотрим что у тебя там...

Создаем свой «Photoshop» на Python: пишем десктопный редактор изображений с помощью Flet и Pillow

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели14K

Название громкое, но цель реальна: написать на Python простую, но полезную утилиту для обработки изображений, которая выглядит и работает как современное приложение.
Внутри — пошаговый гайд, где мы берем всю мощь библиотеки Pillow для работы с картинками, добавляем магию Flet для создания интерфейса. Только чистый Python.

Читать далее

Моя система хранилищ в Obsidian: Как я разделяю личное и рабочее

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели24K

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

Изучить детальнее..

Делаем PowerShell более удобным: настройка PsReadLine

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели11K

Привет, Хабр! Часто ли Вам приходится в сотый раз нажимать стрелку вверх в PowerShell для поиска нужной команды? Или, может быть, не замечать случайные опечатки в длинном пути? Сегодня мы превратим стандартную консоль в удобный инструмент с автодополнением и поиском по истории с помощью модуля PsReadLine, а главное - добавим нормальные функции Copy/Paste. Я поделюсь с Вами готовым конфигом, который сделает ежедневную работу в консоли быстрее и приятнее.

Читать далее

Kafka для начинающих: Гарантии доставки на практике и идемпотентность

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели11K

Почему exactly-once — это миф? Как защититься от дубликатов в распределённых системах?

Продолжаем работу с Kafka на практике и рассматриваем более интересные темы.

Читать далее

Код, за который не стыдно: Практика чистописания для начинающих Python-разработчиков

Уровень сложностиСредний
Время на прочтение21 мин
Охват и читатели10K

Каждый из нас хотя бы раз в жизни писал код, который можно описать фразой: «Ну, оно как-то работает, лучше не трогать». Мы наспех добавляем костыль, чтобы успеть к дедлайну, оставляем переменную с именем data2 или пишем функцию на 200 строк, обещая себе вернуться к ней «позже». И знаете что? Это «позже» никогда не наступает.

Читать далее

MapStruct: как безобидный метод портит весь маппинг

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели11K

При работе с MapStruct возникает соблазн добавлять небольшие вспомогательные методы прямо в ваш mapper и вызывать их через expression. Однако если такой метод оперирует довольно общими типами (например, String -> String), MapStruct может обнаружить его и применить к другим полям того же типа — даже если вы этого не планировали.

Читать далее

Почему я выбрал Warp, а не Cursor или Claude Code: мои инструменты, MCP, подход и конкретные приёмы разработки с LLM

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели30K

15 лет я не писал код, полностью погрузившись в менеджмент. Но LLM вернули мне сверхспособности: в одиночку за два месяца я переписал легаси-проект с 20 тысячами юзеров, который мучил команды разработчиков годами.

Всё благодаря правильной связке инструментов, которые превращают AI в младшего разработчика, архитектора и DevOps одновременно. Делюсь конкретикой: почему терминал лучше IDE для AI-разработки, как управлять контекстом через Rules и MCP, какие модели выбирать для разных задач, и почему фреймворки — ваша защита от галлюцинаций LLM.

Читать далее

Протокол VLESS: Как он обходит цензуру в России и почему это работает

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели167K

В 2025 году интернет-цензура в России, Китае и Иране достигла беспрецедентного уровня. Традиционные VPN-протоколы вроде OpenVPN и даже WireGuard обнаруживаются и блокируются системами Deep Packet Inspection (DPI) за считанные секунды. На сцену выходит VLESS — легковесный протокол, который становится последним работающим решением для обхода современной цензуры.

Эта статья объясняет, как работает VLESS на техническом уровне, почему он так эффективен в обходе обнаружения, и делится реальным опытом создания VPN-сервиса во враждебной среде России.

Читать далее

Production AI сервер за ₽0: полный гайд по сборке ML-станции для Stable Diffusion на б/у комплектующих

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели12K

Собрал production ML-сервер на двух RTX 2060 из хлама за ₽0. PyTorch + CUDA 11.8 + Stable Diffusion генерируют 512x512 за 38 секунд. YOLOv8 работает параллельно на второй GPU. Вот полный гайд: от BIOS настроек до первого теста. Никакого облака, только локальное железо.

Читать далее

Код, понятный IDE и AI: использование атрибутов из JetBrains.Annotations

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели9.6K

У JetBrains есть фреймворк JetBrains.Annotations для .NET, который предоставляет набор полезных атрибутов. Они выступают дополнительными метаданными для статического анализатора JB, который включён в их IDE и ReSharper, для самих разработчиков и даже для нейросетей, которые работают с этим кодом.

Какие атрибуты доступны, как и где ими воспользоваться — об этом кратко и с примерами далее.

Читать далее

Final должен быть значением по умолчанию для Java-классов

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели9.9K

А что, если вам сказали бы, что класс без final — это ошибка проектирования? Что возможность наследования должна быть исключением, а не правилом? В новом переводе от команды Spring АйО автор предлагает радикальную идею: все классы должны быть final по умолчанию.

⚠️ Статья была написана ещё до появления Kotlin`а. Цель перевода данной статьи – поднять запылившийся на полке вопрос в дизайне API: "Нужно ли оставлять API открытым по-умолчанию для внешнего расширения?"

Читать далее

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность

Специализация

Десктоп разработчик, Бэкенд разработчик
От 80 000 ₽
Git
Python
ООП
Английский язык
Java
Spring Boot
Junit
Intellij IDEA
Объектно-ориентированное проектирование
Разработка программного обеспечения