<?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/"
	>

<channel>
	<title>DenkZEIT</title>
	<atom:link href="http://blog.gungfu.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.gungfu.de</link>
	<description>leaving explanation to those who prefer comfort to truth</description>
	<lastBuildDate>Thu, 11 Mar 2010 18:23:55 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Wenn Designer nix zu tun haben: hema!</title>
		<link>http://blog.gungfu.de/archives/2010/03/11/wenn-designer-nix-zu-tun-haben-hema/</link>
		<comments>http://blog.gungfu.de/archives/2010/03/11/wenn-designer-nix-zu-tun-haben-hema/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 18:23:55 +0000</pubDate>
		<dc:creator>Steffen</dc:creator>
				<category><![CDATA[Unsortiertes]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[lustig]]></category>
		<category><![CDATA[marketing]]></category>
		<category><![CDATA[webseiten]]></category>

		<guid isPermaLink="false">http://blog.gungfu.de/?p=1797</guid>
		<description><![CDATA[Andrea hat mich auf http://producten.hema.nl/ aufmerksam gemacht. Wenn man ein bisschen wartet &#8211; nachdem man auf das Laden der Seite gewartet hat &#8211; macht sie (die Seite) recht erstaunliche Sachen.

Also: Viel Spaß beim Warten!]]></description>
			<content:encoded><![CDATA[<p>Andrea hat mich auf <a href="http://producten.hema.nl/">http://producten.hema.nl/</a> aufmerksam gemacht. Wenn man ein bisschen wartet &#8211; nachdem man auf das Laden der Seite gewartet hat &#8211; macht sie (die Seite) recht erstaunliche Sachen.</p>

<p>Also: Viel Spaß beim Warten!</p>]]></content:encoded>
			<wfw:commentRss>http://blog.gungfu.de/archives/2010/03/11/wenn-designer-nix-zu-tun-haben-hema/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Neues Zitat: overcoming incidental complexity</title>
		<link>http://blog.gungfu.de/archives/2010/03/09/neues-zitat-overcoming-incidental-complexity/</link>
		<comments>http://blog.gungfu.de/archives/2010/03/09/neues-zitat-overcoming-incidental-complexity/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 19:52:22 +0000</pubDate>
		<dc:creator>Steffen</dc:creator>
				<category><![CDATA[Unsortiertes]]></category>
		<category><![CDATA[complexity]]></category>
		<category><![CDATA[kiss]]></category>
		<category><![CDATA[Simplicity]]></category>
		<category><![CDATA[softwaredevelopment]]></category>
		<category><![CDATA[zitate]]></category>

		<guid isPermaLink="false">http://blog.gungfu.de/?p=1794</guid>
		<description><![CDATA[I think programmers have become inured to incidental complexity, in particular by confusing familiar or concise with simple. And when they encounter complexity, they consider it a challenge to overcome, rather than an obstacle to remove. Overcoming complexity isn&#8217;t work, it&#8217;s waste.
Rich Hickey
Weitere Zitate gibt&#8217;s in der Zitatsammlung. Eine Liste der neuesten Zitate gibt es [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>I think programmers have become inured to incidental complexity, in particular by confusing familiar or concise with simple. And when they encounter complexity, they consider it a challenge to overcome, rather than an obstacle to remove. Overcoming complexity isn&#8217;t work, it&#8217;s waste.</p></blockquote>
<cite><a href="http://www.simple-talk.com/opinion/geek-of-the-week/rich-hickey-geek-of-the-week/">Rich Hickey</a></cite>
<p>Weitere Zitate gibt&#8217;s in der <a href="http://www.gungfu.de/zitate/">Zitatsammlung</a>. Eine Liste der <a href="http://www.gungfu.de/zitate/#latestQuotesH">neuesten Zitate</a> gibt es auch.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gungfu.de/archives/2010/03/09/neues-zitat-overcoming-incidental-complexity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OK &#8211; Das geht auch vorbei &#8211; Go!</title>
		<link>http://blog.gungfu.de/archives/2010/03/09/ok-das-geht-auch-vorbei-go/</link>
		<comments>http://blog.gungfu.de/archives/2010/03/09/ok-das-geht-auch-vorbei-go/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 18:40:34 +0000</pubDate>
		<dc:creator>Steffen</dc:creator>
				<category><![CDATA[Unsortiertes]]></category>
		<category><![CDATA[Clips]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[lustig]]></category>
		<category><![CDATA[Musik]]></category>
		<category><![CDATA[okgo]]></category>

		<guid isPermaLink="false">http://blog.gungfu.de/?p=1789</guid>
		<description><![CDATA[Ich bin ja ein absoluter Fan von OK Go. Seit kurzem gibt es eine Rube Goldberg-Maschinen-Version von &#8216;This Too Shall Pass&#8217;:




Wer&#8217;s noch nicht kennt, sollte sich auch unbedingt den Clip zu &#8220;Here it goes again&#8221; anschauen!]]></description>
			<content:encoded><![CDATA[<p>Ich bin ja ein absoluter Fan von <a href="http://www.youtube.com/user/OkGo">OK Go</a>. Seit kurzem gibt es eine <a href="http://en.wikipedia.org/wiki/Rube_Goldberg_machine">Rube Goldberg-Maschinen</a>-Version von <em>&#8216;This Too Shall Pass&#8217;</em>:</p>


<object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/qybUFnY7Y8w&#038;hl=de_DE&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/qybUFnY7Y8w&#038;hl=de_DE&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object>

<p>Wer&#8217;s noch nicht kennt, sollte sich auch unbedingt den Clip zu &#8220;Here it goes again&#8221; anschauen!</p>]]></content:encoded>
			<wfw:commentRss>http://blog.gungfu.de/archives/2010/03/09/ok-das-geht-auch-vorbei-go/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Statically Typed Ducks: Best of both worlds</title>
		<link>http://blog.gungfu.de/archives/2010/03/01/statically-typed-ducks-best-of-both-worlds/</link>
		<comments>http://blog.gungfu.de/archives/2010/03/01/statically-typed-ducks-best-of-both-worlds/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 21:02:15 +0000</pubDate>
		<dc:creator>Steffen</dc:creator>
				<category><![CDATA[Unsortiertes]]></category>
		<category><![CDATA[clojure]]></category>
		<category><![CDATA[ducktyping]]></category>
		<category><![CDATA[dynamische Sprachen]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[statische Typisierung]]></category>

		<guid isPermaLink="false">http://blog.gungfu.de/?p=1769</guid>
		<description><![CDATA[Folgenden Strip habe ich gerade im Eintrag Clojure, Haskell &#038; Ruby Vs Euler 25 entdeckt und musste so lachen:



Es gibt viele Diskussionen zum Für und Wieder von dynamischer und statischer Typisierung. Die Wahrheit ist, dass es keine allein seligmachende Antwort gibt, dafür aber einen einfachen Test:



Wenn der Pfeil und die Erklärung dir tatsächlich halfen, dann [...]]]></description>
			<content:encoded><![CDATA[<p>Folgenden Strip habe ich gerade im Eintrag <a href="http://www.bestinclass.dk/index.php/2010/02/haskell-ruby-clojure/">Clojure, Haskell &#038; Ruby Vs Euler 25</a> entdeckt und musste so lachen:</p>



<blockquote><p>Es gibt viele Diskussionen zum Für und Wieder von dynamischer und statischer Typisierung. Die Wahrheit ist, dass es keine allein seligmachende Antwort gibt, dafür aber einen einfachen Test:</p>

<img src='http://wiki.gungfu.de/uploads/Main/staticallytypedduck.jpg' alt='statically typed duck' class="cent" style="width:350px" />

<p>Wenn der Pfeil und die Erklärung dir tatsächlich halfen, dann ist statische Typisierung genau das Richtige für dich.</p></blockquote>



<p>Wer nicht weiß, worum&#8217;s beim ducktyping geht, kann sich im Denkzeit-Wiki schlau machen: <a href="http://wiki.gungfu.de/Main/DuckTyping">DuckTyping</a>, <a href="http://wiki.gungfu.de/Main/DynamicLanguages">DynamicLanguages</a>, <a href="http://wiki.gungfu.de/Main/StaticVsDynamicTyping">StaticVsDynamicTyping</a>.</p>

<p>Außerdem ist die Seite <a href="http://geekandpoke.typepad.com/geekandpoke/"><strong>Geek &#038; Poke</strong></a>, auf der der Strip veröffentlicht wurde, unbedingt empfehlenswert.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.gungfu.de/archives/2010/03/01/statically-typed-ducks-best-of-both-worlds/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Neues Zitat: Clojure is rifle-oriented programming</title>
		<link>http://blog.gungfu.de/archives/2010/02/28/neues-zitat-clojure-is-rifle-oriented-programming/</link>
		<comments>http://blog.gungfu.de/archives/2010/02/28/neues-zitat-clojure-is-rifle-oriented-programming/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 17:35:49 +0000</pubDate>
		<dc:creator>Steffen</dc:creator>
				<category><![CDATA[Unsortiertes]]></category>
		<category><![CDATA[clojure]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[zitate]]></category>

		<guid isPermaLink="false">http://blog.gungfu.de/?p=1740</guid>
		<description><![CDATA[

Any comparison of hot JVM languages is likely to note that &#8220;Clojure is not object-oriented.&#8221; This is true, but it may lead you to the wrong conclusions. It’s a little like saying that a rifle is not arrow-oriented.
Stuart Halloway
Weitere Zitate gibt&#8217;s in der Zitatsammlung. Eine Liste der neuesten Zitate gibt es auch.
]]></description>
			<content:encoded><![CDATA[<img alt="" src="http://wiki.gungfu.de/uploads/Main/clojure-icon.gif" title="clojures logo" class="alignright" width="100" height="100" />

<blockquote><p>Any comparison of hot JVM languages is likely to note that &#8220;Clojure is not object-oriented.&#8221; This is true, but it may lead you to the wrong conclusions. It’s a little like saying that a rifle is not arrow-oriented.</p></blockquote>
<cite><a href="http://blog.thinkrelevance.com/2009/8/12/rifle-oriented-programming-with-clojure-2">Stuart Halloway</a></cite>
<p>Weitere Zitate gibt&#8217;s in der <a href="http://www.gungfu.de/zitate/">Zitatsammlung</a>. Eine Liste der <a href="http://www.gungfu.de/zitate/#latestQuotesH">neuesten Zitate</a> gibt es auch.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gungfu.de/archives/2010/02/28/neues-zitat-clojure-is-rifle-oriented-programming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Toilet</title>
		<link>http://blog.gungfu.de/archives/2010/02/21/google-toilet/</link>
		<comments>http://blog.gungfu.de/archives/2010/02/21/google-toilet/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 19:30:14 +0000</pubDate>
		<dc:creator>Steffen</dc:creator>
				<category><![CDATA[Unsortiertes]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[privacy]]></category>

		<guid isPermaLink="false">http://blog.gungfu.de/?p=1757</guid>
		<description><![CDATA[

via amix.dk]]></description>
			<content:encoded><![CDATA[<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/g7uBRa2M89g&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;hl=en_US&#038;feature=player_embedded&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.youtube.com/v/g7uBRa2M89g&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;hl=en_US&#038;feature=player_embedded&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="425" height="344"></embed></object>

<a href="http://amix.dk/blog/post/19491">via amix.dk</a>]]></content:encoded>
			<wfw:commentRss>http://blog.gungfu.de/archives/2010/02/21/google-toilet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Alternative Zustelldienste und Nachsendeaufträge</title>
		<link>http://blog.gungfu.de/archives/2010/02/19/alternative-zustelldienste-und-nachsendeauftrage/</link>
		<comments>http://blog.gungfu.de/archives/2010/02/19/alternative-zustelldienste-und-nachsendeauftrage/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 07:18:59 +0000</pubDate>
		<dc:creator>Steffen</dc:creator>
				<category><![CDATA[Unsortiertes]]></category>
		<category><![CDATA[briefe]]></category>
		<category><![CDATA[post]]></category>
		<category><![CDATA[umzug]]></category>

		<guid isPermaLink="false">http://blog.gungfu.de/?p=1750</guid>
		<description><![CDATA[Wir ziehen demnächst um &#8211; heute morgen ist in diesem Zusammenhang die Frage aufgekommen, welche Auswirkung ein Nachsendeauftrag bei der Deutschen Post auf alternative Zustelldienste hat &#8211; d.h. bekommen die automatisch was von unserem Umzug mit?

Wohl eher nicht &#8211; das heißt: bei allen Zustelldiensten, von denen wir &#8211; möglicherweise &#8211; Post zugestellt bekommen könnten, Nachsendeaufträge [...]]]></description>
			<content:encoded><![CDATA[<p>Wir ziehen demnächst um &#8211; heute morgen ist in diesem Zusammenhang die Frage aufgekommen, welche Auswirkung ein Nachsendeauftrag bei der <em>Deutschen Post</em> auf alternative Zustelldienste hat &#8211; d.h. bekommen die automatisch was von unserem Umzug mit?</p>

<p><strong>Wohl eher nicht</strong> &#8211; das heißt: bei allen Zustelldiensten, von denen wir &#8211; möglicherweise &#8211; Post zugestellt bekommen könnten, Nachsendeaufträge zu stellen.</p>

<p>Irgendwie Banane.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.gungfu.de/archives/2010/02/19/alternative-zustelldienste-und-nachsendeauftrage/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Neues Zitat: Esel als Minister</title>
		<link>http://blog.gungfu.de/archives/2010/02/18/neues-zitat-esel-als-minister/</link>
		<comments>http://blog.gungfu.de/archives/2010/02/18/neues-zitat-esel-als-minister/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 12:24:31 +0000</pubDate>
		<dc:creator>Steffen</dc:creator>
				<category><![CDATA[Unsortiertes]]></category>
		<category><![CDATA[Dekadenz]]></category>
		<category><![CDATA[Politik]]></category>
		<category><![CDATA[zitate]]></category>

		<guid isPermaLink="false">http://blog.gungfu.de/?p=1741</guid>
		<description><![CDATA[

Die spätrömische Dekadenz bestand darin, dass die Reichen, nach ihren Fressgelagen, sich in Eselsmilch gebadet haben und der Kaiser Caligula einen Esel zum Konsul ernannte. Insofern stimmt Westerwelles Vergleich: Vor 100 Tagen ist ein Esel Bundesaußenminister geworden.
Heiner Geißler
Weitere Zitate gibt&#8217;s in der Zitatsammlung. Eine Liste der neuesten Zitate gibt es auch.
]]></description>
			<content:encoded><![CDATA[<img src="http://blog.gungfu.de/uploads/eselInDerLuft.jpg" alt="" class="imgR"/>

<blockquote><p>Die spätrömische Dekadenz bestand darin, dass die Reichen, nach ihren Fressgelagen, sich in Eselsmilch gebadet haben und der Kaiser Caligula einen Esel zum Konsul ernannte. Insofern stimmt Westerwelles Vergleich: Vor 100 Tagen ist ein Esel Bundesaußenminister geworden.</p></blockquote>
<cite>Heiner Geißler</cite>
<p>Weitere Zitate gibt&#8217;s in der <a href="http://www.gungfu.de/zitate/">Zitatsammlung</a>. Eine Liste der <a href="http://www.gungfu.de/zitate/#latestQuotesH">neuesten Zitate</a> gibt es auch.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gungfu.de/archives/2010/02/18/neues-zitat-esel-als-minister/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Neues Zitat: iPad &#8211; nichts für Kreative</title>
		<link>http://blog.gungfu.de/archives/2010/02/06/neues-zitat-ipad-nichts-fur-kreative/</link>
		<comments>http://blog.gungfu.de/archives/2010/02/06/neues-zitat-ipad-nichts-fur-kreative/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 19:26:41 +0000</pubDate>
		<dc:creator>Steffen</dc:creator>
				<category><![CDATA[Unsortiertes]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[creativity]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[zitate]]></category>

		<guid isPermaLink="false">http://blog.gungfu.de/?p=1737</guid>
		<description><![CDATA[For creative people, this device is nothing.(Tim Bray, meaning the iPad)
Tim Bray
Weitere Zitate gibt&#8217;s in der Zitatsammlung. Eine Liste der neuesten Zitate gibt es auch.
]]></description>
			<content:encoded><![CDATA[<blockquote><p>For creative people, this device is nothing.</p><p>(Tim Bray, meaning the iPad)</p></blockquote>
<cite><a href="http://www.tbray.org/ongoing/When/201x/2010/01/27/iPad">Tim Bray</a></cite>
<p>Weitere Zitate gibt&#8217;s in der <a href="http://www.gungfu.de/zitate/">Zitatsammlung</a>. Eine Liste der <a href="http://www.gungfu.de/zitate/#latestQuotesH">neuesten Zitate</a> gibt es auch.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gungfu.de/archives/2010/02/06/neues-zitat-ipad-nichts-fur-kreative/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Googlealternative: ixquick</title>
		<link>http://blog.gungfu.de/archives/2010/02/04/googlealternative-ixquick/</link>
		<comments>http://blog.gungfu.de/archives/2010/02/04/googlealternative-ixquick/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 19:24:09 +0000</pubDate>
		<dc:creator>Steffen</dc:creator>
				<category><![CDATA[Unsortiertes]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[search]]></category>

		<guid isPermaLink="false">http://blog.gungfu.de/?p=1729</guid>
		<description><![CDATA[In einem Spiegelartikel bin ich auf ixquick gestoßen &#8211; eine anonymisierende Metasuchmaschine (&#8220;die datenschutzfreundlichste Suchmaschine der Welt&#8221;). Kann man auch ganz schnell als Suchmaschine in Opera einrichten.

Zur Erinnerung: google-watch.org]]></description>
			<content:encoded><![CDATA[<p>In einem <a href="http://www.spiegel.de/spiegel/print/d-68621901.html">Spiegelartikel</a> bin ich auf <a href="http://ixquick.com/">ixquick</a> gestoßen &#8211; eine anonymisierende Metasuchmaschine (&#8220;die datenschutzfreundlichste Suchmaschine der Welt&#8221;). Kann man auch ganz schnell <a href="http://www.ixquick.com/eng/download-ixquick-plugin.html">als Suchmaschine in Opera einrichten</a>.</p>

<p>Zur Erinnerung: <a href="http://www.google-watch.org/">google-watch.org</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.gungfu.de/archives/2010/02/04/googlealternative-ixquick/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Onkel Enso, Mr. SlickRun und der Executor</title>
		<link>http://blog.gungfu.de/archives/2010/01/31/onkel-enso-mr-slickrun-und-der-executor/</link>
		<comments>http://blog.gungfu.de/archives/2010/01/31/onkel-enso-mr-slickrun-und-der-executor/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 21:20:32 +0000</pubDate>
		<dc:creator>Steffen</dc:creator>
				<category><![CDATA[Unsortiertes]]></category>
		<category><![CDATA[application launcher]]></category>
		<category><![CDATA[autohotkey]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[Ergonomie]]></category>
		<category><![CDATA[executor]]></category>
		<category><![CDATA[tastatur]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://blog.gungfu.de/?p=1704</guid>
		<description><![CDATA[

Ich bin ja ein absoluter Fan von AutoHotkey. Praktisch jede Kombination von Windows-Taste mit STRG/ALT/SHIFT und einem zusätzlichen Zeichen auf der Tastatur führt bei mir eine andere Aktion aus (meistens wird eine Anwendung &#8211; evtl. mit bestimmten Parametern &#8211; gestartet).

Das führt dazu, dass Kollegen, die an meiner Maschine tätig werden, verdammt aufpassen müssen, dass sie [...]]]></description>
			<content:encoded><![CDATA[<img src="http://blog.gungfu.de/wp-content/uploads/2010/01/winKey.jpg" alt="winKey" title="winKey" width="180" height="52" class="alignright size-full wp-image-1705" />

<p>Ich bin ja ein absoluter Fan von <a href="http://www.autohotkey.com/">AutoHotkey</a>. Praktisch jede Kombination von Windows-Taste mit STRG/ALT/SHIFT und einem zusätzlichen Zeichen auf der Tastatur führt bei mir eine andere Aktion aus (meistens wird eine Anwendung &#8211; evtl. mit bestimmten Parametern &#8211; gestartet).</p>

<p>Das führt dazu, dass Kollegen, die an meiner Maschine tätig werden, verdammt aufpassen müssen, dass sie nicht versehentlich die Windows-Taste drücken. <img src='http://blog.gungfu.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>

<p>Außerdem führt das dazu, dass ich für die weniger häufig verwendeten Tastaturküzel eine Liste neben dem Monitor liegen habe. </p>

<p>Sprich: für viele Tastaturkürzel habe ich eine gute <em>Eselsbrücke</em> (beispielsweise startete früher <kbd>Win+q</kbd> <a href="http://wiki.gungfu.de/Main/SourceSafe">Visual SourceSafe</a> (Q für &#8220;Quatsch&#8221; &#8211; im Sinne von &#8220;funktioniert nicht &#8211; ist Quatsch das überhaupt zu benutzen&#8221;). Für viele andere Aktionen habe ich keine gute mnemonische Verknüpfung zum aktivierenden Tastaturkürzel.</p>

<p>Also habe ich nach einer anderen Lösung gesucht. Die sogenannten <a href="http://wiki.gungfu.de/Main/AppLauncher">Application Launcher</a> schienen ein guter Ansatz. Zumal ich seit der intensiven Nutzung von <a href="http://wiki.gungfu.de/Main/Emacs">emacs</a> ein absoluter Tastaturjunkie geworden bin. Möglichst jede Aktion sollte über die Tastatur auszuführen sein &#8211; die Maus wird eher selten benutzt.</p>

<p>Beim Googeln zum Thema &#8220;<a href="http://www.google.com/search?q=application+launcher">Application Launcher</a>&#8221; kommt man schnell auf <a href="http://www.launchy.net/">Launchy</a>, <a href="http://www.humanized.com/enso/launcher/">Humanized Enso</a> oder <a href="http://www.bayden.com/SlickRun/">SlickRun</a>.</p>

<p><em>Launchy</em> ist bei vielen der Favorit. Ich hab&#8217;s noch nicht ausprobiert, weil ich auf <em>Enso</em> gestoßen bin: sehr durchdacht und &#8211; hübsch. <em><a class="wikiLink" href="http://wiki.gungfu.de/Main/SlickRun">SlickRun</a></em> hatte ich &#8211; parallel zu Enso &#8211; bis Anfang letzter Woche installiert.</p>

<p>Bei Enso hat mich gestört, dass ich es nicht hinbekommen habe, eigene Kürzel selbst zu hinterlegen: Konkret kann man wohl nur die Kommandos <kbd>Open</kbd> und <kbd>Open With</kbd> erweitern &#8211; da geht es aber nur um Anwendungen bzw. Dokumente. Ich will aber <strong>Parameter und Ausführungsort</strong> beeinflussen können.</p>

<p>Was bei Enso sehr gut funktioniert &#8211; die <strong>Autovervollständigung</strong> &#8211; hat mich bei <a class="wikiLink" href="http://wiki.gungfu.de/Main/SlickRun">SlickRun</a> enttäuscht. Die Einstellungsmöglichkeiten (Parameter, Ausführungsort und noch viel mehr) haben mich auf der anderen Seite aber überzeugt. </p>

<p>Anfang dieser Woche hat mich die mangelhafte Autovervollständigung dann doch so gestört, dass ich auf Alternativensuche gegangen und <a href="http://jonaquino.blogspot.com/2009/10/executor-is-better-than-slickrun.html">fündig geworden</a> bin: <a href="http://executor.dk/"><strong>Executor</strong></a>.</p>

<p>Executor hat eine ansprechende Oberfläche, umfangreiche Konfigurationsmöglichkeiten und eine funktionierende Autovervollständigung: Nicht nur bei der Eingabe der ersten Buchstaben (oder irgendeines zusammenhängenden Teils) eines Kürzels wird eine Liste von möglichen Vervollständigungen angezeigt &#8211; auch wenn einzelne Buchstaben aus dem Kürzel eingegeben werden, wird Executor fündig.</p>

<p>Also findet nicht nur <kbd>fire</kbd> den <code>Mozilla Firefox</code>, sondern auch <kbd>fif</kbd>.</p>

<p>Weitere Links zu weiteren Informationen gibt&#8217;s im Wiki unter <a href="http://wiki.gungfu.de/Main/AppLauncher">AppLauncher</a>.</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.gungfu.de/archives/2010/01/31/onkel-enso-mr-slickrun-und-der-executor/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Clojure mit Emacs hacken</title>
		<link>http://blog.gungfu.de/archives/2010/01/10/clojure-mit-emacs-hacken/</link>
		<comments>http://blog.gungfu.de/archives/2010/01/10/clojure-mit-emacs-hacken/#comments</comments>
		<pubDate>Sun, 10 Jan 2010 20:17:49 +0000</pubDate>
		<dc:creator>Steffen</dc:creator>
				<category><![CDATA[Unsortiertes]]></category>
		<category><![CDATA[clojure]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[repl]]></category>
		<category><![CDATA[slime]]></category>
		<category><![CDATA[swank]]></category>

		<guid isPermaLink="false">http://blog.gungfu.de/?p=1673</guid>
		<description><![CDATA[

Ich habe einige Zeit versucht, die verschiedenen Modes für die Unterstützung von Clojure in Emacs manuell auf dem aktuellen Stand zu halten.

Dafür habe ich verschiedene git-Repositories verwendet. Angefangen habe ich mit etwas analog zu Exploring Clojure (Lisp on the JVM) &#8211; Part 2 &#8211; Setup &#8211; schlußendlich bin ich auf die Repositories von Phil Hagelberg [...]]]></description>
			<content:encoded><![CDATA[<img alt="" src="http://wiki.gungfu.de/uploads/Main/clojure-icon.gif" title="clojures logo" class="alignright" width="100" height="100" />

<p>Ich habe einige Zeit versucht, die verschiedenen Modes für die Unterstützung von <a href="http://wiki.gungfu.de/Main/Clojure">Clojure</a> in <a href="http://wiki.gungfu.de/Main/Emacs">Emacs</a> manuell auf dem aktuellen Stand zu halten.</p>

<p>Dafür habe ich verschiedene <a href="http://git-scm.com/">git</a>-Repositories verwendet. Angefangen habe ich mit etwas analog zu <a href="http://bc.tech.coop/blog/081023.html">Exploring Clojure (Lisp on the JVM) &#8211; Part 2 &#8211; Setup</a> &#8211; schlußendlich bin ich auf die Repositories von <a href="http://technomancy.us/">Phil Hagelberg</a> gegangen:</p>
<ul>
	<li><a href="http://github.com/technomancy/clojure-mode">clojure-mode</a> &#8211; ein Emacs-Mode für Clojure</li>
	<li><a href="http://github.com/technomancy/swank-clojure">swank-clojure</a> &#8211; Swank-Server für Slime</li>
	<li><a href="http://github.com/technomancy/slime">slime</a> &#8211; <a href="http://wiki.gungfu.de/Main/SLIME">Superior Lisp Interaction Mode for Emacs</a></li>
</ul>

<p>Zunächst konnte man das swank-clojure-Projekt mit <a href="http://maven.apache.org/">Maven</a> bauen. Dann wurde der Build-Prozess auf <a href="http://github.com/technomancy/leiningen">Leiningen</a> umgestellt, das bei mir nicht reibungslos zum Laufen zu bekommen war.</p>

<p>Zusätzlich bestand ein Problem darin, dass die verschiedenen Teile nicht immer vollständig zusammenarbeiten wollten &#8211; z.B. machte eine Änderung in SLIME den swank-clojure-Server unbrauchbar. Es war ziemlich zeitaufwendig die Abhängigkeiten (auch Leiningen) zwischen den Projekten so sauber hinzukriegen, dass alles tatsächlich lief.</p>

<h3>Stand der Dinge</h3>
<p>Inzwischen verwende ich einen viel einfacheren Installationsmechanismus: <a href="http://tromey.com/elpa/">ELPA</a> (Emacs Lisp Package Archive). Damit bin ich zwar nicht immer auf dem aktuellen Stand, aber wenigstens funktioniert das Zusammenspiel.</p>

<p>Und so wird&#8217;s gemacht:</p>
<ol>
	<li>Zunächst <a href="http://tromey.com/elpa/install.html">ELPA installieren</a>.</li>
	<li>Dann mit <kbd>M-x package-list-packages</kbd> ELPA starten.</li>
	<li>swank-clojure in der Liste der zur Verfügung stehenden Packages auswählen &#8211; mit <kbd>i</kbd> für die Installation markieren und mit <kbd>x</kbd> die Installation durchführen.</li>
	<li>Emacs neu starten</li>
	<li>Mit M-x slime werden die Abhängigkeiten von swank-clojure heruntergeladen und installiert:
<ul>
	<li>clojure-mode, slime, slime-repl und swank-clojure werden in ein Unterverzeichnis <code>elpa</code> geladen.</li>
	<li>der Java-Teil von swank-clojure, clojure und clojure-contrib werden in ein Unterverzeichnis <code>.swank-clojure</code> geladen.</li>
</ul>
</li>
</ol>

<p>Danach hat man eine tolle Entwicklungsumgebung für Clojure mit Tab-Vervollständigung, Syntaxhervorhebung, versch. Codenavigierungsmöglichkeiten und eine das Hackerherze verwöhnende <a href="http://wiki.gungfu.de/Main/ReadEvalPrint">REPL</a> mit warmen Worten des Zuspruchs:</p>

<div id="wpshdo_1" class="wp-synhighlighter-outer"><div id="wpshdt_1" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_1"></a><a id="wpshat_1" class="wp-synhighlighter-title" href="#codesyntax_1"  onClick="javascript:wpsh_toggleBlock(1)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_1" onClick="javascript:wpsh_code(1)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.gungfu.de/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_1" onClick="javascript:wpsh_print(1)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.gungfu.de/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="#codesyntax_1" onClick="javascript:wpsh_about(1)" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.gungfu.de/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_1" class="wp-synhighlighter-inner" style="display: block;"><pre class="lisp" style="font-family:monospace;"><span class="br0">&#40;</span>defvar slime-words-of-encouragement
  `<span class="br0">&#40;</span><span class="st0">&quot;Let the hacking commence!&quot;</span>
    <span class="st0">&quot;Hacks and glory await!&quot;</span>
    <span class="st0">&quot;Hack and be merry!&quot;</span>
    <span class="st0">&quot;Your hacking starts... NOW!&quot;</span>
    <span class="st0">&quot;May the source be with you!&quot;</span>
    <span class="st0">&quot;Take this REPL, brother, and may it serve you well.&quot;</span>
    <span class="st0">&quot;Lemonodor-fame is but a hack away!&quot;</span>
    <span class="sy0">,</span><span class="br0">&#40;</span>format <span class="st0">&quot;%s, this could be the start of a beautiful program.&quot;</span>
             <span class="br0">&#40;</span>slime-user-first-<span class="kw1">name</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
  <span class="st0">&quot;Scientifically-proven optimal words of hackerish encouragement.&quot;</span><span class="br0">&#41;</span></pre></div></div>

<p>Weitere, ausführlichere Infos zum Setup gibt&#8217;s dort:</p>
<ul>
	<li><a href="http://thoughtadventures.blogspot.com/2010/01/setting-up-clojure-repl-with-emacs-and.html">Setting up a Clojure REPL with Emacs and Slime</a></li>
	<li><a href="http://technomancy.us/126">in which are found tricks of the trade concerning clojure authorship</a> (evtl. nicht mehr ganz aktuell &#8211; aber ausführlich)</li>
	<li><a href="http://www.bestinclass.dk/index.php/2009/12/clojure-101-getting-clojure-slime-installed/">Clojure 101 – Getting Clojure &#038; Slime installed</a> &#8211; ein screencast, der den Installationsprozess anschaulich zeigt</li>
</ul>

<p>Außerdem gibt&#8217;s eine Seite im <a class="wikiLink" href="http://wiki.gungfu.de/Main/DenkzeitWiki">DenkzeitWiki</a>, auf der ich weitere Erkenntnisse zusammentrage: <a href="http://wiki.gungfu.de/Main/HackingClojureWithEmacs">Hacking Clojure With Emacs</a>.</p>

Nachfolgend noch der Clojure-relevante Teil meiner .emacs:

<div id="wpshdo_2" class="wp-synhighlighter-outer"><div id="wpshdt_2" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_2"></a><a id="wpshat_2" class="wp-synhighlighter-title" href="#codesyntax_2"  onClick="javascript:wpsh_toggleBlock(2)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_2" onClick="javascript:wpsh_code(2)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.gungfu.de/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_2" onClick="javascript:wpsh_print(2)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.gungfu.de/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="#codesyntax_2" onClick="javascript:wpsh_about(2)" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.gungfu.de/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_2" class="wp-synhighlighter-inner" style="display: block;"><pre class="lisp" style="font-family:monospace;"><span class="br0">&#40;</span>require 'paredit<span class="br0">&#41;</span>
<span class="co1">;; http://www.emacswiki.org/emacs/ParEdit</span>
<span class="br0">&#40;</span><span class="kw1">mapc</span> <span class="br0">&#40;</span><span class="kw1">lambda</span> <span class="br0">&#40;</span>mode<span class="br0">&#41;</span>
        <span class="br0">&#40;</span><span class="kw1">let</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>hook <span class="br0">&#40;</span><span class="kw1">intern</span> <span class="br0">&#40;</span>concat <span class="br0">&#40;</span>symbol-<span class="kw1">name</span> mode<span class="br0">&#41;</span>
                                    <span class="st0">&quot;-mode-hook&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
          <span class="br0">&#40;</span>add-hook hook <span class="br0">&#40;</span><span class="kw1">lambda</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#40;</span>paredit-mode <span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
      '<span class="br0">&#40;</span>emacs-lisp lisp inferior-lisp clojure slime slime-repl<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="co1">; http://lispservice.posterous.com/paredit-in-the-slime-repl</span>
&nbsp;
<span class="br0">&#40;</span>add-to-<span class="kw1">list</span> 'load-path <span class="st0">&quot;~/.emacs.d/plugins/clojure&quot;</span><span class="br0">&#41;</span>  <span class="co1">;; currently hosting: slime-fuzzy from http://elder-gods.org/~larry/repos/slime-tracker/contrib/slime-fuzzy.el</span>
&nbsp;
<span class="br0">&#40;</span><span class="kw1">setq</span> slime-repl-history-file <span class="st0">&quot;~/.emacs.d/persistent/.slime-history.eld&quot;</span><span class="br0">&#41;</span> <span class="co1">; from http://nflath.com/2009/09/slime-clojure-setup/ -- default is ~/.slime-history.eld </span>
&nbsp;
<span class="co1">;; slime</span>
<span class="br0">&#40;</span>eval-after-load <span class="st0">&quot;slime&quot;</span>
  '<span class="br0">&#40;</span><span class="kw1">progn</span>
     <span class="co1">;;; http://groups.google.com/group/clojure/msg/419eb38c229269e5</span>
     <span class="br0">&#40;</span>require 'slime-fuzzy<span class="br0">&#41;</span> 
     <span class="br0">&#40;</span><span class="kw1">setq</span> slime-complete-<span class="kw1">symbol</span>*-fancy t<span class="br0">&#41;</span> 
     <span class="br0">&#40;</span><span class="kw1">setq</span> slime-complete-symbol-<span class="kw1">function</span> 'slime-fuzzy-complete-<span class="kw1">symbol</span><span class="br0">&#41;</span>
&nbsp;
     <span class="br0">&#40;</span><span class="kw1">setq</span> slime-use-autodoc-mode <span class="kw1">nil</span><span class="br0">&#41;</span> <span class="co1">;; http://groups.google.com/group/clojure/msg/337057edae5dcdc3</span>
     <span class="br0">&#40;</span>slime-setup '<span class="br0">&#40;</span>slime-repl<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="co1">;;slime-banner slime-fancy do not work with ELPA/swank-clojure (currently: 20100108)</span>
&nbsp;
<span class="br0">&#40;</span><span class="kw1">setq</span> swank-clojure-binary <span class="st0">&quot;clj.bat&quot;</span><span class="br0">&#41;</span>
&nbsp;
&nbsp;
<span class="co1">;; ~~~ http://www.skamphausen.de/cgi-bin/ska/My_Clojure_Setup</span>
<span class="br0">&#40;</span>require 'slime<span class="br0">&#41;</span>
&nbsp;
<span class="br0">&#40;</span>require 'clojure-mode<span class="br0">&#41;</span>
<span class="br0">&#40;</span>require 'swank-clojure<span class="br0">&#41;</span>
<span class="br0">&#40;</span><span class="kw1">setq</span> auto-mode-alist
      <span class="br0">&#40;</span><span class="kw1">cons</span> '<span class="br0">&#40;</span><span class="st0">&quot;<span class="es0">\\</span>.clj$&quot;</span> <span class="sy0">.</span> clojure-mode<span class="br0">&#41;</span>
            auto-mode-alist<span class="br0">&#41;</span><span class="br0">&#41;</span>
&nbsp;
<span class="br0">&#40;</span>def-slime-selector-method ?j
  <span class="st0">&quot;most recently visited clojure-mode buffer.&quot;</span>
  <span class="br0">&#40;</span>slime-recently-visited-buffer 'clojure-mode<span class="br0">&#41;</span><span class="br0">&#41;</span>
&nbsp;
<span class="br0">&#40;</span>add-hook 'clojure-mode-hook
          <span class="br0">&#40;</span><span class="kw1">lambda</span> <span class="br0">&#40;</span><span class="br0">&#41;</span>
            <span class="br0">&#40;</span><span class="kw1">setq</span> fill-column 80<span class="br0">&#41;</span>
            <span class="br0">&#40;</span><span class="kw1">setq</span> indent-tabs-mode <span class="kw1">nil</span><span class="br0">&#41;</span>
            <span class="br0">&#41;</span><span class="br0">&#41;</span>
&nbsp;
<span class="co1">;; ~~</span>
&nbsp;
&nbsp;
<span class="br0">&#40;</span><span class="kw1">defun</span> slimer <span class="br0">&#40;</span><span class="br0">&#41;</span>
  <span class="st0">&quot;Starts a two-window (current window at top, REPL at bottom) hacking session.&quot;</span>
  <span class="br0">&#40;</span>interactive<span class="br0">&#41;</span>
  <span class="br0">&#40;</span><span class="kw1">when</span> <span class="br0">&#40;</span>get-buffer <span class="st0">&quot;*inferior-lisp*&quot;</span><span class="br0">&#41;</span>
    <span class="br0">&#40;</span>kill-buffer <span class="st0">&quot;*inferior-lisp*&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
  <span class="br0">&#40;</span>save-window-excursion
    <span class="br0">&#40;</span>slime<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></pre></div></div>



<p><code>clj.bat</code> sieht so aus:</p>

<div id="wpshdo_3" class="wp-synhighlighter-outer"><div id="wpshdt_3" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_3"></a><a id="wpshat_3" class="wp-synhighlighter-title" href="#codesyntax_3"  onClick="javascript:wpsh_toggleBlock(3)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_3" onClick="javascript:wpsh_code(3)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.gungfu.de/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_3" onClick="javascript:wpsh_print(3)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.gungfu.de/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="#codesyntax_3" onClick="javascript:wpsh_about(3)" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.gungfu.de/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_3" class="wp-synhighlighter-inner" style="display: block;"><pre class="dos" style="font-family:monospace;"><span class="sy0">@</span><a href="http://www.ss64.com/nt/echo.html"><span class="kw3">echo</span></a> off
<span class="co1">rem http://bc.tech.coop/blog/081023.html</span>
<span class="co1">
&nbsp;
REM set-up customized local environment</span>
<a href="http://www.ss64.com/nt/call.html"><span class="kw1">call</span></a> clj-local-env.bat
&nbsp;
&nbsp;
&nbsp;
<a href="http://www.ss64.com/nt/set.html"><span class="kw3">set</span></a> clj_jv_debug=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8889
&nbsp;
<a href="http://www.ss64.com/nt/set.html"><span class="kw3">set</span></a> clj_jv_params=-Xms64m -Xmx1024m <span class="sy0">%</span><span class="re2">clj_jv_server</span><span class="sy0">%</span> -XX:+UseConcMarkSweepGC -XX:+DoEscapeAnalysis -Xbootclasspath/a:&quot;<span class="sy0">%</span><span class="re2">clj</span><span class="sy0">%</span>&quot;;&quot;<span class="sy0">%</span><span class="re2">clj</span><span class="sy0">%</span>\clojure.jar&quot;;&quot;<span class="sy0">%</span><span class="re2">clj</span><span class="sy0">%</span>\clojure-contrib.jar&quot;
<span class="co1">REM -XX:+UseCompressedOops </span>
&nbsp;
<a href="http://www.ss64.com/nt/set.html"><span class="kw3">set</span></a> clj_emacs_swank=&quot;<span class="sy0">%</span><span class="re2">HOME</span><span class="sy0">%</span>\.swank-clojure\swank-clojure-1.1.0.jar&quot;
<a href="http://www.ss64.com/nt/set.html"><span class="kw3">set</span></a> clj_cp_libs=&quot;<span class="sy0">%</span><span class="re2">clj_scratch</span><span class="sy0">%</span>\src&quot;;&quot;<span class="sy0">%</span><span class="re2">clj_scratch</span><span class="sy0">%</span>\target\classes&quot;;&quot;<span class="sy0">%</span><span class="re2">clj_scratch</span><span class="sy0">%</span>\lib\wax_1.0.1.jar&quot;;&quot;<span class="sy0">%</span><span class="re2">clj_scratch</span><span class="sy0">%</span>\lib\vtd-xml.jar&quot;;&quot;<span class="sy0">%</span><span class="re2">clj_scratch</span><span class="sy0">%</span>\lib\miglayout-3.7.2.jar&quot;
<a href="http://www.ss64.com/nt/set.html"><span class="kw3">set</span></a> clj_cp=<span class="sy0">%</span><span class="re2">clj_cp_libs</span><span class="sy0">%</span>;<span class="sy0">%</span><span class="re2">clj_emacs_swank</span><span class="sy0">%</span>
<span class="co1">
&nbsp;
&nbsp;
REM http://www.robvanderwoude.com/parameters.php</span>
&nbsp;
<a href="http://www.ss64.com/nt/if.html"><span class="kw1">if</span></a> <span class="br0">&#91;</span><span class="sy0">%</span><span class="re2">1</span><span class="br0">&#93;</span> == <span class="br0">&#91;</span><span class="br0">&#93;</span> <a href="http://www.ss64.com/nt/goto.html"><span class="kw1">goto</span></a> repl
<span class="co1">REM echo java %clj_jv_params% -cp %clj_cp%  clojure.main %*</span>
java <span class="sy0">%</span><span class="re2">clj_jv_params</span><span class="sy0">%</span> -cp <span class="sy0">%</span><span class="re2">clj_cp</span><span class="sy0">%</span>  clojure.main <span class="sy0">%</span><span class="re2">*</span>
&nbsp;
<a href="http://www.ss64.com/nt/goto.html"><span class="kw1">goto</span></a> END
&nbsp;
&nbsp;
&nbsp;
&nbsp;
:<span class="re0">repl</span>
<span class="co1">REM echo java %clj_jv_params% -cp %clj_cp% clojure.main</span>
java <span class="sy0">%</span><span class="re2">clj_jv_params</span><span class="sy0">%</span> -cp <span class="sy0">%</span><span class="re2">clj_cp</span><span class="sy0">%</span> clojure.main
<span class="co1">
&nbsp;
REM this does not work -- &quot;no 'clj_jv_server' JVM at...&quot;</span>
<span class="co1">REM javaw %debug% -cp %clj_cp%  clojure.main</span>
&nbsp;
&nbsp;
&nbsp;
&nbsp;
:<span class="re0">end</span></pre></div></div>




<p>Und <code>clj-local-env.bat</code> so:</p>
<div id="wpshdo_4" class="wp-synhighlighter-outer"><div id="wpshdt_4" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_4"></a><a id="wpshat_4" class="wp-synhighlighter-title" href="#codesyntax_4"  onClick="javascript:wpsh_toggleBlock(4)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_4" onClick="javascript:wpsh_code(4)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.gungfu.de/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_4" onClick="javascript:wpsh_print(4)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.gungfu.de/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="#codesyntax_4" onClick="javascript:wpsh_about(4)" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.gungfu.de/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_4" class="wp-synhighlighter-inner" style="display: block;"><pre class="dos" style="font-family:monospace;"><span class="sy0">@</span><a href="http://www.ss64.com/nt/echo.html"><span class="kw3">echo</span></a> off
&nbsp;
&nbsp;
<a href="http://www.ss64.com/nt/set.html"><span class="kw3">set</span></a> clj=c:\Users\Steffen\hacking\clojure
<a href="http://www.ss64.com/nt/set.html"><span class="kw3">set</span></a> clj_scratch=<span class="sy0">%</span><span class="re2">clj</span><span class="sy0">%</span>\scripts
&nbsp;
&nbsp;
<a href="http://www.ss64.com/nt/set.html"><span class="kw3">set</span></a> clj_jv_server=-server</pre></div></div>



<p><code>clj-local-env.bat</code> verwende ich um Variablen so zu setzen, dass ich dieselbe <code>clj.bat</code> auf verschiedenen Rechnern verwenden kann.<br />
<code>clj.bat</code> ist mit der Dateiendung <code>clj</code> verknüpft &#8211; wird also z.B. beim Doppelklick auf clj-Dateien verwendet.</p>



 







]]></content:encoded>
			<wfw:commentRss>http://blog.gungfu.de/archives/2010/01/10/clojure-mit-emacs-hacken/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cool introductory presentation to F#</title>
		<link>http://blog.gungfu.de/archives/2009/12/29/cool-introductory-presentation-to-f/</link>
		<comments>http://blog.gungfu.de/archives/2009/12/29/cool-introductory-presentation-to-f/#comments</comments>
		<pubDate>Tue, 29 Dec 2009 21:28:28 +0000</pubDate>
		<dc:creator>Steffen</dc:creator>
				<category><![CDATA[Unsortiertes]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[Clips]]></category>
		<category><![CDATA[F#]]></category>
		<category><![CDATA[funktionales programmieren]]></category>
		<category><![CDATA[presentation]]></category>

		<guid isPermaLink="false">http://blog.gungfu.de/?p=1667</guid>
		<description><![CDATA[

Via Nice Presentation on F# I and many others were pointed to the rather well done presentation An Introduction to Microsoft F# by Luca Bolognese over at channel9.

A very light, inspiring and nicely done introduction to F# &#8211; recommended!]]></description>
			<content:encoded><![CDATA[<img alt="" src="http://blog.gungfu.de/wp-content/uploads/2008/07/l2.png" title="Lambda - the ultimate" class="alignright" width="150" height="182" />

<p>Via <a href="http://devender.wordpress.com/2009/12/07/nice-presentation-on-f/">Nice Presentation on F#</a> I and many others were pointed to the rather well done presentation <a href="http://channel9.msdn.com/pdc2008/TL11/">An Introduction to Microsoft F#</a> by <a href="http://www.google.com/search?q=luca+bolognese">Luca Bolognese</a> over at <a href="http://channel9.msdn.com/">channel9</a>.</p>

<p>A very light, inspiring and nicely done introduction to <a href="http://wiki.gungfu.de/Main/FSharp">F#</a> &#8211; <em>recommended</em>!</p>]]></content:encoded>
			<wfw:commentRss>http://blog.gungfu.de/archives/2009/12/29/cool-introductory-presentation-to-f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>clojure: (shutdown-agents) for DestroyJavaVM to terminate faster</title>
		<link>http://blog.gungfu.de/archives/2009/12/06/clojure-shutdown-agents-for-destroyjavavm-to-terminate-faster/</link>
		<comments>http://blog.gungfu.de/archives/2009/12/06/clojure-shutdown-agents-for-destroyjavavm-to-terminate-faster/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 19:26:12 +0000</pubDate>
		<dc:creator>Steffen</dc:creator>
				<category><![CDATA[Unsortiertes]]></category>
		<category><![CDATA[agents]]></category>
		<category><![CDATA[clojure]]></category>
		<category><![CDATA[concurrency]]></category>
		<category><![CDATA[jvm]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://blog.gungfu.de/?p=1660</guid>
		<description><![CDATA[

Getting my feets even more wet with clojure&#8217;s concurrency I experienced some strange behavior: My script had already finished doing it&#8217;s job but didn&#8217;t exit to the commandline.

So I added a (println "done") to the end of the script and could see that after the &#8220;done&#8221; was printed to stdout quite some more time was [...]]]></description>
			<content:encoded><![CDATA[<img alt="" src="http://wiki.gungfu.de/uploads/Main/clojure-icon.gif" title="clojures logo" class="alignright" width="100" height="100" />

<p>Getting my feets even more wet with <a href="http://wiki.gungfu.de/Main/Clojure">clojure</a>&#8217;s concurrency I experienced some strange behavior: My script had already finished doing it&#8217;s job but didn&#8217;t exit to the commandline.</p>

<p>So I added a <kbd>(println "done")</kbd> to the end of the script and could see that after the &#8220;done&#8221; was printed to stdout quite some more time was spent doing &#8211; ehm &#8211; something before coming back to the commandline.</p>

<p>So I fired up <a href="https://visualvm.dev.java.net/">VisualVM</a> (free and recommended)  and stumbled over a thread &#8220;<strong><a class="wikiLink" href="http://wiki.gungfu.de/Main/DestroyJavaVM">DestroyJavaVM</a></strong>&#8221; which started execution after the &#8220;done&#8221; was printed.</p>

<p>With Google&#8217;s help I came up with <a href="http://groups.google.com/group/clojure/browse_thread/thread/409054e3542adc1f/7490698d3e4a6ed1">JVM hanging after -main</a> and the solution to my problem: the <a href="http://clojure.org/agents">agents</a> that were started in my script should be explicitly shut down for my script to terminate faster.</p>

<p>So adding <strong><kbd>(shutdown-agents)</kbd></strong> to the end of the script it returns immediately.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.gungfu.de/archives/2009/12/06/clojure-shutdown-agents-for-destroyjavavm-to-terminate-faster/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RinpaEshidan und GregPattillo</title>
		<link>http://blog.gungfu.de/archives/2009/12/06/1657/</link>
		<comments>http://blog.gungfu.de/archives/2009/12/06/1657/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 13:34:44 +0000</pubDate>
		<dc:creator>Steffen</dc:creator>
				<category><![CDATA[Unsortiertes]]></category>
		<category><![CDATA[beatbox flute]]></category>
		<category><![CDATA[stopmotion]]></category>
		<category><![CDATA[Unterhaltung]]></category>

		<guid isPermaLink="false">http://blog.gungfu.de/archives/2009/12/06/1657/</guid>
		<description><![CDATA[Via den Favoriten von freedomworksfilms auf Youtupe bin ich auf den User RinpaEshidan gestoßen, von dem einige sehr tolle Clips hochgeladen wurden:



Auch toll ist:



Hinter freedomworksfilms steckt Greg Pattillo &#8211; ein Beatboxflötist &#8211; dessen Clips übrigens auch sehr sehenswert sind:

]]></description>
			<content:encoded><![CDATA[<p>Via den Favoriten von <a href="http://www.youtube.com/user/freedomworksfilms">freedomworksfilms</a> auf Youtupe bin ich auf den User <a href="http://www.youtube.com/user/RinpaEshidan">RinpaEshidan</a> gestoßen, von dem einige sehr tolle Clips hochgeladen wurden:</p>

<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/RHeX_91LGDU&#038;hl=de_DE&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/RHeX_91LGDU&#038;hl=de_DE&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>

<p>Auch toll ist:</p>

<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/sKKl1bybZKg&#038;hl=de_DE&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/sKKl1bybZKg&#038;hl=de_DE&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>

<p>Hinter freedomworksfilms steckt Greg Pattillo &#8211; ein Beatboxflötist &#8211; dessen Clips übrigens auch sehr sehenswert sind:</p>

<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/8jDv_fYvG6k&#038;hl=de_DE&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/8jDv_fYvG6k&#038;hl=de_DE&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>]]></content:encoded>
			<wfw:commentRss>http://blog.gungfu.de/archives/2009/12/06/1657/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Looking for Eric Cantona</title>
		<link>http://blog.gungfu.de/archives/2009/11/08/looking-for-eric-cantona/</link>
		<comments>http://blog.gungfu.de/archives/2009/11/08/looking-for-eric-cantona/#comments</comments>
		<pubDate>Sun, 08 Nov 2009 13:31:41 +0000</pubDate>
		<dc:creator>Steffen</dc:creator>
				<category><![CDATA[Unsortiertes]]></category>
		<category><![CDATA[Fussball]]></category>

		<guid isPermaLink="false">http://blog.gungfu.de/?p=1650</guid>
		<description><![CDATA[Durch einen Bericht in der Tageszeitung über den neuen Film Looking for Eric bin ich auf den Ausnahmefussballspieler Eric Cantona aufmerksam geworden.



Der Pass ist wichtiger als das Tor.







]]></description>
			<content:encoded><![CDATA[<p>Durch einen <a href="http://www.nn-online.de/artikel.asp?art=1117516&#038;kat=48">Bericht in der Tageszeitung</a> über den neuen Film <a href="http://www.imdb.com/title/tt1242545/">Looking for Eric</a> bin ich auf den Ausnahmefussballspieler <a href="http://en.wikipedia.org/wiki/Eric_Cantona">Eric Cantona</a> aufmerksam geworden.</p>



<blockquote><p>Der Pass ist wichtiger als das Tor.</p></blockquote>



<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/u5AYzOLE3XI&#038;hl=de&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/u5AYzOLE3XI&#038;hl=de&#038;fs=1" type="application/x-shockwave-flash" width="425" height="344" allowscriptaccess="always" allowfullscreen="true"></embed></object>



]]></content:encoded>
			<wfw:commentRss>http://blog.gungfu.de/archives/2009/11/08/looking-for-eric-cantona/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Advanced Branching</title>
		<link>http://blog.gungfu.de/archives/2009/11/06/advanced-branching/</link>
		<comments>http://blog.gungfu.de/archives/2009/11/06/advanced-branching/#comments</comments>
		<pubDate>Fri, 06 Nov 2009 20:10:24 +0000</pubDate>
		<dc:creator>Steffen</dc:creator>
				<category><![CDATA[Unsortiertes]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[branching]]></category>
		<category><![CDATA[scm]]></category>
		<category><![CDATA[technical memo]]></category>
		<category><![CDATA[VersionControl]]></category>

		<guid isPermaLink="false">http://blog.gungfu.de/?p=1630</guid>
		<description><![CDATA[

Branching is the most difficult thing you usually do in a SCM/VersionControl-system because a lot of merging has to be done (mainly to get the current state (and bug-fixes) from the trunk/mainline into the branch &#8211; and to get the branch back to mainline when development on the branch is finished).


Some facts about merging

	textual changes [...]]]></description>
			<content:encoded><![CDATA[<a href='http://en.wikipedia.org/wiki/Revision_control'><img src='http://wiki.gungfu.de/uploads/Main/Revision_controlled_project_visualization.png' class="imgR" /></a>

<p>Branching is the most difficult thing you usually do in a <a href="http://wiki.gungfu.de/Main/SCM">SCM</a>/<a href="http://wiki.gungfu.de/Main/VersionControl">VersionControl</a>-system because a lot of merging has to be done (mainly to get the current state (and bug-fixes) from the trunk/mainline into the branch &#8211; and to get the branch back to mainline when development on the branch is finished).</p>


<h2>Some facts about merging</h2>
<ul>
	<li>textual changes are quite comfortably and rather easily handled by the current tools</li>
	<li>it gets difficult and complex when the changes are of semantic nature (e.g. refactorings, especially renamings)</li>
	<li><em>it&#8217;s much easier to merge small changes frequently than large changes rarely</em> (Big Scary Merges).</li>
</ul>



<h2>Some thoughts on branching</h2>
<ul>
	<li>it&#8217;s difficult to keep the branch up-to-date and easily mergeable with the mainline (the ultimate goal) because of the many merges necessary (and deciding when and what to merge from/to the mainline)</li>
	<li>therefore <em>branching should be used sparingly</em> &#8211; ideally only for managing and isolating releases, i.e. just before a new release is manifested a separate line of development for that release is branched from the mainline. Development for future releases is progressed on the mainline/trunk.</li>
	<li>when you start thinking about doing a feature-branch, also start thinking about your architecture: if your code is modular (component-based (programming against interfaces and such)) it should be rather easy to switch between different implementations of a feature &#8211; so instead of doing a branch in the VCS make an alternative implementation of that feature. You could change between the alternatives via config-files (or whatever your way of managing your components is). This method is called <a href="http://paulhammant.com/blog/branch_by_abstraction.html">Branch By Abstraction</a> (BBA).<br />
If your architecture currently does not allow for BBA &#8211; re-think your architecture and refactor before undertaking a branch (a BBA that is &#8211; not a Branch By Source Control).</li>
</ul>



<blockquote><p>Feature Branching is a poor man&#8217;s modular architecture, instead of building systems with the ability to easy swap in and out features at runtime/deploytime they couple themselves to the source control providing this mechanism through manual merging.</p><cite><a href="http://www.bodar.com/dan/">Dan Bodart</a> <small>via Martin Fowler&#8217;s <a href="http://martinfowler.com/bliki/FeatureBranch.html">FeatureBranch</a></small></cite></blockquote>



<h2>Release branches</h2>
<p>One appropriate use of branches (i.e. BBSC) is for stabilizing a release.</p>

<h3>Timing &#8211; when to branch for release</h3> 
<p>There are two opposing forces to be considered:<br />
On one side there are the <strong>developers who do the release</strong> &#8211; they would branch as late as possible so they can keep their number of merges from their release-branch to mainline to a minimum.<br />
On the other side are the <strong>developers that progress on the mainline</strong>, i.e. who code for future versions.</p>

<h2>Conclusion</h2>
<p>So it seems a good time for starting the release-branch is some time after <em>feature completeness</em>, rather late in the <em>code-chill</em> (when only bug-fixes are committed for the release) &#8211; <em>code-freeze</em> (when the release candidates are produced) seems too late, reducing productivity of the other non-release teams &#8211; in the worst case stalling parallel development (because there is no branch supporting it &#8211; a situation that resembles a deadlock in an <a href="http://wiki.gungfu.de/Main/ConcurrentProgramming">concurrent system</a>).</p>

<p>Of course, you could always do private branches, shelves, what have you. That does not fix your non-modular code, though, the inability to share with the whole of your team easily.</p>


<h2>Links</h2>
<ul>
	<li><a href="http://martinfowler.com/bliki/FeatureBranch.html">FeatureBranch</a></li>
	<li><a href="http://paulhammant.com/blog/branch_by_abstraction.html">branch_by_abstraction</a></li>
	<li><a href="http://wiki.gungfu.de/Main/Branching">Branching@DenkzeitWiki</a> &#8211; more links</li>
</ul>










]]></content:encoded>
			<wfw:commentRss>http://blog.gungfu.de/archives/2009/11/06/advanced-branching/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gesichtserkennung für Hobbyfotografen</title>
		<link>http://blog.gungfu.de/archives/2009/11/05/gesichtserkennung-fur-hobbyfotografen/</link>
		<comments>http://blog.gungfu.de/archives/2009/11/05/gesichtserkennung-fur-hobbyfotografen/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 21:29:59 +0000</pubDate>
		<dc:creator>Steffen</dc:creator>
				<category><![CDATA[Unsortiertes]]></category>
		<category><![CDATA[biometrie]]></category>
		<category><![CDATA[gesichtserkennung]]></category>
		<category><![CDATA[künstliche intelligenz]]></category>
		<category><![CDATA[Picasa]]></category>

		<guid isPermaLink="false">http://blog.gungfu.de/?p=1621</guid>
		<description><![CDATA[Als jemand, der sein Studentenherz an die Künstliche Intelligenz verloren hat, sitze ich seit heute Nachmittag vor Picasa und bin über ein neues Feature der Bildverwaltungssoftware von Google erstaunt: Gesichtserkennung.

Da ich mir die Releasenotes nicht angeschaut hatte, konnte ich mit dem People-Tagging zunächst nicht viel anfangen. War aber eingermaßen erstaunt, dass Picasa &#8211; wie viele [...]]]></description>
			<content:encoded><![CDATA[<p>Als jemand, der sein <a href="http://www.gungfu.de/studium/">Studentenherz</a> an die Künstliche Intelligenz verloren hat, sitze ich seit heute Nachmittag vor <a href="http://picasa.google.com/">Picasa</a> und bin über ein neues Feature der Bildverwaltungssoftware von Google erstaunt: Gesichtserkennung.</p>

<p>Da ich mir die Releasenotes nicht angeschaut hatte, konnte ich mit dem People-Tagging zunächst nicht viel anfangen. War aber eingermaßen erstaunt, dass Picasa &#8211; wie viele gute Fotoapparate &#8211; Gesichter erkennen und im Bild als Rechtecke markieren kann &#8211; obwohl das in den <a href="http://picasaweb.google.com/">Web Albums</a> schon seit gut einem Jahr funktioniert.</p>

<p>Die Desktopvariante von Picasa bietet jetzt auch die Möglichkeit einem Gesicht einen Namen zu geben und liefert eine kleine Verwaltung, in der man zu den Namen weitere Daten (z.B. Email-Adressen) hinterlegen kann. Wenn ein Gesicht nicht automatisch erkannt wird, kann man der Gesichtserkennung auch manuell auf die Sprünge helfen.</p>

<p>Damit aber nicht genug! <strong>Picasa kann den gefundenen Gesichtern auch automatisch Namen zuordnen!</strong></p>

<p>Wenn man erstmal einige Namen vergeben hat, erkennt Picasa ähnliche Gesichter in der Fotosammlung und schlägt die entsprechenden Namen vor. Wow.</p>

<p>Zu jedem Namen legt Picasa ein Album an, das alle Bilder enthält, auf denen die Person zu sehen ist. Ist sich Picasa bei einem neuen Bild einigermaßen sicher (einen Schwellenwert kann man in den Einstellungen festlegen), dann wird das Bild gleich der Person zugeordnet und als Vorschlag markiert. Die Vorschläge kann man dann annehmen oder ablehnen.</p>

<p>Bei größerer Unsicherheit landet ein Gesicht sprechenderweise im &#8220;unbekannte Gesichter&#8221;-Album. Hier werden ähnliche Gesichter gruppiert, was die Massenbearbeitung wesentlich vereinfacht.</p>

<p>Leider ist der Vorgang recht langsam &#8211; meine Bildersammlung wird seit heute Mittag durchgenudelt und ist noch lange nicht fertig.</p>

<p>Auch könnte die Gesichterzuordnung besser sein &#8211; es ist doch recht viel manuelle Namenseingabe oder Bildrumgeschiebe vonnöten. Wenn eine Person direkt in die Kamera blickt, funktioniert die Zuordnung aber sehr zuverlässig.</p>

<p>Dennoch: Es überrascht micht, wie gut es geht.</p>

Technischer Hintergrund: <a href="http://www.techcrunch.com/2006/08/15/google-acquires-biometric-company-neven-vision/">die Fähigkeit der Gesichtserkennung hat sich Google mit dem Kauf der Firma Neven Vision erworben</a>.
<p>
Ein kurze Anleitung gibt&#8217;s unter <a href="http://picasa.google.com/support/bin/answer.py?answer=156272">Name Tags: Add name tags in Picasa</a></p>



]]></content:encoded>
			<wfw:commentRss>http://blog.gungfu.de/archives/2009/11/05/gesichtserkennung-fur-hobbyfotografen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Meeting-Ticker</title>
		<link>http://blog.gungfu.de/archives/2009/10/26/meeting-ticker/</link>
		<comments>http://blog.gungfu.de/archives/2009/10/26/meeting-ticker/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 20:35:28 +0000</pubDate>
		<dc:creator>Steffen</dc:creator>
				<category><![CDATA[Unsortiertes]]></category>
		<category><![CDATA[job]]></category>
		<category><![CDATA[management]]></category>

		<guid isPermaLink="false">http://blog.gungfu.de/?p=1618</guid>
		<description><![CDATA[Schon vor einiger Zeit bei Thomas gesehen &#8211; jetzt hier verlinkt: der Meeting-Ticker, damit man beim Kaffeeklatsch wenigstens ein schlechtes Gewissen hat.]]></description>
			<content:encoded><![CDATA[<p>Schon vor einiger Zeit bei Thomas <a href="http://www.glorf.it/blog/2009/07/31/entspannung/geld-verbrennen">gesehen</a> &#8211; jetzt hier verlinkt: der <a href="http://tobytripp.github.com/meeting-ticker/"><strong>Meeting-Ticker</strong></a>, damit man beim Kaffeeklatsch wenigstens ein schlechtes Gewissen hat.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.gungfu.de/archives/2009/10/26/meeting-ticker/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Clojure ist 2 Jahre alt!</title>
		<link>http://blog.gungfu.de/archives/2009/10/20/clojure-ist-2-jahre-alt/</link>
		<comments>http://blog.gungfu.de/archives/2009/10/20/clojure-ist-2-jahre-alt/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 19:36:43 +0000</pubDate>
		<dc:creator>Steffen</dc:creator>
				<category><![CDATA[Unsortiertes]]></category>
		<category><![CDATA[clojure]]></category>

		<guid isPermaLink="false">http://blog.gungfu.de/?p=1613</guid>
		<description><![CDATA[

Einige Links zum Geburtstag:



	Clojure is two!
	http://clojure.blogspot.com/2009/10/clojure-is-two.html

	Happy 2nd Birthday Clojure

	Clojure@DenkzeitWiki

	The Case for Clojure






]]></description>
			<content:encoded><![CDATA[<img src="http://wiki.gungfu.de/uploads/Main/clojure-icon.gif" alt="clojure logo" class="imgR"/>

<p>Einige Links zum Geburtstag:</p>


<ul>
	<li><a href="http://groups.google.com/group/clojure/browse_thread/thread/851f3ace8b1ec468">Clojure is two!</a></li>
	<li><a href="http://clojure.blogspot.com/2009/10/clojure-is-two.html">http://clojure.blogspot.com/2009/10/clojure-is-two.html</a></li>

	<li><a href="http://briancarper.net/blog/happy-2nd-birthday-clojure">Happy 2nd Birthday Clojure</a></li>

	<li><a href="http://wiki.gungfu.de/Main/Clojure">Clojure@DenkzeitWiki</a></li>

	<li><a href="http://blog.thinkrelevance.com/2009/10/19/the-case-for-clojure">The Case for Clojure</a></li>
</ul>





]]></content:encoded>
			<wfw:commentRss>http://blog.gungfu.de/archives/2009/10/20/clojure-ist-2-jahre-alt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
