Спекулятивное исполнение

Вот как вы думаете, современные процессоры, встретив в коде условный переход типа if () {} else {}, какую ветвь кода выполняют?

Правильный ответ: обе.

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

Только вот с выбрасыванием есть… эффекты. Которыми можно злоупотребить. Именно отсюда растут ноги туевой хучи эксплойтов типа Spectre, Meltdown, и прочих радостей. Теперь с эффектами засветились процессоры AMD.

Я плохо понимаю конкретику, но каким-то образом злоумышленники могут заставить центральный процессор считать, что команда XOR является рекурсивным вызовом. Далее, как водится, идёт переполнение буфера, и возврат стека на произвольный адрес, который любезно подсовывает ему хакер. Таким образом могут быть возвращены приватные данные из другого непривилегированного процесса.

https://www.bleepingcomputer.com/news/security/new-inception-attack-leaks-sensitive-data-from-all-amd-zen-cpus/

Когда же всё это починят? Да никогда. Убирание спекулятивного исполнения стоит огромного падения в производительности. Поэтому оно с нами будет как минимум до тех пор, пока память типа SRAM не будет стоить как обычная оперативка RAM.

Неметрическое

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

Почему сделали так, а не как на Боинге? Предположу, что Сухие не стали изобретать велосипед, и взяли уже придуманный узел от какого-нибудь боевого самолёта, типа Су-34. Поршень имеет свои преимущества: в баке не болтается газовый пузырь, поэтому если делать какие-нибудь фигуры высшего пилотажа или просто лететь вверх ногами, то в гидравлическую систему попадёт газ, она не будет работать, и разобьёсся к соответствующей матери. Бочку, впрочем, сделать можно.

На сугубо гражданском самолёте это, конечно, нафиг не надо, но то отдельный разговор. Эмбраер тоже так делает, “по-нашему, по-бразильски”.

Всё это была присказка. Удивило меня в этом посте не это. Вот что меня удивило:

Нет, не скалывающаяся краска. И даже не то, что на русском самолёте стоит американский манометр калифорнийской компании Роджерсон-Кратос.

Удивило меня то, что давление на русском ероплане меряется в наших посконных фунтах на двадратный дюйм (PSI). Только позавчера я поддувал шины своего пикапа до пятидесяти фунтов на квадратный дюйм 🙂 Гляди-ка, и на иностранных еропланах точно так же. И на европейском Эйрбасе давление тоже меряют в PSI.

Рехнуться. А вы всё спрашиваете, “когда же, наконец, Америка перейдёт на метрическую систему?” Полагаю, что в отдельных нишах на метрическую систему даже зарубежные страны не перейдут никогда, как водопроводные и газопроводные трубы в России до сих пор меряют в дюймах.

Игры с акселерометром

Решил немного попробовать поиграться с акселерометрами. Чисто по приколу. Оказалась весьма занятная вещь.

Современные акселерометры работают по пьезодинамическому принципу. Грубо говоря, есть полый куб, сделанный из пьезоэлектрических пластин, а внутри куба — шарик. В зависимости от положения куба и ускорения, им испытываемого, шарик по-разному давит на пластины, и получается электрический сигнал. Самые простые акселерометры выдают аналоговый сигнал, который можно считывать в микроконтроллер через АЦП.

Взял совсем недорогой и простенький акселерометр ADXL335 (картинка с Adafruit):

ADXL335

Даже тупо по надписям на плате сразу понятно, как с ним работать.

В качестве интерфейса между компьютером и акселерометром взял свою старенькую Arduino UNO (чего ж ещё, для исследовательских-то целей).

Теперь немного технического описания и математики. ADXL335 я питаю от 3.3 вольт. При ускорении в 0g, на соответствующем выходе платы имеем VCC/2, т.е. 1.65V. АЦП на ATMEL ATmega328P — 10-битные, соответственно, получаем разрешение 5V/1024 = 4.9mv на одну единицу. 1.65V/4.9mv = 336.

Так оно и получилось: будучи положенными на абсолютно плоскую доску, оси X и Y при считывании выдавали 336, а ось Z — 403 (потому что гравитация, и там у нас не 0g, а вовсе даже 1g).

Чувствительность акселерометра составляет, при питании от 3.3 вольт, 330 милливольт на 1g. 330mv/4.9mv = 67, 336 + 67 = 403, всё правильно.

Но, блин, Ардуино, это, конечно, хорошо, но не очень. При запитывании платы напрямую от USB, на входе АЦП микроконтроллера есть очень сильный шум. У меня постоянно прыгали измерения — от 0.98g до 1.02g. Связано это даже не сколько с самим микроконтроллером, сколько с тем, что напряжение 5 вольт, выдаваемое обычным компьютером — это что-то чудовищное, с высокочастотными наводками, и прочими радостями. Поэтому если кому-то хочется на обычной Ардуино заниматься считыванием АЦП — сделайте себе одолжение, подключите сначала нормальное стабилизированное питание. Запитался от моего старого лабораторного БП с линейным стабилизатором напряжения — и наконец-то узрел нормальные непрыгающие значения.

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

Поэтому в данном виде акселерометр для таких задач непригоден. С ним можно только приблизительно рассчитывать, как наклонена плата. Ведь при наклонении акселерометра, ускорение свободного падения на оси Z падает, и начинает действовать на другие оси. А дальше, в-общем, простая тригонометрия — проекции сил на оси, треугольники. Угол наклона оси Z — арккосинус от считываемого ускорения, никакой магии. Наклони её на 90 градусов — будешь считывать 0g, arccos(0) = 90°, всё правильно.

Дабы не мудохаться со сложными схемами питания, заказал другой акселерометр — MPU6050. У него внутри неонка свой АЦП, причём 16-битный, что круче в 64 раза, а данные он отдаёт по I2C или SPI. Кроме того, у него есть трёхосный гироскоп! Я даже не знал, что бывают твёрдотельные гироскопы, круто! Буду продолжать изыскания.

Троллейбусы подешевели

Пишут, что Форд снизил цену электрических пикапов Ф-150 “Лайтнинг” аж до пятидесяти тысяч долларов за самую дешёвую модель, “Лайтнинг Про”.

Это уже кое-что. Это серьёзно усилит спрос на их продукцию. Правда, при буксируемом прицепе дальность у них падает на 25 процентов, а у самой дешёвой модели Ф-150 “Лайтнинг Про” дальность и так составляет только 240 миль (385km), так что с прицепом далее 180 миль (290km) не уедешь. Но 180 миль это всё же не так плохо — на охоту я, правда, сразу не доеду, там 245 миль (390km) ехать, но по пути довольно много зарядок, включая Тесловские суперчарджеры. А при стандартной ёмкости батарей “Лайтнинга” в примерно сто киловатт-часов на зарядке, способной вдувать в кабель 350 киловатт, чтобы зарядить их полностью, понадобится всего двадцать минут. Остановился похарчеваться, пришёл — и всё уже зарядилось.

Вот такой троллейбус меня, нынче деревенского человека, вполне бы устроил.

Тропами Джека Лондона

Интересное видео от русского хобо. Как он из Башкирии ехал куда-то на море. До моря, правда, он не вполне на видео добрался, но проехал довольно далеко. До умения Шая ему пока далековато, но и так неплохо.

Но абсолютный пофигизм русских железнодорожников просто поражает воображение. Они осматривают состав, а он тупо идёт рядом и ему ничего не делают! У нас бы его давно быки доставили в участок — т.к. все железнодорожные пути являются частной собственностью, и даже простое нахождение на них является несанкционированным проникновением на частную территорию (trespassing). По ЖД путям даже ходить нельзя. А тут — ничо, норм. Другая жизнь вообще. Удивительно.

Вот блин, видео снесли уже.

Ну вот вам другое, от того же автора. Первая часть путешествия из Москвы до моря на грузовых.

ГДР на колёсах

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

На просторах интернета выяснилось, что в более экономически успешных, чем СССР, странах социалистического лагеря промышленностью выпускались туристические домики на колёсах.

В частности, в ГДР выпускались вагончики “Бастай” (Bastei, в переводе “Бастион”).

Поглядим на одну из моделей “Бастай”, “Вонваген-351” (Wohnwagen 351, Трейлер 351), 1986 года выпуска, заботливо сохранённую в оригинальном состоянии аккуратным жителем Дрездена. Все картинки кликабельны.

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

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

Налево более крупное сидельно-спальное место. Абажурчик очень трогательный.

Столы как на крупном, так и на мелком месте складываются и превращаются в кровати. Но особо не разбежишься, вот тут общий план, с размерами:

Даже большое спальное место 160cm*190cm в переводе на американские понятные размеры — это укороченный матрас размера Queen, т.н. RV Queen. Я при росте в 191 сантиметр помещусь туда только по диагонали. Про малое спальное место 120cm*190cm и говорить нечего — это чуть поуже, чем матрас системы Full. Но это, конечно, плата за мобильность и крошечные размеры трейлера — он весит всего восемьсот килограмм, его, поди, даже “Трабант” мог утащить.

Вполне себе чистенько, и приличненько, хоть и бедненько. Я, признаться, от товаров из социалистического лагеря ожидал худшего.

Хозяин просит за этот домик €8500. По этой же ссылке можно поглядеть больше фотографий.

Дорого, но это вполне себе коллекционное состояние этого артефакта ГДР.

Разбор полётов

Очень интересные статьи о безопасном проектировании самолётов (ru). Очень лонгрид, довольно технический, но дьявольски интересно. Так, я узнал, как много частей самолётов проектируется не только для того, чтобы они выдержали нагрузки, но и для того, чтобы они были наиболее безопасны при аварийных вынужденных посадках. И даже не просто чтобы они эту посадку выдержали, а ещё для того, чтобы если они её не выдерживают, то нехай они ломаются так, чтобы не наделать дел. В частности, например, шасси проектируют так, чтобы если они отломились к соответствующей матери, то чтобы они не протыкали топливные баки и не устраивали пожар.

Ан
Дё
Труа

Афффтор очень любит технические решения Боинг, чуть более критически отзывается о Эйрбасах, а вот МС21 или Суперджет… увы, аварийно на них лучше не садиться. Жаль.

via lx

Про законы робототехники

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

А ныне ВВС США сделали симуляцию дрона, управляемого ИИ, который уничтожал системы вражеской ПВО. Прежде чем отбомбиться, ИИ запрашивал разрешения у оператора, который мог запретить уничтожение конкретно этого расчёта ПВО. Ньюанс в том, что за каждую уничтоженную систему ПВО искуственному интеллекту начислялись очки. Кончилось тем, что ИИ отбомбился… по оператору дрона, чтобы тот не выпендривался, и не мешал ИИ набирать эти самые очки.

https://www.theregister.com/2023/06/02/ai_drone_simulation/

Про дыхание под водой

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

Дело в том, что есть разных давления. Есть абсолютное давление. Так, например, абсолютное давление воздуха на уровне моря — одна атмосфера, хорошо нам знакомая единица.

А ещё есть давление парциальное — т.е. какое давление оказывает какой-то определённый газ в смеси газов, которой, например, является воздух. Так, парциальное давление азота в воздухе на уровне моря — 0.78 атмосфер, потому что в воздухе его 78 процентов.

Так вот, наши лёгким глубоко пофигу, сколько процентов кислорода в воздухе, лишь бы его парциальное давление составляло примерно 0.21 атмосферы. Так что подводники спокойно дышат воздухом с содержанием кислорода всего 16%, потому что внутри прочного корпуса абсолютное давление не одна атмосфера, а примерно 1.3 атмосферы. А вот для огня парциальное давление уже не работает, ему надо определённый процент кислорода, хоть ты тресни. Так что одним выстрелом убивается два зайца — и открытый огонь не горит, и нагрузки на прочный корпус чуточку поменьше.

А у людей, ныряющих в аквалангах на по-настоящему большие глубины (200m+) с дыхательной смесью вообще сложно. Обычным сжатым воздухом можно дышать только до глубины примерно метров тридцать. Далее большое парциальное давление азота повышает содержание оного азота в крови, и наступает т.н. азотное отравление или же азотный наркоз. Выражается он в опьянении, чувстве эйфории, уверенности в себе. Очень опасное состояние — некоторые ныряльщики на него даже подсаживаются и специально ныряют с обычным воздухом на большие глубины, чтобы покайфовать. Рано или поздно, но все они заканчивают плохо, и так на дне моря и остаются.

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

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

Я думал в одно время сдавать на PADI OWD. Но потом передумал — в одиночку спускаться опасно, значит, надо какого-то партнёра, а кого? Платить, чтобы с тобой каждый раз спускался инструктор? Какая-то не очень привлекательная идея.

Про испанские фамилии

Сегодня я узнал, что суффикс -ez (ес) на конце испанских фамилий означает “сын такого-то”. То-есть Фернандес — это сын Фернандо, Родригес — сын Родриго, Лопес — сын Лопе, и так далее.

Ну, ничем не отличается, в приниципе от Иванов — сын Ивана, Петров — сын Петра, и т.д.

Или у скандинавов, фамилии на -сен или -сон, Андерсен — сын Андерса, Ларсен — сын Ларса, Нильсен — сын Нильса и далее по алфавиту.

В-общем-то, между людьми гораздо больше сходств, чем различий, если разобраться 🙂