Thursday, June 27, 2013

...Hello Tiny Tiny RSS

So, I decided to use Tiny Tiny RSS as my Google Reader replacement (if this confuses you, go read that link for the background). Problem is, you need a web server to run it, and I didn't have one. There's a couple of ways to solve that. One is to get a hosted server account. Fairly inexpensive, but you don't have a say on what OS is installed or what software is available. tt-rss is also not really meant to run that way, even though it's possible to do so.

Another option is to get a server for yourself at home. You have complete control of course, but also full responsibility. You need a physical machine; get yourself a fixed IP address or use dynamic DNS; set up all software; arrange backups and maintenance; perhaps get a domain name and keep everything up and running. Lots of work, but also a real learning experience.

A third, solution is to rent a virtual server from Amazon or some other cloud provider. You get some space in their data center that looks and acts as a separate machine. You still need to install and maintain software on it, but the "machine" and the network connection is a lot more reliable, backups are taken care of and you don't need to mess too much with networking. It is a bit more expensive than running things yourself; though not that much more, once you factor in the cost of hardware and electricity.

In the end I opted for a machine of my own. I'm trying to learn about all this as much as anything else, and I like the control that I get with having the machine right at home. If I want to hook up a web camera or thermometer to it, for example, I can easily do that. Not that easy with a virtual server running in some other country.

Last month I set up a virtual server on my aging desktop at home. I installed VirtualBox 1, then installed the newest Ubuntu server image on it in turn. With a virtual server I can use my desktop as usual without disturbing the server; and I can easily move the server to a different machine if I need to. I'll probably get a separate low-power machine for it eventually.

After a few false starts (tried to use the nginx web server but failed) I got Apache, mysql, php and Tiny Tiny RSS installed on it, and tested it at home. I used it alongside Reader for a week or so, just to see that it did work as expected. And indeed it worked surprisingly well.

But my machine was not visible at all from the outside. Our net connection (Do Canvas, from NTT) comes with the building, and we don't even have our own router in the apartment, so even dynamic DNS is out of the question.

Fortunately, Canvas offers a fixed IP address for a monthly fee of 1000 yen (how fixed it actually is, I'm not yet sure). The online docs are intimidating; they warn that applying can take weeks, may require a visit from a technician, and might not be possible at all.

In reality it was very simple. I logged in to our customer account, selected the IP address service, entered my credit card details and pressed the "submit" button. Five seconds later a confirmation screen pops up with my username and password for the PPPoE service used to assign the address, and the fixed IP address itself.

I set up the virtual server to use the address I got, and bought the official Tiny Tiny RSS Android app (it's just a couple hundred yen, and a nice way to give the developer a bit of thanks). I tested my connection, and made sure that both my tt-rss web site and Android client worked and was usable for me.

The next morning I removed the Reader tab from Firefox and disabled NewsRob on my tablet, and completely switched over to Tiny Tiny RSS together with the companion TT-RSS Android app. And so far it's been a smooth experience.

The TT-RSS web application

The tt-rss web application is quite good out of the box. The visual design is not quite up to Reader of course — that's the difference between having a graphics design team on call or not. But functionally it doesn't lack anything for me. In some areas it actually improves on Reader, and I especially appreciate that it leaves me lots of room for the feed items I'm reading (Reader was quite wasteful of screen space).

You can have multiple users and you can reshare selected posts to a public RSS feed accessible to others. There's "labels" and "filters", potentially extremely useful for things like highlighting especially important posts — but they're completely undocumented, so I have yet to try using them for anything. The lack of documentation is a shortcoming of tt-rss and of small projects in general. Understandable but a bit unfortunate.

There's a number of plugins that can improve tt-rss even further. As a long time Google Reader user I especially appreciate the "Google Reader keys" plugin to give tt-rss the same keyboard shortcuts that I'm used to. There's a number of visual themes available, but the default theme in the latest version is tolerable enough that I haven't bothered changing it so far.

The display of feed items is less tolerant of errors than Reader was. A couple of feeds refuse to be loaded at all due to malformed input, and a few feeds display oddly. The Online Photographer posts, for instance, are shown without any paragraph breaks, giving me a long, solid block of text. I'm sure the rendering is correct and according to standards, but I wish it was a little more forgiving. "Be strict about outputs, forgiving about inputs" is a good principle, and I wish the tt-rss renderer was heeding that.

TT-RSS Android app
The Android app is not as good as my favourite app NewsRob. But it's not bad either, and bettering NewsRob would be a very high bar to clear.

It has the list-based kind of interface that I greatly prefer over magazine-style layouts, with the headline and a snippet of text for each post to give me an idea if I want to read it or not. The overall UI is quite clean, straightforward and easy on the eyes. It syncs directly with the tt-rss server so there's no waiting for updates; it's fast and responsive at all times. And it handles long lists of posts with no problem.

Offline reading is available, but rather problematic. The app is meant to have a constant connection to the server, which means the offline mechanism is a bit of an after-thought. You turn on offline mode, and it proceeds to download unread articles and images.

But when it says that you can go offline, it is really still busy downloading things in the background. And if you lose your connection partway through, or even try to do something else while it's downloading, it can forget all about being offline, and you'll lose access to the articles until you restart the client and synchronize with the server again.

If you turn on online mode again by mistake without having a working connection, it will forget everything you've done while offline, including what posts you've read or marked read, and what posts you've starred to read for later. And though it does download images, not all images are actually downloaded or displayed, so a lot of posts will be without illustrations while offline.

So the Android app is decent, but not great. I'll try out some of the other tt-rss reader apps in the Android app store eventually — it's open source, so several people have made improved versions. And I still hope that NewsRob will eventually support tt-rss as a back-end server.

Overall, though, tt-rss works very well for me. Not as good as Reader and NewsRob in a few cases; decidedly better in a few; but completely comparable for the most part.

The next steps have little to do with tt-rss itself, but is rather about setting up the server environment.

  • I use the IP address to access my server right now. It works fine of course, but it's much more practical to have an actual domain name. Suggestions for a .jp based domain name are welcome!

  • I've started making a web site for myself. I plan to have a landing page of sorts (a replacement to this outdated page); a storage area for papers and public research data; and a couple of blog posts that make sense as stand-alone texts. Might also want to set up a gallery as well at some point, as a complement to my Flickr account.
  • The server runs fine on my old desktop, but it's not really meant for that sort of thing. I'll want to get a dedicated machine of some kind for it eventually; something quiet and low-power, perhaps ARM based. I'll probably get a router as well at that time, so I can have an internal network and do things such as sharing my desktop.

And hopefully more to come as well. So far this has been a fun experiment. And with the exception of the news reader itself it's all non-essential, low-pressure hobby stuff, so I can relax and play with this when time permits and inspiration strikes.

#1 A warning regarding VirtualBox: You have something called "snapshots" that lets you save the current state of the virtual machine. The idea is you take a snapshot, and if something happens you can always restore the state from that snapshot.

But in practice, the snapshot functionality is very brittle, and I've had far more problems with that than with running the actual server. If you forget to pause the process before taking a snapshot, for instance, VirtualBox will silently save a corrupted snapshot. And as snapshots depend on each other (they just save the difference from the previous one), you may find out you don't have a valid backup snapshot days or weeks later. Some truly lousy interface design there.

No comments: