Pi Day

Т.к. дату в формате ММДДГГГГ обычно пишут только в США, специальный день календаря 3.14 получается сугубо американским.

Ну, тогда вот вам шутку на математическом английском.

Объясняю, если кто недопонял:

Квадратный корень из минус единицы — это комплексное число, которое записывают буквой i.
Двойка в третьей степени — это восемь (eight), произносится точно так же как слово ate.
Сигма — это сумма (sum), произносится как слово some.
Ну и само число Пи, которое в английском Pi, и произносится не как Pee, а как слово Pie (пирог).

Так что получаем фразу, которая звучит как i ate some pie (я съел кусок пирога). Математический кавай.

Математическая шутка

Обожаю такие шутки.

Математик заходит в забегаловку, берёт столик на двоих. К нему подходит неопрятная официантка.

–Что будете заказывать?
–Я закажу бифштекс, но я также хочу разыграть своего коллегу, который тут будет с минуты на минуту. Вот сто долларов; когда он придёт, я задам вам вопрос, а вы ответите “икс в кубе поделить на три”, хорошо?
–Конечно.

Официантка берёт деньги и уходит.

За столик присаживается коллега математика.

–Привет!
–Привет! Слушай, тут такое классное место, и даже обслуживающий персонал умный. Вот смотри!

Математик останавливает проходяющую мимо официантку.

–Скажите мне, каков будет неопределённый интеграл функции икс в квадрате?
–Икс в кубе поделить на три плюс константа.

PS: шутка прекрасно переводится на все языки, матан — язык универсальный.

Взлом резервных копий смартфонов iPhone

Для начала немного теории.

Как хранятся пароли в операционных системах, вебсайтах, и т.д. Не открытым текстом, разумеется. Они хранятся в виде хешей. Хеш — это строка определённой длины, получаемая при обработке ввода (пароля в данном случае) хеш-функцией. До недавнего времени (да и сейчас кое-где) использовался алгоритм MD5. Так, хеш MD5 слова “password” представляет собой строку 5f4dcc3b5aa765d61d8327deb882cf99.

Поэтому когда ты логинишься на вебсайт, пароль обрабатывается алгоритмом MD5, и сравниваются хеши. Если на выходе 5f4dcc3b5aa765d61d8327deb882cf99, то всё нормально. Винда делает немного по-другому: хеш генерируется прямо на клиенте, и пересылается не пароль, а сразу хеш. Это цуцуть безопаснее. Ещё хеш солят, но про это в другой раз.

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

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

Сломаем MD5 хеш 5f4dcc3b5aa765d61d8327deb882cf99:

hashcat.exe -m 0 -a 3 hash.txt ?l?l?l?l?l?l?l?l

И меньше, чем за секунду всё сломано.

На моей уже старенькой 1070GTX поиск хешей MD5 происходит со скоростью около 8 миллиардов комбинаций в секунду.

Даже если сменить пароль на более сложный, типа P@$$w0rd, то 8-значный пароль взламывается в обозримые сроки, даже на не очень новом железе — за несколько дней.

НО. Подобные сроки — они для паролей, хешированных MD5. От которого везде отказываются как могут. Он считается криптографически нестойким: во-первых, он подвержен коллизиям (т.е. два совершенно разных пароля могут дать одинаковый хеш), а во-вторых он имеет недостаточную вычислительную сложность. Т.е. тот факт, что даже на моём старом железе я могу перебирать восемь миллиардов паролей в секунду — он из-за этого происходит.

А недавно я попробовал сломать бекап смартфона Apple. Для тёщи, которая раскокала телефон вдребезги, успев, правда, незадолго до сделать ему бекап. Но вот беда — она забыла пароль от бекапа! Она только знала, что пароль восьмизначный.

Хеш пароля для айфонного бекапа берётся в файле Manifest.plist. Этот файл скармливается вот этому сайту, например, и тебе дают хеш.

Так вот хеш там — какой-то проприетарный. И имеет настолько высокую вычислительную сложность, что на моей видеокарте котохеш перебирает комбинации со скоростью… 83 варианта в секунду. Надо отдать должное чувству юмора разработчиков котохеша: во время работы оно показывает, сколько времени осталось до перебора всех вариантов. Так вот в данном случае оно говорит, что работа программы закончится после следующего Большого Взрыва 😀

Вот так вот Плотнег лососнул тунца.

Огромный респектищще Эпплу — я в очередной раз убедился, что уж с чем-чем, а с надёжностью шифрования у них всё всегда было в полном порядке. Огромным плюсом является то, что Эппл контролирует весь цикл производства телефона — от железа до софта. Поэтому что, как и каким способом — всегда было хорошо известно и задокументированно. Ну и традиционно, пнём Ведроид 🙂 На Ведроидах, кто шифрует что и как — а хер его знает! Кто из производителей как захотел, тот так и шифрует. И скажи ещё спасибо, если задокументировано. А могут и тово, на хрен послать.

Не всё так плохо

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

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

Топоры-вилы-факелы отставить.

Как в Америке преподают математику

Извиняюсь за матюги, но выбесило.

Очередная чушь-бредятина от местной системы преподавания основ математики и горячий привет от Common, блядь, Core.

Как нормальные люди складывают два числа, которые они не могут просто сложить в уме? Правильно, в столбик (long addition). Как нынче учат складывать американцев? Для двузначных чисел рисуют, блядь, таблицу с числами от одного до ста (hundreds chart). Вот такую:

Допустим, надо тебе сложить 36 и 23. Для этого надо найти в таблице число 36, и спуститься вниз на две клеточки (добавляем десятки), и потом вправо на три (добавляем единицы). Получаем, разумеется, 59.

Что не так с этим методом? Да всё не так. Во-первых, он хуёво масштабируется. Если тебе надо тысячи сложить, что, таблицу до миллиона рисовать? А если складывать миллиарды?

Во-вторых, он ничему не учит. Он не учит тому, что десятки надо складывать с десятками, а единицы с единицами. Он учит МЕТОДУ, а не пониманию чисел.

В-третьих, он не учит тому, что надо делать, если требуется сложить, например, 19 и 39 — вправо ведь нету 9 клеточек.

Накатал училке гневную телегу (без матов), поглядим, что ответит.

Прямо таки “пора валить”, блядь.

Про трёхмерный звук

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

Я никоим образом не являюсь специалистом в данной области. Но из того, что я наскрёб в интернетах, это связано с акустическими особенностями нашей с вами головы. Наши уши являются слегка направленными из-за их формы. Это не микрофоны с круговой направленностью. Мы воспринимаем звук по-разному в зависимости от угла; звук, идущий сзади, частично отражается от задней части ушей, из-за чего меняется амплитудно-частотная характеристика воспринимаемого звука. Наш мозг вполне способен на обработку данной информации и расчёту позиции его источника. Безусловно, это сложнее для какого-то одиночного сигнала, и проще для сигнала продолжительного, так как у нас есть, с чем сравнить.

Я даже полагаю, что для некоторых звуков угол наш мозг будет вычислить не в состоянии. Например, звук синуса частотой 1KHz меняться будет очень слабенько. Ну да, он будет по-разному затухать, но врядли это даст мозгу достаточно информации. А вот местоположение шума, где частотная полоса очень широкая (есть, чему избирательно затухать!), будет определяться легче.

Есть вполне строгие математические формулы, по которым можно рассчитать, как должен меняться звук при смене его расположения. К сожалению, я не нашёл никакой информации на русском языке, но на английском это называется Head-related transfer function (HRTF). Это уже за гранью моего понимания, я дальше матана и статистики с теорвером ничего не изучал. Вот тут я нашёл аж целый небольшой вводный учебничек по данному вопросу, за авторством двух профессоров Мичиганского университета: https://isr.umd.edu/Labs/ISL/BAIL/hrtf_review.pdf. Ну, если кто-нибудь решит всерьёз закопаться.

Компьютерные чипы компании Aureal, которым я пел дифирамбы, занимаются именно этим — обсчётом того, как должен меняться звук, в зависимости от его позиции. Не надо верить мне на слово. Вот добрый человек выложил эти демки на ютуб. Поглядите сами.

Теперь по поводу музыки в этом формате. Уже сведённое стерео, безусловно, невозможно нормально переделать на этот формат. Это надо сводить заново. Я думаю, что берётся изначальная многоканальная запись, к отдельным трекам применяется этот самый HRTF, и вперёд — создаётся этот самый эффект присутствия. В Эппл музыке далеко не все записи являются такими, и там специально выводится индикация того, что ты слушаешь Dolby Atmos, а не обычное стерео.

Пора валить

По поводу американского среднего образования, увы, начинают сбываться мои самые большие опасения.

Ребёнок притащил домой контрольную работу (1й класс). В ней было вот такое задание:

Расставьте числа по порядку:

10, 2, 7, 5, 8

Дитя ответило:

10, 8, 7, 5, 2

Училка поставила “неправильно”.

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

Если ты имела в виду “расставьте числа по порядку возрастания”, так и надо было писать, а не сношать мозги, открывая простор для интерпретации.

Посмотрим, что ответит. “За рекой тревожно завыли псы” ©

А мне, тем временем, остро захотелось в Финляндию или ещё куда, где ещё не протянулись вонючие щупальца реформаторов преподавания математики.

Расистский предмет математика

Вот это, по-моему, и называется “доэтосамиться до мышей”. Математика, в том виде, в котором она преподаётся в школах и ВУЗах, оказывается, расистский предмет. Что, дорогой читатель, ты не подозревал, что утверждение “в круге 2π радиан” является расистским? Ну, а как же, конечно же расистское, какие могут быть разговоры? Ведь это в Западной цивилизации придумали радианы. И заставляют теперь всех остальных их использовать, изнасиловав местные понятия. А может быть, дикие австралийские аборигены по-другому расчитывают углы? Да и вообще — по-другому считают цифры.

Так считает школьный округ Сиэтла. И предлагает преподавать предмет “этнические исследования в математике”.

Статья.

Вконец охерели. От вменяемого преподавания математики в американских школах и так уже остались рожки да ножки. Математику в местных школах громили уже дважды — сначала в 1960х, введя “New Math”, и в 2010м, введя “Common Core”. Вместо нормального преподавания нужных предметов вводят вот такую вот лабуду.

Когда уже закончится этот цикл дебилов?

Про 42

Хотел написать про то, как мне лично было непонятно, чем так гордится группа исследователей Массачуссетского Технологического, которая нашла значения x, y, и z, при которых x3 + y3 + z3 = 42.

Набросал для расчётов свою прогу на Джаве. И не могу сказать, что она не работала. Она прекрасно работала для многих цифр, в том числе, и для любимого числа Шелдона Купера (73). Но дальше, имея на руках порядки полученных в MIT цифр для 42, прикинул вычислительную сложность, и охренел — т.к. решать данную проблему, как говорится, “в лоб” на самом ультрасовременном суперкомпьютере с его двумя сотнями петафлопсов с лихером придётся э…. не намного меньше, чем возраст наблюдаемой Вселенной.

Устыдился, пошёл читать про алгоритм, которым раньше было решено уравнение x3 + y3 + z3 = 33. Оказалось, что там, мягко говоря, очень не в лоб решали. Устыдился окончательно. Полезно вот так иногда, рожей об стол, для скромности и смиренности.

Моти-мотическоэ

По интернету гуляет математическая загадка — каков результат выражения 8 / 2(2+2)?

У одних получается 16, у других 1. Сломаны уже тысячи виртуальных копий.

Очевидно, что ответ получается разным из-за разной интерпретации последовательности математических действий. Что делать первым — делить 8 на 2 или умножать 2 на (2 + 2)?

Ответ, что характерно, может быть разным в отличие от страны. В США и России, например, подразумеваемое умножение (как тут, 2(2 + 2)) — стоит по приоритету выше, чем умножение обычное или деление, поэтому ответ должен быть 1.

А в других странах (ИМХО, в Британии) у подразумеваемого умножения нет специального статуса, и, соответственно, в таких случая мы просто проводим операции слева направо, и ответ — 16.

Американо-российский вариант мне кажется более логичным: ведь 2(2 + 2), используя дистрибутивность, можно записать как 4 + 4, и выражение примет вид 8 / (4 + 4), и ответ, естественно, будет 1.

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

Кстати, если запрограммировать это выражение (я использовал Питон, Джаву, Сишарп) — то выдаётся один и тот же ответ — 16. Потому что нет подразумеваемого умножения в этих языках (а в каких есть?), и оно тупо делает операции слева направо, по-английски.