6

CodeChirp

alt text

About

CodeChirp is a twitter-like web-based question/answer/comment aggregator, that queries Stack Exchange sites, and shows the results as twitter-like posts. People can subscribe to users, tags, badges, and to other people's subscription lists.

The application was mainly created to make something for the API contest :), but it is also a showcase of S#aml Architecture - an ASP.NET MVC 2 based framework for mono.

It currently runs on mono 2.4.4+ and .NET 3.5 systems. Source code is available under the AGPLv3, and I also set up the application on my own development server (Ubuntu 10.04 LTS with mono 2.4.4 and mod_mono). Although it might be a full fledged working application later, I don't have the resources (time+money) to operate it. It might or might not be available during the API contest, at might run or might not run after that time. The code is available though so it could be hosted by someone else, who has the resources to do so (and because the site aggregates all available sites, after all Stack Exchange sites gets the API it might be useful to create forks that work only on a selected set of the available sites).

The application is in a very alpha stage, it's damn slow, and doesn't have all the promised features, but these might be solved until 1.0 of the API is available.

License

AGPLv3

Download

Platform

Tested to run under mono 2.4.4, 2.6.4 and .NET 3.5. Does not run on mono 2.6.3/win32. You will also need ruby 1.8.6+

Contact

The site was created by me. Homepage is here. Hosting is done by our small company.

Code

Frameworks used:

  • Salient.StackApps is used to access the SO API
  • S#aml Architecture is the main framework used to build the web application (it is based on S#arp Architecture which is based on ASP.NET MVC)
  • Uses a patched version of ASP.NET MVC 2
  • Uses the mono branch DNOA to do the OpenId authentication.
  • Uses NHaml 3 alpha as the view engine

Source code:

Some more info

Inner structure

In CodeChirp there are only Posts. Questions, answers and comments are all considered to be posts. The application harvests these posts using the API. The user and tag database is based only from these posts, so the application will only know about the users that have been recently posted something. For start, I've loaded the last 2000 questions from all four sites in the application, that might be enough.

The posts can be categorized two ways: tags and users. You can query all posts that have a specific tag set, and you can also query all posts that a specific user had written. CodeChirp will always show you the posts which have been edited last, except in the post list, where the ordering is based on the last activity date.

There are also two kinds of aggregates: badges and channels.

Badges hold users that have acquried that specific badge. Only badges with no more than 10 users are considered, the other ones are not available. If you check the posts for a specific badge you will get a list of posts, that were written by users having that badge.

Channels are like badges, but they are user-made. Anyone can register (using OpenId) and create channels, that others can see. You can subscribe at most 10 users to a channel (the same limit as for badges).

API usage

The application uses mainly two API requests to fill it's database. It tries to be very conservative with the API-bandwidth. Every 10 minutes it checks for the last 100 questions with full answer and comment list, and updates it's database according to them. The users are also harvested from this database. Besides this cron script, there is also another query going on every day, which will download all badges, that have less than 10 users.

Own API

The code has it's own "API" (well, very primite), that you can use to access it's features programmatically. Add type=json to the request, and you'll get your results back in JSON format. No API contest from me though :)

TODO

Lots of things need to be done:

  • Change database engine (from SQLite to PG), so the bulk loading of data every X minutes won't kill the application
  • Rewrite the channel/badge system to be "push"-based not "pull"-based (to be cool F# would be great to create this backend functionality)
  • Add support for subscribing to tags, badges, other channels, etc.
  • Add support for selective subscriptions (for example only if the score is above a treshold or similar)
  • ...

Epilogue

Any feature-requests, bug reporting, comments, etc. are welcome. Hope you enjoy chirping.

If the service is not available then try again later. It's not running in a production environment (and is only alpha quality)

1
  • 1
    heh heh... I was trying to keep mine on the hush hush until I finished it... but it looks like yours might see the light of day before mine. Best of luck it looks great and well, I guess I wasn't the only one thinking this! ;-)
    – scunliffe
    Jun 4, 2010 at 12:37

0

You must log in to answer this question.

Browse other questions tagged .