A wiki is a communities voice, a blog is a persons voice. They are usually focused on a single topic.
What's an aggregator? A tool that gather RSS ceontent for viewing. Some are client based, some are web based and some are both. The idea is to trawl through a set of "feeds" and gather content.
"TiVo for the internet"
When you subscribe to a feed that just means "get the aggregator to go and download it regularly". This means you don't need to go to each site and check for new articles manually.
A screenshot of bottom feeder. Three areas - a list of feeds categories. Top right is a list of items to read and the bottom right is the content of an item, sort of like an email client.
How did Jim get in to this? He began a web log. He read a few blogs and thought "How hard can it be to make one of these things?". The first idea of his blog was open for anyone to post in the Cincom community - he was the only one posting and so it evolved in to a single user thing. Now several users in the community have their own personal blog, such as Alan Knight, Vassili Bykov, etc.
When he began he only got a handful of readers a day. He was writing lots of content but only one or two people were reading it. One day he got an email saying "Why don't you have an RSS feed?" His reply: "I'd love to have one if you tell me what it is."
RSS stands for "Rich Site Summary", "Rich Syndication Site", etc.. several definitions.
Many people don't read a blog through the web browser but through an aggregator instead. To make sure his shiny new RSS was right, he needed a basic reader to see if it was right. Thus began the aggregator and reader.
A feed is the thing that has the item of interests. The items are news stories. The story is broken in to a title, a link and some descriptive test.
There is a competing standard called Atom which is very similar but with different tags.
When he had RSS his traffic increased significantly and he was happy.
His viewer pulled down the RSS and broke it up in to some domain objects. Since he can parse it he figured it must be good content. Dave Murphy added a user interface on to of these domain models. BottomFeeder was born.
Dave put it on Freshmeat and suddenly people were using it.
What's it good for? Favorites on steroids. Jim follows 254 blogs and news feeds on a daily basis. Some people read many, many more. There's simply no way that I could do this with a browser.
Apparently Scoble reads 1400 of these a day!
There are tons of Aggregator, written in all manner of language. http://www.hebig.org/blogs/archives/main/000877.php
BottomFeeder is one of the most cross platform aggregators because it is written in VisualWorks. The development team: Jim, Dave and Rich Demers does the documentation.
Contributions have come from Holger twoflower for Twoflower. I provide TypeLess and Blog Tools. Anythony added Pongo. Troy, Bob, Vassili, Martin, many more finding various bugs.
It started simple: Two domain objects. RSSFeed, RSSItem. More or less, the basics of RSS 0.92
Then it got more complex. RSS 0.90 - 2.0 plus modules. Atom - RSS only more so. XML parsing errors. HTTP get errors. Transient network errors. Persistence of feed data. Persistence of which items were read/unread. And a lot more.
Modules such as "How to add a comment", "The author", "Where this blog resides in the world", etc. Atom was invented because people don't like Dave Winer. There are two versions of Atom now as well.
Originally, one package, 4 classes in September 2002. Now 18 packages, 150 classes, numerous extensions, a few overrides, integration with a few other projects, many other ancillary packages - other contributors.
The main UI was straightforward. The HTML view? Twoflower to the rescue. A VW (simple) browser.
The basics: HTTP - grab the content from the site. XML Parsing - parse the content into a doc object. Doc to object - figure out what we have. Enable various display modes and interactions. Saving state, online updating, overcoming limitations, plugin support, deployment.
VW has a HTTP client library: Does not handle mod-gzip, does not handle cookies, does not seemlessly deal with Http-Auth, does not do 'smart' handling of 301, 302, does not do conditional-get. So, wrote a wrapper library.
"RFC's are not written in any identifiable language" -- Jim Robertson.
The next problem was XML. The VW parser is strict. BottomFeeder is a /client/ tool. Had to ease the strictness and allow many errors to go by. Subclasses the parser and flagged errors instead of halting. Then there's the problem of encoding..
Encoding is a huge headache. HTTP is ISO-8859. XML (file) is UTF-8. XML over the wire - defaults to the transport. Encoding can be specified in: The HTTP header, the Meta-equiv tag, in the XML root tag.. or go to the defaults. This makes for a lot of fun.
Started this project in VisualWorks v7. The WebServices XML - object stuff was more attuned to SOAP. Wasn't done, so Dave made a constructor library.
The constructor looks at the version tag, the namespaces, the tag presence, or defaulting.
How do we know if we've already read some of the new content? Compare what you've got to what came in. This got messy because GUID is not in all feeds, text is not always the same,.. other criteria.
Different views in BottomFeeder: Tree View (All, All New). 2 pane mode (searches, all new, all flagged). Allows the user to decide.
Then saving the informkation. Started with XML - too slow and large. Moved to BOSS - fast, but can be dicey. Shapes changes, went to adding info via dictionary to remove that issue.
Lots of evolution in online updating: Started with a monolithic image, moved to an image and loading parcels. Now have an image with parcels pre-loaded, updates loaded at start. Updates can be downloaded, updates can be loaded on the fly.
Online updating actual example: Speaking with BottomFeeder user on the Smalltalk IRC channel (using TypeLess). He asked about an enhancement. Wrote the code, published it, end user downloaded and installed it, w/o restarting BottomFeeder.
How do we know what we have available? Xml configuration file on server. On client, download, validate, then reload the parcel. Had to add exception handling to overcome the dialog issues. In the development environment there is a dialog box - but in the runtime an exception silently returns false and nothing happens - nothing loads.
Next was uniform text sizes and fonts. Not all widgets respect the change, menus are in their own universe, twoflower - help from Holger. Lots of other litlte nits for the tree view and dataset mostly in keyboard handling.
BottomFeeder has a plugin system: IRC Client, Blog Posting Tool, MSN IM Client, Internal Cincom plugins for the Cincom bug database and for feed scraping and a Minesweeper plugin.
Installing: Wanted to use the VW installer - but it was a bit too much work. Windows Installer? Used NullSoft installer. OS/X - use the .app directory structure. Unix/Linux - zip files. Creating a base image: Making it updatable, using RTP (character building experience), making "native" windows and os/x apps.
In Summary. What's it good for? Keep up with: News, Hobby information of interest, professional information of interest, automated searches. Publicity: free, open source, example of smalltalk at work. Internal uses: Better communications for bug systems and store databases.
Demonstration of automated searches: He has a search looking for his own name to see what bad things people are saying about him, one for BottomFeeder too and one for alternate history and one for Smalltalk too.
James also shows the Dilbert feed for yesterdays comic.
Question: How do you read something like comp.lang.smalltalk
This is not usenet, so no it can't do that.
Question: Any intent to hook it in to go across that boundary.
The thought has crossed my mind.. volunteers are welcome.
Question: Are there any comparison of Aggregators?
Go to that site mentioned earlier on. They do comparisons. You can also find them in searches. Jim gets both positive and negative comments.
Question: Is there a tutorial on all this?
It turns out that Rich's documentation comes with a tutorial for BottomFeeder for RSS and feeds in general.
Question: What's the URL?
http://www.cincomsmalltalk.com/BottomFeeder/
Question: Is that fish a Pollock?
I think that's supposed to be a catfish.
Question: (Heeg) can I have BottomFeeder on my telephone?
You can, but the UI won't fit. If someone wants to give me a portable like that..
Comment: German translation - knock yourself out
Actually, there is a german translated version coming.
Oops, over time.