So I've been messing around with a little side project for about three weeks now and I figured I'd actually write about it instead of just mentioning it on Twitter and forgetting.
Short version: I got sick of my RSS reader and built myself a dumb little script that emails me a digest every morning instead. Longer version below, because apparently I have opinions about this now.
why I even bothered
I've used Google Reader for years, and I still use it, but ever since they folded the sharing stuff into Google+ last fall it's felt like using someone else's living room. It works fine. It's just not mine, if that makes sense. And with everything going on with SOPA and Megaupload getting yanked offline this month, I got a little paranoid about how much of my daily reading habit lives inside services I don't control. Probably overreacting. I do that.
So over New Year's I sat down with a pot of coffee and wrote a Python script using feedparser and the requests library to pull about forty feeds I actually care about, filter out anything I've already seen (just a SQLite table with hashed URLs, nothing fancy), and mail me the top stuff as one plain-text email. It runs off a cron job on an old Dell box I've had sitting under my desk since 2009, set to fire at 6:45 every morning, which is right around when my alarm goes off anyway.
how it's actually going
Better than I expected, honestly, but with some annoying rough edges.
The good: I genuinely read more now. Getting one email with maybe fifteen items instead of an unread count creeping toward 400 in Reader has done wonders for not feeling behind on everything. There's something calming about a number that resets to zero every day instead of a debt that keeps compounding.
The bad: cron and time zones are a nightmare and I will die mad about it. I lost about two hours on day four because the box was set to UTC and I couldn't figure out why my "morning" email kept showing up at 1:45 AM. Also feedparser chokes on maybe one out of every twenty feeds for reasons I still don't fully understand, some encoding thing, and I've just been quietly dropping the ones that break instead of debugging them properly, which I know is lazy but I don't care enough to fix it right now.
The other annoying thing is deciding what counts as "already read." Right now if I open the email on my phone at 7 AM standing in the kitchen and don't get to it, it's just gone, no persistence, no re-showing it tomorrow. A couple of times I've actually wanted to go back and find something from Tuesday and it's just not there anymore. I built myself a smaller, dumber Instapaper problem, basically. I know.
what's next, maybe
I keep going back and forth on whether to build a tiny web page for it so I can browse past digests, or just leave it as email because email is the one format that shows up everywhere without me having to think about it. Part of me wants to slap together something in Flask this weekend, but then I remember I have an actual job and this is not it.
One thing I noticed poking around trying to fix the feedparser encoding issue: half the "solutions" I found on forums were from like 2008 and just don't apply anymore, which is a good reminder that a lot of programming advice online has a shelf life nobody labels. Anyway.
I also caught myself, around day ten, checking my phone for the digest email before I'd even gotten out of bed, which is a little bit funny given the entire point of this was supposedly to read less compulsively and more intentionally. Old habits, new wrapper.
If anyone wants the script I'm happy to clean it up and stick it on a gist, it's about 120 lines, nothing impressive, mostly held together with try/except blocks around the feedparser calls because I got tired of the cron job silently dying at 2 AM and me not finding out until there was no email waiting for me. Not exactly elegant engineering. Works though, mostly, which at 6:45 in the morning is really all I'm asking of it.