Pareto Front

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

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

На языке науки это называется multi-objective optimization — многофакторная/многокритериальная оптимизация.

Читать далее ▸


Docker: containerd, runC, runV и в общем про архитектуру

Сначала Docker был монолитом. И это преподносилось как преимущество. Например, в знаменитом “Introduction to Docker” на 20-й минуте Соломон Хайкс рассказывает как здорово, что Docker — это один файл. Кладешь его в систему, и готово! Позже, однако, монолитность была названа одной из причин размолвки между Docker и CoreOS и последовавшего за этим бурления на Hacker News:

Docker process model — where everything runs through a central daemon — is fundamentally flawed. To “fix” Docker would essentially mean a rewrite of the project…

Но всё, что ни делается — к лучшему. Резонанс утих, а сообщество разработчиков договорилось о необходимости разрабатывать открытые стандарты и делать декомпозицию. Появился проект ​Open Container Initiative (OCI) и разные интересные названия: containerd, runC, runV, runZ

Читать далее ▸


Docker: user namespaces

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

В Docker 1.10 добавили поддержку так называемых user namespaces, которые призваны исправить эту ситуацию.

Нужно ли скорее бежать и включать их у себя?

Не спешите! Во всей этой истории предполагается, что зловредный пользователь контейнера хочет атаковать внешнюю систему. Такое возможно в сценариях хостинга и аренды. Если же вы используете Docker сами и на своих серверах, то, конечно же, не будете этого делать, а наоборот будете соблюдать правила безопасности внутри контейнеров. “Внутренний” root заслуживает такого же бережного обращения как и внешний.

Читать далее ▸


Интерполяция или фильтр?

Долгое время меня беспокоил вопрос, почему слова “интерполяция” и “фильтр” порой употребляются как взаимозаменяемые. Например, билинейная фильтрация и билинейная интерполяция по сути одно и то же явление.

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

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

Читать далее ▸


Подробнее про теорему Котельникова и дискретизацию сигналов

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

Чтобы никого не обидеть, теорему эту называют теоремой Котельникова — Найквиста — Уиттакера — Шеннона, или попросту теоремой отсчётов (the Sampling theorem). Она считается одним из важнейших результатов теории информации.

Формулировка достаточно простая:

Если аналоговый сигнал не содержит в своем спектре частот выше Fmax, то его можно идеально точно восстановить по дискретным отсчётам, взятым равномерно с частотой строго большей 2·Fmax.

Даже если вы не имеете никакого отношения к обработке сигналов, очень может быть, что вам знакома фраза “CD quality 44100 Hz”. Имеется в виду, что на компакт-дисках звук хранится в виде дискретных отсчётов, по 44100 штук на секунду. А это, согласно озвученной теореме, означает что “на CD можно идеально записать звук с частотой до 22050 Гц”, что вполне себе хорошо, так как слышимый человеком диапазон укладывается в эти рамки.

Казалось бы, всё отлично, что тут ещё обсуждать. Но у меня возник ряд вопросов:

  1. Ограниченность по частоте — так ли это просто, как кажется на первый взгляд?

  2. Как именно предполагается восстанавливать сигнал, чтобы получилось “идеально точно”?

  3. Что будет, если в оцифровываемом сигнале окажутся частоты равные или превосходящие допустимую половину частоты дискретизации? Они проигнорируются, или произойдет что-то другое?

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

Должен предупредить, будет много страшной математики…

Читать далее ▸