<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>0xDECAFBAD - Tag: xml</title>
    <link href="http://decafbad.com/blog/atom.xml" rel="self"/>
    <link href="http://decafbad.com/blog"/>
    <updated>2011-11-16T16:29:50+00:00</updated>
    <id></id>
    <author>
        <name></name>
        <email>l.m.orchard@pobox.com</email>
    </author>
    

    <entry>
        <title>OPML reading lists in FeedMagick2</title>
        <link href="http://decafbad.com/blog/2007/10/17/opml-reading-lists-in-feedmagick2"/>
        <updated>2007-10-17T07:22:47+00:00</updated>
        <id>http://decafbad.com/blog/2007/10/17/opml-reading-lists-in-feedmagick2</id>
        <content type="html">&lt;p&gt;For anyone who's interested:  I've been hacking a little bit on &lt;a href=&quot;http://decafbad.com/trac/wiki/FeedMagick&quot;&gt;FeedMagick2&lt;/a&gt; again, with the latest addition being an OPML reading list feed blender.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://nick.typepad.com/blog/2005/10/reading_lists_f.html&quot;&gt;What's an OPML reading list?&lt;/a&gt;  Basically, it's the same as as OPML export of a feed reader's subscription list - only rather than doing a one-time import into another program, the OPML is itself treated as a live feed.  A feed reader that supports OPML reading lists will continually check the list for updates and sync RSS/Atom feed subscriptions with its contents, maybe in a special sub-folder.&lt;/p&gt;

&lt;p&gt;Here's a quick demo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://decafbad.com/2007/04/FeedMagick2/?pipeline=readinglist&amp;amp;url=http%3A%2F%2Fdecafbad.com%2F2007%2F04%2FFeedMagick2%2Fdocs%2Fmaster.opml&amp;amp;format=rss&amp;amp;run=Run+Pipeline&quot;&gt;An RSS feed blended from many of the sites I use daily&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://decafbad.com/2007/04/FeedMagick2/docs/master.opml&quot;&gt;The OPML reading list used as input for the above blend&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;The itch I mean to eventually scratch is to replace the front page of decafbad.com with a live updating aggregation of the stuff I create and capture daily on the web.  It'll be basically a self-assembling &lt;a href=&quot;http://en.wikipedia.org/wiki/Tumblelog&quot;&gt;tumblelog&lt;/a&gt; pulled from many different services across the web.  It'll also replace the footer of accumulated crud I've got on this very blog - which I thought was a good idea at one point, but now consider &lt;a href=&quot;http://decafbad.com/twiki/bin/view/Main/NeatLikeDigitalWatches&quot;&gt;NeatLikeDigitalWatches&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;With that in mind, the next thing I plan to develop is an &lt;a href=&quot;http://microformats.org/wiki/hatom&quot;&gt;hAtom&lt;/a&gt; module or XSL transform.  This will turn the blended feed into an XHTML page.  Maybe someday, &lt;a href=&quot;http://hatomic.org&quot;&gt;hAtomic&lt;/a&gt; will launch, and I'll have a nice pretty style for the page too.  Some time after that, I might work up a module that stows away dated historical archives of the feed and pages.  I have &lt;a href=&quot;http://decafbad.com/svn/trunk/FeedMagick2/TODO&quot;&gt;further plans and ideas&lt;/a&gt;, but I'm trying to focus on the itchy spots first so that I might actually get something done in this round of serial enthusiasm.&lt;/p&gt;
</content>
    </entry>
    
    

    <entry>
        <title>Say hello to FeedMagick2</title>
        <link href="http://decafbad.com/blog/2007/04/30/say-hello-to-feedmagick2"/>
        <updated>2007-04-30T03:06:32+00:00</updated>
        <id>http://decafbad.com/blog/2007/04/30/say-hello-to-feedmagick2</id>
        <content type="html">&lt;p&gt;Yeah, things have been basically silent around here thanks to post-work brain fryage and a general lack of things to say.  Really, everyone else around the blogosphere seems to be covering things satisfactorily.  However, I have been idly working on a new project over the past few weeks, namely a total rewrite and redesign of &lt;a href=&quot;http://decafbad.com/blog/?s=feedmagick&quot;&gt;my format-ignorant feed filtering and munging kit dubbed FeedMagick&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can find &lt;a href=&quot;http://decafbad.com/2007/04/FeedMagick2/&quot;&gt;a demo installation of FeedMagick2 here&lt;/a&gt; and find it &lt;a href=&quot;http://decafbad.com/svn/trunk/FeedMagick2/&quot;&gt;ready for checkout from SVN over here&lt;/a&gt;.  It's basically just a step away from being a proof of concept, but I'm hoping to get around to fleshing out docs and battening down the hatches with tests.  In any case, if my serial enthusiasm holds out, this thing could eventually subsume everything else I've done with feeds.&lt;/p&gt;

&lt;p&gt;For now, peek at some of these highlights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;a href=&quot;http://decafbad.com/2007/04/FeedMagick2/inspect/masterfeed&quot;&gt;Master Personal Feed&lt;/a&gt; - One big feed blended from 10 other personal metadata feeds pulled from various Web-2.0-ish sites.&lt;/li&gt;
&lt;li&gt; &lt;a href=&quot;http://decafbad.com/2007/04/FeedMagick2/inspect/magpiejson&quot;&gt;Feed to JSON via Magpie&lt;/a&gt; - Get feed data parsed by way of &lt;a href=&quot;http://magpierss.sourceforge.net/&quot;&gt;Magpie&lt;/a&gt; into JSON data structures&lt;/li&gt;
&lt;li&gt; &lt;a href=&quot;http://decafbad.com/2007/04/FeedMagick2/inspect/flickrfavorites&quot;&gt;Flickr Favorites Feed&lt;/a&gt; - Feed of photos marked as favorites by a Flickr user, pulled via the API&lt;/li&gt;
&lt;li&gt; &lt;a href=&quot;http://decafbad.com/2007/04/FeedMagick2/inspect/jbox&quot;&gt;jbox.com scraper&lt;/a&gt; - Pipeline composed of &lt;a href=&quot;http://tidy.sourceforge.net/&quot;&gt;HTML Tidy&lt;/a&gt; and XSL to scrape &lt;a href=&quot;http://jbox.com/&quot;&gt;jbox.com&lt;/a&gt; to build an RSS feed of new items for sale.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Beyond practical examples, there are some things under the hood that seem keen to me.  Apropos of my &lt;a href=&quot;http://decafbad.com/blog/2007/02/15/thoughts-on-pipes-on-the-web-part-ii&quot;&gt;pipes-via-web ramblings&lt;/a&gt; back in February, I'm trying out a few different approaches to pipelining feed content through processor modules.  My original FeedMagick relied on feeding URLs to URLs as parameters.  That, unfortunately, can be mighty cumbersome and inefficient.  So, FeedMagick2 explores a few more approaches:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt; The first and obvious approach is to chain them together in a single script.  So, I've got objects instances that pass content from one to the next.  The thing is, the pipe works in reverse:  The driver script asks the last module in the pipe for content, which then asks the one before it for content, and so on.  At any point along the way, modules can cache the output of previous modules, and refrain from calling up the chain.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt; The second way to chain pipelines together is just like the first FeedMagick:  Some pipelines start with fetching a URL.  That can be an original feed, or a URL leading to the output of an antecedent pipeline.  And, oh yeah, most pipelines are run via parameterized URLs, so there's that bit of handy recursion.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt; The third way to chain pipelines together is with HTTP POST:  A pipeline can accept feed data via the request body of an HTTP POST, thus allowing antecedent pipelines (or even cURL scripts) to &lt;em&gt;push&lt;/em&gt; data into the pipeline rather than getting &lt;em&gt;pulled&lt;/em&gt; via URL.  This is kind of like my &lt;a href=&quot;http://decafbad.com/blog/?s=xmlrpc+pipe&quot;&gt;years-old jiggery pokery&lt;/a&gt; with &lt;a href=&quot;http://www.decafbad.com/twiki/bin/view/Main/XmlRpcFilteringPipe&quot;&gt;pipelines via XML-RPC&lt;/a&gt;, only much &lt;em&gt;much&lt;/em&gt; simpler.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I'm also poking around at making all of the above available at the command line via PHP-CLI, and I'm having gratuitous fun exploring PEAR to roll my own stripped-down web framework.  I still hate PHP, but I'm at least finding ways to entertain myself while I'm holding my nose.  Of course, I find weird things entertaining.&lt;/p&gt;

&lt;p&gt;And, as a side note, the only reason I'm using PHP is because I'd like to play around with the idea of the de facto WordPress installation requirements standard.  That is:  If you can run WordPress, you can run this.  In reality, I don't think I'm there, but I'm hoping to get close.  For one, I'm refusing to play with anything older than PHP 5.&lt;/p&gt;

&lt;p&gt;Anyway, play with it, tell me what you think and give me a reason to keep hacking at it.  :)&lt;/p&gt;

&lt;div id=&quot;comments&quot; class=&quot;comments archived-comments&quot;&gt;
            &lt;h3&gt;Archived Comments&lt;/h3&gt;
            
        &lt;ul class=&quot;comments&quot;&gt;
            
        &lt;li class=&quot;comment&quot; id=&quot;comment-221082761&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://jamesv.org&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=c82c72ca4f9eab33a80a7bd839c1ae0b&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://jamesv.org&quot;&gt;jamesv&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221082761&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2007-04-30T11:39:15&quot;&gt;2007-04-30T11:39:15&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Aw man, now I've got to port all the code you wrote while you were here over to this new hotness ;) I really like (and appreciate) the single script approach.&lt;/p&gt;

&lt;p&gt;Is caching at a module level done automatically, or is that something I need to flag in my original call? Some installs of the original code base are now aggregating large sections of a pool of around 400 feeds, and eeking out even minor performances gains would be just lovely.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221082762&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=b309c5a1952afc3d7d81ee90908309af&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;dRAUPP&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221082762&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2007-04-30T13:40:16&quot;&gt;2007-04-30T13:40:16&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;hawt.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221082763&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2377f34a68801b861c3e54e1301f0dce&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;l.m.orchard&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221082763&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2007-04-30T14:43:54&quot;&gt;2007-04-30T14:43:54&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;@jamesv: Take a look at the source to this big-ish pipeline, all the way at the end:&lt;/p&gt;

&lt;p&gt;http://decafbad.com/2007/04/FeedMagick2/pipelines/masterfeed&lt;/p&gt;

&lt;p&gt;You can basically slap a Cacher module at the tail-end or even middle of a long string of modules, and it'll cache the results of everything before it.  I've got a cache lifetime set in the conf/config.php, and you can also set the lifetime in the Cacher parameters.  There can multiple Cacher's per pipeline too.&lt;/p&gt;

&lt;p&gt;This thing might not quite yet be even as stable / in working order as the original FeedMagick, but it might be worth poking at for you.  :)&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221082766&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://laughingmeme.org&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=01457d1a0f0e533062cd0d1033fb4d7a&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://laughingmeme.org&quot;&gt;kellan&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221082766&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2007-04-30T16:02:31&quot;&gt;2007-04-30T16:02:31&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;blockquote&gt;For one, I’m refusing to play with anything older than PHP 5.&lt;/blockquote&gt;

&lt;p&gt;That must be nice.  &lt;/p&gt;

&lt;p&gt;And curse you, this looks interesting, now I've got to find time to look at it.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221082767&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.jm3.net/&quot;&gt;&lt;img src=&quot;http://disqus.com/api/users/avatars/jm3.jpg&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.jm3.net/&quot;&gt;John Manoogian III (jm3)&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221082767&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2007-04-30T17:53:08&quot;&gt;2007-04-30T17:53:08&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;addendum to README:&lt;/p&gt;

Installation

&lt;p&gt;cp conf/config.php-dist conf/config.php
  chmod a+w logs
- RewriteBase /~lorchard/FeedMagick2
+ RewriteBase /FeedMagick2&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221082768&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2377f34a68801b861c3e54e1301f0dce&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;l.m.orchard&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221082768&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2007-04-30T17:58:49&quot;&gt;2007-04-30T17:58:49&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;@jm3: Ah!  Good catch.  I really need to eventually installer-ify that kind of stuff.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221082769&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://xiled.rss-central.net/blog&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=750dbcc9cc192bfad37a3daa4edf139e&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://xiled.rss-central.net/blog&quot;&gt;megalar&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221082769&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2007-08-05T12:25:34&quot;&gt;2007-08-05T12:25:34&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Yesterday my host upgraded to php5 so I ran over to your svn dump and installed feedmagick2.
After editing the $baseurl and rewritebase i tested it and it worked like a charm, so I took a nap.
Upon waking I was gonna go play with it and see what hacks I could get going with it but something
 was fubar.
Warning: fopen(/home/megalar/www/html/feedmagick/logs/feedmagick2-debug-20070805.log) [function.fopen]: failed to open stream: Permission denied in /usr/share/php/Log/file.php on line 216
are the errors I get as you can see @ &lt;a href=&quot;http://xiled.rss-central.net/feedmagick/&quot; rel=&quot;nofollow&quot;&gt;my site&lt;/a&gt;.
If it hadn't worked to begin with I would think module problems on my server. To my knowledge, and my host's knowledge, nothing has changed since the upgrade so I'm wondering if it is some sort of bug or a server problem that waited a few hours to reveal itself. The latter doesn't really make much sense to me
but I can't rule it out since I'm not r00t on the box and am not 100% certain my host didn't bork something while I slept. &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;              anyhoo, your thoughts?
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;/ul&gt;
    
        &lt;/div&gt;



</content>
    </entry>
    
    

    <entry>
        <title>content sniffing sucks</title>
        <link href="http://decafbad.com/blog/2006/11/24/content-sniffing-sucks"/>
        <updated>2006-11-24T06:28:11+00:00</updated>
        <id>http://decafbad.com/blog/2006/11/24/content-sniffing-sucks</id>
        <content type="html">&lt;blockquote cite=&quot;http://www.snellspace.com/wp/?p=530&quot;&gt;If you’re using FF2.0 go &lt;a href=&quot;http://svn.smedbergs.us/wordpress-atom10/tags/0.6/wp-atom10-comments.php&quot;&gt;here&lt;/a&gt; and you’ll see why.&lt;br /&gt;No, I don’t want to subscribe to a PHP template used to generate Atom feeds, thank you very much.&lt;/blockquote&gt;


&lt;div class=&quot;quotesource&quot;&gt;Source: &lt;a href=&quot;http://www.snellspace.com/wp/?p=530&quot;&gt;snellspace.com » Blog Archive » Content Sniffing Sucks&lt;/a&gt;&lt;/div&gt;


&lt;p&gt;I know this is just taunting &lt;a href=&quot;http://en.wikipedia.org/wiki/Happy_Fun_Ball&quot;&gt;the Happy Fun Ball&lt;/a&gt; I said &lt;a href=&quot;http://decafbad.com/blog/2006/11/07/firefox-rss-xsl-from-anger-to-apathy&quot;&gt;I was done taunting&lt;/a&gt; , but there's a &lt;a href=&quot;http://groups.google.com/group/mozilla.dev.apps.firefox/browse_thread/thread/146f70eaf0e1686f/1daec246d79c7dbd#341e610fd279b5fc&quot;&gt;false-positive&lt;/a&gt; for ya.  :)&lt;/p&gt;
</content>
    </entry>
    
    

    <entry>
        <title>XoxoOutliner and further outline addressing adventures</title>
        <link href="http://decafbad.com/blog/2006/11/15/xoxooutliner-and-further-outline-addressing-adventures"/>
        <updated>2006-11-15T08:07:12+00:00</updated>
        <id>http://decafbad.com/blog/2006/11/15/xoxooutliner-and-further-outline-addressing-adventures</id>
        <content type="html">&lt;p&gt;&lt;a href=&quot;http://decafbad.com/trac/changeset/779&quot;&gt;Revised the addressing code a bit&lt;/a&gt;, adding a few new kinds of addresses and getting ready to support sub-outline &lt;em&gt;updates&lt;/em&gt;.  That is, fetch a sub-branch of an outline and then later post a change to that sub-branch using the same address.  Needs more thought - ie. what happens if things move between fetch and update? - but here are a few more samples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First is a straight linear index counting down from the top of the outline:

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://decafbad.com/2006/11/XoxoOutliner/outlines/README;index:4?format=xoxo&quot;&gt;http://decafbad.com/2006/11/XoxoOutliner/outlines/README;index:4?format=xoxo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Second is a navigation of outline structure, alternating numbers and letters:

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://decafbad.com/2006/11/XoxoOutliner/outlines/README;level:3c4?format=xoxo&quot;&gt;http://decafbad.com/2006/11/XoxoOutliner/outlines/README;level:3c4?format=xoxo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;That's all for now.  In my next round of enthusiasm, I may try stealing &lt;a href=&quot;http://blogs.opml.org/tommorris/2006/11/11#opathAToolToPopulariseAConcept&quot;&gt;Tom Morris' Opath idea&lt;/a&gt;...&lt;/p&gt;

&lt;div id=&quot;comments&quot; class=&quot;comments archived-comments&quot;&gt;
            &lt;h3&gt;Archived Comments&lt;/h3&gt;
            
        &lt;ul class=&quot;comments&quot;&gt;
            
        &lt;li class=&quot;comment&quot; id=&quot;comment-221087323&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://vdm.cc/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=a4dae25fe0faeec4f9ff1ad769a52b36&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://vdm.cc/&quot;&gt;Vincent D Murphy&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221087323&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2006-11-18T20:52:07&quot;&gt;2006-11-18T20:52:07&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;I think (and said as much on Tom Morris' site) that a fragment identifier would be a better solution, in which case Opath would be a fragment identifier syntax for OPML and XOXO. At least it would be the best solution from a REST/web architecture point of view..&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221087325&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2377f34a68801b861c3e54e1301f0dce&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;l.m.orchard&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221087325&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2006-11-18T21:40:41&quot;&gt;2006-11-18T21:40:41&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;One reason I didn't use the #identifier URI syntax for suboutlines is because some gymnastics need to be done to get the hash through to the server from a browser.  Otherwise, it gets treated as an in-page anchor.  The semicolon syntax seems to work well for a set of path-segment parameters, and follows the standard (if I've read it correctly).  &lt;/p&gt;

&lt;p&gt;In either case, it works for me, and should be just fine in a REST context - the suboutline syntax here should always identify a single parent outline node as a resource, and will eventually work for GET / PUT / POST / DELETE.&lt;/p&gt;

&lt;p&gt;Now I just need to implement a solution for the &lt;a href=&quot;http://www.w3.org/1999/04/Editing/01&quot; rel=&quot;nofollow&quot;&gt;Lost Update Problem&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221087328&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.dynamiclist.com/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=09eb19f1e84a7aaa63c86bd48c4d0f3d&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.dynamiclist.com/&quot;&gt;Michael Poremba&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221087328&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-09-18T23:45:56&quot;&gt;2008-09-18T23:45:56&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Wondering if you ever completed your online outliner? Check out dynamiclist.com, a functioning but incomlete project I launched back in 2001. The editor is rich and works well. Been thinking of reviving now that all major browsers support the contentEditable tag.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;/ul&gt;
    
        &lt;/div&gt;



</content>
    </entry>
    
    

    <entry>
        <title>XoxoOutliner and suboutline addressing</title>
        <link href="http://decafbad.com/blog/2006/11/13/xoxooutliner-and-suboutline-addressing"/>
        <updated>2006-11-13T09:34:02+00:00</updated>
        <id>http://decafbad.com/blog/2006/11/13/xoxooutliner-and-suboutline-addressing</id>
        <content type="html">&lt;p&gt;Here's a feature I &lt;a href=&quot;http://decafbad.com/trac/changeset/776&quot;&gt;just hacked together&lt;/a&gt; for &lt;a href=&quot;http://decafbad.com/trac/wiki/XoxoOutliner&quot;&gt;XoxoOutliner&lt;/a&gt; and plan to refine further:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://decafbad.com/2006/11/XoxoOutliner/outlines/README;text:Features?format=xoxo&quot;&gt;http://decafbad.com/2006/11/XoxoOutliner/outlines/README;text:Features?format=xoxo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://decafbad.com/2006/11/XoxoOutliner/outlines/README;id:native?format=xoxo&quot;&gt;http://decafbad.com/2006/11/XoxoOutliner/outlines/README;id:native?format=xoxo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://decafbad.com/2006/11/XoxoOutliner/outlines/README;contains:Implement?format=xoxo&quot;&gt;http://decafbad.com/2006/11/XoxoOutliner/outlines/README;contains:Implement?format=xoxo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Not entirely sure that this is how I want this to work, but these three URLs demonstrate the ability to address and fetch subsets of outlines.  I'm hoping this will be a basis for selective transclusion in other outlines, or maybe even in a sidebar of a blog.  (Which, depending on the blog software, might be built from outlines anyway.)&lt;/p&gt;
</content>
    </entry>
    
    

    <entry>
        <title>Sometimes the lazyweb delivers with a deluge</title>
        <link href="http://decafbad.com/blog/2005/12/19/sometimes-the-lazyweb-delivers-with-a-deluge"/>
        <updated>2005-12-19T23:15:03+00:00</updated>
        <id>http://decafbad.com/blog/2005/12/19/sometimes-the-lazyweb-delivers-with-a-deluge</id>
        <content type="html">&lt;blockquote&gt;&lt;p&gt;&lt;a href=&quot;http://decafbad.com/blog/2005/12/19/feedburner-feeds-give-heartburn-to-php-xml-parsers#comment-3200&quot;&gt;Kellan&lt;/a&gt;: &quot; '… and that’s not my code.' ouch&quot;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://decafbad.com/blog/2005/12/19/feedburner-feeds-give-heartburn-to-php-xml-parsers#comment-3204&quot;&gt;Eric&lt;/a&gt;: &quot;Right now, the only thing we have special for Magpie RSS is that we don’t serve Atom to that user-agent if the version is 0.5.&quot;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://decafbad.com/blog/2005/12/19/feedburner-feeds-give-heartburn-to-php-xml-parsers#comment-3209&quot;&gt;Rasmus&lt;/a&gt;: &quot;I wrote a simple little PHP 5.1-based RSS parser a while back and it doesn’t have any problems with that ... feed.&quot;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;&lt;small style=&quot;text-align:right; display:block&quot;&gt;Source: &lt;a href=&quot;http://decafbad.com/blog/2005/12/19/feedburner-feeds-give-heartburn-to-php-xml-parsers&quot;&gt;Comments on my previous post&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.google.com/search?q=facepalm&amp;amp;start=0&amp;amp;ie=utf-8&amp;amp;oe=utf-8&amp;amp;client=firefox-a&amp;amp;rls=org.mozilla:en-US:official&quot;&gt;Facepalm&lt;/a&gt;, &lt;a href=&quot;http://www.urbandictionary.com/define.php?term=headdesk&quot;&gt;headdesk&lt;/a&gt;.  As it turns out, the issue I was having with my PHP XML parsing was that I was trying to cram raw gzip streams down its throat, caused by some odd things I was trying to do with HTTP headers copied cargo-cult style from &lt;a href=&quot;http://decafbad.com/trac/browser/trunk/FeedMagick/includes/HTTPCache.php&quot;&gt;a Python module I've tried reinventing in PHP&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In other words, completely braindead work by someone who should know better, even though he's relatively new to PHP—where &lt;em&gt;he&lt;/em&gt; is defined as &lt;strong&gt;&lt;em&gt;me&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But, kudos to the people of the lazyweb for taking the time to triangulate me and remove all doubt within scant hours of my post.  Not counting a half-dozen private emails, I got very quick responses from &lt;a href=&quot;http://decafbad.com/blog/2005/12/19/feedburner-feeds-give-heartburn-to-php-xml-parsers#comment-3200&quot;&gt;the author of MagpieRSS&lt;/a&gt;, &lt;a href=&quot;http://decafbad.com/blog/2005/12/19/feedburner-feeds-give-heartburn-to-php-xml-parsers#comment-3204&quot;&gt;the CTO of FeedBurner&lt;/a&gt;, and &lt;a href=&quot;http://decafbad.com/blog/2005/12/19/feedburner-feeds-give-heartburn-to-php-xml-parsers#comment-3209&quot;&gt;the creator of PHP himself&lt;/a&gt;—each very nicely, clearly, and rightly saying:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&quot;...and that's not &lt;em&gt;my&lt;/em&gt; code.&quot;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Be careful when you attempt to invoke the lazyweb, because it might just respond!&lt;/p&gt;
</content>
    </entry>
    
    

    <entry>
        <title>Okay, okay, JSON is pretty hot</title>
        <link href="http://decafbad.com/blog/2005/12/19/okay-okay-json-is-pretty-hot"/>
        <updated>2005-12-19T04:17:55+00:00</updated>
        <id>http://decafbad.com/blog/2005/12/19/okay-okay-json-is-pretty-hot</id>
        <content type="html">&lt;p&gt;The XML &lt;strike&gt;purist&lt;/strike&gt; fanboy in me has had me &lt;em&gt;pshaw&lt;/em&gt;'ing at JSON.  But, now that &lt;a href=&quot;http://ws1.inf.scd.yahoo.com/common/json.html&quot;&gt;the recent JSON release from Yahoo!&lt;/a&gt; reminded me of its existence and I &lt;a href=&quot;http://decafbad.com/2005/12/FeedMagick/docs/json-demo.html&quot;&gt;gave it a shot&lt;/a&gt; myself, I have to admit that it's pretty hot—if only for the cross-domain bridging capabilities and the no-fuss parsing.&lt;/p&gt;

&lt;p&gt;Although, I do worry about running into a poisoned payload someday that raids my cookie jar.&lt;/p&gt;

&lt;!-- tags: webdev ajax json xml --&gt;




&lt;div id=&quot;comments&quot; class=&quot;comments archived-comments&quot;&gt;
            &lt;h3&gt;Archived Comments&lt;/h3&gt;
            
        &lt;ul class=&quot;comments&quot;&gt;
            
        &lt;li class=&quot;comment&quot; id=&quot;comment-221082692&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://beesbuzz.biz/&quot;&gt;&lt;img src=&quot;http://disqus.com/api/users/avatars/plaidfluff.jpg&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://beesbuzz.biz/&quot;&gt;fluffy&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221082692&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2005-12-19T06:50:57&quot;&gt;2005-12-19T06:50:57&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;JSON is currently the big Hot Thing at work.  It's very good for some things, but IMO it's not nearly as robust as XML as far as generic interchange goes.  Its big drawback is that it's not nearly as flexible, and since elements are either unordered or stored in an array, you have to agree upon the actual structure of the document before you send it across the wire (which isn't so much the case with XML where often all you care about is the nesting order which you can handle with XPath or similar).&lt;/p&gt;

&lt;p&gt;It's GREAT for AJAX though, as long as you can trust the server of course.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221082695&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.whump.com/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=152a649080e99c313ecae9a34c60d11d&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.whump.com/&quot;&gt;Bill Humphries&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221082695&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2005-12-19T07:26:09&quot;&gt;2005-12-19T07:26:09&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;I thought &lt;a href=&quot;http://microformats.org/wiki/rest/ahah&quot; rel=&quot;nofollow&quot;&gt;AHAH&lt;/a&gt; was the current big thing. Just send HTML to the client and use &lt;code&gt;Element.innerHTML&lt;/code&gt;.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;/ul&gt;
    
        &lt;/div&gt;



</content>
    </entry>
    
    

    <entry>
        <title>Templates:  Good or Evil?</title>
        <link href="http://decafbad.com/blog/2005/09/26/templates-good-or-evil"/>
        <updated>2005-09-26T01:12:46+00:00</updated>
        <id>http://decafbad.com/blog/2005/09/26/templates-good-or-evil</id>
        <content type="html">&lt;blockquote cite=&quot;http://lachy.id.au/log/2005/04/xhtml-future#comment-271&quot;&gt;This cry and whine that draconian handling will break your page and make your users suffer for you if you have a single error is just another legacy of HTML we’ve gotten used to: our toolchains tend to be of the “glue strings together” (aka templates) variety. ... There should never be any part of your publishing toolchain just gluing strings together. Ever.&lt;/blockquote&gt;


&lt;p&gt;&lt;span style=&quot;float:right; font-size: 0.75em; width:75%&quot;&gt;Source: &lt;a href=&quot;http://lachy.id.au/log/2005/04/xhtml-future#comment-271&quot;&gt;Aristotle Pagaltzis in a comment on &quot;The Future: HTML or XHTML&quot;&lt;/a&gt;&lt;/span&gt;&lt;br style=&quot;clear:both&quot; /&gt;&lt;blockquote cite=&quot;http://lesscode.org/2005/09/24/web-services-infrastructure-kid/&quot;&gt;There’s no rule that says templates must only be used to generate HTML. Indeed, many of the RSS and Atom feeds in the wild are generated from some form of template. They are never automatically-generated-behind-the-scenes using language bindings and are very rarely generated using some kind of DOM/SAX API.&lt;/blockquote&gt;&lt;span style=&quot;float:right; font-size: 0.75em; width:75%&quot;&gt;Source: &lt;a href=&quot;http://lesscode.org/2005/09/24/web-services-infrastructure-kid/&quot;&gt;Web Services Infrastructure: Kid Templating  &lt;/a&gt;&lt;/span&gt;&lt;br style=&quot;clear:both&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I've been meaning to write about this for some time now, though I've never had my thoughts together to any degree to mount a decent case for either side.  Problem is, I haven't gotten much closer now, but I figured I'd at least post a few thoughts and conjure up a vague sketch of the issue.&lt;/p&gt;

&lt;p&gt;You see, I think it all goes back to &lt;a href=&quot;http://decafbad.com/blog/2002/12/13/oooced&quot;&gt;thoughts about which I posted almost three years ago&lt;/a&gt;.  On the one hand, producing something like XML using &quot;proper&quot; DOM invocations and handwavings seems like the &quot;correct&quot; thing to do.  Yet, on the other hand, using a templating system lets me get down to business much more quickly and with much more clarity and succinct code.&lt;/p&gt;

&lt;p&gt;Yeah, templates provide a range of flexibility sufficient to aim the barrel at your own toes, while an API like the XML DOM keeps everything on the rails--but sometimes you know where you're going and don't need the rails to get you there.  Furthermore, isn't it possible to make a template system that Does The Right Thing?&lt;/p&gt;

&lt;p&gt;Anyway, it's rather apparent that I'm solidly in favor of templates:  After all, a book of mine just hit the shelves which is just rife with template-based generation of RSS and Atom feeds.&lt;/p&gt;

&lt;p&gt;My only issue, really, is that I feel vaguely guilty about it.&lt;/p&gt;

&lt;div id=&quot;comments&quot; class=&quot;comments archived-comments&quot;&gt;
            &lt;h3&gt;Archived Comments&lt;/h3&gt;
            
        &lt;ul class=&quot;comments&quot;&gt;
            
        &lt;li class=&quot;comment&quot; id=&quot;comment-221084924&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=821395fe70906c8290df7f18ac4ac6cf&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;rick&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221084924&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2005-09-26T02:27:37&quot;&gt;2005-09-26T02:27:37&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;Ruby has the nice Builder module for this (http://builder.rubyforge.org/).  Ruby on Rails uses it for it's rxml templates.  So, you still get the speed of templates, but you don't have to worry about those pesky xml rules.

Here's a sample Atom 1.0 template used by Typo, a rails weblogging system: http://typo.leetsoft.com/trac/file/trunk/app/views/xml/atom10_feed.rxml&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221084925&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://plasmasturm.org/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=e17949267bbfe21a0fadf1bbf00592b4&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://plasmasturm.org/&quot;&gt;Aristotle Pagaltzis&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221084925&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2005-09-26T03:52:50&quot;&gt;2005-09-26T03:52:50&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;Using the DOM to build documents is awfully awkward. Don&amp;#8217;t do that.

Check &lt;a href=&quot;http://hsivonen.iki.fi/&quot; rel=&quot;nofollow&quot;&gt;Henri Sivonen&lt;/a&gt;&amp;#8217;s suggestions just published in his &lt;a href=&quot;http://hsivonen.iki.fi/producing-xml/&quot; rel=&quot;nofollow&quot;&gt;HOWTO Avoid Being Called a Bozo When Producing XML&lt;/a&gt;. Instead of building a DOM, generate SAX events, using the program structure to ensure proper nesting &amp;#8211; or instead of generating the SAX events all manually, generate them by parsing a static XML document and using certain interesting points in the stream (such as Processing Instructions) as hooks for inserting payload.

The emission of synthesised SAX events can be generalised by writing a datastructure-to-SAX serialiser, so that you can build your data within your language&amp;#8217;s native datastructures prior to outputting it, for maximum comfort. (Of course you serialise piecemeal too, f.ex. by outputting the head of a feed manually, then for each item, building the data structure and immediately serialising it, then emitting the final events to complete the document.)

Depending on the complexity of the output, you could directly emit the otuput format or feed the events into to an XSLT transform that generates the full-blown thing from an easy to generate document structure. In both cases this can be done with or without the involvement of a serialiser as middle man.

There are plenty of ways to make sure that the entire toolchain from one end to the other consists only of steps that conserve well-formedness, and they need not be any less convenient than using templates.&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221084926&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2377f34a68801b861c3e54e1301f0dce&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;l.m.orchard&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221084926&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2005-09-26T04:16:35&quot;&gt;2005-09-26T04:16:35&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;blockquote&gt;or instead of generating the SAX events all manually, generate them by parsing a static XML document and using certain interesting points in the stream (such as Processing Instructions) as hooks for inserting payload.&lt;/blockquote&gt;
Aristotle:  Now here's where I think certain templating technologies get interesting, and may Do the Right Thing.  My so-far-favorite templating kit, ZPT, wants well-formed XML as templates--although I think that restriction is unfortunately relaxed as a nod to HTML.  On the other hand, my possibly-new-favorite templating kit, Kid, [demands well-formed XML as templates](http://lesscode.org/projects/kid/wiki/KidFaq#must-templates-be-well-formed-xml).

In case you haven't played with them, these two template languages center around the idea that certain attributes on elements define where content provided in a data structure should be inserted / swapped in by the template engine.  The engine handles character encodings and such to ensure that the well-formed template results in a well-formed document.

Does this match up with what you say up there?&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221084928&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2377f34a68801b861c3e54e1301f0dce&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;l.m.orchard&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221084928&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2005-09-26T04:28:49&quot;&gt;2005-09-26T04:28:49&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;I guess the other thing that bugs me about constructing documents via DOM or via generating SAX events—which I'd first discovered in &lt;a href=&quot;http://www.xml.com/pub/a/2003/03/12/py-xml.html&quot; rel=&quot;nofollow&quot;&gt;this XML.com article by Uche Ogbuji&lt;/a&gt;—is how awkward and removed it is from the view-source XML I've gotten used to hacking around with.  Of course, my distaste for programmatically generating things like this goes back to &lt;a href=&quot;http://perldoc.perl.org/CGI.html#CREATING-STANDARD-HTML-ELEMENTS%3a&quot; rel=&quot;nofollow&quot;&gt;CGI.pm&lt;/a&gt; in my perl-hacking days.

When I start writing &lt;i&gt;code&lt;/i&gt; to generate &lt;i&gt;data&lt;/i&gt; that could be mostly done with a template, it strikes me as tangling Model/View/Controller elements and introducing weird context shifts.  (ie. h1() vs &amp;lt;h1 /&amp;gt;)  Not sure if that made sense...&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221084929&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.sporkmonger.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=56ee28134dd0776825445e3551979b14&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.sporkmonger.com&quot;&gt;Bob Aman&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221084929&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2005-09-26T05:40:24&quot;&gt;2005-09-26T05:40:24&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;Yeah, I was gonna say, Builder for Ruby solves most of the issues with using templates and xml.  For RSS and Atom, there's also my Ruby FeedTools library, which makes it even more rediculously easy to get a valid feed up and running.

I'm also very tempted to play around with Kid and see how I like it, and perhaps port it to Ruby.  From what I've seen so far, it looks like perhaps the nicest templating system yet.&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221084930&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://plasmasturm.org/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=e17949267bbfe21a0fadf1bbf00592b4&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://plasmasturm.org/&quot;&gt;Aristotle Pagaltzis&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221084930&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2005-09-26T05:59:08&quot;&gt;2005-09-26T05:59:08&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;It does. I confess I actually kind of liked &lt;a href=&quot;http://search.cpan.org/dist/CGI.pm/&quot; rel=&quot;nofollow&quot;&gt;CGI.pm&lt;/a&gt; &amp;#8211; because nesting is automatically taken care of without so much typing of end tags, and you can seamlessly weave &lt;code&gt;map&lt;/code&gt;s into the code for output loops.

I have to note though that I used it as a sort of template language in its own right &amp;#8211; I never littered &lt;code&gt;print&lt;/code&gt;s all over my code, I kept all the calls in a single place, in fact, usually a single expression. That is also why I find it strange that people create template languages for PHP, which was itself born as a template language. What matters is that the output generation is separate from the processing logic, whether or not the template and the code are in different languages.

Anyway, I digress.

What I wanted to say is, no, I hadn&amp;#8217;t seen either ZPT or Kid. I had put off reading the lesscode.org article you quoted and went back to it after responding here. Now that I&amp;#8217;ve read it, I admit I&amp;#8217;m intrigued. I&amp;#8217;ll have to look into Kid; it sounds like an interesting take.&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221084931&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2377f34a68801b861c3e54e1301f0dce&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;l.m.orchard&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221084931&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2005-09-26T13:39:00&quot;&gt;2005-09-26T13:39:00&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;blockquote&gt;What matters is that the output generation is separate from the processing logic, whether or not the template and the code are in different languages.&lt;/blockquote&gt;

Ah hah, yeah, that's what I was fumbling toward with the sleepy tail-end of my comment.  Logic and presentation in separate blocks / files / etc.  And then, my take is that if you're going to have your presentation/view separate from the logic/controller, you may as well code the presentation in a form as close to the goal as possible (ie. in XML or HTML, not in s-expressions or the logic implementation idiom)—especially since oftimes you've got separate people or teams working primarily on each.

I suspect, however, that a templating system like Kid goes quite a ways toward solving the problem of &quot;gluing strings together&quot;.  I almost wish it had been further along / I'd been more aware of it before I'd reinvented my own wheels for my book using Python string templates and funky map classes.&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221084932&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://naeblis.cx/rtomayko/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=abfc88b96ae18c85ba7aac3bded2ec5e&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://naeblis.cx/rtomayko/&quot;&gt;Ryan Tomayko&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221084932&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2005-09-26T19:00:44&quot;&gt;2005-09-26T19:00:44&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;blockquote&gt;I suspect, however, that a templating system like Kid goes quite a ways toward solving the problem of “gluing strings together”.&lt;/blockquote&gt;

That's the idea. The correctness of DOM/SAX based contruction with the ease-of-use of templating. The future of Kid is somewhat uncertain. I'm hoping to wrap up 1.0 and stabalize it for Kevin and TurboGears but what I'd personally really love to see is the general concept of &quot;structured templating&quot; reach a wider audience.&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221084933&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://naeblis.cx/rtomayko/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=abfc88b96ae18c85ba7aac3bded2ec5e&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://naeblis.cx/rtomayko/&quot;&gt;Ryan Tomayko&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221084933&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2005-09-26T19:02:17&quot;&gt;2005-09-26T19:02:17&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;Oops. Sorry about the rough formatting. For some reason I thought comments were in markdown. Edit away, Leslie.&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221084934&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2377f34a68801b861c3e54e1301f0dce&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;l.m.orchard&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221084934&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2005-09-26T19:11:20&quot;&gt;2005-09-26T19:11:20&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;Ryan:  Grr.  Funny you should mention that—I thought comments around here allowed markdown, too.  I think I need to fix that *and* display some copy explaining markdown availablility, since I think that was something about which Aristotle expressed some confusion/surprise before as well.&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221084935&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://plasmasturm.org/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=e17949267bbfe21a0fadf1bbf00592b4&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://plasmasturm.org/&quot;&gt;Aristotle Pagaltzis&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221084935&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2005-09-26T20:29:12&quot;&gt;2005-09-26T20:29:12&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;blockquote&gt;if you&amp;#8217;re going to have your presentation/view separate from the logic/controller, you may as well code the presentation in a form as close to the goal as possible&lt;/blockquote&gt;

Oh, I don&amp;#8217;t disagree at all.

I have been annoyed at the state of XML generation at large, myself. Kid looks very nice, except I have no use for it, being that I&amp;#8217;m still a Perlista. (Python just doesn&amp;#8217;t feel right to me &amp;#8211; like wearing a badly fitting tuxedo.)

I&amp;#8217;m wondering how much work it would be to port it or a close copy to Perl&amp;#8230;

&lt;blockquote&gt;I think that was something about which Aristotle expressed some confusion/surprise before as well.&lt;/blockquote&gt;

Heh, yeah. Your MT installation permitted Markdown but no literal tags, which caught me off guard once or twice until I noticed. But thankfully it had a preview button, so I could figure it out. I &lt;strong&gt;&lt;em&gt;hate&lt;/em&gt;&lt;/strong&gt; how WordPress does not ship with preview button available and enabled by default, and the default configuration doesn't even mention the expected formatting anywhere either.

I just suspected that your WordPress was vanilla and used HTML on that hunch &amp;#8211; and it worked. Phew. Maybe you can install the gagdget that Ryan uses on lesscode.org? I love that.&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221084936&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2377f34a68801b861c3e54e1301f0dce&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;l.m.orchard&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221084936&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2005-09-26T21:38:08&quot;&gt;2005-09-26T21:38:08&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;blockquote&gt;
  &lt;p&gt;I just suspected that your WordPress was vanilla and used HTML on that hunch – and it worked. Phew. Maybe you can install the gagdget that Ryan uses on lesscode.org? I love that.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Your wish is my command.  At least, in this instance.  I pawed through Ryan's HTML source and got sufficient clues to install this thing and shamelessly steal a snippet or two.  Let's see if this preview works and if it accurately reflects what this will look like when I post...&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221084937&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.emacswiki.org/alex/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=73d2617de46d85c306dbdf533b72fded&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.emacswiki.org/alex/&quot;&gt;Alex Schröder&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221084937&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2005-09-27T11:22:06&quot;&gt;2005-09-27T11:22:06&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;I maintain Oddmuse, a wiki engine written in Perl, using CGI.pm to generate the HTML.  Often people want me to switch to templates.  At the moment, when you want to radically change the HTML for the stuff that is not the wiki content, ie. headers and footers, you need to override the Perl subs that I provide.  Somehow that strikes me as natural and easy, but many of my users seem to disagree, preferring to learn a templating system instead of learning to write Perl code.  I'm still undecided about the issue.  At the moment I'm still sticking to the &quot;write Perl code instead of templating&quot; because being able to write Perl code will make so many other task easy.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221084938&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2377f34a68801b861c3e54e1301f0dce&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;l.m.orchard&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221084938&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2005-09-27T11:31:23&quot;&gt;2005-09-27T11:31:23&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Alex:  Well, from my perspective, I've worked on a lot of teams where you've essentially got two roles—software engineer (SE) and interface engineer (IE).  Depending on the company and the team, the SE might understand Perl/Python/Java/SQL while the IE might understand HTML/CSS/Javascript/Flash.  There's usually overlap, of course, but these are the roles on paper at least.&lt;/p&gt;

&lt;p&gt;When you're trying to come up with an overarching framework which accomodates collaboration between these two sorts of people and their respective skill sets, it helps to have a bridge between the logic and the presentation which can keep the Perl out of the HTML and the HTML out of the Perl.&lt;/p&gt;

&lt;p&gt;On the other hand...  A project like Oddmuse likely has an entirely different user and developer base than the projects I work on at my day job :)&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;/ul&gt;
    
        &lt;/div&gt;



</content>
    </entry>
    
    

    <entry>
        <title>Hacking RSS and Atom is out!</title>
        <link href="http://decafbad.com/blog/2005/09/13/hacking-rss-and-atom-is-out"/>
        <updated>2005-09-13T23:45:47+00:00</updated>
        <id>http://decafbad.com/blog/2005/09/13/hacking-rss-and-atom-is-out</id>
        <content type="html">&lt;p&gt;If you've been following along with me these past months, you might've gotten the gist that &lt;a href=&quot;http://www.decafbad.com/blog/2005/04/25/hacking-rss-and-atom-is-a-real-book&quot;&gt;I've been working on a book&lt;/a&gt;.  Well, lookee what landed on my doorstep late Friday afternoon--my author copies!&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://www.decafbad.com/blog_attachments/IMG_3554-1.JPG&quot; onclick=&quot;window.open('http://www.decafbad.com/blog_attachments/IMG_3554-1.JPG','popup','width=1024,height=768,scrollbars=no,resizable=yes,toolbar=no,directories=no,location=no,menubar=no,status=yes,left=0,top=0');return false&quot;&gt;&lt;img src=&quot;http://www.decafbad.com/blog_attachments/IMG_3554-1-tm.jpg&quot; height=&quot;253&quot; width=&quot;337&quot; border=&quot;1&quot; align=&quot;middle&quot; hspace=&quot;4&quot; vspace=&quot;4&quot; alt=&quot;Cue the angelic chorus&quot; title=&quot;Cue the angelic chorus&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;


&lt;p&gt;This package was actually supposed to have been delivered on Thursday.  But, much to my consternation, I wasn't present to sign for the package.  But now, I've got the surreal experience of holding a bound volume of around 600 pages with my name on the cover.  And inside?  There's all this stuff that once appeared on my PowerBook screen in MS Word and Terminal windows.  (Oh yeah, and there're a few photos of my iPod thrown in for good measure.)&lt;/p&gt;

&lt;p&gt;Funny thing is, this process started for me back in late &lt;a href=&quot;http://www.decafbad.com/blog/2004/12/&quot;&gt;December 2004&lt;/a&gt;.  But, you'd barely know it, because--for whatever reason--I started off pretty cagey about the whole thing, and then plunged headlong into the effort.  I did manage to make &lt;a href=&quot;http://www.decafbad.com/blog/2005/01/07/belated-happy-new-year&quot;&gt;a quick announcement of authorship&lt;/a&gt;, but thereafter only managed to emerge for a few &lt;a href=&quot;http://www.decafbad.com/blog/2005/02/19/writing-no-things-of-epic-import&quot;&gt;quick thought dumps&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I think part of my silence about things stemmed from a reticence to talk about or promise anything before I'd written it--and also because this has been my first time doing anything like this and I didn't want to flub anything up along the way.  How I might've done that, who knows?  But, I got a bit too busy to really worry about superstitions as the deadlines rolled on.&lt;/p&gt;

&lt;p&gt;But now, it's out!  And &lt;a href=&quot;http://www.amazon.com/exec/obidos/ASIN/0764597582/0xdecafbad01-20?creative=327641&amp;amp;camp=14573&amp;amp;link_code=as1&quot;&gt;you should buy it!&lt;/a&gt;  Lookee, lookee:  It's already got a 5-star review from someone I don't even know!&lt;/p&gt;

&lt;p&gt;For the moment, I'm going to wrap up this post, finish my dinner, and go for a walk with the girl--but, when we get back, I think I might post a few more details on what you'll find in my book debut.&lt;/p&gt;

&lt;div id=&quot;comments&quot; class=&quot;comments archived-comments&quot;&gt;
            &lt;h3&gt;Archived Comments&lt;/h3&gt;
            
        &lt;ul class=&quot;comments&quot;&gt;
            
        &lt;li class=&quot;comment&quot; id=&quot;comment-221082500&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://monkey.org/~jose/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=d74863ca9c7785cd396379766095036c&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://monkey.org/~jose/&quot;&gt;jose&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221082500&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2005-09-14T01:03:36&quot;&gt;2005-09-14T01:03:36&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;congrats, les, if anyone should have written that book it's you. i'm glad to see it's hit the shelves .. now to go find a copy and look it over :)&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221082501&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://stingthebee.nu&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=0c6c4240507baf594a95fd3b25b975d2&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://stingthebee.nu&quot;&gt;Jim Renaud&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221082501&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2005-09-14T01:54:39&quot;&gt;2005-09-14T01:54:39&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;Congrats Les. I am gonna need you to autograph mine!!! New site design, new box, new CMS... The world is your oyster!!! It's Les' world, we just live in it!!!&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221082503&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.livejournal.com/users/blackcustard/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=96dd5db5ebd7a91a5df453707ffa8d8d&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.livejournal.com/users/blackcustard/&quot;&gt;Matt Blackcustard&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221082503&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2005-09-14T02:52:08&quot;&gt;2005-09-14T02:52:08&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;Hell yeah!&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221082505&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.8dot3.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2d870e8df3af0d62fa636b336b17cd60&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.8dot3.com&quot;&gt;Nick&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221082505&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2005-09-14T04:15:22&quot;&gt;2005-09-14T04:15:22&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;Just ordered mine...whens the book signing?..

Congrats man..&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221082507&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://10500bc.org&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=00ceff438a69a964d580f8384debcc0e&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://10500bc.org&quot;&gt;nf0&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221082507&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2005-09-19T21:41:49&quot;&gt;2005-09-19T21:41:49&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;I got my copy over the weekend. Some really good work!&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221082508&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2377f34a68801b861c3e54e1301f0dce&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;l.m.orchard&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221082508&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2005-09-19T22:50:23&quot;&gt;2005-09-19T22:50:23&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;nf0: Hooray!  Thanks for the kudos :)&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;/ul&gt;
    
        &lt;/div&gt;



</content>
    </entry>
    
    

    <entry>
        <title>Building an Address Book as a Modern Web App</title>
        <link href="http://decafbad.com/blog/2004/12/23/abook1"/>
        <updated>2004-12-23T05:58:41+00:00</updated>
        <id>http://decafbad.com/blog/2004/12/23/abook1</id>
        <content type="html">&lt;p&gt;&lt;img src=&quot;http://www.decafbad.com/2004/12/abook-architecture.jpg&quot; align=&quot;right&quot; /&gt;&lt;/p&gt;

&lt;p&gt;So, in the spirit of &lt;a href=&quot;http://www.decafbad.com/blog/2004/11/30/picoprojects_and_trepanation&quot;&gt;pico-projects&lt;/a&gt;, I've started building &lt;a href=&quot;http://www.decafbad.com/blog/2004/11/30/nextgenwebapps&quot;&gt;that address book application&lt;/a&gt; I mentioned awhile ago and I want to start writing about it as I go.&lt;/p&gt;

&lt;p&gt;First off, hopefully you'll notice the quick diagram I threw together in OmniGraffle.  This is a sort of rough sketch of the loosely-joined architecture I want to explore with this thing.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Data&lt;/em&gt;: This is where address book entries live.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Model&lt;/em&gt;: A set of objects encapsulating the data, this is how address book entries will be accessed.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;REST API&lt;/em&gt;: Model objects exposed as resources identified by URI, serialized and deserialized as XML, and manipulated by GET / PUT / POST / DELETE methods.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;XSLT Filter&lt;/em&gt;: XML data produced by REST API calls can be first passed through XSL at a given URL before being served up as a response.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;HTML, CSS, JavaScript&lt;/em&gt;: Thanks to the XSLT filter layer, the XML vocabulary used to describe address book entries can be transformed into user interface presentation.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;HTTP&lt;/em&gt;: Everything happens via HTTP...&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Web Browser Client&lt;/em&gt;: ...and everything is viewed in a web browser.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Now, I call this a loosely-joined architecture because I want to stress that you should be able to swap out just about any part of this whenever you want.&lt;/p&gt;

&lt;p&gt;Want the &lt;em&gt;Data&lt;/em&gt; to be in MySQL?  Fine.  Want it to be in flat files?  Fine.  Just make sure the &lt;em&gt;Model&lt;/em&gt; can cope while maintaining a consistent interface for the &lt;em&gt;REST API&lt;/em&gt;.  Want to change the user interface in the browser?  Great-- ideally, all you have to do is change some XSLT files.  I'm writing everything from the &lt;em&gt;XSLT Filter&lt;/em&gt; down to the &lt;em&gt;Model&lt;/em&gt; in Python.  Don't like that?  Fine.  Rewrite it all in Perl, and hopefully everything from the XSLT up to the browser will still be useful to you.&lt;/p&gt;

&lt;p&gt;At some point, you might even want to ditch the browser for a native desktop client.  Fabulous! Just ignore everything past the &lt;em&gt;REST API&lt;/em&gt; and &lt;em&gt;HTTP&lt;/em&gt;, don't use any XSLT in the &lt;em&gt;Filter&lt;/em&gt;, and use the API and XML directly.&lt;/p&gt;

&lt;p&gt;I don't think any of this is particularly revolutionary-- although I thought it was when I first saw Amazon Web Services doing some of this, and I hope to throw a little GMail in as well.  I hope that this will all be useful as I muddle through explaining what I'm doing.  In the meantime, you can see me getting the stage set as I start checking things into my Subversion repository over here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.decafbad.com/svn/trunk/hacks/abook/&quot;&gt;http://www.decafbad.com/svn/trunk/hacks/abook/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;!--more--&gt;


&lt;p&gt;shortname=abook1&lt;/p&gt;

&lt;div id=&quot;comments&quot; class=&quot;comments archived-comments&quot;&gt;
            &lt;h3&gt;Archived Comments&lt;/h3&gt;
            
        &lt;ul class=&quot;comments&quot;&gt;
            
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085892&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://trikuare.cx/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=7d3d1e46aae8ca19855a6026d404b91d&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://trikuare.cx/&quot;&gt;fluffy&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085892&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2004-12-23T07:35:40&quot;&gt;2004-12-23T07:35:40&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;Don't forget that with XSLT you could also rewrite it to SyncML and vCard and so on, so you could also sync it with external devices and iSync (assuming Apple finally opens up a third-party conduit system in Tiger, preferably one which doesn't require .Mac to function).&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085894&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://eliot.landrum.cx&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=8b8f5370253bd0e0030154baa15785ed&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://eliot.landrum.cx&quot;&gt;eliot&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085894&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2004-12-23T09:12:34&quot;&gt;2004-12-23T09:12:34&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;I'm looking forward to what becomes of this little app. Address book apps seem to all be severely lacking (with the possible exception of OS X's app) and need some fresh thinking. Making the components flexible could be a great way for some change to come about. 

Keep us posted!&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085895&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2377f34a68801b861c3e54e1301f0dce&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com/&quot;&gt;l.m.orchard&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085895&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2004-12-23T12:41:13&quot;&gt;2004-12-23T12:41:13&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;Well, hopefully it's not too disappointing, but this address book app will be pretty anemic in terms of use as a serious app.  Implementing an address book is just an excuse to run through the various technologies involved.

However, there's nothing stopping anyone (including me) from enhancing the thing when I'm done and making it into a serious offering with vCard support and such.&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085896&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://webseitz.fluxent.com/wiki&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=8157a5907b244071cda98ba5aa7a9635&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://webseitz.fluxent.com/wiki&quot;&gt;Bill Seitz&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085896&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2004-12-27T12:23:46&quot;&gt;2004-12-27T12:23:46&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;(Hmm, posted last week but it never showed up...)

What are you thinking in terms of having this data store actually used by, say, your email client?

Make it look like an LDAP server, maybe?&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085898&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.chuckknows.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=6cede7ba6ff803837ba2da9cc6e466b6&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.chuckknows.com&quot;&gt;Chuck Conway&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085898&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2005-01-02T20:37:00&quot;&gt;2005-01-02T20:37:00&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;How Funny! I've been thinking about doing the same thing.

The only difference is I was thinking about doing address book, bookmarks and my RSS feeds. 

Those are the things I miss the most when I am away.&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085900&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.worldwide-sources.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=73de6d1640f8cae902843f4a753bcaee&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.worldwide-sources.com&quot;&gt;William&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085900&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2005-03-05T05:16:08&quot;&gt;2005-03-05T05:16:08&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;I'm curious to see where this little app is going its still needs more work&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085903&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://webseitz.fluxent.com/wiki&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=8157a5907b244071cda98ba5aa7a9635&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://webseitz.fluxent.com/wiki&quot;&gt;Bill Seitz&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085903&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2006-08-26T13:37:35&quot;&gt;2006-08-26T13:37:35&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;I see you working with Tarawa in there. Did you like it? Is it being worked on at all?&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;/ul&gt;
    
        &lt;/div&gt;



</content>
    </entry>
    
    

    <entry>
        <title>Cross-breeding XSLT and ZPT</title>
        <link href="http://decafbad.com/blog/2004/12/03/crossbreedingxsltzpt"/>
        <updated>2004-12-03T01:15:52+00:00</updated>
        <id>http://decafbad.com/blog/2004/12/03/crossbreedingxsltzpt</id>
        <content type="html">&lt;p&gt;I've recently been doing some side work involving Zope and, along with the rest of the suite of technologies it offers, I've been happy to be working with &lt;a href=&quot;http://dev.zope.org/Wikis/DevSite/Projects/ZPT/FrontPage&quot;&gt;Zope Page Templates&lt;/a&gt; again.  I dabbled with them a bit when they first came out, and a Zope-free implementation named &lt;a href=&quot;http://www.owlfish.com/software/simpleTAL/&quot;&gt;SimpleTAL&lt;/a&gt; was one of the core components of the iteration of my news aggregator which came before FeedReactor.&lt;/p&gt;

&lt;p&gt;Out of all the templating and content generation approaches I've used, Zope Page Templates are my favorite yet.  Pretty expressive, yet unobtrusive; nicely powerful, yet not quite something with which you'd want to write an entire application (&lt;a href=&quot;http://naeblis.cx/rtomayko/2004/12/02/a-note-on-template-design&quot;&gt;and that's a feature, not a bug&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;I've yet to be in a work-a-day team that uses ZPT-- but I can see where a lot of production, delegation, and integration issues would have gone much smoother had I used ZPT instead of &lt;a href=&quot;http://www.template-toolkit.org/&quot;&gt;Template Toolkit&lt;/a&gt; for the web app framework I created at a previous company.  (Though I do have to say TT2 is &lt;em&gt;very&lt;/em&gt; nicely done!)  And where I am now, I spend most of my days trying to pummel ASP 3.0 pages into some semblance of logic/presentation separation-- I would certainly dive at the chance to dump VBScript and &lt;code&gt;&amp;lt;% cruft %&amp;gt;&lt;/code&gt; for a bit of Python and ZPT.  (But, you know, &lt;em&gt;it's a living&lt;/em&gt;.)&lt;/p&gt;

&lt;p&gt;A close second favorite is XSLT.  I've really been hot on it lately, having worked it into the core of FeedReactor in place of SimpleTAL.  And in &lt;a href=&quot;http://www.decafbad.com/blog/2003/09/02/xsl_scraper&quot;&gt;other&lt;/a&gt; &lt;a href=&quot;http://www.decafbad.com/blog/2004/06/16/wishofthemonthclub1&quot;&gt;hacks&lt;/a&gt;, I've really come to appreciate it's role as a filter segment in pipelines between REST web services and &lt;a href=&quot;http://udell.roninhouse.com/bytecols/2001-08-15.html&quot;&gt;URL-as-command-line&lt;/a&gt; invocations.&lt;/p&gt;

&lt;p&gt;Granted, both ZPT and XSLT very different technologies, but they are often used in similar contexts.  More than once, I've wished that XSLT was as simple as ZPT (i.e. less verbose and intrusive, more document centered), and I've wished that ZPT had some of the features of XSLT (i.e. ability to be used as a transforming filter).&lt;/p&gt;

&lt;p&gt;Reading &lt;a href=&quot;http://naeblis.cx/rtomayko/2004/11/30/pythonic-xml-based-templating-language&quot;&gt;Ryan Tomayko's description of Kid&lt;/a&gt; got me thinking, and googling.  One thing I turned up from a mailing list archive asked about an &amp;#8220;&lt;a href=&quot;http://mail.zope.org/pipermail/zpt/2002-January/002651.html&quot;&gt;XSL implementation of TAL?&lt;/a&gt;&amp;#8221;  It struck me as a tad nutty at first, but then I started having inklings that just maybe it could be done.  (Whether it &lt;em&gt;should&lt;/em&gt; be done, well...)  But the kernel of the idea grabbed me: Instead of using &lt;a href=&quot;http://zope.org/Wikis/DevSite/Projects/ZPT/TALES%20Specification%201.3&quot;&gt;TALES path expressions&lt;/a&gt; to look up values in Pythonic space, why not use XPath expressions to look up values from a supplied XML document?&lt;/p&gt;

&lt;p&gt;This strikes me as such an obvious idea that someone has to already have done it and possibly rejected it for good reason.  On the other hand, maybe this is the sort of thing Ryan's thinking about-- I wonder how hard it would be to hack this into Kid?  It would give only a subset of XSLT's capabilities in trade for simplicity, and would only offer the &amp;#8220;&lt;a href=&quot;http://www.dpawson.co.uk/xsl/sect2/pushpull.html&quot;&gt;pull&lt;/a&gt;&amp;#8221; approach, but it would give XML-pipelining to a ZPT-ish technology.&lt;/p&gt;

&lt;p&gt;I think this is something I want to look into a bit further at some point.&lt;/p&gt;

&lt;!--more--&gt;


&lt;p&gt;shortname=crossbreedingxsltzpt&lt;/p&gt;

&lt;div id=&quot;comments&quot; class=&quot;comments archived-comments&quot;&gt;
            &lt;h3&gt;Archived Comments&lt;/h3&gt;
            
        &lt;ul class=&quot;comments&quot;&gt;
            
        &lt;li class=&quot;comment&quot; id=&quot;comment-221087930&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://blog.ianbicking.org&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=cc8334869c9d2a9e603017f2da805eb3&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://blog.ianbicking.org&quot;&gt;Ian Bicking&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221087930&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2004-12-04T17:16:09&quot;&gt;2004-12-04T17:16:09&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;I've been meaning to write about this on my blog, as I've done something similar.

Instead of using XSLT, I've used ZPT for the transformations.  It was an application where the user created a document in a WYSIWYG editor, then we wanted to pull information out of the content -- like a table of contents, or a title.

To do this I parsed the content into a DOM, then put some objects in the ZPT namespace that manipulated it.  For instance, the ToC object took a tag name (through getitem) and returned a list of the content and id of those tags (it created ids if necessary, modifying the content).  Then you could easily create a ToC by looking through and creating anchor tags from, say, all the  tags in the document.  It should be easy to expand with other transformations (all coded in Python, of course).  The actual code was only like 20 lines of Python, maybe less, and easy to understand from both sides (ZPT and Python).&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221087932&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=14076d6ce3d0e8a0fd751a36d9912df5&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;Petri Savolainen&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221087932&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2004-12-13T05:21:41&quot;&gt;2004-12-13T05:21:41&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;See http://zope.org/Members/DaddyGravity/PT_XPath

It would be great to have that in SimpleTAL, too.&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221087935&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://blog.ianbicking.org&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=cc8334869c9d2a9e603017f2da805eb3&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://blog.ianbicking.org&quot;&gt;Ian Bicking&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221087935&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2004-12-13T11:43:33&quot;&gt;2004-12-13T11:43:33&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;Another thing you might want to look at: in the last few days there's been discussion on the ZPT mailing list about an extension to stylesheets (TERSE) for ZPT that introduces transformations.&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221087937&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://codeconsult.ch/bertrand&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=d244e495717742bd0776b715a45877eb&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://codeconsult.ch/bertrand&quot;&gt;Bertrand Delacretaz&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221087937&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2004-12-13T15:15:55&quot;&gt;2004-12-13T15:15:55&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;FYI, people from the Apache Cocoon and BXE projects are working on similar stuff, in the opposite direction: we're taking TAL-like templates and converting them to XSLT, adding simple &quot;match&quot; templates for declarative rules. It's only prototypes and experiments for now, but the results look promising.

More info at
http://wiki.apache.org/cocoon/HtmlToXsltExperiments
and
http://blog.bitflux.ch/archive/further-improvements-on-xsl-tal.html&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221087939&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.manuzhai.nl/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=d62bb8855d45ab52fd5a414f0ca47703&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.manuzhai.nl/&quot;&gt;Manuzhai&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221087939&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2004-12-13T16:07:54&quot;&gt;2004-12-13T16:07:54&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;I like XSLT a lot, myself, and I have advocated it in the past on my weblog, but it just doesn't seem to be very wide-spread. Which is a pity, I think the world would be much easier if more people used this *standard* way of templating.

One of the bigger problems with it seems to be the verbosity, so I've been thinking of a more compact syntax, kind of like RELAX NG has the .rnc compact stuff. I don't know if it's very feasible, but it seems like that would be not very hard; just have some compact syntax which maps onto a real XSLT-sheet (it could be &quot;compiled&quot; and cached, if need be).&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221087942&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.owlfish.com/weblog/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=377cef4245e0fcbf76e021d9cd253e35&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.owlfish.com/weblog/&quot;&gt;Colin Stewart&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221087942&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2004-12-13T23:47:18&quot;&gt;2004-12-13T23:47:18&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;Integrating an XPATH implementation into SimpleTAL shouldn't be too hard as the TALES and TAL implementations share a fairly simple interface.  There are 6 methods you'd have to provide to the simpleTAL module and that's about it.

I don't know if XPATH is the right approach though - how would things like tal:define work if the paths were pure XPATH instead of TALES?  Being able to mix XPATH and TALES would work better I think.

A more promising approach would be to integrate ElementTree so that the 'find*' methods were usable from within TALES.  Making it so that '/mydoc/root/find/.//searchElement' works would be fairly easy, but getting '/mydoc/root/find/.//searchElement/attrib/firstAtt' to work would require more co-operation between ElemenTree and SimpleTAL.

I'll have a think about this though as it sounds like a promising approach.&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221087946&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=d67eea2ce18dd70f4642cb971c2c5ad2&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;Paul Everitt&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221087946&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2004-12-14T00:45:18&quot;&gt;2004-12-14T00:45:18&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;Chapter 11 of Jeni Tennison's &quot;XSLT and XPath On The Edge&quot; book has a section called &quot;Using Page Templates&quot;.  It includes an example of using substitution points.

Like some of the others in this thread, playing with doing merges using DOM IDs and other patterns.  This lets you write &quot;themes&quot; that are simpler than even ZPT, as they contain no non-XHTML namespace elements.

Thanks for the article, which also seems to have brought out some interesting comments and URLs!&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221087948&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://webseitz.fluxent.com/wiki&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=8157a5907b244071cda98ba5aa7a9635&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://webseitz.fluxent.com/wiki&quot;&gt;Bill Seitz&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221087948&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2004-12-14T20:23:08&quot;&gt;2004-12-14T20:23:08&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;Don't forget you can run Python within IIS/ASP!

http://webseitz.fluxent.com/articles/PythonViaIis&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221087950&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.owlfish.com/weblog/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=377cef4245e0fcbf76e021d9cd253e35&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.owlfish.com/weblog/&quot;&gt;Colin Stewart&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221087950&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2004-12-15T22:49:30&quot;&gt;2004-12-15T22:49:30&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;I've put together an experimental build of SimpleTAL that integrates ElementTree to provide some of the XPATH syntax.  It's just an experiment, but see what you think.

(More detail here: http://www.owlfish.com/weblog/2004/12/15122004.html#20:59:59)&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;/ul&gt;
    
        &lt;/div&gt;



</content>
    </entry>
    
    

    <entry>
        <title>Next generation web apps using REST, XML, XSLT, and XmlHTTPRequest</title>
        <link href="http://decafbad.com/blog/2004/11/30/nextgenwebapps"/>
        <updated>2004-11-30T21:53:35+00:00</updated>
        <id>http://decafbad.com/blog/2004/11/30/nextgenwebapps</id>
        <content type="html">&lt;p&gt;So, like I was saying:  I've been working on &lt;a href=&quot;http://www.decafbad.com/kwiki?FeedReactor&quot;&gt;FeedReactor&lt;/a&gt; and have been doing some things with it that I find rather interesting, independent of news aggregation.&lt;/p&gt;

&lt;p&gt;One of the core goals I have for FeedReactor is to explore what it takes to build a web app that exploits &lt;a href=&quot;http://www.xfront.com/REST-Web-Services.html&quot;&gt;principles of REST architecture&lt;/a&gt;.  Having already &lt;a href=&quot;http://www.decafbad.com/blog/tech/old/oooccb&quot;&gt;sung the praises&lt;/a&gt; of XML-RPC, I wanted to get immersed in REST and see what all the hubbub was about.  I've got some ways to go, but I think I understand the major concepts now, and it's a pretty nifty frame within which to work.&lt;/p&gt;

&lt;p&gt;But, two other things I've added to my mix have really made things interesting for me:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;XSLT filtering&lt;/li&gt;
&lt;li&gt;The XmlHTTPRequest object&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;XSLT and REST make a really good pair, as &lt;a href=&quot;http://www.decafbad.com/blog/2004/06/16/wishofthemonthclub1&quot;&gt;Amazon Web Services already demonstrate&lt;/a&gt;.  Inspired by that API (&lt;a href=&quot;http://www.decafbad.com/blog/2003/09/02/xsl_scraper&quot;&gt;and earlier experiments&lt;/a&gt;), I use XML for all the input and output formats in my API and accept a query string parameter that contains the path to an XSLT file.  When this parameter is supplied, the XML output by the API is first processed using the given XSLT.  (Think of it like piping API output through &lt;code&gt;xsltproc&lt;/code&gt;.)&lt;/p&gt;

&lt;p&gt;So, with a properly constructed collection of XSLT, I can present a browser-viewable HTML user interface served up directly from REST API calls.  Links, frame sets, and iframes present in the HTML lead the user from that call to the next XSLT-wrapped REST API call.&lt;/p&gt;

&lt;p&gt;But, once the initial HTML-and-JavaScript payload reaches the browser, it gets better (&lt;a href=&quot;http://www.infoworld.com/article/04/10/22/43OPstrategic_1.html&quot;&gt;ala Gmail&lt;/a&gt;):&lt;/p&gt;

&lt;p&gt;On older browsers (if I happen to care about them), I can make new HTTP requests back to the server &lt;a href=&quot;http://developer.apple.com/internet/webcontent/iframe.html&quot;&gt;from JavaScript using iframes&lt;/a&gt;.  In this case, XSLT filtering lets me retrofit the API's responses to the HTML-and-JavaScript crud I need to serve up to make things happen back in the browser client.  Unfortunately, passing data &lt;em&gt;to&lt;/em&gt; the API (which expects XML, not form submissions) is still a bit wonky and requires some hacks and exceptions involving hidden forms and such.&lt;/p&gt;

&lt;p&gt;However, on the newer browsers, it's all about the &lt;a href=&quot;http://developer.apple.com/internet/webcontent/xmlhttpreq.html&quot;&gt;XmlHTTPRequest object&lt;/a&gt;.  With this facility, I can make clean asynchronous requests back to the REST API, including XML data in the request body if I feel like it.  Responses are handled by JavaScript callbacks, which twiddle the browser DOM to update the user interface in response.&lt;/p&gt;

&lt;p&gt;So, after the major initial contact with the API to supply the browser with HTML by way of XSLT, most future interactions take place in the form of direct calls to the REST API using XML.  Although for some things, it's easier to just reload a page of HTML, it's nicer for most interactions to be handled via DOM manipulations in-place.  I've been amazed at the Gmail-like responsiveness I get from FeedReactor when I'm skimming through news items, marking some as seen or flagged, and popping open the descriptions on others.&lt;/p&gt;

&lt;p&gt;I suppose I &lt;em&gt;shouldn't&lt;/em&gt; be amazed at the responsiveness, since I'm using some of the same techniques as Gmail.  However, my daily-use installation of FeedReactor is presently running on an old 300Mhz Debian Linux PC at home, and it's taking me through the daily produce of 600 subscribed feeds faster than any desktop aggregator has yet.  Of course, this is partly a product of my familiarity with the UI I've cobbled together, but... &lt;em&gt;the server's running on a 300Mhz PC with 256MB of RAM!&lt;/em&gt;  And the client is my 867Mhz G4 PowerBook, running Firefox or Safari, depending on my mood.&lt;/p&gt;

&lt;p&gt;Although I can't see when I'll have time for it, I really want to explore this approach further using desktop apps on OS X and accessing the API from Flash movies (maybe using &lt;a href=&quot;http://openlaszlo.org/&quot;&gt;Laszlo&lt;/a&gt;).  I'd also like to see how far I can go toward adapting the interface toward mobile devices like my Treo 600.&lt;/p&gt;

&lt;p&gt;So anyway, this has been where most of my private hacking sessions have been taking me over the past year or so:  combining HTML, CSS, DOM, JavaScript, XML, XSLT, and REST to build what I consider to be a next-generation web app.&lt;/p&gt;

&lt;p&gt;Now, although I use FeedReactor on a daily basis to keep up with all my feeds, it's nowhere near any state suitable for public consumption.  I add new subscriptions from a command-line script and still fiddle with the database directly for some operations.  I'd like to have a personal-server version of it ready for use by some alpha geeks before or not long into the new year, but I'd like to share some of the things I've been doing with it before then.&lt;/p&gt;

&lt;p&gt;With that in mind, I think I'll wrap up this entry and think about putting together a quick tutorial pico-project to demonstrate some of the concepts.  Maybe an address book, or something equally simple-yet-useful.&lt;/p&gt;

&lt;p&gt;Stay tuned.&lt;/p&gt;

&lt;!--more--&gt;


&lt;p&gt;shortname=nextgenwebapps&lt;/p&gt;

&lt;div id=&quot;comments&quot; class=&quot;comments archived-comments&quot;&gt;
            &lt;h3&gt;Archived Comments&lt;/h3&gt;
            
        &lt;ul class=&quot;comments&quot;&gt;
            
        &lt;li class=&quot;comment&quot; id=&quot;comment-221089601&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.ricebridge.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=a57fe535201a5daca9590abd68d490c7&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.ricebridge.com&quot;&gt;Richard Rodger&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221089601&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2004-12-01T08:14:39&quot;&gt;2004-12-01T08:14:39&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;You should take a look at http://www.json.org which provides a really nice JavaScript-native way to exchange data using XMLHttpRequest.&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221089609&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://fiftyfly.mine.nu&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=c1e58f891708437e94407f573639094c&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://fiftyfly.mine.nu&quot;&gt;mike&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221089609&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2004-12-01T14:23:44&quot;&gt;2004-12-01T14:23:44&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;This is def a powerful set of techniques. I hadn't worked with a lot of javascript in several years but recently I'd wanted to put a cleaner face on my proof of concept request icecast station: http://fiftyfly.mine.nu/RFM . An off hand comment somone had made regarding XMLHTTPRequest sounded so interesting I had to give it some thought. The result can be found here: http://fiftyfly.mine.nu/RFMamp.html . Faster, cleaner, far more flexible - this excercise has made me think about web services in a way I hadn't previously. Consider my eyes opened ;)&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;/ul&gt;
    
        &lt;/div&gt;



</content>
    </entry>
    
    

    <entry>
        <title>Using iTunes as a podcast aggregator, with a little help from XSLT</title>
        <link href="http://decafbad.com/blog/2004/10/08/itunesxslt"/>
        <updated>2004-10-08T17:07:49+00:00</updated>
        <id>http://decafbad.com/blog/2004/10/08/itunesxslt</id>
        <content type="html">&lt;p&gt;So I had an idea for a quick podcasting listening hack on the way into work this morning. Check it out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Take one &lt;a href=&quot;http://www.decafbad.com/2004/10/podcasts.opml&quot;&gt;list of RSS feeds in OPML&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Throw in &lt;a href=&quot;http://www.decafbad.com/2004/10/opml-to-playlist.xsl&quot;&gt;a bit of XSLT&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Combine using &lt;code&gt;xsltproc&lt;/code&gt; to make &lt;a href=&quot;http://www.decafbad.com/2004/10/podcasts.pls&quot;&gt;a playlist&lt;/a&gt; that works in iTunes.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;And, oh yeah, I just happen to have an &lt;code&gt;xsltproc&lt;/code&gt; web service laying around, so:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Supply a URL to your OPML in &lt;a href=&quot;http://www.decafbad.com/2004/10/xsltproc.cgi?xsl=http%3A%2F%2Fwww.decafbad.com%2F2004%2F10%2Fopml-to-playlist.xsl&quot;&gt;this form&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Get a &lt;a href=&quot;http://www.decafbad.com/2004/10/xsltproc.cgi?xsl=http%3A%2F%2Fwww.decafbad.com%2F2004%2F10%2Fopml-to-playlist.xsl&amp;amp;#38;xml=http%3A%2F%2Fwww.decafbad.com%2F2004%2F10%2Fpodcasts.opml&quot;&gt;freshly-built playlist&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Now, this has been barely tested and is the product of a ten-minute hacking session.  There are likely an enormous number of things wrong with this.  That said, iTunes does seem to open the playlist happily, and it looks like only new streams are added with repeated openings of the playlist.&lt;/p&gt;

&lt;p&gt;You will want to be careful to ensure that your OPML is valid XML (mine wasn't, on initial export from iPodderX - escape those freaking ampersands in URLs already!), and I have no idea what would happen if any of the RSS feeds in your subscriptions turn up invalid.&lt;/p&gt;

&lt;p&gt;Have I mentioned that, despite their unforgiving and sometimes fragile nature, I love XML technologies?&lt;/p&gt;

&lt;p&gt;If this looks useful, maybe I'll work it over a bit more and pair it up with some python to handle actually downloading the MP3s and torrents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Oh yeah, and I'm expecting this will be useful with an iTunes smart playlist crafted along these lines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Date Added in the last 1 days&lt;/li&gt;
&lt;li&gt;Play Count is less than 1&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;strong&gt;Update #2:&lt;/strong&gt; Another use I just found for this playlist, is on my &lt;a href=&quot;http://www.xboxmediacenter.com/&quot;&gt;Xbox Media Center&lt;/a&gt;.  I generate this playlist via cronjob every few hours, and store it on an SMB share accessible to the XBMC.  Voila!  Listening to podcasts on my stereo system via the Xbox.  Yeah, nothing big, just kind of nifty.&lt;/p&gt;

&lt;!--more--&gt;


&lt;p&gt;shortname=itunesxslt&lt;/p&gt;

&lt;div id=&quot;comments&quot; class=&quot;comments archived-comments&quot;&gt;
            &lt;h3&gt;Archived Comments&lt;/h3&gt;
            
        &lt;ul class=&quot;comments&quot;&gt;
            
        &lt;li class=&quot;comment&quot; id=&quot;comment-221090734&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=a5cae412b649470abb8827c85ef2d4c8&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;Kevin&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221090734&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2004-10-21T10:32:55&quot;&gt;2004-10-21T10:32:55&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;This is a great idea...  My playlist seems to be formated all wrong, so i need to work on it.  Any advancements on this one?&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;/ul&gt;
    
        &lt;/div&gt;



</content>
    </entry>
    
    

    <entry>
        <title>dbagg3: Please excuse the mess</title>
        <link href="http://decafbad.com/blog/2004/09/17/dbagg3mess"/>
        <updated>2004-09-17T13:32:30+00:00</updated>
        <id>http://decafbad.com/blog/2004/09/17/dbagg3mess</id>
        <content type="html">&lt;p&gt;Wow.  So it looks like there are some people starting to follow to what I'm doing with &lt;code&gt;dbagg3&lt;/code&gt;, and they're showing me how woefully prepared I am for the attention from tinkerers who are actually trying to, you know, &lt;strong&gt;run&lt;/strong&gt; my code.  Things have been crazy busy for me at work, so I haven't been getting done what I've planned.  But, I do need to pull a few things together and clean a few things up.  I'll soon be answering the smattering of email I've gotten so far, but until then, a few quick thoughts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;My source control is a bit of a mess at the moment.  Not only have I &lt;a href=&quot;http://www.decafbad.com/blog/2004/09/16/moving_time_from_cvs_to_subversion&quot;&gt;switched from CVS to SVN&lt;/a&gt;-- but even if you followed me in that migration, I've not kept committed code in working order.  I already know that this is a horrible habit, but since no one's really been looking, I haven't been called on it until now.  (Heh, heh--d'oh.)  Planning this weekend (but hopefully today) to resolve this, so that moving forward, svn trunk will be (as far as possible) in a working state at any given moment.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I've hacked one of my dependencies, SQLObject, by applying &lt;a href=&quot;http://sourceforge.net/mailarchive/message.php?msg_id=9122066&quot;&gt;a patch&lt;/a&gt; to support SELECT DISTINCT queries.  This has understandably caused problems for some people who have no idea what I did.  This patch has turned out to be essential, though I don't know if/when it will or would be included in a release of SQLObject.  So...  I wonder if I should dump my working copy of SQLObject into source control?  Otherwise, applying the DISTINCT patch to your SQLObject install should work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;At some point very soon, I want to change the name of this thing to &lt;strong&gt;feedReactor&lt;/strong&gt;.  Yes, I know there's already a &lt;em&gt;feedparser&lt;/em&gt;, and a &lt;em&gt;feeddemon&lt;/em&gt;, and a &lt;em&gt;feedburner&lt;/em&gt;, and someone's probably got a &lt;em&gt;feedkitchensink&lt;/em&gt; in the works, but I like this name and want to run with it.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;So, in the meantime while I straighten some things out, please excuse the mess and thanks for bearing with me!&lt;/p&gt;

&lt;!--more--&gt;


&lt;p&gt;shortname=dbagg3mess&lt;/p&gt;

&lt;div id=&quot;comments&quot; class=&quot;comments archived-comments&quot;&gt;
            &lt;h3&gt;Archived Comments&lt;/h3&gt;
            
        &lt;ul class=&quot;comments&quot;&gt;
            
        &lt;li class=&quot;comment&quot; id=&quot;comment-221083379&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=1229fe3e2959517f522393889bedbf61&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;Christian Henz&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221083379&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2004-09-18T06:25:13&quot;&gt;2004-09-18T06:25:13&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;I think having a copy of your SQLObject tree would be most helpful.

First of all, that patch applies (or at least _did_ apply a few weeks ago) to their development version, while you're using the 0.5 Version, right? 

I also 'back-ported' the patch to 0.5.2 (only the distinct part though), but I'm still getting errors...


cheers,
Christian&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221083380&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=1229fe3e2959517f522393889bedbf61&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;Christian Henz&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221083380&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2004-09-18T07:28:15&quot;&gt;2004-09-18T07:28:15&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;Woops, just tried it again with a fresh svn-upped dbagg3 and it seems to work now.

Good stuff :-)

cheers,
Christian&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;/ul&gt;
    
        &lt;/div&gt;



</content>
    </entry>
    
    

    <entry>
        <title>Moving time: From CVS to Subversion</title>
        <link href="http://decafbad.com/blog/2004/09/16/moving-time-from-cvs-to-subversion"/>
        <updated>2004-09-16T15:29:04+00:00</updated>
        <id>http://decafbad.com/blog/2004/09/16/moving-time-from-cvs-to-subversion</id>
        <content type="html">&lt;p&gt;So, I'm waiting for the other shoe to drop.  After making sure things seemed reasonably stable post-server-move, I migrated my CVS repository here to &lt;a href=&quot;http://subversion.tigris.org/&quot;&gt;Subversion&lt;/a&gt;.  There were one or two tiny bumps in the road-- such as a default setting in Apache to deny access to anything starting with .ht (ie. .htaccess)-- but so far, so good.  &lt;a href=&quot;http://viewcvs.sourceforge.net/&quot;&gt;ViewCVS&lt;/a&gt; appears to support Subversion, and I've also discovered an alternate frontend called &lt;a href=&quot;http://websvn.tigris.org/&quot;&gt;WebSVN&lt;/a&gt;.  I like ViewCVS better, but WebSVN offers RSS feeds on commits.&lt;/p&gt;

&lt;p&gt;One consequence to this move is that soon, when I take down everything related to CVS, I'll have plenty of broken links (since I frequently link to ViewCVS pages for my projects).  So, I think my next step will be to set up some redirects to a reasonable number of things for continuity's sake.&lt;/p&gt;

&lt;p&gt;So, anyway... if you've been keeping up with &lt;code&gt;dbagg3&lt;/code&gt;, the action's not in CVS anymore.  It's here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.decafbad.com/svn/trunk/dbagg3/&quot;&gt;http://www.decafbad.com/svn/trunk/dbagg3/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Alternately, you can also peek at things here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.decafbad.com/svn-view/trunk/dbagg3/&quot;&gt;http://www.decafbad.com/svn-view/trunk/dbagg3/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.decafbad.com/websvn/listing.php?repname=0xDECAFBAD%20projects&amp;amp;#38;path=%2Ftrunk%2Fdbagg3%2F&amp;amp;#38;rev=0&amp;amp;#38;sc=0&quot;&gt;WebSVN&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;(Can you see one reason why I like ViewCVS so much better?)&lt;/p&gt;

&lt;div id=&quot;comments&quot; class=&quot;comments archived-comments&quot;&gt;
            &lt;h3&gt;Archived Comments&lt;/h3&gt;
            
        &lt;ul class=&quot;comments&quot;&gt;
            
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085325&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.unix-girl.com/blog&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=dec4418e2a8f2b2a11408df7cf343bcc&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.unix-girl.com/blog&quot;&gt;kasia&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085325&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2004-09-16T11:53:06&quot;&gt;2004-09-16T11:53:06&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;ViewCVS is much better than WebSVN, you could create RSS feeds with a relatively simple post-commit hook, or even just modify the email changes post-commit hook to also generate RSS feeds..&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085328&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://blog.ianbicking.org&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=cc8334869c9d2a9e603017f2da805eb3&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://blog.ianbicking.org&quot;&gt;Ian Bicking&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085328&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2004-09-16T12:50:14&quot;&gt;2004-09-16T12:50:14&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;One PITA with ViewCVS is that it has to have write access to the repository, and having multiple users access the repository can cause the permissions to get out of wack and make the repository unavailable.  I don't know if WebSVN uses the client svn libraries (i.e., accesses the repository through the server, instead of accessing repository files directly), but if it does then I would probably stick with it.  Though if you are using Apache, I suppose it's all being accessed as the same user, so it shouldn't be too much of a problem.&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085330&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://simon.incutio.com/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=02ecb4f56e961dd226352c4dd51eff26&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://simon.incutio.com/&quot;&gt;Simon Willison&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085330&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2004-09-16T13:19:41&quot;&gt;2004-09-16T13:19:41&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;Have you looked at Trac? http://projects.edgewall.com/trac

svn browser, bug tracker and wiki rolled in to one. It's very sexy.&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085331&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=d6c17175cba2c2d27483fe5f4ed8ee27&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;Ben Weekes&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085331&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2004-09-16T13:19:45&quot;&gt;2004-09-16T13:19:45&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;I suggest that if you want to avoid breaking URLs again in future you take the &quot;svn&quot; out of those URLs.

I generally prefer WebSVN; it seems to fit the &quot;Subversion Way&quot; a lot better than ViewCVS, which bends it to a CVS way of thinking about things to some extent. Mostly, though, they're essentially the same thing. WebSVN's theme and UI needs a little work, but other than that I find it good. Providing both is nice, though!

I'm guessing you're picking on WebSVN's horrible URLs... and I agree with you on that. It has been an intention of mine for a while to take a look at it and see if I can't use some mod_rewrite magic to make it nicer. I don't much like PHP, though, so I've not got around to it yet.&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;/ul&gt;
    
        &lt;/div&gt;



</content>
    </entry>
    
    
</feed>

