Несмешная первоапрельская шутка от разработчиков Magic Lantern

Несмешная первоапрельская шутка от разработчиков Magic Lantern

505

Прошивка устанавливается конкретно на flash-карту, что дозволяет безболезненно удалить ее либо обновить обычный подменой файлов. Magic Lantern (ML) — неофициальная прошивка для фотоаппаратов Canon, которая обеспечивает завышенную функциональность (к примеру, dual-iso, стекинг по фокусу, raw-видео , узкая настройка характеристик съемки и почти все другое).

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

Все описанные деяния производились с внедрением камеры Canon 650D со стоковой (1.01) прошивкой.

Но данные способности требовали установки неофициальной прошивки Magic Lantern. Началось все тогда, когда жажда исследования чего же-то новейшего накопилась до критической массы и в сети была случаем найдена информация о способности автоматической съемки фокус-стека на моем фотоаппарате. 28 марта.

Стремительный поиск показал, что:

текущая прошивка фотоаппарата не поддерживает текущие сборки ML;
для модели 650D нет стабильной сборки, есть лишь ночные билды;
некие функции ML в 650D не работают/работают криво;
создатели предупреждают, что можно закирпичить фотоаппарат неправильными действиями по прошивке.

И строго по аннотации, со сбросом всех опций и полным форматированием карты, был установлен крайний ночной билд Magic Lantern (от 28 марта). Опосля чего же фотоаппарат был удачно перепрошит на последнюю официальную версию для Canon 650D 1.04.

Были здесь же опробованы dual-iso, стекинг по фокусу и некие остальные способности. Суммарное время первого знакомство ограничилось 4-мя часами, в течении которых не было ни каких замечаний по работе самого софта. 1-ые воспоминания были чисто положительные, хотя приобретенные результаты оставляли желать лучшего. Глаза незначительно округлились от количества опций.

Наиболее детализированное исследование прошивки показало, что можно еще снимать и raw-видео, а так же вышел новейший билд ML. 29 марта. Наступил конец выходных. Запись была опробована на фотоаппарате, но время поджимало и оценить качество на ПК в этот день не вышло. Новейший билд был залит на карту (по неопытности был обновлен лишь каталог ML).

1 апреля. Но любопытство посильнее меня. С мыслями «я не буду экспериментировать сегодня» возвращаюсь с работы.

Начинаю настраивать… и ловлю BSOD на фотоаппарате. Включаю. Обновляю ML до крайнего билда (тот же самый — от 29 марта, но сейчас полным комплектом).

Шок.

BSOD гласит, что произошла внутренняя ошибка номер 0x000000aa (в цифрах ошибки нет), много текста (дамп памяти готов, попытайтесь сделать рестарт, проверьте опции и т.п.) и «Your camera was bricked» (посреди остального).

Прохладными пальцами делаю сброс через батарея, как советуют разраб.
F@#$%! Включаю фотоаппарат и спустя две секунды опосля загрузки получаю тот же BSOD.

Все работает в штатном режиме. Нервничаю. Удаляю ML.
С мыслью, что во всем виноват кривой билд откатываюсь на версию от 28 марта (с которой просидел 4+ часа).

Готовлюсь и погружению в исследование. WTF?! Все работает. Отлично. BSOD! Запускаю. Настраиваю фотик поновой.
BSOD. BSOD через минутку. Шок. Переустанавливаю. Форматирую. Сброс. Запускаю.

C ML — постоянный рандомный BSOD (даже в обычное при включенном фотоаппарате). Фотоаппарат без ML работает в штатном режиме. Я спокоен.

Пусто. Регистрируюсь. Вообщем никаких. Как как будто я один с сиим столкнулся. Описываю делему. Жду. Иду на официальный форум. Поиски по ошибке не дают результатов.

Довольно быстро получаю несколько ответов:

просьба снять видео с тем как это происходит (имхо, в данной ситуации бессмысленно);
о удачной очередной перезагрузке по аккуму?); советы следовать инструкциям на экране и загрузить результаты на форум (результаты?
рекомендацию откатиться к билду от 11 марта, как самой стабильной версии на нынешний день;
пару сообщений о схожих ошибках.

Я не один таковой. Стоп. Неувязка свежайшая, но точно когда она появилась огласить не могут.

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

Читаю логи конфигураций. От 11 марта до 29 марта всего 10 билдов. Исходники доступны на bitbucked c полным (я надеюсь) changelog`ом билдов.

2015-03-12 — функции для дампа видео, маленький тюнинг
2015-03-13 — рефакторинг, тюнинг, фиксы
… много иных конфигураций …
2015-03-23 — работы с DOF
2015-03-25 — 80cee7a | Alex — Looks like some people didn’t like my bad joke

Так-так… Начинает что-то проясняться. В файле «src/tweaks.c» нахожу: Читаю changeset.

struct tm now;
LoadCalendarFromRTC(&now);
joke_mode = (now.tm_mday == 1 && now.tm_mon == 3);
+ if (joke_mode)
+ {
+ msleep(1000);
+ joke_mode = display_idle();
+ }
и
+ if (joke_mode)
+ {
+ if (rand() % 1000 == 13 && !RECORDING)
+ {
+ extern void bsod();
+ bsod();
+ }
+ }
Издеваетесь? Режим шуточки? Что?!

И так как уровень моей фортуны был критически низким, мне удавалось словить BSOD раз 5 сходу опосля загрузки прошивки. Раз это число равно 13 и в реальный момент не делается запись (спасибо хотя бы на этом) — получите, распишитесь, Ваш BSOD. Поясняю: первого апреля (now.tm_mday == 1 && now.tm_mon == 3 (3-ий месяц становится четвертым при отсчете от ноля)) опосля загрузки ML прошивка начинает раз в секунду генерировать случайное число.

Сомнительная шуточка, сомнительного содержания.

2 апреля. До рандомных BSOD осталось 364 дня.

PS: Привет разрабу Alex, который попортил вечер первого апреля, настроение и нервишки. habrahabr.ru Было не смешно.