...

четверг, 2 апреля 2015 г.

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

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

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


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


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


Быстрый поиск показал, что:



  • текущая прошивка фотоаппарата не поддерживает текущие сборки ML;

  • для модели 650D нет стабильной сборки, есть только ночные билды;

  • некоторые функции ML в 650D не работают/работают криво;

  • авторы предупреждают, что можно закирпичить фотоаппарат неверными действиями по прошивке.




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



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

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


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


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


Шок.


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


Холодными пальцами делаю сброс через аккумулятор, как рекомендуют разработчик.

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


Нервничаю. Удаляю ML. Все работает в штатном режиме.

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


Запускаю. Все работает. Хорошо. Настраиваю фотик заново. Готовлюсь и погружению в изучение. BSOD! WTF?!

Сброс. BSOD через минуту. Форматирую. Переустанавливаю. Запускаю. BSOD. Шок.


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


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


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



  • просьба снять видео с тем как это происходит (имхо, в данной ситуации бессмысленно);

  • рекомендации следовать инструкциям на экране и загрузить результаты на форум (результаты? об успешной очередной перезагрузке по аккумулятору?);

  • рекомендацию откатиться к билду от 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




Так-так… Начинает что-то проясняться. Читаю changeset. В файле «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, который испортил вечер первого апреля, настроение и нервы. Было не смешно.


This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий