<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    <title>The sTate of Things - Technology</title>
    <link>http://www.dragonstrider.com/serendipity/</link>
    <description>Happenings and musings of Joseph and Nichol Tate</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.5.3 - http://www.s9y.org/</generator>
    <pubDate>Fri, 29 Jan 2010 06:36:37 GMT</pubDate>

    <image>
        <url>http://www.dragonstrider.com/serendipity/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: The sTate of Things - Technology - Happenings and musings of Joseph and Nichol Tate</title>
        <link>http://www.dragonstrider.com/serendipity/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>As Promised to TriZPUG: EPDB</title>
    <link>http://www.dragonstrider.com/serendipity/index.php?/archives/408-As-Promised-to-TriZPUG-EPDB.html</link>
            <category>Python</category>
    
    <comments>http://www.dragonstrider.com/serendipity/index.php?/archives/408-As-Promised-to-TriZPUG-EPDB.html#comments</comments>
    <wfw:comment>http://www.dragonstrider.com/serendipity/wfwcomment.php?cid=408</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.dragonstrider.com/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=408</wfw:commentRss>
    

    <author>nospam@example.com (Joseph Tate)</author>
    <content:encoded>
    So I did some digging around after giving my off-the-cuff lightning talk at TriZPUG tonight and it looks like some other ex-rpathers (Thanks Dugan and Gafton!) have &lt;a href=&quot;http://bitbucket.org/dugan/epdb/&quot; title=&quot;Dugan&#039;s Bitbucket epdb Repository&quot;&gt;forked epdb&lt;/a&gt;.  There&#039;s also the &lt;a href=&quot;http://bitbucket.org/rpathsync/epdb/&quot; title=&quot;rPath&#039;s BitBucket epdb Repository&quot;&gt;the rPath tree&lt;/a&gt; synchronized from &lt;a href=&quot;http://hg.rpath.com/epdb/&quot; title=&quot;Original rPath Tree&quot;&gt;here&lt;/a&gt; but this tree is missing some of the latest changes.  The dugan tree is &quot;python setup.py installable&quot; now, instead of using make, and some shortcut &lt;a href=&quot;http://bitbucket.org/dugan/epdb/wiki/EpdbDocumentation&quot; title=&quot;epdb Documentation&quot;&gt;documentation&lt;/a&gt; has been created, so I don&#039;t have to make this post as long as I thought I was going to have to.&lt;br /&gt;
&lt;br /&gt;
For those who didn&#039;t see my little demo, epdb is like pdb (the standard Python debugger), but it adds multi-line text input, history and tab completion, nested debugging from the debug prompt, shortcuts to introspecting code, and a very nice post mortem debugger.  Last, but not least, it also contains a server and client for remote debugging.  The docs are still pretty sparse, but hopefully more attention can help fix that.  I&#039;d also be happy to answer questions about it.&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Fri, 29 Jan 2010 00:36:37 -0600</pubDate>
    <guid isPermaLink="false">http://www.dragonstrider.com/serendipity/index.php?/archives/408-guid.html</guid>
    
</item>
<item>
    <title>An Exercise in Python planet link recursion</title>
    <link>http://www.dragonstrider.com/serendipity/index.php?/archives/396-An-Exercise-in-Python-planet-link-recursion.html</link>
            <category>Python</category>
    
    <comments>http://www.dragonstrider.com/serendipity/index.php?/archives/396-An-Exercise-in-Python-planet-link-recursion.html#comments</comments>
    <wfw:comment>http://www.dragonstrider.com/serendipity/wfwcomment.php?cid=396</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.dragonstrider.com/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=396</wfw:commentRss>
    

    <author>nospam@example.com (Joseph Tate)</author>
    <content:encoded>
    Thanks to Chris Calloway, &lt;a href=&quot;http://trizpug.org&quot; title=&quot;Triangle (North Carolina) Zope and Python Users Group&quot;&gt;TriZPUG&lt;/a&gt; has a &lt;a href=&quot;http://planet.trizpug.org/&quot; title=&quot;Planet TriZPUG&quot;&gt;planet&lt;/a&gt; now.  I don&#039;t know why it&#039;s taken me so long to connect with this group of people (I&#039;ve been working with Python for 5 years now), but it&#039;s a pretty cool group from what I&#039;ve seen so far.  Thanks for making me (a &lt;a href=&quot;http://turbogears.org&quot; title=&quot;TurboGears Web Application Framework&quot;&gt;TurboGears&lt;/a&gt; guy) feel welcome among all you Zope/Plone/Django developers. 
    </content:encoded>

    <pubDate>Thu, 31 Dec 2009 13:16:43 -0600</pubDate>
    <guid isPermaLink="false">http://www.dragonstrider.com/serendipity/index.php?/archives/396-guid.html</guid>
    
</item>
<item>
    <title>Better E-mail validation</title>
    <link>http://www.dragonstrider.com/serendipity/index.php?/archives/391-Better-E-mail-validation.html</link>
            <category>Turbogears</category>
            <category>Work</category>
    
    <comments>http://www.dragonstrider.com/serendipity/index.php?/archives/391-Better-E-mail-validation.html#comments</comments>
    <wfw:comment>http://www.dragonstrider.com/serendipity/wfwcomment.php?cid=391</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.dragonstrider.com/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=391</wfw:commentRss>
    

    <author>nospam@example.com (Joseph Tate)</author>
    <content:encoded>
    Due to several shortcomings of the stock formencode email validator, I &lt;a href=&quot;http://bitbucket.org/josephtate/formencode-email/&quot; title=&quot;formencode-email bitbucket&quot;&gt;forked it and extended the test suite&lt;/a&gt;.  This fixes the two most glaring issues I know of, namely the inability to handle unicode strings (&lt;a href=&quot;http://pythonpaste.org/archives/message/20081015.191555.f6252ba5.en.html&quot; title=&quot;Patch proposed to use dnspython instead of pydns.&quot;&gt;international domains&lt;/a&gt;), and several problems with input checking (e.g., &lt;a href=&quot;http://sourceforge.net/tracker/?func=detail&amp;aid=2788489&amp;group_id=91231&amp;atid=596416&quot; title=&quot;commas are allowed in username field&quot;&gt;allowing commas&lt;/a&gt;) where invalid e-mail addresses make it through.&lt;br /&gt;
&lt;br /&gt;
I did not write most of the code, I just refined it and added tests to exercise it.  Let me know if it&#039;s useful to you, and if you find problems with it. 
    </content:encoded>

    <pubDate>Wed, 02 Dec 2009 15:05:30 -0600</pubDate>
    <guid isPermaLink="false">http://www.dragonstrider.com/serendipity/index.php?/archives/391-guid.html</guid>
    
</item>
<item>
    <title>New Biofuel System</title>
    <link>http://www.dragonstrider.com/serendipity/index.php?/archives/386-New-Biofuel-System.html</link>
            <category>Cool, Funny or Odd</category>
            <category>Technology</category>
    
    <comments>http://www.dragonstrider.com/serendipity/index.php?/archives/386-New-Biofuel-System.html#comments</comments>
    <wfw:comment>http://www.dragonstrider.com/serendipity/wfwcomment.php?cid=386</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://www.dragonstrider.com/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=386</wfw:commentRss>
    

    <author>nospam@example.com (Joseph Tate)</author>
    <content:encoded>
    &lt;a href=&quot;http://www.nytimes.com/gwire/2009/07/27/27greenwire-start-ups-biofuel-recipe-mixes-co2-slime-and-su-7562.html&quot; title=&quot;Joule Helioculture&quot;&gt;This technology&lt;/a&gt; is probably the only &lt;a href=&quot;http://en.wikipedia.org/wiki/Biofuel&quot; title=&quot;Biofuel Wikipedia&quot;&gt;biofuel&lt;/a&gt; technology I&#039;m really excited about.  Unlike E85, it doesn&#039;t use food crops, and although algae based programs don&#039;t compete directly with food crops, they still require fermentation of cellulose, or refining of algae produced oil to create fuel.  More links &lt;a href=&quot;http://gas2.org/2009/11/10/biofuels-breakthrough-making-fuel-from-air-with-engineered-microbes/&quot; title=&quot;gas2.0 article on helioculture&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;http://www.biofuelsdigest.com/blog2/2009/11/10/fuel-from-thin-air-joule-reports-direct-microbial-conversion-of-co2-into-hydrocarbons-no-biomass-no-extraction-no-refinement/&quot; title=&quot;Biofuels Digest Article on helioculture&quot;&gt;here&lt;/a&gt;.  &lt;a href=&quot;http://joulebio.com/&quot; title=&quot;http://joulebio.com/&quot;&gt;Joule Biotechnologies website here.&lt;/a&gt;  I&#039;ve been thinking for a while that we should be able to extract CO2 from the atmosphere and produce fuel.  Now Joule has gone and built something that might be able to do that. 
    </content:encoded>

    <pubDate>Wed, 11 Nov 2009 08:01:49 -0600</pubDate>
    <guid isPermaLink="false">http://www.dragonstrider.com/serendipity/index.php?/archives/386-guid.html</guid>
    
</item>
<item>
    <title>Usability and &quot;Linuxification&quot;</title>
    <link>http://www.dragonstrider.com/serendipity/index.php?/archives/374-Usability-and-Linuxification.html</link>
            <category>Technology</category>
    
    <comments>http://www.dragonstrider.com/serendipity/index.php?/archives/374-Usability-and-Linuxification.html#comments</comments>
    <wfw:comment>http://www.dragonstrider.com/serendipity/wfwcomment.php?cid=374</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://www.dragonstrider.com/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=374</wfw:commentRss>
    

    <author>nospam@example.com (Joseph Tate)</author>
    <content:encoded>
    This week, Neil McAllister at InfoWorld wrote about &lt;a href=&quot;http://www.infoworld.com/d/developer-world/what-not-code-why-in-house-apps-needs-professional-eye-045?source=IFWNLE_nlt_blogs_2009-09-17&quot;&gt;User Interface (UI) design in applications&lt;/a&gt; (whether for in house or general use).  He argues that the UI should be left to professionals, that the professional UI designers should be given final say in UI design, and that software suffers because developers are building the UI or the usability expert&#039;s concerns are dismissed or overruled by developer interests.  I certainly have seen the &quot;damage&quot; that software developers can do when left in charge of user interaction; terse messages, techno-babble, pointless configuration options, arcane defaults, etcetera.  I&#039;m guilty of such damage myself, but I make no claims to expert status, though I&#039;m a bit more motivated to acquire that status to improve my consulting business.&lt;br /&gt;
 &lt;br /&gt;&lt;a href=&quot;http://www.dragonstrider.com/serendipity/index.php?/archives/374-Usability-and-Linuxification.html#extended&quot;&gt;Continue reading &quot;Usability and &amp;quot;Linuxification&amp;quot;&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Fri, 18 Sep 2009 00:23:00 -0500</pubDate>
    <guid isPermaLink="false">http://www.dragonstrider.com/serendipity/index.php?/archives/374-guid.html</guid>
    
</item>
<item>
    <title>Working around KDE bug 162485</title>
    <link>http://www.dragonstrider.com/serendipity/index.php?/archives/352-Working-around-KDE-bug-162485.html</link>
            <category>KDE Distro</category>
            <category>Technology</category>
    
    <comments>http://www.dragonstrider.com/serendipity/index.php?/archives/352-Working-around-KDE-bug-162485.html#comments</comments>
    <wfw:comment>http://www.dragonstrider.com/serendipity/wfwcomment.php?cid=352</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://www.dragonstrider.com/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=352</wfw:commentRss>
    

    <author>nospam@example.com (Joseph Tate)</author>
    <content:encoded>
    If you want to add support for third party certificates in your KDE 4 desktop, you&#039;ll have to work around &lt;a href=&quot;https://bugs.kde.org/show_bug.cgi?id=162485&quot; title=&quot;KDE Bug 162485&quot;&gt;this languishing bug&lt;/a&gt;.  KDE for some arrogant reason includes its own certificate authority bundle located in /usr/share/kde*/apps/kssl/ca-bundle.crt, but doesn&#039;t provide the tools needed to modify the collection as a normal user.  Therefore, as root, move this file out of the way, and link to your distribution&#039;s certificate bundle (typically in /etc/ssl/certs).  This will let you use your distribution&#039;s SSL tools for managing SSL, rather than waiting for KDE to implement these important features.    Changes to the distro&#039;s CA bundle will require restarting the applications using SSL/TLS before they can see the new root certificate authorities, but that&#039;s better than having to click through nag screens for certificates that should be trusted.  We still have the security problem of not being able to &lt;a href=&quot;https://bugs.kde.org/show_bug.cgi?id=166615&quot; title=&quot;KDE Bug 166615&quot;&gt;verify certificates in any app but Konqueror&lt;/a&gt;, but the above fix removes the need to do that if you have a Root CA. 
    </content:encoded>

    <pubDate>Mon, 06 Jul 2009 09:39:25 -0500</pubDate>
    <guid isPermaLink="false">http://www.dragonstrider.com/serendipity/index.php?/archives/352-guid.html</guid>
    
</item>
<item>
    <title>Web Browser Posers</title>
    <link>http://www.dragonstrider.com/serendipity/index.php?/archives/329-Web-Browser-Posers.html</link>
            <category>Technology</category>
            <category>The Internet</category>
            <category>Work</category>
    
    <comments>http://www.dragonstrider.com/serendipity/index.php?/archives/329-Web-Browser-Posers.html#comments</comments>
    <wfw:comment>http://www.dragonstrider.com/serendipity/wfwcomment.php?cid=329</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://www.dragonstrider.com/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=329</wfw:commentRss>
    

    <author>nospam@example.com (Joseph Tate)</author>
    <content:encoded>
    Ok, I&#039;m not a novice when it comes to developing websites: I&#039;ve been building web pages for close on 15 years.  But within the last week, I&#039;ve come across two browser behaviors (or perhaps they&#039;re browser addon behaviors) that make me scratch my head.&lt;br /&gt;
&lt;br /&gt;
First, a request coming from something sending the User-Agent &quot;Mozilla/4.0&quot;-- yes, that&#039;s all, no clarifiers or parentheticals-- is lopping off the GET parameters when a popup is launched through a button click via an onclick handler.  &lt;a href=&quot;http://www.user-agents.org&quot; title=&quot;User Agent Database&quot;&gt;This site&lt;/a&gt; states that this is a Yahoo! search something, but the links are not something that a Bot would come across.  On the other hand, there is no referrer sent, whick makes me think it could be some kind of link preloader or some other browser add on.  Also, I saw a very similar error today coming from Firefox 3.0, though I&#039;m not sure it&#039;s related.&lt;br /&gt;
&lt;br /&gt;
Second, and this is really baffling: Sometimes I&#039;m getting requests from a browser identifying itself as IE 6.x that has the entire URL made lowercase.  I&#039;m use nice REST-ful URLs for my application, so when a identifier comes across as lowercase, it throws off the lookup.  Of course my own copy of IE 6 doesn&#039;t exhibit the behavior.  For this particular case, I&#039;m using JavaScript to build a URL, and then sticking it as the src attribute of an embedded iframe that is also being created by JavaScript.  I&#039;m seeing other errors in my logs though of IE6 and IE7 browsers going to different links (links that would typically be clicked or pasted from an e-mail) that are all lower case as well.  Again, not sure if that&#039;s related, or if people are just typing them in (lazily) or if it&#039;s a browser bug.  The only thing I can seem to find about this is &lt;a href=&quot;http://help.wugnet.com/windows2/ie6-url-lowercase-ftopict397595.html&quot; title=&quot;Forum post with no replies&quot;&gt;this forum (news?) post from 2005 with no replies&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Of course my Google searching is revealing nothing to help me keep my hair, so I turn to the Lazy Web.  &lt;img src=&quot;http://www.dragonstrider.com/serendipity/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;  Any ideas? 
    </content:encoded>

    <pubDate>Sat, 09 May 2009 22:27:46 -0500</pubDate>
    <guid isPermaLink="false">http://www.dragonstrider.com/serendipity/index.php?/archives/329-guid.html</guid>
    
</item>
<item>
    <title>In search of good [flash] help</title>
    <link>http://www.dragonstrider.com/serendipity/index.php?/archives/272-In-search-of-good-flash-help.html</link>
            <category>Miscelaneous</category>
            <category>Technology</category>
            <category>Work</category>
    
    <comments>http://www.dragonstrider.com/serendipity/index.php?/archives/272-In-search-of-good-flash-help.html#comments</comments>
    <wfw:comment>http://www.dragonstrider.com/serendipity/wfwcomment.php?cid=272</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.dragonstrider.com/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=272</wfw:commentRss>
    

    <author>nospam@example.com (Joseph Tate)</author>
    <content:encoded>
    I&#039;m working on some freelance work to rebuild a website that has a whole bunch of flash v4 movies that need to be moved forward to flash v9 or higher.  I received a reference of a guy who does good work on the flash programming side of things, but finding a flash animator who isn&#039;t afraid of a little action scripting has proven extremely challenging.  Anyone know of someone who is free for a project immediately? 
    </content:encoded>

    <pubDate>Mon, 19 Jan 2009 11:47:24 -0600</pubDate>
    <guid isPermaLink="false">http://www.dragonstrider.com/serendipity/index.php?/archives/272-guid.html</guid>
    
</item>
<item>
    <title>Sort Tabular Data</title>
    <link>http://www.dragonstrider.com/serendipity/index.php?/archives/266-Sort-Tabular-Data.html</link>
            <category>Technology</category>
            <category>The Internet</category>
    
    <comments>http://www.dragonstrider.com/serendipity/index.php?/archives/266-Sort-Tabular-Data.html#comments</comments>
    <wfw:comment>http://www.dragonstrider.com/serendipity/wfwcomment.php?cid=266</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.dragonstrider.com/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=266</wfw:commentRss>
    

    <author>nospam@example.com (Joseph Tate)</author>
    <content:encoded>
    I hate the way that tabular sorting is typically done in web apps (make links on every column with sort_order=&quot;columnname&quot; or similar).  It is tedious to code, and requires a lot of bandwidth and round trips from the server, not to mention additional load on the database.&lt;br /&gt;
&lt;br /&gt;
Well, today I &lt;a href=&quot;http://www.google.com/&quot;&gt;Googled&lt;/a&gt; a bit, and found &lt;a href=&quot;http://www.kryogenix.org/code/browser/sorttable/&quot;&gt;SortTable.js&lt;/a&gt;.  Add the script, and add a &quot;sortable&quot; class to the table you wish to sort, and you&#039;re done.  It automatically detects string, numeric and date columns and sorts them using a very quick (though non-stable) sort.&lt;br /&gt;
&lt;br /&gt;
I only had a very small problem (some of the CSS styles in FF3 stopped working) with the mechanism used to set the table up to be sortable (window.onload replacement), so I switched it to use jquery(document).ready, which happens later in the page loading process.  Works nicely.&lt;br /&gt;
&lt;br /&gt;
Check out the &lt;a href=&quot;http://www.kryogenix.org/code/browser/sorttable&quot; title=&quot;documentation&quot;&gt;documentation&lt;/a&gt; for additional features. 
    </content:encoded>

    <pubDate>Sat, 10 Jan 2009 15:25:42 -0600</pubDate>
    <guid isPermaLink="false">http://www.dragonstrider.com/serendipity/index.php?/archives/266-guid.html</guid>
    
</item>
<item>
    <title>KDE in Foresight</title>
    <link>http://www.dragonstrider.com/serendipity/index.php?/archives/195-KDE-in-Foresight.html</link>
            <category>KDE Distro</category>
    
    <comments>http://www.dragonstrider.com/serendipity/index.php?/archives/195-KDE-in-Foresight.html#comments</comments>
    <wfw:comment>http://www.dragonstrider.com/serendipity/wfwcomment.php?cid=195</wfw:comment>

    <slash:comments>6</slash:comments>
    <wfw:commentRss>http://www.dragonstrider.com/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=195</wfw:commentRss>
    

    <author>nospam@example.com (Joseph Tate)</author>
    <content:encoded>
    I get asked a couple of times a week what&#039;s going on with the Foresight KDE edition, what is the status of KDE 4.x, and when is the KDE edition going to be released.  I thought I&#039;d blog so that something exists in Internet-firma that can be referred to and even &quot;Googled&quot;.&lt;br /&gt;
&lt;br /&gt;
First the status of KDE 4.1:  I have no plans to build KDE 4.1 into Foresight.  While a giant leap forward from what KDE 4.0 was, KDE 4.1 is still disappointing.  Part of what happens when you rewrite rather than make incremental improvements is that functionality gets left behind, and some core functionality that I feel is essential to making a decent desktop experience for the end user is &lt;a href=&quot;http://bugs.kde.org/show_bug.cgi?id=162485&quot;  title=&quot;SSL support incomplete&quot;&gt;missing&lt;/a&gt; or &lt;a href=&quot;http://bugs.kde.org/show_bug.cgi?id=154060&quot;  title=&quot;No way to view HTTPS status of certain web pages.&quot;&gt;buggy&lt;/a&gt;.  Also, two of KDE 4.x&#039;s killer apps are less usable in 4.1 than they are in KDE 3.5.9: Amarok 2.0 lacks basic wholesale tag editing, dynamic playlists, and is a very buggy Alpha; and Kmail 4.2, part of Kontact is significantly slower than it&#039;s 3.5.x counterpart.  Kontact itself doesn&#039;t yet feel cohesive when it comes to user interface interactions.  There are a few KDE 4 apps that I would prefer over kde 3 though: kopete, konversation, potatoguy and many others show marked improvement.&lt;br /&gt;
&lt;br /&gt;
Even though we won&#039;t be shipping KDE 4.1 in Foresight&#039;s KDE edition, it will be available to install side by side with 3.5.x in kde.rpath.org@fl:2-kde4.1-devel so long as someone is willing to maintain it.&lt;br /&gt;
&lt;br /&gt;
For the KDE edition, there remain a few cosmetic issues with the theme, but mostly what we&#039;re missing is new ISOs on the release label and testing.  If you&#039;d like to help, jump in #foresight-kde on Freenode.  I&#039;m hoping that I&#039;ll be able to free up some time in the next few weeks to get us over the final hump.&lt;br /&gt;
&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Mon, 04 Aug 2008 20:48:28 -0500</pubDate>
    <guid isPermaLink="false">http://www.dragonstrider.com/serendipity/index.php?/archives/195-guid.html</guid>
    
</item>
<item>
    <title>Icon View Style Grid Layout?</title>
    <link>http://www.dragonstrider.com/serendipity/index.php?/archives/188-Icon-View-Style-Grid-Layout.html</link>
            <category>Technology</category>
            <category>The Internet</category>
            <category>Turbogears</category>
    
    <comments>http://www.dragonstrider.com/serendipity/index.php?/archives/188-Icon-View-Style-Grid-Layout.html#comments</comments>
    <wfw:comment>http://www.dragonstrider.com/serendipity/wfwcomment.php?cid=188</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://www.dragonstrider.com/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=188</wfw:commentRss>
    

    <author>nospam@example.com (Joseph Tate)</author>
    <content:encoded>
    For a couple of projects now, I&#039;ve wanted a grid layout engine that is similar to how desktops display lists of icons: nearly fixed width items, but varying slightly in height, displayed on a variable width page, so your layout could end up with 1 column or 8 depending on the width of the browser window.  Tables are no good because they&#039;re always a fixed number of columns.  Div elements using float works, so long as you make all the elements a fixed width, but they also have to be the same height, or you&#039;ll end up with gaps.  I&#039;m thinking it&#039;s going to have to be javascript driven including redrawing when the page size changes, and to manually size all items to the tallest item in the row, but I can&#039;t seem to find an example on the web anywhere (or my Google foo is weak).&lt;br /&gt;
&lt;br /&gt;
Dear lazy web, can you point me in the right direction? 
    </content:encoded>

    <pubDate>Sat, 26 Jul 2008 13:28:16 -0500</pubDate>
    <guid isPermaLink="false">http://www.dragonstrider.com/serendipity/index.php?/archives/188-guid.html</guid>
    
</item>
<item>
    <title>WRT54GL, now more useful</title>
    <link>http://www.dragonstrider.com/serendipity/index.php?/archives/166-WRT54GL,-now-more-useful.html</link>
            <category>Technology</category>
    
    <comments>http://www.dragonstrider.com/serendipity/index.php?/archives/166-WRT54GL,-now-more-useful.html#comments</comments>
    <wfw:comment>http://www.dragonstrider.com/serendipity/wfwcomment.php?cid=166</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.dragonstrider.com/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=166</wfw:commentRss>
    

    <author>nospam@example.com (Joseph Tate)</author>
    <content:encoded>
    I&#039;ve had an OpenWRT compatible wireless router for almost 5 years now, starting with a Belkin FD7230-4, and then getting a Linksys WRT54GL about a year ago.  When I first got the 54GL, I tried to load a few third party firmwares on the Belkin, and after much consternation, went back to the original.  I was not interested in compiling my own firmware, but it seemed that I would have had to.  Over the past month or two, I&#039;ve tried three times to get openwrt or xwrt to work on my 54GL.  I was attempting to use Kamikaze 7.09 based images, and after flashing several different times, was never able to get the Wide Area Network connection to load (Actully, when I tried DD-WRT I did get it to load, but I couldn&#039;t figure out how to do some of the things I needed it to do).  Command line attempts to bring up the WAN connection yielded &quot;invalid substitution&quot; errors on the OpenWRT based images.  Google didn&#039;t show anyone else with this problem, and I didn&#039;t have time to dig into it (minutes that my router are down are minutes that my website is down).  So I always reloaded the linksys firmware, (via TFTP) and reloaded my settings from the backup I&#039;d made.&lt;br /&gt;
&lt;br /&gt;
Enter &lt;a href=&quot;http://www.polarcloud.com/tomato&quot;  title=&quot;Tomato Firmware&quot;&gt;Tomato Firmware&lt;/a&gt;: An &quot;it just works&quot; firmware for WRT54GL and similar.  No building your own from the ground up, no busted start scripts, and it includes all of the features that I need from my router right now.  It runs DNSmasq, so it is a full featured DHCP, DNS and TFTP server (which takes three jobs away from my main server).  I installed it, the web interface worked, it actually kept most of the settings from my linksys setup, so I didn&#039;t have to reload wireless settings.  I just had to add my static IP clients, re-add my port forwarding rules, and set up the DNS records.  I&#039;ll have to see if I can get it to run OpenVPN server and NTP, but if not, that&#039;s not a deal breaker (I may even do without NTP for my small network).  Then I can really start migrating off my old Athlon XP hardware. 
    </content:encoded>

    <pubDate>Mon, 23 Jun 2008 08:48:35 -0500</pubDate>
    <guid isPermaLink="false">http://www.dragonstrider.com/serendipity/index.php?/archives/166-guid.html</guid>
    
</item>
<item>
    <title>Services, libraries, and consumers &quot;Oh my!&quot;</title>
    <link>http://www.dragonstrider.com/serendipity/index.php?/archives/142-Services,-libraries,-and-consumers-Oh-my!.html</link>
            <category>Technology</category>
            <category>Work</category>
    
    <comments>http://www.dragonstrider.com/serendipity/index.php?/archives/142-Services,-libraries,-and-consumers-Oh-my!.html#comments</comments>
    <wfw:comment>http://www.dragonstrider.com/serendipity/wfwcomment.php?cid=142</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.dragonstrider.com/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=142</wfw:commentRss>
    

    <author>nospam@example.com (Joseph Tate)</author>
    <content:encoded>
    I&#039;ve been working on a project for a month or so now where we were told to create a piece of software that did a few tasks, and were instructed to &quot;...make it run as a service&quot;.  We&#039;ve been struggling with the idea of creating a remote service that could also be used as a library in some cases (like for our first use case), and we still haven&#039;t got it right.  We argue about rich objects vs marshalable simple object data structures, and premature optimization vs. marshalling times.  Finally I said today, &quot;It&#039;s easier to produce a service for a library than it is to consume a service as a library&quot;.  Write the library, rich objects and all, and while you&#039;re doing that, create a sample service and client layers that marshall and unmarshall those rich objects, hopefully with some off the shelf object marshalling utilities.  With this you get the added benefit, that if the service/client layers you chose don&#039;t work for the consumer, you can create a different set.&lt;br /&gt;
&lt;br /&gt;
I guess in languages where the service layer comes free, or cheap, or where serialization is innate, it&#039;s not important to make the distinction, but in Python where service layers are built from scratch, and serialization (cPickle) only works in highly controlled environments it&#039;s important to distinguish between libraries that work like &lt;code&gt;import foo; foo.frobinate()&lt;/code&gt; and services that work like  &lt;code&gt;proxyObject = Proxy(serviceURL); proxyObject.frobinate()&lt;/code&gt;.&lt;br /&gt;
&lt;br /&gt;
Layers, it&#039;s not just good on cakes. 
    </content:encoded>

    <pubDate>Mon, 19 May 2008 13:52:20 -0500</pubDate>
    <guid isPermaLink="false">http://www.dragonstrider.com/serendipity/index.php?/archives/142-guid.html</guid>
    
</item>
<item>
    <title>Slice Host and rBuilder Online Images</title>
    <link>http://www.dragonstrider.com/serendipity/index.php?/archives/131-Slice-Host-and-rBuilder-Online-Images.html</link>
            <category>Technology</category>
            <category>The Internet</category>
            <category>Work</category>
    
    <comments>http://www.dragonstrider.com/serendipity/index.php?/archives/131-Slice-Host-and-rBuilder-Online-Images.html#comments</comments>
    <wfw:comment>http://www.dragonstrider.com/serendipity/wfwcomment.php?cid=131</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://www.dragonstrider.com/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=131</wfw:commentRss>
    

    <author>nospam@example.com (Joseph Tate)</author>
    <content:encoded>
    I host this blog, as well as e-mail for dragonstrider.com and a host of other services on an old PC behind my cable modem at home.  This has served me well for the most part, but it requires onsite maintenance when it goes down.  This is bad when I&#039;m at work, or vacation, as happened this week.  So, I bit the bullet and researched some Virtual Priate Server (VPS) hosting providers.&lt;br /&gt;
&lt;br /&gt;
I ended up choosing &lt;a href=&quot;http://www.slicehost.com/&quot;&gt;Slice Host&lt;/a&gt; as a no-frills, just the tech if you please, Linux/Xen-based VPS host.  Their entry level plan (slice) gives you 256 MB RAM, 10GB storage, and 100GB of bandwidth for $20/month, and you can scale it with a reboot up to 4GB/160GB/1600GB for $280.  /proc/cpuinfo shows that the host for my entry level slice is a two way &quot;Dual-Core AMD Opteron(tm) Processor 2212&quot; operating at 2.0 GHz.  There&#039;s a separate swap partition (so swap doesn&#039;t count against the 10GB limit), as well as web based management tools for rudimentary Name Services, starting, stopping and rebuilding your slice, a web console (in case ssh isn&#039;t working for some reason), some statistics and reporting, and my favorite part, a rescue mode.&lt;br /&gt;
&lt;br /&gt;
Rescue mode lets you boot your slice in a rescue environment, mount your root file system in an alternate location, and do what you want (or need) with it.  This makes it pretty easy to run your appliance from &lt;a href=&quot;http://www.rpath.com/rbuilder/&quot;&gt;rBuilder Online&lt;/a&gt; on a hosted slice.  Here are the steps to get this working.  Choose a Xen Appliance Image (32 or 64 bit, though 64 bit is preferred) that is a single file system image.&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;Create a slice (doesn&#039;t matter what kind, we&#039;re going to blow it away anyway).&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Reboot your slice into rescue mode&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;SSH or console in using the password mailed to you (yes, rescue mode gets started with a randomized password)&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;wget -O - &amp;lt;link to the rBO image&amp;gt; | tar -xz # This downloads and extracts the filesystem image&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;dd if=&amp;lt;path to filesystem image file&amp;gt; of=/dev/sda1&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;e2fs.ext3 -f /dev/sda1 # This forces a file system check, without this check the next step will fail.&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;resize2fs /dev/sda1 # Resize the file system image to match the available size&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;mount /dev/sda1 /mnt&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;copy the following networking configuration files from your rescue image to your new slice image mounted in /mnt&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;/etc/sysconfig/network /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/resolv.conf&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Edit /etc/sysconfig/network to fix the hostname to the desired value&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;chroot /mnt&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;passwd # changes the root password since the rBO images ship with root&#039;s password blanked&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
At this point you can do any additional configuration you wish, such as adding additional users, making sure that openssh-server is installed and configured to start on boot, etc.&lt;br /&gt;
&lt;br /&gt;
When that&#039;s done, shutdown, exit rescue mode from the Slice Host panel, and log in to your new appliance.&lt;br /&gt;
&lt;br /&gt;
There is quite a bit of noise when the slice boots up with an rPath Linux based appliance because the kernel in the image isn&#039;t used for booting, and modules.dep isn&#039;t located for the booting kernel, but that seems harmless.&lt;br /&gt;
&lt;br /&gt;
Now to build an appliance to run on the thing...  I used the rPL 2 beta 3 text devel image as my image while developing this HOWTO. 
    </content:encoded>

    <pubDate>Fri, 09 May 2008 01:28:51 -0500</pubDate>
    <guid isPermaLink="false">http://www.dragonstrider.com/serendipity/index.php?/archives/131-guid.html</guid>
    
</item>
<item>
    <title>PyCon 2008</title>
    <link>http://www.dragonstrider.com/serendipity/index.php?/archives/104-PyCon-2008.html</link>
            <category>Technology</category>
            <category>Turbogears</category>
            <category>Work</category>
    
    <comments>http://www.dragonstrider.com/serendipity/index.php?/archives/104-PyCon-2008.html#comments</comments>
    <wfw:comment>http://www.dragonstrider.com/serendipity/wfwcomment.php?cid=104</wfw:comment>

    <slash:comments>3</slash:comments>
    <wfw:commentRss>http://www.dragonstrider.com/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=104</wfw:commentRss>
    

    <author>nospam@example.com (Joseph Tate)</author>
    <content:encoded>
    I just returned from PyCon 2008 in Chicago, where I connected up again with a few people I met last year and met a few new people.  Rather than write a travelogue, I&#039;ll just highlight a few of the main things that I learned/did.&lt;br /&gt;
&lt;br /&gt;
It looks like some of the niceties of Zope2 are going to leave the silo under the &lt;a href=&quot;http://repoze.org/&quot;&gt;Repose&lt;/a&gt; project.  This means that the zope transaction manager (repoze.tm), retry engine (repoze.retry) and other zope features can be used by your WSGI application.  Also it means that Zope can be hosted as a WSGI app.&lt;br /&gt;
&lt;br /&gt;
I learned there are ways to extend &lt;u&gt;_import_&lt;/u&gt; that don&#039;t &lt;a href=&quot;http://www.python.org/doc/2.3/whatsnew/section-pep302.html&quot;&gt;involve rewriting &lt;u&gt;_import_&lt;/u&gt;&lt;/a&gt;.  I don&#039;t know if I&#039;ll ever need to know this, but it might be useful in a plugin loader of some sort.  There&#039;s a flow chart in &lt;a href=&quot;http://svn.python.org/view/sandbox/trunk/import_in_py/docs/&quot;&gt;Brett&#039;s SVN&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I should probably use more weak references in my Python code.  Dr. Tim Couper gave a lucid overview of references weak and strong, and practical ways of dealing with circular references, including how to detect them using unittest.  I hope he posts his slides soon.&lt;br /&gt;
&lt;br /&gt;
Kevin Dangoor gave a slick demo of TG 2 and Dojo, and gave a quick introduction to Comet servers.  It looks like dojo does pretty much everything that Mochikit does, but adds support for Javascript UI widgets.  Comet looks really cool.  More about that later.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://allmydata.org/trac/tahoe&quot;&gt;Tahoe&lt;/a&gt; is a nifty looking distributed remote filesystem concept.  It needs fuse drivers though before it&#039;s really a filesystem rather than a storage mechanism (like S3).  It&#039;s all RESTy though, which makes some people happy.&lt;br /&gt;
&lt;br /&gt;
There are metrics for measuring code complexity, and python has tools to do that.  Basically every branch in a method increases complexity by one.  Keep complexity down to 10 or less to make unit testing feasible.  More than 10 and the number of unittests required to cover every branch starts to get unmanageable.  Apparently there is a &lt;a href=&quot;http://sourceforge.net/projects/pymetrics/&quot;&gt;PyMetrics&lt;/a&gt; module for measuring code complexity.  Here are the &lt;a href=&quot;http://panela.blog-city.com/pycon_2008_managing_complexity_slides.htm&quot;&gt;slides&lt;/a&gt; from a very interesting talk.&lt;br /&gt;
&lt;br /&gt;
I held a BoF on i18n&#039;izing web applications, and a few people helped me to brainstorm this problem.  The general consensus was that you should do translation as close to the user as prudent; view certainly, controller is ok, but never in the model, if you have messages that are generated by some other process, or that gets cached to the database, the &quot;data&quot; should be stored separately from the operational message.  Generally you should avoid sending this kind of data to the end user, and instead abstract it with messages of your own.  Barry Warsaw came in to the BoF with a hard problem; usually when you&#039;re handling web templates, you filter out the non-element text and build a string table out of that.  What about the cases however, where you have &amp;lt;em&amp;gt; or &amp;lt;b&amp;gt; tags?  I think that if you had an XML parser that would extract the text elements, and if sub-elements are present lump them with the text.  For example, if you had &quot;This text &amp;lt;b&amp;gt;needs&amp;lt;/b&amp;gt; to be translated&quot;, it would be collected as one string, but if you had &quot;&amp;lt;div&amp;gt;&amp;lt;span&amp;gt;Phrase 1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Phrase 2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&quot; it would be two phrases.&lt;br /&gt;
&lt;br /&gt;
There are a couple of cool tools that have stemmed from the PyPy project.  The first offers a &lt;a href=&quot;http://codespeak.net/py/dist/execnet.html&quot;  title=&quot;py.execnet&quot;&gt;framework for distributed testing&lt;/a&gt;.  Py.test does stack introspection so that simple &quot;assert&quot; statements can be used instead of the pseudo self.assertEquals().&lt;br /&gt;
&lt;br /&gt;
I got together with some people to talk about Python Packaging.  Here are some &lt;a href=&quot;http://wiki.python.org/moin/PackagingBOF&quot;  title=&quot;Packaging BoF&quot;&gt;notes&lt;/a&gt; from the meeting, and there&#039;s been &lt;a href=&quot;http://mail.python.org/pipermail/distutils-sig/2008-March/008919.html&quot;  title=&quot;Packaging Discussion&quot;&gt;some additional discussion&lt;/a&gt; on the distutils-SIG mailing list.  Jeff Rush did a tutorial on Thursday, and his &lt;a href=&quot;http://wiki.python.org/moin/buildout/pycon2008_tutorial&quot;  title=&quot;Packaging Tutorial&quot;&gt;slides and exercises&lt;/a&gt; are available.  Hopefully something coherent comes out of this, but it looks like more of the same resistance to making application installation reasonable.&lt;br /&gt;
&lt;br /&gt;
I talked briefly with Ivan Krstić and Noah Kantrowitz about python plugin frameworks.  Hopefully we&#039;ll be able to collaborate some on a generic system for application extensions.&lt;br /&gt;
&lt;br /&gt;
Probably the coolest thing I learned about was a couple of protocols, both implemented by &lt;a href=&quot;http://www.orbited.org/&quot;&gt;orbited&lt;/a&gt;.  Orbited&#039;s client libraries allow for a user to connect to a orbited server to provide a push mechanism for sending messages to a web browser.  The Orbited team was shooting for a 0.4 release after the PyCon Sprints this week.  Check out their &lt;a href=&quot;http://www.orbited.org/livehelp.html&quot;  title=&quot;IRC client via http&quot;&gt;IRC client demo&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
PyCryptoPP was suggested to me as a decent Python based Crypto library, since it&#039;s simply python wrappers for Crypto++.  PyOpenssl has a new maintainer, and should be getting some much needed attention.&lt;br /&gt;
&lt;br /&gt;
I also enjoyed Raymond Hettinger&#039;s talk on &quot;Core Python Containers&quot;.   It was very helpful in understanding what list, dict, deque and set do behind the scenes, and how to use them most efficiently.&lt;br /&gt;
&lt;br /&gt;
Overall, I had a great experience at PyCon 2008.  The venue was big enough for all of us (there were more than 1000 registrants), and there was more than enough room for Open Space/BoF talks.&lt;br /&gt;
&lt;br /&gt;
Chicago style pizza is definitely different from anything I have eaten before.  The jury is still out as to whether it&#039;s worth the hype. 
    </content:encoded>

    <pubDate>Mon, 17 Mar 2008 09:57:40 -0500</pubDate>
    <guid isPermaLink="false">http://www.dragonstrider.com/serendipity/index.php?/archives/104-guid.html</guid>
    
</item>

</channel>
</rss>