[Перевод] Делаем литературные часы на основе электронной книги

5cf5b1949b3b6ff9868b87fc3c25ea8b.jpg

Моя девушка читает книги запоем. Она преподаёт и изучает английскую литературу, поэтому прочитывает в среднем по 80 книг в год.

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

Часы обновляются ежеминутно; например, в 9:23 на Kindle будет написано:

My father met me at the station, the dog jumped up to meet me, missed, and nearly fell in front of the 9.23pm Birmingham express.


[цитата из книги Сью Таунсенд «The Secret Diary & Growing Pains of Adrian Mole Aged 13¾» / прим. перев.]
При этом я устроил всё так, что Kindle можно продолжать использовать как нормальную читалку. Просто если включить часы, она будет работать ещё и как литературная викторина. Часы показывают цитату без названия произведения и имени автора, поэтому о них можно лишь догадываться. А если вам нужно узнать точный ответ, то нажатие на кнопки перелистывания покажет эту информацию.

Шаг 1: инструменты и материалы


e291ea3687e2fce54153fedd509dcf6e.jpg

На самом деле, всё, что нужно — это сама электронная книга (и USB-кабель к ней). Kindle для этого проекта мне пожертвовал мой друг. Это Kindle 3 WiFi (кратко K3 или K3W). На eBay можно найти множество подобных устройств, бывших в употреблении.

Вам понадобится компьютер с любой ОС, с SSH-клиентом, например, vSSH, и клиентом для sFTP, например Filezilla. Поскольку Kindle работает под Linux, опыт работы с этой ОС не помешает.

Чтобы установить Kindle вертикально на шкафу, я сделал для него подставку из бетона. Если захотите повторить мой опыт, вам понадобится контейнер для еды подходящей формы, пищевая плёнка, пенопласт, цемент, термопластичный клей или двусторонняя клейкая лента, и ведро для смешивания цемента.

Шаг 2: Джейлбрейк для Kindle


4fbf0d9bd90dca3b2a9eb6eb8d83841a.jpg

Чтобы превратить Kindle в часы, нужно забраться в его системные файлы. Для этого его надо вскрыть через процесс, известный, как «джейлбрейк» [побег из тюрьмы] (процесс легален, если вы владеете Kindle). Описание и файлы для процесса можно найти на этом сайте. Также оцените список доступного софта. А на этой странице можно узнать, какая у вас модель Kindle.

Для данного проекта потребуется установить только два хака — jailbreak и usbnet, без экранной заставки. USBNetwork даст вам удалённый консольный доступ к Kindle, либо по USB, либо по WiFi. Если вы захотите использовать клавиши клавиатуры, вам понадобится хак Launchpad.

Предупреждение: дальнейшие действия могут в принципе испортить ваш Kindle. Следуйте инструкциям. Всё, что вы делаете, вы делаете на свой страх и риск.

Когда вы подсоединяете Kindle к компьютеру, он виден вам, как USB-флешка.

Всё, что нужно сделать — поместить файл Update_jailbreak_0.13.N_***_install.bin (где вместо *** стоит версия вашего Kindle — у меня это k3w) в корневой каталог Kindle.

Как написано в файле README, нужно провести безопасное извлечение Kindle, зайти в главное меню читалки, затем в настройки, и там выбрать обновление. Всё должно пройти быстро.

То же самое необходимо проделать с файлами USBNet и Launchpad. После этого у вас должна появиться возможность заходить на устройство по SSH. Для этого нужно подключить Kindle к WiFi. Узнать IP адрес можно, зайдя в настройки WiFi-роутера. Имя пользователя будет root, а пароль вычисляется по модели в онлайн-калькуляторе.

Затем необходимо установить на Kindle Python, опять-таки при помощи файлов с прекрасного форума Mobileread.com.

Шаг 3: делаем изображения для каждой минуты дня


c57f9195c9c754d0209cd6fead6374cd.jpg

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

В 2011 году газета The Guardian попросила читателей присылать им цитаты из книг с упоминанием времени. Им надо было сделать инсталляцию для фестиваля литературы. В результате они выложили две версии списка.

К сожалению, список не покрывал абсолютно все минуты дня. Я это обошёл, используя некоторые цитаты по нескольку раз — к примеру, если цитату можно использовать как до, так и после полуночи. Также можно использовать неточные отсылки ко времени — например, для времени 9:58 я использовал следующий отрывок из книги «Над пропастью во ржи»: «Я спал не слишком долго, потому что проснулся, как я думаю, где-то около десяти часов».

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

В большинстве программ для редактирования изображений весьма просто масштабировать прямоугольник с текстом вручную до нужного размера. Но на создание всех картинок вручную потребовалось бы слишком много работы. Однако и создание скрипта заняло у меня приличное количество времени. Я использовал для этого PHP, поскольку в нём есть удобные функции для работы с текстом), и написал рекурсивную функцию, ищущую наилучший вариант масштаба для каждой цитаты. Для каждой строки скрипт выдаёт два изображения формата PNG — с метаданными, и без них.

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

Второй момент, отнявший у меня много времени — распознавание упомянутого в цитатах времени, поскольку я хотел писать их жирным шрифтом. Так проще использовать часы, особенно, когда цитата длинная. Проблема в том, что в книгах используется огромное разнообразие описания времени. '6.00 p.m.', '18:11:00', '0600h', 'around six o’clock', 'at six', 'twenty-eight minutes past eleven', и так далее. Я написал скрипт, который пытается распознать практически все варианты, распознал вручную те, с которыми он не справился, и добавил их в CSV.

Если хотите сделать такие часы сами, можете использовать мои скрипты, или просто скачать уже готовые изображения.

CSV, скрипты, изображения

Шаг 4: запуск и остановка часов


6becafae68aefd8d66ef37d9ae603f22.jpg

Мне хотелось, чтобы я мог запускать литературные часы нажатием клавиш Shift+C на клавиатуре читалки. Повторное нажатие останавливает часы и превращает устройство обратно в электронную книгу.

Сначала нужно создать папку /mnt/us/timelit, и разместить там искрипты.

Изображения идут в /mnt/us/timelit/images и /mnt/us/timelit/images/metadata/

После установки Launchpad появляется папка /mnt/us/launchpad. Создайте в ней новый файл startClock.ini и поместите там следующий текст:

[Actions]
C = !sh /mnt/us/timelit/startstopClock.sh &

Это создаст клавиатурную комбинацию для Shift+C. По нажатию клавиш запускается скрипт для bash, startstopClock.sh. Он останавливает платформу Kindle (нормальный интерфейс), запрещает книге уходить в режим экономии энергии, и создаёт небольшой файл (/mnt/us/timelit/clockisticking), обозначающий, что часы запущены.

При повторном нажатии Shift+C и наличии в системе файла clockisticking, скрипт startstopClock.sh удаляет его и перезапускает систему Kindle.

startstopClock.sh также запускает другой скрипт, showMetadata.sh, включающий комбинации клавиш, показывающие метаданные (командой /usr/bin/waitforkey). Если пользователь нажимает клавишу перелистывания сбоку на Kindle, скрипт проверяет, запущены ли часы, и если они работают, показывает то же изображение, что показано сейчас (а имя изображения хранится в файле clockisticking), но уже с приписанными названием книги и именем автора.

Изменение изображения с каждой минутой делается через добавление строчки к файлу /etc/crontab/root:

* * * * * sh /mnt/us/timelit/timelit.sh

После этого нужно перезапустить crontab: /etc/init.d/cron restart

Каждый раз при запуске timelit.sh проверяет наличие файла clockisticking. В случае наличия он выводит картинку для текущей минуты.

Вероятно, вам нужно будет сменить часовой пояс в файле timelit.sh — там, где стоит 'TZ=CEST'.

Файл timelit.sh

Шаг 5: делаем подставку


c41b2815b80de0f238eab2f5668fa691.jpg

ae3ed29868cdc75c24db0042d7b55c40.jpg

7325990cacfa0d84f580dfb8d57eb070.jpg

26a06c8485380f353ca92a10b73d1e7a.jpg

dd6faa9319a3d503db7078c31fad8a80.jpg

2737e530550554d28da4e597cf28d0a8.jpg

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

Я вырезал кусочек пенопласта размером с книгу, и добавил место для USB-кабеля. Я обернул его в плёнку и скотч, чтобы цемент потом можно было легко снять. Я приклеил его на дно контейнера для еды двусторонней клейкой лентой.

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

Я накидал цемент в контейнер садовой лопаткой, попримял его немного, и оставил сохнуть на два дня.

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

Шаг 6: дальнейшие идеи


db1a7be5a6c0985d5b6a73d2dc05dd50.jpg

Литературные часы выглядят мило, и викторина работает. Моя девушка периодически проверяет, из какой книги цитата (обычно она угадывает правильно). Подставка получилась не совсем такой, как я хотел, но я уже хочу попробовать сделать другую, лучше.

Вероятно, я ещё добавлю лампу — либо прицеплю на устройство, либо встрою в подставку. Иногда на часах, стоящих на шкафу, бывает не очень хорошо видно текст.

Вместо отдельного подвода питания для лампы, её можно включить в один из слотов для петель Kindle. Два слота нужны для чехлов со встроенной подсветкой. Для этого придётся вскрыть Kindle и заняться пайкой, или сделать собственные металлические зажимы –, но результат должен быть красивым. Можно даже подсоединить датчик света, чтобы лампа загоралась только, когда темно.

Что я ещё хотел бы добавить:

  • Останавливать часы с 1 до 6 утра, чтобы экономить энергию.
  • Отключать WiFi, но включать его ежедневно на пару минут, чтобы синхронизировать часы.
  • Показывать проценты прошедшей минуты в виде маленьких прямоугольничков внизу — так, как Kindle показывает процент прочтения книги.
  • Показывать предупреждение, когда садится батарея.


Последние два пункта можно сделать, накладывая небольшие изображения поверх больших при помощи команды Kindle eips — загляните в мои скрипты.

Другие возможные идеи:

  • Использовать кнопки Kindle для установки времени.
  • Показывать изображение по умолчанию при старте часов, или когда картинка не найдена.
  • Использовать клавиатурную комбинацию (допустим, shift-Q) для переключения режима викторины.
  • Запускать звук Биг-Бена в начале часа (только днём), поскольку в моём Kindle есть динамик. Ещё можно добавить звук закрытия книги или даже чтения цитаты вслух.

© Habrahabr.ru