<?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 - Work</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>Wed, 02 Dec 2009 21:05:30 GMT</pubDate>

    <image>
        <url>http://www.dragonstrider.com/serendipity/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: The sTate of Things - Work - 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>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>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>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>
<item>
    <title>PyCon 2007</title>
    <link>http://www.dragonstrider.com/serendipity/index.php?/archives/57-PyCon-2007.html</link>
            <category>Technology</category>
            <category>Turbogears</category>
            <category>Work</category>
    
    <comments>http://www.dragonstrider.com/serendipity/index.php?/archives/57-PyCon-2007.html#comments</comments>
    <wfw:comment>http://www.dragonstrider.com/serendipity/wfwcomment.php?cid=57</wfw:comment>

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

    <author>nospam@example.com (Joseph Tate)</author>
    <content:encoded>
    Last night I returned home after 3 days at &lt;a href=&quot;http://us.pycon.org/&quot;  title=&quot;PyCon 2007&quot;&gt;PyCon 2007&lt;/a&gt; in Dallas Texas.  I think my brain is full.  It was great to meet people to whom I&#039;ve talked on IRC or email, or whose software I&#039;ve used.  It was also fun to hang out with Mark Ramm, Robert Brewer, Ian Bicking, Ben Bangert, Rob Orsini and Chad Whitacre at Robert and Chad&#039;s suite on Friday night.  I haven&#039;t laughed so hard in a long time.&lt;br /&gt;
&lt;br /&gt;
As Robert mentioned in his &lt;a href=&quot;http://www.aminus.org/blogs/index.php/fumanchu/2007/02/25/pycon_2007_and_cherrypy&quot; &gt;blog post&lt;/a&gt;, there was some mind melding, er, meeting on the part of Zope, Pylons and CherryPy as well as others.  I&#039;ll look at the way that sockets are handled and contribute some code.  I&#039;m looking forward to this collaboration.  In addition to what Robert mentioned another thing we decided was to come up with several &quot;stories&quot; for deployment and help guide users down the right path for them when deploying a Python web application.&lt;br /&gt;
&lt;br /&gt;
For the rest of the conference, most of the keynote and full length talks were good, the lightning plenary talks were great, having several rooms to hold Birdts of a Feather (BoF) or non-scheduled talks provided much enlightenment, owning an 802.11A wireless chipset was a difference maker in connectivity and bandwidth, and lots of Pythonistas have beards (some of which are out of control)&lt;br /&gt;
&lt;br /&gt;
I noted several things that I thought merited additional attention:&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.edgewall.org/&quot; &gt;trac&lt;/a&gt; -- I didn&#039;t know it could be used with mercurial instead of svn&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;&lt;a href=&quot;http://pyjamas.pyworks.org/&quot; &gt;pyjamas&lt;/a&gt; -- generate javascript from python code&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Idea (some kind of testing tool, can&#039;t find a link)&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;&lt;a href=&quot;http://ipython.scipy.org/moin/&quot; &gt;IPython&lt;/a&gt; -- Interactive Python including a replacement for pdb&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;&lt;a href=&quot;http://www.jackslocum.com/&quot; &gt;Jack Slocum&lt;/a&gt;&#039;s YahooUI extensions/datagrid&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;&lt;a href=&quot;http://www.fitnesse.org/&quot; &gt;Fitnesse&lt;/a&gt; -- A framework for collecting functional and integration tests&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Zope&#039;s TestRunner -- Has something that could be used for memory/object leak detection&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Monit -- might be used for the same&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Star Schema -- Data reporting in memory instead of in db&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Packaging eggs instead of building new setuptools targets for linux packaging systems.&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;&lt;a href=&quot;http://cheeseshop.python.org/pypi/zdaemon/2.0a6&quot; &gt;zdaemon&lt;/a&gt;, &lt;a href=&quot;http://www.plope.com/software/supervisor2/&quot; &gt;supervisor2&lt;/a&gt; and other libraries that may make daemonizing a python program trivial.&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Lots of cool testing tools: &lt;a href=&quot;http://darcs.idyll.org/~t/projects/figleaf/README.html&quot; &gt;figleaf&lt;/a&gt;, &lt;a href=&quot;http://twill.idyll.org/&quot;&gt;twill&lt;/a&gt;, &lt;a href=&quot;http://darcs.idyll.org/~t/projects/scotch/doc/&quot;&gt;scotch&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
Hopefully I can make it again next year. 
    </content:encoded>

    <pubDate>Mon, 26 Feb 2007 15:08:39 -0600</pubDate>
    <guid isPermaLink="false">http://www.dragonstrider.com/serendipity/index.php?/archives/57-guid.html</guid>
    
</item>
<item>
    <title>Nice and Easy Server Calls (or How to keep your hair when developing rAA plugins)</title>
    <link>http://www.dragonstrider.com/serendipity/index.php?/archives/54-Nice-and-Easy-Server-Calls-or-How-to-keep-your-hair-when-developing-rAA-plugins.html</link>
            <category>Work</category>
    
    <comments>http://www.dragonstrider.com/serendipity/index.php?/archives/54-Nice-and-Easy-Server-Calls-or-How-to-keep-your-hair-when-developing-rAA-plugins.html#comments</comments>
    <wfw:comment>http://www.dragonstrider.com/serendipity/wfwcomment.php?cid=54</wfw:comment>

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

    <author>nospam@example.com (Joseph Tate)</author>
    <content:encoded>
    Previous to last weekend, the process for setting up a rAA plugin to talk to the backend looked like the following:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt; Set up a schedule object (one time or immediate based on whether you want to block or not).&lt;/li&gt;&lt;li&gt; Set up a table to hold whatever data you need when doing the operation, or more recently use plugin properties.&lt;/li&gt;&lt;li&gt; Link the schedule Id from the schedule object in 1 with the data in 2.  For immediate tasks, you needed to do this through a callback.&lt;/li&gt;&lt;li&gt; Implement XMLRPC interfaces on the webside to retrieve the data in 2, and to save the results.&lt;/li&gt;&lt;li&gt; Add a logical branch in your backend doTask method to do the new functionality, making xmlrpc calls as appropriate to retrieve the data for processing, and store the result.&lt;/li&gt;&lt;li&gt; Write a callback method to retrieve the result saved above.&lt;/li&gt;&lt;br /&gt;
&lt;/ol&gt;&lt;br /&gt;
Basically that sucked.  Now, the process is as follows.&lt;br /&gt;
&lt;ol&gt;&lt;li&gt; On the web side, make a call to self.callBackend passing in the method name on the backend to call as well as any arguments to pass.&lt;/li&gt;&lt;li&gt; On the server side, implement that function and return a result.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;
Notice that no XMLRPC interfaces need designing, no additional tables need creating, and no callbacks are needed to retrieve the data.&lt;br /&gt;
&lt;br /&gt;
This currently only works for synchronous tasks where the page request will block until the results are available, but in the future, there will be another method (called callBackendAsync) that will make longer running tasks easy (in conjunction with the CallbackStatusWidget).  I hope that I can get to that soon. 
    </content:encoded>

    <pubDate>Mon, 15 Jan 2007 10:24:49 -0600</pubDate>
    <guid isPermaLink="false">http://www.dragonstrider.com/serendipity/index.php?/archives/54-guid.html</guid>
    
</item>
<item>
    <title>Announcing Port 25 version 0.11</title>
    <link>http://www.dragonstrider.com/serendipity/index.php?/archives/48-Announcing-Port-25-version-0.11.html</link>
            <category>Technology</category>
            <category>Work</category>
    
    <comments>http://www.dragonstrider.com/serendipity/index.php?/archives/48-Announcing-Port-25-version-0.11.html#comments</comments>
    <wfw:comment>http://www.dragonstrider.com/serendipity/wfwcomment.php?cid=48</wfw:comment>

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

    <author>nospam@example.com (Joseph Tate)</author>
    <content:encoded>
    I&#039;m pleased to announce a Xen enabled virtual appliance download for Port 25.  Get it &lt;a href=&quot;http://www.rpath.org/rbuilder/project/port25/release?id=5150&quot;  title=&quot;Port 25 Download Page&quot;&gt;NOW!&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
This release contains a new version of SpamAssassin as well as security fixes from rPL.&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Wed, 01 Nov 2006 07:59:35 -0600</pubDate>
    <guid isPermaLink="false">http://www.dragonstrider.com/serendipity/index.php?/archives/48-guid.html</guid>
    
</item>
<item>
    <title>KDE 0.90 beta Released</title>
    <link>http://www.dragonstrider.com/serendipity/index.php?/archives/46-KDE-0.90-beta-Released.html</link>
            <category>KDE Distro</category>
            <category>Work</category>
    
    <comments>http://www.dragonstrider.com/serendipity/index.php?/archives/46-KDE-0.90-beta-Released.html#comments</comments>
    <wfw:comment>http://www.dragonstrider.com/serendipity/wfwcomment.php?cid=46</wfw:comment>

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

    <author>nospam@example.com (Joseph Tate)</author>
    <content:encoded>
    I am pleased to announce the first beta release of the KDE Distribution.  This is based on rPath Linux 1 with updated kde, hal, avahi, cups and other packages, as well as added amarok, kopete, konversation, and k3b.  DVD and CD images are available from the &lt;a href=&quot;http://www.rpath.org/rbuilder/project/kde/release?id=5041&quot;&gt;release page&lt;/a&gt;. &lt;br /&gt;&lt;a href=&quot;http://www.dragonstrider.com/serendipity/index.php?/archives/46-KDE-0.90-beta-Released.html#extended&quot;&gt;Continue reading &quot;KDE 0.90 beta Released&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Fri, 15 Sep 2006 20:54:17 -0500</pubDate>
    <guid isPermaLink="false">http://www.dragonstrider.com/serendipity/index.php?/archives/46-guid.html</guid>
    
</item>
<item>
    <title>Turbogears help wanted</title>
    <link>http://www.dragonstrider.com/serendipity/index.php?/archives/45-Turbogears-help-wanted.html</link>
            <category>Turbogears</category>
            <category>Work</category>
    
    <comments>http://www.dragonstrider.com/serendipity/index.php?/archives/45-Turbogears-help-wanted.html#comments</comments>
    <wfw:comment>http://www.dragonstrider.com/serendipity/wfwcomment.php?cid=45</wfw:comment>

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

    <author>nospam@example.com (Joseph Tate)</author>
    <content:encoded>
    My employer, &lt;a href=&quot;http://www.rpath.org/corp/&quot;&gt;rPath&lt;/a&gt;, is hiring web developers to work on the rPath Appliance Agent team.  rAA of course is built on &lt;a href=&quot;http://www.turbogears.org/&quot;&gt;TurboGears&lt;/a&gt;.  See &lt;a href=&quot;http://www.rpath.com/corp/company-employment.html&quot;&gt;this page&lt;/a&gt; for more details. 
    </content:encoded>

    <pubDate>Fri, 15 Sep 2006 20:22:02 -0500</pubDate>
    <guid isPermaLink="false">http://www.dragonstrider.com/serendipity/index.php?/archives/45-guid.html</guid>
    
</item>
<item>
    <title>rAA in the News</title>
    <link>http://www.dragonstrider.com/serendipity/index.php?/archives/44-rAA-in-the-News.html</link>
            <category>Turbogears</category>
            <category>Work</category>
    
    <comments>http://www.dragonstrider.com/serendipity/index.php?/archives/44-rAA-in-the-News.html#comments</comments>
    <wfw:comment>http://www.dragonstrider.com/serendipity/wfwcomment.php?cid=44</wfw:comment>

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

    <author>nospam@example.com (Joseph Tate)</author>
    <content:encoded>
    So my last entry, oh so many moons ago, mentioned that I was working on a new project.  Now that that project has been released, I can talk about it, but better yet, how about an &lt;a href=&quot;http://www.eweek.com/article2/0,1895,2009420,00.asp&quot;  title=&quot;eWeek Article on rAA and rPath LInux&quot;&gt;article&lt;/a&gt; about rPath Linux, what we&#039;re doing, and the rPath Appliance Agent (or rAA) which I helped design and build.&lt;br /&gt;
&lt;br /&gt;
A little bit about rAA itself; it provides a pluggable framework for system configuration tasks, like setting up networking, setting the root password and checking for and applying software updates.  There are some &lt;a href=&quot;http://www.eweek.com/slideshow/0,1206,l=&amp;s=25990&amp;a=187022,00.asp&quot;  title=&quot;rAA in Action&quot;&gt;screenshots of rAA in action&lt;/a&gt; linked from the eWeek article above.  rAA is written in python and built around &lt;a href=&quot;http://www.turbogears.org/&quot;  title=&quot;TurboGears Main Page&quot;&gt;TurboGears&lt;/a&gt;, a web application framework for RAD and MVC web development using Python.&lt;br /&gt;
&lt;br /&gt;
rAA is Open Source Software, released under the &lt;a href=&quot;http://www.opensource.org/licenses/rpl.php&quot;  title=&quot;Reciprocal Public License Text&quot;&gt;Reciprocal Public License&lt;/a&gt;.  A conary package group that can be added to a &lt;a href=&quot;http://www.rpath.com/rbuilder/&quot;  title=&quot;rBuilder&quot;&gt;rBuilder Project&lt;/a&gt; to insert rAA into your own custom &lt;a href=&quot;http://en.wikipedia.org/wiki/Software_appliance&quot;  title=&quot;Software Appliance as rPath/Wikipedia defines it&quot;&gt;software appliance&lt;/a&gt; is available from the &lt;a href=&quot;http://www.rpath.org/rbuilder/project/raa/&quot;  title=&quot;rAA rBuilder Project&quot;&gt;rAA Project&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Some basic documentation for rAA is available &lt;a href=&quot;http://wiki.conary.com/wiki/rPath_Appliance_Agent&quot;  title=&quot;rAA Documentation Landing Page&quot;&gt;here&lt;/a&gt;.  It&#039;s built with rPath Linux as an assumed installation platform, but &lt;a href=&quot;http://http://www.rpath.org/rbuilder/project/port25/&quot;  title=&quot;Port 25 Mail Server Appliance&quot;&gt;several&lt;/a&gt; &lt;a href=&quot;http://http://www.rpath.org/rbuilder/project/lamp/&quot;  title=&quot;LAMP Appliance&quot;&gt;appliances&lt;/a&gt; &lt;a href=&quot;http://http://www.rpath.org/rbuilder/project/vehera-base/&quot;  title=&quot;MediaWiki Appliance&quot;&gt;have&lt;/a&gt; rAA &lt;a href=&quot;http://www.rpath.org/rbuilder/project/sugarcrm-os/&quot;  title=&quot;SugarCRM Appliance&quot;&gt;built-in&lt;/a&gt;, and have VMware images available so you can try it out without installing a new Linux distribution.&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Tue, 29 Aug 2006 10:41:04 -0500</pubDate>
    <guid isPermaLink="false">http://www.dragonstrider.com/serendipity/index.php?/archives/44-guid.html</guid>
    
</item>
<item>
    <title>Catching up</title>
    <link>http://www.dragonstrider.com/serendipity/index.php?/archives/42-Catching-up.html</link>
            <category>Personal</category>
            <category>Technology</category>
            <category>The Internet</category>
            <category>Work</category>
    
    <comments>http://www.dragonstrider.com/serendipity/index.php?/archives/42-Catching-up.html#comments</comments>
    <wfw:comment>http://www.dragonstrider.com/serendipity/wfwcomment.php?cid=42</wfw:comment>

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

    <author>nospam@example.com (Joseph Tate)</author>
    <content:encoded>
    First of all it sucks to be sick.  I don&#039;t know what I caught, nor where I caught it from, but now I&#039;ll be coughing for at least a week and my lungs are already sore from the last two days of hacking.  I just hope that my wife and son don&#039;t catch it.  Alex already has ear infections and a nasty cough coinciding with the arrival of four new teeth.  At least his &lt;a href=&quot;http://www.dragonstrider.com/gallery/v/XFiles/Morecuteness/8to9/DSC02709.JPG.html&quot;&gt;black eye&lt;/a&gt; is better.&lt;br /&gt;
&lt;br /&gt;
A lot has happened since December, and I won&#039;t even begin to enumerate it all, just to tell you that I was working feverishly to get VMware and QEMU/RAW Hard Drive images working in &lt;a href=&quot;http://www.rpath.com/rbuilder/&quot;&gt;rBuilder Online&lt;/a&gt;.  With that task completed I am no longer working on rBuilder, instead I&#039;m working with Ken VanDine and Xiaowen on something to be announced soon.&lt;br /&gt;
&lt;br /&gt;
Yesterday I modified the PHPAppPackageRecipe class to make it more friendly to sofware upgrades.  Previously the tarball containing the PHP application was extracted directly to /srv/www using whatever root folder was in the tarball.  Then the recipe made a link connecting /srv/www/&lt;packagename&gt; to whatever folder was extracted.  The problem with this arrangement is that if that directory contained the version, as many php apps do, the next version would be installed to a different location causing a manual step to move settings and data to the new folder.&lt;br /&gt;
&lt;br /&gt;
Now the recipe extracts the application as most other packages do to the conary build folder.  Then I copy the contents to /srv/www/&lt;packagename&gt; and eliminate the link.  Hopefully this will ease upgrade pain.  I rebuilt &lt;a href=&quot;http://gallery.menalto.com/&quot;&gt;Gallery&lt;/a&gt; bumping its version to the newly released 2.1 and &lt;a href=&quot;http://s9y.org&quot;&gt;Serendipity&lt;/a&gt; in the &lt;a href=&quot;http://lamp.rpath.org/&quot;&gt;LAMP&lt;/a&gt; rBuilder project so if you&#039;re running either of those be aware that there will be some one-time transitional pain.  Feel free to contact me for help in upgrading to these new packages. 
    </content:encoded>

    <pubDate>Thu, 30 Mar 2006 05:58:33 -0600</pubDate>
    <guid isPermaLink="false">http://www.dragonstrider.com/serendipity/index.php?/archives/42-guid.html</guid>
    
</item>
<item>
    <title>PHP Application Packaging</title>
    <link>http://www.dragonstrider.com/serendipity/index.php?/archives/41-PHP-Application-Packaging.html</link>
            <category>Technology</category>
            <category>The Internet</category>
            <category>Work</category>
    
    <comments>http://www.dragonstrider.com/serendipity/index.php?/archives/41-PHP-Application-Packaging.html#comments</comments>
    <wfw:comment>http://www.dragonstrider.com/serendipity/wfwcomment.php?cid=41</wfw:comment>

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

    <author>nospam@example.com (Joseph Tate)</author>
    <content:encoded>
    I spent some time this weekend packaging &lt;a href=&quot;http://gallery.menalto.com/&quot; &gt;Gallery2&lt;/a&gt; and &lt;a href=&quot;http://www.s9y.org/&quot; &gt;Serendipity&lt;/a&gt; for &lt;a href=&quot;http://www.rpath.com/&quot;&gt;rPath based Linux Distributions&lt;/a&gt;.  As part of that effort, I built a conary recipe superclass to make packaging other PHP applications easier.&lt;br /&gt;
&lt;br /&gt;
This class currently resides in the &lt;a href=&quot;http://www.rpath.org/repos/lamp/browse?char=P&quot;&gt;LAMP repository&lt;/a&gt; in the &lt;a href=&quot;http://www.rpath.org/repos/lamp/troveInfo?t=phpapppackage%3Asource&quot;&gt;phpapppackage:source&lt;/a&gt; trove.  The superclass handles creation of the apache configuration file to drop in to /etc/httpd/conf.d, provides stubs for creating empty files and directories for use by the PHP application, and sets up the requirement on PHP.&lt;br /&gt;
&lt;br /&gt;
So, a new recipe for a simple application like gallery looks like the one &lt;a href=&quot;http://www.rpath.org/repos/lamp/getFile?path=serendipity.recipe;pathId=a0d2243711319925f38268f05219f031;fileId=008b5720a45a32c9f8a141bad273153c4b010c20;fileV=/lamp.rpath.org%40rpl%3Adevel/20051217-1&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Notice the calls to MakeWriteableDirs and CreateWriteable.  Those create the empty config files and directories needed by the application.  These are created with ownership &quot;apache&quot;, as which user the stock httpd server runs.  Also notice the r.macros.dirconf macro.  This data gets inserted into the apache configuration file between &amp;lt;Directory foo&amp;gt; directives so that you can set application specific php configuration values, or even set overrides.&lt;br /&gt;
&lt;br /&gt;
If you use phpapppackage.recipe as a root class to package some other php application, shoot me an e-mail to let me know.  I&#039;d love to hear about it.&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Mon, 19 Dec 2005 09:10:37 -0600</pubDate>
    <guid isPermaLink="false">http://www.dragonstrider.com/serendipity/index.php?/archives/41-guid.html</guid>
    
</item>
<item>
    <title>AJAX and rBuilder</title>
    <link>http://www.dragonstrider.com/serendipity/index.php?/archives/40-AJAX-and-rBuilder.html</link>
            <category>The Internet</category>
            <category>Work</category>
    
    <comments>http://www.dragonstrider.com/serendipity/index.php?/archives/40-AJAX-and-rBuilder.html#comments</comments>
    <wfw:comment>http://www.dragonstrider.com/serendipity/wfwcomment.php?cid=40</wfw:comment>

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

    <author>nospam@example.com (Joseph Tate)</author>
    <content:encoded>
    For the past week or so, I have worked on creating a new AJAX-y group trove builder for rBuilder Online.  This widget will allow anyone who can shop online to create new purpose built Linux images.  The images can then be downloaded, burned to a CD-R, and installed, all in a day.&lt;br /&gt;
&lt;br /&gt;
The best part of the work I&#039;ve been doing is that it elegantly falls back to POSW (Plain old static web) when javascript is disabled.  I do this by rewriting the urls on the page to make the AJAX calls to our XMLRPC interface to rBuilder Online.  If the urls don&#039;t get rewritten, they will make page load calls to perform the same action. &lt;br /&gt;&lt;a href=&quot;http://www.dragonstrider.com/serendipity/index.php?/archives/40-AJAX-and-rBuilder.html#extended&quot;&gt;Continue reading &quot;AJAX and rBuilder&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Thu, 10 Nov 2005 09:22:54 -0600</pubDate>
    <guid isPermaLink="false">http://www.dragonstrider.com/serendipity/index.php?/archives/40-guid.html</guid>
    
</item>

</channel>
</rss>