95 lines
4.3 KiB
Text
95 lines
4.3 KiB
Text
|
I've been looking for the "perfect" RSS reading solution for a while
|
||
|
and I just got this idea for a setup that has to be about 98% of all
|
||
|
I'm looking for.
|
||
|
|
||
|
The things I'm looking for are:
|
||
|
|
||
|
* Emacs interface. This isn't that big a problem since anything with
|
||
|
an API can be made to have such an interface, and I feel comfortable
|
||
|
enough with Emacs Lisp to write it myself if I have to, like I was
|
||
|
doing with
|
||
|
[avandu](http://code.ryuslash.org/cgit.cgi/emacs/avandu/), but then
|
||
|
it *does* need a(n/ good) API.
|
||
|
* Unbound to a single computer. It's a hassle to have to remember
|
||
|
what you have and haven't read. If it was easy your RSS reader
|
||
|
wouldn't care about (un)read items, everything would just be
|
||
|
"items". So sharing that state between computers is pretty
|
||
|
important.
|
||
|
* A server. Something that keeps running 24/7. Or at least the
|
||
|
closest possible approximation of that. It's no good to miss
|
||
|
everything that happens between 11pm and 9am just because you don't
|
||
|
have your feed reader running. Of course this is only a problem if
|
||
|
you're following some high-traffic feeds, but they exist too.
|
||
|
* Runs locally. The nice thing about having shell access to a server
|
||
|
somewhere that someone else keeps online for you is the possibility
|
||
|
to run something like [newsbeuter](http://newsbeuter.org/) and just
|
||
|
(de/reat)tach from whichever computer you're working on. The
|
||
|
downside is, though, that this breaks pretty much all integration
|
||
|
with your desktop. Opening URLs becomes a reliance on your terminal
|
||
|
emulator's ability to parse and open them. Viewing media such as
|
||
|
images, or audio files from a podcast, turns into `Save, Transfer,
|
||
|
Open` instead of just the `Open`.
|
||
|
* Handles big feed lists. Even if you only read five feeds, the day
|
||
|
may come you'll be reading fifty, or even much more. A piece of
|
||
|
software that handles this well is a must. This is the problem I
|
||
|
had with [canto](http://codezen.org/canto/) and Emacs'
|
||
|
[newsticker](http://www.emacswiki.org/emacs/NewsTicker). *canto*
|
||
|
looked awesome, the most interesting interface to RSS feeds I have
|
||
|
come across so far, but back when I tried it trying to read my
|
||
|
collection of feeds would lock-up my computer. *newsticker* would
|
||
|
lock-up my emacs session for 10-20 minutes.
|
||
|
|
||
|
Now though I have found something that does it all. It is actually a
|
||
|
twist on something I used some time ago.
|
||
|
|
||
|
*Emacs* + [Gnus](http://gnus.org/) + [Gwene](http://gwene.org/) +
|
||
|
[unison](http://www.cis.upenn.edu/~bcpierce/unison/). Not the easiest
|
||
|
thing to set-up perhaps, but once *Emacs*
|
||
|
+ *Gnus* is in place the rest is a piece of cake.
|
||
|
|
||
|
*Gwene* is an awesome service that turns RSS feeds into newsgroups.
|
||
|
*unison* is an awesome piece of software for synchronising files
|
||
|
between different computers. *Gnus* is a real newsreader. *Emacs* is
|
||
|
what *Gnus* runs on.
|
||
|
|
||
|
So it's kind-of like cheating. *Gnus* is not unbound to a single
|
||
|
computer and *Gwene* doesn't offer server-side state tracking either.
|
||
|
But because *Gnus* uses a single file to store state about all of its
|
||
|
subscribed groups, this makes it a good candidate for sharing that one
|
||
|
file. This is not something unique to *Gnus*, at least
|
||
|
[slrn](http://www.slrn.org/) uses the same kind of file, the `.newsrc`
|
||
|
file (or in *Gnus*' case `.newsrc.eld`).
|
||
|
|
||
|
So I register the feeds I want to follow with *Gwene*, if they aren't
|
||
|
already registered. I subscribe to the resulting newsgroups on
|
||
|
`news.gwene.org` with *Gnus* and when I switch over to another
|
||
|
computer I use *unison* to synchronise the `.newsrc.eld` file.
|
||
|
|
||
|
An example configuration of *Gnus* could just be as simple as:
|
||
|
|
||
|
[[!format el """
|
||
|
(setq gnus-select-method '(nntp "news.gwene.org"))
|
||
|
"""]]
|
||
|
|
||
|
*unison* just needs:
|
||
|
|
||
|
root=/your/home/dir/
|
||
|
root=/your/server/root/
|
||
|
path=.newsrc.eld
|
||
|
|
||
|
And that's about it.
|
||
|
|
||
|
Now it's still not 100% perfect. I've seen that *Gwene* can't handle
|
||
|
100% of the feeds I throw at it, but these can be fixed either by
|
||
|
contacting the people publishing them or by improving *Gwene*'s
|
||
|
parser. It also doesn't automatically check periodicaly, though I
|
||
|
think *Gnus* can be set-up to do that, but since I also use it to read
|
||
|
my mail (again) that's not really an issue. It also isn't accessible
|
||
|
without *Emacs*, *Gnus* and *Unison*, but I hate web-interfaces
|
||
|
anyway.
|
||
|
|
||
|
So that's it. My 98% perfect RSS reading solution.
|
||
|
|
||
|
[[!meta title="The 98% perfect RSS solution"]]
|
||
|
[[!tag rss emacs gnus gwene tt-rss avandu]]
|