## CodeChirp [![alt text][1]][2] ##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 * [CodeChirp Main Site][2] ###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][3]. Hosting is done by our [small company][4]. ##Code Frameworks used: * [Salient.StackApps][5] is used to access the SO API * [S#aml Architecture][6] 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][7] * Uses the mono branch DNOA to do the OpenId authentication. * Uses NHaml 3 alpha as the view engine Source code: * [On github][8] # 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: * <s>Change database engine (from SQLite to PG), so the bulk loading of data every X minutes won't kill the application</s> * 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]: http://sztupy.hu/static/screenshot.png [2]: http://codechirp.sztupy.hu [3]: http://sztupy.hu [4]: http://cancellar.hu [5]: http://salientstackapps.codeplex.com/ [6]: http://shaml.sztupy.hu/ [7]: http://github.com/sztupy/monosystemwebmvc [8]: http://github.com/sztupy/CodeChirp