Что в Америке так и осталось говном

За два десятка лет жизни в США я видел много изменений в стране. И в основном это были улучшения к лучшему, хотя некоторые вещи и стали хуже. Японские автомобили, например, стали хуже. Представители власти стали хуже. Но многое стало лучше — дома, например, стали доступнее. В 1997 году проценты за ипотечный займ составляли около 8% (и это ещё ничо, в 80е было ещё хуже), а сейчас немного ниже 4%. Но не деньгами едиными. Намного лучше стала жратва. Раньше в магазинах было два вида сыра — “американский” и “швейцарский”. А щас даже в дешевейшем сельском Волмарте можно купить и гауду, и бри, и даже грюйер (ну, не лучшие и дорогущие марки, но всё же). Вот с йогуртами похуже, это правда. Такого обилия йогуртов, как в той же Германии, я тут не видел. ИЧСХ, все немецкие йогурты вкусные — какой не купи. Но хлеб можно купить нормальный, а не запаянную в пластмассу вату. Мороженое стали выделывать вменяемое.

И среди всего этого благолепия одна вещь как была отвратительным говном, так и осталась отвратительным говном — это американский майонез.

С хорошими соусами в США вообще напряжёнка до сих пор. Даже в полуголодные 90е годы в Москве можно было купить больше разнообразных кетчупов, чем сейчас в США. И даже советский майонез, в маленьких банках с жестяными крышками, был вкусным — его можно было намазывать на хлеб и сразу есть.

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

С майонезом ситуация также осложняется тем, что практически все производители делают его с соевым маслом. С этим отвратительным бурлом с тошнотворным вкусом и запахом. Почему они так делают? Обратите внимание на ценник, когда будете покупать растительное масло в магазине в следующий раз. Самое дешёвое — это то, которое стыдливо называется “овощным маслом” (vegetable oil). И только прочитав этикетку, можно понять, что оно соевое. Я всегда ненавидел это масло, и никогда его не покупаю. Подсолнечное, арахисовое и моё любимое масло из виноградных косточек — вот это совсем другое дело, вот это вкусные нормальные масла.

Кстати, тот майонез, на котором гордо пишут, что он из оливкового масла — на деле сделан тоже из соевого. Этикетку почитайте внимательно.

Ничего близкого к тому прекрасному майонезу, что я покупал в России под маркой “Слобода” во время последнего заезда, в США в обычном магазине купить просто невозможно. Хорошо, что теперь есть интернет. Поискал “gourmet mayonnaise”. Выскочил майонез “Сэр Кенсингтон”, и прямо-таки елейный отзыв не где-нибудь, а на сайте журнала “Bon Appetit“. Хвалили ну просто как девку перед выданьем — мол, настолько вкусный майонез, что хочется прямо из банки употреблять. Смотрю состав — на подсолнечном масле. И доступен в нашем местном Whole Foods. Разлысил лоб, поехал в Хулефудз. Укупил, приволок домой, достал ложку, пробую. БЛДЖАД, всё то же самое — отвратительное перекисленное уксусное говно. И всё окончательно стало ясно с журналом Bon Appetit — вкусовые пупырышки у них атрофированы точно так же, как у большинства американцев.

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

А что-то в этом есть

По совету ув. ny-quant попробовал использовать формулу x = r * x (1 – x) в качестве генератора случайных величин. Одного преобразования мне показалось мало, так что делал два кряду.

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

Ну, как грица, pics or it didn’t happen.

Результат использования функции NumPy.random.random():

И результаты, полученные из двойного применения x = r * x (1 – x) с двумя разными значениями r:

Вообще — неплохо, должен признать.

Но если приблизить и рассмотреть детальнее, становится заметной разница. Справа — x = r * x (1 – x), слева — NumPy.random.random()

Как видно, x = r * x (1 – x) чаще принимает граничные значения, там много белого и много чёрного, и мало серого. Из-за этого, кажется, что есть узоры, как на булатной стали. Я не математик, но мне кажется, что большая равномерность является желательной.

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

Изящное решение

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

Например, вот такая формула (сишный синтаксис): x = (x * 17) % 11

Начиная с x = любое натуральное число, она будет выдавать псевдослучайные натуральные числа от 1 до 10. Но последовательность будет всегда одной и той же — на выходе видим 8, значит, следующим числом будет 4. Конечно, настоящие формулы для генерации псевдослучайных чисел намного более сложны (например, хеширование SHA256) и очень хорошо апроксимируют случайное распределение, но всё равно рано или поздно даже они начинают зацикливаться.

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

Например, очень популярен сбор случайности от действий человека. Так, можно считать количество тактов процессора между нажатиями кнопок на клавиатуре. Даже самая дисциплинированная машинистка не сможет повторить их один-в-один. Примерно так и работает сбор энтропии во Фрюниксах — /dev/random считает такты процессора между прерываниями.

У этого подхода тоже есть проблемы. У незанятого сервера, где мало взаимодействий, генерирующих прерывания, проблема сбора энтропии стоит довольно остро. Я даже более скажу — возможна атака, которая будет подсовывать этому серверу какую нужно “случайность”, и на этой основе ломать алгоритм шифрования. Примерно так работал недавний KRACK для беспроводных сетей — где крякер заставлял сеть переиспользовать значение, которое должно быть одноразовым.

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

Но есть и не такие радикальные способы. Так, компания Cloudflare, занимающаяся предоставлением услуг инфобезопасности, придумала интересную методику с применением лавовых ламп.

Картинка из статьи на ZDNet.

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

Чорт возьми, изящно!

Отрицательная частота

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

Методов есть несколько, но про это в другой раз.

Основа в том, что чистый сигнал определённой частоты (например, 1 КГц) представляет собой синусоиду. Всё, что немного не синусоида, уже есть не чистый сигнал, а сумма сигналов, сумма синусоид. Даже меандр можно описать синусоидами — как функцию y(x) = sin(x) + sin (3x) / 3 + sin (5x) / 5 + .. + sin (nx) / n. Потому что меандр — это сумма синусоид основного сигнала и синусоид нечётных гармоник — то-есть, сигналов с частотой в 3, 5, 7 и так далее до бесконечности раз выше основной. Просто если речь идёт о звуковом сигнале, гармоники выше 19й слышны (как считается) уже не будут, так что меандр там получается не совсем полный, приблизительный.

Так вот если есть источник звукового сигнала, как узнать, насколько чистый там тон? Можно записать это в обыкновенный wav файл, а потом провести над полученным массивом данных математическое издевательство, называемое преобразованием Фурье. Пакетов для этого существует масса, можно взять бесплатный редактор Audacity, в нём есть спектральный анализ (преобразование Фурье это оно и есть).

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

Так что нарисовал свою программу. Разумеется, на Питоне (на чём же ещё, не на Сях же рисовать). Благо есть модуль SciPy, в котором уже всё придумано, в том числе алгоритм быстрого преобразования Фурье (сиречь FFT).

Алгоритм FFT выдаёт гистограмму. По горизонтали — частота сигнала, по вертикали — его громкость. Примерно так слышит музыку человеческое ухо. Так вот выяснилось, что по умолчанию алгоритм выдаёт симметричную вокруг нуля герц картинку, то-есть, есть как положительная частота, так и отрицательная %) На этом месте я залип — как это, минус один килогерц?

Анализ файла с синусоидой 1 КГц выглядит так:

В принципе оно ведь логично — у синусоиды одна половинка имеет положительные значения от 0 до 1 (в военное время — до 4 =)), а другая — отрицательные, от 0 до -1. Соответственно, положительная частота — для того, что выше нуля, а отрицательная частота — для того, что ниже нуля. Правда, не совсем понятно, почему именно вот так — не было бы логичнее делать положительную и отрицательную амплитуды (громкости)?

Ещё менее понятным стало, когда я силой сгенерировал синусоиду с отрезанной верхушкой и сунул её в анализатор. Вот такую:

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

Плюнул, сменил алгоритм scipy.fftpack.fft на scipy.fftpack.rfft. rfft — это real fft, и отрицательных частот не выдаёт. Так намного понятнее.

Продолжаю изучать.

И снова пнём Андроид

С сисадминской точки зрения телефоны с Андроидом — ЗЛО.

Почему? Потому, что если на телефоне была секретная информация, то перед выдачей новому сотруднику этого телефона или при избавлении от устройства вообще, эту информацию нужно стирать по ГОСТу стандартам NIST.

И если мы начнём читать стандарт, то процедура надёжного удаления данных для телефоном типа iPhone проста — ресетишь и в ус не дуешь. Эппл описал стандарт того, как этот алгоритм работает, и он полностью удовлетворил NIST.

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

Поэтому в общем случае, если от телефона на ОС Андроид надо избавиться, и на нём хранились секретные данные, телефон необходимо СЖИГАТЬ (ну или размалывать в пыль с размером зерна не более 2.4mm, как описано в стандарте).

И, кстати, для телефонов на ОС Windows то же самое. Вот уж никогда не подумал бы, что Яббл ближе корпоративному миру, чем Микрософт.