суббота, 1 мая 2010 г.

Просмотр новостей из Google Reader без доступа в Интернет

Я тут недавно поменял работу, и если раньше она была в 15 минутах ходьбы от дома, то теперь придется каждый день ездить в Москву. Соответственно, встал резонный вопрос, как потратить проведенное в электричке время с пользой (а времени на дорогу туда-обратно уйдет немало). Обычно такое время я заполняю подкастами и чтением Google Reader'а и бумажных книг. С подкастами и книгами никаких проблем нет, но вот с Google Reader все очень грустно - мало того, что 3G в Подмосковье пока что не особо собирается, так еще и при движении электрички ужасно медленное EDGE-соединение рвется чуть ли не каждую минуту, что делает чтение даже мобильной версии Google Reader настоящей пыткой.

Меня, естественно, такая ситуация не устраивала, и я начал искать программу, которая позволяла бы просматривать новости из Google Reader будучи offline. Подобные программы есть, но обладают огромным недостатком - они скачивают для офлайнового просмотра только описание новости из RSS и больше ничего. Все самое интересное (полный текст новости, изображения и сама страница с комментариями, на которую ссылается эта новость) остается в онлайне. Мне же хотелось, чтобы работа с такой программой в офлайне имела минимум отличий от работы с Google Reader в онлайне: чтобы я мог видеть описание новости, все изображения, присутствующие в нем, мог просматривать страницу, на которую ссылается новость (также со всеми изображениями, стилями и т. п.), ну и, конечно, чтобы была возможность помечать новости как прочитанные, star'ить, расшаривать и впоследствии синхронизировать с Google Reader.

Программы с такими возможностями мне найти не удалось - ну так не беда, напишем сами, ибо уже не впервой. :) А если учесть, что я в то время как раз изучал Qt и думал, что бы такое написать, чтобы попробовать ее в деле, то это был просто подарок судьбы. :)

Сказано - сделано. Точнее не так... Почти сделано. :) Разрабатывать я свою читалку начал где-то месяц назад и очень хотел успеть реализовать хотя бы базовый функционал до выхода на работу, т. к. по крайней мере в первые месяцы работы на новом месте мне, боюсь даже в выходные, будет не до нее, а пользоваться хочется - собственно для этого и писал.

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

В принципе, я всегда придерживаюсь правила "половину работы не показывают", но тут решил сделать исключение. С одной стороны, я понятия не имею, как у меня будет со временем в ближайшие несколько месяцев, но с другой стороны программа работает и, если вы такой-же активный пользователь Google Reader'а, как и я, может приносить огромную пользу. Поэтому я решил все-таки выложить ее сейчас, раньше времени, но со следующими оговорками:
  • Программа практически не тестировалась, так что имеет полное право работать нестабильно, а у кого-нибудь, может быть, даже и не соберется (с CMake я, так же как и с Qt, познакомился совсем недавно). Багрепорты я конечно приму, но скорость исправления не гарантирую.
  • О юзабилити пока что не особо беспокоился - дерево подписок выводится в таком виде, в котором мне его выдает Google Reader, а не в таком, как их организовал пользователь; если вы прочитали новость, то сделать ее непрочитанной пока что нельзя и т. п.
  • Пока на SourceForge.net на ней висит флаг Alpha-версии, я оставляю за собой право менять формат хранения данных в БД без обеспечения обратной совместимости (т. е. при использовании новой версии в случае таких изменений нужно будет удалить директорию ~/.grov).
  • Фичреквесты пока не принимаю и пока что не даю гарантий на то, когда стану принимать.
  • Все конфигурационные параметры (таймаут на скачивание страницы, количество потоков для скачивания и т. п.) пока что жестко зашиты в код. Графического окна настройки в ближайшее время не обещаю - на данный момент банально жалко тратить на него время. Поэтому пока что, если возникнет такая необходимость, придется править вручную файл grov/config.hpp.in.

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


Grov - Offline-просмотрщик подписок Google Reader

Grov предоставляет возможность читать, отмечать и расшаривать ваши записи из Google Reader, когда вы находитесь в офлайне или имеете доступ только к очень медленному и непостоянному соединению (транспорт и т. п.).

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

Скриншоты:
Просмотр краткого описания новости


Просмотр страницы, на которую ведет новость


Исходные тексты можно скачать здесь, а подписаться на deb-пакеты для Ubuntu тут.

Требования: boost >= 1.34, Qt >= 4.5.

19 комментариев:

Pavel Drobushevich комментирует...

Очень интересная статья, спасибо.
Но всё таки немного не понял, почему не использовать стандартный механизм Google Reader, который базируется на Google Gears, если браузер поддерживает это, например хром по умолчанию, для некоторых остальных нужен плагин. В таком случае появляется кнопочка вверху:
Скриншотик
Нажимаем и всё сохраняется в локальное хранилище герсов. То же работает для других сервисов, как gmail и docs. Правда тут есть одна загвоздка, gears перекрывается, так как такая функциональность присутствует в спецификации html5. Но ещё поддерживается, и думаю будет поддерживаться, пока эту фишку на html5 не перепишут.

illuthion комментирует...

Спасибо! Давно искал десктопный клиент для GReader. Соберу, потестиру.

Murz комментирует...

Идея супер! Тоже давно искал что-то подобное, но не нашёл, восновном все только текст самой rss скачивали, а там в ней обычно только анонс, а весь текст - по ссылке "подробнее", т.е. надо качать с инета.
Только вот езжу я обычно не с ноутбуком, а с мобилой (Windows Mobile, Android), поэтому не всегда эта программа меня будет спасать ;(
Но для поездок в деревню с ноутом, где инет через жопорез - самое то!

Murz комментирует...

С нетерпением жду пакетов в PPA под Kubuntu Lucid, т.к. с компиляцией самому у меня что-то не всегда всё ровно проходит ;(

Past комментирует...

Полезная штука, надо попытаться ее для Maemo скомпилять

Конищев Дмитрий комментирует...

Pavel Drobushevich, Google Gears скачивает в локальное хранилище только описания новостей и больше ничего. Моя же программа скачивает также все изображения из новости и всю страницу, на которую ссылается новость. Да и работает Google Gears очень нестабильно, по крайней мере тогда, когда я его пытался использовать.

Конищев Дмитрий комментирует...

> С нетерпением жду пакетов в PPA под Kubuntu Lucid, т.к. с компиляцией самому у меня что-то не всегда всё ровно проходит ;(
Вы не внимательно прочитали статью - там в конце написано, что пока я собрал пакеты вручную. Можете скачать пакет для Lucid здесь.

bosha комментирует...

А почему не использовать\допилить liferea? Я как раз об этом недавно писал. Работает с Google Reader вполне неплохо.

Анонимный комментирует...

А чем вас liferea не устроил? Он уже давно умеет...

Конищев Дмитрий комментирует...

> А чем вас liferea не устроил? Он уже давно умеет...
Изображения и страницы, на которые указывают новости? По-моему нет. Помню как-то пытался открыть с помощью него Google Reader - не дождался. :) По тому, как он дергал мой жесткий диск сразу видно, что автор не знает насколько транзакции в SQLite ускоряют большое количество операций вставки данных. :)

> А почему не использовать\допилить liferea? Я как раз об этом недавно писал. Работает с Google Reader вполне неплохо.
Во-первых, как я уже написал выше, мне хотелось написать что-нибудь на Qt, во-вторых написать то, что я написал, на Qt гораздо быстрее, чем дорабатывать Liferea, которая к тому же написана на C, в-третьих, Liferea - это широкопрофильный RSS-ридер, а мне нужно именно жестко-заточенный под Google Reader клиент, в-четвертых... ну вообщем вы поняли. =)

Конищев Дмитрий комментирует...

Теперь пакеты для Ubuntu доступны на Launchpad.

ip1024 комментирует...

$ grov
QSqlDatabase: QSQLITE driver not loaded
QSqlDatabase: available drivers: QMYSQL3 QMYSQL
W: Unable to start Grov. Unable to open database '/home/XXX/.grov/grov.db': driver not loaded.

Конищев Дмитрий комментирует...

У вас не установлен пакет, обеспечивающий работу Qt с SQLite. У меня в Ubuntu данный пакет называется libqt4-sql-sqlite. Поставьте - должно помочь.

ip1024 комментирует...

Спасибо, порядок. Может в собранном пакете есть смысл отразить эту зависимость?
Спасибо ещё раз!

Конищев Дмитрий комментирует...

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

Hertz комментирует...

Думаю хороший проект! Домой приеду скачаю, посмотрю. Вопрос собственно вот: на какой стадии проект? Идет разработка или приостановилось все?

Конищев Дмитрий комментирует...

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

Анонимный комментирует...

под Виндой без проблем помогает
handycashe + hcHistorian

Dmitry Konishchev комментирует...

HandyCache кэширует только то, что вы уже просмотрели, а не то что вы посмотрите в будущем. ;)