<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>0xDECAFBAD - Tag: webservices</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>Blog posting delegation and third-party auth</title>
        <link href="http://decafbad.com/blog/2007/03/05/blog-posting-delegation-and-third-party-auth"/>
        <updated>2007-03-05T22:13:45+00:00</updated>
        <id>http://decafbad.com/blog/2007/03/05/blog-posting-delegation-and-third-party-auth</id>
        <content type="html">&lt;p&gt;Here's something I've been meaning to post about, brought back to mind from &lt;a href=&quot;http://www.identityblog.com/?p=701&quot;&gt;Kim Cameron's post on &quot;Wrong-headed impersonation&quot;&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;I wish that blog posting interfaces (ie. &lt;a href=&quot;http://www.xmlrpc.com/metaWeblogApi&quot;&gt;MetaWeblog API&lt;/a&gt; and &lt;a href=&quot;http://www.ietf.org/html.charters/atompub-charter.html&quot;&gt;Atom Publishing Protocol&lt;/a&gt;) offered a way to delegate blog posting to a 3rd party app (desktop or web) in such a way as to avoid providing one's login details (i.e. user name and password).  For instance, consider both &lt;a href=&quot;http://www.flickr.com/services/api/auth.spec.html&quot;&gt;Flickr's&lt;/a&gt; and &lt;a href=&quot;http://upcoming.org/services/api/token_auth.php&quot;&gt;Upcoming's&lt;/a&gt; 3rd party token-based authentication / authorization schemes.&lt;/p&gt;

&lt;p&gt;In particular, I'm looking at things like del.icio.us' own Daily Blog Post and others.  These can be used to auto-post content to one's blog generated elsewhere - but at the price of sharing login details.  Granted, you can mostly trust these 3rd parties not to do anything nasty with your credentials, but it would be nice not to have to.&lt;/p&gt;

&lt;p&gt;I figure that something RESTful like extending HTTP authentication (ala &lt;a href=&quot;http://www.xml.com/pub/a/2003/12/17/dive.html&quot;&gt;Atom Authentication&lt;/a&gt;) with a token scheme could be interesting, and possibly fit nicely into &lt;a href=&quot;http://www.ietf.org/html.charters/atompub-charter.html&quot;&gt;APP&lt;/a&gt; itself.  It could probably be retrofit into the &lt;a href=&quot;http://www.xmlrpc.com/metaWeblogApi&quot;&gt;MetaWeblog API&lt;/a&gt; by specifying a per-app user name and password.  I can imagine a WordPress admin plugin that issues approved authentication tokens to restrict the categories and other activities allowed by 3rd party apps.&lt;/p&gt;

&lt;p&gt;Just something I'm thinking about, as more services may or may not grow into delegated blog posting.&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-221084462&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-221084462&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2007-03-05T22:40:26&quot;&gt;2007-03-05T22:40:26&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Wouldn't openID be a better candidate for this?&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221084463&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-221084463&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2007-03-05T22:48:24&quot;&gt;2007-03-05T22:48:24&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Not really, unless I don't entirely understand OpenID.  &lt;/p&gt;

&lt;p&gt;OpenID offers way to authenticate &lt;em&gt;yourself&lt;/em&gt;.  However, what I want is an easy way to delegate your access to 3rd party apps, without those apps being able to authenticate as you or performs actions outside of the permissions you approve.  I don't really want Flickr Uploader, Ecto, MarsEdit to be able to use OpenID to login as me with carte blanche.&lt;/p&gt;

&lt;p&gt;With a token-based system like Flickr has, I can approve delegation to various apps and revoke their access at any time - without ever releasing my login details.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221084464&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://george.hotelling.net/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=c7d1c8d2b1a7643236a4661e9a974dee&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://george.hotelling.net/&quot;&gt;George Hotelling&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221084464&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2007-03-06T17:51:55&quot;&gt;2007-03-06T17:51:55&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;At first I had this great idea to build a blog posting proxy service that could grant access to your blog to different services by giving them different usernames and passwords and you could revoke them at any time and it would be great and everyone would be posting to everyone's blog all the time.&lt;/p&gt;

&lt;p&gt;Then I realized I had put on &lt;a href=&quot;http://worsethanfailure.com/Articles/The_Complicator's_Gloves.aspx&quot; rel=&quot;nofollow&quot;&gt;complicator gloves&lt;/a&gt; and that it would be way easier to just add new users to my blog without a proxy service.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221084465&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-221084465&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2007-03-06T18:04:57&quot;&gt;2007-03-06T18:04:57&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Yeah, I figured making multiple accounts is a way to go when you've got your own install of something like WordPress.  It kind of gets stymied, though, if you want the same thing for a hosted service like WordPress.com, Vox, TypePad, or LiveJournal where one account = one blog.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221084466&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://ian.mckellar.org/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=a38054904e39e36fab7c4d779abf3752&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://ian.mckellar.org/&quot;&gt;Ian McKellar&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221084466&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2007-03-12T17:43:49&quot;&gt;2007-03-12T17:43:49&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;It seems to me that the ideal solution to this is to have your blog pull new posts from an RSS/Atom feed that's hosted by the service that is generating your content. Feedburner already has a half-assed implementation of this where they'll pull your delicious bookmarks and flickr photos into your burned feed.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221084468&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-221084468&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2007-03-12T17:58:35&quot;&gt;2007-03-12T17:58:35&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;@ian: Hmm, yeah, that probably does end up being the least onerous solution - just offer an aggregated feed of one's output.  I do like the idea of auto-posting to a blog, though, for the sake of something sorta like daily backups to a system I control.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221084470&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://ian.mckellar.org/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=a38054904e39e36fab7c4d779abf3752&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://ian.mckellar.org/&quot;&gt;Ian McKellar&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221084470&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2007-03-12T18:44:46&quot;&gt;2007-03-12T18:44:46&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;@l.m.orchard: you don't need to just aggregate you can also import posts into your own store. We could come up with a cleverly confusing buzzword acronym like Atom Pull Publishing. You just periodically poll a feed and import the items. Actually, this is kind of what Google Reader is doing. They've even got a namespace in their atom for expressing the original id and the source feed. Perhaps I should write a drupal module.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221084471&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-221084471&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2007-03-12T19:01:45&quot;&gt;2007-03-12T19:01:45&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;@ian: Hmm, yeah, that does sound like the least complicated way to get outside content pulled into a blog without releasing the blog's login details.  I know I've seen / used some WordPress plugins that do  basically that, though I've not been happy with any of them yet.  I should re-look into why that's been the case&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221084473&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://ian.mckellar.org/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=a38054904e39e36fab7c4d779abf3752&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://ian.mckellar.org/&quot;&gt;Ian McKellar&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221084473&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2007-03-12T19:26:16&quot;&gt;2007-03-12T19:26:16&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;@l.m.orchard: in my experience the problems are with the formatting of the content (do blank lines turn into paragraphs, etc) and fragile post IDs (the upgraded wordpress and spammed all my friends on livejournal or planet problem). I'm not sure how to fix either of these problems but I think they're both problems Atom is attempting to solve...&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;/ul&gt;
    
        &lt;/div&gt;



</content>
    </entry>
    
    

    <entry>
        <title>do not taunt happy fun JSON</title>
        <link href="http://decafbad.com/blog/2006/12/21/do-not-taunt-happy-fun-json"/>
        <updated>2006-12-21T02:55:45+00:00</updated>
        <id>http://decafbad.com/blog/2006/12/21/do-not-taunt-happy-fun-json</id>
        <content type="html">&lt;p&gt;Allow me to repeat myself somewhat and clarify my general opinion of JSON and its use in cross-domain browser scripting:&lt;/p&gt;

&lt;p&gt;Happy Fun JSON is not really an API. Happy Fun JSON is not a bold declaration of side-taking in the grand war of web service specifications. Do not base business models on Happy Fun JSON. Caution: Happy Fun JSON may suddenly accelerate to dangerous speeds or stop altogether. Happy Fun JSON contains a liquid core, which, if exposed due to rupture, should not be touched, inhaled, or looked at. Ingredients of Happy Fun JSON include an unknown glowing substance which fell to Earth, presumably from outer space. If Happy Fun JSON begins to smoke, get away immediately. Seek shelter and cover head.&lt;/p&gt;

&lt;p&gt;Do not taunt Happy Fun JSON.&lt;/p&gt;

&lt;p&gt;Having said all that?  Happy Fun JSON is pretty fun to throw around.&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-221087880&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://gfmorris.net/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=505e3b39dcea29b3ded74a5494c493eb&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://gfmorris.net/&quot;&gt;Geof F. Morris&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221087880&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2006-12-21T03:34:19&quot;&gt;2006-12-21T03:34:19&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Did it hurt when Happy Fun JSON fell from Heaven?  ;)&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221087884&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://franklinmint.fm&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=b9ed774661a22ff8797a1e0e24f0baf3&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://franklinmint.fm&quot;&gt;Robert Sayre&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221087884&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2006-12-21T03:55:47&quot;&gt;2006-12-21T03:55:47&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Obviously, the new del.icio.us JSON url feed is crushing blow against XML Web Enterprise Services Declarative Net Neutrality.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221087886&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=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;&quot;&gt;jamesv&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221087886&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2006-12-21T15:14:24&quot;&gt;2006-12-21T15:14:24&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;I only wish you could pass Happy Fun JSON into Flash via FlashVars in IE. FF and Safari seem to have no problems with it.&lt;/p&gt;

&lt;p&gt;It would make authoring a richer content version of sIFR much, much easier.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221087889&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.litfuel.net/plush&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=048d90bde20830d1e4fdec860321a5a6&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.litfuel.net/plush&quot;&gt;Jim Plush&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221087889&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2006-12-22T19:22:48&quot;&gt;2006-12-22T19:22:48&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;You should be banned from talking about JSON if you think you have to choose one or the other. A place for everything and everything in it's place.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221087893&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://dannyayers.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=7028f422ca6da0180de6c9d922a3228f&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://dannyayers.com&quot;&gt;Danny&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221087893&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2006-12-31T18:11:19&quot;&gt;2006-12-31T18:11:19&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;All this lynch talk - I just got throttled! &lt;/p&gt;

&lt;p&gt;Running the script &lt;a href=&quot;http://dannyayers.com/2006/12/29/del&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; on a series of URIs got me the 999 error (no sure how many had run). There's a 2 second pause between calls, I thought that would be polite enough. Still throttled now, maybe 10 mins later. Any suggestions for what would prevent throttling? How long it needs to recover?&lt;/p&gt;

&lt;p&gt;btw, I think Happy Fun JSON is great, and not unreasonable for interop. But what isn't so good for interop is inventing a new HTTP code when there's &lt;a href=&quot;http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.4&quot; rel=&quot;nofollow&quot;&gt;503 Service Unavailable&lt;/a&gt; (and a Retry-After header would be handy).&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221087896&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.alleged.org.uk/pdc/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=5b7d6aea7a0ef515700985bb17cdc5a0&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.alleged.org.uk/pdc/&quot;&gt;Damian Cugley&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221087896&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2007-01-22T14:16:27&quot;&gt;2007-01-22T14:16:27&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;@jamesv: The first thing I did with JSON at work was pass it in to a Flash movie via FlashVars. This used a JSON decode written in ActionScript grabbed from JSON.org, plus a JSON encoder written in C# (it did not take long to write because I  did not attempt to serialize arbitrary objects).  Some gratuitous URL-encoding was also involved. Compared with passing the same data structure via URL-encoded XML to be picked apart by ActionScript's DOM support, it was easy and much more like fun.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;/ul&gt;
    
        &lt;/div&gt;



</content>
    </entry>
    
    

    <entry>
        <title>correlation is not causation</title>
        <link href="http://decafbad.com/blog/2006/12/21/correlation-is-not-causation"/>
        <updated>2006-12-21T02:01:38+00:00</updated>
        <id>http://decafbad.com/blog/2006/12/21/correlation-is-not-causation</id>
        <content type="html">&lt;p&gt;By the by:  Correlating the &lt;a href=&quot;http://del.icio.us/help/json/url&quot;&gt;new del.icio.us JSON URL feed&lt;/a&gt; with &lt;a href=&quot;http://google-code-updates.blogspot.com/2006/12/beyond-soap-search-api.html&quot;&gt;Google's recent deprecation of the SOAP Search API&lt;/a&gt; is about as effective as noticing how often the clock reads 12:34 when you just happen to be looking 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-221090761&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.joegrossberg.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=f288a8afe5302a16a366d5e9d34f2fec&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.joegrossberg.com&quot;&gt;Joe Grossberg&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221090761&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2006-12-21T13:10:16&quot;&gt;2006-12-21T13:10:16&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Because ... you say so? :)&lt;/p&gt;

&lt;p&gt;Also, I think you misuse the word &quot;correlation&quot;.&lt;/p&gt;

&lt;p&gt;And I think there is a correlation -- both are indicative of a trend in &quot;web services&quot; today.&lt;/p&gt;

&lt;p&gt;JSON and YAML are getting more popular in that arena and XML (especially SOAP) is something that a lot of programmers dislike workign with.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;/ul&gt;
    
        &lt;/div&gt;



</content>
    </entry>
    
    

    <entry>
        <title>Amazon EC2 emerges</title>
        <link href="http://decafbad.com/blog/2006/08/24/amazon-ec2-emerges"/>
        <updated>2006-08-24T12:58:04+00:00</updated>
        <id>http://decafbad.com/blog/2006/08/24/amazon-ec2-emerges</id>
        <content type="html">&lt;blockquote cite=&quot;http://www.amazon.com/b/ref=sc_fe_c_1_3435361_1/002-3833110-2752034?ie=UTF8&amp;node=201590011&amp;no=3435361&amp;me=A36L942TSJ2AJA&quot;&gt;&lt;p&gt;Amazon Elastic Compute Cloud (Amazon EC2) is a web service that provides resizable compute capacity in the cloud. It is designed to make web-scale computing easier for developers.
&lt;/p&gt;&lt;p&gt;
Just as Amazon Simple Storage Service (Amazon S3) enables storage in the cloud, Amazon EC2 enables &quot;compute&quot; in the cloud.&lt;/p&gt;&lt;/blockquote&gt;


&lt;div class=&quot;quotesource&quot;&gt;Source: &lt;a href=&quot;http://www.amazon.com/b/ref=sc_fe_c_1_3435361_1/002-3833110-2752034?ie=UTF8&amp;node=201590011&amp;no=3435361&amp;me=A36L942TSJ2AJA&quot;&gt;Amazon.com Amazon Web Services Store: Amazon EC2 / Amazon Web Services&lt;/a&gt;&lt;/div&gt;


&lt;p&gt;This seems like the sound of the second shoe hitting the floor.  Although I tried signing up for this as soon as I saw the email, I was already too late to get in on the beta and start playing.  Maybe I'll get in on a second round.&lt;/p&gt;

&lt;p&gt;EC2 seems a lot like &lt;a href=&quot;http://user-mode-linux.sourceforge.net/&quot;&gt;User Mode Linux&lt;/a&gt; virtual hosting, but it charges &lt;del&gt;by the CPU hour&lt;/del&gt; by the hour of uptime instead of month-to-month.  I'll be very interested to see how this shakes out, and what sort of web app architecture it encourages when used in conjunction with S3 - say &lt;a href=&quot;http://weblog.infoworld.com/udell/2006/07/07.html&quot;&gt;AJAX-based queues&lt;/a&gt; for instance? - or if it just gets used as a straight &lt;a href=&quot;http://en.wikipedia.org/wiki/LAMP_(software_bundle)&quot;&gt;LAMP&lt;/a&gt; host in general.&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-221088886&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.sencer.de&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=0e94b4d4662542b91df48f0ff3b36d26&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.sencer.de&quot;&gt;Sencer&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221088886&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2006-08-24T15:27:46&quot;&gt;2006-08-24T15:27:46&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;blockquote&gt;
  &lt;p&gt;it charges by the CPU hour&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Just to prevent confusion: They call it instance hours and mean the hours a vm/instance has been running (independent of utilization). 
Only saying this, beause some hosts, like dreamhost, use(d) the term CPU-minutes for keeping track of &quot;how much time a processor spends working for your username&quot; and allow(ed) sth. like 60 CPU-minutes a day.&lt;/p&gt;

&lt;p&gt;At least that's how I understand the amazon offer.&lt;/p&gt;

&lt;p&gt;And thanks for the pointer! It'll be intereting to watch what people are going to come up with. Given that the instances are not &quot;persistent&quot;, i.e. data is gone when you stop them (unless you move things int S3 or elsewhere), I am assuming that they &lt;em&gt;will&lt;/em&gt; be used differently from regular dedicated machines. &lt;/p&gt;

&lt;p&gt;It reminds a little bit of DSL (Damnsmalllinux) which boots/runs of a CD, but allows you to save all your data and customization to an external storage (usb/ftp/etc.) and does auto-restore when you boot into it again. This is nice for people afraid of viruses or getting hacked etc.. I wonder whether this will turn out to be a plus for amazons offer as well. At first it does make things a bit more complicated wrt to usual linux way. But I guess tose things can be solved...&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221088888&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-221088888&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2006-08-24T16:29:44&quot;&gt;2006-08-24T16:29:44&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Sencer: Actually, I think your reading is the right one.  It's charge per hour of uptime of the instance, and not a meter on CPU cycles.  
&lt;/p&gt;&lt;p&gt;
So, to do a quick napkin calculation - $0.10 per hour x 24 hours x 31 days = $74.40 per month to keep an instance running around the clock.  
&lt;/p&gt;&lt;p&gt;
That makes me think that applications using this service will need to be designed around some clever resource usage, either through scheduled tasks or some interesting way to respond on demand.  Simply running a straight PHP app would seem a bit wasteful in many small-scale cases.&lt;/p&gt;

&lt;p&gt;If I were to run a blog from it, say, I'd lean more toward the Movable Type school of static publishing than the WordPress school of live PHP pages.  Of course, that could all be done from a behind-firewall personal desktop machine, so I need to think of a better example.&lt;/p&gt;

&lt;p&gt;Then again, being able to add and drop instances at will is a big, big deal for larger scale applications.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221088891&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.jonathanboutelle.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=d77d55a352cc3dc84a86510094b2dde8&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.jonathanboutelle.com&quot;&gt;Jonathan Boutelle&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221088891&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2006-08-24T17:12:09&quot;&gt;2006-08-24T17:12:09&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Let's see,  back of the envelope calculation ... that's a 10-machine cluster for 720$ /month + bandwidth. With redundant storage and firewall included. Holy crap! Web 2.0 apps just got a LOT cheaper to deploy.&lt;/p&gt;

&lt;p&gt;I am also stuck in limbo land: they sent the email out at 3AM PST, which is just rude: a west-coast company should at least wait until California and Washington wakes up before sending out a limited beta. Methinks the geeks in NYC and boston and the research triangle got all the slots.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221088893&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-221088893&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2006-08-24T17:57:58&quot;&gt;2006-08-24T17:57:58&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Jonathan: Yeah, I think your calculation is a better one.  Mine just reflects the fact that EC2 doesn't scale &lt;em&gt;down&lt;/em&gt; to piddly little apps like I've been playing with.  But scaling up, it looks like a much better value.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221088895&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://claimid.com/dne&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=7cc1b40a65ed472663b1af1749e8fcb6&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://claimid.com/dne&quot;&gt;Daniel Néri&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221088895&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2006-08-24T19:04:19&quot;&gt;2006-08-24T19:04:19&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;It appears to be based on &lt;a href=&quot;http://www.cl.cam.ac.uk/Research/SRG/netos/xen/&quot; rel=&quot;nofollow&quot;&gt;Xen&lt;/a&gt;, judging from the sample hostnames in the &lt;a href=&quot;http://docs.amazonwebservices.com/AmazonEC2/gsg/2006-06-26/&quot; rel=&quot;nofollow&quot;&gt;docs&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221088899&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.base4.net/Blog.aspx?ID=93&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=ef0b5680532c0e0fac2fe20ef4b01929&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.base4.net/Blog.aspx?ID=93&quot;&gt;Alex James&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221088899&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2006-08-25T11:27:19&quot;&gt;2006-08-25T11:27:19&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;I agree, you need to band together with a couple of mates to make it worthwhile for really small sites. But at the high end it is amazing value. &lt;/p&gt;

&lt;p&gt;Perhaps then there is an opportunity for someone to use EC2 based websites, you could easily create an sort of ISP or ASP model using this, by putting about 20 little websites/application servers on one Image. &lt;/p&gt;

&lt;p&gt;BTW Jonathan... I'm from little old New Zealand and I managed to nab a slot!&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221088900&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.waituk.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=accdd07341577af9d82a220a8a0f5a2d&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.waituk.com&quot;&gt;Website Nepal&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221088900&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2007-08-31T17:23:53&quot;&gt;2007-08-31T17:23:53&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;I checked out the Amazon EC2 since I am planning to offer web hosting solution somewhat similar to what EC2 are doing.&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>
    
    
</feed>

