White smoke was seen rising from my browser today; Google announced the sunset of Google Reader. The official Google Reader blog says it’s retiring Reader due to declining use, but I’m not sure we can rule out Papal involvement…
I’ve been using Reader for a while now and I have over forty subscriptions. That may sound like a lot, but it’s very easy to navigate the categories and quickly scan the feeds. Also, Reader support Gmail-like shortcuts, which make it even easier.
I don’t want email based subscriptions filling up my inbox, so a cloud based alternative would be ideal. IMHO, they are better than desktop based clients since if I read a feed on my phone, or on another browser, that status is synced across all devices. This feature alone made me switch off of client based RSS readers.
What’s everybody favorite RSS reader, or if you don’t use one, what do you do instead?
In these last few weeks, I’ve been working in a slew of programming languages. My OS course involves hacking around in the Linux kernel, so that’s in C. The projects in my AI course have been in Lisp, Java and the next one is in Prolog. At work, I mainly dabble in C++, but I’ve been helping with some continuous integration scripts in Perl and Python.
Out of all these languages, I think Lisp has permanently changed the way I think about programming. Unfortunately, it didn’t really click until after I submitted my project… After working a bit in Lisp and then going back to other imperative languages I found myself thinking of a Lisp-like solution and then realizing, “oh, this is was a lot easier in Lisp!” For example, trying to pass functions as parameters is very easy in Lisp since functions are first-class objects, but to do this in C one has defined a function pointer, which has very specific type definitions and some messy syntax, etc…
So, that led me to find this Google Tech Talk by Peter Seibel on “Practical Common Lisp.” This lecture further cleared up some of the concepts about Lisp (again, after I submitted my project, which I’m still waiting for the grade…) and that lead me to buy Peter’s book: Coders at Work, which is an amazing collection of interviews from great programmers. Anybody who is interested in
programming would find this book intriguing. After I finish it, I’ll put up a post specifically on that book.
Then I set out to make a small project in Lisp and ended up using Python 🙂 I wanted to integrate my Google Reader feeds with Emacs gnus and I found libgreader which pretty much handled all of the details with the still-unofficial Google Reader API. Inspired by reader2maildir, which does the same thing in Ruby, I set out to essentially port this to Python.
And I was able to download my feeds and read them in gnus, but since a lot of the feeds using embedded HTML or simply links to the main article (i.e. they don’t contain a summary) and would require me opening a web browser anyway, I figured the gnus approach wasn’t the best, for me.
But I learned a few things about programming in Python along the way. First of all, one has to be a little more specific while searching Google. Working with RSS Feeds, I realized it’s not adequate to search “python feed” due to the homograph “python.” Unappetizing images aside, I really like the interactive python interpreter. I didn’t really understand the point of using the interpreter directly and I thought it was useful only for toy programs, but it really helps in prototyping. Like Lisp’s REPL (read-veal-print-loop), interactive programming feels like precognitive debugging; it allows one to step through a debugger while the program is being written.
And while Python is not Lisp, it does have some functional style artifacts (much to the chagrin of its designer from what I understand). Python has a filter(function, sequence) function that:
returns a sequence consisting of those items from the sequence for which function(item) is true.
Combine this with a lambda expression, and I was able to write something like this:
In this example, this line returns a list of feeds from Google Reader that contain unread items. So, I thought that was pretty cool 🙂 So while I would like to do some more stuff in Lisp, I was impressed on just how easy it was to get python running. That and with some Emacs-python integration, the development environment was very nice to work in.
Say Everything is Scott Rosenberg‘s latest book (author of Dreaming in Code). It’s a thorough history of blogging from the time before it was webblogging to 2010. For those that remember some early blogging history like Blogger before it was owned by Google, or the creation of Boing Boing, I think you find the book interesting.
Scott also recounts the history of the first blogger to lose her job because of blogging, the switch from blogging for fun to blogging for profit, and how blogging cause elected officials to be removed from office. Like he does in Dreaming in Code, Scott also gives a very personal look into the people behind the blogging. It’s very well written, fun and informative.
The book serves as a good source of inspiration for continuing with this blog. I started this because I found myself TV and Xbox-less (red-rings-of-death) and thus, had some extra time on my hands between grad school and work. When I was overseas, I enjoyed writing updates to friends and family, so this seemed like a logical next step. I’ve always read a lot online, heavily relying on Google Reader to stay up to date with blogs. I’m subscribed to about 80 blogs… Yikes, I never counted. With Reader (which uses RSS and other syndication), I think of it more like Dave Winer: it’s a river of news, into which I occasionally step. I also frequently purge all unread posts when I fall behind.
I’ve found blogging to be very self-revealing as well. It’s apparent that I tend to be very depth-first-search like in my topics; completely exhausting one topic before moving on to the next. I’m finishing a course in Game AI, hence all the AI posts (don’t worry, there is only 2 weeks left of that course…) and I tend to do the same with my reading. Speaking of, I need to re-evaluate my queue.