Будильник из Banana Pi (Raspberry Pi)

Скопирую сюда статью которую писал в 2014 году на geektimes, про то как я будильник из микрокомпьютера делал.


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

  1. Уметь играть интернет-радио в качестве будильника.
  2. Работать по Wi-Fi (wpa2, “N” режим, желательно уметь без wps).
  3. Желательно уметь показывать время и работать как часы.
  4. Желательно иметь возможность настройки через телефон или компьютер.

Не могу сказать, что я требовал слишком много, т.к. обязательным требованием было только проигрывание интернет-радио, но все девайсы, которые мне встречались, были либо слишком большими, либо слишком дорогими, либо морально устаревшими. Читать далее


raspberry pi, banana pi, php      

Wunder digest

Для ведения личных дел я пробовал использовать различные менеджеры заданий, но всегда возвращаюсь на wunderlist. Он меня жутко раздражает своим интерфейсом и отсутствием нужных мне функций, поэтому раз в год я закипаю и пытаюсь мигрировать в другой продукт, несколько дней настраиваю все под себя, устанавливаю мобильный клиент, красиво веду задания, а потом запал проходит, я начинаю замечать недостатки и возвращаюсь туда откуда начинал.

В последний раз я попытался сформулировать чего мне не хватает в wunderlist и постараться исправить эту проблему. В первую очередь мне не хватало дайджеста дел которые просрочились или запланированы на сегодня, поэтому я написал простенький скрипт, который получает из api wunderlist список дел, отбирает нужные и отправляет этот список на почту.

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

wunder digest

https://github.com/Rpsl/wundrelist-digest

Читать далее

php, service, wunderlist, github, todo      

И трех лет не прошло

pelican is good

Не был уверен что это когда-нибудь случится, но, иногда, от скуки, я заставлял себя реанимировать этот блог. В данный момент я полностью отказался от wordpress и переехал на генератор статических блогов. Pelican, если кому интересно.

Почему не wordpress?

Это долгая история.

Если начинать сначала, то этот блог был на Wordpress еще 2006 году, как раз в те времена, когда блоги уже были популярны, но LiveJournal уже начинал умирать. Несколько раз платформа менялась. Помню как-то психанул и полностью переехал на Movable Type, это такая блог платформа на перле. В ней была админка, а весь контент она так-же генерировала в статические файлы. Но Movable Type оказался ошибкой и я вернулся на Wordpress спустя некоторое время.

Менялись домены, менялось оформление, блог кое-как работал.

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

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

Читать далее

pelican, blog      

Leprosorium++

Некоторое время назад, примерно в мае, Jovan, Vicont и прочие веселые ребята выкатили новую версию Лепрозория и всё было замечательно, кроме отвалившихся юзерскрипт плагинов.

Я очень привык к расшринию Lepra+, которое добавляет удобную кнопочки в браузер и включает в себя различные скрипты. Первым делом я полез патчить исходники, но просидев ночь понял что гораздо проще будет написать всё заново, тем более что технологии уже ушли вперед и можно сделать расшриние сразу для всех браузеров, а не ограничивать себя Google Chrome.

leprosorium++

С выбором платформы проблем не было, еще давно когда я работал в Корпорации ГУРУ мне довелось познакомиться с платформой Kango, что занятно, её авторы тоже Леперы.

Платформа позволяет работать с внутренним api, которое транслирует необходимые вызовы к api конкретного браузера, таким образом можно в кратчайшие сроки делать расшрирения «Кнопки», но делать специфические нативные вещи становится невозможно.

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

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

Всех энтузиастов приглашаю в репозиторий, а так же рекомендую познакомиться с Kango.

https://github.com/Rpsl/leprosorium/issues


browser, javascript, leprosorium      

Turboloader - автоматическое скачивание сериалов

Я уже несколько раз упоминал что у меня в шкафу живет старенький nas, я его использую для всего, и торренты он качает и бэкапы на него делаются и просто хранилище всякой-всячины. Так вот, уже около года он у меня и новые серии с Turbofilm.tv скачивает, раскладывает по папкам, отправляет на почту сообщение о том что серия скачалась.

turbofilm_m

Изначально я не напрягался, а смотрел серии прямо на сайте через встроенный броузер playstation или apple tv, но бродилки там ущербные и работают совсем не так как все привыкли. Например после очередного апдейта на турбофильме они просто перестали логиниться, т.к. у них форма была на js и тэг "a" был без аттрибута "href", хромы и файрфоксы такое кушают на ура, а эти скромники отказываются. Так как сериалы мне все равно смотреть хотелось, я решил что нужно это исправлять. Сначала пошел по пути легкого сопротивления и сделал на другом сайте простую кнопку, по нажатию которой отправлялся хитрый POST запрос и меня логинило на сайте, но все равно навигация превращалась в ад.

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

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

Turboloader - скачать на гитхаб

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

Пример конфигурации описан на гитхабе. Только я вас прошу, не ставьте проверку часто, а то нас всех выпилят и останемся без сериалов.


nas, php, turbofilm, сериалы      

Про сервис

После участия в нескольких жарких спорах, я понял что некоторые люди вокруг меня не понимаю что значит "сервис". Ну или я не понимаю и пытаюсь всем навязать свою точку зрения, но свои размышления я изложу ниже и, как мне кажется, они вполне логичные.

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

apple product

Вот например мне нравится мой провайдер интернета, onlime.ru. Я к нему подключился году в 2007, когда он еще не был онлаймом, а был НКС (Национальные кабельные сети) или что-то в этом духе. Мне нравится им пользоваться, честно. Они не достают меня рекламными смс и ежемесячными звонками с предложениями о подключении дополнительных услуг, в отличие от акадо. У них не бывает ремонтных работ, а если и бывают, то я этого не замечаю. Серьезно за все эти годы интернет не работал несколько раз. Мне нравится заходить в личный кабинет раз в год, узнавать что мой тарифный план устарел и за эти деньги я могу перейти на более выгодный тариф. Они сами подписали меня на программу лояльности и у меня есть куча бонусных баллов, которые я могу потратить на всякие фичи. Но самое главное в том, что они делают свою работу так, что мне не приходится думать об этом или забивать себе голову, я уверен что интернет у меня работает, а остальное мне не важно.

google product

Мне нравится мой хостинг, fastvps.ru, я знаю что они являются реcселерами от хетзнера, но мне не жалко переплачивать им чуть-чуть денег и иметь взамен возможность платить любым удобным мне способом и общаться с их сотрудниками на родном языке. Мне нравится, что когда в полночь я случайно запустил update-lilo и он попытался перепрошить загрузочный сектор на жестком диске, то я написал об этом в поддержку, они через 15 минут отреагировали на мою заявку, сами подключили KVM и под присмотром произвели тестирование и перезагрузку сервера. Я конечно мог и сам это делать, но тут я получил помощь адекватных специалистов, которые явно больше меня разбираются в вопросе и с их помощью убедился что сервер работает как нужно, может самостоятельно перезагружаться и не испытывает серьезных проблем. Разве это не замечательно?

Раньше мне очень нравился Альфа-Банк, потому что они были удобными и приветливыми. Мне хотелось пользоваться их услугами и рекомендовать его друзьям. Сейчас они продолжают предоставлять отличный сервис, но как только ты сталкиваешься с их сотрудниками хочется застрелиться, потому что терпеть это невыносимо. Ну сами представьте, когда после посещения офиса и четырех звонков в службу поддержки в течение месяца они не могут изменить номер мобильного на который приходят уведомления об операциях с деньгами или смс для входа в интернет банкинг*. Как можно доверять свои деньги компании которая может без спроса поменять ваш контактный email и секретное слово, а ее сотрудники обманным путем навязывают дополнительные услуги.

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

your company product

Я люблю работать с paypal, т.к. у них все просто. Один раз зашел в личный кабинет, прошел несколько простых проверок и пользуйся на здоровье. Я желаю обанкротиться компании WebMoney из-за её ебучих систем авторизаций, проверок, привязок, попаболи и прочей адовой херни с которой приходится сталкиваться, я уже писал пост про это.

Тут можно приводить еще очень много примеров, но смысл от этого не будет меняться.

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


onlime, paypal, webmoney, акадо, альфабанк      

Странности с Google Chrome

В последнее время замечаю, что Chrome периодически не правильно показывает страницу. Причем это явно не косяк верстки, а именно как будто видео карта глючит. Такое ломанное изображение, после совершения ajax действий над dom деревом, как только подводишь мышку к этому месту все становится хорошо. Компьютер его перерисовывает.

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

chrome broken

Еще иногда бывает что гифки не показываются. Для их запуска приходится щелкнуть рядом, что бы выделить гифку, тогда запускается. Проверял на разных сайтах и без расширений - без результата. Не знаю что с этим делать, на всякий случай воткнул на сайт такой код, success для ajax действий.

$('#tab_content' ).height( $('#tab_content' ).height()+1 );

Может сталкивался кто? Подскажите куда копать.


javascript, неведомая хуйня      

Как стать "Rock Star" программистом

Вот несколько советов:

  • Найдите хорошего руководителя который будет критиковать ваш код, пусть он научит вас решать проблемы на собственном примере. Вы поймете что выросли, когда сможете оспорить его мнение правильными аргументами.
  • Всегда увеличивайте сложность и масштабы проблем которые пытаетесь решать. Запомните что у большинства людей нет 20-летнего опыта, у них есть один год опыта повторяющийся 20 раз. Не становитесь таким.
  • Заботьтесь о таких вещах как документация, имена методов и функций, покрывайте код тестами. Ваш код должен выглядеть профессионально и доступно, ведь с ним будут работать и другие люди.
  • Изучайте все доступные библиотеки и модули, даже если они не требуются сейчас, вы все равно должны знать об их существование. Если вам приходится работать с незнакомыми компонентами — старайтесь полностью разобраться с их назначением.
  • Если вы что-то не понимаете, то это должно стать стимулом пойти и разобраться в этом. Всегда погружайтесь глубоко.
  • Используйте лучшую IDE для вашего языка, максимально изучите ее и выучите все хоткеи. Хорошая IDE очень сильно ускорит вас.
  • Когда вы сталкиваетесь с новой проблемой, например вы никогда не работали с SOAP/XML, прежде чем начинать программировать почитайте что пишут в интернете на эту тему. Это поможет вам понять как другие люди решают задачи и с какими проблемами сталкиваются.
  • Семь раз отмерь, один раз отрежь.
  • Не забывайте что вы делаете продукт которым будут пользоваться другие. Постоянно общайтесь с заказчиками, следите за их ожиданиями, убеждайтесь что они знают чем вы занимаетесь и вы понимаете чего они хотят.

Это вольный перевод этой заметки, просто захотелось оставить тут.


работа, разработка      

Gmail Show-M.-Later

Gmail Show M later

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

Есть более древние варианты в галерее скриптов, Gmail Snooze например, но они позволяют работать только с дневными интервалами и устроены таким образом, что письмо добавленное в 23:00, в 01:00 снова окажется в инбоксе. Поэтому я сначала модифицировал, а потом полностью переписал. В моей реализации, письма живут более правильной жизнью.

Испытательный срок длился две недели. Это только последней стабильной версии, до этого были еще другие реализации, пробовал использоваться Cache вместо ScriptDB, но он слишком часто терял ключи. С этой версией проблем не возникало, пару раз, было что скрипт зависал, но я забил на это дело, т.к. повторить ошибку мне не удалось.

Касательно объемов данных. Каждому пользователю google выделяется 50мб под ScriptDB, но может быть и больше, если у вас платный аккаунт. Что бы упереться в размер данных, нужно будет очень постараться, поэтому до первой проблемы, решать ее не собираюсь. Тестировал максимум на 20 активных письмах, все прошли полный цикл без ошибок. Наверно, если писем будет больше, то возможен тайм–аут. Если столкнулись с проблемой, пишите, буду исправлять.

Инструкцию и комментарии мне писать было лень, поэтому они не сильно подробные, но я постарался все расписать максимально доступно, в стиле пойди сюда — кликни тут.

Буду рад ответить на вопросы.
Буду очень рад, если появится перевод на другие языки.

https://github.com/Rpsl/Show–M–Later


gmail, javascript      

Nginx изменение картинки по рефереру

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

В целом весьма логично, если раньше все боялись за свой трафик, то теперь вопросы трафика мало кого интересуют, поэтому и приоритеты сместились в другую сторону. Хотя я видел ситуацию, когда на одном из рабочих ресурсов, образовался хотлинк канал японского трафика на 250mb/s.

Попробуйте открыть это изображение в новой вкладке (убедитесь что броузер не закешировал)

раньше тут была картинка

Рассматривая разные решения, я нашел самый простой способ, делать это с помощью nginx и встроенного модуля ngx_http_referer_module.

test_images.conf

server {
        listen 80;
        server_name images.dev;
        root /www/data/test_images;

        location /test_images {
                valid_referers none blocked server_name images.dev;

                if ($invalid_referer) {
                        rewrite ^(.*)/(.*)$ /images_bad/$2 last;
                }

                rewrite ^(.*)/(.*)$ /images_ok/$2;
        }

        location /images_ok {
                internal;
                alias /www/data/images/test_images/ok;
        }

        location /images_bad {
                internal;
                alias /www/data/images/test_images/bad;
        }
}

Собственно механика очень простая. Мы определяем с помощью "valid_referers" список правильных доменов, можно добавить в него домены поисковиков, например, что бы при поиске картинок пользователю показывалась правильная картинка. Потом мы создаем два внутренних location, которые отвечают за показ правильных и не правильных картинок. В случае не правильного реферера, в конструкции if мы делаем редирект на локейшн с картинками, которые должны отдаваться жуликам, которые ленятся скачивать картинку на свой сервер. Ну вот, в общем и все. Осталось только позаботиться, что-бы у нас были необходимые картинки.

Тут можно решать разными путями, например, при создание оригинальной картинки создавать ее "обработанный" вариант. Но мне больше нравится ленивая загрузка, которую я, когда-то давно, делал в iCacher, основная идея проста: при попытке запроса "обработанной" картинки, если ее нету, управление передается скрипту, который проверяет ее оригинал и делает ее "обработанную" копию, которая отдается пользователю. При повторном обращение, запрос не дойдет до скрипта и пользователю отдастся статический файл. Таким образом мы получаем генерацию изображений по требованию. Еще можно добавить крон скрипт, который будет удалять "обработанные" картинки через 30 дней.

Я не уверен, что моя реализация хороший пример и буду рад если вы ее покритикуете. Плюс, я так и не придумал как избавиться от if в данном случае ( вариант хранения файлов в images_ok/1/ считаю уебским ).


banners, cache, images, nginx