- PVSM.RU - https://www.pvsm.ru -
Magic Lantern [1] (ML) — неофициальная прошивка для фотоаппаратов Canon, которая обеспечивает повышенную функциональность (например, dual-iso, стекинг по фокусу, raw-видео, тонкая настройка параметров съемки и многое другое). Прошивка устанавливается непосредственно на flash-карту, что позволяет безболезненно удалить ее или обновить простой заменой файлов.
На хабре уже были публикации [2] по данной прошивке, поэтому подробно расписывать преимущества и порядок установки я не буду. Расскажу, как попался на неявную и несмешную первоапрельскую шутку от разработчиков данной прошивки.
Все описанные действия производились с использованием камеры Canon 650D со стоковой (1.01) прошивкой.
28 марта. Началось все тогда, когда жажда исследования чего-то нового накопилась до критической массы и в сети была случайно обнаружена информация о возможности автоматической съемки фокус-стека на моем фотоаппарате. Но данные возможности требовали установки неофициальной прошивки Magic Lantern.
Быстрый поиск показал, что:
После чего фотоаппарат был успешно перепрошит на последнюю официальную версию для Canon 650D 1.04. И строго по инструкции, со сбросом всех настроек и полным форматированием карты, был установлен последний ночной билд Magic Lantern (от 28 марта).
Глаза немного округлились от количества настроек. Были тут же опробованы dual-iso, стекинг по фокусу и некоторые другие возможности. Первые впечатления были сугубо положительные, хотя полученные результаты оставляли желать лучшего. Суммарное время первого знакомство ограничилось 4-мя часами, в течении которых не было ни каких замечаний по работе самого софта.
29 марта. Более детальное изучение прошивки показало, что можно еще снимать и raw-видео, а так же вышел новый билд ML. Новый билд был залит на карту (по неопытности был обновлен только каталог ML). Запись была опробована на фотоаппарате, но время поджимало и оценить качество на ПК в этот день не получилось. Наступил конец выходных.
1 апреля. С мыслями «я не буду экспериментировать сегодня» возвращаюсь с работы. Но любопытство сильнее меня.
Обновляю ML до последнего билда (тот же самый — от 29 марта, но теперь полным комплектом). Включаю. Начинаю настраивать… и ловлю BSOD [3] на фотоаппарате.
Шок.
BSOD гласит, что произошла внутренняя ошибка номер 0x000000aa (в цифрах ошибки нет), много текста (дамп памяти готов, попробуйте сделать рестарт, проверьте настройки и т.п.) и «Your camera was breaked» (среди прочего).
Холодными пальцами делаю сброс через аккумулятор, как рекомендуют разработчик.
Включаю фотоаппарат и спустя две секунды после загрузки получаю тот же BSOD. F@#$%!
Нервничаю. Удаляю ML. Все работает в штатном режиме.
С мыслью, что во всем виноват кривой билд откатываюсь на версию от 28 марта (с которой просидел 4+ часа).
Запускаю. Все работает. Хорошо. Настраиваю фотик заново. Готовлюсь и погружению в изучение. BSOD! WTF?!
Сброс. BSOD через минуту. Форматирую. Переустанавливаю. Запускаю. BSOD. Шок.
Я спокоен. Фотоаппарат без ML работает в штатном режиме. C ML — регулярный рандомный BSOD (даже в простое при включенном фотоаппарате).
Поиски по ошибке не дают результатов. Вообще никаких. Пусто. Как будто я один с этим столкнулся. Иду на официальный форум. Регистрируюсь. Описываю проблему. Жду.
Достаточно быстро получаю несколько ответов:
Стоп. Я не один такой. Проблема свежая, но точно когда она возникла сказать не могут.
Сначала решил просто откатить к 11 марта. Но переспав с этой мыслью решил копнуть глубже.
От 11 марта до 29 марта всего 10 билдов. Исходники доступны на bitbucked c полным (я надеюсь) changelog`ом [4] билдов. Читаю логи изменений.
Так-так… Начинает что-то проясняться. Читаю changeset. [5] В файле «src/tweaks.c» нахожу:
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();
+ }
+ }
Что?! Режим шутки? Издеваетесь?
Поясняю: первого апреля (now.tm_mday == 1 && now.tm_mon == 3 (третий месяц становится четвертым при отсчете от ноля)) после загрузки ML прошивка начинает ежесекундно генерировать случайное число. Если это число равно 13 и в настоящий момент не производится запись (спасибо хотя бы на этом) — получите, распишитесь, Ваш BSOD. И так как уровень моей удачи был критически низким, мне удавалось словить BSOD раз 5 сразу после загрузки прошивки.
Сомнительная шутка, сомнительного содержания.
2 апреля. До рандомных BSOD осталось 364 дня.
PS: Привет разработчику Alex, который испортил вечер первого апреля, настроение и нервы. Было не смешно.
Автор: dmr
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/nenormal-noe-programmirovanie/87774
Ссылки в тексте:
[1] Magic Lantern: http://www.magiclantern.fm/
[2] публикации: http://geektimes.ru/post/127511/
[3] BSOD: http://en.wikipedia.org/wiki/Blue_Screen_of_Death
[4] changelog`ом: https://builds.magiclantern.fm/#
[5] changeset.: https://bitbucket.org/hudson/magic-lantern/commits/80cee7a6789aa04c7045bd14a35b63e410fa803b
[6] Источник: http://habrahabr.ru/post/254769/
Нажмите здесь для печати.