RubLog simple powerful syndicationframefork for arbitrary file based content CVS integration Throw a file at it and it knows what to do (for some types) No web-based story editor built-in web server (one line Ruby server) simple, simple, simple weblog system for hackers Get, install, setup http://rubyforge.org/projects/rublog CVS access anonymous@rubyforge.org::/var/cvs/rublog File you get is a script - it's its own config file converters: starts off knowing HTML files, plain text, RDoc - couple other formats sidebars: instantiate them and there they go arbitrary links RSS feeds calendar view mini-blog Structure Rublog.cgi RubLog FileEntries Convertors Sidebars View HTMLView RSSView Extending RubLog Templates (movablestyle) Convertors Sidebars Views Execution environment Data source? Not formal interface, but you can hack it converters associate class to suffix implement convertPlain to use search sidebars extends from SideBar body attribute is what comes out or you can use a generate method (returns a string) can instantiate a RubLog execution environment that isn't CGI e.g., passing notifications around Examples Wiki/Weblog integrations - like 5 lines for UseModWiki integration can search, syndicate ... Shared contact lists, Shared calendars vCard and iCal in CVS RubLog points to CVS Add stuff to CVS, RubLog spots it and syndicates it Comments ... hacked in a link to a wiki at the end of a story new converter with the link stuck on the end RubyGems browser ... Solving the Ruby CPAN problem RubyGems RubLog syndicates when a new gem shows up Converter for .gem files shows gems installed locally RSS aggregator too really easy to implement - like 5 minutes Ruby trick class GemConvertor < BaseConvertor handles "gem" defines a hash that maps the "gem" extension to the class that handles it Weblog stuff that isn't even weblogs Syndicate CVS commits, bug tracking entries ... MP3 sharing hack mp3 convertor - files we'll handle m3u view - streaming version we'll serve Playlist template - index.m3u handler Servlet/CGI program Everything you need to know about extending RubLog except a sidebar What else? anything that needs to be tracked, displayed, and RSSed a one-line blog this directory would be really neat - haven't done that yet q: how well does it scale? a: pretty well, even we didn't try to do that