Pull to refresh
0
0
Алексей @Alex_Crack

Solution Architect

Send message

Идеальная архитектура

Reading time4 min
Views58K
Существует много разных взглядов на разработку архитектуры и дизайна современных приложений. Некоторые архитекторы стремятся продумать все до мелочей, разрисовать use case-ы всех классов и модулей, проанализировать миллион возможных способов их использования, все их обязательно задокументировать и уже потом приступить к этапу кодирования.

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

Читать дальше →
Total votes 61: ↑50 and ↓11+39
Comments22

Опровергаю пять архитектурных заблуждений

Level of difficultyMedium
Reading time13 min
Views23K

Привет! Я Алексей, iOS-разработчик в Тинькофф. Участвую в развитии архитектуры приложения, провожу собеседования и занимаюсь менторингом разработчиков.

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

Читать далее
Total votes 40: ↑36 and ↓4+32
Comments27

Сохраняем простоту кода и ускоряем разработку за счет отказа от оверинжиринга

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

Мой совет: если хотите ускориться, пишите код как можно проще и как можно чище.
Читать дальше →
Total votes 18: ↑16 and ↓2+14
Comments10

Как работает сеть в контейнерах: Docker Bridge с нуля

Level of difficultyMedium
Reading time21 min
Views34K

В этой статье мы собираемся разобраться со следующими вопросами:

* Как виртуализировать сетевые ресурсы, чтобы контейнеры думали, что у них есть отдельные сетевые среды?

* Как превратить контейнеры в дружелюбных соседей и научить общаться друг с другом?

* Как выйти во внешний мир (например, в Интернет) изнутри контейнера?

* Как связаться с контейнерами, работающими на хосте Linux, из внешнего мира?

* Как реализовать публикацию портов, подобную Docker?

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

Hashicorp Vault — собираем непрямую репликацию через ведро

Level of difficultyHard
Reading time15 min
Views4.6K

Hashicorp Vault - прекрасный продукт для централизованного хранения всех паролей и других секретов компании. При этом, многие знают, что удобная ключница - это идеальный способ потерять все ключи одновременно. Когда я работал в крупном телекоме, то DRP-протоколы с восстановлением данных учитывали даже запрет на сбор более двух Хранителей Ключей в одном месте. Чисто на случай очень неудачного корпоратива с совместным полетом на воздушном шаре, дегустацией домашних грибов или другими подобными факторами. Короче, если вы внедряете подобную систему, то вам надо очень внимательно подходить не только к вопросам эксплуатации, но и резервного копирования и восстановления.

Сегодня я не буду глубоко касаться темы организации правильного хранения фрагментов ключей Шамира. Вместо этого, я попробую рассказать о том, как развернуть с нуля отказоустойчивый кластер Hashicorp Vault в community edition. Для этого поднимем основной и тестовый кластер Vault в нескольких регионах и датацентрах. Тестовый кластер у нас одновременно будет служить и резервным в рамках процедуры DRP.

Чтобы было совсем интересно, настроим процесс таким образом, чтобы тестовый кластер был односторонней репликой продуктивного с отставанием в несколько суток. Разумеется, все развертывание мы будем проводить в парадигме Infrastructure-as-a-code с Terraform и Ansible в качестве основных инструментов.

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

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

Мапперы на Famicom, NES, Денди: откуда взялись и зачем нужны (часть 2/2)

Level of difficultyMedium
Reading time24 min
Views7K

Продолжаем обстоятельный разговор про «мапперы» — устройства управления расширенной памятью на игровых консолях Famicom, NES и Денди. Во второй части статьи рассмотрим особенности нескольких основных видов мапперов и их влияние на содержание игр, сложности программирования, а также ситуацию с мапперами на других платформах.
Читать дальше →
Total votes 67: ↑66 and ↓1+65
Comments20

Как загружать классы в Java 8 и Java 9+?

Level of difficultyHard
Reading time24 min
Views6.3K

Привет, Хабр! Я разработчик в Институте Системного Программирования РАН, занимаюсь разработкой статического анализатора Svace. Недавно я столкнулся с задачей самостоятельной загрузки классов в JVM, что оказалось непросто, потому что в проекте мы используем модули Java.

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

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

Оптическое распознавание символов и разбор чеков Rimi

Level of difficultyMedium
Reading time11 min
Views2.3K

Некоторое время назад в нашей стране крупные сети магазинов стали вводить электронные чеки. В частности, магазины сети Rimi. Эти чеки покупатель получает по почте в виде PDF документа. У меня скопилось много таких чеков, и мне стало интересно посмотреть на разного рода статистику: например, на цены на различные товары в разное время, сколько чего было приобретено и т. п.

К сожалению, PDF документы, которые покупатели получают – это картинка. Получить интересующую меня информацию из них без оптического распознавания символов (OCR) невозможно. Однако, OCR, как оказалось, не на столько хорош, чтоб идеально справиться и точно всё распознать с первого раза. И это несмотря на то, что чеки достаточно хорошего качества: строки ровные, нет никаких артефактов в виде тёмных пятен, буквы достаточно одинаковые (правда присутствуют несколько разных шрифтов).

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

Виртуальная девушка, Midjourney на коленке за 5 минут и другие эксперименты с нейросетями

Level of difficultyEasy
Reading time3 min
Views21K

Мы часто рассказываем о наших экспериментах с нейросетями, а вы — делитесь своими идеями, вопросами и замечаниями. В этой статье мы решили самый интересный опыт работы с нейросетями. Под катом — инструкции, рейтинг и советы из практики.
Читать дальше →
Total votes 38: ↑29 and ↓9+20
Comments5

Почему новым сотрудникам платят больше, чем работающим давно?

Reading time7 min
Views114K

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

Так почему же компании так поступают? Они намеренно стремятся вызвать у своих сотрудников недовольство? Они действительно думают, что работники не узнают об этой ситуации? Или они считают, что мы всё равно останемся, ведь они одни из самых лучших работодателей в мире? Позже я поработал какое-то время в отделе оплаты труда и увидел, «как делают колбасу», так что хочу поделиться размышлениями о том, почему новым работникам платят больше и почему лучший способ добиться улучшения зарплаты — перейти в новое место.
Читать дальше →
Total votes 149: ↑145 and ↓4+141
Comments273

Новостной Telegram бот на Java

Level of difficultyMedium
Reading time4 min
Views3.6K

Долгое время изучаю Java (но работаю с Oracle) и всё время хочется написать что-то полезное и интересное. Так наткнулся на статьи о Телегам ботах, которые меня и надоумили соорудить своего бота Avandy News.

За идеей для функционала далеко ходить не пришлось, т.к. у меня имеется одна более менее успешная программа, которая попала в Реестр российского ПО (о ней и о том как попасть в Реестр я писал в этой статье).

Читать далее
Total votes 4: ↑3 and ↓1+2
Comments11

Парк юрского периода глазами нейросети: как развернуть Diffusers для генерации изображений за 10 минут

Reading time5 min
Views5.6K

Как часто бывает: появляется немного свободного времени, хочется отдохнуть и написать картину… но его то ли недостаточно, то ли просто лень размахивать кистью. Но можно делегировать задачу нейросети — для этого необязательно использовать Midjourney или DALL-E.

Один из вариантов — развернуть собственного помощника на готовом сервере с помощью библиотеки Diffusers и моделей Hugging Face. Мы попробовали и сгенерировали целый «Парк юрского периода» с разными тирексами. Что из этого получилось и как повторить наши творения, рассказываем под катом.
Читать дальше →
Total votes 47: ↑41 and ↓6+35
Comments8

Сколько стоит содержать виртуальную девушку? Создаем подругу, записывающую кружочки в Telegram, с помощью 4 нейросетей

Level of difficultyMedium
Reading time18 min
Views49K

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

Поговорим о технической стороне. Как повторить этот шедевр и можно ли обойтись без сервисов OpenAI, которые сложно оплатить в России? И главное — сколько придется инвестировать в виртуальную подругу.
Читать дальше →
Total votes 121: ↑116 and ↓5+111
Comments65

От Arduino к Wiren Board за 10 лет. История автоматизации дома с солнечными панелями

Reading time11 min
Views12K

Пробовали ли вы когда‑нибудь сделать умный дом своими руками? Герой моего нового рассказа Алексей сначала собрал автоматизацию на Arduino десять лет назад, но затем от нее отказался и перешел на оборудование Wiren Board. В чем же причины такого шага?

Интересно? Тогда ныряйте под кат.

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

Читать далее
Total votes 33: ↑32 and ↓1+31
Comments19

Сколько стоит умный дом? Рассказываю, как строил свой и что получилось за 1000 руб./м²

Level of difficultyEasy
Reading time25 min
Views95K

Подробный рассказ о том, как я свой дом и сад сделал умными. С фото, техническими деталями, стоимостями и выводами на будущее.

Читать
Total votes 300: ↑298 and ↓2+296
Comments296

Hippotable — анализ данных прямо в браузере

Level of difficultyEasy
Reading time5 min
Views4.9K

Сегодня я расскажу про hippotable — удобный инструмент для анализа данных. Мне часто нужно поковыряться в датасете среднего размера (1–100 Мб), чтобы ответить на довольно простые вопросы. Ни один из существующих инструментов (bash, google sheets, jupyter + pandas) не показался мне особо подходящим для такой задачи, и я... решил сделать свой! Хотел поделиться результатом, показать пару интересных JS-инструментов для обработки и отображения данных, и рассказать, как дальше планирую развивать продукт. Запрыгивайте, будет интересно.

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

Умный дом на Raspberry Pi и Home Assistant: добавляем диммеры и реле Wiren Board

Level of difficultyEasy
Reading time10 min
Views24K

К нам обратился Петр из Минска, который решил рассказать о своем опыте сборки умного дома. Он выбрал популярную платформу Raspberry Pi и интегрировал домашние устройства в Home Assistant.

Но со светом возникли проблемы: Петр запланировал везде диммирование, причем диммеры должны работать, даже когда контроллер выключен. Здесь как раз подошли модули Wiren Board. Но как сделать так, чтобы эти модули заработали под Home Assistant?

Петр установил шлюз Modbus-Ethernet и написал на Python интеграцию модулей Wiren Board в Home Assistant.

Мы посетили умный дом Петра и спешим поделиться с читателями подробностями.

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

Самая дешевая заводская панель управления умным домом, которая отлично работает

Level of difficultyHard
Reading time4 min
Views76K

Несколько лет назад уже писал про свои поиски идеальной и недорогой панели управления умным домом (статья собрала 200 закладок), тогда в 2020 году я остановился на недорогом андроид планшете, который перепрошил на чистый андроид для выполнения удаленных команд через ADB.

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

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

Выбор пал на NSPanel из‑за цены около 3,5 тысяч рублей, а также возможности установки в подрозетник или покупки настольной подставки — как у меня на фото.

Панель в подрозетник или на стол
Total votes 106: ↑103 and ↓3+100
Comments126

Разработка универсального ПЛК для домашних агрегатов

Level of difficultyMedium
Reading time15 min
Views12K

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

Читать далее
Total votes 23: ↑23 and ↓0+23
Comments17
1
23 ...

Information

Rating
Does not participate
Location
Минск, Минская обл., Беларусь
Date of birth
Registered
Activity

Specialization

Fullstack Developer, Software Architect
Lead
Git
SQL
Java
OOP
C++
Docker
Linux
Kubernetes
High-loaded systems
Designing application architecture