Найти в Дзене
О важности мотивации для тех, кто хочет "войти в айти" программистом
Некоторое время назад мой друг спросил меня: стоит ли ему "войти в айти" и какой платный курс для этого лучше выбрать. Я предложил ему не спешить платить за курсы, реклама которых его вдохновила, а попробовать сначала что-нибудь бесплатное. И предложил свою помощь "подержать факел, пока он будет спускаться в кроличью нору". Я не в первый раз выполнял роль наставника и понимал, что очень многое в учёбе зависит от мотивации ученика и от внимания к нему наставника. Поэтому постарался ненавязчиво помогать своему другу не стоять на месте, а двигаться вперёд хотя бы маленькими шажками...
7 месяцев назад
Чем может быть плохо использование .env файлов для хранения секретов
Недавно обсуждали с коллегами этот вопрос и вот, до чего договорились. Файл .env для хранения секретов для фронта не подходит, т.к.: 1) файл .env хранится в репозитории с кодом и секреты из него будут доступны всем, кто имеет доступ к репозиторию с кодом, 2) как правило, приложение для запуска собирается в контейнер (например, докер-контейнер). При использовании .env файла, нужно: - отдельно собирать контейнер для разных окружений (для разработки, для тестов и для продуктива), - продумывать механизм подстановки разных ...
8 месяцев назад
Юнит-тесты или интеграционные тесты?
В интернете есть немало статей и докладов, описывающих различные подходы к тестированию приложений: от TDD до "тестируем пользователями в проде". Какой из них лучший? И вообще, стоит ли выбирать какой-то один подход и всегда его придерживаться? На эти вопросы нет однозначного ответа. Каждый должен сам для себя выбрать то, что поможет ему решать его задачи наиболее эффективно. Я, как и бльшинство моих коллег, при тестировании бэкенд-приложений придерживаемся следующих правил: 1) по-максимуму автоматизировать тестирование...
8 месяцев назад
Spring Boot + Kotlin request body validation
Если для валидации входящих запросов в Spring Boot на Kotlin вы используете библиотеку spring-boot-starter-validation, то эта статья будет для вас полезна. Работа с библиотекой в Kotlin имеет одну особенность, вязанную с использованием non nullable Kotlin-типов. Рассмотрим тестовый проект. В контроллере есть 2 эндпоинта (2 функции). Один принимает запрос с полем nullable типа. Второй — принимает запрос с полем non nullable типа. Входящие параметры обеих функций помечены аннотацией @Valid. Поля обеих моделей запросов помечены аннотацией @NotBlank...
9 месяцев назад
Как код наследует привычки разработчика
На днях, очень оживлённо обсуждали с коллегами один интересный подход к написнию кода. Хочу поделиться с вами некоторыми его деталями и пригласить присоединиться к обсуждению. Представим, что у нас есть некоторая сущность, соответствующая одноимённой таблице в базе данных: @Table(value = "employee") data class EmployeeEntity( @Id val id: Long? = null, @Column("name") val name: String, ) Модель, которая соответствует этой сущности, я и мои коллеги-котлинисты привыкли писать примерно...
9 месяцев назад
А у вас какого размера?
Вопрос про размер пулла соединений к базе данных. Многие из вас могли видеть в настройках пулла такие параметры как: spring.datasource.hikari.connectionTimeout=2000 spring.datasource.hikari.maximum-pool-size=100500 spring.datasource.hikari.maxLifetime: 1000000 Как долго вы думали над тем: - откуда взяты значения этих параметров? - почему в вашем приложении решили применять именно такие, а не какие-то другие значения? Знаю, что на многих проектах настройки кочуют из самых ранних приложений в более новые...
10 месяцев назад
Технический долг
У технического долга есть много определений. Самое короткое и самое ёмкое из них: это то, что мешает команде работать с заданной скоростью. Заданная скорость - это скорость реализации задач, взятая командой в начале проекта, когда технический долг минимален или совсем отсутствует. Чем плох технический долг? Один из эффектов, который имеет технический долг - он замедляет разработку. Причём, эффект этот увеличивается со временем. И увеличивается настолько неизбежно, что даже есть популярное сравнение...
10 месяцев назад
Качество кода ч.11
Части 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 45. Логи пишем на русском языке. Если видим, что где-то в приложении есть логи на другом языке - исправляем на русский. Это правило не касается логов, которые пишут сторонние библиотеки. 46. Для удобства поиска по логам, рекомендуется логировать request_id (trace_id). Request_id (trace_id) получаем из соответствующего заголовка запроса. При обращении к другим пиложениям также добавляем request_id (trace_id) в заголовок запроса. 47. Приложение, запущенное на стенде dev, demo, prod должно отдавать логи в STDOUT (консоль) в JSON-формате...
11 месяцев назад
Качество кода ч.10
Части 1, 2, 3, 4, 5, 6, 7, 8, 9 Сборник правил по проектированию API. 26. Нестрого придерживаемся правил REST-архитектуры. Если какое-то правило необоснованно осложняет разработку, допускается его обойти. 27. Используем семантическое версионирование приложения. 28. Корень для всех внешних API приложения должен быть указан явно. Например: /api 29. Корень для всех внутренних API приложения должен быть указан явно. Например: /internal 30. Версию приложения (см.п.27) должно быть видно по адресу: GET http://host:port/api/actuator/info 31...
11 месяцев назад
Качество кода ч.9
Части 1, 2, 3, 4, 5, 6, 7, 8 24. В базе данных и в коде нельзя толковать null как самостоятельное значение Его нужно толковать как "мы не знаем что это, оно может быть чем угодно". Использовать null в другом качестве (понимать под ним какое-то определённое значение или число, думать, что null больше или меньше каких-то не null значений) недопустимо. Если нужно, чтобы вместо "мы не знаем, что это" было какое-то значение, то вместо null нужно присваивать переменной какое-то осмысленное значение. 25...
11 месяцев назад
Код-ревью не работает. Точно. Проверено
Заголовок провокационный, да? ) И так – чтобы не было недопонимания – что я понимаю под код-ревью в этой статье: процесс проверки кода одного разработчика другим разработчиком (или несколькими рзработчиками) на стадии перед выполнением мержа фиче-ветки в основную ветку. Обычно, задачи перед код-ревью ставятся следующие: 1) контроль качества кода, 2) ознакомление других разработчиков с изменениями в коде. Теперь, давайте, разберёмся, почему код-ревью не выполняет эти задачи. Почему не работает “код-ревью...
11 месяцев назад
Перекосы в архитектуре
Когда-то давным-давно, когда деревья были выше, небо - синее, а трава - зеленее... на заре времён, короче говоря, принимались такие своеобразные архитектурные решения как использование общих: - репозитория кода, - базы данных, - и даже компонента сборки (исполнимого файла) для двух логически не связанных друг с друом приложений. Чтобы было понимание о том, насколько эти два приолжения были друг с другом не связанны, раскрою немного подробностей. Одно из приложений занималось перекладыванием финансовых данных между 1С, SAP и Primavera и для каких-то своих нужд никаких данных не хранило...
11 месяцев назад