summaryrefslogtreecommitdiffstats
path: root/site/blog/98_perfect_rss_solution.org
blob: d9d58da8fdc13176873c6aa396b9a7ceb75972f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#+TITLE: The 98% perfect RSS solution
#+DATE: 2012-11-30 10:00
#+TAGS: rss emacs gnus gwene tt-rss avandu

* Test

  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 [[http://code.ryuslash.org/cgit.cgi/emacs/avandu/][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 [[http://newsbeuter.org/][newsbeuter]] 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 [[http://codezen.org/canto/][canto]] and Emacs' [[http://www.emacswiki.org/emacs/NewsTicker][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* + [[http://gnus.org/][Gnus]] + [[http://gwene.org/][Gwene]] + [[http://www.cis.upenn.edu/~bcpierce/unison/][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 [[http://www.slrn.org/][slrn]] 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:

  #+BEGIN_SRC emacs-lisp
    (setq gnus-select-method '(nntp "news.gwene.org"))
  #+END_SRC

  *unison* just needs:

  #+BEGIN_EXAMPLE
    root=/your/home/dir/
    root=/your/server/root/
    path=.newsrc.eld
  #+END_EXAMPLE

  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.