Дорисовал

Таки доде­лал про­грам­ку на Питоне, рису­ю­щую спектр сиг­на­ла и авто­ма­ти­че­ски счи­та­ю­щую КНИ+шум и ОСШ. Попут­но узнал, как водит­ся, мно­го ново­го. За что люб­лю Питон — так это за то, что про­грам­ма зани­ма­ет менее 40 строк. На тех же Сях я бы усрал­ся это рисо­вать. Даже на Шар­пах бы усрал­ся.

Про­грам­ме скарм­ли­ва­ет­ся зву­ко­вой файл с сиг­на­лом часто­той в 1 kHz, сге­не­ри­ро­ван­ный про­грам­мой Adobe Audition (в деви­че­стве Syntrillium CoolEdit). Но мож­но взять и бес­плат­ный Audacity, резуль­тат будет точ­но такой же. Про­грам­ма чита­ет файл, берёт зна­че­ние с наи­боль­шим пиком и даёт ему обо­зна­че­ние в 0 деци­бел. Осталь­ное, соот­вет­ствен­но, отри­ца­тель­ные вели­чи­ны. Под­счи­ты­ва­ет­ся сред­не­квад­ра­тич­ное зна­че­ние все­го, что не сиг­нал, и делит­ся на уро­вень сиг­на­ла. Полу­ча­ет­ся КНИ+шум (THD+N). Потом счи­та­ем ОСШ (отно­ше­ние сигнал/шум, SNR) в деци­бе­лах: 20log10(сиг­нал / шум)

Вот так выгля­дит ана­лиз зву­ко­во­го фай­ла с сиг­на­лом 1 kHz, раз­ре­ше­ни­ем 16-бит, часто­та дис­кре­ти­за­ции — 48 kHz:

Это весь­ма близ­ко к тео­ре­ти­че­ско­му иде­а­лу — в иде­а­ле, раз­ре­ше­ние 16 бит может дать ОСШ в 96.3 dB. Но у меня не иде­ал, так как я исполь­зую чуть менее, чем 16 бит — ибо если гене­ри­ро­вать сину­со­и­ду с уров­нем в 0 dB (т.е. по-мак­си­му­му), то поче­му-то уже лезут нели­ней­ные иска­же­ния. Так что я создаю её с уров­нем в ‑0.1 dB, мини­маль­ным отступ­ле­ни­ем от мак­си­му­ма, кото­рое мне даёт делать Audition. В любом слу­чае, 94 dB — это дохре­на.

КНИ в 2 тысяч­ных про­цен­та это тоже пре­крас­но. Без при­бо­ров это­го никто нико­гда не уви­дит, иска­же­ния начи­на­ют быть слы­ши­мы­ми, когда уже вплот­ную при­бли­жа­ют­ся к 1%, хотя это силь­но зави­сит от того, что имен­но слу­ша­ем: если чистые сину­со­и­ды, то иска­же­ния начи­на­ют быть замет­ны­ми гораз­до рань­ше, а если в каче­стве тесто­во­го мате­ри­а­ла брать аль­бо­мы фиф­ти­сен­тов и про­чих, то там мож­но и 10% иска­же­ний не услы­шать. Что не озна­ча­ет, что аппа­ра­ту­ра, даю­щая КНИ в 0.05%, ничем не луч­ше аппа­ра­ту­ры, даю­щей 0.1% — она луч­ше; про­сто в реаль­но­сти уша­ми это­го ни один живой чело­век не услы­шит.

А теперь — сно­ва пнём фор­мат MP3 🙂 Никто как-то вот не заду­мы­ва­ет­ся о том, что они слу­ша­ют в тыся­че­дол­ла­ро­вых дере­вян­ных науш­ни­ках, под­клю­чён­ных к внеш­ним уси­ли­те­лям клас­са А за семь­сот дол­ла­ров, обе­ща­ю­щим КНИ в 0.00045%

А меж­ду тем это реа­лии MP3 с бит­рей­том в 192 килобита/сек:

А это — 320 килобит/сек:

Получ­ше, конеч­но, чем 192 kbps, но всё рав­но про­се­да­ние каче­ства очень нали­цо — про­ис­хо­дит серьёз­ное ужи­ма­ние дина­ми­че­ско­го диа­па­зо­на (я в кур­се, что ДД и ОСШ это не вполне одно и то же, но они свя­за­ны). На неко­то­ром мате­ри­а­ле (напри­мер, клас­си­че­ская музы­ка, обла­да­ю­щая боль­шим дина­ми­че­ским диа­па­зо­ном) это может быть очень замет­но. На 192 кило­би­тах так это точ­но замет­но, тихая пар­тия скрип­ки сопро­вож­да­ет­ся скре­же­том арте­фак­тов сжа­тия с поте­ря­ми — соб­ствен­но­уш­но, так ска­зать, слы­шал. Даль­ней­шее уве­ли­че­ние бит­рей­та после 320 килобит/с, кста­ти, уже ниче­го не даёт — ОСШ так и оста­ёт­ся в рай­оне 55 деци­бел.

Ещё надо будет попи­нать вини­ло­филь­ство и про­чее плён­ко­ло­же­ство, но это в дру­гой раз 🙂

Побег из Северной Кореи

Видео само­го побе­га — отвал баш­ки. Как в кино.

«У сво­бо­ды мно­го труд­но­стей, и демо­кра­тия не без­упреч­на, но нам нико­гда не при­хо­ди­лось стро­ить сте­ну, что­бы удер­жать соб­ствен­ный народ от побе­га»

-Джон Фитц­д­же­ральд Кен­не­ди

34 телефонов с ОС Андроид уязвимы

Уяз­ви­мость-то, в общем, ерун­до­вая — зло­на­ме­рен­ное при­ло­же­ние может запи­сать звук и про­ис­хо­дя­щее на экране без уве­дом­ле­ния вла­дель­ца. То-есть, что­бы сра­бо­та­ло, надо ста­вить это самое зло­на­ме­рен­ное при­ло­же­ние. Но КМК, на самом деле тут под­чёр­ки­ва­ет­ся про­бле­ма не с нали­чи­ем багов (баги есть вез­де, в том чис­ле и в iOS), а в том, что из-за зоо­пар­ка про­из­во­ди­те­лей и отсут­ствия еди­но­на­ча­лия баги лечат­ся очень нерав­но­мер­но. Если у тебя Гугл Пик­сель, то без про­блем. А если уки­та­ен­ный в Китай китай­ский теле­фон, куп­лен­ный за два­дцат­ку на Али­экс­прес­се — то упс. И послед­них, из-за цены, намно­го боль­ше — по при­кид­кам в ста­тье, уяз­ви­мых теле­фо­нов око­ло 78%.

https://www.bleepingcomputer.com/news/security/android-bug-lets-attackers-record-audio-and-screen-activity-on-3-of-4-smartphones/

Слава роботам

Я сна­ча­ла поду­мал, что это чело­век в костю­ме робо­та. А потом при­гля­дел­ся — не, реаль­но робот.

Дви­же­ния про­сто пуга­ю­ще орга­нич­ны. Впро­чем, это неуди­ви­тель­но — робот-то ведь антро­по­морф­ный, с при­су­щей имен­но такой фор­ме кор­пу­са мото­ри­кой.

Запуск паровоза

Какое пре­крас­ное видео для люби­те­лей ста­рых желе­зяк. Ред­ко такие быва­ют. Пока­зан весь про­цесс запус­ка аме­ри­кан­ско­го узко­ко­лей­но­го паро­во­за К‑37 Мика­до, что назы­ва­ет­ся, «с нуля» — раз­жи­га­ние топ­ки, сма­зы­ва­ние, пуск тур­бо­ге­не­ра­то­ра, и т.д. Видео длит­ся 37 минут, но на деле весь про­цесс зани­ма­ет 6–7 часов. Очень тру­до­ём­кая и кро­пот­ли­вая рабо­та — совер­шен­но неуди­ви­тель­но, что с появ­ле­ни­ем теп­ло­во­зов паро­во­зы так быст­ро вымер­ли. На маши­ни­ста теп­ло­во­за нуж­но учить­ся 2 года. Сколь­ко надо учить­ся на маши­ни­ста паро­во­за — я себе даже не пред­став­ляю. Лет пять мини­мум, навер­ное.

Сисадминские будни

При­мер­но 50% сисад­мин­ской рабо­ты состав­ля­ет ожи­да­ние того, когда что-нибудь про­изой­дёт — сер­вер, нако­нец, про­срёт­ся и загру­зит­ся, сер­вис­пак закон­чит уста­нав­ли­вать­ся, бекап забе­ка­пит­ся, и т.д.

Хоро­шо, когда есть тыщ на 80 раз­но­го обо­ру­до­ва­ния, куда мож­но при­ткнуть сапо­ги на вре­мя ожи­да­ния!

PS: DELL R710, кста­ти, реаль­но может про­си­рать­ся минут 10 пока нач­нёт загру­жать­ся ОС.

Купи Ламборгини и все тёлки твои!

Ради инте­ре­са узна­вал цены на б/у сель­ско­хо­зяй­ствен­ное обо­ру­до­ва­ние. Как для фото­тех­ни­ки есть keh.com, для трак­то­ров есть tractorhouse.com

С удив­ле­ни­ем уви­дел, что Лам­бор­ги­ни изго­тав­ли­ва­ет не толь­ко супер­ка­ры, но и трак­то­ры.

Купи Лам­бор­ги­ни и все тёл­ки твои!!!

PS: Кста­ти, не толь­ко Лам­бор­ги­ни дела­ет трак­то­ры. Фер­ра­ри тоже: http://www.ferrariagri.it/

PPS: Инте­рес­но, как оно по надёж­но­сти. Барах­ло поди, типа Фиа­та.

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

За два десят­ка лет жиз­ни в США я видел мно­го изме­не­ний в стране. И в основ­ном это были улуч­ше­ния к луч­ше­му, хотя неко­то­рые вещи и ста­ли хуже. Япон­ские авто­мо­би­ли, напри­мер, ста­ли хуже. Пред­ста­ви­те­ли вла­сти ста­ли хуже. Но мно­гое ста­ло луч­ше — дома, напри­мер, ста­ли доступ­нее. В 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 исполь­зу­ет для шиф­ро­ва­ния траф­фи­ка меж­ду сво­и­ми рас­пре­де­лён­ны­ми сер­ве­ра­ми.

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