Pull to refresh
30
0
Send message

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

Reading time16 min
Views21K

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

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

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

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

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

Reading time53 min
Views127K


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


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

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

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

Reading time8 min
Views75K

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

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

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

Reading time41 min
Views36K

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

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

Reading time9 min
Views96K
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
Comments38

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

Reading time6 min
Views38K

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

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

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

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

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

Reading time37 min
Views83K

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

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

В этой статье вы увидите пошаговое создание 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
Comments27

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

Reading time15 min
Views7.3K

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

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

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

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

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

Reading time5 min
Views14K

Продолжаем обзор паттернов интеграции микросервисов. В первой части мы рассказали, зачем 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
Comments1

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

Reading time22 min
Views65K

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



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

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

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

Reading time18 min
Views41K

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

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

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

Reading time4 min
Views1.5K

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

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

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

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


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

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

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

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



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

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

Reading time3 min
Views6.9K

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

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

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

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

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

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

Reading time3 min
Views4.1K

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

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

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

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

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

Reading time2 min
Views11K
image

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

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

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

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

Reading time28 min
Views2.1K

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

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

Читать далее
Rating0
Comments1

Information

Rating
Does not participate
Registered
Activity