November 1, 2011

RSS Syncing and my attempt at a solution.

Some time ago, I read this article by Brent Simmons about an alternative to the Google Reader syncing system pretty much everybody uses to sync RSS Readers together across your laptops, desktops, iPhones, iPads, whatever. Google Reader is nifty and all, but the problems Brent outlines are actually pretty annoying. I read a bunch of fairly-rare feeds that not many follow ( you probably haven’t heard of them ). These feeds don’t get updated very often by Google’s system and I sometimes end up missing updates by days or even a week. This is lame. A single point of failure for all of your feeds is pretty lame too.

I attempted a solution a little while ago, but sort of gave up for various reasons. Recently I had some ideas about how to make this attempt nicer and possibly something developers would maybe do something other than laugh at me for. So, without further adeiu, I give you RssSyncer!

RSSSyncer was built with Sinatra and Redis (could be a redis cluster even). The goal is to allow for a simple system to setup syncing the read/unread/whateverstatus of news items in a timeline. The same system would work for things like Instagram and twitter as well as RSS. These are similar technologies to what Manton Reece is using for his service, Tweetmarker. While this isn’t quite as simple as putting some php onto your existing web-server, services like heroku (which host my version you can play with here: http://rsssyncer.heroku.com make running simple ruby apps crazy simple. The setup process for hosting it yourself is fairly simple too, since this is just a Sinatra app with very few dependencies.

RSSSyncer is my interpretation of what Brent called for in his article that inspired my efforts. The code itself is pretty simple, all of the request logic is one file, model manipulations happen in items.rb and subscription.rb with a few modules I created for the functionality the two models share. It saves only item status, not item content. It does not check your feeds for you, it leaves that to your actual feed-reading app. It stores item status in an 8-bit field so that the first bit can indicate read/unread status while the other bits can be used to indicate
starred/not-starred status and still have bits for other things.

To test features, I am also developing the world’s simplest RSS reader which is basically just a ruby script from the command line.
RSS-Repl just gives me a way to test this out until one of my favorite developers decide to implement syncing with RSSSyncer into their existing apps.

The only feature I haven’t figured out is how to handle user authentication. I figure I -could work out something like Salvatore Sanfilippo used to authenticate users for http://lamernews.com. If anyone has a better/more-desired authentication scheme, I’m all ears! Feel free to email me, harass me on twitter, file issues on the github project page, whatever is convenient.

Thanks for your time.