Немного юмора для поднятия настроения

Некоторые новости нынче - это что-то не из нашей реальности. Или может наоборот, - это единственные новости оставшиеся от нормальной реальности…

Вот, например, киевлянка сбила вражеский дрон банкой с огурцами:

Как потом оказалось - фейк. На самом деле в банке были помидоры со сливой, любимый рецепт хозяйки.

Или, скажем, Батутыч. Ведь как раньше хорошо было. Похамливал в твиттере, хвалился российскими движками и единственным средством доставки космонавтов на станцию. Вежливые американцы и виду не подали, что заметили эти выпады. Они просто создали новый пилотируемый корабль, избавились от зависимости от российских двигателей, отобрали рынок пусковых услуг и планируют теперь собственную лунную станцию. Батутыч, обладая дальновидностью обиженного восьмиклассника, продолжил в своем стиле. Роскосмос гордо ушел из Куру, отказался запускать спутники One Web (деньги не вернули), нарисовал “V” и “Z” на Байконурском транспортере для ракет:

И что вы думаете, сначала Маск потроллил Батутыча, намекнув, что за американскими метлами дело не станет:

А теперь вот, Скотт Келли отхлестал его по щекам на чистейшем русском языке.

Сергей Кислица, постоянный представитель Украины в ООН, жжет напалмом не переставая. Некоторые из его (неточных) цитат:

(to Russian abmassador) Most diplomats children are proud of their parents. I hate to think what your children think of you.

(обращаясь к русскому послу) Дети большинства дипломатов гордятся своими родителями. Боюсь представить себе, что ваши дети думают о вас.

There is no purgatory for war criminals, they go straight to hell.

Военные преступники не попадают в чистилище. Они отправляются прямиком в ад.

I’d like to have a moment of silence to pray for souls of who has been already killed, for souls of those who may be killed, and now I invite the Russian ambassador to pray for his salvation.

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

Его последний перл - ответ на твит Лаврова, про цели “специальной военной операции”, мать её:

The goal of Russian special millitary operation is to stop any war that could take place on Ukrainian territory or that could start from there.

Цель российской специальной военной операции - остановить или предотвратить любою войну на территории Украины.

Т.е. мы начали войну, чтобы остановить войну. Кафка и Оруэлл от зависти удавились бы.

Кислица ответил на этот бред подобающе:

Let me remind the russian diplomats that in London in case of need for mental help you can dial NHS line 111. Thank you.

Позвольте мне напомнить российским дипломатам, что в Лондоне, при необходимости в ментальной помощи, можно звонить 111. Спасибо.

P.S. Я еще наши в Черном море вальнули по вражескому корвету артиллерией. И попали.

Read On →

Третий день войны

Мы узнали о начале войны по дороге домой со школьного концерта сына. Полный шок, бъет озноб, не веришь в то, что это происходит на самом деле. Залипли в новости, искали любую доступную информацию. Выуживали любой слух.

К концу второго дня дрожь в руках почти прошла. Злость осталась. Начал понемногу отличать явные вбросы от просто слухов. Узнал, что уничтожен Южмаш:

Южмаш производил первые ступени Антареса, который используется для вывода грузовиков к Международной космической станции. Сильно повлиять на снабжение станции это не должно, но у нас всеръез задумались переживет ли МКС нападение России на Украину. Опасения подтвердил сам батут всея Руси:

К третьему дню реакция мира на вторжение пошла по нарастающей, как лавина. Для российских авиалиний закрыли небо, Германию дожали до согласия на отключения России от SWIFT и на поставки оружия Украине, Польский министр обороны натвитил про конвой с вооружением для Украины:

Польша, Словакия, Румыния и куча другис стран стали принимать беженцев - без виз, без загранпаспортов, с домашними животными (!). Спортсмены отказывются играть против России. Илон Маск написал о включении Starlink на территории Украины:

Вооруженные силу Украины дают по зубам наступающим оркам. Жгут танки, сбивают самолеты, отбиваются от десанта в тылу. Орки сдаются в плен и плетут байки про “учения”. Тероборона дает прикурить. Блин, даже гопники отжали у русских БТР на Оболони. Хуйло нервно объясняет олигархам почему тех посылают вслед за русским военным кораблем.

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

Мы сегодня ходили на митинг против войны в Лос Анжелесе. Я никогда не видел столько украинских флагов в Лос Анджелесе в одном месте.

Я обратил внимание на лица водителей сигналящих в поддержку митингующим. Лица всех цветов и разреза глаз. Каждое с одной и той же сдержанной улыбкой и восторгом в глазах.

Украина выстоит. Слава Україні!

Read On →

Ложь

Россия в очередной раз напала на Украину. Скажу только несколько вещей.

Во-первых, ложь пронизывает эту кампанию от начала и до конца. Лидеры врут про “притеснение русских” и “базы НАТО в Украине”; пропагандисты врут про “распятых мальчиков” и “геноцид”; а простые люди врут про “братский народ” и “свою неспособность повлиять на события”. Так вот знайте - “простые люди” - они в ответе за ту власть, которую они приручили. Вы хотели “прижать хохлов”? Вы будете отвечаеть за действия своей власти.

Во-вторых, весь последний год я наблюдал удивительную трансформацию. Мир окончательно перестал верить заявлениям России. Если ранее возмущение вызывали только захват Крыма, сбитый боинг и отравления полонием, то сейчас любое заявление из России воспринимается как заведомая и часто очень топорная ложь. Мир на стороне Украины.

В-третьих, Украина безуслово готова дать достойный отпор врагу. Это будет непросто, но Украина выстоит. Слава Україні!

Туманность Ориона

Туманность Ориона, 42-я “не комета” из каталога Мессье, расположенная на расстоянии около 1344 световых лет от Земли:

Ganymede

Отсюда.

Read On →

Загрузка кода в чужой процесс на Linux

Оказывается грузить свой код в чужой процесс на Linux ничуть не менее увлекательно, чем на Windows. Я раньше не наведывался в этой темный угол, а вот на днях заглянул. Содержимое угла привычно обнадежило: залатанный древний загрузчик, дохлые мухи, пара растяжек, и грабли кругом. Все как мы любим. Задача была такая. Есть несколько загружаемых с помощью LD_PRELOAD модулей. Модули переопределяют поведение небольшого числа POSIX функций. Требовалось перенести сборку модулей на более свежую версию GCC. Казалось что может быть проще?.. Да, давно уже не ощущал себя насколько наивным, аж ностальгия пробивает. Ниже следует список обнаруженных граблей.

Read On →

Видео посадки марсохода "Персеверанс"

Видео посадки марсохода “Персеверанс” (настойчивость) - это что-то неземное:

Необычнее всего выглядит “Небесный кран” (он же реактивный ранец) на фоне марсианского неба - что-то в нем есть из классической фантастики. NASA, конечно, молодцы. Это же надо так наловчится марсоходы засылать.

Ну и небольшой бонус. Линдсей Стирлинг (Lindsey Stirling) исполняет “Артемиду” в Космическом центре Кеннеди:

Артемида - текущее название лунной программы NASA.

Грустное про обратную совместимость

На Hacker News давече разгорелась очередная дискуссия про трудности перехода со второго Питона на третий. Этот случай, без сомнения, должен войти в учебники как пример того, как делать ни в коем случае не надо. Очень показательно, что официальное руководство по переходу ссылается на две статьи: Питон 3: вопросы и ответы и Почему Питон 3 существует. Обе статьи признают, что переход создал множество проблем, но при этом многословно объясняют почему третий Питон был необходим. Обе статьи были бы гораздо честнее, если бы авторы просто сказали “Простите. Мы ошиблись”.

Мое мнение по этому поводу можно свести к двум тезисам:

  • Питон 3 не предложил ничего, что оправдало бы обратную несовместимость со вторым Питоном.
  • 100% покрытие кода тестами - необходимое условие для того, чтобы безболезненно переписывать код на Питоне.

Чтобы проиллюстрировать это мнение, я собрал немного статистики по миграции небольшого проекта на 38 тысяч строк. Проект состоит из коллекции тестов, проверяющих поведение операционной системы на целевой платформе, и обвязки, которая позволяет эти тесты запускать на железе. Код проекта покрыт юнит тестами плохо. Юнит тесты занимают всего около двух с половиной тысяч строк. Это имеет рациональное объяснение - покрывать код тестов тестами вроде как особого смысла нет. Но на легкость переписывания кода это, само собой, влияет.

Основной перевод кода с py2 на py2+py3 начался в июле прошлого года и занял ровно две недели, 14 пул-реквестов и примерно чуть более 5% измененного кода. Если включить автоматическое переформатирование кода, то дельта увеличивается до 30% кода. Для сравнения, в два раза более крупное, похожее по характеру изменение в проекте на С++ (150 тысяч строк кода) заняло 4 дня от начала до конца.

Здесь кстати есть еще один характерный момент. Переход на третий Питон - это почти всегда переход на код, совместимый с обоими версиями сразу. Просто потому, что невозможно перевести сколь-нибудь крупный проект за раз. Но, как мы помним, эти версии умышленно несовместимы друг с другом. Так что костыли вроде six просто необходимы.

Какие же изменения были сделаны за эти две недели? Да все же тот стандартный список:

  • Байты и строки.
  • Целочисленное деление.
  • int vs long.
  • print стал функцией.
  • Некорректные управляющие последовательности в строках.
  • Отсутствующий sys.maxint.
  • Отсутствующий xrange.

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

Обидно, что даже самое полезное новшество - раздельные строки и байты не требует ломать обратную совместимость. Ну совсем. Что нужно было сделать? - дать возможность явно указать, ожидает ли код байты или строки в новом коде, а старый код обложить диагностикой, которая ловит ошибки. Добавить специальный режим проверок во время исполнения, если требуется. Что сделали разработчики Питона? Переименовали str в bytes, а unicode в str. Чем сломали ожидания огромного массива существующего кода.

Однако авторам этого показалось мало и они добавили еще кучу тривиальных, и совсем ненужных несовместимостей. К примеру убрали iteritems() или убрали оператор print. Что мешало оставить первый и позволить второму быть и оператором и функцией - это выше моего понимания.

Но если вы думаете, что за две недели эпопея закончилась, вы сильно ошибаетесь. Это был только первый тикет в баг-трекере. Спустя полгода их заведено уже 15. Заслано 33 пул-реквеста. Крайний и видимо не последний баг, вызванный переходом, был найден неделю назад. Как минимум три тикета еще предстоит исправить. Вот такие дела.

Read On →

Открытые позиции в моей команде

Пользуясь наплывом читателей по случаю красивого взрыва SN8, прорекламирую открытые позиции в моей команде:

В двух словах мы ищем специалистов по разработке встраиваемых систем, ядру Linux, и систем реального времени.

Сразу скажу, что рассматриваются только жители США. Виза, за исключением уникальных случаев, не спонсируется. Почему так можно прочитать здесь.

Понятное дело, что рекламировать позицию в США в блоге на русском не очень логично, но с другой стороны, почему бы и нет? Глядишь у кого-нибудь знакомые заинтересуются?

Read On →

Испытательный полет SN8 на 12.5 км

Сегодня был отличный день. Испытательный полет SN8 на 12.5 км прошел гораздо лучше, чем я ожидал. Да и шоу получилось просто отменное. В этом полете испытывалось много нового:

  • Полет на трех движках. Раптор еще не летал в такой конфигурации. После F9 это кажется тривиальной вещью, но одни только акустические нагрузки чего стоят.
  • Выключение движков в полете, суммарный вектор тяги которых не соосен с продольной осью ракеты.
  • Переворот на пике траектории.
  • Планирование “на пузе”. Насколько я понимаю, этого в мире еще никто не пробовал, тем более с ракетой такой размерности. Я ожидал, что неприятности начнутся именно на этом этапе. Тем более удивительно, что планирование прошло как по маслу.
  • Включение двигателей для посадки “лежа на боку”. Топливо в баках при этом скапливается на боку ракеты - его туда толкает ускорение от торможения в атмосфере. При посадке первой ступени F9 топливо естественным образом стекает в топливоприемник (не уверен на счет терминологии).
  • Переворот в последнюю секунду перед посадкой. Неудача на этом этапе была второй наиболее вероятной причиной неудачи по моим предположениям до теста.

Мелкие неприятности с низкой тягой при посадке и, как следствие, красивым взрывом на посадочной площадке - это совершенно не проблема. Мы это уже порешали с при посадке F9, порешаем и здесь.

А пока - наслаждайтесь красивым зрелищем (T-0 в 1:48:12):

P.S. А вот еще шикарный вид снизу на маневр переворота при посадке:

Фонтанный код

Недавно совершенно случайно узнал про фонтанный код и поразился насколько элегантно работает этот алгоритм. Этот код позволяет надежно передавать данные по каналу с потерями без обратной связи и с минимальными накладными расходами. Более того передатчик и приемник не обязаны синхронизировать начало и конец передачи данных. Фонтанный код позволяет передатчику генерировать бесконечный поток пакетов, кодирующих исходное сообщение, а приемник может начать слушать в любой момент. Все что требуется - это принять минимально необходимое для декодирования количество пакетов. Raptor code, - одна из наиболее практичных реализаций, требует всего лишь передать всего 0.2% дополнительных пакетов для успешного декодирования с вероятностью 0.999999. При этом вероятность успешного декодирования стремительно приближается к единице с каждым дополнительным пакетом.

Зачем это нужно когда уже есть протоколы надежной передачи по двухстороннему каналу, скажем тот же TCP/IP? Оказывается существует ситуации, когда организация обратного канала связи требует изобретения машины времени. Когда нам нужно восстановить данные со сбойного сектора на жестком диске, мы не можем послать “запрос на повторную передачу” в прошлое - в то время, когда сектор нормально читался. Все что мы можем сделать - это записать избыточные данные в другой сектор или на другой диск заранее.

Read On →