pyblosxom - A Microkernel Approach to Blogging.notes

Saturday, March 26, 2005

TITLE OF PAPER: pyblosxom - A Microkernel Approach to Blogging
URL OF PRESENTATION: _URL_of_powerpoint_presentation_
PRESENTED BY: Ted Leung
PAID FOR BY:

CONFERENCE: PyCon 2005
DATE: Friday, March 25, 2005
LOCATION: GWU Cafrtiz Conference Center, Marvin Theater

--------------------------------------------------------------------------
REAL-TIME NOTES / ANNOTATIONS OF THE PAPER:
{If you've contributed, add your name, e-mail & URL at the bottom}

Ted: "thanks for sticking around to the bitter end" (we're pretty bitter too) (i could use a bitter)(I could use a couple of something too, if we're going to discuss this)(Don't think we're going to find that at the Apple Store)

wants to build interest in working on pybloxsom, writing plugins, easier installs, etc -- turn java webloggers into python webloggers

pybloxsom name from Perl package called bloxsom
    - everything stored in the file system
        category oriented directory hierarchy
        edit with any text editor
        can edit posts using your favorite editor
    - plugins do all the work
        used to implement most of functionality
    - simple, compact
        engine ~3.4k line python

[Demo of url format - cool date stuff, also cool category & directory ]
    - can supply feeds by category (eg, only java posts or only python posts)
    - this is a feature :)

Flavors
    - templates
    - default flavor is html, can get others by adding flavor=rss to url

Plugins
    Most features are implemented via plugins
     * Archives, Calendar nav, HTTP 304, Logging, XMLRPC, Lucene, etc.
    [Demo of editing weblog offline (w/ecto) and getting preview/publishing]

Configuration Tips
    - web server config
        CGI
        mod_python, Twisted, WSGI (in 1.2)
            + mod_rewrite
    - Configuration file: config.py
        file is assignments to a dict named py
        py['datadir'] - where the posts are
        py['plugin_dirs'] - where the plugins are
        py['load_plugins'] - plugins to load, in order (not needed? Just for ordering?)
    - Config testing
        pybloxom.___

Development - Plugins!
    Plugins
        Are python modules
        Suplly callback functions
        Are called by PyBlosxom at specific times

    Callback chains
        Multiple plugins provide callbacks with the same name
        Each will be called in order (according to py['load_plugins'])

Plugin arguments
    Callback functions are passed the "args_dict"
        HTTP request info
        Configuration dict
                
        def cb_start(args):
            request = args['request']
            config = request.getConfiguration()
            http = request.getHttp()
            cgi_form = http['form']
            data = request.getData()
            

[Top Level Architecture chart - See slides from web]

[Chains of Callbacks chart - See slides from web]

Two renderers:
    regular renderer
    debug renderer

    stages / callback hooks:
        path_info - breaks URL apart to figure out what weblog entry to get
        filelist - figures out what files to open, puts them in dict to get rendered
        prepare - stuff to do before rendering
        logrequest - debug callback, gets response data + http headers
        render - see render pipeline below

render pipeline: (templates)
    head - non entry related top of page
    date_head
    story
    story_end
    ___ [I missed one]
    foot - in Ted's weblog this is actually the sidebar thanks to CSS


Entry Parsers
    Allow us to hook the parsing of blog entries
        allows people to write however they want
    Two callbacks:
        cb_preformat - this is where you'd convert ReST, etc
        cb_postformat
    Initialized via cb_entryparser

XML-RPC System
(diagram)

handler  (subethaedit now comes with 'automatic' ascii art generation)
  +-->  xmlrpc
        +--> blogger ---------+
        +--> metaweblog ------+
        +--> pingback      ---+
                              V
                             XMLRPC

[Example: w3cdate - see the slides]

Futures
    - WSGI/Twisted (PyBlosxom 1.2)
    - Static Rendering
    - Caching
    - Alternate templating/rendering engines
    - Improved Internationalization ( could use help here )
    - Comments plugin
        Picture challenges (anti spam measure-- "type the text you see")
        Comment moderation
    - Atom API
    - Yarn/HEP Integration



Q&A:
----

Q: whats the default url style?
A: organized by date... er, by category and then date (??)

Q: multiple categories per item?
A: different pybloxsom community wisdom:
    - symlink (doesn't work so well)
    - will guaraldi's plugin (see pybloxsom site)

Q: Is there an XML format? (you could add a categories attribute)
A: Most of PyBlosxom developers are allergic to XML, so, probably not, but we'd
   accept a patch (maybe) or a plugin (more probable)

Q: original entry on day 1. I change my entry the next day... now it has a different date
    and it shows up under a new URL.
A: ___ (missed answer)
    there's a plugin that will ask you what behavior you want
    [user: hacked a plugin to preserve date]


--------------------------------------------------------------------------
REFERENCES: {as documents / sites are referenced add them below}
pybloxsom: ???
perl bloxsom: ???
ted's blog: www.sauria.com/blog
ecto: ???

[no wireless Internet connection in the room, so we can't look them up]

--------------------------------------------------------------------------
QUOTES:

"And that's basically it." (after 20 minutes of frenetic diagramming, code,
and demos).


--------------------------------------------------------------------------
CONTRIBUTORS: {add your name, e-mail address and URL below}
Nick Bastin <nick.bastin@gmail.com> <http://www.nickbastin.com>
Bob Kuehne
Linden Wright
Ian Jones
Jonathan Blocksom <blocksom@gollygee.com>

--------------------------------------------------------------------------
E-MAIL BOUNCEBACK: {add your e-mail address separated by commas }



--------------------------------------------------------------------------
NOTES ON / KEY TO THIS TEMPLATE:
A headline (like a field in a database) will be CAPITALISED
    This differentiates from the text that follows
A variable that you can change will be surrounded by _underscores_
    Spaces in variables are also replaced with under_scores
    This allows people to select the whole variable with a simple double-click
A tool-tip is lower case and surrounded by {curly brackets / parentheses}
    These supply helpful contextual information.

--------------------------------------------------------------------------
Copyright shared between all the participants unless otherwise stated...