Google

индекс
191,45

My Google Reader

image Я очень ленив. И как всякий ленивец, очень люблю маленькие ништяки, которые позволяют делать поменьше, а получать побольше. Самыми полезными для меня приобретениями по прошествию времени стали технология RSS и Google Reader. Они позволили не тратить кучу времени, слоняясь по сайтам, а открывать окно одной программы и видеть там все что мне нужно. Я стараюсь затащить в GR все, что читаю более или менее постоянно — ЖЖ, Хабрахабр, (эх жаль, Фейсбук отключил трансляцию ньюсфида), оповещения из сервисов, о выходе новых продуктов (email2rss), новости о выходе новых альбомов любимых групп и т.д. и т.п.
Даже съемная квартира, и та ищется с использованием RSS — просто распарсил cian.ru и просматриваю новые объявления по моим параметрам. )

Но вот что меня в «штатном» GR всегда убивало: так это то, сколько тратится свободного места (особенно по вертикали). Только посмотрите, сколько свободного места съедают лого, поиск, кнопка «добавить подписку»:


А пикселей по вертикали — всего 800.

Что же делать?


В процессе я наткнулся на интересное разрешение для FF: Better GReader. Наряду с некоторыми бесполезностями оно предлагает на выбор несколько скинов для гугль ридера, в том числе Absolutely Compact, с ним стало почти то что нужно, но, на мой взгляд, автор перестарался в угоду минималистичности:


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

Мне нужно-то было всего пару вещей: убрать лого, кнопку «добавить подписку» и перенести панель поиска. К сожалению, ни один из скриптов такой функциональности не предлагал. Пришлось взять в руки шашку GreaseMonkey. За пару вечеров и с помощью друзей родился скрипт, который я назвал My Google Reader. Он делает именно три перечисленные вещи и только их. Вот как выглядит Google Reader в моем варианте:


Если вам нравится, можно установить (Firefox):
  • Кликните add to firefox чтобы установить GreaseMonkey
  • Кликните install чтобы установить скрипт My Google Reader

Вот и все. Надеюсь что был немного полезен. )

PS: На всякий случай привожу исходный код:
// ==Userscript==
// @name              MyGoogleReader
// @namespace         http://denis.fayruzov.ru
// @include            https://www.google.*/reader/*
// @include         www.google.*/reader/*
// ==/Userscript==

(function() {
    var css = '@namespace url(http://www.w3.org/1999/xhtml);';
    css += '#main, #settings-frame, #settings { top:2.1em !important; }';
    css += '#logo-container, #lhn-add-subscription-section, .gbh { display: none !important; }';
    css += '#search { position: inherit !important; }';
    css += '#search-input { width: 150px; }';

    if (typeof GM_addStyle != 'undefined') {
        GM_addStyle(css);
    } else if (typeof addStyle != 'undefined') {
        addStyle(css);
    } else {
        var node = document.createElement('style');
        node.type = 'text/css';
        node.appendChild(document.createTextNode(css));
        document.getElementsByTagName('head').appendChild(node);
    }

    var init = function() {
        var moving_node = document.getElementById('search');
        if (moving_node == null) { setTimeout(init, 100); }
        else {
            var target_node = document.getElementById('viewer-top-controls');        
            var brother_node = document.getElementById('viewer-details-toggle');    
            if ((moving_node != null) && (target_node != null) && (brother_node != null))    {
                 var parent_node = moving_node.parentNode;
                parent_node.removeChild(moving_node);    
                target_node.insertBefore(moving_node, brother_node);
            }
        }    
    }
    init();
    })();


* This source code was highlighted with Source Code Highlighter.


PPS: На самом деле мне не хватает еще одной вещи, но я еще не смог ее реализовать. При открытии папки (напр. corporate-blogs), хотелось бы чтобы дропдаунлист (All items), выбирающий область поиска, автоматически выставлялся на текущую папку. Что-то типа «search this folder». Очень-очень хочется. )
+51
28 октября 2009, 20:39
44

комментарии (98)

+14
Centro #
Можно прятать подписки в которых нет новых постов. Это существенно экономит место.
0
x1shn1k #
А такое реально сделать? Если есть готовый скрипт для этого — поделитесь ссылкой. Я очень много пересмотрел скриптов на userscripts.org для Google Reader'a, но никогда не видел скрипта с таким функционалом.
+8
RedHead #
0
x1shn1k #
Как всё просто оказалось. Благодарю!
0
fStrange #
воспользовался, для меня проблема актуальна спасибо
+1
vitmeat #
а еще можно попробовать использовать Google Chrome, что позволит сэкономить еще и на вкладках… =)
+2
dfayruzov #
Использовать Хром как основной браузер мне мешает отсутствие нужных расширений.
Но я смотрел достаточно давно, может с тех пор ситуация и изменилась.
0
ilya_compman #
Обратите внимание на это.
+1
Guria #
если что-то всё ещё мешает использовать хром как основной браузер, то можно использовать функцию создания ярлыков. Тогда и от вкладок совсем избавитесь и от адресной строки и от тулбара. :-)
0
as3k #
Можно еще убрать панель закладок и использовать FastDial. Это, конечно, дело вкуса, но освободится немного места.
+1
Fredy314 #
Можно использовать более универсальное решение, расширение stylish для Firefox позволяет переопределить стили для любых выбраных сайтов, причём для многих сайтов уже есть готовые пресеты которые можно загрузить из расширения. Я таким образом поубирал рекламу с torrents.ru, или например убрал минуткую задержку при скачивании с летитбит и ещё на нескольких сайтах подправил внешний вид под точ что мне нравится
0
dfayruzov #
Stylish использовался в первой версии. )
К сожалению, он менее универсален, чем Greasemonkey — я не смог с его помощью перенести div c поиском в структуре документа.
0
Fredy314 #
да изменить структуру документа stylish не сможет, им можно сделать только то что позволяет CSS.
0
Saldacenkaw #
немного вопрос не по теме: а как это у Вас такой Файерфокс «вместительный» получился? Менюшка верхняя компактно так…
0
as3k #
Правой кнопкой по области, которая чуть выше строки адреса -> настроить, а дальше перетаскивайте что хотите и как хотите :-)
0
as3k #
Может быть я неправильно понял, но если вы про одну кнопку Menu, то это Compact Menu
0
dfayruzov #
это TinyMenu
https://addons.mozilla.org/en-US/firefox/addon/1455
0
Saldacenkaw #
спасибо
0
kix #
О, это самое поразительное использование RSS, которое я когда-либо встречал. Искать съемные квартиры и тому подобные вещи как-то в голову не приходило.
Насчет перегруженности интерфейса я соглашусь, стало намного лучше. Спасибо за полезную работу!
НЛО прилетело и опубликовало эту надпись здесь
0
dfayruzov #
Не поверишь, это еще и удобно. )
НЛО прилетело и опубликовало эту надпись здесь
0
shifttstas #
У меня аналогичный но на Chrome
0
dfayruzov #
О, похоже, пора переезжать. )
Очень не хватало SmartBookmarksBar на Хроме.

Кстати, как там это расширение зовется?
0
shifttstas #
Покажите пальцем на моём скриншоте о чем вы и я скажу :)
0
dfayruzov #
Расширение, которое делает иконки под адресс баром.
+1
shifttstas #
Это не расширение, а просто добавляем сайт в избранное (звезда с лева) и удаляем его заголовок

–1
dfayruzov #
Т.е. каждый линк ручками? Пожалуй, я еще подожду. )
+3
shifttstas #
ну да, но вообще то это дело на 5-10 минут, зато удобно и красиво…
–1
Deavy #
Только при синхронизации с другим компьютером и отсутствием favicon'ок доставит еще 10-15 минут не приятных мучений с прогрузкой каждой страниц.
Плюс в Google Docs ярлыки без названий смотрятся ужасно.

Интересно, что мешало создателям Хрома добавить поле Описания для каждой закладки? Задача бы упростилась, а красоты бы прибавилось %)
0
shifttstas #
При синхронизации гемороя нет, незнаю как вы но я свои закладки в гугл документах не смотрю, а синхронизация проходит мгновенно…
0
Deavy #
Поясню, что я имел ввиду. У меня тоже синхронизация происходит мгновенно. Но на новой машине, где нет кэша Хрома, вместо красивых иконок, как на скриншоте, будет 30+ белых квадратиков. И придется потратить некоторое время, чтобы заново прогрузить страницы и обновить фавиконки.
0
shifttstas #
Ну вообщето загрузить 20~ килобайтный файл занимает меньше секунды, пусть их даже 30 то получаем 600 килобайт, ну пусть даже мегабайт, но это мало и грузитсья моментально, да и если не убирать подписи то иконки тоже есть…
+2
kmike #
Функция init мусорит в window (moving_node, tagret_node, brother_node, parent_node).
0
dfayruzov #
Я не понял, если честно. )
+5
kmike #
ну переменные объявляются глобальными внутри функции init:

moving_node =…

в js это, в отличие от многих других языков, равнозначно

window.moving_node =…

Чтоб объявить локальную переменную, которая будет доступна только в данном контексте (в функции) и сможет освободить память потом, нужно писать

var moving_node =…

Это, кстати, один из наиболее распространенных источников ошибок у людей, которые не очень много работали с js. Такой внешне безобидный код:

for (i=0; i<10; i++)

может доставить немало неприятностей.
0
dfayruzov #
А, спасибо. ) Сейчас поправлю. )
Не судите строго, это мой первый код на js.
+2
kmike #
Да все отлично.

В js синтаксис очень уж на Си похож, что создает ложное ощущение понимания происходящего, сам нередко попадался раньше.
0
dfayruzov #
Fixed. )
0
kmike #
parent_node еще.
+1
Winter_mute #
Расскажите, как вы распарсили cian — это было бы очень интересно
+2
dfayruzov #
Если вкратце, то я использовал openkapow. )
Но на самом деле это тема еще одного поста. Возьму на заметку, лишний часок — напишу.
+1
Winter_mute #
Было бы круто)
+2
WondeRu #
Здесь мега парсер-конструктор: Yahoo Pipes (парсит почти все и преобразует RSS как угодно)
+3
Craft #
Возможно, для таких задач вам поможет один из этих сервисов
rssproxy.ru/
www.dapper.net/
feed43.com/
pipes.yahoo.com/pipes/
Последний — особенно мощная штука для работы с RSS, фильтрация, объединение или разделение потоков и т.п. Вот неплохой мануал по нему way-blogger.blogspot.com/2008/05/yahoo-pipes-url-4.html
0
dfayruzov #
0
shifttstas #
В Chrome скрипт кстати не работает :(
0
ibnteo #
У меня работает (Chrome под Linux), просто положил скрипт в директорию "~/.config/google-chrome/Default/User scripts". Chrome запускаю так: "/opt/google/chrome/google-chrome --enable-extensions --enable-user-scripts %U".
+2
web4bizness #
а кнопку F11 на клавиатуре выломали? ;)
значительно увеличивает место по вертикали ;)
0
rusher #
на 30% увеливает место по вертикали для нетбуков
0
pxx #
Я уже начал беспокоиться, что никто эту очевидную мысль не озвучит.
0
pxx #
И что самое главное — решение абсолютно кроссбраузерное.
+3
Paranoid #
Пользуюсь Google Reader Minimalistic. Он скрывает/показывает шапку ридера по нажатию «W».
0
karohos #
С ридером хорошая идея.
Конечно о вкусах не спорят, но тема silver на скриншотах выглядит такой древней и жуткой, что вызывает определенную долю диссонанса в общей красоте и стройности. На старой системе я бы предпочел классику, вот уж она никогда не устареет.
+1
Mezomish #
О вкусах не спорят, но «классика» на мой взгляд выглядит ещё древнее :) А синяя тема ВинХР отдаёт… «пластмассовостью», что ли. Так что я, как и автор, «из всех зол» предпочёл бы именно Silver. Ну а так — предпочитаю Clearlooks :)
0
karohos #
Классика вне времени, особенно в варианте 2003 сервера, ах =) НО это ИМХО.
+1
temujin #
для Оперы есть решения?
0
dfayruzov #
Есть, но в опере я не силен.
Скорее всего должно найтись, если погуглить: opera userscript
+2
ProRunner #
Userscript в оперу встроен изначально :)

image

Правда, не все скрипты совместимы.
0
brainon #
Спасибо. Допили для себя — убрал совсем поиск, в левом меню строки «Все записи» и «Пользователи, постоянным читателем которых вы являетесь», в футере блок с кнопками «предыдущая запись», «следующая запись» и ссылки в постах «эта запись понравилась одному пользователю». Радуюсь. :)
0
arty #
ну тогда и я свой покажу:
+1
arty #
чёрт, ссылка не приложилась
arty.name/files/my-google-reader.png
+1
dfayruzov #
Да, давайте все меряться гугль ридерами. )
+1
Silverity #
Однако, есть ещё и это: helvetireader.com/
0
cst #
Уж больно он тормозит.
+3
eldren #
Google Reader
Вот этот скин и минималистичен, и глазу приятен. :-)
0
ngg #
+2
Oktan #
Я же решил проблему нехватки рабочего пространства путем покупки 22-дюймового моника вместо старой 17-шки. ^_^
0
ibnteo #
Есть еще ноутбуки, там увеличение экрана ухудшит другие характеристики, такие как габариты и вес.
+4
vladislavkorobov #
прочитал статью, прочитал комментарии, открыл гугл ридер в хроме, понял что меня все устраивает (и логотип и кнопка), обрадовался что не надо париться и ставить какой-то скрипт.
все чаще учусь пользоваться дефолтными вещами.
Но было всех интересно почитать.
+1
CAXAline #
Фуууу, спасибо вам. Уже попереставил кучу всего из комментариев, прочитал ваш коммент, вернул как было и успокоился.
0
ttil #
Хм, а только мне кажется, что include должен быть
https://www.google.com/reader/*
вместо
+1
ttil #
Сорри, случайно отправилось.

Хм, а только мне кажется, что include должен быть
https://www.google.com/reader/*
вместо
https://www.google.com/reader/
? У меня без * и не работает… У людей по другому?
+2
Habroche #
Да, действительно, будет неплохо, если автор добавит. Не так давно сталкнулся с подобной проблемой для какого-то скрипта. Небольшая поправка только — на домен тоже звезда нужна; и ещё http (всм не только https):

https://www.google.*/reader/*
http://www.google.*/reader/*

Конечно, это можно просто и быстро сделать самому. Но… :-)
+1
Habroche #
«Столкнулся», а не «сталкнулся», олух!
+1
dfayruzov #
Спасибо, добавлю. )
+1
eschava #
вместо первой звездочки надо использовать tld
0
dfayruzov #
А есть ссылка на доку/спецификацию, обосновывающая это предложение?
0
eschava #
+1
ryzhmann #
вот расширение для хрома, позволяющее увеличить используемое пространство
0
ibnteo #
Есть описание этого расширения?
0
ibnteo #
Отличное решение, так его не хватало на нетбуке, да и на большом экране не помешает. Я бы еще кнопки с нижней панели перенес наверх, как раз вторая панель пустая.
0
Sk1f3r #
Так ведь прям в настройках GR можно убрать эту панельку…
Settings — Navigation pane display — Always start with the navigation pane visible.
0
eatart #
неплохо. а я просто перегруппировал подписки и сделал меньше папок, чтобы влезали в экран. хотя если бы была высота 800, вряд ли помогло бы, так что буду иметь ввиду
+1
darkk #
А я эволюционировал от 1 к 2, к 3… Остановился на 4, с вот таким скриптом.
0
petrovi4 #
Спасибо.
Для себя вернул кнопку добавления подписки. Иначе неудобно.
0
dfayruzov #
Одним из достоинств скрипта является простота — практически каждый может подстроить его под себя. )
+1
IIIEII #
Автору очень-очень хотелось автоматически выставлять фильтр поиска в зависимости от папки, а мне ой как не терпелось это реализовать (такие вещи порой воспринимаются как вызов 8-)).

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

Итак, добавляем сразу после:
      if ((moving_node != null) && (target_node != null) && (brother_node != null))  {
         var parent_node = moving_node.parentNode;
        parent_node.removeChild(moving_node);  
        target_node.insertBefore(moving_node, brother_node);
      }


* This source code was highlighted with Source Code Highlighter.


Следующий код:
      // Все написанное далее является шаманством и не претендует на здравый смысл
      // Добавляем обработчики на нажатия элементов дерева (сохраняем имя нажатого элемента)
      window.ext_prepare_links = function() {
        var ext_as = document.getElementsByClassName('link');
        for (var ext_i = 0; ext_i < ext_as.length; ext_i++)
          if (ext_as[ext_i].id.substring(0, 5) == 'sub-t') {
            var ext_click = function() {
              try {
                window.ext_cur_folder = this.innerHTML.match(/title="([^"]*[^\s"])\s*\([^"]*\)"/)[1];
              } catch (e) {
                window.ext_cur_folder = this.innerHTML.match(/title="([^"]*)"/)[1];
              }
            };
            ext_as[ext_i].addEventListener('click', ext_click, false);  
          };
        // Обновляем раз в секунду, ибо сначала дерева вообще нет, да и меняться оно может динамически
        setTimeout(ext_prepare_links, 1000);
      };
      ext_prepare_links();
      
      // Функция для прекращения обновления фильтра, если на него наведен курсор (ручное изменение)
      var ext_stop_troll = function() {
        window.ext_cur_folder = "";
      };
      document.getElementById("search-restrict-button").addEventListener('mouseover', ext_stop_troll, false);
      
      // Функция проверяет текущий элемент дерева и устанавливает фильтр
      window.ext_get_folder = function() {
        if (window.ext_cur_folder && window.ext_cur_folder != "") {
          var mns = document.getElementsByClassName('goog-menuitem');
          for (var i = 0; i < mns.length; i++)
            try {
              var str = mns[i].innerHTML + "<";
              if (str.indexOf('>' + window.ext_cur_folder + '<') >= 0) {
                var evt = document.createEvent('MouseEvents');
                evt.initEvent("mousedown", true, true);
                document.getElementById(mns[i].id).dispatchEvent(evt);
                evt = document.createEvent('MouseEvents');
                evt.initEvent("mouseup", true, true);
                document.getElementById(mns[i].id).dispatchEvent(evt);
                evt = null;
              };
            } catch(e) { };
        }
        // Раз в секунду
        setTimeout(ext_get_folder, 1000);
      };
      ext_get_folder();


* This source code was highlighted with Source Code Highlighter.


P.S. Работает только при нажатии мышкой на элемент дерева, но не при других методах перехода по дереву. Кто является фанатом других методов — пишите, попробую что-нибудь придумать.
0
dfayruzov #
Вау, спасибо! )
Ща протестирую, и если все ОК, то вставлю в пост, не возражаешь?
0
IIIEII #
Нет, не возражаю!
0
dfayruzov #
Дружище, еще запрос: )

Мой юскейс на самом деле немного другой: я перемещаюсь по папкам, нажимая пробел после последнего сообщения в предыдущей папке, а не кликая по каждой папке мышкой.

Может есть событие, которое «ловит» такой переход?
0
IIIEII #
Да, именно об этом я и писал в P.S. ))) Именно этого я и боялся.
Посмотрю вечером, что можно сделать.
0
dfayruzov #
На самом деле непринципиально ни разу. Уже в текущей версии скрипт совершенно юзабелен.
Проматывание дропбокса в сотню значений забывается как страшный сон. )
0
IIIEII #
Не вытерпел до вечера, исправление оказалось довольно простым. К тому же выкинул одну повторяющуюся каждую секунду функцию, чем разгрузил ресурсы.
Итак, встречаем! Любой способ перемещения по папкам (даже те, о которых я не знаю) :)

      // Все написанное далее является шаманством и не претендует на здравый смысл
      // Функция для прекращения обновления фильтра, если на него наведен курсор (ручное изменение)
      var ext_stop_troll = function() {
        try {
          window.ext_cur_folder = document.getElementsByClassName('tree-link-selected')[0].innerHTML.match(/title="([^"]*[^\s"])\s*\([\d\+]*\)"/)[1];
        } catch (e) {
          window.ext_cur_folder = document.getElementsByClassName('tree-link-selected')[0].innerHTML.match(/title="([^"]*)"/)[1];
        };
      };
      document.getElementById("search-restrict-button").addEventListener('mouseover', ext_stop_troll, false);
      
      window.ext_cur_folder = "fake";
      // Функция проверяет текущий элемент дерева и устанавливает фильтр
      window.ext_get_folder = function() {
        var cur_folder = "";
        try {
          cur_folder = document.getElementsByClassName('tree-link-selected')[0].innerHTML.match(/title="([^"]*[^\s"])\s*\([\d\+]*\)"/)[1];
        } catch (e) {
          try {
            cur_folder = document.getElementsByClassName('tree-link-selected')[0].innerHTML.match(/title="([^"]*)"/)[1];
          } catch(e) {
            cur_folder = "fake";
          };
        };
        if (window.ext_cur_folder != cur_folder) {
          var mns = document.getElementsByClassName('goog-menuitem');
          for (var i = 0; i < mns.length; i++)
            try {
              var str = mns[i].innerHTML + "<";
              if (str.indexOf('>' + cur_folder + '<') >= 0) {
                var evt = document.createEvent('MouseEvents');
                evt.initEvent("mousedown", true, true);
                document.getElementById(mns[i].id).dispatchEvent(evt);
                evt = document.createEvent('MouseEvents');
                evt.initEvent("mouseup", true, true);
                document.getElementById(mns[i].id).dispatchEvent(evt);
                evt = null;
              };
            } catch(e) { };
        }
        // Раз в секунду
        setTimeout(ext_get_folder, 1000);
      };
      ext_get_folder();


* This source code was highlighted with Source Code Highlighter.
0
ivanopulos #
А какой у вас шрифт используется в FireFox?
0
dfayruzov #
0
ivanopulos #
Мне кажется он мелковат слегка для текста в браузере. Я использую Lucida Grande.
0
alexeyenko #
Идеально для пользователей нетбуков. Спасибо!

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