TinyTinyRss на страже новостей

21 March 2013

Не так давно Google всех опечалила новостью о предстоящем отключении сервиса Google Reader. Второй из трёх всегда открытых у меня сайтов. Зря они.. зря. Ну да ладна. Весь интернет сразу же заполонили обзорами и альтернативами, сервисами, платными вариантами и self-hosted скриптами. Конечно же выбор пал на последнюю категорию. Лучше уж сразу привыкнуть к новой программе и держать у себя все базы и копии, чем опять потом искал альтернативы при помирании следующего сервиса.

<img alt="TTRSS" src="http://home.neravaren.com/files/share/images/ttrss.png"" style="width: 503px; height: 316px;" />

Завелось в принципе легко и быстро, фиды импортировались успешно и свежие новости посыпались. Но нет ничего идеального - привычного режима разворачиваемого списка как в Google Reader'е тут нет, и для Raspberry постоянная работа с базами и параллельными вэб-запросами слегка сложна.

Но тут на помощь приходит ччччииииилавек-программмист! Всё это счастье поднялось на nginx вместо громоздкого apache. К php были доставлены модули кэширования. В планах ещё mysql перевезти на usb-flash накопитель, думаю он будет по быстрей чем встроенная и без того гоняемая sd-карточка. Далее в код. Покалупав скрипты, было выявлена пачка лишних дублирующихся запросов, а интерфейс сайта начал обрастать кнопочками для сворачивания и разворачивания списка.

В файле "js/viewfeed.js" функция cdmClicked посылает запросы пересчета прочитанных сообщений, даже если оно уже прочитано. Нелогично. А ведь каждый запрос жевал секунды две-три, и задерживал очередь.

function cdmClicked(event, id) {
   try {
... 
//было
   if (article_is_unread) {
      decrementFeedCounter(getActiveFeedId(), activeFeedIsCat());
   }
   var query = "?op=rpc&method=catchupSelected" +
      "&cmode=0&ids=" + param_escape(id);
   new Ajax.Request("backend.php", {
      parameters: query,
      onComplete: function(transport) {
      handle_rpc_json(transport);
   } });
... 
//стало
   if (article_is_unread) {
      decrementFeedCounter(getActiveFeedId(), activeFeedIsCat());
      var query = "?op=rpc&method=catchupSelected" +
         "&cmode=0&ids=" + param_escape(id);
      new Ajax.Request("backend.php", {
         parameters: query,
         onComplete: function(transport) {
         handle_rpc_json(transport);
      } });
   }
...

По началу пытался писать отдельный плагин, но что-то не срослось. Плагины вроде классная вещь, можно менять контент фидов, их отображение, добавлять скрипты и прочие. Но мне нужны были кастомные кнопки. Может быть позже разберусь как это дело делать. А пока они вживлены в сам сайт. Файл "classes/feeds.php".

//было
$reply .= __('Select:')."
    <a href=\"#\" onclick=\"$sel_all_link\">".__('All')."</a>,
    <a href=\"#\" onclick=\"$sel_unread_link\">".__('Unread')."</a>,
    <a href=\"#\" onclick=\"$sel_inv_link\">".__('Invert')."</a>,
    <a href=\"#\" onclick=\"$sel_none_link\">".__('None')."</a></li>";
$reply .= " ";
//добавлено
$reply .= "/ Collapse: ";
$reply .= "<a href=\"#\" onclick=\"$$('div.cdmContent')."
                ."each(function(item){item.hide()})\">Close all</a>,
           <a href=\"#\" onclick=\"$$('div.cdmContent')."
                   ."each(function(item){item.show()})\">Open all</a>";
$reply .= " ";

Где наука, искусство и фотография пересекаются (с)

15 March 2013

Светография сама по себе обычна. Для интересного кадра ей нужна идея. К примеру автор фотографий, приведенных ниже, подошел к этому вопросу как со стороны искусства, так и со стороны науки.

Снаряжение для дальних поездок

18 February 2013

На бескрайних просторах интернета подвернулась статья о походном снаряжении для многодневных поездок. Весьма занятно. Помимо доказавших свою крутость шортов Endura Hummvee 3/4, тут ещё описывается правильная футболка отводящая пот. Надо будет поискать у нас :)

Хитрости усадки

16 February 2013

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

Для устойчивой конструкции нужен каркас. Либо толстые гнущиеся провода, либо опора. Накупил значит проволоки двух размеров, на проверить. Вариант оплетания веток проволокой снаружи показался не эстетическим. Так что решил вместо лишних жил пустить проволоку внутри кабеля ;) Вроде бы получилось! Первые варианты веток и модуля со сдвиговыми регистрами на фото снизу ;)

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


© Oleksiy Tishyn 2018