Lifestream v0.1

January 12th, 2008

When I started designing this website, I had the idea to make a combined feed of all my online activities for the homepage – kind of like a Facebook-style newsfeed covering the whole internet rather than just one site. When I started looking into this, I discovered that my brilliant idea was not quite as original as I had originally thought. These master feeds are commonly known as “lifestreams”, I discovered, and can be implemented in a number of different ways. I first thought about using Yahoo! Pipes to merge the RSS feeds into one master feed, and I also considered using one of the several pre-made solutions out there such as FriendFeed. In the end, I decided to make develop my own custom lifestream so that I could have complete control over the content and display of the data.

I’ve just released the alpha version of my lifestream, which can be seen in action on my homepage.. This is the first of many web development projects. For this initial version of my custom lifestream, I’ve implemented the following features:

Archives all rss feeds locally for performance and longevity

One of the problems with a solution like using Yahoo! Pipes to merge your RSS feeds is that you have no control over how many items are in each feed. You are stuck with the default settings from each site’s feed, which are not necessarily the same. By default, most RSS feeds only include the most recent 15-20 items because that is the way that RSS was originally intended to be used. However, I want to be able to use my lifestream as personal archive for all of my online activity over time. The solution for this is to store the feeds locally and merge the new items into the local copy of the feed whenever the original feed is updated. Feed readers such as Google Reader use a similar approach so that they can both keep the history of each feed and keep track of additional data such as if/when you read a particular item in the feed.

In this alpha version, I am storing the local version of the feeds as xml files. However, parsing these files with SimplePie seems a bit slow and will only get worse as the size of these files increases over time. Therefore, I plan to switch from XML to a MySQL database to store the feeds for the next release. This approach will give additional benefits as well, such as easier pagination.

Aggregates certain feeds by date

For aesthetics and readability, I prefer to aggregate certain types of feeds, such as bookmarks and photos, by date. I think this helps to keep the lifestream manageable, and prevents any one or two feeds from completely dominating the lifestream.

Manipulates feed item titles

The title to every item in the feed is updated into a uniform format that describes the action performed and links back to the source feed.

Customizes feed item content and display

For most items, only the title is shown in the lifestream, but certain items, such as the aggregated bookmarks and photos, also display the content. This content is customized into a standard format for display purposes.

Future updates:

  • Improved performance/load time(via a major change in the way feeds are archived locally)
  • Load lifestream through AJAX call to improve page responsiveness
  • Automated process to keep feeds up to date
  • RSS feed of lifestream
  • Allow user to choose which feeds to view
  • Backload archive with older data
  • Endless Scrolling

Category: Web Development

Comments

  1. I’ve been working on something very similar to this myself for about a month (mainly visual design in my head). I thought it would be a fun little project that would let me work on a lot of different web development skills. Now, I stumble across your implementation and I’m eager to discuss it when I get a little further into the project. It’s funny, I went through the exact same thought process about the feed aggregation process. I’ve used Pipes before and I also set up a universal feed over at Feed Digest, but in the end, I think I’ll probably go the customized route for maximum flexibility and for archival purposes. I like your implementation a lot, good work.