Обновить
32K+
169
Дмитрий Завалишин@dzavalishin

Архитектор

129,6
Рейтинг
263
Подписчики
Отправить сообщение

Объекты и классы — дар божий или проклятие

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели6.2K

Я давно вынашивал желание написать эту статью. И, наверное, мне бы стоило потратить некоторое время на то, чтобы написать её чуть более структурно и продуманно, но, пожалуй, я её в таком случае вообще не напишу, так что - статья будет ad hock, прям from the top of my mind.

Начнём с того, что в обсуждениях объектного программирования бытуют несколько популярных мнений

Читать далее

Ракетный щит СССР

Уровень сложностиСредний
Время на прочтение32 мин
Охват и читатели32K

Это интервью я записал в 2014 году. Так получилось (и это моя вина), что сразу до материала не дошли руки, потом были другие дела и, в общем, запись потерялась. Недавно я, разгребая старые архивы, нашёл её в закромах Родины, и вот — дело 12-летней давности завершено.

Мой визави Анатолий Степанович Глушко — один из создателей софтверной части системы противоракетной защиты Советского Союза.

Я даю текст интервью практически необработанным, с минимальными исправлениями. Интервью было несколько спонтанным, но, мне кажется, оно представляет изрядный интерес.

Читать далее

Как писать музыку: краткий справочник композитора

Уровень сложностиСредний
Время на прочтение18 мин
Охват и читатели11K

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

Работа композитора же вниманием обойдена. Нет, что‑то есть, но тоже, в основном, по частным тематикам. Гармония, бас, ритм… Никто не делится секретом — как написать музыку.

Читать далее

Домашняя студия: ударные

Уровень сложностиСредний
Время на прочтение16 мин
Охват и читатели8.2K

Продолжение. Начало тут.

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

Это статья о том, как композитор, работающий в домашней студии, может обеспечить себя качественными ударными. Спойлер — обратиться к настоящему барабанщику.

Но — пойдём от истоков. Есть три вида ударных.

Читать далее

Домашняя студия — краткий обзор для начинающего

Уровень сложностиПростой
Время на прочтение15 мин
Охват и читатели9.3K

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

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

Моя домашняя студия живёт и развивается уже около 30 лет и я подумал, что, наверное, грех не поделиться накопленным опытом. Надеюсь, кому‑то написанное будет полезно. Да и, наверное, мне будет интересно почитать комментарии читателей.

Читать далее

Протоколы для систем реального времени

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели9.6K

Эта статья написана по итогам разработки геоинформационной платформы «RndFlow.Кругозор» и конкретной прикладной системы на её основе.

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

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

Сама система представляет из себя интеграционную платформу, которая поддерживает

Читать далее

Архитектура и особенности процессора Эльбрус 2000

Время на прочтение14 мин
Охват и читатели27K

В чем принципиальные особенности процессора российской разработки Эльбрус? О ней в последнее время много говорят: как хвалят, так и ругают. Но давайте углубимся в архитектуру процессора, чтобы все-таки понять в чем его плюсы и минусы.

Расскажу, что такое скрытый и явный параллелизм, как используются предикаты и осуществляется подготовка переходов. Почему Эльбрусу не нужны push и pop команды и в чем особенности его регистрового окна. Какая защита от атак есть у российского процессора и какие возможности дает защищенный режим.

Данная статья — транскрипт моего выступления на конференции HighLoad++.

Читать далее

Что наша жизнь? Игра

Время на прочтение5 мин
Охват и читатели10K

Что делает в отпуске директор группы программерских компаний? То, что не может делать на работе. Программирует. Всласть. :)

Мне много лет, я выполз из тьмы и в Transport Tycoon Deluxe я играл ещё в то время, когда эта игра только появилась (это 94-й год).

Читать далее

ОС Фантом: оконная подсистема — делаем контролы

Время на прочтение7 мин
Охват и читатели14K
Сегодня речь пойдёт о том, как устроен графический UI Фантома.

(Что такое ОС Фантом можно узнать, прочитав вот эти статьи.)

Точнее — как этот графический UI появился на свет. Ибо долгое время у Фантома был только графический вывод — донести системе что-либо с помощью мышки было почти невозможно.

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

Что было в наличии на начало проекта UI? В принципе — немало.

Была, собственно, графика — видеодрайвер, оконная подсистема в режиме только отображения, bitmap шрифты, подсистема оконных событий (events), управление фокусом окон и сопутствующие примитивы.

Теперь по шагам и чуть подробнее.
Читать дальше →

MQTT/UDP, предвесенние итоги: дистанционная конфигурация и цифровая подпись

Время на прочтение3 мин
Охват и читатели5.2K
Зима кончается, и это повод подвести очередную черту и рассказать, что нового появилось в MQTT/UDP.

Для начала, ссылки на предыдущие введение и статью.

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

  • Появился механизм гибкого расширения протокола: Tagged Tail Records, TTRs
  • На его базе сделана схема цифровой подписи пакетов
  • Сделан механизм дистанционной конфигурации компонент
  • Поднят полный цикл CI: сборка, юнит-тесты, сквозные тесты протокола (4*4 языка программирования)
  • Реализация на Си теперь поддерживает разные архитектуры и умеет интегрироваться с разными ОС и мониторами.
  • Есть публичные пакеты для Питона и Луа, хотя, конечно, они уже устарели.

Ну и многое по мелочи: интеграция с OpenHAB, конфиг-файлы и логгинг, проверка совместимости с облачным MQTT сервисом, сделан тестовый пример для Wemos D1 (NodeMCU), сделан тестовый пример для atmega128+ethernet (не ардуино), сделан пример протокольного коннектора на Яве (CCU825), сделан пример информера-контроллера в desktop tray (наконец-то я могу включать свет в комнате в два клика мышки:), и ещё разное.

Теперь по порядку.
Читать дальше →

С новым годом, с новым MQTT/UDP

Время на прочтение4 мин
Охват и читатели19K
Привет.

Как я уже писал недавно (Первая краткая статья о MQTT/UDP), MQTT/UDP — протокол на базе MQTT, но:

  • Ходит поверх UDP broadcast (не нужен брокер, почти не нужна конфигурация)
  • До неприличия простой в реализации (10 строк на си + UDP/IP стек — и вы отправляете данные с сенсора)
  • Все слышат всех

В некотором смысле это CAN, но поверх Ethernet-а.

Зачем.
Читать дальше →

Проще, чем MQTT? MQTT/UDP

Время на прочтение3 мин
Охват и читатели15K
Хотел написать на эту тему подробную статью, но, очевидно, руки не доходят. Посему краткое сообщение. Я разработал и реализовал на нескольких языках в виде прототипного кода версию протокола MQTT под рабочим названием MQTT/UDP. Для нетерпеливых и тех, кому уже всё понятно и очевидно, код на Гитхабе

Зачем

Я живу в квартире, которая почти полностью управляется собственной системой умного дома несколько лет. Управление светом, климатом, датчики, лёгкая автоматизация, вот это всё.

За это время я выяснил (да, впрочем, и до того понимал), что главное свойство систем УД — надёжность.

Все системы с центральным узлом по определению ненадёжны. Отсюда — желание получить интерконнект компонент системы (а их в реальном умном доме много) без использования какого-либо центрального хаба.
Читать дальше →

DZ Online Tech: ABBYY. Как не запутаться в нейронных сетях?

Время на прочтение10 мин
Охват и читатели2.6K
Мы (DZ Systems) уже второй год снимаем серию передач о цифровой трансформации. Обычно это передачи «про бизнес», в основном ориентированные на топ-менеджеров и призванные помочь разобраться в бизнес-ценности того, что называется цифровая трансформация.

Но в этом году снимаем так же и вторую «линейку» передач — DZ Online Tech, теперь уже ориентированную на технологические аспекты той же темы. Если коротко — о том, что находится «под капотом».

Ниже — расшифровка очередной такой передачи, в которой мы с Иваном Ямщиковым (Яндекс, ABBYY, да и вообще профессионал высокого класса) говорим о применении нейронных сетей в современном мире.

Если интересно, можно посмотреть и саму передачу.

А для тех, кто любит читать — расшифровка ниже:

— Здравствуйте. Наш сегодняшний гость – Иван Ямщиков из компании ABBYY, который
расскажет нам как устроен современный искусственный интеллект.
По отношению к AI условно есть две позиции: люди, которые говорят: «Мы не хотим
ничего понимать про суть происходящего в системе. У нас есть статистические методы,
которые сами вынут модель из внешней жизни. Эта модель будет правильной, она будет
чувствовать все семантические тонкости». И есть люди, которые говорят: «Нет, так
нельзя. Мы же понимаем, что происходит. Мы это понимание должны вложить в систему
искусственного интеллекта, и тогда она будет ценнее, лучше и качественнее». Эта битва
имеет внутри себя какие-то критерии?


— Давай я объясню на менее философском языке. Есть люди, которые говорят: «Нам нужны более
сильные, более производительные алгоритмы и бОльшие объёмы данных. Мы возьмём более
производительный алгоритм, и он на бОльшем объёме даст нам бОльшее качество целевой
метрики, неважно какой». Я не знаю людей, которые говорят, что им не нужны данные или
алгоритмы. Поэтому у второй группы людей, на мой взгляд, подход следующий: «Помимо
всего этого нам бы неплохо ещё человеческой разметки в том или ином виде, какое-то
экспертное знание, добавить поверх».
Читать дальше →

DZ Online Tech: Postgres Professional

Время на прочтение10 мин
Охват и читатели3K
Привет.

В прошлом году я начал снимать серию передач/интервью на тему цифровой трансформации бизнеса (они тут, кому интересно — подписывайтесь). Эти передачи были на стыке IT и бизнеса, но, всё же, больше про бизнес.

В процессе стало понятно, что есть немало тем, которые имеют существенную глубину с программерской точки зрения. И в этом году мы начали снимать серию интервью под общим лейблом «DZ Online Tech» — теперь уже с упором на то, что под капотом. Ну и поскольку видео всем смотреть лень, конечно, эти интервью расшифровываются, и сегодня я публикую первое — с Иваном Панченко из Postgres Professional.

Кому интересен оригинал — вот он:


(Ну и, кстати, я не могу поклясться, что все выпуски будут выходить в расшифровке, так что если понравилось — подписывайтесь на ютубе, туда всё приходит раньше и гарантированно.)

Для тех, кто любит читать — расшифровка:

Колибри для Фантома

Время на прочтение4 мин
Охват и читатели5.1K
Краткое содержание: разработка модуля совместимости с ОС Колибри внутри модуля совместимости с ОС Юникс внутри ОС Фантом)

Внутри ОС Фантом есть маленький простенький Юникс. POSIX подсистема. В принципе необязательная для работы самого Фантома и довольно неполная — Unix Quake под ней собрать удалось, а, например, апач не соберётся почти наверняка. Тем не менее — она есть.

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

Почему же, тем не менее, любопытно реализовать слой совместимости с этой ОС? Тому несколько причин:

  • Она очень компактна. Забегая вперёд — первую программу для Колибри в Фантоме удалось запустить через четыре часа работы.
  • Этот мини-проект стал драйвером развития некоторых нативных подсистем Фантома,
    в частности — оконной.
  • Главное — всё состояние процесса Колибри, известное ядру, укладывается в небольшую структуру. Многие (почти все!) вызовы — stateless, то есть не опираются о какое-либо знание,
    хранимое в ядре. Это идеальный кандидат на реализацию персистентных (переживающих перезапуск ОС) бинарных (не написанных на байткод-языке) процессов в Фантоме.
Читать дальше →

Фантом: большая сборка мусора

Время на прочтение6 мин
Охват и читатели5.3K
Эта статья — продолжение, начало здесь. Для тех, кто не кликнул на ссылку, краткая вводная:

Мы обсуждаем сборку мусора в операционной системе Фантом, то есть в среде виртуальной (байткод-) машины, работающей в персистентной оперативной памяти. Размер персистентной памяти — порядка размера диска, то есть единицы терабайт на сегодня и, потенциально, десятки и сотни терабайт завтра.

Поскольку речь идёт о виртуальной памяти, то существенная часть объектов в любом случае находится не в оперативной памяти, независимо от того, какой алгоритм и вообще подход мы избрали. То есть — стоимость доступа к объекту велика. Это, в общем случае, дисковая операция.

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

Принятая мной идея схемы сборки мусора в такой среде выглядит как совокупность двух сборщиков.
Читать дальше →

Драйверы умного или виртуального железа

Время на прочтение5 мин
Охват и читатели12K
Первая статья про драйверы была уж совсем вводной, и мне подумалось, что её нельзя не дополнить рассказом про то, как устроены драйверы более современных устройств.

Для начала введём определение bus master: устройство, способное быть не только ведомым, но и ведущим на шине компьютера. То есть — не только отвечать на транзакции ввода-вывода, инициированные процессором, но и самостоятельно их инициировать — по собственной инициативе «ходить» в память.

История таких устройств уходит корнями в понятие DMA: ещё во времена прародителя микропроцессоров, микропроцессора 8080 (КР5080ИК80), появилось понимание, что процессор хорошо бы разгрузить от рутинной операции перетаскивания байтиков между устройствами в-в и памятью.
Читать дальше →

UDP/TCP File System, Trivial Remote File System

Время на прочтение2 мин
Охват и читатели23K
Сегодня выходной, так что напишу коротко про мелочи, до которых, как правило, руки не доходят.

TCP FS



Есть ещё одна вещь, которой нет в современном Юниксе и которую я хочу иметь в unix box фантома. Она проста как мычание, и почему её никто не сделал — непостижимо:

#cat /tcp/host/port > local_file


Правда, я хочу использовать иной синтаксис имени файла, URL style — tcp://host:port, но это уже детали. Естественно, наравне с TCP просится UDP, и там вообще проблем нет.

Заголовок спойлера
Вообще unix-подсистема Фантома «ест» как традиционные Юниксовые имена, /usr/include/stdio.h, так и URL-и, tcp://ya.ru:80.


Для TCP есть очевидная проблема — нужен ли нам listen или connect, но её можно решить через указание в имени «файла» определённого суффикса.

Сказать на эту тему настолько больше нечего, что перейдём без остановки к следующей.

TRFS — тривиальная дистанционная файловая система.


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

Lazy threads: опциональный параллелизм

Время на прочтение3 мин
Охват и читатели9.1K
Статья-гипотеза. Описанное нигде не было реализовано, хотя, в принципе, ничто не мешает запилить такое в Фантоме.

Эта идея пришла мне в голову очень давно и даже где-то была мной описана. Триггер к тому, чтобы её описать сегодня — обсуждение сетевых драйверов Линукса в комментариях к Анатомии драйвера.

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

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

То есть хотелось бы такого вызова функции, который при необходимости можно конвертировать в старт нити. Но по цене вызова функции, если нить реально не оказалась нужна.

Мне эта идея пришла когда я рассматривал совершенно фантастические модели для Фантом, включая акторную модель с запуском нити вообще на любой вызов функции/метода. Саму модель я отбросил, а вот идея lazy threads осталась и до сих пор кажется интересной.

Как это.
Читать дальше →

Анатомия драйвера

Время на прочтение5 мин
Охват и читатели27K
Опять вернёмся в традиционную область разработки операционных систем (и приложений для микроконтроллеров) — написание драйверов.

Я попробую выделить некоторые общие правила и каноны в этой области. Как всегда — на примере Фантома.

Драйвер — функциональная компонента ОС, ответственная за отношения с определённым подмножеством аппаратуры компьютера.

С лёгкой руки того же Юникса драйвера делятся на блочные и байт-ориентированные. В былые времена классическими примерами были драйвер диска (операции — записать и прочитать сектор диска) и драйвер дисплея (прочитать и записать символ).

В современной реальности, конечно, всё сложнее. Драйвер — типичный инстанс-объект класса, и классов этих до фига и больше. В принципе, интерфейс драйверов пытаются как-то ужать в прокрустово ложе модели read/write, но это самообман. У драйвера сетевой карты есть метод «прочитать MAC-адрес карты» (который, конечно, можно реализовать через properties), а у драйвера USB — целая пачка USB-специфичных операций. Ещё веселее у графических драйверов — какой-нибудь bitblt( startx, starty, destx, desty, xsize, ysize, operation ) — обычное дело.

Цикл жизни драйвера, в целом, может быть описан так:

  • Инициализация: драйвер получает ресурсы (но не доступ к своей аппаратуре)
  • Поиск аппаратуры: драйвер получает от ядра или находит сам свои аппаратные ресурсы
  • Активация — драйвер начинает работу
  • Появление/пропадание устройств, если это уместно. См. тот же USB.
  • Засыпание/просыпание аппаратуры, если это уместно. В контроллерах часто неиспользуемая аппаратура выключается для экономии.
  • Деактивация драйвера — обслуживание запросов прекращается
  • Выгрузка драйвера — освобождаются все ресурсы ядра, драйвер не существует.


(Вообще я написал в прошлом году черновик открытой спецификации интерфейса драйвера — см. репозиторий и документ.)

Мне известны три модели построения драйвера:

  • Поллинг
  • Прерывания
  • Нити (threads)

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

Информация

В рейтинге
62-й
Откуда
Москва, Москва и Московская обл., Россия
Работает в
Дата рождения
Зарегистрирован
Активность