<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Andreas Fuchs&apos; Journal</title>
    <link rel="alternate" type="text/html" href="http://boinkor.net/" />
    <link rel="self" type="application/atom+xml" href="http://boinkor.net/atom.xml" />
    <id>tag:boinkor.net,2009-08-27://2</id>
    <updated>2010-01-31T22:37:23Z</updated>
    
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type 4.31-en</generator>

<entry>
    <title>cl-beanstalk: A queue service client</title>
    <link rel="alternate" type="text/html" href="http://boinkor.net/archives/2010/01/cl-beanstalk-a-queue-service-c.html" />
    <id>tag:boinkor.net,2010://2.100</id>

    <published>2010-01-31T16:49:52Z</published>
    <updated>2010-01-31T22:37:23Z</updated>

    <summary>Over the weekend, I wrote a little client library to a queue server that I&#8217;ve grown very fond of over the last year, beanstalk. It&#8217;s a very simple queue server, but it comes with a nice feature (delayed jobs) that...</summary>
    <author>
        <name>Andreas Fuchs</name>
        <uri>http://boinkor.net</uri>
    </author>
    
        <category term="Lisp" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en-us" xml:base="http://boinkor.net/">
        <![CDATA[<p>Over the weekend, I wrote a little client library to a queue server that I&#8217;ve grown very fond of over the last year, <a href="http://kr.github.com/beanstalkd/">beanstalk</a>. It&#8217;s a very simple queue server, but it comes with a nice feature (delayed jobs) that I&#8217;ve had a use for recently.</p>

<p>The queue server is nicely engineered (written in C, works with queues a few million jobs deep), and very fast; it has guards in the protocol against worker failure, and it was a pleasure to implement: The whole thing is just 320 lines of code, including comments.</p>

<p>You can get the source (and a tiny example) at the <a href="http://github.com/antifuchs/cl-beanstalk">cl-beanstalk</a> github repository.</p>

<p>Hope this is useful for anyone else - I am planning on using this in autobench myself, to distribute work across several build hosts.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Hunchentoot gets a debugging-acceptor</title>
    <link rel="alternate" type="text/html" href="http://boinkor.net/archives/2009/11/hunchentoot-gets-a-debugging-a.html" />
    <id>tag:boinkor.net,2009://2.99</id>

    <published>2009-11-15T21:11:36Z</published>
    <updated>2009-11-15T21:26:16Z</updated>

    <summary>Today, I submitted a patch (the first free software lisp one in months for me!) to the Hunchentoot project, and it got accepted. Yay! Some backstory: Hunchentoot&#8217;s 1.0.0 release dropped a lot of implementation-dependent features, among them functionality to invoke...</summary>
    <author>
        <name>Andreas Fuchs</name>
        <uri>http://boinkor.net</uri>
    </author>
    
        <category term="Lisp" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en-us" xml:base="http://boinkor.net/">
        <![CDATA[<p>Today, I submitted a patch (the first free software lisp one in months for me!) to the <a href="http://weitz.de/hunchentoot/">Hunchentoot</a> project, and it got accepted. Yay!</p>

<p>Some backstory: Hunchentoot&#8217;s 1.0.0 release dropped a lot of implementation-dependent features, among them functionality to invoke the debugger if an error happens while handling a request. While <a href="http://paste.lisp.org/display/81046">workarounds</a> <a href="http://www.lispworks.com/documentation/HyperSpec/Body/v_break_.htm">exist</a>, none of them were obvious to new users or users who recently upgraded.</p>

<p>The patch I sent should fix this, hopefully. It adds a rudimentary error handling protocol to Hunchentoot, and provides two generic functions whose behavior can be adapted to your error handling needs. You can see for yourself in Hunchentoot&#8217;s <a href="http://bknr.net/trac/browser/trunk/thirdparty/hunchentoot">svn repository</a>.</p>

<p>If you&#8217;re a Hunchentoot user, I urge you to test this (in both development mode using debuggable-acceptor and running with the default settings). The sooner you find bugs, the sooner they can be fixed, the sooner a release can be pushed out. And if you don&#8217;t find bugs at all, that&#8217;s cool, too (-:</p>
]]>
        

    </content>
</entry>

<entry>
    <title>There are only two hard problems in Austrian family law:</title>
    <link rel="alternate" type="text/html" href="http://boinkor.net/archives/2009/09/two-hard-problems.html" />
    <id>tag:boinkor.net,2009://2.98</id>

    <published>2009-09-06T19:24:46Z</published>
    <updated>2009-09-07T19:24:53Z</updated>

    <summary>Caching and naming things. Well, maybe not caching. But if two people are getting married in Austria, they do have to solve the other hard problem....</summary>
    <author>
        <name>Andreas Fuchs</name>
        <uri>http://boinkor.net</uri>
    </author>
    
        <category term="Personal" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en-us" xml:base="http://boinkor.net/">
        <![CDATA[<p>Caching and naming things.</p>

<p>Well, maybe not caching. But if two people are getting married in Austria, they do have to solve the other hard problem.</p>
]]>
        <![CDATA[<p>That is, one partner gets to keep their name, and the other partner has to decide what to do:</p>

<ul>
<li>Take on the partner&#8217;s name (it&#8217;s expected that the female partner does this),</li>
<li>keep one&#8217;s old name,</li>
<li>or prepend or append one&#8217;s own name to the partner&#8217;s name.</li>
</ul>

<p>In the latter two cases, Austrian family law introduces a &#8220;family name&#8221; that is one of the two partners&#8217; original names, which is what they pass on to their children. This makes both options a non-solution: You get your pie, but something else gets eaten: Possibly your <a href="http://juanfgs.files.wordpress.com/2008/02/internet-o_rlyeh.jpg">sanity</a>.</p>

<p>So, if partners &#8220;Fuchs&#8221; and &#8220;Liewald&#8221; were to get married and wanted to use the (wonderfully punny) &#8220;Liewald-Fuchs&#8221; as both partners&#8217; name and the name that their children get, they would be out of luck. Or so it would seem. </p>

<p>It turns out there might be a way to pull this off. A person who recently got a bit of media attention bearing the last name of &#8220;Hollunder-Hollunder&#8221; has done this already (but with slightly different starting parameters and a different goal):</p>

<ol>
<li>Get married, prepend/append names such that one partner has the desired combination of names,</li>
<li>divorce, arrange that both partners keep the new names,</li>
<li>get married <em>again,</em> and have the other partner take on the desired name.</li>
</ol>

<p>One divorce costs <a href="http://www.help.gv.at/Content.Node/10/Seite.100001.html#einver">€500</a>, the legal cost for a marriage certificate after a divorce is <a href="http://www.help.gv.at/Content.Node/7/Seite.070100.html#Kosten">€70</a>. Might just be worth it (-:</p>
]]>
    </content>
</entry>

<entry>
    <title>Clojure and Art of Illusion: BFF</title>
    <link rel="alternate" type="text/html" href="http://boinkor.net/archives/2009/03/clojure-and-art-of-illusion-bf.html" />
    <id>tag:boinkor.net,2009://2.94</id>

    <published>2009-03-29T11:00:14Z</published>
    <updated>2009-03-29T11:00:14Z</updated>

    <summary>Two weeks ago, the rotary program dial on my dishwasher broke. Luckily, I could fix it with two Lego parts (a Cross Axle #6 and a 16-teeth gear) initially, but the program selection experience suffered from the axle&#8217;s being too...</summary>
    <author>
        <name>Andreas Fuchs</name>
        <uri>http://boinkor.net</uri>
    </author>
    
    
    <content type="html" xml:lang="en-us" xml:base="http://boinkor.net/">
        <![CDATA[<p>Two weeks ago, <a href="http://www.23hq.com/antifuchs/photo/4075448">the rotary program dial on my dishwasher broke</a>. Luckily, I could fix it with two Lego parts (<a href="http://www.ihmc.us/lego/kits/peices.html">a Cross Axle #6 and a 16-teeth gear</a>) initially, but the program selection experience suffered from the axle&#8217;s being too thin: it&#8217;d always bend in the turning direction until the selector would too-rapidly rotate past the point I wanted to select. Ugh.</p>

<p>Luckily for me, there&#8217;s a <a href="http://reprap.org/bin/view/Main/WebHome">reprap</a> at the <a href="http://reprap.soup.io">Metalab</a>. This is a low-cost 3d printer that can extrude parts made of ABS (the same material that Lego pieces are made of). With the help of <a href="http://metalab.at/wiki/Benutzer:Wizard23">Philipp</a>&#8217;s MetaCADEvaluator plugin to <a href="http://aoi.sf.net">Art of Illusion (AoI)</a>, I managed to create a very nice 3d model of a replacement for the dial. That plugin let me define parameters for each part, so I could easily resize all parts manually once I discovered that I&#8217;d mistakenly noted down each part&#8217;s diameter instead of the radius.  However, this was slightly fiddly business: All editing happens inside Art of Illusion&#8217;s part name text fields, the syntax is slightly odd, and you can&#8217;t define your own part library. </p>

<p>Enter my urge to try out <a href="http://clojure.org">Clojure</a>. This little side project took three steps:</p>

<ol>
<li>Find out how to embed clojure in AoI (done).</li>
<li>Make it open a swank port so I can on AoI from emacs without having to recompile all the time (done).</li>
<li>Build a part definition DSL (ongoing, one milestone achieved).</li>
</ol>

<p>There&#8217;s a detailed description of these steps after the jump. Here&#8217;s <a href="http://github.com/antifuchs/aoi-swank-plugin/">the github project for my AoI clojure plugin</a>.</p>
]]>
        <![CDATA[<h2>Embedding clojure inside AoI</h2>

<p>This was rather easier than I&#8217;d thought. The hardest part was finding out how clojure&#8217;s <a href="http://clojure.org/compilation">gen-class</a> works so as to generate two classes, one to implement the Plugin interface (so that the plugin gets loaded) and one to implement the Tool interface (so I get a menu entry that lets me start the Swank listener).</p>

<p>After that, it was building an extensions.xml and figuring out how to make ant build a .jar file that AoI could grok (both easy).</p>

<h2>Making it open a Swank port</h2>

<p>That one was easy, as well: Just add the swank-clojure project as a submodule, and add its sources to the plugin .jar file. Having done that, open a port and add the current window somewhere so we can manipulate objects in it later (<a href="http://github.com/antifuchs/aoi-swank-plugin/blob/1987fb6d3477fc5835d1c37b2762ac2cf82c5696/src/org/reprap/artofillusion/SwankTool.clj#L24">source</a>).</p>

<p>So after that, opening the Swank port vie the tool menu let me connect to AoI with emacs and off I went, doing experiments! For all who want to build Art of Illusion plugins with clojure, I&#8217;ve made a minimal-plugin branch that does exactly this, available <a href="http://github.com/antifuchs/aoi-swank-plugin/tree/minimal-plugin">here</a>.</p>

<h2>Building a part definition DSL</h2>

<p>This one was the biggie: I wanted to write lisp that lets me interactively define 3d models. What is here right now is a little DSL that lets me create <a href="http://github.com/antifuchs/aoi-swank-plugin/blob/1987fb6d3477fc5835d1c37b2762ac2cf82c5696/src/org/reprap/artofillusion/objects.clj#L165-171">simple 3d models</a>, and lets me perform boolean operations on them (<a href="http://github.com/antifuchs/aoi-swank-plugin/blob/1987fb6d3477fc5835d1c37b2762ac2cf82c5696/src/org/reprap/artofillusion/objects.clj#L156-163">union, difference, intersection</a>). This is enough to make <a href="http://github.com/antifuchs/aoi-swank-plugin/blob/1987fb6d3477fc5835d1c37b2762ac2cf82c5696/examples/dishwasher-part.clj">this model</a>, which is the <a href="http://reprap.soup.io/post/15859377/Reprapping-a-Dishwasher-Replacement-Knob">exact same part we extruded before</a>.</p>

<p>There are still things left TODO:</p>

<ul>
<li>The syntax of the DSL needs more love. It is quite verbose right now.</li>
<li>Models need relative transformations: witness the &#8220;90 0 0&#8221; on almost every part.</li>
<li>For debugging purposes, it would be useful to get a tree of the composite objects (with only the end result visible), instead of just the one result object.</li>
</ul>

<h2>Conclusion</h2>

<p>All of this was way easier and far more fun than I&#8217;d thought building plugins to java projects could be: I&#8217;d gone in expecting something in the order of gratuitously frustrating and mind-numbingly boring. Instead, after I had the first few hurdles out of the way (most of which were rooted in my emacs&#8217;s slime config (-:), I was euphoric from regular small successes all the way. As you can tell from the <a href="http://github.com/antifuchs/aoi-swank-plugin/commits/master">commit history</a>, this took a little over 3 days to build.</p>

<p>I strongly recommend the Clojure and swank-clojure approach to building plugins to java projects: Once you&#8217;ve got a Swank listener open, it&#8217;s all experimentation and small bits of progress. Excellent stuff, all around.</p>
]]>
    </content>
</entry>

<entry>
    <title>Perfectstorm by Johann Korndoerfer</title>
    <link rel="alternate" type="text/html" href="http://boinkor.net/archives/2008/04/perfectstorm-by-johann-korndoe.html" />
    <id>tag:boinkor.net,2008://2.93</id>

    <published>2008-04-01T15:34:53Z</published>
    <updated>2008-04-01T15:44:01Z</updated>

    <summary> This isn&#8217;t original work, so perhaps more suited to being in my soup than this blog, but it&#8217;s so cool it just has to be on Planet Lisp. perfectstorm is: a real time strategy game study written in Common...</summary>
    <author>
        <name>Andreas Fuchs</name>
        <uri>http://boinkor.net</uri>
    </author>
    
    
    <content type="html" xml:lang="en-us" xml:base="http://boinkor.net/">
        <![CDATA[<p><img src="http://erleuchtet.org/with-health-bars-thumb-300x225.png" alt="perfectstorm screenshot" title="" /></p>

<p>This isn&#8217;t original work, so perhaps more suited to being in my <a href="http://mublag.boinkor.net">soup</a> than this blog, but it&#8217;s so cool it just has to be on Planet Lisp. <a href="http://erleuchtet.org/2008/03/project-overview-perfectstorm.html">perfectstorm</a> is:</p>

<blockquote>
  <p>a real time strategy game study written in Common Lisp using OpenGL for graphics display and cairo for texture generation.</p>
</blockquote>

<p>Looks very very interesting. Google SoC students take note: this is an open source project (-:</p>

<p><small>(found via <a href="http://nein.gei.st/post/1968414/perfectstorm-is-a-real-time-strategy-game">neingeist</a>)</small></p>
]]>
        

    </content>
</entry>

<entry>
    <title>A public service announcement</title>
    <link rel="alternate" type="text/html" href="http://boinkor.net/archives/2008/01/a-public-service-announcement.html" />
    <id>tag:boinkor.net,2008://2.92</id>

    <published>2008-01-15T15:15:06Z</published>
    <updated>2008-01-15T15:15:06Z</updated>

    <summary>It has been brought to our attention that asdf-install is still thought to be the preferred way to install cool lisp software. I would like to use this space to advertise an alternative tool that too few people know about,...</summary>
    <author>
        <name>Andreas Fuchs</name>
        <uri>http://boinkor.net</uri>
    </author>
    
    
    <content type="html" xml:lang="en-us" xml:base="http://boinkor.net/">
        <![CDATA[<p>It has been brought to our attention that <a href="http://www.cliki.net/ASDF-Install" title="CLiki : ASDF-Install">asdf-install</a> is still thought to be the preferred way to install cool lisp software. I would like to use this space to advertise an alternative tool that too few people know about, and that allows you to almost instantly (OK, as fast as your computer can install the required software and download &amp; build the packages) get you up and running with and get you updates of the newest in cool lisp packages.</p>

<p>That tool is <a href="http://common-lisp.net/project/clbuild/">clbuild</a>.</p>

<p>It doesn&#8217;t yet bring in all of the software available on cliki, but it includes enough cool things that I would recommend it to anyone who wants to check out with a minimum of hassle either of (not an exhaustive list, but you get the idea):</p>

<ul>
<li>McCLIM,</li>
<li>Climacs, Closure, Beirc, Gsharp,</li>
<li>Hunchentoot, and</li>
<li>CXML</li>
</ul>

<p>Or just get a lisp system up and running that includes most of the useful libraries out there. If you have been messing around with asdf-install (raise hands if you ever asdf-installed a library to get its dependencies and then pulled that library from CVS again and replaced the symlinks manually), do yourself a favour and check it out.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Broadcatching, iTunes, a &quot;mini&quot; Apple TV</title>
    <link rel="alternate" type="text/html" href="http://boinkor.net/archives/2007/12/broadcatching-itunes-a-mini-ap.html" />
    <id>tag:boinkor.net,2007://2.91</id>

    <published>2007-12-06T00:18:37Z</published>
    <updated>2007-12-06T00:18:37Z</updated>

    <summary>Recently, I got a used Mac Mini from a friend; I decided to put it to good use as a media station in my living room, and it does indeed work pretty well (after fixing it up with codecs that...</summary>
    <author>
        <name>Andreas Fuchs</name>
        <uri>http://boinkor.net</uri>
    </author>
    
    
    <content type="html" xml:lang="en-us" xml:base="http://boinkor.net/">
        <![CDATA[<p>Recently, I got a used Mac Mini from a friend; I decided to put it to good use as a media station in my living room, and it does indeed work pretty well (after fixing it up with codecs that are in use in the real world, but that&#8217;s not the topic of this article (-:).</p>

<p>One thing that I find very useful is the ability to import movie files (that one might download from the vast and unfriendly-to-copyright-holders internet, as described <a href="http://www.engadget.com/2004/11/23/how-to-broadcatching-using-rss-bittorrent-to-automatically/">here</a> for instance) into iTunes on my desktop mac and have the Front Row thing on the living room machine play them over the network. The steps one needs to take in order to get this working are many and tedious, and so I&#8217;ve created an AppleScript to do all the hard work for me. It:</p>

<ul>
<li>Converts an .avi movie (they usually come encoded as DivX or Xvid) into a standalone .mov file using Quicktime Player (this doesn&#8217;t transcode),</li>
<li>extracts the Show name, Season, Episode number, Episode name from the file name via a friend&#8217;s service called &#8220;renamr&#8221; (a telnet 2.0 service, he calls it),</li>
<li>imports the file into iTunes, tags it nicely, and</li>
<li>cleans up after itself.</li>
</ul>

<p>The files thus imported will pop up in the nicely remote-controllable interface, marked as &#8220;unwatched,&#8221; and wait for me to finally get some spare time to sit down and watch them. (Which might very well be after the <a href="http://en.wikipedia.org/wiki/2007_Writers_Guild_of_America_strike">WGA strike</a> ends, so it all should work out nicely in the end.)</p>

<p>If you find yourself wishing for a similar solution, download <a href="http://boinkor.net/mac/Save as TV show.scpt">this file</a>, read the comments in the beginning, skip over the MIT-style licence, and read the code until you are convinced I&#8217;m not doing anything stupid or malicious. Then, have fun using it!</p>
]]>
        

    </content>
</entry>

<entry>
    <title>CXML-RPC update: changed interface, includes server part</title>
    <link rel="alternate" type="text/html" href="http://boinkor.net/archives/2007/12/cxmlrpc-update-changed-interfa.html" />
    <id>tag:boinkor.net,2007://2.90</id>

    <published>2007-12-03T21:45:16Z</published>
    <updated>2007-12-03T21:45:16Z</updated>

    <summary>I didn&#8217;t really like the DWIM interface for type translations on the client, so I made the type information mandatory. (-: This means that instead of: * (xrpc:call &quot;http://localhost:8080/RPC2&quot; &quot;addNumbers&quot; &apos;(1 2 3.0)) ; WRONG You get to do this:...</summary>
    <author>
        <name>Andreas Fuchs</name>
        <uri>http://boinkor.net</uri>
    </author>
    
    
    <content type="html" xml:lang="en-us" xml:base="http://boinkor.net/">
        <![CDATA[<p>I didn&#8217;t really like the DWIM interface for type translations on the client, so I made the type information mandatory. (-:</p>

<p>This means that instead of:</p>

<pre><code>* (xrpc:call "http://localhost:8080/RPC2" "addNumbers" '(1 2 3.0)) ; WRONG
</code></pre>

<p>You get to do this:</p>

<pre><code>* (xrpc:call "http://localhost:8080/RPC2" "addNumbers" '(:integer 1
                                                         :double 2
                                                         :double 3.0))
6.0
</code></pre>

<p>This doesn&#8217;t look vastly superior, but consider this case:</p>

<pre><code>* (xrpc:call "http://localhost:8080/RPC2" "weekDay" `(:time ,(get-universal-time)))
0
</code></pre>

<p>Where before, you had to construct an xml-rpc-date structure; ew. This also allows nicer handling of (unsigned-byte 8) vectors (you can base64-encode them now), and you don&#8217;t have to construct yucky xml-rpc-struct objects anymore: just use alists. The decoding functions now return the type tag that they saw in the response or request.</p>

<p>Speaking of requests, the server is now finished, lifting CXML-RPC to more or less the same level as s-xml-rpc. It implements the introspection functions specified in <a href="http://xmlrpc-c.sourceforge.net/introspection.html">xmlrpc-c&#8217;s documentation</a>, and the <a href="http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php">faults_interop spec</a>. You can define methods for different handlers, which means that you can attach more than one handler to different URLs and they can expose different sets of methods to the world. This might be handy for those running virtual hosts.</p>

<p>In response to yesterday&#8217;s post, Rafal Strzalinski pointed me at Ivan Boldyrev&#8217;s <a href="http://mesemb.ru/soft/lisp/">s-xml-rpc-hunchentoot</a>, which adapts the s-xml-rpc server functions for use with hunchentoot&#8217;s handlers. There&#8217;s no port to DRAKMA for the client part. </p>

<p>I think you should give CXML-RPC a try if you either want to expose multiple sets of methods on different handlers, or you don&#8217;t want to install aserve just for an xml-rpc client. (-:</p>
]]>
        

    </content>
</entry>

<entry>
    <title>XML-RPC client library using Drakma and CXML</title>
    <link rel="alternate" type="text/html" href="http://boinkor.net/archives/2007/12/xmlrpc-client-library-using-dr.html" />
    <id>tag:boinkor.net,2007://2.89</id>

    <published>2007-12-02T15:30:37Z</published>
    <updated>2007-12-03T14:17:34Z</updated>

    <summary>A few weeks ago, I tried using S-XML-RPC for use with a hunchentoot-based web interface to rtorrent. Unfortunately, it comes with a long list of dependencies that are already implemented better by Ediware such as drakma: it can speak HTTPS,...</summary>
    <author>
        <name>Andreas Fuchs</name>
        <uri>http://boinkor.net</uri>
    </author>
    
    
    <content type="html" xml:lang="en-us" xml:base="http://boinkor.net/">
        <![CDATA[<p>A few weeks ago, I tried using <a href="http://common-lisp.net/project/s-xml-rpc/" title="S-XML-RPC">S-XML-RPC</a> for use with a hunchentoot-based web interface to <a href="http://libtorrent.rakshasa.no/" title="The libTorrent and rTorrent Project - Trac">rtorrent</a>. Unfortunately, it comes with a long list of dependencies that are already implemented better by <a href="http://weitz.de">Ediware</a> such as <a href="http://www.weitz.de/drakma/" title="DRAKMA - A Common Lisp web client">drakma</a>: it can speak HTTPS, connect via proxies, and allows cookies (although I&#8217;m not aware of any xml-rpc implementation that supports this (-:).</p>

<p>So I re-implemented s-xml-rpc&#8217;s client part to use the libraries that are already available in <a href="http://common-lisp.net/project/clbuild/">clbuild</a>, and got a pretty pleasant-to-use library. To simply invoke an xml-rpc method, use:</p>

<pre><code>* (xrpc:call "http://betty.userland.com/RPC2" "examples.getStateName" '(:integer 41))
"South Dakota"

* (xrpc:call "http://time.xmlrpc.com/RPC2" "currentTime.getCurrentTime" ())
#&lt;CXML-RPC::XML-RPC-DATE 20071202T06:56:43&gt;
</code></pre>

<p>It&#8217;s entirely undocumented right now, and some names (and interfaces) may be subject to change, but I&#8217;m making it available now anyway, at <a href="http://sbcl.boinkor.net/gitweb?p=cxml-rpc.git;a=summary">my git repository</a>.</p>

<p>The plans for the near future (e.g. next weekend) include a server part based on <a href="http://weitz.de/hunchentoot">Hunchentoot</a>, and, um, test cases and documentation. Stay tuned!</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Blagging about blagging</title>
    <link rel="alternate" type="text/html" href="http://boinkor.net/archives/2007/09/blagging-about-blagging.html" />
    <id>tag:boinkor.net,2007://2.87</id>

    <published>2007-09-10T15:10:47Z</published>
    <updated>2007-09-10T15:19:27Z</updated>

    <summary>I just upgraded this blog to MovableType 4, for which this is a test entry. While I&#8217;m at it, I might as well say things about where I&#8217;ve been gone in the last couple of months. First, I spent a...</summary>
    <author>
        <name>Andreas Fuchs</name>
        <uri>http://boinkor.net</uri>
    </author>
    
    
    <content type="html" xml:lang="en-us" xml:base="http://boinkor.net/">
        <![CDATA[<p>I just upgraded this blog to MovableType 4, for which this is a test entry. While I&#8217;m at it, I might as well say things about where I&#8217;ve been gone in the last couple of months. First, I spent a lovely week in Cambridge, MA, consulting for ITA software. (Photographic evidence <a href="http://www.23hq.com/antifuchs/album/2315744">here</a>.)</p>

<p>Now I&#8217;m hacking on a sweet new project again (news about that in due time, I promise). In the meantime, I started a new (lighter on the technical content, heavier on the pop cultural stuff) tumblelog at <a href="http://mublag.boinkor.net/">http://mublag.boinkor.net/</a>. This one&#8217;s powered by <a href="http://soup.io">Soup</a>, a new blogging platform that two friends of mine are just launching.</p>

<p>Right. More technical content will happen in a few days. Until then, don&#8217;t look at the Unicorn baby link.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Things to consider in a new version of ASDF</title>
    <link rel="alternate" type="text/html" href="http://boinkor.net/archives/2007/06/things-to-consider-in-a-new-ve.html" />
    <id>tag:boinkor.net,2007://2.86</id>

    <published>2007-06-27T23:05:18Z</published>
    <updated>2007-09-10T15:05:51Z</updated>

    <summary>ASDF(reference manual) is a fine piece of software: I like to use it, and find some of the design choices in it to be very good (besides, it&#8217;s the thing that has allowed things like clbuild and asdf-install to grow)....</summary>
    <author>
        <name>Andreas Fuchs</name>
        <uri>http://boinkor.net</uri>
    </author>
    
    
    <content type="html" xml:lang="en-us" xml:base="http://boinkor.net/">
        <![CDATA[<p><a href="http://cliki.net/asdf">ASDF</a>(<a href="http://constantly.at/lisp/asdf/">reference manual</a>) is a fine piece of software: I like to use it, and find some of the design choices in it to be very good (besides, it&#8217;s the thing that has allowed things like <a href="http://common-lisp.net/project/clbuild">clbuild</a> and <a href="http://www.cliki.net/ASDF-Install" title="CLiki : ASDF-Install">asdf-install</a> to grow). However, it is now in wide enough use that people are looking at its internals and are scratching their heads when finding some not-so-very-good design choices.</p>

<p>Here&#8217;s a selection of the things that I think would be good candidates for review in a new version of ASDF (bsdf? yasdf? qwer? /.,m?):</p>
]]>
        <![CDATA[<ul>
<li><p>Using <code>TRAVERSE</code> to come up with a plan for execution (and executing this plan in <code>OPERATE</code>) isn&#8217;t so great: it doesn&#8217;t allow modules&#8217; <code>PERFORM</code> methods to wrap their children&#8217;s <code>PERFORM</code> methods (for stuff like <code>with-compilation-unit</code> or muffling warnings), and makes it quite painful to operate on a non-sequential plan for execution.</p></li>
<li><p>Component references (e.g. in :depends-on lists) shouldn&#8217;t be stored by name, but refer to the component objects themselves. Right now, ASDF stores the component name only, so you always have to look up the component in the enclosing module. AIUI, this is the primary reason why ASDF doesn&#8217;t support rebuilding of files that depend on files in different modules modules(<a href="http://boinkor.net/archives/2007/01/explaining_some_features_of_as.html">see</a>). </p>

<p>Doing it this way is a bit tricky, as depended-on components might not have been constructed yet: I suppose you could do this via prototypes and replace them later on.</p></li>
<li><p>Speaking of :depends-on, it should really be up to the operation and the component to decide what something on the :depends-on list means, not to <code>ASDF::PARSE-COMPONENT-FORM</code>. I think something like</p>

<p><code>defmethod component-dependency-meaning (operation component depended-on-component)</code></p>

<p>should work. Oh, and drop <a href="http://article.gmane.org/gmane.lisp.cclan.general/674">do-first</a>. (-:</p></li>
<li><p>It seems everybody is aching for versioned dependencies. AFAICT, if you do that, you need a way to compare versions and specify &#8220;I want version X or newer, but nothing younger than Y&#8221; things, and it would also be nice to be able to say that system A conflicts with version Y of system B. I think of Debian&#8217;s .deb format, and think this would be ideal. </p>

<p>Of course, this whole mechanism won&#8217;t be of any use unless there are people who use it and keep the information in good shape. This would be the topic of several more blog posts, and is the reason why I&#8217;d suggest leaving versioned dependencies out of the design of a new ASDF, and instead making the component form parser and normalizer smart enough to cope with them once they are implemented in a sensible way.</p></li>
<li><p>Some sense of backwards compatibility (note that the changes proposed here are somewhat incompatible) or a means of easily converting old .asd files to .[whatever the new name is] ones would be nice. And being able to depend on .asd systems from [whatever the new name is].</p></li>
</ul>

<p>So. I&#8217;m not sure if a blog post is the correct medium for this, but I somehow find this more suitable than a mail to cclan-devel. If you&#8217;ve got comments, do blog them yourself or send me an e-mail. (<em>Disclaimer:</em> This is what I consider important. More ASDF-wise people might have more insight into this topic. I&#8217;ve just been thinking about them for quite some time, and just recently came up with the right words.)</p>
]]>
    </content>
</entry>

<entry>
    <title>Ok, so this was lame.</title>
    <link rel="alternate" type="text/html" href="http://boinkor.net/archives/2007/05/ok-so-this-was-lame.html" />
    <id>tag:boinkor.net,2007://2.85</id>

    <published>2007-05-23T21:26:49Z</published>
    <updated>2007-09-10T15:05:51Z</updated>

    <summary>I just attended my first CACert assurance party thing. It started off with a 2-hour talk that gave information that could be easily extracted (with a bit of patience for bad english grammar and spelling) from their wiki. Two things...</summary>
    <author>
        <name>Andreas Fuchs</name>
        <uri>http://boinkor.net</uri>
    </author>
    
    
    <content type="html" xml:lang="en-us" xml:base="http://boinkor.net/">
        <![CDATA[<p>I just attended my first <a href="http://www.cacert.org/" title="CAcert.org">CACert</a> assurance party thing. It started off with a 2-hour talk that gave information that could be easily extracted (with a bit of patience for bad english grammar and spelling) from <a href="http://wiki.cacert.org/wiki/FAQ" title="CACert Wiki - FAQ">their wiki</a>. Two things that stuck out to me (like, indeed, sore thumbs):</p>

<ul>
<li>PGP key signatures are useless, because a signature on a key doesn&#8217;t tell you anything about the standards that were used to get the key owner&#8217;s identity to the signing party.</li>
<li>CACert are trying to get a <a href="http://www.webtrust.org/" title="WebTrust/SysTrust">WebTrust</a>-compatible audit. From what I heard at the talk, instead of being audited for the first time, they worked with the auditors to get into auditable shape (with the same auditor) next year. That sounded kinda <a href="http://www.enron.com">familiar</a> to me&#8230;</li>
</ul>

<p>Anyway, after the talk ended (which was <em>cut short</em> at 2:00h by a person who graciously stepped in as a moderator), the assurance thing itself was kind of anticlimactic: There were ~20 people present; everyone was told to get 10 forms, fill them out, and get assured by (and assure themselves) three people who are <a href="http://wiki.cacert.org/wiki/FAQ/AssuringPeople">Assurers</a>, then repeat the process with seven others. Nobody knew who of the attendees were assurers. I don&#8217;t think the guy who held the talk understood what I was trying to get at when I suggested that this was kinda suboptimal. Frustrated at the lack of a response when I asked him if he himself was an assurer, I left.</p>

<p>I feel like I just wasted (and not in a good way) two hours. I applaud cacert.org&#8217;s server and client certification services (and I&#8217;ll continue to use them), but I&#8217;ll gladly forfeit the 100 assurance points that state my ability to sit through 2 hours of boredom and to defy bad organization at an assurance meeting. Give me a useless (but non-boring) PGP key-signing party in a cafe or a pub any day.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Some details about CLAPPA</title>
    <link rel="alternate" type="text/html" href="http://boinkor.net/archives/2007/04/some-details-about-clappa.html" />
    <id>tag:boinkor.net,2007://2.84</id>

    <published>2007-04-13T11:50:53Z</published>
    <updated>2007-09-10T15:05:51Z</updated>

    <summary>First of all, thanks to all who congratulated me on this, and to Nicolas for starting it all. CLAPPA is the project I submitted for funding to the Google Summer of Code, which is now being funded by clozure. The...</summary>
    <author>
        <name>Andreas Fuchs</name>
        <uri>http://boinkor.net</uri>
    </author>
    
    
    <content type="html" xml:lang="en-us" xml:base="http://boinkor.net/">
        <![CDATA[<p>First of all, thanks to all who congratulated me on this, and to <a href="http://www.cl-user.net/asp/zMJO6/sdataQv5utS5j$sUiDQ30nH8X8yBX8yBXnMq=/sdataQu3F$sSHnB==">Nicolas</a> for starting it all.</p>

<p>CLAPPA is the project I submitted for funding to the <a href="http://code.google.com/soc/" title="Google Code - Summer of Code">Google Summer of Code</a>, which is now being funded by <a href="http://www.clozure.com/" title="Clozure Associates - Lisp Support and Development">clozure</a>. The main idea behind the project is to have a package repository for <a href="http://www.cliki.net/ASDF-Install" title="ASDF-Install on Cliki">asdf-install</a> that presents information more nicely than does <a href="http://www.cliki.net/" title="CLiki : index">cliki</a>. When I talked about  doing something like this project on #lisp, <a href="http://www.cl-user.net/asp/zMJO6/sdataQv5utS5j$sUiDQ30nH8X8yBX8yBXnMq=/sdataQu3F$sSHnB==">Nicolas Lamirault</a> spoke up and told me he had something that was part of the way there already &#8212; CLAPPA.</p>

<p>The goals of this project include checking for common maintainer errors when uploading a released package, and having a bit more machine/human-processable metadata available. This metadata will include dependencies between packages (already done in the original CLAPPA, but loads arbitrary code), versions with release dates (already done, just need all of the packages on cliki.net), and possible naming conflicts (think of the CFFI-<a href="http://uffi.b9.com/" title="Universal Foreign Function Interface">UFFI</a>-COMPAT system in <a href="http://common-lisp.net/project/cffi/" title="CFFI - The Common Foreign Function Interface">CFFI</a>). Some other sweet features will include an atom (or rss) feed for new releases, and for new releases that are dependencies of a given package, to help maintainers keep track of which updates may have broken their packages.</p>

<p>To draw the outline of this project a bit more clearly, here&#8217;s what this project is not about:</p>

<ul>
<li>Dubious security features. This is not intended to be a repository of guaranteed-safe code. (Who&#8217;d guarantee we&#8217;re honest?) CLAPPA is going to protect itself against malicious code, but its users must take care to protect themselves.</li>
<li>Configuration management in the style of <a href="http://www.cliki.net/CL-Librarian" title="CLiki : CL-Librarian">cl-librarian</a>. This might be done in the future, but for now the focus is on getting a useful package repository going.</li>
<li>Versioned dependencies in ASDF or getting packages from DARCS. This is another interesting addition for the future. Again, the focus is on an asdf-install compatible package repository, for now.</li>
</ul>

<p>I&#8217;ve set up a wiki to track development progress at <a href="http://clappa-wiki.boinkor.net/">http://clappa-wiki.boinkor.net/</a> (need to be logged in to edit), and you can read the original google project submission at <a href="http://paste.lisp.org/display/39569">this lisppaste</a>.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>ILC07 the inspirational lisp conference</title>
    <link rel="alternate" type="text/html" href="http://boinkor.net/archives/2007/04/ilc07-the-inspirational-lisp-c.html" />
    <id>tag:boinkor.net,2007://2.83</id>

    <published>2007-04-11T07:33:38Z</published>
    <updated>2007-09-10T15:05:51Z</updated>

    <summary>The talks were good, but most of the interesting stuff at conferences happens in the coffee breaks, anyway. (-: Here&#8217;s a list of half-to-fully-baked ideas that I&#8217;m going to explore in the near future: First of all, the CLAPPA, the...</summary>
    <author>
        <name>Andreas Fuchs</name>
        <uri>http://boinkor.net</uri>
    </author>
    
    
    <content type="html" xml:lang="en-us" xml:base="http://boinkor.net/">
        <![CDATA[<p>The talks were good, but most of the interesting stuff at conferences happens in the coffee breaks, anyway. (-:</p>

<p>Here&#8217;s a list of half-to-fully-baked ideas that I&#8217;m going to explore in the near future:</p>

<ul>
<li><p>First of all, the <a href="http://clappa.boinkor.net/">CLAPPA, the CL APPlication Archive</a> (link may be down due to my hacking on it) project got funding. The <a href="http://www.lispnyc.org">LispNYC</a> breakout group rated it high for google Summer of Code, but then <a href="http://bese.it">Marco Baringer</a> told me <a href="http://clozure.com">Clozure</a> would be interested in funding this. There was so much interest in fact, that they decided to go ahead and really fund this project, thus freeing one SoC slot for another project! (More on that later.)</p></li>
<li><p>If one were to write a somewhat backwards-compatible pathname system for CL (ahem), one could do worse than try and do translation to CL-structured pathnames by putting a translator object into the :HOST slot of the CL pathname. There would still be murkiness w.r.t. merging and creation of new pathnames, but at least it&#8217;d have a slight chance of working. Hm.</p></li>
<li><p>McCLIM&#8217;s CLIM Listener doesn&#8217;t yet have a remote interface to lisps like <a href="http://common-lisp.net/project/slime/">slime</a> does. One thing that would be neat is real remote lisp communication via the SWANK protocol. The other thing is extending that protocol to transport presentations and graphics in addition to text, maybe similar to what display postscript does.</p></li>
<li><p>McCLIM currently has a few problems when running in multiple application frames: Each frame has its own command loop with its own input context, so when an application in frame A decides to accept something, and the user clicks on an object of that type in frame B, it&#8217;s not entirely clear into which input context the object should go (and if it should be highlighted/clickable at all). An idea was to have an input context switcher widget that knows about the input contexts of all active application frames.</p></li>
<li><p>asdf-dependency-grovel should separate dependencies at compile time and ones at load time. This sounds like it&#8217;s easy to do, but I&#8217;m sure there are going to be surprises.</p></li>
<li><p>I want an <a href="http://www.azulsystems.com/products/compute_appliance.htm">Azul</a> machine to play with. They sound horrendously over-powered, but I bet they&#8217;re the best platform to run <a href="http://armedbear.org/abcl.html">ABCL</a> on. (-:</p></li>
</ul>
]]>
        

    </content>
</entry>

<entry>
    <title>Being an account of activities at ILC07</title>
    <link rel="alternate" type="text/html" href="http://boinkor.net/archives/2007/04/being-an-account-of-activities.html" />
    <id>tag:boinkor.net,2007://2.82</id>

    <published>2007-04-10T23:59:09Z</published>
    <updated>2007-09-10T15:05:51Z</updated>

    <summary>Xach nudges, I comply. To summarize the text that is to come, the conference was great. Hooray for Nick Levine, whose conference organization talents are deeply awesome. The setup I had chosen the worst possible time to fly: a 23:45...</summary>
    <author>
        <name>Andreas Fuchs</name>
        <uri>http://boinkor.net</uri>
    </author>
    
    
    <content type="html" xml:lang="en-us" xml:base="http://boinkor.net/">
        <![CDATA[<p><a href="http://xach.livejournal.com/112763.html">Xach nudges</a>, I comply. To summarize the text that is to come, the conference was great. Hooray for Nick Levine, whose conference organization talents are deeply awesome.</p>

<h2>The setup</h2>

<p>I had chosen the worst possible time to fly: a 23:45 (local time) arrival on Saturday guaranteed that I would have to wait 1 hour for the last bus to Cambridge, then arrive there at around 2:00. One bus broke down before that journey started, and a longer-than-expected walk across Cambridge later (which was packed full with drunk english teenagers &#8212; one of them was trying to beat up buildings!), I finally entered the land of Nod at around 3:30. </p>

<h2>Tutorials</h2>

<p>I managed to wake up on time for breakfast, after which the tutorials started. I stayed on Edi&#8217;s <a href="http://www.international-lisp-conference.org/2007/tutorials#building">Hunchentootorial</a> until the second break, then switched, intrigued by <a href="http://jsnell.iki.fi/blog/archive/2007-04-01-ilc-2007-b-mps-tutorial.html">rumors about CMUCL internal discussion</a>, to the <a href="http://www.international-lisp-conference.org/2007/tutorials#mps">MPS thing</a>. The afternoon, I stayed on <a href="http://www.international-lisp-conference.org/2007/tutorials#optimize">Duane&#8217;s Allegro CL debugging/optimization tutorial</a>. From this one, I took away a few neat things to do in an ACL instance when things are bad. At the end, there was an interesting discussion about memory management techniques (which were to be repeated during <a href="http://www.international-lisp-conference.org/2007/speakers#aasman_jans">Jans Aasman&#8217;s</a> talk on the last day). I had dinner at a great Indian place with a crowd of people whose names and faces were forgotten due to me being horribly tired. I think Luke was there. I fell into bed at 10pm and slept for a good, long time.</p>

<p>Favorite quote from Sunday&#8217;s sessions (Duane Rettig):</p>

<blockquote>
  <p>Paul Dietz&#8217; test suite doesn&#8217;t look kindly to adding arguments to standard functions.</p>

<p>It doesn&#8217;t stop us from doing so, but it does give me pause.</p>
</blockquote>

<h2>The talks</h2>

<p>The days of the talks are a blur. Things that stuck were:</p>

<ul>
<li><p>The weird context switch performed during <a href="http://www.international-lisp-conference.org/2007/speakers#stoyan_herbert">Herbert Stoyan&#8217;s talk</a> - From EVAL/APPLY history to code identity transforms in under one minute. (With unbalanced parens on the first such slide. Ow.)</p></li>
<li><p>That, upon hearing about ESA, people seem to worry about compatibility with Emacs applications (don&#8217;t worry, <a href="http://clynbech.livejournal.com/2902.html">Christian</a>, you were not the only one). Guys, an editor&#8217;s <em>text buffers</em> are not ideal places for an interactive user interface, however compelling the idea might have been in the <strong>seventies.</strong></p></li>
<li><p>There was a great debate whether a creative angle for teaching CS (as exhibited by <a href="http://www.international-lisp-conference.org/2007/speakers#repenning_alexander">Alexander Repenning&#8217;s XMLisp</a> method) was superior to the entirely technological (some might say technocratic) method employed by <a href="http://www.international-lisp-conference.org/2007/speakers#queinnec_christian">Queinnec</a>. As Queinnec&#8217;s approach seems to balance out genders, scales to large numbers of students, and compensates for not-entirely-motivated teaching personnel, I, personally, am slightly in favor of doing things in the first semesters his way.</p></li>
<li><p>Had a slight case of reality distortion when, during <a href="http://www.international-lisp-conference.org/2007/speakers#sperber_michael">Michael Sperber&#8217;s presentation</a>, there erupted a discussion about square brackets. A discussion about square and round brackets. At a Lisp conference.</p></li>
<li><p>Felt slightly peeved by <a href="http://www.international-lisp-conference.org/2007/speakers#leitao_antonio">Antonio Menezes Leitao</a>&#8217;s motivational (&#8220;pessimistic&#8221;) pep-talk, which postulated that lisp libraries are poorly documented, badly tested and don&#8217;t solve <a href="http://xach.livejournal.com/83882.html">the whole problem</a>. While technically impressive, his translator from Java to CL also creates badly-documented libraries (<code>#| |#</code>-style comments instead of docstrings because they clutter up the code), which fail tests, and don&#8217;t solve the whole problem any more than do the Java libs. On the plus side, widespread use of this translator could mean a surge in cool lisp code refactoring tools, and I&#8217;d like to see that.</p></li>
<li><p>Props to Cyrus for blatantly ignoring the timekeeper. Those 10 (13, actually) lessons for lisp would have been a great topic for an invited talk, it&#8217;s too bad he had so little time to expand on them.</p></li>
<li><p><a href="http://www.international-lisp-conference.org/2007/speakers#herzeel_charlotte">Charlotte Herzeel&#8217;s talk</a> was an eye-opener for me and (it seems) many others who hadn&#8217;t thought much about AOP before. Declarativeness for application behavior descriptions = win.</p></li>
<li><p>Was impressed that not once in his talk did <a href="http://www.international-lisp-conference.org/2007/speakers#borden_andrew">Andrew Borden</a> utter the word &#8220;Lisp&#8221; or anything related to it. People with more mathematical skills than me might have gotten something from it.</p></li>
<li><p>The ALU meeting. This was a once-in-a-lifetime experience, in that I don&#8217;t want to attend one ever again. Interesting fact: The ALU board had 10 members (not sure how many there are after the election). It must be hard to coordinate so many people. Do you need all of ten to maintain an association whose stated purpose is organizing ILCs?</p></li>
<li><p>The Banquet was pretty great. Lots of fun was had, in addition to very good food. I sat next to <a href="http://www.international-lisp-conference.org/2007/speakers#jones_richard">Richard Jones</a>, but was too awed to talk much about things of importance with him. I hear <a href="http://jsnell.iki.fi/blog/">Juho</a> did bounce some ideas off him later on, which is good.</p></li>
<li><p>Deeply impressed by <a href="http://www.international-lisp-conference.org/2007/speakers#serrano_manuel">HOP</a>. Also, amused that Serrano, as a french native, chose a name that starts with #\H.</p></li>
<li><p>Happy that more vendors are enthusiastic about extensible sequences. Heads up to would-be improvers of Common Lisp: it&#8217;s possible to add good things to CL that don&#8217;t add (much) incompatibility with the spec, but retain usefulness. Looking forward to a <a href="http://cdr.eurolisp.org">CDR document</a>.</p></li>
</ul>

<h2>After the conference</h2>

<p>On Wednesday, Nick announced that there would be four places on the <a href="http://www.international-lisp-conference.org/2007/tours">Bus tour</a> to Anglesey Abbey and Ely were available and already paid for; that was too good an opportunity to pass on. (I later learned that one of the places was Patrik&#8217;s, which means I&#8217;ll have to invite him to a few drinks at the metalab in exchange. (-:)</p>

<p>Also, on Wednesday evening, Robert Strandh organized a dinner for Nick and a few others at <a href="http://www.hotelfelix.co.uk/">Hotel Felix</a>, for the invitation to which I&#8217;m very grateful. Great conversation was had, along with very tasty food, and a lot of (I hear) good wine. (-:</p>

<p>Both Anglesey Abbey and Ely (Thursday) were remarkably beautiful (the great weather didn&#8217;t hurt, either). Also, our tour guide managed to keep us all awake on the bus to and from each place with stories about each place, which I think was no small feat. Some photos of this tour are available on the <a href="http://flickr.com/groups/ilc07/">ilc07 flickr group</a>.</p>

<p>After the tour, Nick announced that one more place in a punt was available. As nobody else was interested, I gladly took that place, too, and had a great ride, taking pictures until the camera&#8217;s battery died. Unfortunately, I didn&#8217;t make it to the appointed place at the appointed time in order to meet Robert, Cathleen and Cyrus for dinner that evening. Too bad, I hear it was really good.</p>

<p>Finally, Friday was a day of packing stuff and walking around Cambridge taking more photos (some of which I might upload later), and flying home. Of special remarkability, I think, are photos of a shop called &#8220;TOTAL IT SOLUTIONS&#8221; (not an insurance provider), and of a poster announcing Cambridge Stammering Open Day, which I think will finally establish Cambridge as the perfect place to hold conferences on speech impediments.</p>
]]>
        

    </content>
</entry>

</feed>
