<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml"
>

<channel>
	<title>xyzzy xyzzy... &#187; dirk husemann</title>
	<atom:link href="http://xyzzyxyzzy.net/author/drscofield/feed/" rel="self" type="application/rss+xml" />
	<link>http://xyzzyxyzzy.net</link>
	<description>...you are in a grid of twisty, little links, all alike. there's a teleport gate here.</description>
	<lastBuildDate>Thu, 19 Jan 2012 10:09:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>emacs tip: getting lines numbered</title>
		<link>http://xyzzyxyzzy.net/2012/01/19/emacs-tip-getting-lines-numbered/</link>
		<comments>http://xyzzyxyzzy.net/2012/01/19/emacs-tip-getting-lines-numbered/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 10:09:08 +0000</pubDate>
		<dc:creator>dirk husemann</dc:creator>
				<category><![CDATA[hacking]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[region]]></category>
		<category><![CDATA[tip]]></category>
		<category><![CDATA[trick]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=796</guid>
		<description><![CDATA[the other day i was coding a scala apply(array: Array[String}) method to instantiate an object from a CSV file. i ended up with something like this: there were about a 100 parameters to use. i wasn&#8217;t really too excited about having to change the rewired(0) to use the proper index by hand. so, here&#8217;s what [...]]]></description>
			<content:encoded><![CDATA[<p>the other day i was coding a scala <code>apply(array: Array[String})</code> method to instantiate an object from a CSV file. i ended up with something like this:</p>

<p><pre class="brush: scala; title: ; notranslate">
            apply(uuid                        = uuid,
                  source                      = source,
                  hostname                    = rewired(0),
                  type                        = rewired(0),
                  state                       = rewired(0),
                  category                    = rewired(0),
                  id                          = rewired(0),
                  lifecycle                   = rewired(0),
                  classification              = rewired(0),
                  ...
                  flag                        = rewired(0))
</pre></p>

<p>there were about a 100 parameters to use. i wasn&#8217;t really too excited about having to change the <code>rewired(0)</code> to use the proper index by <em>hand</em>. so, here&#8217;s what i did:</p>

<ul>
<li>in emacs mark the region</li>
<li>then invoke <code>shell-command-on-region</code> and </li>
<li>use <code>perl -pi -e 's{rewired\(0\)}{sprintf("rewired(%d)", $. - 1)}e;'</code> as command to invoke</li>
</ul>

<p>emacs will then show you the result of the command in a temporary buffer, you can either copy and paste from there, or just repeat the <code>shell-command-on-region</code> and prefix it with ctrl-u &#8212; emacs with then replace the region with the output of the command directly.</p>

<p>voila!</p>
]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2012/01/19/emacs-tip-getting-lines-numbered/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point featurename="[47.308883299155255, 8.544209003448486]">47.308883299155255 8.544209003448486</georss:point>
	</item>
		<item>
		<title>sbt10, webplugin, jetty, run-in-place: once more&#8230;</title>
		<link>http://xyzzyxyzzy.net/2011/07/22/sbt10-webplugin-jetty-run-in-place-once-more/</link>
		<comments>http://xyzzyxyzzy.net/2011/07/22/sbt10-webplugin-jetty-run-in-place-once-more/#comments</comments>
		<pubDate>Fri, 22 Jul 2011 14:55:03 +0000</pubDate>
		<dc:creator>dirk husemann</dc:creator>
				<category><![CDATA[hacking]]></category>
		<category><![CDATA[jetty]]></category>
		<category><![CDATA[sbt]]></category>
		<category><![CDATA[scala]]></category>
		<category><![CDATA[web-plugin]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=788</guid>
		<description><![CDATA[it turns out that the sbt/web-plugin configuration i described in my last post is not quite cutting it. what we observed is that while changes to the contents of the webapp subtree were indeed effective immediately1 sbt commands like prepare-webapp and jetty-reload would sometimes work and sometimes just ignore us. so, back to digging around [...]]]></description>
			<content:encoded><![CDATA[<p>it turns out that the sbt/web-plugin configuration i described in <a href="http://xyzzyxyzzy.net/2011/07/04/sbt10-webplugin-running-jetty-from-source-tree/">my last post</a> is not quite cutting it. what we observed is that while changes to the contents of the <code>webapp</code> subtree were indeed effective immediately<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> sbt commands like <code>prepare-webapp</code> and <code>jetty-reload</code> would sometimes work and sometimes just ignore us.</p>

<p>so, back to digging around in the <a href="https://github.com/siasia/xsbt-web-plugin">web-plugin sources</a> and this is what we are now using:</p>

<div>
<pre class="brush: scala; title: ; notranslate">
temporaryWarPath &lt;&lt;= (sourceDirectory in Runtime) / &quot;webapp&quot;,
// watch temporaryWarPath / WEB-INF / classes
jettyScanDirs &lt;&lt;= (temporaryWarPath) { (target) =&gt; Seq(target / &quot;WEB-INF&quot; / &quot;classes&quot;) },
</pre>
</div>

<p>this sbt configuration tells <code>jetty</code> to run out of the <code>src/main/webapp</code> directory — any changes you do in there will become effective immediately and <code>prepare-webapp</code> and <code>jetty-reload</code> are working as expected. the drawback is that your generated <code>classes</code> and <code>lib</code> files get copied to <code>src/main/webapp/WEB-INF</code> <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />  i know, sucks, but still better than having to restart your webapp everytime you change a <code>{html,css,js}</code> file. if you are using <a href="http://en.wikipedia.org/wiki/Git_%28software%29">git</a> you might want to add</p>

<pre>
src/main/webapp/WEB-INF/lib/*
src/main/webapp/WEB-INF/classes/*
</pre>

<p>to your top-level <code>.gitignore</code> file.</p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:1">
<p>on browser reload, that is.&#160;<a href="#fnref:1" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2011/07/22/sbt10-webplugin-jetty-run-in-place-once-more/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<georss:point featurename="[47.308883299155255, 8.544209003448486]">47.308883299155255 8.544209003448486</georss:point>
	</item>
		<item>
		<title>sbt10, webplugin: running jetty from source tree</title>
		<link>http://xyzzyxyzzy.net/2011/07/04/sbt10-webplugin-running-jetty-from-source-tree/</link>
		<comments>http://xyzzyxyzzy.net/2011/07/04/sbt10-webplugin-running-jetty-from-source-tree/#comments</comments>
		<pubDate>Mon, 04 Jul 2011 14:39:38 +0000</pubDate>
		<dc:creator>dirk husemann</dc:creator>
				<category><![CDATA[hacking]]></category>
		<category><![CDATA[continuous redeployment]]></category>
		<category><![CDATA[jetty]]></category>
		<category><![CDATA[sbt10]]></category>
		<category><![CDATA[scala]]></category>
		<category><![CDATA[simple build tool]]></category>
		<category><![CDATA[source]]></category>
		<category><![CDATA[webplugin]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=776</guid>
		<description><![CDATA[the solution described below turns out to have its flaws and is not really recommended — have a look at the recently posted update for a better solution! simple build tool 0.7.5 comprised the jetty and webapp functionality — version 0.10.0 (sbt10) no longer does so, instead you have to pull in the sbt webplugin. [...]]]></description>
			<content:encoded><![CDATA[<p><em>the solution described below turns out to have its flaws and is not really recommended — have a look at the <a href="http://xyzzyxyzzy.net/2011/07/22/sbt10-webplugin-jetty-run-in-place-once-more/">recently posted update</a> for a better solution!</em></p>

<p>simple build tool 0.7.5 comprised the jetty and webapp functionality — version 0.10.0 (sbt10) no longer does so, instead you have to pull in the <a href="https://github.com/siasia/xsbt-web-plugin">sbt webplugin</a>. one feature of sbt7.5&#8242;s webapp support that we used heavily was the ability to run jetty out of the source tree instead of the exploded temporary WAR file:</p>

<blockquote>
  <p>Another possibility is to directly run the web application out of the the source web application path:</p>

<pre><code> override def jettyWebappPath  = webappPath
 override def scanDirectories = mainCompilePath :: testCompilePath :: Nil
</code></pre>
  
  <p><a href="http://code.google.com/p/simple-build-tool/wiki/WebApplications"><em>— sbt7.5, continuous redeployment</em></a></p>
</blockquote>

<p>(we actually used to set <code>scanDirectories</code> to <code>Nil</code>)</p>

<p>achieving the same setup with sbt10 is not as simple or even obvious, the <a href="https://groups.google.com/d/topic/simple-build-tool/5rxFN2L73bA/discussion">solution reported in the simple build tool newgroups</a> does not really provide the same feature, as it still requires to have a <code>~ prepare-webapp</code> running in sbt. here&#8217;s what seems to work:</p>

<div>
<pre class="brush: scala; title: ; notranslate">
// run jetty from source tree
jettyConfiguration &lt;&lt;= (sourceDirectory in Runtime, jettyConfiguration) map { 
    (sourceDir, jettyConf) =&gt; {
        val conf = jettyConf.asInstanceOf[DefaultJettyConfiguration] 
        new DefaultJettyConfiguration { 
            def classpath = conf.classpath
            def jettyClasspath = conf.jettyClasspath
            def war = sourceDir / &quot;webapp&quot;
            def contextPath = conf.contextPath
            def classpathName = conf.classpathName
            def parentLoader = conf.parentLoader
            def scanDirectories = conf.scanDirectories
            def scanInterval = conf.scanInterval
            def port = conf.port
            def log = conf.log
            def jettyEnv = conf.jettyEnv
            def webDefaultXml = conf.webDefaultXml
        }
    }
}

// set jetty scan dirs to empty list
jettyScanDirs := Nil
</pre>
</div>

<p>changes in <code>src/main/webapp</code> are immediately effective for the running jetty instance. voila!</p>
]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2011/07/04/sbt10-webplugin-running-jetty-from-source-tree/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<georss:point featurename="[47.308883299155255, 8.544209003448486]">47.308883299155255 8.544209003448486</georss:point>
	</item>
		<item>
		<title>scala, emacs, sbt 0.10.0, ensime</title>
		<link>http://xyzzyxyzzy.net/2011/06/28/scala-emacs-sbt-0-10-0-ensime/</link>
		<comments>http://xyzzyxyzzy.net/2011/06/28/scala-emacs-sbt-0-10-0-ensime/#comments</comments>
		<pubDate>Tue, 28 Jun 2011 09:56:11 +0000</pubDate>
		<dc:creator>dirk husemann</dc:creator>
				<category><![CDATA[hacking]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[ensime]]></category>
		<category><![CDATA[sbt10]]></category>
		<category><![CDATA[scala-2.9.0]]></category>
		<category><![CDATA[simple build tool]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=765</guid>
		<description><![CDATA[i&#8217;m an ardent emacs user. for our current project we chose the scala language as our programming language along with lift as the web application framework. initially we used maven but have switched over to the simple build tool — sbt in short — about half a year ago, as we found that to be [...]]]></description>
			<content:encoded><![CDATA[<p>i&#8217;m an ardent emacs user. for our current project we chose <a href="http://www.scala-lang.org/">the scala language</a> as our programming language along with <a href="http://liftweb.net/">lift</a> as the web application framework. initially we used maven but have switched over to the <a href="https://github.com/harrah/xsbt/wiki">simple build tool</a> — sbt in short — about half a year ago, as we found that to be faster than maven and also offering more features (such as test-only, test-quick, etc). to get scala support in emacs i&#8217;ve been using <a href="https://github.com/aemoncannon/ensime">ensime</a> which cooperated really well with sbt.</p>

<p>the sbt project recently made version 0.10.0 available — aka sbt10. switching from sbt7.5 to sbt10 is either very easy or a bit of a struggle. it&#8217;s easy if you are using a plain vanilla setup. it&#8217;s a struggle if you&#8217;ve created your own tasks — to paraphrase star trek: &#8220;it&#8217;s tasks, but not as we know it, jim&#8221;.</p>

<p>among the changes brought by sbt10 is that manged JARs are no longer copied into the <code>lib_managed</code> tree (instead the version in <code>$HOME/.ivy2/cache</code> is used, avoiding redundant copies) — that unfortunately <a href="https://groups.google.com/d/topic/simple-build-tool/qM9fsovylzQ/discussion">confuses the heck out of ensime</a>. florian hars, suffering from the same problem, wrote an <a href="https://github.com/fhars/sbt-ensime-plugin">sbt10 ensime plugin</a> that fixes the issue for the time being (until ensime has proper sbt10 support).</p>

<p>to install the sbt ensime plugin, follow the instructions in its <a href="https://github.com/fhars/sbt-ensime-plugin#readme">README</a>, then in restart <code>sbt</code> and invoke the <code>ensime</code> task. after a compile of your project, it will generate a new <code>.ensime</code> project file (save an eventually existing old one if you care about it). then it&#8217;s just a restart of emacs and the invocation of <code>ensime</code>.</p>
]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2011/06/28/scala-emacs-sbt-0-10-0-ensime/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point featurename="[47.308883299155255, 8.544209003448486]">47.308883299155255 8.544209003448486</georss:point>
	</item>
		<item>
		<title>getting thunderbird to use yyyy-MM-dd HH:MM date format</title>
		<link>http://xyzzyxyzzy.net/2011/04/13/getting-thunderbird-to-use-yyyy-mm-dd-hhmm-date-format/</link>
		<comments>http://xyzzyxyzzy.net/2011/04/13/getting-thunderbird-to-use-yyyy-mm-dd-hhmm-date-format/#comments</comments>
		<pubDate>Wed, 13 Apr 2011 06:40:08 +0000</pubDate>
		<dc:creator>dirk husemann</dc:creator>
				<category><![CDATA[hacking]]></category>
		<category><![CDATA[ISO date format]]></category>
		<category><![CDATA[locale]]></category>
		<category><![CDATA[thunderbird]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=573</guid>
		<description><![CDATA[thunderbird is a terrific mail application (&#8220;mail user agent&#8221; is the posh name, i believe). pretty much the only thing i don&#8217;t like about it though is its way of formatting the date and time and not providing a way of letting me configure the date format via preferences. it got bad enough that i [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://bit.ly/e1TJRb">thunderbird</a> is a terrific mail application (&#8220;mail user agent&#8221; is the posh name, i believe).</p>

<p>pretty much the only thing i don&#8217;t like about it though is its way of formatting the date and time and not providing a way of letting <em>me</em> configure the date format via preferences. it got bad enough that i recently spent a bit of time to figure out how get thunderbird to display date and time in yyyy-MM-dd HH:MM format — that is, 2011-04-13 20:34 instead of 04/13/2011 08:34pm or something similarly silly.</p>

<p>the solution was hiding in <a href="http://ubuntuforums.org/showthread.php?t=407421">a forum post on the ubuntu forum</a>: by switching the locale (well, at least parts of it) to <code>en_DK.utf8</code> thunderbird would use the yyyy-MM-dd HH:MM format (aka ISO date–time format).</p>

<p>here&#8217;s how i did that on ubuntu:</p>

<p><pre class="brush: bash; title: ; notranslate">
     # first: create a diversion of the normal /usr/bin/thunderbird
     dpkg-divert --divert /usr/bin/thunderbird.ubuntu --rename --local --add /usr/bin/thunderbird 
     # next: create our locale setting wrapper
     cat &lt;&lt;HERE &gt;/usr/bin/thunderbird
     #!/bin/bash
     export LC_TIME=en_DK.utf8
     export LC_PAPER=en_DK.utf8
     export LC_MEASUREMENT=en_DK.utf8
     exec /usr/bin/thunderbird.ubuntu &quot;$@&quot;
     HERE
     chmod a+x /usr/bin/thunderbird
</pre></p>

<p>that should do the trick.</p>
]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2011/04/13/getting-thunderbird-to-use-yyyy-mm-dd-hhmm-date-format/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point featurename="[47.131074826701266, 8.747992515563965]">47.131074826701266 8.747992515563965</georss:point>
	</item>
		<item>
		<title>adding a USB monitor</title>
		<link>http://xyzzyxyzzy.net/2011/03/09/adding-a-usb-monitor/</link>
		<comments>http://xyzzyxyzzy.net/2011/03/09/adding-a-usb-monitor/#comments</comments>
		<pubDate>Wed, 09 Mar 2011 13:30:18 +0000</pubDate>
		<dc:creator>dirk husemann</dc:creator>
				<category><![CDATA[hacking]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[directvnc]]></category>
		<category><![CDATA[displaylink]]></category>
		<category><![CDATA[third monitor]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[vnc]]></category>
		<category><![CDATA[vnc2dl]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=540</guid>
		<description><![CDATA[i&#8217;ve long been using an external 22&#8243; monitor with my ubuntu linux powered X200 thinkpad. while ubuntu maverick (10.10) has some issues with attaching and detaching the second monitor and subsequent suspend–resume cycles (the second suspend after a detach would not resume, d&#8217;oh), ubuntu lucid (10.04.02) works just fine (as befitting a long-term-support release). for [...]]]></description>
			<content:encoded><![CDATA[<p>i&#8217;ve long been using an external 22&#8243; monitor with my ubuntu linux powered X200 thinkpad. while ubuntu maverick (10.10) has some issues with attaching and detaching the second monitor and subsequent suspend–resume cycles (the second suspend after a detach would not resume, d&#8217;oh), ubuntu lucid (10.04.02) works just fine (as befitting a long-term-support release).</p>

<p>for quite a while i&#8217;ve had the old 20&#8243; monitor which i had been using previously sitting on my desktop along with an <a href="http://en.wikipedia.org/wiki/DisplayLink">USB DisplayLink</a> adapter — the idea being to hook the old monitor up as well as a third monitor<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>. the displaylink driver provided by ubuntu lucid seemed to work properly — the monitor&#8217;s screen would turn green on connecting it and a framebuffer device (<code>/dev/fb1</code>) and so i tried various recipes floating around on ubuntu forums and elsewhere — all promising to achieve a grand unified desktop comprising all three monitors — and they either didn&#8217;t work or if they achieved the <em>grand unified desktop</em> it was unusable.</p>

<p>so, after another prolonged period during which the monitor and the displaylink adapter gathered even more dust, i tried a different approach: give up on the grand unified desktop goal and instead just try to make use of the monitor. the idea this time was to start up a <a href="http://en.wikipedia.org/wiki/Virtual_Network_Computing">VNC</a> server, then use a VNC client to directly render the server into the framebuffer device (<code>/dev/fb1</code>) provided by linux&#8217;s displaylink driver. the vncserver bit is actually quite easy:</p>

<p><pre class="brush: bash; title: ; notranslate">
vncserver -name hidden -geometry 1600x1200 -depth 16 :42
</pre></p>

<p>which starts a VNC server for the <code>:42</code> display.</p>

<p>the VNC client bit turned out to be a bit more difficult. ubuntu lucid does have <code>directvnc</code> client which is &#8220;a vnc client for the linux framebuffer device&#8221;<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup>. that client does seem to require keyboard and mouse access and in some configurations did not work at all or locked up my keyboard (not the mouse, though, funnily enough) or crashed the running X session, so no points on that one. further research luckily turned up <a href="https://github.com/quentinsf/vnc2dl">vnc2dl</a> by none other than quentin stafford-fraser one of the <a href="http://en.wikipedia.org/wiki/Virtual_Network_Computing#History">original VNC developers</a> (and also the <a href="http://en.wikipedia.org/wiki/Quentin_Stafford-Fraser">inventor of the webcam</a> it seems). <code>vnc2dl</code> seemed a bit more promising and — after slightly modifying<sup id="fnref:3"><a href="#fn:3" rel="footnote">3</a></sup> <code>dldevice.c</code> — did do the job:</p>

<p><pre class="brush: bash; title: ; notranslate">
sudo vnc2dl :42
</pre></p>

<p>next up was fusing display :42 to my main display :0 on a keyboard and mouse level so that i could just move the mouse pointer over to the left and end up on display :42 — here <code>x2x</code> (in the equally named ubuntu package) came into play:</p>

<p><pre class="brush: bash; title: ; notranslate">
x2x -west -to :42 &gt;/dev/null 2&gt;&amp;1 &amp;
</pre></p>

<p>and, hey, presto!, both displays are linked mouse and keyboard wise.</p>

<p>only thing still bothering me was that cut and paste was not working. to fix that required adding</p>

<p><pre class="brush: bash; title: ; notranslate">
vncconfig -nowin &amp;
</pre></p>

<p>to my <code>.vnc/xstartup</code> file.</p>

<p>to have firefox run on display :42 required creation of a new firefox profile — i added that to <code>.vnc/xstartup</code> as well.<sup id="fnref:4"><a href="#fn:4" rel="footnote">4</a></sup></p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:1">
<p>yep, even more screen real estate; can&#8217;t have enough of that:  the ur-IDE emacs in one screen, instant messaging app pidgin on the other (for communicating with the team), the third screen would be really useful to host a firefox window with the API docs and so forth.&#160;<a href="#fnref:1" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:2">
<p>see <code>man directvnc</code> for more information about that one.&#160;<a href="#fnref:2" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:3">
<p><code>vnc2dl</code> in the version on <a href="https://github.com/quentinsf/vnc2dl">quentin&#8217;s github</a> is hard-wired to 1280&#215;1040/24bpp which my old monitor doesn&#8217;t quite grok, changing the wiring to 1600&#215;1200/16bpp made it more grokkable for my setup.&#160;<a href="#fnref:3" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:4">
<p>to get the new profile synchronized with the default profile i used firefox&#8217;s recently added <em>Firefox Sync</em> add-on.&#160;<a href="#fnref:4" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2011/03/09/adding-a-usb-monitor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point featurename="[47.308883299155255, 8.544209003448486]">47.308883299155255 8.544209003448486</georss:point>
	</item>
		<item>
		<title>protecting an emacs buffer window from being split or replaced&#8230;</title>
		<link>http://xyzzyxyzzy.net/2011/03/03/protecting-an-emacs-buffer-window-from-being-split-or-replaced/</link>
		<comments>http://xyzzyxyzzy.net/2011/03/03/protecting-an-emacs-buffer-window-from-being-split-or-replaced/#comments</comments>
		<pubDate>Thu, 03 Mar 2011 10:00:04 +0000</pubDate>
		<dc:creator>dirk husemann</dc:creator>
				<category><![CDATA[hacking]]></category>
		<category><![CDATA[buffer]]></category>
		<category><![CDATA[dedicated window]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[irc]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=528</guid>
		<description><![CDATA[i&#8217;m a big fan of IRC and we use it in our distributed team to stay in touch and also coordinate testing and upgrades. as i&#8217;m also a big fan of the ur-IDE emacs i&#8217;m using emacs&#8217;s rcirc mode for my IRC needs. typically i have a small buffer window at the bottom of my [...]]]></description>
			<content:encoded><![CDATA[<p>i&#8217;m a big fan of <a href="http://en.wikipedia.org/wiki/IRC">IRC</a> and we use it in our distributed team to stay in touch and also coordinate testing and upgrades. as i&#8217;m also a big fan of the ur-IDE <a href="http://en.wikipedia.org/?title=Emacs">emacs</a> i&#8217;m using emacs&#8217;s <a href="http://www.emacswiki.org/emacs/rcirc">rcirc mode</a> for my IRC needs. typically i have a small buffer window at the bottom of my emacs frame dedicated to IRC. quite nice&#8230;</p>

<p>&#8230;until you start <a href="http://code.google.com/p/simple-build-tool/">sbt</a> or do some git work in <a href="https://github.com/byplayer/egg">egg</a> as then those modes try to acquire some screen real-estate and without scruples either &#8220;recycle&#8221; my IRC buffer for their content <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />  or split it into two <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>

<p>this being emacs there had to be a way to get that IRC buffer window protected. and there is <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  digging into the emacs info docs and looking at the underlying emacs lisp files this is what i came up with:</p>

<pre><code> <pre class="brush: plain; title: ; notranslate">
 (defun rcirc-toggle-current-window-dedication ()
   (interactive)
   (let* ((window (selected-window))
          (dedicated (window-dedicated-p window)))
     (set-window-dedicated-p window (not dedicated))
     (setq window-size-fixed (not window-size-fixed))
     (message &amp;quot;Window %sdedicated to %s&amp;quot;
              (if dedicated &amp;quot;no longer &amp;quot; &amp;quot;&amp;quot;)
              (buffer-name))))

 (global-set-key (kbd &amp;quot;&amp;lt;Scroll_Lock&amp;gt;&amp;quot;) 'rcirc-toggle-current-window-dedication)
 </pre>
</code></pre>

<p>this will toggle the <code>window-dedicated-p</code> and <code>window-size-fixed</code> bits of the window in which you press the scroll-lock key &#8212; and, hey, presto! &#8212; no more pirating of the IRC buffer window.</p>
]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2011/03/03/protecting-an-emacs-buffer-window-from-being-split-or-replaced/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point featurename="[47.308883299155255, 8.544209003448486]">47.308883299155255 8.544209003448486</georss:point>
	</item>
		<item>
		<title>CSS selector transforms&#8230;</title>
		<link>http://xyzzyxyzzy.net/2011/02/18/css-selector-transforms/</link>
		<comments>http://xyzzyxyzzy.net/2011/02/18/css-selector-transforms/#comments</comments>
		<pubDate>Fri, 18 Feb 2011 16:05:46 +0000</pubDate>
		<dc:creator>dirk husemann</dc:creator>
				<category><![CDATA[hacking]]></category>
		<category><![CDATA[CSS transform]]></category>
		<category><![CDATA[lift]]></category>
		<category><![CDATA[pimp]]></category>
		<category><![CDATA[scala]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=515</guid>
		<description><![CDATA[we have been using scala and the lift framework for our project for over a year now. as we are starting on a new subcomponent of it, i thought i&#8217;d take a crack at using lift&#8217;s new CSS selector transforms. CSS transforms provide an alternative to the traditional lift templating mechanism: which requires the following [...]]]></description>
			<content:encoded><![CDATA[<p>we have been using scala and the lift framework for our project for over a year now. as we are starting on a new subcomponent of it, i thought i&#8217;d take a crack at using lift&#8217;s new <a href="http://www.assembla.com/wiki/show/liftweb/Binding_via_CSS_Selectors">CSS selector transforms</a>.</p>

<p>CSS transforms provide an alternative to the traditional lift templating mechanism:</p>

<p><pre class="brush: xml; title: ; notranslate">
    &lt;lift:FooBar&gt;
        &lt;foobar:dosomething /&gt;
    &lt;lift:FooBar&gt;
</pre></p>

<p>which requires the following scala code:</p>

<p><pre class="brush: scala; title: ; notranslate">
class FooBar { 
    def render(in: NodeSeq): NodeSeq =
        bind(&quot;foobar&quot;, in,
             &quot;dosomething&quot; -&gt; &lt;span&gt;dog&lt;/span&gt;)
}
</pre></p>

<p>and would result in</p>

<p><pre class="brush: xml; title: ; notranslate">
    &lt;span&gt;dog&lt;/span&gt;
</pre></p>

<p>with the new CSS transforms we get rid of the <code>&lt;lift:FooBar&gt;</code> tags and instead use plain HTML:</p>

<p><pre class="brush: xml; title: ; notranslate">
    &lt;div class=&quot;lift:Foobar&quot;&gt;
        &lt;span id=&quot;animal&quot;&gt;XXX&lt;/span&gt;
    &lt;/div&gt;
</pre></p>

<p>and then change the binding to:</p>

<p><pre class="brush: scala; title: ; notranslate">
class FooBar { 
    def render = &quot;#animal *&quot; &quot;dog&quot;
}
</pre></p>

<p>and end up, again, with</p>

<p><pre class="brush: xml; title: ; notranslate">
    &lt;span id=&quot;animal&quot;&gt;dog&lt;/span&gt;
</pre></p>

<p>— just with much less code! and once you start looking into expanding lists, it really becomes obvious that CSS transforms are a huge step forward. add to that that you can now design your web apps using normal HTML design tools (which in my case is <a href="http://www.emacswiki.org/">emacs</a>, <a href="http://ourcomments.org/Emacs/nXhtml/doc/nxhtml.html">nxhtml mode</a>, and <a href="https://github.com/bard/mozrepl/wiki/">moz-repl</a>) and life has just become a lot easier and more productive&#8230;</p>

<p>&#8230;except for one thing <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  you see, we are using <a href="http://en.wikipedia.org/wiki/Comet_%28programming%29">comets</a> and lift&#8217;s rather cool <code>partialUpdate(SetHtml("dog", Text(wuff! wuff!)))</code> construct to dynamically update the &#8220;dog&#8221; span. for that we were — in the pre-CSS transform age — using calls to <code>chooseTemplate</code> to fetch XML snippets and re-render them. how to do this with CSS transforms?</p>

<p>let&#8217;s assume our HTML snippet is a bit more complex and includes an image:</p>

<p><pre class="brush: xml; title: ; notranslate">
    &lt;div class=&quot;lift:Foobar&quot;&gt;
        &lt;div&gt;&lt;span id=&quot;animal&quot;&gt;&lt;img src=&quot;XXX&quot; /&gt;&lt;/span&gt;&lt;/div&gt;
    &lt;/div&gt;
</pre></p>

<p>the <a href="http://www.assembla.com/wiki/show/liftweb/Binding_via_CSS_Selectors">CSS selector transforms</a> page lists the following construct:</p>

<p><pre class="brush: scala; title: ; notranslate">
&quot;animal ^^&quot; #&gt; &quot;ignore&quot;
</pre></p>

<p>this will select the element with the id &#8220;animal&#8221;. so far, so good. what&#8217;s not so good is that the intuitively next idea</p>

<p><pre class="brush: scala; title: ; notranslate">
&quot;animal ^^&quot; #&gt; &quot;ignore&quot; &amp; &quot;img [src]&quot; #&gt; &quot;dog.png&quot;
</pre></p>

<p>doesn&#8217;t work (CSS transforms are actually functions, so we can invoke them on <code>NodeSeq</code> in <a href="http://code.google.com/p/simple-build-tool/wiki/RunningSbt#Build_Actions">sbt&#8217;s console</a>):</p>

<pre><code>scala&gt; val in = &lt;div&gt;&lt;span id="animal"&gt;&lt;img src="XXX" /&gt;&lt;/span&gt;&lt;/div&gt;
in: scala.xml.Elem = &lt;div&gt;&lt;span id="animal"&gt;&lt;img src="XXX"&gt;&lt;/img&gt;&lt;/span&gt;&lt;/div&gt;

scala&gt; ("#animal ^^" #&gt; "ignore")(in)
res0: scala.xml.NodeSeq = NodeSeq(&lt;span id="animal"&gt;&lt;img src="XXX"&gt;&lt;/img&gt;&lt;/span&gt;)

scala&gt; ("#animal ^^" #&gt; "ignore" &amp; "img [src]" #&gt; "dog.png")(in) 
res1: scala.xml.NodeSeq = NodeSeq(&lt;span id="animal"&gt;&lt;img src="XXX"&gt;&lt;/img&gt;&lt;/span&gt;)
</code></pre>

<p>what does work is the following code:</p>

<p><pre class="brush: scala; title: ; notranslate">
val template = (&quot;#animal ^^&quot; #&gt; &quot;ignore&quot;)(in)
(&quot;img [src]&quot; #&gt; &quot;dog.png&quot;)(template)
</pre></p>

<p>if we try this in console we get:</p>

<pre><code>scala&gt; val template = ("#animal ^^" #&gt; "ignore")(in)
template: scala.xml.NodeSeq = NodeSeq(&lt;span id="animal"&gt;&lt;img src="XXX"&gt;&lt;/img&gt;&lt;/span&gt;)

scala&gt; ("img [src]" #&gt; "dog.png")(template)
res2: scala.xml.NodeSeq = NodeSeq(&lt;span id="animal"&gt;&lt;img src="dog.png"&gt;&lt;/img&gt;&lt;/span&gt;)
</code></pre>

<p>which is what we expect. just a bit cumbersome to write and the contraction</p>

<p><pre class="brush: scala; title: ; notranslate">
(&quot;img [src]&quot; #&gt; &quot;dog.png&quot;)((&quot;#animal ^^&quot; #&gt; &quot;ignore&quot;)(in))
</pre></p>

<p>while producing the same result, is a bit hard to understand.</p>

<p>ideally, we could write it as:</p>

<p><pre class="brush: scala; title: ; notranslate">
&quot;#animal ^^&quot; #&gt; &quot;ignore&quot; ~&gt; &quot;img [src]&quot; #&gt; &quot;dog.png&quot;
</pre></p>

<p>as in: first select the template, then apply the following transform. well, we are in scala land, where (almost) everything is possible! so, why not create that operator? how hard can it be?</p>

<p>&#8220;not very&#8221; is the answer. first step is to figure out what it is that we want: <code>CssBindFunc</code> <a href="http://stable.simply.liftweb.net/#toc-Section-7.10">can be viewed</a> as <code>(NodeSeq) =&gt; NodeSeq</code> functions. so, we really want to concatenate one <code>(NodeSeq) =&gt; NodeSeq</code> with another one. writing this as a function that translates into:</p>

<p><pre class="brush: scala; title: ; notranslate">
def andThenInto(first: (NodeSeq) =&gt; NodeSeq, second: (NodeSeq) =&gt; NodeSeq): (NodeSeq) =&gt; NodeSeq =
    (ns: NodeSeq) =&gt; second(first(ns))
</pre></p>

<p>throwing that into the sbt console yields:</p>

<pre><code>scala&gt; def andThenInto(first: (NodeSeq) =&gt; NodeSeq, second: (NodeSeq) =&gt; NodeSeq): (NodeSeq) =&gt; NodeSeq =
    (ns: NodeSeq) =&gt; second(first(ns))
andThenInto: (first: (scala.xml.NodeSeq) =&gt; scala.xml.NodeSeq,second: (scala.xml.NodeSeq) =&gt; scala.xml.NodeSeq)(scala.xml.NodeSeq) =&gt; scala.xml.NodeSeq

scala&gt; andThenInto("#animal ^^" #&gt; "ignore", "img [src]" #&gt; "dog.png")
res4: (scala.xml.NodeSeq) =&gt; scala.xml.NodeSeq = &lt;function1&gt;

scala&gt; res4(in)
res4(in)
res5: scala.xml.NodeSeq = NodeSeq(&lt;span id="animal"&gt;&lt;img src="dog.png"&gt;&lt;/img&gt;&lt;/span&gt;)

scala&gt; 
</code></pre>

<p>which is exactly what we are after — well, almost. <code>andThenInto</code> is a bit long, we wanted to use <code>~&gt;</code>. so, let&#8217;s try that:</p>

<pre><code>def ~&gt;(first: (NodeSeq) =&gt; NodeSeq, second: (NodeSeq) =&gt; NodeSeq): (NodeSeq) =&gt; NodeSeq =
    (ns: NodeSeq) =&gt; second(first(ns))
$tilde$greater: (first: (scala.xml.NodeSeq) =&gt; scala.xml.NodeSeq,second: (scala.xml.NodeSeq) =&gt; scala.xml.NodeSeq)(scala.xml.NodeSeq) =&gt; scala.xml.NodeSeq
</code></pre>

<p>doesn&#8217;t look too bad. let&#8217;s give it a spin:</p>

<pre><code>~&gt;("#animal ^^" #&gt; "ignore", "img [src]" #&gt; "dog.png")
res6: (scala.xml.NodeSeq) =&gt; scala.xml.NodeSeq = &lt;function1&gt;

scala&gt; res6(in)
res6(in)
res7: scala.xml.NodeSeq = NodeSeq(&lt;span id="animal"&gt;&lt;img src="dog.png"&gt;&lt;/img&gt;&lt;/span&gt;)
</code></pre>

<p>looking good. next, let&#8217;s pimp <code>CssBindFunc</code> with that:</p>

<p><pre class="brush: scala; title: ; notranslate">
implicit def pimpCssBindFuncWithAndThenInto(first: (NodeSeq) =&gt; NodeSeq) = new { 
    def ~&gt;(second: (NodeSeq) =&gt; NodeSeq): (NodeSeq) =&gt; NodeSeq =
        (ns: NodeSeq) =&gt; second(first(ns))
}
</pre></p>

<p>and give it a go:</p>

<pre><code>scala&gt; "#animal ^^" #&gt; "ignore" ~&gt; "img [src]" #&gt; "dog.png"
&lt;console&gt;:14: error: type mismatch;
 found   : java.lang.String("img [src]")
 required: (scala.xml.NodeSeq) =&gt; scala.xml.NodeSeq
       "#animal ^^" #&gt; "ignore" ~&gt; "img [src]" #&gt; "dog.png"
</code></pre>

<p>ooops. what happened? the compiler seems to be doing the grouping in a different way then we expected. &#8220;operator precedence&#8221; was jumping up and down in my mind in the back row desparate to get called on: looking up that topic in the <a href="http://programming-scala.labs.oreilly.com/ch03.html">&#8220;scala bible&#8221;</a> turned up the explanation: the <code>~</code> character is in the highest precedence category together with <code>#</code>. to avoid having to use parenthesis we changed our &#8220;andThenInto&#8221; operator to <code>&amp;~&gt;</code>:</p>

<p><pre class="brush: scala; title: ; notranslate">
implicit def pimpCssBindFuncWithAndThenInto(first: (NodeSeq) =&gt; NodeSeq) = new { 
    def &amp;~&gt;(second: (NodeSeq) =&gt; NodeSeq): (NodeSeq) =&gt; NodeSeq =
        (ns: NodeSeq) =&gt; second(first(ns))
}
</pre></p>

<p>which then yields the desired result:</p>

<pre><code>"#animal ^^" #&gt; "ignore" &amp;~&gt; "img [src]" #&gt; "dog.png"
res10: (scala.xml.NodeSeq) =&gt; scala.xml.NodeSeq = &lt;function1&gt;

scala&gt; res10(in)
res10(in)
res11: scala.xml.NodeSeq = NodeSeq(&lt;span id="animal"&gt;&lt;img src="dog.png"&gt;&lt;/img&gt;&lt;/span&gt;)

scala&gt; 
</code></pre>

<p> <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2011/02/18/css-selector-transforms/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<georss:point featurename="[47.131074826701266, 8.747992515563965]">47.131074826701266 8.747992515563965</georss:point>
	</item>
		<item>
		<title>fixing failing suspend on maverick system</title>
		<link>http://xyzzyxyzzy.net/2010/12/30/fixing-failing-suspend-on-maverick-system/</link>
		<comments>http://xyzzyxyzzy.net/2010/12/30/fixing-failing-suspend-on-maverick-system/#comments</comments>
		<pubDate>Thu, 30 Dec 2010 13:26:40 +0000</pubDate>
		<dc:creator>dirk husemann</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[maverick]]></category>
		<category><![CDATA[suspend/resume]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=476</guid>
		<description><![CDATA[i recently got my first real desktop system &#8212; as in: not a thinkpad. it&#8217;s an 8 core, 8GB, 1 terabyte system with an nvidia graphics chipset allowing two large displays to be powered: really sweet. installing ubuntu maverick 10.10 from the alternate install CD1 was simple and straight forward. installing the latest nvidia drivers [...]]]></description>
			<content:encoded><![CDATA[<p>i recently got my first real desktop system &#8212; as in: not a thinkpad. it&#8217;s an 8 core, 8GB, 1 terabyte system with an nvidia graphics chipset allowing two large displays to be powered: really sweet. installing ubuntu maverick 10.10 from the alternate install CD<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> was simple and straight forward. installing the latest nvidia drivers from the <a href="https://launchpad.net/~ubuntu-x-swat/+archive/x-updates"><code>x-updates</code> ppa</a> and running <code>nvidia-xconfig</code> provides the correct configuration for the 1920&#215;1200 display (second display on order <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  and, except for suspend&#8211;resume, everything works fine.</p>

<p>the issue with suspend&#8211;resume is that the machine goes through the motions of suspending but then just comes back <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />  d&#8217;oh. googling around for &#8220;maverick suspend problem&#8221; i stumble over a <a href="http://art.ubuntuforums.org/showthread.php?t=1614891">post in the ubuntu forums</a> citing the <a href="https://wiki.ubuntu.com/MaverickMeerkat/ReleaseNotes">maverick release notes</a> &#8212;</p>

<blockquote>
  <p><em>When the XHCI module is loaded for USB 3.0 operation the system cannot suspend.</em> Manually unloading XHCI will allow suspend to complete normally. To avoid future suspend problems, the workaround is to add SUSPEND_MODULES=&#8221;xhci-hcd&#8221; to /etc/pm/config.d/unload_module then the system can suspend normally.</p>
</blockquote>

<p>&#8212; hmph. following those instructions, suspend&#8211;resume are working. <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:1">
<p>&#8230;to be able to use disk level encryption! the home directory encryption offered by the normal ubuntu install CD suffers from path length issues and also stability issues. disk level encryption has so far worked quite well and we use it on <em>all</em> our machines now.&#160;<a href="#fnref:1" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2010/12/30/fixing-failing-suspend-on-maverick-system/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point featurename="[47.131074826701266, 8.747992515563965]">47.131074826701266 8.747992515563965</georss:point>
	</item>
		<item>
		<title>using maven to generate your project&#8217;s scala classpath</title>
		<link>http://xyzzyxyzzy.net/2010/01/15/using-maven-to-generate-your-projects-scala-classpath/</link>
		<comments>http://xyzzyxyzzy.net/2010/01/15/using-maven-to-generate-your-projects-scala-classpath/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 15:49:20 +0000</pubDate>
		<dc:creator>dirk husemann</dc:creator>
				<category><![CDATA[hacking]]></category>
		<category><![CDATA[classpath]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[interpreter]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[scala]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=398</guid>
		<description><![CDATA[one thing i quite like about scala is that ability to run it in &#8220;interpreted&#8221; mode via the scala command. that allows me &#8212; similiar to python or ipython &#8212; to experiment and quickly try things out or even test my classes and objects. what was a bit of a pain was getting the proper [...]]]></description>
			<content:encoded><![CDATA[<p>one thing i quite like about scala is that ability to run it in
&#8220;interpreted&#8221; mode via the <code>scala</code> command. that allows me &#8212;
similiar to python or ipython &#8212; to experiment and quickly try things
out or even test my classes and objects.</p>

<p>what was a bit of a pain was getting the proper classpath constructed
so that not only <code>target/classes</code> was picked up but also all the
required dependencies. poking a bit around in <a href="http://maven.apache.org/plugins/index.html">maven&#8217;s plugin
documentation</a> i came across the <a href="http://maven.apache.org/plugins/maven-dependency-plugin/usage.html">dependency plugin</a> and in particular
the <a href="http://maven.apache.org/plugins/maven-dependency-plugin/build-classpath-mojo.html">dependency:build-classpath mojo</a>, armed with that information i
came up with the following rather useful shell script:</p>

<div>
<pre class="brush: bash; title: ; notranslate">
#!/bin/bash
top=$(pwd)
cwd=$(pwd)
while  [ &quot;$top&quot; != &quot;/&quot; -a ! -e &quot;$top/pom.xml&quot; ] ; do
    cd ..
    top=$(pwd)
done
cd $cwd

if [ -e &quot;$top/pom.xml&quot; ] ; then
    cd $top

    echo &quot;generating scala classpath based on maven pom.xml&quot;
    mvn dependency:build-classpath -Dmdep.outputFile=.classpath-scala

    echo &quot;starting scala&quot;
    scala -cp target/classes:$(cat .classpath-scala)

else

    echo &quot;cannot find top level pom.xml! must have taken a wrong turn somewhere. sorry.&quot;
    exit 1

fi
</pre>
</div>

<p>save under a convenient name, stir, and enjoy: call this script
instead of calling scala directly.</p>
]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2010/01/15/using-maven-to-generate-your-projects-scala-classpath/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<georss:point featurename="goldach">47.473497 9.466443</georss:point>
	</item>
	</channel>
</rss>

