iPad и дом-дурачок
09 марта 2014 :: 47 комментариев :: 30364 просмотра :: 1974 слова

Недавняя спонтанная фотография вызвала много эмоций, хоть в основном и негативных. Не помню точно как, но идея подобного информационного устройства, живущего около двери, будоражила наши молодые умы уже очень давно. Уже не вспомню подробностей, но когда @themylogin пришел ко мне с такой же идеей, я даже обрадовался, что не я один такой долбанутый. В ходе обсуждения мной была предложена идея организовать это всё на e-ink, так как обновляется редко и висит статично. Да и вообще в шутку я предложил всю квартиру e-ink'ами заклеить, тогда можно было бы обои менять каждый день на новые.

@themylogin'у идея так понравилась, что он чуть ли не в тот же день купил Amazon Kindle, моток скотча 3M и стал ночами развлекаться с ними (здесь должна быть ссылка, но он к сожалению закрыл свой блог). До начала моего ремонта оставался еще чуть ли не год, да и получилось у него так хорошо, что я стал считать это его новой охуительной идеей и почти завидовать, что я такой тупой и не додумался до этого сам!

Закончив свой ремонт и немного отойдя от связанных с ним финансовых ограничений, идея снова всплыла в моей голове. Однако вопреки моим ожиданиям, за год читалки не стали поголовно 10-дюймовыми, а скорее наоборот. Потому далее следовало много дней душевных терзаний брать или не брать «обычный» экран. Одним вечером я решил, что была не была, и стал искать на ибее аукционы с дешевыми китайскими Android-планшетами, наименее блевотно выглядящими и дюймов в 10 диагональю. Одновременно с этим я бросил клич в твиттере, что ищу старые iPad'ы, хотя сделал это скорее просто чтобы в очередной раз посмешить народ своей глупостью и самонадеянностью.

Но мне повезло и у друзей в столице нашей родины завалялся как раз один лишний первый айпад, который был сразу выслан мне EMS'ом. У него не работал экран, однако метод «разобрать, вдумчиво посмотреть, собрать» и несколько вывалившихся из него лишних деталей, вернули старичка к жизни. На первую зарядку ушел почти целый день, но к вечеру я стал развлекаться с чужим Apple ID и фотками, а на следующий день гордо и криво налепил его на стену. Используя, кстати, китайский аналог скотча 3M, благодаря которому следующее тихое солнечное утро было прервано грохотом разбивающегося ВСЕГО. iPad выжил, просто поскидывав ключи, мелочь и другую фигню, живущую на полке у входа. Повезло.

Первая версия интерфейса (на фото в галерее) была написана на коленке за вечер просто для того, чтобы понять удобно ли это вообще и стоит ли игра свеч. Конечно, она была раскритикована Лучшими Аналитиками, но свое дело она сделала. Прототип был выброшен и на его смену пришла уже более продуманная система.

Написано всё как веб-страничка на HTML+CSS+JS, исключительно по личным причинам, потому что именно на этом стеке технологий я могу написать что угодно и в максимально короткие сроки. Кто-то хорошо и быстро верстает iOS-приложения, я же не из таких, однако хорошо и быстро верстаю HTML. Особой отзывчивости интерфейса было не нужно, он всё равно висит большую часть времени неподвижно, а все взаимодействие заключается в нажатие на определенные области экрана. iOS с самых первых версий умеет фичу «добавить на экран Домой», превращая любую веб-страничку в полноэкранное приложение. Однако на iPad 1 ставится только iOS 5, которая не умеет при этом скрывать верхний бар.

Общий вид

Интерфейс из светлого превратился в темный, так как большую часть времени планшет висит в темноте на минимальной яркости, и это намного удобнее для глаз, им не нужно адаптироваться под яркий экран, всё смотрится лаконично и не выделяется. Этого недостатка, конечно, лишены e-ink дисплеи.

Бекенд написан на Python, но теперь хранит данные не просто в файлах, а в PostgreSQL, фронтенд в основном на AngularJS (которая именно под такие штуки подходит лучше всего). Обновляются данные просто по крону, от celery здесь было принято решение отказаться. Ничего сверхмодного и крутого в технологиях нет, стандартный набор.

Больше всего времени, конечно же, уходило на обдумывание того, что должно присутствовать на экране, а главное какую функцию выполнять и для чего. Я очень не люблю вещей ради вещей, функции ради функций, потому каждая фича в интерфейсе появлялась только после тщательного обдумывания вопроса зачем она там необходима, иногда тестирования вида «включить на день, посмотреть удобно ли». Так же у меня нет домашней автоматизации, розетки не управляются по ssh, свет в туалете не включается и какашки не смываются сами. Другие прелести Умных Домов также отсутствуют по причинам, объяснение которых выходит за рамки этого поста.

Главное требование у меня было одно — система должна собирать максимум информации автоматически. Если надо что-то ежедневно вносить, отмечать сколько денег потратил на еду и сколько часов спал — эта хрень долго не продлится и будет заброшена уже через неделю. Опять же, исключительно моя особенность, знаю людей, которые пользуются Expense Tracker'ами вполне удачно.

С появлением iPad'а на стене, основная польза от него была замечена в двух случаях:

1) Когда проходишь мимо. Это как минимум раз в пол часа. Налить кофе, в туалет, и.т.д. Мое постоянное рабочее место расположено так, что за всеми этими вещами надо проходить по коридору. В это время полезно: список зачад на день, время, играющая в данный момент музыка, bar chart снизу (о нем дальше).

2) Когда уходишь из дома. Понятно, что пока крутишься около вешалки, особенно зимой, на iPad уходит основное внимание. И здесь пользы уже больше: погода на данный момент, время захода солнца, баланс транспортной и дебетовой карты, пробки, оставшееся время до событий.

Потому упор делался именно на эти два юзкейса. Теперь обо всех фичах подробнее.

Погода и время

Типичные фичи любого подобного устройства. Однако моей прихотью является наличие времени рассвета и заката. Без шуток, это действительно всегда мне интересно, я люблю и то и то.

Постоянно забываю перед выходом посмотреть пробки, а идти на метро или на остановку надо решать сразу после выхода из подъезда

Баланс

Самая технически затратная вещь, но она того стоит. Парсятся балансы ВТБ, Мегафона Сибирь (Москва на очереди), Новотелекома и Транспортной Карты. Когда баланс чего-то становится менее 50 или 100 рублей, ячейка начинает светиться красным.

ВТБ с помощью оповещения на email и сервиса mailgun, который подключен к одному из моих доменов и позволяет парсить входящую почту по условию, вызывая затем любой определенный скрипт. Парсится не только остаток, но и каждая транзакция. К сожалению, ВТБ обожает присылать дублирующие email'ы через несколько дней после транзакции (когда происходит настоящее списание средств, а не блокировка), понятие не имею зачем так делать, но лучшего способа у нас нет.

Баланс Мегафона парсится через яндекс-виджет, который они заботливо сделали, раскрывая всю информацию из Сервис-Гида без капчи. Молодцы, блядь, обожаю таких, люди — вводите капчу, роботы — добро пожаловать без нее. Хотя здесь нам это только на руку, для Москвы вроде как существует официальный API для этого, а Сибирякам приходится выживать как могут.

Новотелеком парсится через их официальный API, описание которого хоть не так легко найти с первого раза, но оно работает как надо (еще бы json, а не xml, цены бы не было). Иногда мне кажется, что Новотелеком — единственная адекватная компания из вообще провайдеров чего угодно, даже API для личного кабинета есть. Но не будем много их хвалить, а то испортятся.

Транспортная Карта, понятно, работает аналогично сервису cards.vas3k.ru, только кроме баланса и поездок, парсит еще историю пополнений. Кроме необходимости постоянно обновлять сессию, проблем нет.

Все скрипты на python могу куда-нибудь выложить по первой же просьбе, если они вдруг кому-то интересны. upd: выложил https://github.com/vas3k/snippets/tree/master/python/parsers

Парсинг баланса и транзакций из телебанка ВТБ. Большие циферки пока что наезжают друг на друга, что-нибудь придумаю.

Карта и музыка

Единственная вещь, которая сделана там just for fun — это карта передвижений. Реализована она через парсинг Find my iPhone по крону. Сначала боялся, что будет жрать батарейку, однако разницы не заметил. Так что ради развлечения всегда приятно посмотреть где был за последнюю неделю, особенно интересно будет летом, посмотрим сколько я смогу покрывать на велосипеде.

Музыка стандартно — last.fm. Потому что я использую несколько плееров (iTunes, Я.Музыка, player.vas3k.ru), а скробблинг на last.fm есть у всех. По тапу вскоре можно будет лайкнуть трек.

За идею парсинга Find my iPhone по крону снова спасибо @themylogin

Список дел

Парсится из Apple iCal через iCloud (либа pyicloud). Отображается списком на ближайшие 5 дней (для меня оптимальное число). Запланированные дела на сегодня выделяются зеленым, прошедшие прозрачным, как только до события остается 1,5 часа оно начинает светиться красным и запускает обратный отсчет до него (1,5 часа так же подобрано экспериментально). Идущие в данный момент события выделяются синим.

Bar chart снизу

Самая забавная задумка, которая была воплощена на этом устройстве. В таблице 4 строчки: здоровье/спорт, саморазвитие/креативность, работа/дом, наслаждения. Напоминает типичный список областей жизни из какой-нибудь книжки про мотивацию и саморазвитие, однако я его переработал под себя.

Например, у меня нет «работы» в привычном смысле этого слова — скучного монотонного занятия вне дома, на которое нужно рано вставать, долго ехать, весь день ненавидеть и всю неделю мечтать о пятнице, весь год мечтать об отпуске. Деление жизни на «работу» и «не работу» для меня условно, потому в «работу» у меня включены все действия, направленные больше на улучшение благосостояния, чем на саморазвитие (ремонт и уборка, например, аналогично).

Со здоровьем проще всего, почистил зубы — получил 1 балл, покопал картошку, покормил медведя, побегал или покатался на велосипеде — еще. С саморазвитием чуть сложнее, но тоже понятно, в под наслаждение я отношу всё остальное, даже простая прогулка вечером или теплая ванна.

Однако все помнят главное правило, которого я придерживался — максимум автоматического сбора информации. Потому основная часть этих графиков строится сама. За коммит в рабочий проект — +1 балл в «работу». За коммит в собственный проект — +1 балл в «саморазвитие» (реализовано простейшим post-commit hook'ом в 1 строку). За добавление события в календарь «развлечения» — +5 баллов в «наслаждение», за события в других календарях — автоматом раскидывается по +5 баллов во все другие области. За трекинг пробежки или покатушки через RunKeeper — +10 баллов в спорт за сегодня.

Дальше еще забавнее. За твит +1 наслаждение (да-да), а за фотку в инстаграме сразу +5 наслаждения. Более того, за чекин сразу +10 наслаждения. Да, можно было бы разделять чекины на «рутинные» и «развлекательные», однако снова возвращаемся к моему образу жизни — я не чекинюсь в неинтересных местах. За поездку по транспортной карте на метро +3 наслаждения. Нет, не только потому что я люблю метро, а потому что обычно это поездка куда-то, а я редко езжу туда, куда не хочу. В общем с наслаждениями проще всего.

Однако остается еще огромное количество действий, которые хотелось бы трекать, но нельзя без дополнительных сложных устройств. Например, хотелось бы трекать сон, но я не представляю как это точно сделать. Главная проблема в том, что я перед сном всегда час туплю в новости и блоги через айпад, и с утра всегда час валяюсь в постели туплю в айпад. А покупать Jawbone UP (или любой другой шагомер за over $200) — сильно расточительно. В общем для таких вот вещей мною сделана возможность просто «накликать» себе баллов. Почитал книжку — проходя мимо кликнул балл в «саморазвитие». Несмотря на то, что это прямое нарушение основного правила, пока что это мне кажется забавным и добавляет разнообразия в жизнь (как будто ачивки себе выдаешь).

Зачем это всё надо? Это интересно и позволяет не «выгорать» (моя проблема в последнее время). В дальнейшем я придумаю как использовать эти данные для анализа, думаю, это будет весело. Когда соберу побольше.

История поездок по городу и мест пополнения Транспортной Карты (это студенческая скидка 50%, а то щас начнут удивляться цене)

Заключение

Многие из тех, кому я показывал фотографии всего этого безобразия, спрашивают буду ли я выпускать это как приложение для всех. На данный момент ответ отрицательный по той причине, что в таком виде, как оно есть сейчас — оно неюзабельно в обычной советской семье. Оно не продукт, его нельзя купить, принести домой, поставить и наслаждаться развлечениями из коробки. Штука исключительно индивидуальна, оптимизирована под мой текущий образ жизни (а такой образ жизни ведут единицы) и полезна исключительно одному человеку — мне. Если кто-то сможет придумать как превратить это в готовый к использованию продукт, а не индивидуальную разработку — велкам. А в том виде, в котором есть сейчас, даже несмотря на ее очевидную полезность — не взлетит.

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

Еще? Тогда вот