Search
Write a publication
Pull to refresh
-2
0
Алексей Дебелов @AlienJust

Разработчик ПО

Send message

Зачем ограничивать наследование с помощью final?

Reading time45 min
Views40K

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


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


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


Проблема хрупкого базового класса


Проблема хрупкого базового класса

Читать дальше →

Письмо начинающему изучать Data Science

Reading time2 min
Views64K

Я бы хотел получить такое письмо три года назад, когда только начинал изучать Data Science (DS). Чтобы там были необходимые ссылки на полезные материалы. Статья не претендует на полноту охвата необъятной области DS. Однако для начинающего специалиста будет полезна.


Нейронные сети – это...

Читать дальше →

Как я чуть не выкинул 150к на ветер или история установки приточной вентиляции в квартире

Reading time19 min
Views709K

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


Читать дальше →

Моделирование бега под дождем

Reading time18 min
Views23K

Моделирование бега под дождем


Вступление


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


Читать дальше →

Умный дом с Xiaomi на примере бани

Reading time12 min
Views80K
В интернете довольно много обзоров и видеороликов о построении умных домов. Бытует мнение, что все это достаточно дорого и хлопотно в организации, то есть, в целом, удел гиков. Но прогресс не стоит на месте. Устройства становятся более дешевыми, при этом более функциональными, а проектирование и монтаж – довольно простыми. Однако, в основном, обзоры фокусируются на 1-2 примерах использования, практически не покрывая нюансы и не создавая целостной картины. Поэтому в данной статье я хочу сделать обзор законченного проекта, продемонстрировать сценарии использования и встретившиеся подводные камни в построении умного дома с помощью устройств Xiaomi на примере бани. Описанные идеи с небольшими вариациями можно применить и при автоматизации квартиры.

image

Читать дальше →

5 причин, почему вы должны прекратить использовать System.Drawing в ASP.NET

Reading time9 min
Views21K
Привет, Хабр! Представляю вашему вниманию перевод статьи «5 Reasons You Should Stop Using System.Drawing from ASP.NET».

image

Ну что ж, они таки сделали это. Команда corefx в конце концов согласилась на многочисленные просьбы и включила System.Drawing в .NET Core.
Читать дальше →

На моей визитке работает Linux

Reading time6 min
Views110K
Перевод статьи из блога инженера Джорджа Хиллиарда


Кликабельно

Я инженер встроенных систем. В свободное время я часто ищу то, что можно будет использовать в проектировании будущих систем, или что-то из разряда моих интересов.

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

Я подумал: «Эти процессоры настолько дешёвые, что их практически можно раздавать даром». И через некоторое время ко мне пришла идея сделать голую карточку для Linux в форм-факторе визитной карточки.
Читать дальше →

23 минуты. Оправдание тугодумов

Reading time3 min
Views194K
Я всегда думал, что я – тупой. Точнее, что я — тугодум.

Проявлялось это просто: на совещаниях и обсуждениях я не мог быстро придумывать решение задачи. Все чего-то говорят, иногда умное, а я – сижу и молчу. Даже как-то неудобно было.

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

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

Просто культура в тех компаниях, где я начинал работать, была модерновая. Ну, как там это бывает – «совещание должно закончиться принятием решения». Вот чего придумали на совещании, то и принимается. Даже если решение — полная фигня.
Читать дальше →

Кинологическая служба аэропорта: вас уже обнюхали

Reading time9 min
Views52K
У собаки стереонюх. На экзамене она на время ищет кусочки мяса на площади 400 квадратных метров, и один из них часто прячут в бензобак машины.

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

Ещё у неё куда более сложный сенсор (больше чувствительных клеток и больше обработчиков в мозгу) — и это позволяет чувствовать не один «общий» запах, а каждый в гамме отдельно. По аналогии со зрением — это как разница между световым сенсором в виде матрицы или одного пикселя: неразвитый датчик даёт обработать только цвет и уровень освещённости, а развитый даёт возможность видеть предметы. Примерно вот так это смог изобразить художник по моему описанию:


И ещё собака может отсортировать каждый запах по давности с квантованием в 3-5 минут, то есть посмотреть логи чемодана

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

Но если такая чихнёт около вас, это вилы.
Читать дальше →

Шлюз для UDP между Wi-Fi и LoRa

Reading time4 min
Views8.8K

Делаем шлюз между Wi-Fi и LoRa для UDP



У меня была детская мечта — выдать каждому бытовому «безВайФайному» устройству билет в сеть, т. е. IP-адрес и порт. Спустя какое-то время я понял, что не стоит откладывать. Надо взять и сделать.


Техническое задание


Сделать шлюзом M5Stack с установленным Модулем LoRa (рисунок 1). Шлюз будет подключён к Wi-Fi-сети, в которой получит по DHCP локальный IP-адрес. Шлюз с определённой периодичностью будет вещать в «LoRa-эфир» своё имя (аналог SSID для Wi-Fi) и диапазон допустимых портов, чтоб другие устройства знали, что есть такая сеть, к которой можно подключиться и в каком диапазоне можно «повыбирать» свободный порт. Поскольку это будет прототип, аутентификация не в этот раз. Новые устройства-клиенты будут находить доступную LoRa-сеть и передавать ей выбранный порт. После того, как шлюз получил от нового клиента порт, проверяет свободен ли он, если да, то регистрирует нового клиента и начинает слушать данный порт на собственном асинхронном UDP-сервере. После регистрации клиент получит согласие или отказ на использование заявленного порта. Порядок работы отображён в таблице 1.



Рисунок 1


Таблица 1


сторона направление и данные сторона сеанс
[ клиент ] <— сигнал-маяк — [ шлюз ] 0xA1
[ клиент ] — выбранный порт —> [ шлюз ] 0xB1
[ клиент ] <— согласие или отказ — [ шлюз ] 0xA2
[ клиент ] — UPD-пакет —> [ шлюз ] 0xB2
[ клиент ] <— UPD-пакет — [ шлюз ] 0xA3
[ сеть ] <— UPD-пакет — [ шлюз ] 0xC1

Передо мной на столе лежат всякие Модули для M5Stack и скучают. Давайте возьмем LoR’у и развлечёмся с ней. Сама концепция модулей прекрасна! Что тут скажешь? Но, модули у меня первой ревизии, в которых ужаснейшая встроенная антенна, выполненная на гибкой печатной плате и приклеенная к боковой стенке корпуса. Я проводил однажды полевые тесты таких модулей (можно посмотреть на русскоязычном канале на YouTube):



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

Краткая и на 146% точная история языков программирования

Reading time4 min
Views84K


1800


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


1842


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

Читать дальше →

Приключения немецкого обедненного гексафторида урана в России. Часть 1. История и технологии обогащения

Reading time12 min
Views65K
Уже почти два месяца Гринпис и экологи-активисты ведут кампанию по запрету ввоза в Россию обедненного гексафторида урана (ОГФУ) из Германии. Я уже высказывался об этой истории в самом ее начале: В Россию начали завозить радиоактивные отходы из Европы? Разбираемся. За прошедшее время пришлось несколько раз выступать в СМИ на эту тему (тут вот подборка этих записей), поучаствовать в публичном обсуждении в Новоуральске, а также в очной публичной дискуссии с одним из главных оппонентов ввоза. А на прошлой неделе я побывал в пресс-туре и на самом комбинате УЭХК в Новоуральске, куда и везут ОГФУ.


Газовые центрифуги на УЭХК — крупнейшем в мире комбинате по обогащению урана

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

Статическая подписка с использованием шаблона Наблюдатель на примере С++ и микроконтроллера Cortex M4

Reading time12 min
Views9.2K


Всем доброго здравия!


В преддверии Нового года хочу продолжить рассказывать про использование С++ на микроконтроллерах, на этот раз попытаюсь рассказать про использование шаблона Наблюдатель (но далее я буду называть его Издатель-Подписчик или просто Подписчик, такой вот каламбур), а также реализацию статической подписки на С++17 и преимущества этого подхода в некоторых приложениях.

Читать дальше →

Новые бесплатные видео-курсы и гайды по C#, .NET, и ASP.NET для начинающих

Reading time1 min
Views9.1K
Если вы думали о том, чтобы начать изучать C#, то сейчас как раз самое время, чтобы начать! Наш коллега Скотт Хансельман работал над этим проектом несколько месяцев и рад представить страницу http://dot.net/videos 

На ней вы найдете около сотни коротких видео (в ближайшее время их станет еще больше), которые научат вас разным темам, например C# 101, .NET, созданию настольных приложений, созданию веб-приложений ASP.NET, использованию контейнеров и Docker, и даже основам машинного обучения. Вы найдете очень много крутых, размеренных видео для новичков. Большинство из них длятся менее 10 минут, и вы можете найти их на YouTube!

Решились? Я рекомендую начать с этих трех в следующем порядке — C#, .NET, и затем ASP.NET. Ну а после них выбирайте любые темы, которые вам нравятся больше всего.

Читать дальше →

STM32 fast start. Часть 2 Hello World на HAL, отладка в Atollic TrueSTUDIO

Reading time3 min
Views28K
В прошлый раз мы осваивали создание нового проекта при помощи STM CubeMX первую часть можно найти здесь.

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



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

STM32 + CMSIS + STM32CubeIDE

Reading time4 min
Views132K
Здесь я расскажу как создать минимальный проект на CMSIS с использованием «родной» IDE для микроконтроллеров STM – STM32CubeIDE.

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


Читать дальше →

Базовые команды Linux для тестировщиков и не только

Reading time24 min
Views278K

Предисловие


Всем привет! Меня зовут Саша, и я больше шести лет занимаюсь тестированием бэкенда (сервисы Linux и API). Мысль о статье у меня появилась после очередной просьбы знакомого тестировщика подсказать ему, что можно почитать по командам Linux перед собеседованием. Обычно от кандидата на позицию QA инженера требуют знание основных команд (если, конечно, подразумевается работа с Linux), но как понять, про какие команды стоит почитать во время подготовки к собеседованию, если опыта работы с Linux мало или вовсе нет?

Поэтому, хоть про это уже и много раз написано, я всё же решился написать ещё одну статью «Linux для новичков» и перечислить здесь базовые команды, которые нужно знать перед любым собеседованием в отдел (или компанию), где используют Linux. Я подумал, какие команды и утилиты и с какими параметрами я использую чаще всего, собрал фидбек от коллег, и скомпоновал это всё в одну статью. Статья условно делится на 3 части: сначала краткая информация об основах ввода-вывода в терминале Linux, затем обзор самых базовых команд, а в третьей части описывается решение типовых задач в Linux.
Читать дальше →

Релиз кросс-платформенного .NET UI-тулкита AvaloniaUI 0.9

Reading time6 min
Views15K

Avalonia — кроссплатформенный .NET UI-тулкит с открытым исходным кодом, вдохновлённый технологиями WPF и UWP. Он полностью поддерживает Windows, macOS и Linux, .NET Core 2.0-3.1, XAML, дата-биндинги, lookless-контролы и многое другое.



(на ВДПВ показана работа без XOrg)


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


За подробностями прошу под кат.

Читать дальше →

Продолжайте полет с Xamarin.Forms 4.4

Reading time4 min
Views4.1K
Мы пообщались с нашими разработчиками, которые делают уйму мобильных приложений каждый год, и они сказали: «Мы не можем вспомнить, когда в последний раз мы делали мобильное приложение, которое НЕ включало бы в себя карусель.» Итак, мы рады представить новый элемент управления CarouselView в Xamarin.Forms 4.4.0. Кроме того также представляем IndicatorView для отображения страниц и элементов с каруселью. А также SwipeView для предоставления контекстных действий для любого элемента в CollectionView. Тема выпуска каруселей была бы неполной без демонстрации новой поддержки GIF-анимации для изображений. Приступим.

Читать дальше →

Функциональное программирование — это не то, что нам рассказывают

Reading time17 min
Views129K

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



Хотя люди обычно признают удобства ФП фич, ведь намного приятнее писать:


int Factorial(int n)
{
    Log.Info($"Computing factorial of {n}");
    return Enumerable.Range(1, n).Aggregate((x, y) => x * y);
}

чем ужасные императивные программы вроде


int Factorial(int n)
{
    int result = 1;
    for (int i = 2; i <= n; i++)
    {
        result *= i;
    }
    return result;
}

Так ведь? С одной стороны да. А с другой именно вторая программа в отличие от первой является функциональной.


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

Читать дальше →

Information

Rating
Does not participate
Location
Екатеринбург, Свердловская обл., Россия
Date of birth
Registered
Activity