Толстые хвосты

Эта статья — Jupyter-блокнот, в котором я пытаюсь обобщить текущий уровень моего понимания статистических распределений с толстыми хвостами, популярно описанных у Нассима Талеба и Бенуа Мандельброта.

Загрузим хитро подготовленные данные:

import numpy as np
data = np.loadtxt('data/fat-tails.tsv')

И посмотрим на гистограмму:

from matplotlib import pyplot as plt
plt.rcParams['figure.figsize'] = (8, 2)
plt.rcParams['figure.dpi'] = 144

def plot_hist():
    plt.hist(data, bins=35, density=True, color='silver')

plt.figure()
plot_hist()
plt.show()

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

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


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 заслуживает такого же бережного обращения как и внешний.

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


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

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

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

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

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