Малина, sqlite и танцы с бубном

21 April 2013

Количество малины растет! Основной домен теперь бегает под отдельной малиновой коробочкой :) Но оказалось влияние скорости флэш-памяти куда более серьёзное, чем предполагалось сперва. Запросы к базе стали выполняться почти раза в два медленней. Удалось к этому докопаться благодаря сохранению профайла через XDebug. А спасение производительности было возложено на все возможные способы кеширования. Йеах!

Байдарская долина и пригород

15 April 2013

С появлением вездеходного велосипеда, желание изучать дальние уголки Крыма только сильнее обострилось. Первая внезапная правильная горная поездка в Судакскую область сменилась не менее внезапной второй поездкой за Балаклаву. Пол часа на решение и вечер на приведение велосипеда в порядок - и можно отправляться в бой! Маршрут предстоял радиальный - откуда выехали, туда и вернулись. Очень удобный вариант, кстати. А по скольку на местности не ориентировались, возвращение к точке старта оказалось внезапным чуть более чем полностью.

Собрал интересные участки спуска, с парой элементов подъема в видео выше. Оочень душевная местность, чистая природа, перебегающие дорогу олени.. Встретили лесника, который нас ругал за то, что мы отошли от туристической тропы. Итог за день: Родниковское - Россошанка - Перевал Бечку - Урочище Ай-Дмитрий - Узунджинский каньон - Родниковское - 28,46км / 11,2кмч / 43кмч. Как раз тот случай, когда километры в расстояние - отнюдь не такие километры как кажутся. По приборам товарищей накрутили 650 метров набора высоты, что без подготовки было весьма сложно осилить. Сразу напрашивается апгрэйд велосипеда на две звезды спереди..

Следующим испытанием была по началу невинная поездка в выходной покататься по пригороду. А не тут то было. Выносливости товарищей хватило на то что бы накрутить 52 километра. И это то при ширине города где-то в 11 километров. Маршрут: Центр - Фонтаны - Таш-Джарган - ДхТрасса - Залесская - Залесье - Курцы - Водохранка - ДхТрасса - 51-Армии - Набережная - Центр / 52км.

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

21 March 2013

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

TTRSS

Завелось в принципе легко и быстро, фиды импортировались успешно и свежие новости посыпались. Но нет ничего идеального - привычного режима разворачиваемого списка как в 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, тут ещё описывается правильная футболка отводящая пот. Надо будет поискать у нас :)


© Oleksiy Tishyn 2018