<?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>A view from the hill - Computer</title>
    <link>http://hillview.bugwriter.net/</link>
    <description>Blogging Holgers little world</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.1 - http://www.s9y.org/</generator>
    <pubDate>Fri, 30 May 2008 07:00:34 GMT</pubDate>

    <image>
        <url>http://hillview.bugwriter.net/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: A view from the hill - Computer - Blogging Holgers little world</title>
        <link>http://hillview.bugwriter.net/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>Everything is average nowadays</title>
    <link>http://hillview.bugwriter.net/archives/111-Everything-is-average-nowadays.html</link>
            <category>Linux</category>
    
    <comments>http://hillview.bugwriter.net/archives/111-Everything-is-average-nowadays.html#comments</comments>
    <wfw:comment>http://hillview.bugwriter.net/wfwcomment.php?cid=111</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://hillview.bugwriter.net/rss.php?version=2.0&amp;type=comments&amp;cid=111</wfw:commentRss>
    

    <author>nospam@example.com (Holger Schauer)</author>
    <content:encoded>
    I&#039;ve tried Compiz with Metacity again and switch it off after a day -- again. I&#039;m not willing to do without working software suspend just for some graphical whizz. I&#039;ve been using Metacity for, I think nearly two years now, on my work computers and have somehow accomodated to it&#039;s various glitches (for instance the unusable keyboard settings). On my trusty home workstation, however, I&#039;ve stuck with &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=463&amp;amp;entry_id=111&quot;  onmouseover=&quot;window.status=&#039;http://www.windowmaker.info/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;external link: wmaker&quot;&gt;WindowMaker&lt;/a&gt;, which I think I&#039;ve been using roughly since 1997 (I can&#039;t remember the version number, but it was fairly low). Unfortunately, development seems to have stopped -- since quite some time there is no sign of activity on the webpage and the mailing list archive is dead. &lt;br /&gt;
&lt;br /&gt;
Yesterday, out of a current frustration about Metacity, I installed a naked current version of WindowMaker on one of my machines, under Ubuntu 8.04 (don&#039;t try to make WindowMaker work under Gnome: While WindowMaker does &quot;work&quot; under Gnome, it is really crippled. For instance, the keyboard setting know nothing about WindowMaker but still override your keyboard settings via, say, WPrefs.). Nearly everything worked as expected, but there were two glitches: the menu didn&#039;t reflect the installed software. Having customized the thing under my Debian system, I knew that this was supposed to work with the update-menu script, but that was missing. Some web-searching revealed that for some reason or other Ubuntu no longer installs the menu(-xdg) package. The other glitch was a very old complaint: That WindowMaker doesn&#039;t ship with a virtual desktop switcher or pager. You don&#039;t need to tell me about the different philosophy of WindowMaker, I know all about it. However, I&#039;ve been using Fvwm and OpenLook (OLVWM) too long.&lt;br /&gt;
&lt;br /&gt;
I could use gnome-panel (which I&#039;ve done before in the past), but of course that brings me those two panels that make sense for Metacity and besides it also means that I would still depend on gnome. I&#039;ve did quite a bit of looking around to find out what all the cool Fluxbox, Openbox etc. users are using and finally found &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=464&amp;amp;entry_id=111&quot;  onmouseover=&quot;window.status=&#039;http://fbpanel.sourceforge.net/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;external link: fbpanel&quot;&gt;fbpanel&lt;/a&gt; (the trick was to search for &quot;taskbar&quot; instead of &quot;pager&quot;). So, finally thanks to netwm support (which I think is in WindowMaker since 0.90), the one missing bit from WindowMaker is finally there without Gnome. Oh my, I&#039;m finding this out really late.  
    </content:encoded>

    <pubDate>Fri, 30 May 2008 20:00:00 +0200</pubDate>
    <guid isPermaLink="false">http://hillview.bugwriter.net/archives/111-guid.html</guid>
    
</item>
<item>
    <title>Emacs development: editor flamewars revisited</title>
    <link>http://hillview.bugwriter.net/archives/107-Emacs-development-editor-flamewars-revisited.html</link>
            <category>Emacs</category>
    
    <comments>http://hillview.bugwriter.net/archives/107-Emacs-development-editor-flamewars-revisited.html#comments</comments>
    <wfw:comment>http://hillview.bugwriter.net/wfwcomment.php?cid=107</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://hillview.bugwriter.net/rss.php?version=2.0&amp;type=comments&amp;cid=107</wfw:commentRss>
    

    <author>nospam@example.com (Holger Schauer)</author>
    <content:encoded>
    &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=450&amp;amp;entry_id=107&quot;  onmouseover=&quot;window.status=&#039;http://steve-yegge.blogspot.com/2008/04/xemacs-is-dead-long-live-xemacs.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://steve-yegge.blogspot.com/2008/04/xemacs-is-dead-long-live-xemacs.html&quot;&gt;Steve Yegge blogs about XEmacs needs to die&lt;/a&gt; and I would like to add my own little comment on the issue. First, perhaps some background: I&#039;m a long-term &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=451&amp;amp;entry_id=107&quot;  onmouseover=&quot;window.status=&#039;http://www.xemacs.org/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;external link: xemacs&quot;&gt;XEmacs&lt;/a&gt; user, since about 1995, I think. I started hacking Elisp around 1996, implementing a major mode for the &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=452&amp;amp;entry_id=107&quot;  onmouseover=&quot;window.status=&#039;http://www.mcs.anl.gov/AR/otter/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;external link: Otter&quot;&gt;Otter theorem prover&lt;/a&gt; and various other stuff. Since 1997 or so, I  had been somewhat active on the xemacs-beta mailing list, reporting build successes/failures, participating in discussions etc. and even writing an article on the then-new XEmacs port to Windows in the german &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=453&amp;amp;entry_id=107&quot;  onmouseover=&quot;window.status=&#039;http://www.heise.de/ix/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;external link: iX&quot;&gt;iX&lt;/a&gt; magazine. So, perhaps, I&#039;m a bit biased towards XEmacs.  That I&#039;ve been using XEmacs instead of Emacs had a lot to do with two factors: at my university, the local Emacs guru used XEmacs and provided a very complete configuration to start with. To start hacking Prolog source didn&#039;t require any configuration on my side at all. When I tried to re-establish that configuration on my own linux box, using Gnu Emacs was totally out of the question, which is basically the second reason: XEmacs came with a lot of batteries included, whereas Gnu Emacs only came with a directly dying low battery at best. And third, the XEmacs interface experience was a lot friendlier than with the naked Gnu Emacs.&lt;br /&gt;
&lt;br /&gt;
Now, at the time I was actively following XEmacs development, XEmacs had a whole lot of man power behind it, with lively discussions and an exciting movement of adding new features. At the same time, RMS discussed switching Gnu Emacs to Guile (a scheme dialect), which me, as a Common Lisp user, scared me off even more. Around 2002 or so, my spare time for XEmacs dropped to zero, so I unsubscribed the development mailing list and was just a happy user. Until two seemingly unrelated things happened: first of all, Unicode was no longer to be ignored and it was obvious that the Mule (multiple languages for emacs or some such) for XEmacs wasn&#039;t up to the task, especially not on Windows. That was quite a problem for me back then with the then current stable XEmacs 21.4. Now, six years later, XEmacs 21.5 is still not there (aka released as the new stable version) and it&#039;s unicode support still sucks (not so much as it did, say, two years ago, but it still fails a lot of tests from &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=454&amp;amp;entry_id=107&quot;  onmouseover=&quot;window.status=&#039;http://www.cl.cam.ac.uk/~mgk25/unicode.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;external link: unicode&quot;&gt;Markus Kuhn unicode&lt;/a&gt; test suite).  The second development was that the Emacs team, which I had only barely been aware of previously, somehow gained a enourmous momentum and catched up a lot of ground, where XEmacs had been the leader by far. In particular, as of Emacs 22, nobody in its sane mind could argue against the fact that the current Emacs handles Unicode etc. far better than XEmacs (this is especially true for XEmacs 21.4 on Windows, but even the current beta XEmacs 21.5-b28 on Unix isn&#039;t where it should be). This seems to be directly related to the fact that a lot of the key developers of the end of the last century no longer actively participate in XEmacs development. I think only few people from the XEmacs crowd would argue against the impression that XEmacs development has more or less cringed to a halt and the distribution of development power between Emacs and XEmacs development is nowadays reversed to the situation from the 90s.&lt;br /&gt;
&lt;br /&gt;
That being said, I still stick with XEmacs. Last time I tried using Gnu Emacs (that&#039;s the Emacs 22 from Ubuntu Hardy), I still found that I&#039;m far more accustomed with the XEmacs intrinsics on how to perform specific actions  than with how it works in Emacs. And I never got around to clean up my mess of configuration files to properly support the various flavours plus adding the extension libraries that still don&#039;t ship with Emacs (&lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=455&amp;amp;entry_id=107&quot;  onmouseover=&quot;window.status=&#039;http://common-lisp.net/project/slime/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;external link: slime&quot;&gt;Slime&lt;/a&gt;, for instance). Finally, with more and more users switching to Emacs, there has to be someone reporting problems, &lt;img src=&quot;http://hillview.bugwriter.net/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Now, back to Steves blog post: I think he has some valid points in it, but for the most part I disagree. First of all, while I agree that Eclipse and similar IDEs are still not at the greatest enemy to Emacs (regardless of flavour). I&#039;m currently again using Eclipse at work and it&#039;s a pain finding out how to properly associate an unknown file extension with some specific editor (mode). And it&#039;s a memory hog that results in unbelievable handling (on my dual core 2GB equipped desktop) that is even worse than my first XEmacs experience on my 486/33 with 8MB ram in 1995. Eight megs and constantly swapping? Hah! I can&#039;t believe that even today I have to hear that Emacsen would be too complicated, given that for any task/configurations I spend endless time searching/clicking through the gazillions of settings in Eclipse. &lt;br /&gt;
&lt;br /&gt;
However, I also don&#039;t believe that a marriage between Emacs and some web-browser is the way to go. There are much more pressing issues to move Emacs into the next century than switching from Elisp to &amp;lt;whatever&amp;gt;. If you&#039;re interested in extending your editor, you have to learn about the way how to do that. But that is totally independent from the question which editor you&#039;re going to use in the first place.&lt;br /&gt;
What is a much more pressing need in my opinion is finally implementing multi-tasking for the (X)Emacs core. Still being locked in a single-threaded application model is sooo 1990s. It&#039;s not becoming more and more ridicuosly, it&#039;s utterly unbelievable.&lt;br /&gt;
&lt;br /&gt;
In one other point, though, Steve is right on track: the divergence between APIs is becoming a bigger problem with every passing day. I think it&#039;s very unfortunate that a) Emacs developers don&#039;t let them inspire by the existing APIs in XEmacs and vice versa and b) that there are too few XEmacs developers that merge current Emacs enhancement into the XEmacs codebase (the other way &#039;round is always problematic due to license issues).&lt;br /&gt;
&lt;br /&gt;
So, before I would consider pursuing a major architectural change like XUL or some such for Emacs, I would first work on the much lower-hanging fruit of narrowing the gap between the two flavours. It&#039;s a pity I myself only have the spare time to write such blog posts instead of actively working on code towards that goal.&lt;br /&gt;
&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Wed, 30 Apr 2008 22:34:00 +0200</pubDate>
    <guid isPermaLink="false">http://hillview.bugwriter.net/archives/107-guid.html</guid>
    
</item>
<item>
    <title>UCW leadership change</title>
    <link>http://hillview.bugwriter.net/archives/108-UCW-leadership-change.html</link>
            <category>Lisp</category>
    
    <comments>http://hillview.bugwriter.net/archives/108-UCW-leadership-change.html#comments</comments>
    <wfw:comment>http://hillview.bugwriter.net/wfwcomment.php?cid=108</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://hillview.bugwriter.net/rss.php?version=2.0&amp;type=comments&amp;cid=108</wfw:commentRss>
    

    <author>nospam@example.com (Holger Schauer)</author>
    <content:encoded>
    In case you&#039;re interested in continuation-based web development with Common Lisp, it might be of interest to learn that &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=456&amp;amp;entry_id=108&quot;  onmouseover=&quot;window.status=&#039;http://common-lisp.net/pipermail/bese-devel/2008-April/003221.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://common-lisp.net/pipermail/bese-devel/2008-April/003221.html&quot;&gt;Drew Campsie has voluntered to take over UCW development&lt;/a&gt;. Marco Baringer, initiator and maintainer of &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=457&amp;amp;entry_id=108&quot;  onmouseover=&quot;window.status=&#039;http://common-lisp.net/project/ucw/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://common-lisp.net/project/ucw/&quot;&gt;UncommonWeb&lt;/a&gt; (aka UCW) &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=458&amp;amp;entry_id=108&quot;  onmouseover=&quot;window.status=&#039;http://common-lisp.net/pipermail/bese-devel/2008-April/003232.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://common-lisp.net/pipermail/bese-devel/2008-April/003232.html&quot;&gt;seemed somwhat relieved&lt;/a&gt; that finally somebody with more time on his hand steps up to take over. &lt;br /&gt;
&lt;br /&gt;
That Marco hadn&#039;t had the time to keep pushing UCW is quite obvious from the mailing list archive. Lately Attila Lendvai seemed to me (an innocent external observer) to had pushed UCW foreward, however, as he &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=459&amp;amp;entry_id=108&quot;  onmouseover=&quot;window.status=&#039;http://common-lisp.net/pipermail/bese-devel/2008-April/003228.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://common-lisp.net/pipermail/bese-devel/2008-April/003228.html&quot;&gt;Attila announced&lt;/a&gt;, he wants to go into a different direction than Drew.&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been using ucw-dev during the last two years and the current situation really called for a change, in my opinion. UCWs main problem, as I observe it, is lacking documentation and clearly stated goals which way UCW will go. The automatically extracted documentation doesn&#039;t contain information how the bits fit together and &lt;strong&gt;all&lt;/strong&gt; tutorials are a) incomplete, b) outdated as far as they are targetting ucw-dev, whereas development has mainly happened in ucw-ajax. However, it was not all clear that ucw-ajax really would become the main line of UCW. &lt;br /&gt;
&lt;br /&gt;
I like UCWs component architecture a lot and will eagerly follow what is going to happen. With two prominent developers such as Marco and Attila more or less leaving the project, it will be interesting to see with how much activity development will happen from now on.&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Wed, 30 Apr 2008 22:06:42 +0200</pubDate>
    <guid isPermaLink="false">http://hillview.bugwriter.net/archives/108-guid.html</guid>
    
</item>
<item>
    <title>Running Linux on Dell systems</title>
    <link>http://hillview.bugwriter.net/archives/105-Running-Linux-on-Dell-systems.html</link>
            <category>Linux</category>
    
    <comments>http://hillview.bugwriter.net/archives/105-Running-Linux-on-Dell-systems.html#comments</comments>
    <wfw:comment>http://hillview.bugwriter.net/wfwcomment.php?cid=105</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://hillview.bugwriter.net/rss.php?version=2.0&amp;type=comments&amp;cid=105</wfw:commentRss>
    

    <author>nospam@example.com (Holger Schauer)</author>
    <content:encoded>
    Dell is selling Ubuntu equipped systems since about a year now and seems to be &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=427&amp;amp;entry_id=105&quot;  onmouseover=&quot;window.status=&#039;http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9077678&amp;amp;intsrc=hm_list&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;articleId=9077678&amp;intsrc=hm_list&quot;&gt;quite happy&lt;/a&gt; with it. Whatever that effectively means, at least I can tell that I&#039;m quite happy with Linux on Dell systems, too.&lt;br /&gt;
&lt;br /&gt;
Through the last five years, I&#039;ve been using Linux on a number of Dell systems. Under my personal control there have been three laptops (Dell C610, D610 and a Latitude 640) and a desktop (Optiplex 755), on which I have been running Debian Sarge, Ubuntu Dapper, Feisty and now Hardy. We also had several Dell servers at work running more or less smoothly with Debian (sarge, etch). Using Linux wasn&#039;t always without problems: I had trouble with built-in modems, PCMCIA ISDN cards and acpi/hibernation. For example, on my private Latitude 640, I have trouble suspending at all, because of the ipw3945 driver for the wlan. But the important thing to note is that basically all problems were really small and never of a size requiring me to use some other OS in the first place. &lt;br /&gt;
&lt;br /&gt;
The only real issue is not with Dell per se, but more with my favourite OS, Debian: over the years, and especially with the ever-lasting sarge release, getting Debian to run on a recent system got more and more difficult. That&#039;s the main reason why I&#039;ve been using Ubuntu on all recent hardware I had contact with: it&#039;s more or less (more so than less) a Debian system but does run on modern hardware. Main issues here were graphics adapters, sata/scsi hostadapters and network/wifi cards, or to put it otherwise: too old kernels, too old X.org. Both problem sources can simply be solved by using a recent version of Ubuntu. Sorry, Debian, but your release cycle is just too long to be acceptable. Granted, all these problems are mostly an issue when installing a new system, but it&#039;s not always possible to plug in some old disc with a working version of Linux.&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Mon, 21 Apr 2008 19:51:00 +0200</pubDate>
    <guid isPermaLink="false">http://hillview.bugwriter.net/archives/105-guid.html</guid>
    
</item>
<item>
    <title>Hang Wire</title>
    <link>http://hillview.bugwriter.net/archives/104-Hang-Wire.html</link>
            <category>Linux</category>
    
    <comments>http://hillview.bugwriter.net/archives/104-Hang-Wire.html#comments</comments>
    <wfw:comment>http://hillview.bugwriter.net/wfwcomment.php?cid=104</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://hillview.bugwriter.net/rss.php?version=2.0&amp;type=comments&amp;cid=104</wfw:commentRss>
    

    <author>nospam@example.com (Holger Schauer)</author>
    <content:encoded>
    Recent fun:&lt;br /&gt;
- Working hibernate/suspend without any manual configuration on a brand new Dell desktop using Ubuntu 8.04 (beta).&lt;br /&gt;
- Watching a self-generated video CD (probably done under Windows) under Linux without any problem with my wife that we couldn&#039;t watch on Windows due to scrambled colours under Windows media player.&lt;br /&gt;
&lt;br /&gt;
Recent less fun:&lt;br /&gt;
- Hibernate/suspend on our older Dell laptop with Ubuntu 7.10 and finding it&#039;s a known issue with the ipw3945 driver.&lt;br /&gt;
- Getting vmware to work on a recent 2.6.24 system.&lt;br /&gt;
- Having fixed that finding out the hard way that Aero won&#039;t display in the VM, requiring to go back to cloning the (not so small) physical machine a third time.&lt;br /&gt;
- Being unable to get a DHCP lease over the rt2x00 driver for my USB wlan stick with kernel 2.6.24, despite being able to get a sucessful connect via wpa_supplicant/wext.&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Tue, 08 Apr 2008 07:55:39 +0200</pubDate>
    <guid isPermaLink="false">http://hillview.bugwriter.net/archives/104-guid.html</guid>
    
</item>
<item>
    <title>Escaping from sql-reader-syntax in CL-SQL</title>
    <link>http://hillview.bugwriter.net/archives/100-Escaping-from-sql-reader-syntax-in-CL-SQL.html</link>
            <category>Lisp</category>
    
    <comments>http://hillview.bugwriter.net/archives/100-Escaping-from-sql-reader-syntax-in-CL-SQL.html#comments</comments>
    <wfw:comment>http://hillview.bugwriter.net/wfwcomment.php?cid=100</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://hillview.bugwriter.net/rss.php?version=2.0&amp;type=comments&amp;cid=100</wfw:commentRss>
    

    <author>nospam@example.com (Holger Schauer)</author>
    <content:encoded>
    This post is mainly a reference post about a particular topic whose solution wasn&#039;t immediately obvious to me from the docs to CL-SQL. Using CL-SQL with (enable-sql-reader-syntax), I had written a routine that looks basically likes this:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
&lt;pre&gt;
(defun data-by-some-criteria (criteria &amp;key (dbspec +db-spec+)  (dbtype +db-type+))
  (with-database (db dbspec :database-type dbtype :if-exists :old)
    (let (dbresult)
      (if criteria
	  (setq dbresult
		(select &#039;some-model &#039;other-model
			:where [and [= [some.criteria] criteria]
			            [= [some.foreign_id] [other.id]]]
			:order-by &#039;([other.name] [some.foreign_id] 
				          [year] [some.name])
			:database db))
          (setq dbresult
		(select &#039;some-model &#039;other-model
			:where [and [null [some.criteria]]
			            [= [some.foreign_id] [other.id]]]
			:order-by &#039;([other.name] [some.foreign_id] 
				          [year] [some.name])
			:database db))
      (when dbresult
	(loop for (some other) in dbresult
	      collect some)))))
&lt;/pre&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
This is ugly because the only difference between those two select statements is the check for the criteria, but I had no idea how to combine the two select statements into one, because it&#039;s not possible to embed lisp code (apart from symbols) into an sql-expression (i.e. the type of arguments for :where or :order etc.).&lt;br /&gt;
&lt;br /&gt;
With the next requirement things would become far worse: The order-by statement needs to get more flexible so that it is possible to sort results by year first. Given the approach shown above this would result in at least four select statements, which is horrible. So, naturally I wanted a single select statement with programmatically obtained  :where and :order-by sql expressions.&lt;br /&gt;
&lt;br /&gt;
Step 1: It occured to me that it should be possible to have the arguments in a variable and simply refer to the variable. E.g., using a more simple example:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
&lt;pre&gt;
(let (where-arg)
  (if (exact-comp-needed)
      (setq where-arg &#039;[= [column] someval])
      (setq where-arg &#039;[like [column] someval]))
  (select &#039;model :where where-arg))
&lt;/pre&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
So I could now have my two different where-args and two different order-args and use a single select statement. Main problem solved. &lt;br /&gt;
&lt;br /&gt;
Step 2: But for the :where arg in my original problem, only a small fraction of the sql-expression differs. So how do I avoid hard coding the entire value of where-arg? How can I combine some variable part of an sql-expression with some fixed parts? I.e, ultimately I want something like:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
&lt;pre&gt;
(let (comp-op where-arg)
  (if (exact-comp-needed)
      (setq comp-op &#039;=)
      (setq comp-op &#039;like))
  (setq where-arg &#039;[ &amp;lt;put comp-op here&amp;gt; [column1] someval])
  (select &#039;model :where where-arg))
&lt;/pre&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
But with CL-SQL modifying the reader, there seems to be no way to make &amp;lt;put comp-op here&amp;gt; work. I didn&#039;t knew how to get the usual variable evaluation into the sql-expression, or how to escape from CL-SQL&#039;s sql-reader-syntax to normal lisp evaluation.  &lt;br /&gt;
&lt;br /&gt;
Somewhere in the back of my head where was that itch that CL-SQL might offer some low-level access to sql expressions. And indeed it does. There are two useful functions, sql-expression and sql-operation. sql-operation &quot;returns an SQL expression constructed from the supplied SQL operator or function operator and its arguments args&quot; (from the cl-sql docs), and we can supply the operator and its arguments from lisp -- which is exactly what I want.&lt;br /&gt;
&lt;br /&gt;
Now, the nice thing is that it&#039;s easy to mix partly handcrafted sql expressions with CL-SQL special sql syntax constructs that will be automatically handled by the reader (if you enable it only via enable-sql-reader-syntax, of course). I.e., for &amp;lt;put comp-op here&amp;gt; we can use sql-operation, but the rest stays essentially the same:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
&lt;pre&gt;
(let (where-arg)
  (if (exact-comp-needed)
      (setq where-arg (sql-operation &#039;= [column1] someval))
      (setq where-arg (sql-operation &#039;like [column1] someval)))
  (select &#039;model &#039;other-model  :where where-arg))
&lt;/pre&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Now, coming back to my original problem, based on this approach I can split out the common part of the :where and :order arguments and combine those with the varying parts as needed and hand them down to a single select statement. Problem solved.&lt;br /&gt;
&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Fri, 22 Feb 2008 12:04:50 +0100</pubDate>
    <guid isPermaLink="false">http://hillview.bugwriter.net/archives/100-guid.html</guid>
    
</item>
<item>
    <title>Interactive development gets more popular</title>
    <link>http://hillview.bugwriter.net/archives/99-Interactive-development-gets-more-popular.html</link>
            <category>Programming</category>
    
    <comments>http://hillview.bugwriter.net/archives/99-Interactive-development-gets-more-popular.html#comments</comments>
    <wfw:comment>http://hillview.bugwriter.net/wfwcomment.php?cid=99</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://hillview.bugwriter.net/rss.php?version=2.0&amp;type=comments&amp;cid=99</wfw:commentRss>
    

    <author>nospam@example.com (Holger Schauer)</author>
    <content:encoded>
    It&#039;s interesting to see that more and more environments for interactive development are popping up. If you&#039;re wondering what I&#039;m refering to, it&#039;s what has traditionally been labelled as an interpreter: you get some kind of prompt like in a command shell and can directly enter and run program constructs.  In Ruby, irb is the tool to use, whereas most, if not all, Common Lisp systems provide you a REPL whenever you start-up the system. &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=398&amp;amp;entry_id=99&quot;  onmouseover=&quot;window.status=&#039;http://en.wikipedia.org/wiki/REPL&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://en.wikipedia.org/wiki/REPL&quot;&gt;REPL&lt;/a&gt; is an abbreviation for read-eval-print-loop and this pretty much sums up how interactive development works: you enter some code into the system, and as soon as you hit enter (i.e. finish up the particular line of code), the system will read and evaluate it (&quot;interpret&quot; it, although CL systems may also compile it automatically), presenting you with  the results. &lt;br /&gt;
&lt;br /&gt;
To me, this seems like more people come to understand that the classic edit-compile-debug cycle of traditional compiled languages like C isn&#039;t particular well-suited to a bottum-up programming style, as advocated by the agile programming hype.  Where is the beef? I&#039;ve been told that the reason why the asian folk don&#039;t use forks and knives when dining stems from the opinion that when dining one merely wants to eat, while all handcrafting (like slicing the meat) belongs to the a-priori cooking. The edit-compile-debug cycle tends to produce code more akin to the western steak style, while interactive development tends to produce smaller code parts, all well prepared (read: tested) from the beginning, so you don&#039;t end up with bloody interiors as easily. That&#039;s because of two reasons, I think: In an interactive environment testing a piece of code is cheap and easy. Hack up a small routine and enter it. Next step: call the routine with some sample data. No need to compile. In case there&#039;s an error, you&#039;ll be thrown into the debugger right away. With the traditional edit-compile-debug cycle, you&#039;re gonna edit the code, save it, call the compiler, edit another piece of code testing it, compile that, too, run that and only then you&#039;ll see if it succeeds. This might scare developers from running such tests to often and in result to produce larger routines/code blocks. Second reason: in the interactive environment you&#039;ll typically have somewhat less comfort then in a full-blown editor. So I&#039;m arguing that the slight discomfort will help you in keeping things small because then you&#039;ll not gonna need far reaching edit support.&lt;br /&gt;
&lt;br /&gt;
There is, however, a price to pay: For starters, because your interactive system provides you with a single environment during development, it&#039;s easy to mess it up. That&#039;s different with the traditional edit-compile-debug cycle where every time you compile you run the code in a clean environment. This means, old code refering to refactored functions will result in (usually: compilation)  errors whereas in interactive development you may miss some spot in need for modification because the old refactored code is still around.&lt;br /&gt;
Second, when fiddling with some functions, it may happen that one hacks up several variants, maybe with only slightly differing names or argument lists, so it may happen you forget some crucial code when  finally saving your carefully crafted solution (where saving here typically means copy it over to some editor, not saving an image as you may do in Smalltalk or Lisp). Another thing is that one has to be careful not to confuse bottum-up interactive development with hacking without thinking or design-less programming. This threat is all to common because with an interactive environment it&#039;s just so easy to get started. Unfortunately, without thinking you&#039;ll soon end up with problems one and two and even worse, it&#039;s likely that after a little while nobody (including you, the author) will be able to maintain the resulting code. But if you&#039;re aware of the potential pitfalls, interactive development is a nice way to do explorative programming which avoids a lot of time consuming labour you have to do with the traditional edit-compile-debug cycle.&lt;br /&gt;
&lt;br /&gt;
As a side-note, environments offering incremental compilation like Eclipse aim at a similar goal, but only go  half the way as they only take care of the edit-compile part. Only when one combines that with a test-driven development style you arrive at a similar point, because now the test code, when automatically run, will take care of immediately running the code in question (the eval/print part as far as testing the code is concerned).&lt;br /&gt;
&lt;br /&gt;
To finally come to the reason for this blog post, I was pleased to learn about the &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=399&amp;amp;entry_id=99&quot;  onmouseover=&quot;window.status=&#039;http://www.sukria.net/perlconsole.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://www.sukria.net/perlconsole.html&quot;&gt;Perl Console&lt;/a&gt;, which is &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=400&amp;amp;entry_id=99&quot;  onmouseover=&quot;window.status=&#039;http://www.sukria.net/en/archives/2007/08/29/why-i-wrote-perl-console-or-why-i-dont-use-perl-e-1-d/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://www.sukria.net/en/archives/2007/08/29/why-i-wrote-perl-console-or-why-i-dont-use-perl-e-1-d/&quot;&gt;not the same as the Perl debugger&lt;/a&gt;. I&#039;m eager to try it out, although I&#039;m sure that interactive development with a repl and the executable brain dump that Perl code usually is, is a highly dangerous mix. &lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Update:&lt;/u&gt; There is also &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=401&amp;amp;entry_id=99&quot;  onmouseover=&quot;window.status=&#039;http://chainsawblues.vox.com/library/post/a-perl-read-excute-print-loop-repl.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://chainsawblues.vox.com/library/post/a-perl-read-excute-print-loop-repl.html&quot;&gt;a series of articles about implementing a REPL in Perl&lt;/a&gt; which may be of interest.&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Fri, 25 Jan 2008 10:14:07 +0100</pubDate>
    <guid isPermaLink="false">http://hillview.bugwriter.net/archives/99-guid.html</guid>
    
</item>
<item>
    <title>Twentieth century boys</title>
    <link>http://hillview.bugwriter.net/archives/98-Twentieth-century-boys.html</link>
            <category>Lisp</category>
    
    <comments>http://hillview.bugwriter.net/archives/98-Twentieth-century-boys.html#comments</comments>
    <wfw:comment>http://hillview.bugwriter.net/wfwcomment.php?cid=98</wfw:comment>

    <slash:comments>5</slash:comments>
    <wfw:commentRss>http://hillview.bugwriter.net/rss.php?version=2.0&amp;type=comments&amp;cid=98</wfw:commentRss>
    

    <author>nospam@example.com (Holger Schauer)</author>
    <content:encoded>
    This is just a minor rambling inspired by a &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=389&amp;amp;entry_id=98&quot;  onmouseover=&quot;window.status=&#039;http://groups.google.com/group/comp.lang.lisp/browse_thread/thread/ef6822230da2c706/d448366d4a559cad#d448366d4a559cad&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;recent thread on cll&quot;&gt;recent thread on cll&lt;/a&gt; about the ups and downs of using Rails. What I find really overwhelming is the lack of proofs that other (typically Lisp-based) frameworks really have so much benefit over the established more traditional frameworks (e.g. Rails, Zope, plain PHP, ...). All I can see is starter documents, tutorials etc. that show how to program yet another blog or reddit clone in some particular framework. I miss fair comparisons and detailed discussions why and where exactly that one particular way of doing things has benefits. And especially with regard to those reddit clone prototypes: AFAICT, reddit was far beyond implementing some half-baked prototype (in Lisp) when they decided to switch (to Python). Yes, for demo purposes reinventing the wheel with some unround edges might be acceptable, but in reality only rolling wheels will be sold and this is where the challenge is.&lt;br /&gt;
&lt;br /&gt;
I believe that while it&#039;s nice that frameworks help with implementing your 500 line application, they really need to show their value with large applications. Where is a discussion of a large on-line shopping system in, say, UCW and CL-SQL, with secure shopping over SSL, login handling, input validation, distribution over multiple servers etc.?  Now, I&#039;m not suggesting that UCW, Weblocks etc. can&#039;t be used to build such websites, but it would be nice to see a much more in-depth explanation/discussion/comparison of how to do it. That would also help increase the credibility of Lisp or at least, of lispers discussing (other) web frameworks. 
    </content:encoded>

    <pubDate>Tue, 22 Jan 2008 19:04:00 +0100</pubDate>
    <guid isPermaLink="false">http://hillview.bugwriter.net/archives/98-guid.html</guid>
    
</item>
<item>
    <title>CLOS Video in German/auf Deutsch</title>
    <link>http://hillview.bugwriter.net/archives/96-CLOS-Video-in-Germanauf-Deutsch.html</link>
            <category>Lisp</category>
    
    <comments>http://hillview.bugwriter.net/archives/96-CLOS-Video-in-Germanauf-Deutsch.html#comments</comments>
    <wfw:comment>http://hillview.bugwriter.net/wfwcomment.php?cid=96</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://hillview.bugwriter.net/rss.php?version=2.0&amp;type=comments&amp;cid=96</wfw:commentRss>
    

    <author>nospam@example.com (Holger Schauer)</author>
    <content:encoded>
    In case you&#039;re interested in object-oriented programming in Lisp and happen to speak German, you&#039;ll be happy to learn that &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=379&amp;amp;entry_id=96&quot; title=&quot;http://p-cos.blogspot.com/2007/12/reflection-in-potsdam.html&quot;  onmouseover=&quot;window.status=&#039;http://p-cos.blogspot.com/2007/12/reflection-in-potsdam.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Pascal Costanza&lt;/a&gt; of ContextL and AspectL fame (apart of his postings to cll), has given a &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url=aHR0cDovL3d3dy50ZWxlLXRhc2suZGUvcGFnZTUwX2xlY3R1cmUzMzUyLmh0bWw8YnIgLz4NCg==&amp;amp;entry_id=96&quot;  onmouseover=&quot;window.status=&#039;http://www.tele-task.de/page50_lecture3352.html&amp;lt;br /&amp;gt;
&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://www.tele-task.de/page50_lecture3352.html&quot;&gt;talk about CLOS&lt;/a&gt;, the Common Lisp Object System at the Hasso-Plattner Institut, Potsdam. And while we&#039;re at it, Pascal also has a very interesting &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=380&amp;amp;entry_id=96&quot;  onmouseover=&quot;window.status=&#039;http://p-cos.blogspot.com/2007/12/origin-of-advice.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://p-cos.blogspot.com/2007/12/origin-of-advice.html&quot;&gt;blog post about the origins of the advice facility&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
German:&lt;br /&gt;
Falls Dich, lieber Leser, interessiert, wie man objekt-orientiert in Lisp programmiert, solltest Du Dich darüber freuen, dass &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=379&amp;amp;entry_id=96&quot;  onmouseover=&quot;window.status=&#039;http://p-cos.blogspot.com/2007/12/reflection-in-potsdam.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://p-cos.blogspot.com/2007/12/reflection-in-potsdam.html&quot;&gt;Pascal Costanza&lt;/a&gt;, bekannt durch ContextL und AspectL (abgesehen von seinen Postings in cll), einen &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=382&amp;amp;entry_id=96&quot;  onmouseover=&quot;window.status=&#039;http://www.tele-task.de/page50_lecture3352.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://www.tele-task.de/page50_lecture3352.html&quot;&gt;Vortrag in Deutsch über CLOS&lt;/a&gt;, dem Common Lisp Object System, am Hasso Plattner Institut in Potsdam gehalten hat. Und weil wir gerade dabei sind, Pascal hat außerdem einen sehr interessanten &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=380&amp;amp;entry_id=96&quot;  onmouseover=&quot;window.status=&#039;http://p-cos.blogspot.com/2007/12/origin-of-advice.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://p-cos.blogspot.com/2007/12/origin-of-advice.html&quot;&gt;Blogeintrag über die Geschichte von &#039;advice&#039;&lt;/a&gt;.&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Thu, 20 Dec 2007 00:40:02 +0100</pubDate>
    <guid isPermaLink="false">http://hillview.bugwriter.net/archives/96-guid.html</guid>
    
</item>
<item>
    <title>User interface modals, configurations etc.</title>
    <link>http://hillview.bugwriter.net/archives/95-User-interface-modals,-configurations-etc..html</link>
            <category>Computer</category>
            <category>German</category>
    
    <comments>http://hillview.bugwriter.net/archives/95-User-interface-modals,-configurations-etc..html#comments</comments>
    <wfw:comment>http://hillview.bugwriter.net/wfwcomment.php?cid=95</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://hillview.bugwriter.net/rss.php?version=2.0&amp;type=comments&amp;cid=95</wfw:commentRss>
    

    <author>nospam@example.com (Holger Schauer)</author>
    <content:encoded>
    &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=356&amp;amp;entry_id=95&quot;  onmouseover=&quot;window.status=&#039;http://blog.zugschlus.de/archives/613-GUI-gegen-TUI-cutwaste.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://blog.zugschlus.de/archives/613-GUI-gegen-TUI-cutwaste.html&quot;&gt;Zugschlus&lt;/a&gt; bloggt in einer Serie über Text-UIs and GUIs. Da ich kein Cookie-Freund bin, hier eine Nachfrage/Gegenargument. Ich blicke seine grundsätzliches Thema gar nicht. Die Frage des UI ist sehr auf die Frage der Konfiguration der Applikation konzentriert, dabei dürfte die doch idR. eher den unbedeutenden Teil des Nutzerinterfaces ausmachen. Ich bezweifle etwa sehr die Grundannahme des verlinkten Eintrags: Warum sollte eine Applikation mit GUI keine Textkonfigurationsdatei haben? Klassisches Beispiel dafür dürften etwa diverse Tcl/Tk-Applikationen sein, oder etwa FVWM. 
    </content:encoded>

    <pubDate>Mon, 17 Dec 2007 23:09:23 +0100</pubDate>
    <guid isPermaLink="false">http://hillview.bugwriter.net/archives/95-guid.html</guid>
    
</item>
<item>
    <title>Swing the heartache: Interactive DB maintenance in Lisp</title>
    <link>http://hillview.bugwriter.net/archives/93-Swing-the-heartache-Interactive-DB-maintenance-in-Lisp.html</link>
            <category>Lisp</category>
    
    <comments>http://hillview.bugwriter.net/archives/93-Swing-the-heartache-Interactive-DB-maintenance-in-Lisp.html#comments</comments>
    <wfw:comment>http://hillview.bugwriter.net/wfwcomment.php?cid=93</wfw:comment>

    <slash:comments>4</slash:comments>
    <wfw:commentRss>http://hillview.bugwriter.net/rss.php?version=2.0&amp;type=comments&amp;cid=93</wfw:commentRss>
    

    <author>nospam@example.com (Holger Schauer)</author>
    <content:encoded>
    Every now and then, I&#039;m still blown away by the elegant power that the repl (read-eval-print-loop) of Common Lisp provides for everyday tasks. A recent example: I needed to fix a broken column definition in one of my Postgres databases. I&#039;m not a DB pro, so I will just drop the column. But of course, we want to retain the old data, so here we go (using CL-SQL):&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;
&lt;code&gt;
SOMEDB&gt; (connect +db-spec+)
#&lt;CLSQL-POSTGRESQL-SOCKET:POSTGRESQL-SOCKET-DATABASE localhost/db/schauer OPEN {D8EABF1}&gt;
SOMEDB&gt; (defvar *olddata* (select [id] [data] :from [sometable]))
*OLDDATA*
SOMEDB&gt; (execute-command &quot;ALTER TABLE sometable DROP COLUMN data;&quot;)
NIL
SOMEDB&gt; (execute-command &quot;ALTER TABLE sometable ADD COLUMN data varchar;&quot;)
NIL
SOMEDB&gt; (loop for (id value) in *olddata*
                  do (update-records [sometable] 
                                 :attributes &#039;(data) 
                                 :values (list value) 
                                 :where [= [id] id]))
NIL
SOMEDB&gt; (disconnect)
&lt;/code&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
That&#039;s it. First we open a connection, store away the olddata (which will be returned as a list of tuples) in a global variable, modify the table and finally restore the data. Now, what I find really nice about this is that I can operate on the data as if I had an intersection of psql, shell and a real programming language, which is pretty much the point of this blog post. I think that Ruby probably provides a similar environment with irb. And, hey, today I learned that XEmacs comes with an interface to postgres, so I might have been able to do it from within my favourite editor, too ... 
    </content:encoded>

    <pubDate>Wed, 21 Nov 2007 23:16:16 +0100</pubDate>
    <guid isPermaLink="false">http://hillview.bugwriter.net/archives/93-guid.html</guid>
    
</item>
<item>
    <title>Lisp golf</title>
    <link>http://hillview.bugwriter.net/archives/90-Lisp-golf.html</link>
            <category>Lisp</category>
    
    <comments>http://hillview.bugwriter.net/archives/90-Lisp-golf.html#comments</comments>
    <wfw:comment>http://hillview.bugwriter.net/wfwcomment.php?cid=90</wfw:comment>

    <slash:comments>11</slash:comments>
    <wfw:commentRss>http://hillview.bugwriter.net/rss.php?version=2.0&amp;type=comments&amp;cid=90</wfw:commentRss>
    

    <author>nospam@example.com (Holger Schauer)</author>
    <content:encoded>
    Some time &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=342&amp;amp;entry_id=90&quot;  onmouseover=&quot;window.status=&#039;http://hillview.bugwriter.net/archives/78-Splitting-the-dark-side-....html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;Splitting the dark side&quot;&gt;ago&lt;/a&gt;, I was looking at splitting some text with Elisp, Perl, Ruby and Common Lisp. Yesterday, when I again had to do quite the same thing, it occurred to me that the Common Lisp solution was unnecessary complex/long. I&#039;m not a Perl guru, but I believe the following is probably hard to beat even with Perl:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;
&lt;code&gt;
CL-USER&gt; (format t &quot;~{&amp;lt;li&amp;gt;~A&amp;lt;/li&amp;gt;~%~}&quot; (cl-ppcre:split &quot;\\|&quot; &quot;Kim Wilde|Transvision Vamp|Ideal|Siouxsie and the Banshees|Nena|Iggy Pop&quot;))

&amp;lt;li&amp;gt;Kim Wilde&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Transvision Vamp&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Ideal&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Siouxsie and the Banshees&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Nena&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Iggy Pop&amp;lt;/li&amp;gt;
NIL
&lt;/code&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
For the uninitiated, it&#039;s not the cl-ppcre library which is interesting here but the built-in iteration facilities of format. See the &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=343&amp;amp;entry_id=90&quot;  onmouseover=&quot;window.status=&#039;http://www.lisp.org/HyperSpec/Body/sec_22-3-7.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://www.lisp.org/HyperSpec/Body/sec_22-3-7.html&quot;&gt;Hyperspec on the control-flow features of format&lt;/a&gt; for details. Now, I usually tend to avoid the mini languages that come with Common Lisp like the one of format or loop when writing real programs, but when using Lisp as a glorified shell they come in very handy. 
    </content:encoded>

    <pubDate>Fri, 09 Nov 2007 09:33:43 +0100</pubDate>
    <guid isPermaLink="false">http://hillview.bugwriter.net/archives/90-guid.html</guid>
    
</item>
<item>
    <title>Automated unit testing via ASDF?</title>
    <link>http://hillview.bugwriter.net/archives/88-Automated-unit-testing-via-ASDF.html</link>
            <category>Lisp</category>
    
    <comments>http://hillview.bugwriter.net/archives/88-Automated-unit-testing-via-ASDF.html#comments</comments>
    <wfw:comment>http://hillview.bugwriter.net/wfwcomment.php?cid=88</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://hillview.bugwriter.net/rss.php?version=2.0&amp;type=comments&amp;cid=88</wfw:commentRss>
    

    <author>nospam@example.com (Holger Schauer)</author>
    <content:encoded>
    Dear Lazyweb, I&#039;m looking for a way to automate unit testing with the help of ASDF. I&#039;m using &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=337&amp;amp;entry_id=88&quot;  onmouseover=&quot;window.status=&#039;http://www.cliki.net/xlunit&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://www.cliki.net/xlunit&quot;&gt;XLUNIT&lt;/a&gt; at the moment, but this isn&#039;t really relevant. What I want to achieve is that on every compilation of some source file, it&#039;s corresponding test file will be loaded (and hence the tests it contains run). However, what I seek to avoid is simply adding the test files to the component definition; the test files should be kept separately. From what I gather from the ASDF documentation, this should be possible using :perform forms, but the very same docs leave me wondering how. What I found (looking at Jörg Höhles asdf file for iterate) is how to load and run a complete test-system, but this is not what I want to do. Ideally, I would like to have a single perform instruction looking something like this:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;
&lt;code&gt;
(defmethod asdf:perform ((op test-op) c)
  (when (asdf:glorified-find-component &quot;my-component&quot; c)
        (let ((component-test (find-component-test c)))
            (when component-test
                   (asdf:operate &#039;asdf:load-op &#039;component-test)))))
&lt;/code&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Here &lt;code&gt;#&#039;glorified-find-component&lt;/code&gt; needs to recursively follow the components parent and &lt;code&gt;#&#039;find-component-test&lt;/code&gt; should return a component &lt;code&gt;c-test&lt;/code&gt; (with c expanded, obviously). Now, I guess I&#039;m just clumsily reinventing the wheel and hence I&#039;m wondering if somebody has already solved &quot;the problem&quot;.&lt;br /&gt;
&lt;br /&gt;
While I&#039;m at it (it referring to testing), &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=338&amp;amp;entry_id=88&quot;  onmouseover=&quot;window.status=&#039;http://common-lisp.net/project/stefil/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://common-lisp.net/project/stefil/&quot;&gt;Stefil&lt;/a&gt; looks like a very interesting test environment in case you&#039;re developing your programs with Emacs and &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=339&amp;amp;entry_id=88&quot; title=&quot;http://common-lisp.net/project/slime/&quot;  onmouseover=&quot;window.status=&#039;http://common-lisp.net/project/slime/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Slime.&lt;/a&gt; From there,  I found a link to &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=340&amp;amp;entry_id=88&quot;  onmouseover=&quot;window.status=&#039;http://aperiodic.net/phil/archives/Geekery/notes-on-lisp-testing-frameworks.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://aperiodic.net/phil/archives/Geekery/notes-on-lisp-testing-frameworks.html&quot;&gt;Phil Gregory&#039;s test framework comparison&lt;/a&gt; which I found much more enlightening than the &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=341&amp;amp;entry_id=88&quot;  onmouseover=&quot;window.status=&#039;http://wiki.alu.org/Test_Frameworks&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://wiki.alu.org/Test_Frameworks&quot;&gt;ALUs list of test frameworks&lt;/a&gt;. 
    </content:encoded>

    <pubDate>Tue, 06 Nov 2007 00:54:00 +0100</pubDate>
    <guid isPermaLink="false">http://hillview.bugwriter.net/archives/88-guid.html</guid>
    
</item>
<item>
    <title>Now I'm all over the shop ... or Converting from RCS to Mercurial</title>
    <link>http://hillview.bugwriter.net/archives/87-Now-Im-all-over-the-shop-...-or-Converting-from-RCS-to-Mercurial.html</link>
            <category>Programming</category>
    
    <comments>http://hillview.bugwriter.net/archives/87-Now-Im-all-over-the-shop-...-or-Converting-from-RCS-to-Mercurial.html#comments</comments>
    <wfw:comment>http://hillview.bugwriter.net/wfwcomment.php?cid=87</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://hillview.bugwriter.net/rss.php?version=2.0&amp;type=comments&amp;cid=87</wfw:commentRss>
    

    <author>nospam@example.com (Holger Schauer)</author>
    <content:encoded>
    Like I mentioned in a previous post (&lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=348&amp;amp;entry_id=87&quot;  onmouseover=&quot;window.status=&#039;http://hillview.bugwriter.net/archives/54-Fire-it-up.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://hillview.bugwriter.net/archives/54-Fire-it-up.html&quot;&gt;here&lt;/a&gt;), I hadn&#039;t looked closer at those modern distributed revision control systems like Git, Darcs or Mercurial. This was mainly due to two facts: As I&#039;m currently neither involved in any major open source project which uses these systems nor in a project at work which requires the facilities offered by such systems, and as there was no easy access for them in XEmacs, the more traditional systems like Subversion, CVS and RCS are fine for me. However, there was this nag that I might miss something and as revision systems always have been somewhat of a pet peeve of mine, I eventually spend some time reading up more on them. I&#039;ve read quite a lot of discussions on the web, and gathered that mercurial might be worth a closer look, as it claims to be quite easy to handle, comparably well documented and quite fast. And then finally I&#039;ve read on xemacs-beta that the new vc package (in Pre-Release) would support mercurial as well.&lt;br /&gt;
&lt;br /&gt;
Well, that&#039;s where I am now: I have several pieces of code lying around which I sometimes develop on my main machine and sometimes on my laptop when moving around. This is the scenario where a server-based approach to revision control is not what you want: you won&#039;t be able to access your server while you&#039;re on the road and hence you can&#039;t commit. Now, with RCS that&#039;s not a problem, as there is no server involved. But of course, since RCS is a file-system local revision system, syncing is a major problem and you have to go to great pains to ensure you don&#039;t overwrite changes you made locally in between syncs. I hope that a distributed version control system like mercurial will solve the problem, as I no longer have to decide which version is the current head version, instead cherry-picking change sets at will.&lt;br /&gt;
&lt;br /&gt;
But of course, for this to happen, I have to convert my RCS repositories to Mercurial. This doesn&#039;t seem to be a common problem: there are a lot of tools for conversion from CVS or Subversion (see &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=349&amp;amp;entry_id=87&quot;  onmouseover=&quot;window.status=&#039;http://www.selenic.com/mercurial/wiki/index.cgi/RepositoryConversion&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://www.selenic.com/mercurial/wiki/index.cgi/RepositoryConversion&quot;&gt;Mercurial Wiki&lt;/a&gt;, e.g. &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=350&amp;amp;entry_id=87&quot;  onmouseover=&quot;window.status=&#039;http://wiki.darcs.net/DarcsWiki/Tailor&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://wiki.darcs.net/DarcsWiki/Tailor&quot;&gt;Tailor&lt;/a&gt; for instance), but not from RCS. I ended up following the instructions given in the &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=351&amp;amp;entry_id=87&quot;  onmouseover=&quot;window.status=&#039;http://twiki.org/cgi-bin/view/Plugins/MercurialContrib&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://twiki.org/cgi-bin/view/Plugins/MercurialContrib&quot;&gt;TWiki Mercurial Contribution page&lt;/a&gt;. I have some minor corrections, though, so here we go: &lt;br /&gt;
&lt;br /&gt;
-1. (Step 6 in TWiki docs) Ensure all your files are checked in RCS. I won&#039;t copy the advice from the TWiki page here, because I believe in meaningful commit messages and would urge you to do a manual check.&lt;br /&gt;
&lt;br /&gt;
0. You&#039;ll need cvs20hg and rcsparse which you will find &lt;a href=&quot;http://hillview.bugwriter.net/exit.php?url_id=352&amp;amp;entry_id=87&quot;  onmouseover=&quot;window.status=&#039;http://ww2.fs.ei.tum.de/~corecode/hg/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://ww2.fs.ei.tum.de/~corecode/hg/&quot;&gt;here&lt;/a&gt;. You&#039;ll need to have Python development libraries installed, i.e. Python.h. For Debian systems, this is in package python-dev. Installation is as simple as two &quot;./setup install&quot; as root which will install the relevant libraries and Python scripts.&lt;br /&gt;
&lt;br /&gt;
1. Create a new directory for your new mercurial repository (named REPO-HG, replace that name):&lt;br /&gt;
&lt;code&gt;
&lt;pre&gt;
    mkdir REPO-HG
&lt;/pre&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
2. Initialize the repository:&lt;br /&gt;
&lt;code&gt;
&lt;pre&gt;
   hg init REPO-HG
&lt;/pre&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
3. (Step 4 in the TWiki document) Create a new copy of your old RCS repository (named REPO here, replace that with the name containing your old RCS files), add a CVSROOT and a config file  (mistake one in the TWiki docs: As with all CVS data, the &quot;config&quot; file needs to go to CVSROOT, not to CVSROOT/..). Of course, if you&#039;re no longer interested in your old data, you may omit the initial copy.&lt;br /&gt;
&lt;code&gt;
&lt;pre&gt;
    mkdir tmp
    cp -ar REPO tmp/REPO-old
    mkdir tmp/CVSROOT
    touch tmp/CVSROOT/config
&lt;/pre&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
4. Inside your directory with the old RCS data, move everything out of the RCS subdirectories&lt;br /&gt;
    (mistake two in the TWiki docs: the double-quotes need to go before the asterix):&lt;br /&gt;
 &lt;code&gt;
&lt;pre&gt;
   find tmp/REPO-old -type d -name RCS -prune | while read r; do mv -i &quot;$r&quot;/* &quot;$r/..&quot;; rmdir &quot;$r&quot;; done
&lt;/pre&gt;
&lt;/code&gt;&lt;br /&gt;
    &lt;br /&gt;
5.  Run cvs20hg to copy your old repository to mercurial. If you don&#039;t follow the directory scheme shown below, you&#039;ll end up with your new mercurial repository missing the initial letter of the name of all top-level files and directories.&lt;br /&gt;
&lt;code&gt;
&lt;pre&gt;
   cvs20hg tmp/REPO-old `basename tmp/REPO-old` REPO-HG
&lt;/pre&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
6. Check that everything looks like you would expect:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
&lt;pre&gt;
   cd REPO-HG
   hg log
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
7. If you had files in your old directory not under version control that you&#039;ll like to keep, copy them over. This might be a good time to think about whether they are worth having them under revision control. Afterwards throw away any old directory you no longer need (i.e., your original REPO, tmp/*).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Wed, 17 Oct 2007 20:20:51 +0200</pubDate>
    <guid isPermaLink="false">http://hillview.bugwriter.net/archives/87-guid.html</guid>
    
</item>
<item>
    <title>You gain something, you lose something</title>
    <link>http://hillview.bugwriter.net/archives/85-You-gain-something,-you-lose-something.html</link>
            <category>Linux</category>
    
    <comments>http://hillview.bugwriter.net/archives/85-You-gain-something,-you-lose-something.html#comments</comments>
    <wfw:comment>http://hillview.bugwriter.net/wfwcomment.php?cid=85</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://hillview.bugwriter.net/rss.php?version=2.0&amp;type=comments&amp;cid=85</wfw:commentRss>
    

    <author>nospam@example.com (Holger Schauer)</author>
    <content:encoded>
    Two days ago, I updated my laptop from Ubuntu 6.06 &quot;Dapper Drake&quot; (aka LTS) to &quot;Feisty Fawn&quot;, aka version 7.04. Just in case you wonder, how I did that, I just followed the usual directions and first updated to Edgy and then to Feisty via issuing &quot;gksu &#039;update-manager -c&#039;&quot; twice. Things went quite smoothly, but I did encounter some problems:&lt;br /&gt;
&lt;br /&gt;
- I lost access to my databases during the migration from Postgres 7.4 to 8.2., i.e. there was no proper migration and as support for version 7.4 has been dropped, I even have no way to dump the old data and import it again. I need to figure out whether I can easily access the old dbs from Postgres 8.2 (mind you, I&#039;m talking of the raw data and the DB server, not client access).&lt;br /&gt;
&lt;br /&gt;
- As a result, my local copy of serendipity stopped working. I re-installed serendipity (a clean start seemed to be a good idea), but still Iceweasel gets wrong information about the phtml files it generates. Probably a problem with the PHP installation, which I need to get straight (I&#039;m not a PHP guy, though).&lt;br /&gt;
&lt;br /&gt;
- When booting into Edgy, when switching from the splash screen to X. the screen went black and there was no way to get a display. I solved that by ssh-ing into the box, modifying /etc/X11/xorg.conf by using the ati driver instead of the fglrx driver and then editing /boot/grub/menu.lst so that it wouldn&#039;t show the splash screen or suppress messages. The problem went away after going to Feisty.&lt;br /&gt;
&lt;br /&gt;
- To get VMware running again, it wasn&#039;t enough to issue the usual /opt/bin/vmware-config.pl that you have to do with every new kernel. It kept telling me that the headers directory wouldn&#039;t fit my current running kernel. Fortunately, I already had loaded the new version down which solves the problem (I guess there is a new version numbering scheme in newer kernels).&lt;br /&gt;
&lt;br /&gt;
- The update of course also brought with it the switch to Iceweasel, so of course, I lost some of my trusted extensions (Reveal, Surfkeys).&lt;br /&gt;
&lt;br /&gt;
- What really annoyed me was the ugly, fat looking &quot;optimal&quot; font that I encountered in most applications. Why Gnome doesn&#039;t use subpixel hinting as a default is beyond me (especially as I&#039;m quite certain to have had that setting in the old setup, too).&lt;br /&gt;
&lt;br /&gt;
- The new eclipse version of course knew nothing about my local installed plugins, implying that I had to reinstall them.&lt;br /&gt;
&lt;br /&gt;
On the nice side, my mail setup kept working and the network setup kept working, which I think is way more important.&lt;br /&gt;
&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Fri, 05 Oct 2007 08:33:29 +0200</pubDate>
    <guid isPermaLink="false">http://hillview.bugwriter.net/archives/85-guid.html</guid>
    
</item>

</channel>
</rss>