Недавняя спонтанная фотография вызвала много эмоций, хоть в основном и негативных. Не помню точно как, но идея подобного информационного устройства, живущего около двери, будоражила наши молодые умы уже очень давно. Уже не вспомню подробностей, но когда @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'а на стене, основная польза от него была замечена в двух случаях:
Когда проходишь мимо. Это как минимум раз в пол часа. Налить кофе, в туалет, и.т.д. Мое постоянное рабочее место расположено так, что за всеми этими вещами надо проходить по коридору. В это время полезно: список зачад на день, время, играющая в данный момент музыка, bar chart снизу (о нем дальше).
Когда уходишь из дома. Понятно, что пока крутишься около вешалки, особенно зимой, на 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 часа так же подобрано экспериментально). Идущие в данный момент события выделяются синим.
Самая забавная задумка, которая была воплощена на этом устройстве. В таблице 4 строчки: здоровье/спорт, саморазвитие/креативность, работа/дом, наслаждения. Напоминает типичный список областей жизни из какой-нибудь книжки про мотивацию и саморазвитие, однако я его переработал под себя.
Например, у меня нет «работы» в привычном смысле этого слова — скучного монотонного занятия вне дома, на которое нужно рано вставать, долго ехать, весь день ненавидеть и всю неделю мечтать о пятнице, весь год мечтать об отпуске. Деление жизни на «работу» и «не работу» для меня условно, потому в «работу» у меня включены все действия, направленные больше на улучшение благосостояния, чем на саморазвитие (ремонт и уборка, например, аналогично).
Со здоровьем проще всего, почистил зубы — получил 1 балл, покопал картошку, покормил медведя, побегал или покатался на велосипеде — еще. С саморазвитием чуть сложнее, но тоже понятно, в под наслаждение я отношу всё остальное, даже простая прогулка вечером или теплая ванна.
Однако все помнят главное правило, которого я придерживался — максимум автоматического сбора информации. Потому основная часть этих графиков строится сама. За коммит в рабочий проект — +1 балл в «работу». За коммит в собственный проект — +1 балл в «саморазвитие» (реализовано простейшим post-commit hook'ом в 1 строку). За добавление события в календарь «развлечения» — +5 баллов в «наслаждение», за события в других календарях — автоматом раскидывается по +5 баллов во все другие области. За трекинг пробежки или покатушки через RunKeeper — +10 баллов в спорт за сегодня.
Дальше еще забавнее. За твит +1 наслаждение (да-да), а за фотку в инстаграме сразу +5 наслаждения. Более того, за чекин сразу +10 наслаждения. Да, можно было бы разделять чекины на «рутинные» и «развлекательные», однако снова возвращаемся к моему образу жизни — я не чекинюсь в неинтересных местах. За поездку по транспортной карте на метро +3 наслаждения. Нет, не только потому что я люблю метро, а потому что обычно это поездка куда-то, а я редко езжу туда, куда не хочу. В общем с наслаждениями проще всего.
Однако остается еще огромное количество действий, которые хотелось бы трекать, но нельзя без дополнительных сложных устройств. Например, хотелось бы трекать сон, но я не представляю как это точно сделать. Главная проблема в том, что я перед сном всегда час туплю в новости и блоги через айпад, и с утра всегда час валяюсь в постели туплю в айпад. А покупать Jawbone UP (или любой другой шагомер за over $200) — сильно расточительно. В общем для таких вот вещей мною сделана возможность просто «накликать» себе баллов. Почитал книжку — проходя мимо кликнул балл в «саморазвитие». Несмотря на то, что это прямое нарушение основного правила, пока что это мне кажется забавным и добавляет разнообразия в жизнь (как будто ачивки себе выдаешь).
Зачем это всё надо? Это интересно и позволяет не «выгорать» (моя проблема в последнее время). В дальнейшем я придумаю как использовать эти данные для анализа, думаю, это будет весело. Когда соберу побольше.
Многие из тех, кому я показывал фотографии всего этого безобразия, спрашивают буду ли я выпускать это как приложение для всех. На данный момент ответ отрицательный по той причине, что в таком виде, как оно есть сейчас — оно неюзабельно в обычной советской семье. Оно не продукт, его нельзя купить, принести домой, поставить и наслаждаться развлечениями из коробки. Штука исключительно индивидуальна, оптимизирована под мой текущий образ жизни (а такой образ жизни ведут единицы) и полезна исключительно одному человеку — мне. Если кто-то сможет придумать как превратить это в готовый к использованию продукт, а не индивидуальную разработку — велкам. А в том виде, в котором есть сейчас, даже несмотря на ее очевидную полезность — не взлетит.
Ну и так же этот пост — лишь отчет о том, в каком виде система находится сейчас. В ней собираются данные из социальных сетей, погода, деньги, мои перемещения и настроение, а всё это можно будет в дальнейшем использовать для поиска корреляций и аналитики. Вот там-то начнется самое интересное!
Не совсем понял насчёт приложения. Оно постоянно открыто в браузере или же это standalone такой?
фдщтугтшч, наверное ты открыл пост раньше, чем я это дописал: > iOS с самых первых версий умеет фичу «добавить на экран Домой», превращая любую веб-страничку в полноэкранное приложение. Однако на iPad 1 ставится только iOS 5, которая не умеет при этом скрывать верхний бар. Ну короче это как браузер на весь экран, просто сверстано специально под iPad, отключена прокрутка, масштабирование, и.т.д.
Спасибо вдохновил, побежал делать подобный велосипед. А почему themylogin закрыл свой бложик? Я так любил его почитывать.
vas3k, теперь понятно, спасибо.
Очень здорово. Заразил идеей, пойду писать себе такое-же.
Давай скрипты! А вообще, всё круто сделал. Когда видел фотки, так и думал, что приложение под iOS написал и вот только сейчас вспомнил про альтернативный вариант.
Очень здорово. Заразил идеей, пойду писать себе такое-же.
ReDetection, > мм, мне интересно не как приложение для всех, а как репа на гитхабе На гитхаб выложу крон-скрипты, думаю дальше разберешься, там рутина, записать в базу итд. > как ты нашёл про яндекс-виджет?) Не помню, я это ночью гуглил, как-то вышел на какой-то URL, в котором содержалось WIDGET_INFO?CHANNEL=WYANDEX так и вышел на то, что это URL для виджета.
А если в туалет пошёл это равняется скольким плюсам к наслаждению? И да, можно ли на этом велосипеде в Flappy Bird поиграть пока девушка одевается и ты её сидишь ждёшь как дурак потея в пуховике? Ваще, круто было бы замутить такую штуку на айфоне каком-нить ненужном стареньком типа iPhone 3G, чтоб инфа такая всегда под рукой была, там экран правда маловат, но зато вся инфа под рукой.
Интересно, на тебя мой jawbone налезет?
Sneks, у тебя еще и jawbone есть? :D В мае проверим.
vas3k, пойду, пожалуй, сложу все "ненужные" девайсы в коробочку "для вастрика".
Трекать сон можно через приложение "sports.com". У них есть экстремальный будильник, который пишет то, что ночью происходит и даже со звуком. Хз как там с апи, но я уверен, что ты разберешься.
Nks, немного не понял, можно поподробнее?
Выложил исходники парсеров для тех, кто интересовался: https://github.com/vas3k/snippets/tree/master/python/parsers
Парсить html регекспами [x]
Вован, я ждал этот комментарий и даже вероятнее всего от тебя или themylogin'а. Хотя я бы и сам написал такой же :) Но если ты попробуешь выполнить запрос, там не HTML, а огрызок непонятно-чего-HTML-подобного, полностью переэкранированного, который обернут в JavaScript для кроссдоменных запросов. Нормальный HTML я парсю <a href="https://github.com/vas3k/snippets/blob/master/python/parsers/gismeteo.py">тоже нормально</a>, но не такое мясо.
Реализуешь мои идеи лучше, чем я. Заебись. Определять, спишь ты или нет можно по интенсивности Wi-Fi траффика на айпаде, макбуке и Apple TV... короче, на всех устройствах, что у тебя есть :-D В большинстве случаев будет работать не сильно хуже моего, который последнее время постоянно ошибается. Про автоматическую выдачу баллов себе - охуеннейшая идея, как я только сам не додумался. Баллы расставлять себе за каждый день я забил в первые же дни января, а вести дневник - в последние. Впрочем, анализатор тайтлов активных окон (не хочешь себе такое же сделать?) прекрасно описывает половину моих дней, а вторую я и без всяких дневников никогда не забуду. А мне кажется, постоянный опрос (у меня раз в 15 минут) Find My iPhone жрёт батарею :( Надо будет в дни, когда сижу дома весь день, потестить. Короче, у тебя посты всё лучше и лучше, идеи всё пизже и пизже. Хорошо, что зелогин сдох и потому я не ревную :)
themylogin, твой коммент прям поднял мне настроение и мотивацию, спасибо, это правда круто! > Определять, спишь ты или нет можно по интенсивности Wi-Fi траффика на айпаде Кстати да, как-то я об этом даже не подумал! Айпад как раз последнее устройство, которое я юзаю перед сном и первое, которое включаю сразу через минуту после того как просыпаюсь. Он очень репрезентативен для определения сна, осталось потестировать реализацию. > анализатор тайтлов активных окон (не хочешь себе такое же сделать?) Для мака была куча программок, которые анализировали используемые приложения. Надо посмотреть на счет получения данных из них, а может на способ работы (наверняка они вызывают какие-то доступные простейшие API OS X), действительно ок идея. > А мне кажется, постоянный опрос (у меня раз в 15 минут) Find My iPhone жрёт батарею У меня раз в 10 минут (от балды придумал, почти сошлись). Я правда разницы не заметил и уже даже хотел делать 5 если координаты вне радиуса километра от дома. Пока оставлю 10 тогда. Помню в первый день у меня айфон сел не дожив до вечера, я уже хотел расстроиться и выключить этот парсер, но на следующий и последующие дни он отработал отлично. Видимо в тот день я активно тестировал бету нашего приложения на работе, а она тогда была прожорлива, думаю это из-за нее.
Прикольно. Хочу сделать приложение для напоминания о низком балансе ЕТК по почте. Посмотрел код. С запросами всё понятно, такие же, как в браузере, а вот как получить сессию, расскажешь?
vadipp, вводишь номер карты и капчу на сайте, смотришь куки, там будет идентификатор сессии. Его сохраняешь, он привязан к твоему IP и больше ни к чему. Раз в пол часа надо делать любой запрос с ним чтобы сессия не устарела. В скрипты выше передаешь number (номер карты) и session (этот идентификатор). Profit! Если проебал, то просто с того же IP вводишь капчу, идентификатор выдается точно такой же как в прошлый раз, только живой.
ReDetection, > я rescuetime.com использую, у них есть апи Почитал сайтик, вроде норм, поставлю попользоваться, посмотрим как оно. Спасибо. > Accessibility API Да, о нем я и думал, через Accessibility API многие в OS X делают крутые штуки, прям пушка. Но свой велосипед будет на втором месте, всегда приятнее заюзать что-то готовое. > ты чаще ездишь в центр, чем на левый или просто сдвинул карту? Да, я намного чаще езжу в центр, но здесь карта сдвинута и зазумлена просто для красоты.
Сработало, спасибо!
Я, может, и не совсем согласен с ранжированием количества баллов за всякие там чекины и посты, но идея просто охуенная.
А почему ты его так закрепил жестко? Мне кажется, было бы удобнее на кроншейне с крутилкой, чтобы, если надо, повернуть, наклонить можно было.
Привет и спасибо за множество идей! Я делаю нечто подобное на MajorDoMo. Очень благодарен за методику получения баланса Транспортной Карты - сегодня же прикручу. Баланс мегафона я получаю вот-так: http://volgasg.megafon.ru/ROBOTS/SC_TRAY_INFO?X_Username=9270000001&X_Password=0000 нужно в л/к включить Робота. Успехов всяческих!
msh555, > Баланс мегафона я получаю вот-так: Удивительно, я находил этот URL и включал "доступ автоматизированным системам" в л/к, но у меня не получалось, а сейчас прошло. Ну как время будет перепишу, XML парсить приятнее, чем экранированный HTML. > Очень благодарен за методику получения баланса Транспортной Карты - сегодня же прикручу. Вы не указали в каком вы городе, мой метод работает только для тех, у кого карты выпускает Золотая Корона (<a href="https://t-karta.ru/">тут есть список</a>), например в Москве и Питере это совершенно другие вендоры. Вктарце методика описана <a href="http://vas3k.ru/blog/357/#comment8514">на пару комментариев выше</a>, а код парсера баланса, поездок и пополнений <a href="https://github.com/vas3k/snippets/blob/master/python/parsers/ngt.py">есть на гитхабе</a>.
msh555, как я понял по IP, вы из Самары. Тогда да, для вас этот метод работает.
ПЕРЕИМЕНОВАЛ!
themylogin, так даже забавнее! :3
Блин, прикольно сделал, пошел на ali искать дешевый китайский планшет... З.Ы. Я один заметил женские хардкорные туфли на фото?
Подскажите, откуда берется картинка погоды. Киньте иконками стрелочек (закат/восход,) плиз. К Мажордомо прикручу часть
Да, и подскажите, что за шрифт, пожалуйста.
PAV, ответил вам на email
Хотела узнать, а как вы себе балы ставите? Ходите туда-сюда и кликаете, или как-то через прогу делаете? заранее спасибо!
Zhanel, туда-сюда кликаю прям на айпаде