Pull to refresh
30
0
Send message

Чистый код, часть 1

Reading time 16 min
Views 21K

Привет! В этом посте я хочу обсудить, что такое чистый код и почему я считаю его очень важной практикой. Если у вас всё руки не доходили до того, чтобы сесть и подробно почитать книги Дяди Боба, я подготовил небольшой конспект по его видеолекциям со своими примерами с самым главным.

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

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

Читать далее
Total votes 28: ↑24 and ↓4 +20
Comments 36

Глубокое погружение в Java Memory Model

Reading time 53 min
Views 127K


Я провел в изучении JMM много часов и теперь делюсь с вами знаниями в простой и понятной форме.


В этой статье мы подробно разберем Java Memory Model (JMM) и применим полученные знания на практике. Да, в интернете накопилось достаточно много информации про JMM/happens-before, и, кажется, что очередную статью про такую заезженную тему можно пропускать мимо. Однако я постараюсь дать вам намного большее и глубокое понимание JMM, чем большинство информации в интернете. После прочтения этой статьи вы будете уверенно рассуждать о таких вещах как memory ordering, data race и happens-before. JMM — сложная тема и не стоит верить мне на слово, поэтому большинство моих утверждений подтверждается цитатами из спеки, дизассемблером и jcstress тестами.

Читать дальше →
Total votes 109: ↑109 and ↓0 +109
Comments 60

Чем различаются Kafka и RabbitMQ: простыми словами

Reading time 8 min
Views 74K

Программные брокеры сообщения уже стали стандартом при построении больших и сложных систем. Однако до сих пор не все ИТ-специалисты понимают, как работают эти инструменты. Главный системный аналитик «Иннотех» Павел Малыгин помогает разобраться в брокерах сообщениях и их работе.

Читать далее
Total votes 61: ↑58 and ↓3 +55
Comments 33

Сверхлёгкие частицы размером с галактику

Reading time 41 min
Views 36K

Расправившись со статьёй про «волны-убийцы», я ещё некоторое время по инерции запускал описанную там модель с различными начальными условиями. На каком-то этапе пришла мысль обобщить код на большие измерения и произвести расчёт для поля, заполненного случайными возмущениями. Результат крайне озадачил и увёл меня в совсем другое направление, заставив на несколько месяцев погрузиться в космологию и физику тёмной материи.
Читать дальше →
Total votes 137: ↑136 and ↓1 +135
Comments 34

Шпаргалки Java программиста 10: Lombok

Reading time 9 min
Views 96K
image

Lombok — проект по добавлению дополнительной функциональности в Java c помощью изменения исходного кода перед Java компиляцией.

По сути, проект Lombok позволяет избавиться от многословности Java в большинстве случаев и перестать писать огромные простыни кода из гетеров, сеттеров, equals, hashcode и toString (да их обычно генерит IDE, но читать и менять все равно приходится программисту), в результате Java становиться почти такой же краткой как Kotlin, Scala или C#.

Что особенно радует, Lombok очень прост и легок в добавлении к вашему проекту. Если вам, как и мне, нравится принцип KISS, то советую посмотреть на Lombok.

Так же рекомендую, посмотреть на другие статьи цикла, например последную шпаргалку по Java SE8
Интересно?
Total votes 21: ↑18 and ↓3 +15
Comments 38

Человеческим языком про метрики 1: Потерянное введение

Reading time 6 min
Views 38K

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

Мне нужен был гайд, который сочетает эти две вещи: сначала «почему так принято», а затем — «как правильно делать». В результате такой гайд мне пришлось написать самому. Его цель — объяснить разработчикам с любым бэкграундом, что такое метрики, как правильно о них думать и осмысленно использовать. Сначала гайд жил во внутренней документации Точки, но я решил сделать его публичным — возможно, кому-то этот опыт будет полезен. Разбираться будем с Prometheus и Grafana. Если у вас другой стек — не страшно. Мы затронем и фундаментальные темы: например, перцентили, производные и кардинальность.

Гайд будет выходить как цикл статей. Сначала посмотрим на архитектуру: как собираются метрики и где хранятся. Дальше разберемся с типами метрик — они не так просты, как кажется. Потом придется немного отвлечься на математику (но только с инженерной точки зрения!). И, наконец, научимся писать запросы, но не просто так: сразу посмотрим на разные грабли и неочевидные моменты.

Читать далее
Total votes 16: ↑16 and ↓0 +16
Comments 2

Большой гайд. Пишем микросервисы на Java и Spring Boot, заворачиваем в Docker, запускаем на EKS, мониторим на Grafana

Reading time 37 min
Views 83K

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

Как какой из двух категорий относится эта статья — решать вам.

В этой статье вы увидите пошаговое создание cloud-native микросервиса на Amazon AWS, пригодное для "чтения с листа". Чтобы понять, что здесь происходит, не нужно разворачивать проект - достаточно обладать живым воображением и прочитать текст по диагонали. Если же вы всё-таки захотите повторить шаги, вам будут жизненно нужны знания вида, как создавать классы в IDE и что такое Spring.

Вначале мы напишем пару простых микросервисов на Spring Boot, докеризуем их, зальём в AWS, настроим красивые доменные имена и HTTPS, прикрутим логирование и мониторинг, Prometheus и Grafana. Это небольшое путешествие по всем кругам ада, из которого вы не вернетесь прежним.

Текст написан на основе текстов и демо-проекта microservice-customer за авторством @kamaruzzaman. Если вы потеряли нить повествования, всегда можно зайти на GitHub и найти весь код в пригодном для запуска виде. Если захочется закопаться в тему, то бро Дима Чуйко (@Teapot) написал вам ещё две части статьи "Микросервисы: от CRUD до Native Image" (раз, два).

Последняя важная оговорка. В этом гайде будут использоваться технологии Amazon и обычные дистрибутивы OpenJDK. Автор осознает, что мы живём в России, и возможно, вместо Amazon куда лучше подойдет что-то вроде SberCloud или MTS Cloud, а вместо обычного OpenJDK - Axiom JDK с сертификацией по ФСТЭК. Особенности российских технологий - тема для отдельной статьи. Если вы захотите таковую после чтения этого гайда - отметьтесь в комментариях.

Читать далее
Total votes 88: ↑87 and ↓1 +86
Comments 27

Grafana как инструмент визуализации потока данных в Kafka

Reading time 15 min
Views 7.3K

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

Большинство средств визуализации предлагает широкий выбор вариантов отображения данных, от обычных линейных графиков и столбчатых диаграмм до временных шкал, карт, зависимостей, гистограмм и настраиваемых представлений. Для решения задачи визуализации принципиальное значение имеет тип источника данных. И хотя современные средства визуализации проделали в этом вопросе большой путь, и предлагают на сегодняшний день весьма большой выбор, задача визуализации не решена в полной мере. Если для баз данных и целого ряда web сервисов задача визуализации не представляет принципиальной проблемы, то понять, что происходит с информационными потоками внутри некоторых программных продуктов из мира больших данных, не так просто.

Инструмент, на котором хотелось бы остановиться более подробно – Kafka.

Читать далее
Total votes 7: ↑7 and ↓0 +7
Comments 1

Обзор паттернов интеграции микросервисов. Часть 2

Reading time 5 min
Views 14K

Продолжаем обзор паттернов интеграции микросервисов. В первой части мы рассказали, зачем IT-специалистам нужны шаблоны интеграции, и для каких задач они подходят. Подробно остановилисьна Circuit Breaker, Sidecar, Ambassador, Anti-Corruption Layer и Async Request-Reply. Сегодня по плануразобрать Backends for Frontends, Cache-Aside, Gateway, Gateway Aggregation и Gateway Routing. 

Читать далее
Total votes 19: ↑17 and ↓2 +15
Comments 1

Как это устроено: атомные часы

Reading time 22 min
Views 65K

Привет Хабр! Сегодня у нас выходит статья в Nature Physics, в которой мы рассказываем про один интересный апгрейд для атомных часов. А нашу предыдущую работу по этой теме — в тот раз в самом Nature — даже упоминали пару раз на Хабре. Но то ли наш пресс-релиз оказался слишком сложным, то ли тема слишком специфичной, короче говоря, я из тех заметок вряд ли бы что-либо понял. Поэтому сегодня попробую простым языком рассказать про то, как устроены атомные часы и что интересного нас ждет в ближайшем будущем.



Оптические атомные часы в университете Токио. Credit: H. Katori

Читать дальше →
Total votes 262: ↑261 and ↓1 +260
Comments 48

Обзор Spring-компонентов. Часть 1 – Spring Boot и фреймворк интеграции

Reading time 18 min
Views 41K

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

Читать далее
Total votes 18: ↑17 and ↓1 +16
Comments 1

Back to 2021. Нововведения в Serverless с re:Invent от AWS

Reading time 4 min
Views 1.5K

Ежегодный AWS re:Invent, проходивший в конце 2021 года, принёс массу новостей про бессерверные технологии Янашёл самые интересные: и под катом мы поговорим про запуск функций на Graviton2, новых возможностях для машинного обучения, перенос разработки в облако и визуальный редактор для step-функций.

Читать далее
Total votes 12: ↑12 and ↓0 +12
Comments 0

Бижутерия, которую Вы заслужили (?). Радиоактивное урановое стекло в магазинах для рукодельниц

Reading time 16 min
Views 52K
Как любят говорить инфоцыгане в электричках «Разрешите к вам обратиться!» Занимаясь вопросами радиоактивности ювелирных камней, я решил провести небольшой «полевой сhallenge» во имя гражданской науки и предложил своим ассистентам провести проверку ассортимента магазинов с различными handicraft товарами (самоцветы, разное декоративное стекло и проч). Внезапно оказалось, что во многих «магазинах бисероплетения» продаются артефакты с мощным потоком бета-излучения (превышение нормы в десятки раз). Я конечно же попытался привлечь к этому факту внимание местных СМИ, контролирующих органов (мы ведь "работаем оперативнее cпецов из МЧС"), владельцев магазинов в конце концов, но, ожидаемо, все имело нулевой эффект. Осталось только поинтересоваться мнением комьюнити хабра на этот счет (хабра-горшочек, вари!). В качестве примера взят Минск, но что-то мне подсказывает, что похожая ситуация может иметь место и в аналогичных магазинах России/Украины. Все подробности исследования под катом.


Знания умножают печали...
Total votes 141: ↑137 and ↓4 +133
Comments 136

Как мы делали Warface для Денди

Reading time 31 min
Views 43K
В октябре 2020 мне написал мой друг Андрей Скочок, работающий в Mail.ru, и предложил сделать для них необычную промоакцию.

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



Читать дальше →
Total votes 246: ↑246 and ↓0 +246
Comments 40

Сериализуемость транзакций

Reading time 3 min
Views 6.9K

В этой статье рассмотрим, что такое "Сериализуемость" (Serializability) и какие гарантии она предоставляет.

В реляционных СУБД уровень изоляции Serializable (сериализуемость), как следует из названия, обеспечивает сериализуемость транзакций. Однако, как вы увидите далее, в некоторых базах данных реализована также строгая сериализуемость (Strict Serializability), которая представляет собой комбинацию сериализуемости и линеаризуемости (Linearizability).

Читать далее
Total votes 9: ↑7 and ↓2 +5
Comments 2

Забудьте о DAO, используйте Repository

Reading time 6 min
Views 175K
Недавно задумался о том, чем отличаются паттерны, позволяющие абстрагироваться от работы с хранилищем данных. Много раз поверхностно читал описания и различные реализации DAO и Repository, даже применял их в своих проектах, видимо, до конца не понимая концептуальных отличий. Решил разобраться, закопался в Google и нашел статью, которая для меня разъяснила все. Подумал, что неплохо было бы перевести ее на русский. Оригинал для англочитающих здесь. Остальным интересующимся добро пожаловать под кат.
Читать дальше →
Total votes 28: ↑23 and ↓5 +18
Comments 14

Туториал по JUnit 5 - Аннотация @AfterAll

Reading time 3 min
Views 4.1K

Это продолжение туториала по JUnit 5. Введение опубликовано здесь.

Аннотация JUnit 5 @AfterAll является заменой аннотации @AfterClass в JUnit 4. Она используется как метод очистки для тестового класса.

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

Читать далее
Total votes 5: ↑2 and ↓3 -1
Comments 0

А как вы определяете свойства переменными окружения в Spring Boot приложениях?

Reading time 2 min
Views 11K
image

А что, если я скажу, что подобное

#application.properties
spring.datasource.url=${SPRING_DATASOURCE_URL}?someProperty=${PROPERTY}

содержит ошибку. Не согласны? Разбор под катом.
Читать дальше →
Total votes 9: ↑6 and ↓3 +3
Comments 11

Hazelcast + Kibana: лучшие друзья для исследования и визуализации данных

Reading time 28 min
Views 2.1K

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

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

Читать далее
Rating 0
Comments 1

Information

Rating
Does not participate
Registered
Activity