У меня друг сконструировал настольные Smart часы с большим цветным LED экраном, с FM и Web радио, с прогнозом погоды, с будильниками и даже с темами в виде игр, т.е. часы не только скучно показывают время, но и играют сами по себе в тетрис, Pong или в Arkanoid. Плюс часами можно управлять по Bluetooth (хотя это лишнее). Всё это смотрится довольно забавно. И мы стали думать — какой бы ещё функционал в них воткнуть.
И я предложил — а давай у них будет бегущая строка с самыми свежими новостями по различным тематикам, чтобы можно было выбирать по тематикам какие новости должны выводиться. Ну к примеру я хочу чтобы у меня выводились новости космоса, высоких технологий, новости игровой индустрии и наши региональные новости, ну и ещё погоду для своего региона.
Идея — огонь, только вот в часах, в которых и без того мало памяти и так уже много что понапихано (Web радио, FM радио, игровые темы и т.д.), то памяти чтобы замутить ещё и хотелки в виде новостей, да ещё с выбором тематик, вообще не осталось, чтобы вы понимали — речь идёт о килобайтах.
И я подумал — а пусть они берут эту бегущую строку с текстового файла, т.е. всё что останется часам — это считать строку с новостью и выдать её в виде бегущей строки, ни больше ни меньше. Только вот откуда считывать файл, да и ещё чтобы он для каждых часов был свой. Тут и пришла идея сделать поднять под это дело сайт, а в качестве уникального элемента использовать MAC адрес часов. Поставил своему товарищу следующую задачу.
- Часы должны считывать текстовую строку с http://www.имя_сайта.домен/мак_адрес_часов/news.txt и показывать её содержимое, после чего считывать этот файл заново и если содержимое отличается, опять показывать его.
На что он сказал — элементарно, плюс ещё предложил сделать обработку последнего байта, чтобы совсем не было скучно. Мы договорились какие биты последнего байта будут отвечать за цвет, какие за включение/выключение Web и FM радио, какие за громкость. То есть с помощью последнего байта текстовой строки можно управлять часами, т.е. включить/выключить FM или Web радио, задать громкость, поменять цвет строки. А это уже открывало другие возможности — т.к. строка сама сможет управлять часами, можно сделать управление часами через интернет, достаточно сгенерировать нужный (в зависимости от того что мы хотим) последний байт и можно будет к примеру включить любое Web радио на нужной нам громкости.
Мне только осталось замутить сайт и скрипт который бы генерировал нужные новости. Но всё оказалось несколько труднее чем казалось.
Да, я сделал генерацию нужных новостей, т.е. сначала сделал подобие профиля для каждых часов. Профиль это папка на сервере в виде mac адреса. В этот профиль генерировался файл setting.ini который содержал в себе тематику новостей для данных часов и цвет которым отображать данные новости. Содержимое setting.ini вышло вот такое:
auto;4 internet;2 space;7 games;5 MyCity;7
Это значит что первая новость будет “авто новости” красным цветом, потом новости интернета зеленым цветом и т.д. когда все новости закончатся всё пойдёт заново, только уже новости будут новые.
Далее я написал скрипт который раз в час собирает все новости всех категорий в единый файл. Новости берутся из RSS Яндекс новостей. Получается большой файл около одного мегабайта, со всеми новостями. Обозвал его news.ini и выглядит он так.
auto_1;Продажи Автоваза снилизись на 80% из за падения спроса на новые автомобили auto_2;Авто Ваз анонсировала новую Лада гранта за 2 миллиона рублей ... auto_3;Tesla Model X стал первым серийным автомобилем с разгоном до сотни за 0.9 секунд internet_1;Компания Google обновила браузер Chrome до новой версии в которую встроили средства для разработчиков internet_2;Facebook выпустил новые очки виртуальной реальности за 15 долларов; internet_3;Роскомнадзор введёт уголовную ответственность за просмотр Youtube space_1;Компания Джефа Безоса подала новый иск против Илона Маска, за то что Nasa выбрала SpaceX в качестве подрядчика на постоянные рейсы на Плутон space_2;Запущенный Илоном Маском гиперкар - вышел за пределы астероидного поля. space_3;Роскосмос сделали усовершенствованную версию робота Фёдора.
То есть чтобы считать первую новость достаточно найти в этом списке “новость_номер новости” и показывались они в следующем порядке
новость1_1 новость2_1 новость3_1 новость4_1 ... новость1_2 новость2_2 новость3_2 новость4_2 ... новость1_3 новость2_3 новость3_3 новость4_3
и так пока не закончатся все новости из текущей категории, т.е. если к примеру в категории “новости2” всего 3 новости, а в других они ещё есть, то категория где они закончились, там новости начинали показываться сначала, а где не закончились они продолжались, т.е.
новость1_4 новость2_1 новость3_4 новость4_4
И всё бы оно ничего, но как узнать — было ли произведено чтение файла на сервере ? и кем именно было произведено чтение ? т.е. кем был считан файл http://site.ru/mac/news.txt ?
Нужно чтобы сервер нам об этом сообщил. Выход я нашел следующий — постоянно считывать последнюю строку лога web сервера access.log и если в ней содержится запись о mac адресе, news.txt и код ответа от сервера что всё удачно считалось, а значит в папку с mac адресом нужно выдать следующую новость. Как это сделать на Linux системе я не знаю, но за то по Windows могу написать что угодно. В данном случае это программка которая постоянно висела в памяти и 100 раз в секунду (потому что смарт часов окно 5–6 шт и чтобы успевать контролировать логи) считывала последнюю строку лога.