<?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>Memento Cache</title>
	<atom:link href="http://blog.tromm.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.tromm.net</link>
	<description>Ein offenes Notizbuch</description>
	<lastBuildDate>Thu, 10 Nov 2011 21:03:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Subversion-Historie um Dateien bereinigen</title>
		<link>http://blog.tromm.net/2011/11/09/subversion-historie-um-dateien-bereinigen/</link>
		<comments>http://blog.tromm.net/2011/11/09/subversion-historie-um-dateien-bereinigen/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 22:28:03 +0000</pubDate>
		<dc:creator>Achim</dc:creator>
				<category><![CDATA[Alle]]></category>

		<guid isPermaLink="false">http://blog.tromm.net/?p=483</guid>
		<description><![CDATA[Es kann schon mal vorkommen, dass man versehentlich eine Datei in Subversion eincheckt, die dort einfach nichts verloren hat &#8211; zum Beispiel eine Konfigurationsdatei mit Zugangsdaten. Hier kommt man mit dem logischem Löschen anhand des Kommandos svn rm file nicht wirklich weiter, da die Datei in der Historie verbleibt und so für andere weiterhin abrufbar [...]]]></description>
			<content:encoded><![CDATA[<p>Es kann schon mal vorkommen, dass man versehentlich eine Datei in Subversion <em>eincheckt</em>, die dort einfach nichts verloren hat &#8211; zum Beispiel eine Konfigurationsdatei mit Zugangsdaten. Hier kommt man mit dem logischem Löschen anhand des Kommandos <code>svn rm file</code> nicht wirklich weiter, da die Datei in der Historie verbleibt und so für andere weiterhin abrufbar ist. In diesem Fall hilft nur das Exportieren, Filtern und neue Aufsetzen des Subversion-Repositories, wie in den folgenden Schritten beschrieben wird.</p>
<p>Im ersten Schritt wird ein Dump vom bestehenden Repository erstellt.</p>
<pre>
svnadmin dump /var/svn > svn-repo-dump
</pre>
<p>Im Anschluss wird der Dump um die gegebenen Dateien, welche nicht mehr in der Historie geführt werden sollen, gefiltert.</p>
<pre>
svndumpfilter exclude path/to/pwd-file \
                      path/to-another/file \
                      < svn-repo-dump \
                      > svn-repo-dump-filtered
</pre>
<p>Dann ist das bestehende Repository zu sichern und ein neues unter dem gleichen Pfad anzulegen.</p>
<pre>
mv /var/svn /var/svn.backup
svnadmin create /var/svn
</pre>
<p>Zum Schluss wird dann noch der gefilterte Dump in das neu angelegte Repository eingespielt. Fertig.</p>
<pre>
svnadmin load --force-uuid /var/svn < svn-repo-dump-filtered
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.tromm.net/2011/11/09/subversion-historie-um-dateien-bereinigen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rekursive Suche nach Klassen in Java Archiven</title>
		<link>http://blog.tromm.net/2011/08/25/rekursive-suche-nach-klassen-in-java-archiven/</link>
		<comments>http://blog.tromm.net/2011/08/25/rekursive-suche-nach-klassen-in-java-archiven/#comments</comments>
		<pubDate>Thu, 25 Aug 2011 21:58:27 +0000</pubDate>
		<dc:creator>Achim</dc:creator>
				<category><![CDATA[Alle]]></category>

		<guid isPermaLink="false">http://blog.tromm.net/?p=464</guid>
		<description><![CDATA[In welchem Java Archiv war noch einmal die Klasse X? Ist die Klasse Y vielleicht noch in einem anderen JAR vorhanden? Hier kann eine rekursive Suche im Dateisystem helfen indem als kleines Hilfswerkzeug die folgende Shell-Funktion in ~/.bashrc eingefügt wird. Das folgende Beispiel ruft search_jars auf der Konsole im aktuellen Verzeichnis auf und findet sämtliche [...]]]></description>
			<content:encoded><![CDATA[<p>
In welchem Java Archiv war noch einmal die Klasse X? Ist die Klasse Y vielleicht noch in einem anderen JAR vorhanden? Hier kann eine rekursive Suche im Dateisystem helfen indem als kleines Hilfswerkzeug die folgende Shell-Funktion in <code>~/.bashrc</code> eingefügt wird.
</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">Rekursive Suche von Klassennamen in JARs</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.tromm.net/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.tromm.net/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.tromm.net/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="bash" style="font-family:monospace;">search_jars<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span class="re2">search_dir</span>=$1
    <span class="re2">search_term</span>=$2
    <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re5">-z</span> <span class="st0">&quot;<span class="es2">$search_term</span>&quot;</span> <span class="re5">-o</span> <span class="re5">-z</span> <span class="st0">&quot;<span class="es2">$search_dir</span>&quot;</span> <span class="br0">&#93;</span>;
    <span class="kw1">then</span>
        <span class="kw3">echo</span> <span class="st0">&quot;usage: search_jars [DIRECTORY] [SEARCH_TERM]&quot;</span>
        <span class="kw3">return</span> 1
    <span class="kw1">fi</span>
    <span class="kw3">echo</span> <span class="st0">&quot;Searching JARs which contain classes matching the search term '<span class="es2">$search_term</span>' in directory '<span class="es2">$search_dir</span>'...&quot;</span>
    <span class="kw2">find</span> <span class="re1">$search_dir</span> <span class="re5">-name</span> <span class="st0">&quot;*.jar&quot;</span> <span class="re5">-type</span> f <span class="re5">-exec</span> <span class="kw2">bash</span> <span class="re5">-c</span> <span class="st_h">'jar tvf &quot;$1&quot; | grep &quot;$2&quot;; if [ $? == 0 ]; then echo &quot;Found in JAR $1&quot;; fi'</span> <span class="br0">&#123;</span><span class="br0">&#125;</span> <span class="br0">&#123;</span><span class="br0">&#125;</span> <span class="re1">$search_term</span> \;
<span class="br0">&#125;</span></pre></div></div>
<p>Das folgende Beispiel ruft <code>search_jars</code> auf der Konsole im aktuellen Verzeichnis auf und findet sämtliche Java Archive, die einen Klassennamen enthalten, welcher mit <code>Locator.class</code> endet.</p>
<pre>
>search_jars . Locator.class
Searching JARs which contain classes matching the search term 'Locator.class' in directory '.'...
  1613 Tue Aug 01 18:46:22 CEST 2011 com/sun/xml/bind/validator/DOMLocator.class
   292 Tue Aug 01 18:46:22 CEST 2011 com/sun/xml/bind/validator/Locator.class
  1024 Tue Aug 01 18:46:22 CEST 2011 com/sun/xml/bind/validator/SAXLocator.class
Found in JAR ./jaxb1-impl.jar
   336 Thu Mar 23 12:38:12 CET 2011 javax/xml/bind/ValidationEventLocator.class
Found in JAR ./jaxb-api.jar
  1608 Tue Aug 01 18:46:46 CEST 2011 com/sun/tools/xjc/reader/dtd/bindinfo/DOM4JLocator.class
  1568 Mon Mar 28 12:21:54 CEST 2011 1.0/com/sun/tools/xjc/reader/dtd/bindinfo/DOM4JLocator.class
Found in JAR ./jaxb-xjc.jar
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.tromm.net/2011/08/25/rekursive-suche-nach-klassen-in-java-archiven/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SSH Login ohne Kennwort in 3 Schritten</title>
		<link>http://blog.tromm.net/2010/11/27/ssh-login-ohne-kennwort-in-3-schritten/</link>
		<comments>http://blog.tromm.net/2010/11/27/ssh-login-ohne-kennwort-in-3-schritten/#comments</comments>
		<pubDate>Sat, 27 Nov 2010 19:54:52 +0000</pubDate>
		<dc:creator>Achim</dc:creator>
				<category><![CDATA[Alle]]></category>

		<guid isPermaLink="false">http://blog.tromm.net/?p=440</guid>
		<description><![CDATA[1. Generierung des Schlüsselpaares you@localhost:~$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/you/.ssh/id_rsa): Created directory '/home/you/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/you/.ssh/id_rsa. Your public key has been saved in /home/you/.ssh/id_rsa.pub. The key fingerprint is: 27:e7:1f:0c:99:7d:3b:86:cb:39:91:55:5b:0d:e5:20 [...]]]></description>
			<content:encoded><![CDATA[<p>1. Generierung des Schlüsselpaares</p>
<pre>
you@localhost:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/you/.ssh/id_rsa):
Created directory '/home/you/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/you/.ssh/id_rsa.
Your public key has been saved in /home/you/.ssh/id_rsa.pub.
The key fingerprint is:
27:e7:1f:0c:99:7d:3b:86:cb:39:91:55:5b:0d:e5:20 you@localhost
The key's randomart image is:
+--[ RSA 2048]----+
|            E ooo|
|             . o+|
|               .+|
|           +  .. |
|        S * .o.  |
|         = ooo . |
|          . +.+  |
|           o.= . |
|            =.   |
+-----------------+
</pre>
<p>2. Erzeugung von ~/.ssh auf <em>Remote Host</em> (optional)</p>
<pre>
you@localhost:~$ ssh remote_user@remote.host 'mkdir -p .ssh'
remote_user@remote.host's password:
</pre>
<p>3. Öffentlichen Schlüssel publizieren</p>
<pre>
you@localhost:~$ cat ~/.ssh/id_rsa.pub | ssh remote_user@remote.host 'cat >> .ssh/authorized_keys'
remote_user@remote.host's password:
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.tromm.net/2010/11/27/ssh-login-ohne-kennwort-in-3-schritten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title></title>
		<link>http://blog.tromm.net/2010/09/30/424/</link>
		<comments>http://blog.tromm.net/2010/09/30/424/#comments</comments>
		<pubDate>Wed, 29 Sep 2010 22:04:40 +0000</pubDate>
		<dc:creator>Achim</dc:creator>
				<category><![CDATA[Alle]]></category>

		<guid isPermaLink="false">http://blog.tromm.net/?p=424</guid>
		<description><![CDATA[Mir gefällt an Relax NG, dass es wesentlich lesbarer ist als das schwergewichtigere W3C Schema XML: Wenn man jedoch auf W3C Schema XML angewiesen ist, dann kann mit dem Kommandozeilen-Tool Trang ein Relax NG Schema in ein W3C XML Schema umgewandelt werden. Das generierte W3C Schema sieht dann, wie folgt, aus. Und um zu zeigen, [...]]]></description>
			<content:encoded><![CDATA[<p>Mir gefällt an <a href="http://www.relaxng.org/">Relax NG</a>, dass es wesentlich lesbarer ist als das<br />
schwergewichtigere W3C Schema XML:</p>
<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">library.rnc</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.tromm.net/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.tromm.net/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.tromm.net/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="pascal" style="font-family:monospace;"><span class="kw1">default</span> namespace <span class="sy0">=</span> <span class="st0">&quot;http://meingold.de/schema/any/library&quot;</span>
start <span class="sy0">=</span> element <span class="kw1">library</span> <span class="coMULTI">{
   element book {
      element title { xsd:string }</span><span class="sy0">,</span>
      element author <span class="coMULTI">{ xsd:string }</span><span class="sy0">,</span>
      element isbn <span class="coMULTI">{ xsd:string { pattern='[0-9]{3}</span><span class="sy0">-</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="sy0">-</span><span class="nu0">9</span><span class="br0">&#93;</span><span class="coMULTI">{10}</span><span class="st_h">' } },
      element quantity { xsd:positiveInteger  }
   }*
}</span></pre></div></div>
<p>Wenn man jedoch auf W3C Schema XML angewiesen ist, dann kann mit dem Kommandozeilen-Tool <a href="http://www.thaiopensource.com/relaxng/trang.html">Trang</a> ein Relax NG Schema in ein W3C XML Schema umgewandelt werden.</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">RNC -&gt; XSD</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.tromm.net/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.tromm.net/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.tromm.net/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="pascal" style="font-family:monospace;">trang <span class="kw1">library</span>.<span class="me1">rnc</span> <span class="kw1">library</span>.<span class="me1">xsd</span></pre></div></div>
<p>Das generierte W3C Schema sieht dann, wie folgt, aus.</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">library.xsd</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.tromm.net/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.tromm.net/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.tromm.net/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="pascal" style="font-family:monospace;">&lt;?xml version<span class="sy0">=</span><span class="st0">&quot;1.0&quot;</span> encoding<span class="sy0">=</span><span class="st0">&quot;UTF-8&quot;</span>?&gt;
&lt;xs<span class="sy0">:</span>schema xmlns<span class="sy0">:</span>xs<span class="sy0">=</span><span class="st0">&quot;http://www.w3.org/2001/XMLSchema&quot;</span> elementFormDefault<span class="sy0">=</span><span class="st0">&quot;qualified&quot;</span> targetNamespace<span class="sy0">=</span><span class="st0">&quot;http://meingold.de/schema/any/library&quot;</span> xmlns<span class="sy0">:</span><span class="kw1">library</span><span class="sy0">=</span><span class="st0">&quot;http://meingold.de/schema/any/library&quot;</span>&gt;
  &lt;xs<span class="sy0">:</span>element <span class="kw1">name</span><span class="sy0">=</span><span class="st0">&quot;library&quot;</span>&gt;
    &lt;xs<span class="sy0">:</span>complexType&gt;
      &lt;xs<span class="sy0">:</span>sequence&gt;
        &lt;xs<span class="sy0">:</span>element minOccurs<span class="sy0">=</span><span class="st0">&quot;0&quot;</span> maxOccurs<span class="sy0">=</span><span class="st0">&quot;unbounded&quot;</span> ref<span class="sy0">=</span><span class="st0">&quot;library:book&quot;</span><span class="sy0">/</span>&gt;
      &lt;<span class="sy0">/</span>xs<span class="sy0">:</span>sequence&gt;
    &lt;<span class="sy0">/</span>xs<span class="sy0">:</span>complexType&gt;
  &lt;<span class="sy0">/</span>xs<span class="sy0">:</span>element&gt;
  &lt;xs<span class="sy0">:</span>element <span class="kw1">name</span><span class="sy0">=</span><span class="st0">&quot;book&quot;</span>&gt;
    &lt;xs<span class="sy0">:</span>complexType&gt;
      &lt;xs<span class="sy0">:</span>sequence&gt;
        &lt;xs<span class="sy0">:</span>element ref<span class="sy0">=</span><span class="st0">&quot;library:title&quot;</span><span class="sy0">/</span>&gt;
        &lt;xs<span class="sy0">:</span>element ref<span class="sy0">=</span><span class="st0">&quot;library:author&quot;</span><span class="sy0">/</span>&gt;
        &lt;xs<span class="sy0">:</span>element ref<span class="sy0">=</span><span class="st0">&quot;library:isbn&quot;</span><span class="sy0">/</span>&gt;
        &lt;xs<span class="sy0">:</span>element ref<span class="sy0">=</span><span class="st0">&quot;library:quantity&quot;</span><span class="sy0">/</span>&gt;
      &lt;<span class="sy0">/</span>xs<span class="sy0">:</span>sequence&gt;
    &lt;<span class="sy0">/</span>xs<span class="sy0">:</span>complexType&gt;
  &lt;<span class="sy0">/</span>xs<span class="sy0">:</span>element&gt;
  &lt;xs<span class="sy0">:</span>element <span class="kw1">name</span><span class="sy0">=</span><span class="st0">&quot;title&quot;</span> <span class="kw1">type</span><span class="sy0">=</span><span class="st0">&quot;xs:string&quot;</span><span class="sy0">/</span>&gt;
  &lt;xs<span class="sy0">:</span>element <span class="kw1">name</span><span class="sy0">=</span><span class="st0">&quot;author&quot;</span> <span class="kw1">type</span><span class="sy0">=</span><span class="st0">&quot;xs:string&quot;</span><span class="sy0">/</span>&gt;
  &lt;xs<span class="sy0">:</span>element <span class="kw1">name</span><span class="sy0">=</span><span class="st0">&quot;isbn&quot;</span>&gt;
    &lt;xs<span class="sy0">:</span>simpleType&gt;
      &lt;xs<span class="sy0">:</span>restriction base<span class="sy0">=</span><span class="st0">&quot;xs:string&quot;</span>&gt;
        &lt;xs<span class="sy0">:</span>pattern value<span class="sy0">=</span><span class="st0">&quot;[0-9]{3}-[0-9]{10}&quot;</span><span class="sy0">/</span>&gt;
      &lt;<span class="sy0">/</span>xs<span class="sy0">:</span>restriction&gt;
    &lt;<span class="sy0">/</span>xs<span class="sy0">:</span>simpleType&gt;
  &lt;<span class="sy0">/</span>xs<span class="sy0">:</span>element&gt;
  &lt;xs<span class="sy0">:</span>element <span class="kw1">name</span><span class="sy0">=</span><span class="st0">&quot;quantity&quot;</span> <span class="kw1">type</span><span class="sy0">=</span><span class="st0">&quot;xs:positiveInteger&quot;</span><span class="sy0">/</span>&gt;
&lt;<span class="sy0">/</span>xs<span class="sy0">:</span>schema&gt;</pre></div></div>
<p>Und um zu zeigen, dass das generierte Schema funktioniert, kann gegen das folgende XML im nächsten Schritt validiert werden:</p>
<div id="wpshdo_5" class="wp-synhighlighter-outer"><div id="wpshdt_5" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_5"></a><a id="wpshat_5" class="wp-synhighlighter-title" href="#codesyntax_5"  onClick="javascript:wpsh_toggleBlock(5)" title="Click to show/hide code block">library.xml</a></td><td align="right"><a href="#codesyntax_5" onClick="javascript:wpsh_code(5)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_5" onClick="javascript:wpsh_print(5)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_5" class="wp-synhighlighter-inner" style="display: block;"><pre class="pascal" style="font-family:monospace;">&lt;?xml version<span class="sy0">=</span><span class="st0">&quot;1.0&quot;</span> encoding<span class="sy0">=</span><span class="st0">&quot;UTF-8&quot;</span>?&gt;
&lt;library xmlns<span class="sy0">=</span><span class="st0">&quot;http://meingold.de/schema/any/library&quot;</span>&gt;
  &lt;book&gt;
    &lt;title&gt;Do Androids Dream <span class="kw1">of</span> Electric Sheep?&lt;<span class="sy0">/</span>title&gt;
    &lt;author&gt;Philip K. <span class="me1">Dick</span>&lt;<span class="sy0">/</span>author&gt;
    &lt;isbn&gt;978<span class="sy0">-</span>0575079939&lt;<span class="sy0">/</span>isbn&gt;
    &lt;quantity&gt;8&lt;<span class="sy0">/</span>quantity&gt;
  &lt;<span class="sy0">/</span>book&gt;
  &lt;book&gt;
    &lt;title&gt;Brave <span class="kw3">New</span> World&lt;<span class="sy0">/</span>title&gt;
    &lt;author&gt;Aldous Huxley&lt;<span class="sy0">/</span>author&gt;
    &lt;isbn&gt;978<span class="sy0">-</span>0099477464&lt;<span class="sy0">/</span>isbn&gt;
    &lt;quantity&gt;5&lt;<span class="sy0">/</span>quantity&gt;
  &lt;<span class="sy0">/</span>book&gt;
  &lt;book&gt;
    &lt;title&gt;Last Chance <span class="kw1">to</span> See&lt;<span class="sy0">/</span>title&gt;
    &lt;author&gt;Douglas Adams&lt;<span class="sy0">/</span>author&gt;
    &lt;isbn&gt;<span class="nu0">978</span><span class="sy0">-</span>0099536796&lt;<span class="sy0">/</span>isbn&gt;
    &lt;quantity&gt;<span class="nu0">3</span>&lt;<span class="sy0">/</span>quantity&gt;
  &lt;<span class="sy0">/</span>book&gt;
&lt;<span class="sy0">/</span>library&gt;</pre></div></div>
<p>Mit dem generierte XML Schema und dem Kommandozeilen-Tool xmllint kann das obige XML validiert werden.</p>
<div id="wpshdo_6" class="wp-synhighlighter-outer"><div id="wpshdt_6" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_6"></a><a id="wpshat_6" class="wp-synhighlighter-title" href="#codesyntax_6"  onClick="javascript:wpsh_toggleBlock(6)" title="Click to show/hide code block">Validieren mit xmllint</a></td><td align="right"><a href="#codesyntax_6" onClick="javascript:wpsh_code(6)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_6" onClick="javascript:wpsh_print(6)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_6" class="wp-synhighlighter-inner" style="display: block;"><pre class="pascal" style="font-family:monospace;">xmllint <span class="sy0">--</span>valid <span class="sy0">--</span>schema <span class="kw1">library</span>.<span class="me1">xsd</span> <span class="kw1">library</span>.<span class="me1">xml</span></pre></div></div>
<p>Der umgekehrte Schritt, aus W3C XML Schema ein Relax NG Schema zu generieren, ist meines Wissens nicht möglich, da Relax NG nicht sämtliche Ausdrucksmöglichkeiten abbilden kann, die von XML Schema angeboten werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tromm.net/2010/09/30/424/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Primärschlüssel automatisch inkremetieren</title>
		<link>http://blog.tromm.net/2010/08/29/primarschlussel-inkremetieren/</link>
		<comments>http://blog.tromm.net/2010/08/29/primarschlussel-inkremetieren/#comments</comments>
		<pubDate>Sun, 29 Aug 2010 21:10:30 +0000</pubDate>
		<dc:creator>Achim</dc:creator>
				<category><![CDATA[Alle]]></category>

		<guid isPermaLink="false">http://blog.tromm.net/?p=408</guid>
		<description><![CDATA[Unter Oracle Datenbanken sind für eine Tabelle mit automatisch inkrementiertem Primärschlüssel die Tabelle selbst, eine Sequenz und ein Trigger anzulegen. Bei einer MySQL Datenbank reicht hierzu das Schlüsselwort auto_increment in der Tabellen-Definition aus. Welches der beiden Beispiele lässt sich schneller schreiben bzw. lesen? ;-)]]></description>
			<content:encoded><![CDATA[<p>Unter Oracle Datenbanken sind für eine Tabelle mit automatisch inkrementiertem Primärschlüssel die Tabelle selbst, eine Sequenz und ein Trigger anzulegen. </p>
<div id="wpshdo_7" class="wp-synhighlighter-outer"><div id="wpshdt_7" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_7"></a><a id="wpshat_7" class="wp-synhighlighter-title" href="#codesyntax_7"  onClick="javascript:wpsh_toggleBlock(7)" title="Click to show/hide code block">Beispiel Oracle</a></td><td align="right"><a href="#codesyntax_7" onClick="javascript:wpsh_code(7)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_7" onClick="javascript:wpsh_print(7)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_7" class="wp-synhighlighter-inner" style="display: block;"><pre class="sql" style="font-family:monospace;"><span class="kw1">CREATE</span> <span class="kw1">TABLE</span> foo <span class="br0">&#40;</span>
       my_key number<span class="sy0">,</span>
       bar nchar<span class="br0">&#40;</span>255<span class="br0">&#41;</span><span class="sy0">,</span>
       <span class="kw1">PRIMARY</span> <span class="kw1">KEY</span> <span class="br0">&#40;</span>my_key<span class="br0">&#41;</span><span class="br0">&#41;</span>;
<span class="kw1">CREATE</span> sequence foo_seq
       start <span class="kw1">WITH</span> 1
       increment <span class="kw1">BY</span> 1
       nomaxvalue; 
<span class="kw1">CREATE</span> <span class="kw1">TRIGGER</span> foo_trigger
       before <span class="kw1">INSERT</span> <span class="kw1">ON</span> foo
       <span class="kw1">FOR</span> each row
       begin
         <span class="kw1">SELECT</span> foo_seq<span class="sy0">.</span><span class="kw1">NEXTVAL</span> <span class="kw1">INTO</span> :new<span class="sy0">.</span>my_key <span class="kw1">FROM</span> dual;
       end;
<span class="sy0">/</span></pre></div></div>
<p>Bei einer MySQL Datenbank reicht hierzu das Schlüsselwort <em>auto_increment</em> in der Tabellen-Definition aus. </p>
<div id="wpshdo_8" class="wp-synhighlighter-outer"><div id="wpshdt_8" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_8"></a><a id="wpshat_8" class="wp-synhighlighter-title" href="#codesyntax_8"  onClick="javascript:wpsh_toggleBlock(8)" title="Click to show/hide code block">Beispiel MySQL</a></td><td align="right"><a href="#codesyntax_8" onClick="javascript:wpsh_code(8)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_8" onClick="javascript:wpsh_print(8)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_8" class="wp-synhighlighter-inner" style="display: block;"><pre class="sql" style="font-family:monospace;"><span class="kw1">CREATE</span> <span class="kw1">TABLE</span> foo <span class="br0">&#40;</span>
       my_key int <span class="kw1">AUTO_INCREMENT</span><span class="sy0">,</span>
       bar varchar<span class="br0">&#40;</span>255<span class="br0">&#41;</span><span class="sy0">,</span>
       <span class="kw1">PRIMARY</span> <span class="kw1">KEY</span><span class="br0">&#40;</span>my_key<span class="br0">&#41;</span><span class="br0">&#41;</span>;</pre></div></div>
<p>Welches der beiden Beispiele lässt sich schneller schreiben bzw. lesen? ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tromm.net/2010/08/29/primarschlussel-inkremetieren/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cygwin wieder hinbiegen</title>
		<link>http://blog.tromm.net/2010/08/17/cygwin-wieder-hinbiegen/</link>
		<comments>http://blog.tromm.net/2010/08/17/cygwin-wieder-hinbiegen/#comments</comments>
		<pubDate>Mon, 16 Aug 2010 22:03:48 +0000</pubDate>
		<dc:creator>Achim</dc:creator>
				<category><![CDATA[Alle]]></category>

		<guid isPermaLink="false">http://blog.tromm.net/?p=392</guid>
		<description><![CDATA[Alle Jubeljahre muss ich auf Cygwin beziehungsweise Cygwin/X zurückgreifen, um unter Windows unixoide Arbeiten verrichten zu können. Das entsprechende Setup dazu musste ich heute leider des öfteren erneut anstoßen, da ich aufgrund von Netzwerk- oder Paket-Verfügbarkeitsproblemen verschiedene Server zur Installation verwenden musste (Uni-Bochum, Uni-Dresden, Uni-Esslingen und ein weiterer). Nach der Installation erhielt ich bei der [...]]]></description>
			<content:encoded><![CDATA[<p>Alle Jubeljahre muss ich auf <a title="http://www.cygwin.com/" href="http://" target="_blank">Cygwin</a> beziehungsweise <a href="http://x.cygwin.com/" target="_blank">Cygwin/X</a> zurückgreifen, um unter Windows <em>unixoide</em> Arbeiten verrichten zu können.</p>
<p>Das entsprechende Setup dazu musste ich heute leider des öfteren erneut anstoßen, da ich aufgrund von Netzwerk- oder Paket-Verfügbarkeitsproblemen verschiedene Server zur Installation verwenden musste (Uni-Bochum, Uni-Dresden, Uni-Esslingen und ein weiterer).</p>
<p>Nach der Installation erhielt ich bei der Ausführung einer Shell (innerhalb von Emacs) die folgende Fehlermeldung:</p>
<p><code>vfork: resource temporarily unavailable</code></p>
<p>Derartige Fehlermeldungen (wie auch andere Cygwin-Inkonsistenzen) lassen sich über die folgenden Schritte beheben:</p>
<ol>
<li>Alle Cygwin-Fenster schließen. Des Weiteren über den Task-Manager von Windows sicherstellen, dass keine weiteren Prozesse von Cygwin mehr aktiv sind (z.B. der fensterlose X-Server). Sämtliche Prozesse zu beenden ist unabdingbar, da sich nachfolgende Schritte ansonsten nicht ausführen lassen.</li>
<li>Folgendes Programm starten: <code> c:\cygwin\bin\ash</code></li>
<li>In der gestarteten Shell folgendes Kommando ausführen: <code>/bin/rebaseall</code></li>
<li>Optional: Falls mit den o.g. Schritten der Fehler noch nicht behoben sein sollte, dann das Setup-Programm ausführen und die ausgewählten Pakte erneut via <em>reinstall </em>installieren.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.tromm.net/2010/08/17/cygwin-wieder-hinbiegen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Welches Notebook für Linux?</title>
		<link>http://blog.tromm.net/2010/06/28/welches-notebook-fur-linux/</link>
		<comments>http://blog.tromm.net/2010/06/28/welches-notebook-fur-linux/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 09:09:12 +0000</pubDate>
		<dc:creator>Achim</dc:creator>
				<category><![CDATA[Alle]]></category>

		<guid isPermaLink="false">http://blog.tromm.net/?p=369</guid>
		<description><![CDATA[Welches Notebook ist für Linux am besten geeignet? Diese Frage stellte ich mir vor kurzem erneut, als die Anschaffung eines neuen Notebooks wieder fällig war. Hierzu gibt es zwar im Netz jede Menge Seiten, wie z.B. http://www.linux-laptop.net/ http://www.tuxmobil.org/ was zwar schon sehr hilfreich, doch leider oft nicht immer auf dem aktuellsten Stand ist. Insbesondere wenn [...]]]></description>
			<content:encoded><![CDATA[<p>Welches Notebook ist für Linux am besten geeignet? Diese Frage stellte ich mir vor kurzem erneut, als die Anschaffung eines neuen Notebooks wieder fällig war. Hierzu gibt es zwar im Netz jede Menge Seiten, wie z.B.</p>
<p><a href="http://www.linux-laptop.net/">http://www.linux-laptop.net/</a><br />
<a href="http://www.tuxmobil.org/">http://www.tuxmobil.org/</a></p>
<p>was zwar schon sehr hilfreich, doch leider oft nicht immer auf dem aktuellsten Stand ist. Insbesondere wenn man sich ein modernes Gerät anschaffen möchte. Wenn man sich für einen leichtgewichtiges Netbook umsieht und ein Fan von Ubuntu ist, dann ist natürlich die Ubuntu-Seite allererste Wahl:</p>
<p><a href="https://wiki.ubuntu.com/HardwareSupport/Machines/Netbooks">https://wiki.ubuntu.com/HardwareSupport/Machines/Netbooks</a></p>
<p>Benötigt man mehr Leistung und möchte sich ein Notebook zulegen, so habe ich keine vergleichbar gute Seite für mich ausmachen können. Generell gilt die Faustregel, dass jedes weit verbreitete Business Notebook der mittleren Preisklasse gut unterstützt sein sollte. Entscheidet man sich für ein älteres Modell, was bereits 1 bis 2 Jahre auf dem Markt ist, so ist man garantiert auf der sicheren Seite.</p>
<p>Da ich mir ein neueres Gerät zulegen wollte, konnte ich mich nicht auf derartige Faustregeln einlassen. In mehreren Blog-Artikeln hatte ich jedoch gelesen, dass die ThinkPad-Reihe von Lenovo in der Regel die beste Unterstützung mitbringt &#8211; unter anderem auch in Bezug auf den Festplattenschutz (Motion-Sensor), SW zur Lüftersteuerung, (De-)Aktivierung der Funkgeräte via SW (Stromsparen) und das Einstellen der Akkuladeschwellen.</p>
<p>Aus diesem Grund legte ich mir ein <em>Lenovo ThinkPad Edge 15</em> zu. Doch einer der ersten Meldungen, die ich nach dem Booten von Ubuntu 10.04 erhielt, war leider die folgende:</p>
<p><code>thinkpad_acpi: Not yet supported ThinkPad detected!</code></p>
<p>Obwohl ich nun ein ThinkPad-Modell besitze, werden die ausgereiften Funktionen zum Stromsparen (noch) nicht unterstützt. Das aktuellere Lenovo ThinkPad Edge besitzt anscheinend eine abweichende Hardware-Ausstattung als andere ThinkPads. Also Achtung, ThinkPad ist nicht gleich ThinkPad. Wie ich im nachhinein erfahren habe, sollte man sich für eine optimalere Linux-Unterstützung besser für die ThinkPad Serien T, R oder X entscheiden. Ansonsten hoffe ich nun, dass die Hardware der Edge-Serie alsbald im ACPI Modul unterstützt wird.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tromm.net/2010/06/28/welches-notebook-fur-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unix-Prozesse, völlig losgelöst&#8230;</title>
		<link>http://blog.tromm.net/2010/05/21/unix-prozesse-vollig-losgelost/</link>
		<comments>http://blog.tromm.net/2010/05/21/unix-prozesse-vollig-losgelost/#comments</comments>
		<pubDate>Fri, 21 May 2010 17:59:20 +0000</pubDate>
		<dc:creator>Achim</dc:creator>
				<category><![CDATA[Alle]]></category>

		<guid isPermaLink="false">http://blog.tromm.net/?p=291</guid>
		<description><![CDATA[Es gibt 3 Möglichkeiten einen Unix-Prozess per Kommandozeile von einem Terminal zu entkoppeln, z.B. für lang laufende Jobs, die in einer SSH-Session gestartet werden sollen, so dass das entsprechende Terminal während deren Abarbeitung wieder geschlossen werden kann: nohup immunisiert das auszuführende Kommando gegen hangup Signale und die Ausgabe wird in die Datei nohup.out umgelenkt (anstatt [...]]]></description>
			<content:encoded><![CDATA[<p>Es gibt 3 Möglichkeiten einen Unix-Prozess per Kommandozeile von einem Terminal zu entkoppeln, z.B. für lang laufende Jobs, die in einer SSH-Session gestartet werden sollen, so dass das entsprechende Terminal während deren Abarbeitung wieder geschlossen werden kann:</p>
<p><div id="wpshdo_9" class="wp-synhighlighter-outer"><div id="wpshdt_9" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_9"></a><a id="wpshat_9" class="wp-synhighlighter-title" href="#codesyntax_9"  onClick="javascript:wpsh_toggleBlock(9)" title="Click to show/hide code block">1) nohup</a></td><td align="right"><a href="#codesyntax_9" onClick="javascript:wpsh_code(9)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_9" onClick="javascript:wpsh_print(9)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_9" class="wp-synhighlighter-inner" style="display: block;"><pre class="bash" style="font-family:monospace;"><span class="kw2">nohup</span> <span class="kw2">du</span> <span class="re5">-skh</span> <span class="sy0">/</span>home<span class="sy0">/*</span> <span class="sy0">&amp;</span>
<span class="co0">#nohup: ignoring input and appending output to `nohup.out'</span></pre></div></div><br />
<strong><em>nohup</em></strong> immunisiert das auszuführende Kommando gegen <em>hangup</em> Signale und die Ausgabe wird in die Datei <em>nohup.out</em> umgelenkt (anstatt in die Standardausgabe).</p>
<p><div id="wpshdo_10" class="wp-synhighlighter-outer"><div id="wpshdt_10" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_10"></a><a id="wpshat_10" class="wp-synhighlighter-title" href="#codesyntax_10"  onClick="javascript:wpsh_toggleBlock(10)" title="Click to show/hide code block">2) screen</a></td><td align="right"><a href="#codesyntax_10" onClick="javascript:wpsh_code(10)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_10" onClick="javascript:wpsh_print(10)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_10" class="wp-synhighlighter-inner" style="display: block;"><pre class="bash" style="font-family:monospace;"><span class="kw2">screen</span>
<span class="kw2">du</span> <span class="re5">-skh</span> <span class="sy0">/</span>home<span class="sy0">/*</span>
<span class="co0"># Das virtuelle Terminal wird mit &lt;Ctrl&gt;-A &lt;Ctrl&gt;-D verlassen.</span>
<span class="co0">#</span>
<span class="co0"># Und mit Resume kann später wieder zurückgekehrt werden:</span>
<span class="kw2">screen</span> <span class="re5">-r</span></pre></div></div><br />
<strong><em>screen</em></strong> ist ein virtuelles Terminal, in welches man sich nach belieben ein- und ausklinken kann.</p>
<p><div id="wpshdo_11" class="wp-synhighlighter-outer"><div id="wpshdt_11" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_11"></a><a id="wpshat_11" class="wp-synhighlighter-title" href="#codesyntax_11"  onClick="javascript:wpsh_toggleBlock(11)" title="Click to show/hide code block">3) disown</a></td><td align="right"><a href="#codesyntax_11" onClick="javascript:wpsh_code(11)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_11" onClick="javascript:wpsh_print(11)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.tromm.net/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_11" class="wp-synhighlighter-inner" style="display: block;"><pre class="bash" style="font-family:monospace;"><span class="kw2">du</span> <span class="re5">-skh</span> <span class="sy0">/</span>home<span class="sy0">/*</span> <span class="sy0">&gt;</span> du.log
<span class="co0"># Prozess mit Tastenkombination &lt;Ctrl&gt;-Z unterbrechen</span>
<span class="kw3">bg</span>
<span class="kw3">jobs</span>
<span class="co0">#[1]+  Running                  du -skh /home/* &gt; du.log &amp;</span>
<span class="kw3">disown</span> <span class="re5">-h</span> <span class="sy0">%</span>1</pre></div></div><br />
<strong><em>disown</em></strong> informiert die <em>Shell</em> darüber, dass kein <em>hangup</em> Signal an den Prozess mit der geg. Job-ID gesendet werden soll, wenn sie später geschlossen wird. Das ist praktisch, wenn man erst im nachhinein feststellt, dass es sich um einen lang laufenden Job handelt (was man ja bei <em>nohup</em> und <em>screen</em> vorab wissen müßte). Bei <em>disown</em> muss man jedoch beachten, dass die Standardausgabe verloren geht, wenn man diese nicht zuvor umgelenkt hatte. Ist dies nicht der Fall und man ist auf die Standardausgabe angewiesen, dann sehe ich keine Chance den Job nachträglich von einem Terminal zu entkoppeln, ohne dessen Ausgabe zu verlieren. Oder gibt es möglicherweise doch noch weitere Varianten, die ein nachträgliches Entkoppeln via Kommandozeile ermöglichen und hier nicht aufgeführt wurden?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tromm.net/2010/05/21/unix-prozesse-vollig-losgelost/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dokumentieren von Source Code mit Muse</title>
		<link>http://blog.tromm.net/2010/04/12/dokumentieren-von-source-code-mit-muse/</link>
		<comments>http://blog.tromm.net/2010/04/12/dokumentieren-von-source-code-mit-muse/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 21:57:53 +0000</pubDate>
		<dc:creator>Achim</dc:creator>
				<category><![CDATA[Alle]]></category>

		<guid isPermaLink="false">http://blog.tromm.net/?p=205</guid>
		<description><![CDATA[Emacs Muse eignet sich hervorragend zur Erstellung von technischer Dokumentation und auch zum Dokumentieren von Source Code, da es eine einfache Wiki-Syntax bietet und in viele unterschiedliche Formate publizieren kann (HTML, PDF, LaTeX, Info, DocBook und weitere). Der folgende Demo-Artikel über Fibonacci-Folgen enthält ein kurzes JAVA-Programm und wurde von mir als Beispiel einmal in HTML [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mwolson.org/projects/EmacsMuse.html">Emacs Muse</a> eignet sich hervorragend zur Erstellung von technischer Dokumentation und auch zum Dokumentieren von Source Code, da es eine einfache Wiki-Syntax bietet und in viele unterschiedliche Formate publizieren kann (HTML, PDF, LaTeX, Info, DocBook und weitere).</p>
<p>Der folgende Demo-Artikel über Fibonacci-Folgen enthält ein kurzes JAVA-Programm und wurde von mir als Beispiel einmal in  <a href='http://blog.tromm.net/wp-content/uploads/2010/04/fibonacci.html'>HTML</a> und <a href='http://blog.tromm.net/wp-content/uploads/2010/04/fibonacci.pdf'>PDF</a> publiziert.</p>
<p>Unten steht der ursprünglichen Wiki-Text, aus welchem die jeweilige HTML und PDF Dokumentation generiert wurde. Später zeige ich dann, wie dieser Wiki-Text noch drastisch verkürzt werden kann, indem man beim Publizieren direkt den originalen Source Code verwendet, anstatt diesen zu kopieren.</p>
<p>Doch hier ist erst einmal der ungekürzte (und daher suboptimale) Wiki-Text:</p>
<pre>
#title Die Fibonacci-Folge 

Bei der Fibonacci-Folge handelt es sich um eine unbegrenzte Folge von
Zahlen, bei der sich *die folgende Zahl durch Addition der beiden
vorhergehenden* ergibt. **Beispiel: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,...**

Da sich die Fibonacci-Folge selbst durch ein rekursives Bildungsgesetz
definiert, kann diese idealerweise anhand
[[http://de.wikipedia.org/wiki/Rekursive_Programmierung][rekursiver Programmierung]]
umgesetzt werden.

** Source Code

&lt;src lang="jde"&gt;

// File: Fibonacci.java

public class Fibonacci {

    static int fibonacci(int n) {
        if ( (n==1) || (n==2) ) {
            return 1;
        } else {
            return fibonacci(n-1)+fibonacci(n-2);
        }
    }

    public static void main (String [] args) {
        int max = (args.length>0 ? Integer.parseInt(args[0]) : 10);
        for (int i = 1; i<=max; i++) {
            System.out.println(fibonacci(i));
        }
    }
}
&lt;/src&gt;

** Übersetzung, Aufruf &#038; Ausgabe

&lt;example&gt;
$ javac Fibonacci.java
$ java Fibonacci
1
1
2
3
5
8
13
21
34
55
&lt;/example&gt;
</pre>
<h3>Und nun der kürzere Wiki-Text</h3>
<p>Es ist ja sinnvoll die Dokumentation direkt neben dem Source-Code in einer Versionkontrolle nachzuhalten. Denn zum einen kann so konkurrierend an der Dokumentation gearbeitet werden und zum anderen können Änderungen zwischen Versionen einfacher nachvollzogen werden, bzw. stehen Code und Dokumentation immer als eine Einheit zur Verfügung, anstatt auf unterschiedlichen Medien verteilt zu sein.</p>
<p>Wir machen uns diese Tatsache, dass Source-Code und Dokumentation in einem gemeinsamen Projekt-Verzeichnis abgelegt sind, zu Nutze. Via dem &lt;command/&gt; Element wird mit dem Shell-Kommando <em>"cat"</em> der tatsächliche Source-Code der Datei <em>Fibonacci.java</em> dynamisch in den Wiki-Text eingefügt:</p>
<pre>
...
** Source Code

&lt;command markup="src" lang="jde"&gt;
cat Fibonacci.java
&lt;/command&gt;
...
</pre>
<p>Damit ist die Dokumentation in Bezug auf den Source Code immer auf dem aktuellsten Stand gehalten. So besteht keine Gefahr mehr, dass Beispiel-Code und tatsächlich ausführbarer Code auseinander driften, wenn z.B. Fehler korrigiert werden oder Schnittellen einer API verändert werden.</p>
<p>In dem darauf folgenden Schritt "Übersetzung, Ausführung und Ausgabe" werden nun sogar die Schritte zur Übersetzung, Ausführung und auch der Programm-Ausgabe mit den tatsächlich ausgeführten Kommandos selbst dokumentiert:</p>
<pre>
** Übersetzung, Aufruf &#038; Ausgabe

&lt;command markup="example"&gt;
set -x
javac Fibonacci.java
java Fibonacci
&lt;/command&gt;
</pre>
<p>Zuerst wird das Shell-Kommando <em>"set -x"</em> ausgeführt. Dies führt zu einem Echo der jeweils nachfolgend ausgeführten Shell-Kommandos in der Standardausgabe. D.h. alle folgenden Shell-Kommandos werden mit ihrem eigenen Aufruf und ihrer Ausgabe selbst in den Wiki-Text mit einfließen.</p>
<p>Der folgende, komplette Wiki-Text generiert daher die gleiche Dokumentation, ist jedoch erheblich kürzer und ist durch die Nutzung des echten Source Codes immer auf dem aktuellsten Stand: </p>
<pre>
#title Die Fibonacci-Folge 

Bei der Fibonacci-Folge handelt es sich um eine unbegrenzte Folge von
Zahlen, bei der sich *die folgende Zahl durch Addition der beiden
vorhergehenden* ergibt. **Beispiel: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,...**

Da sich die Fibonacci-Folge selbst durch ein rekursives Bildungsgesetz
definiert, kann diese idealerweise anhand
[[http://de.wikipedia.org/wiki/Rekursive_Programmierung][rekursiver Programmierung]]
umgesetzt werden.

** Source Code

&lt;command markup="src" lang="jde"&gt;
cat Fibonacci.java
&lt;/command&gt;

** Übersetzung, Aufruf &#038; Ausgabe

&lt;command markup="example"&gt;
set -x
javac Fibonacci.java
java Fibonacci
&lt;/command&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.tromm.net/2010/04/12/dokumentieren-von-source-code-mit-muse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tastaturbelegung MAC/VMware/Ubuntu</title>
		<link>http://blog.tromm.net/2010/04/03/tastenbelegung-ubuntuvmware-host-osx/</link>
		<comments>http://blog.tromm.net/2010/04/03/tastenbelegung-ubuntuvmware-host-osx/#comments</comments>
		<pubDate>Sat, 03 Apr 2010 16:45:06 +0000</pubDate>
		<dc:creator>Achim</dc:creator>
				<category><![CDATA[Alle]]></category>

		<guid isPermaLink="false">http://blog.tromm.net/?p=161</guid>
		<description><![CDATA[Das MacBook Pro besitzt ja unter anderem eine recht schicke Hardware, doch was die Tastatur angeht, habe ich es immer als störend empfunden, dass Apple diese recht eigenwillig belegt hat. Insbesondere wenn ich Ubuntu unter VMware Fusion nutze. Denn die Reihenfolge der Tasten CTRL, ALT und CMD beißt sich mit der Reihenfolge der Tasten CTRL, [...]]]></description>
			<content:encoded><![CDATA[<p>Das MacBook Pro besitzt ja unter anderem eine recht schicke Hardware, doch was die Tastatur angeht, habe ich es immer als störend empfunden, dass Apple diese recht eigenwillig belegt hat. Insbesondere wenn ich Ubuntu unter VMware Fusion nutze. Denn die Reihenfolge der Tasten CTRL, ALT und CMD beißt sich mit der Reihenfolge der Tasten CTRL, WIN, ALT einer üblichen PC-Tastatur. Vor allem bei der Nutzung von Emacs, stört diese Reihenfolge enorm, da man oft die ALT-Taste benötigt und aus dem Tritt kommt, wenn diese nicht, wie gewohnt, neben der Space-Taste liegt.</p>
<p>Mit der folgenden Konfiguration werden unter anderem diese Apple-Tasten unter VMware Fusion so um belegt, dass sie der Anordnung nach einer PC-Tastatur entsprechen: <em>Apple-ALT</em> wird zu <em>PC-WIN</em> und <em>Apple-CMD</em> wird zu <em>PC-ALT </em>um belegt. Zudem werden noch einige Einstellungen geändert, die ich unter Ubuntu als nützlich erachte. Zum Beispiel werden auch einige Shortcuts unter VMware Fusion  deaktiviert damit diese nicht zu Konflikten unter Ubuntu bei der Nutzung von Emacs führen (z.B. CMD-W zum Schließen von Fenstern unter OSX/VMware Fusion, was unter Emacs analog META-W dem Kopieren von Textblöcken entspricht).</p>
<h3>VMware Fusion Einstellungen</h3>
<p><a href="http://blog.tromm.net/wp-content/uploads/2010/04/key-mappings.png"><img class="aligncenter size-full wp-image-162" title="key-mappings" src="http://blog.tromm.net/wp-content/uploads/2010/04/key-mappings.png" alt="" width="652" height="672" /></a></p>
<p><a href="http://blog.tromm.net/wp-content/uploads/2010/04/mouse-shortcuts.png"><img class="aligncenter size-full wp-image-164" title="mouse-shortcuts" src="http://blog.tromm.net/wp-content/uploads/2010/04/mouse-shortcuts.png" alt="" width="652" height="672" /></a></p>
<p><a href="http://blog.tromm.net/wp-content/uploads/2010/04/mac-os-shortcuts.png"><img class="aligncenter size-full wp-image-163" title="mac-os-shortcuts" src="http://blog.tromm.net/wp-content/uploads/2010/04/mac-os-shortcuts.png" alt="" width="652" height="672" /></a></p>
<p><a href="http://blog.tromm.net/wp-content/uploads/2010/04/fusion-shortcuts.png"><img class="aligncenter size-full wp-image-165" title="fusion-shortcuts" src="http://blog.tromm.net/wp-content/uploads/2010/04/fusion-shortcuts.png" alt="" width="652" height="672" /></a></p>
<h3>Ubuntu Einstellungen</h3>
<p>Die folgenden Einstellungen wurden für Ubuntu 9.10 &#8211; Karmic Koala &#8211; vorgenommen. Bei der Auswahl des Tastaturmodells war es bei meinen Versuchen wichtig das <em>Macintosh</em>-Layout zu verwenden und nicht das spezielle Layout für MacBook Pro!</p>
<p><a href="http://blog.tromm.net/wp-content/uploads/2010/04/tastatureinstellungen.jpg"><img class="aligncenter size-full wp-image-166" title="tastatureinstellungen" src="http://blog.tromm.net/wp-content/uploads/2010/04/tastatureinstellungen.jpg" alt="" width="625" height="521" /></a></p>
<p>Im Folgenden wird die Meta-Funktion für die ALT-Taste festgelegt und das anschließende Vertauschen von CMD und ALT auf dem Apple-Keyboard.</p>
<p><a href="http://blog.tromm.net/wp-content/uploads/2010/04/tastaturbelegungseinstellung.jpg"><img class="aligncenter size-full wp-image-167" title="tastaturbelegungseinstellung" src="http://blog.tromm.net/wp-content/uploads/2010/04/tastaturbelegungseinstellung.jpg" alt="" width="560" height="656" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tromm.net/2010/04/03/tastenbelegung-ubuntuvmware-host-osx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

