Делаем литературные часы на основе электронной книги +69




Моя девушка читает книги запоем. Она преподаёт и изучает английскую литературу, поэтому прочитывает в среднем по 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: инструменты и материалы




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

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

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

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




Чтобы превратить 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: делаем изображения для каждой минуты дня




В дне 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: запуск и остановка часов




Мне хотелось, чтобы я мог запускать литературные часы нажатием клавиш 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: делаем подставку














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

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

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

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

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

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




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

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

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

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

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

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

Вы можете помочь и перевести немного средств на развитие сайта



Комментарии (27):

  1. thelongrunsmoke
    /#19004921 / +2

    // Ушёл писать версию для android-читалок.

    • unwrecker
      /#19006719

      Тогда уж заодно и парсер вснх книг из библиотеки на предмет времени. Думаю, автоматом можно найти и больше значений, и по несколько вариантов.

    • t0ad
      /#19007417

      будет круто, если совместимость начнется с А2.1 (есть бесхозный nook reader)

  2. mindcaster
    /#19005027

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

  3. seri0shka
    /#19005443 / +1

    Боюсь, читалка быстро поцарапается о бетон, даже если очень аккуратно вставлять. А так очень интересная идея и реализация.
    Купил как-то Kindle 4 с нерабочей нижней частью экрана (около 20% внизу показывают всегда кусок заставки), думал, буду пролистывать страницы вверх, фиг вам, листается только постранично. В результате валяется без дела. Для подобного проекта в самый раз, нижнюю часть можно в подставку спрятать.

    • Nuwen
      /#19005693

      думал, буду пролистывать страницы вверх, фиг вам, листается только постранично.
      А в читалке нельзя настроить нижнее поле такой высоты — 20% экрана?

      • seri0shka
        /#19005983

        В ней вообще довольно мало настроек, к тому же часть меню прячется на тех самых 20%…

        • Nuwen
          /#19006031 / +1

          А ориентация экрана не меняется, чтобы в спрятавшиеся пункты посмотреть? Сторонние, более настраиваемые приложения на него не идут, после джейлбрейка?

  4. RainbowJose
    /#19005681 / -6

    Хочу вашу жену

    • seri0shka
      /#19005995

      Моя девушка читает книги запоем

      Какую жену? Ну и почему вдруг?

      • RainbowJose
        /#19006117

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

    • vindy123
      /#19006865 / +4

      жену переводчика статьи? или это просто отчаянный крик в пустой и холодный мир?

  5. ssurrokk
    /#19005729

    Такая же была идея, сделать из Kindle часы — однако пролежав несколько лет в кладовке без дела, он сдох — не заряжается, и не включается

    • Avach
      /#19007429

      Может, поможет, если толкнуть аккумулятор напрямую. Иногда штатные схемы заряда не видят аккумулятор, если напряжение на нём слишком низкое.

  6. Greendq
    /#19006345

    Хех, жаль, что они зарубили свою программу по созданию приложений для читалок. Не взлетело, как они предполагали, но, по-моему, не взлетело как раз из-за ограничений, которые накладывал сам Амазон и их KDK. Хотя, даже на той урезанной Жабе вполне себе получалось писать даже игры для них…

  7. WebMonet
    /#19006371

    Как сделать что-то подобное из бестолковой электронной фоторамки?

    • xe_xe
      /#19006775

      У меня тоже такой вопрос возникал. Прошивка рамки — не Линукс, а непонятный китайский бинарник, его так не хакнешь.
      Но была такая идея: купить карту SD Eye-Fi с Wi-Fi и вставить вместо обычной карты.
      В этой карте Линукс и есть статьи по получению доступа к нему (прямо тут на Хабре есть про Transcend).
      А дальше попробовать сделать так, чтобы карта подсовывала рамке нужные картинки.

      • kAIST
        /#19007027 / +1

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

    • Bedal
      /#19007215

      Делов-то… там есть слайдшоу, которое в норме ещё и зацикливается. Достаточно нарезать нужное количество картинок — и показывай.

    • HellKaim
      /#19007431

      Взять готовые картинки. Настроить показ на 1 минуту.
      Запустить слайд-шоу в нужное время с учетом нумерации картинок.
      Профит!

  8. prs123
    /#19007139

    Круто и здорово, но подставка из бетона — ну не знаю. Выше сказали, что книжка царапается, да и выглядит по-моему немножко грубовато. Как мне кажется лучше было сделать с помощью той же 3d-печати что-нибудь легкое,

    • Bedal
      /#19007221

      можно было наколдовать с выкладыванием в аквариум, вот так или лучше:
      image

      • prs123
        /#19008599

        Так здесь механические, и при чем тут аквариум — не очень понимаю

        • Bedal
          /#19009259

          А что меняет то, что механические? И — при чём там был совершенно неуместный бетон?
          Аквариум — то, к чему можно прикрепить. И опора — забавная.

  9. Taraflex
    /#19007419

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

  10. MahmudS
    /#19007421

    Поставка крутая вышла! Насчет подсветки: можно попробовать взять Amazon Paperwhite, у него правда кнопок нет, зато тоже можно сделать джейл