Pull to refresh
1
1@itsukenbergread⁠-⁠only

User

Send message

Внедрение зависимостей (Dependency Injection DI), SOLID, ошибки выделения абстракций и чуть-чуть психологии

Level of difficultyHard
Reading time11 min
Reach and readers16K

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

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

В предыдущей статье мы выяснили как создать два класса (Хост и Енкодер, класс А и класс В) один из которых (А) не может работать без использования функций другого класса (В, а может, и без данных из этого класса В не может работать), но при этом совершенно не зависит от этого класса В! То есть класс А может запросто работать с любым другим классом (C, D, … ) вместо класса В, при некотором условии изложенном в предыдущей статье. По моему, та статья может быть хорошей разминкой для понимания концепции Внедрения Зависимостей. И, определенно, эта статья может считаться продолжением темы практической архитектуры ПО.

Читать далее

Они зарегистрировали на себя наше название, а потом потребовали с нас 4 000 000 рублей, угрожая судом и полицией

Level of difficultyEasy
Reading time8 min
Reach and readers46K

«Или вы платите мне четыре миллиона, или я иду в суд и взыскиваю с вас пять. А пока будет идти суд, полиция арестует ваши склады и заблокирует сайт» — с этого ультиматума началось утро владельца одного небольшого интернет-магазина мебели.

Что случилось: жила-была одна дама, директор интернет-магазина. Однажды она решила нажиться на своем конкуренте. Зарегистрировала на себя его название как товарный знак в Роспатенте, а потом пришла требовать с него деньги.

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

Правда, что так можно получить деньги? Сможет ли интернет-магазин защитить себя?

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

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

Я юрист по интеллектуальным правам. Товарные знаки, патенты, авторские права — это моя профессия.

Заваривайте чай, присаживайтесь поудобнее. Это дело закрыто, поэтому могу про него рассказать.

Читать далее

Как за один слайд увидеть, кого в команду нанимать, кого учить, а что перестать делать

Level of difficultyEasy
Reading time6 min
Reach and readers31K

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

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

Читать кейс

Поиск на RxJS и Taiga UI

Level of difficultyMedium
Reading time12 min
Reach and readers11K

Привет, Хабр! Я Антон Марченко, разработчик в Т-Банке. Поделюсь интересной задачей по работе с потоками на RxJS, которую мы однажды решали. Представьте платформу внутренних продуктов и сервисов, на которой реализован поиск по статьям и постам. Нам предстояло внедрить на сайт несколько внешних поисков: по пользователям, ссылкам и исходникам. А еще предусмотреть скелетоны и обработку ошибок и заложить возможность добавлять новые внешние источники поиска динамически, не дорабатывая каждый раз пользовательский интерфейс.

Читать далее

Гайд по использованию Spring GraphQL. Часть 2

Level of difficultyMedium
Reading time5 min
Reach and readers7.6K

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

Меня зовут Дмитрий, я бэкенд-разработчик в SENSE и последние 10 лет пишу серверную часть на Java. Эта статья — продолжение первой части гайда по Spring GraphQL, где мы с нуля подняли проект и подключили GraphQL к Spring Boot.

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

Поехали!

Читать далее

8 мелочей при строительстве крыши, за которые заплатишь 2,4 млн ₽

Level of difficultyEasy
Reading time5 min
Reach and readers36K

Стою на плоской кровле трехэтажного дома и осматриваю повреждения. Рядом нервно 🚬 хозяин — мужчина лет сорока пяти.

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

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

Читать далее

Код, не боящийся изменений

Level of difficultyEasy
Reading time10 min
Reach and readers15K

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

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

Читать далее

anton@gmail.com, anton+habr@gmail.com, an.ton@gmail.com — почему всё это один и тот же имейл

Level of difficultyEasy
Reading time5 min
Reach and readers26K

Однажды у нас в CRM появились 3 загадочных клиента. С каждым вёл переговоры отдельный продавец. А потом выяснилось, что эти клиенты — один и тот же человек с одним и тем же имейлом.

Меня зовут Антон Григорьев, я работаю продуктовым дизайнером в финтех-компании и веду телеграм-канал UX Notes. В этой небольшой статье я расскажу, как такое случилось, может ли произойти у вас и о чём стоит дополнительно подумать при проектировании форм регистрации и входа.

Спойлер: это не связано с европейским регламентом по защите данных (GDPR) и правом клиента быть забытым (потребовать от компании удаления всей информации о себе).

Читать далее

Как запаковать простое приложение в Docker: на пальцах

Reading time3 min
Reach and readers30K

Привет, я Дмитрий Желудков, архитектор по эксплуатации, и сегодня я покажу, как собрать приложение в docker на вот этих вот 4 левых пальцах (а как же иначе, у нас же серьёзное исследование).

Читать далее

Я беру джойстик, лечу в поле и зарабатываю 3,6 млн чистой прибыли за сезон

Level of difficultyEasy
Reading time11 min
Reach and readers375K

В статье расскажу, сколько денег может налетать агродрон, и как быстро можно окупить подобное предприятие.

Читать далее

CSS Anchor Positioning API

Level of difficultyMedium
Reading time10 min
Reach and readers7.7K

Большой обзор нового API для позиционирования элементов в CSS.

В статье вы узнаете как теперь без использования библиотек можно создавать tooltip'ы, контекстные меню, индикаторы и другие элементы UI, которым необходима якорная связка.

Читать далее

Пособие по промпт-инжинирингу для программистов

Level of difficultyEasy
Reading time38 min
Reach and readers56K

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

Под катом Эдди Османи, ведущий инженер Google, выделяет ключевые шаблоны запросов, повторяемые фреймворки и запоминающиеся примеры, которые нашли отклик у разработчиков.

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

Читать далее

Spring AI: Model Context Protocol

Level of difficultyEasy
Reading time7 min
Reach and readers7.5K

Model Context Protocol (MCP) — это унифицированный протокол взаимодействия между большими языковыми моделями (LLM) и внешними источниками данных и инструментами. Spring AI предоставляет очень простой декларативный подход для добавления любых инструментов в контекст LLM с помощью MCP. Мы рассмотрим несколько простых примеров по созданию MCP-клиента и MCP-сервера.

Читать далее

Почему n8n важен в автоматизации бизнеса: примеры успешной автоматизации

Level of difficultyEasy
Reading time10 min
Reach and readers28K

Рынок автоматизации процессов сейчас переживает качественное обновление — компании самых разных масштабов стремятся минимизировать ручную работу, ускорить процессы, снизить число ошибок в цепочках передачи данных между системами и повысить управляемость бизнес-процессов в целом…

И именно на стыке этих задач возник интерес к универсальным low-code решениям, которые позволяли бы настаивать автоматизированные потоки данных быстро, а главное — без обязательного привлечения разработчика к каждой задаче. Одним из наиболее ярких представителей этого класса инструментов стал n8n — гибкая платформа для интеграции и автоматизации, получившая признание как среди энтузиастов и стартапов, так и в крупных предприятиях.

Впрочем, обо всем по порядку.

Читать далее

n8n – всё, что нужно знать о сервисе

Level of difficultyEasy
Reading time4 min
Reach and readers461K

Привет! Если вы ищете способ автоматизировать рутину, интегрировать любимые сервисы и работать с ИИ без сложной настройки — вам в особенности подойдёт n8n.

n8n.io — платформа для автоматизации рабочих процессов (workflow automation) с открытым исходным кодом. Платформа. позволяет не зная программирования и, не написав ни одной строчки кода, создавать различные инструменты для вашей работы.

В неё встроено более 400 готовых узлов (nodes) для популярных сервисов и множество AI агентов, поддержка RAG.

Ранее мы уже разбирали эту платформу в нашей предыдущей статье и, прочитав её, вы уже сможете самостоятельно развернуть ТГ чат-бота с ChatGPT.

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

Читать далее

Pro-code, Low-code, и роль Camunda

Level of difficultyEasy
Reading time10 min
Reach and readers5.3K

Pro-code — наше сердце и душа, но люди и процессы бывают разными. Наши необязательные low-code-функции расширяют спектр применений, не мешая разработчикам.
 
Разработчики часто спрашивают меня о стратегии развития продуктов Camunda. Особенно во время запуска Camunda 8 они выражали обеспокоенность тем, что мы якобы «забыли свои корни» или «отказались от удобства для разработчиков» — именно те качества, за которые нас любят. Появилось мнение, что мы «прыгнули в поезд low-code», потому что у нас теперь есть финансирование и мы хотим «гнаться за большими деньгами». Как разработчик в душе, я могу вас уверить — это совсем не так. Позвольте объяснить нашу стратегию в этом посте.
 
TL;DR: Мы остаёмся на 100% дружелюбными к разработчикам, и pro-code — это наше всё (можно сказать, наш хлеб с маслом). Но люди, создающие процессные решения, бывают разными — как и сами процессы, которые нужно автоматизировать. Для некоторых сценариев low-code действительно имеет смысл, и здорово, что мы можем их поддерживать. Но low-code-функции в Camunda являются необязательными и никак не мешают pro-code-разработке.

Читать далее

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

Level of difficultyMedium
Reading time12 min
Reach and readers107K

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

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

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

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

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

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

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

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

Читать далее

15 мс на ответ: как мы добились высокой скорости работы API Gateway

Level of difficultyMedium
Reading time6 min
Reach and readers19K

Меня зовут Николай Кокоулин, я бэкенд-разработчик в Ви.Tech — это IT-дочка ВсеИнструменты.ру. В этой статье поделюсь нашим опытом о том, как мы в ходе разделения монолитного приложения на микросервисы столкнулись с вызовом: как сохранить производительность и масштабируемость системы при росте нагрузки.

Читать далее

Вебаппки Телеграма пишутся проще ботов, показываю (20 минут на развёртывание)

Reading time11 min
Reach and readers39K
image

Как только мы позвали вас, хабраюзеров, в бету ковырять наши контейнеры, выяснилось, что вам они очень часто нужны для телеграм-ботов и телеграмных же вебаппов. Потому что контейнер — идеальное размещение для такого: не надо много ресурсов, а нужно, чтобы бот висел и иногда отвечал на запросы, но при этом был готов выдерживать очень большое число запросов, если нам повезёт и он завирусится. Сам бэк тарифицируется по фактическому потреблению, то есть вполне спокойно это могут быть и 100 рублей в месяц за сервер с 2 vCPU и 4 Gb оперативки.

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

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

Начну с того, что в Телеграме можно сделать webapp-приложение. По сути, это вебвьюха встроенная в мессенджер. Весь интерфейс можно делать точно так же, как на веб-фронте, на любом фреймворке (react, angular, vue…), то есть не ограничиваясь возможностями клиента. А главное, можно юзать API телефона и использовать авторизацию Телеграма.
Читать дальше →

Мама, у меня RAG: пути к улучшению, когда он «наивный»

Level of difficultyEasy
Reading time22 min
Reach and readers14K

В последние пару лет RAG (retrieval-augmented generation) стал одной из самых обсуждаемых технологий в области обработки текстов и поисковых систем. Его идея проста: объединить поиск (retrieval) и генерацию (generation), чтобы быстрее находить нужную информацию и создавать более точные тексты.

Рост объёмов данных и информационного шума привёл к тому, что классические методы поиска и генерации уже не всегда справляются с новыми задачами. Например, большие языковые модели без доступа к актуальной информации могут искажать факты, а традиционные поисковики при запросах на естественном языке дают слишком общий результат. RAG решает эти проблемы, добавляя дополнительный "слой знаний" за счёт внешних баз данных, что особенно полезно для чат-ботов, систем вопрос-ответ, рекомендательных сервисов и многих других приложений.

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

Читать далее
1

Information

Rating
Does not participate
Registered
Activity

Specialization

Фулстек разработчик
Старший