<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:series="http://unfoldingneurons.com/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Technik, Gothic und Anderes</title>
	
	<link>http://blog.oncode.info</link>
	<description>Technik ist Spiel, Gothic ist ernst und Zeit hat man zuviel</description>
	<lastBuildDate>Tue, 31 Aug 2010 13:37:00 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.oncode.info/TechnikGothicUndAnderes" /><feedburner:info uri="technikgothicundanderes" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>47.485073</geo:lat><geo:long>8.333634</geo:long><item>
		<title>Ein Programmierwettbewerb vom Linux Magazin</title>
		<link>http://feeds.oncode.info/~r/TechnikGothicUndAnderes/~3/1PfqXdJlujQ/</link>
		<comments>http://blog.oncode.info/2010/08/10/ein-programmierwettbewerb-vom-linux-magazin/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 16:53:11 +0000</pubDate>
		<dc:creator>skaldrom</dc:creator>
				<category><![CDATA[Applikationen]]></category>
		<category><![CDATA[Theorie und Schnipsel]]></category>
		<category><![CDATA[Game]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Spiel]]></category>
		<category><![CDATA[Wettbewerb]]></category>

		<guid isPermaLink="false">http://blog.oncode.info/?p=1503</guid>
		<description><![CDATA[Ein PHP-Ger&#252;st f&#252;r den Linux-Magazin Programmierwettbewerb.]]></description>
			<content:encoded><![CDATA[<p><strong>Nachtrag vom 19.08.2010:</strong> Ich wurde Opfer von &#8220;mod_security&#8221;, damit konnte ich keine Artikel mehr editieren, weil ich immer ein &#8220;404 Not Found&#8221; pr&#228;sentiert bekommen habe. DAS ist doch ein Heuler&#8230;</p>
<p>Nun, ich habe eine neue Version des Clients unten hingeh&#228;ng: Stabiler, so dass er auch eine ganze Nacht &#252;ber viele Stunden und Verbindungsprobleme hinweg weiterspielt.</p>
<p><img src="http://blog.oncode.info/wp-content/uploads/2010/08/dice.png" alt="Wuerfel" title="dice" width="119" height="148" class="lead" align="left" />Oh nein. Frisch erk&#228;ltet wollte ich mich auf die Arbeiten st&#252;rzen, die eigentlich schon letztes Jahr h&#228;tten erledigt sein m&#252;ssen, und nun das: Das <a href="http://www.linux-magazin.de/">Linux-Magazin</a> veranstaltet einen Wettbewerb f&#252;r Programmierer! Die Details sind in der Ausgabe 09/10 (auch <a href="http://www.linux-magazin.de/Heft-Abo/Ausgaben/2010/09/Reiz-des-Mitmachens">online</a>) beschrieben und es gibt eine <a href="http://wettbewerb.linux-magazin.de/index.php/Hauptseite">Wettbewerbs-Seite</a> dazu.</p>
<p>Grunds&#228;tzlich geht es darum, dass zwei Programme gegeneinander w&#252;rfeln. Wer zuerst 50 Punkte oder mehr erreicht, hat gewonnen. Ist man am Zuge, so kann man entweder W&#252;rfeln oder &#8220;Save&#8221;n. Bei einem Wurf werden die Augen zu der eigenen Punktzahl hinzugez&#228;hlt, ausser man w&#252;rfelt eine 6, dann werden alle Punkte seit dem letzten Save wieder abgezogen. Bei einem Save werden die Punkte gespeichert und der Gegner ist am Zuge.</p>
<p>Gespielt wird richtig Harte-M&#228;nner-m&#228;ssig &#252;ber einen TCP-Port mit einem definierten, menschenlesbaren Protokoll.</p>
<p>Die Programmiersprache kann frei gew&#228;hlt werden, insofern sie in Ubuntu 10.04 vorhanden ist und mit einem Makefile gebuildet und gestartet werden kann. Ich hab mich mal wieder f&#252;r PHP (Kommandozeile) entschieden weil das Problem, hmm, &#252;berhaupt nicht zeitkritisch ist (nein, auch diesmal kein <a href="http://en.wikipedia.org/wiki/Monte_Carlo_method">Monte-Carlo</a>) und auch sonst, hmm, und &#252;berhaupt nicht weil ich zu faul war ein Makefile f&#252;r Java zu schreiben oder meine C-Kenntnisse aufzufrischen <img src='http://blog.oncode.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  . </p>
<p>Als Erstes habe ich einen Simulator f&#252;r einen Benchmark implementiert. Als Messgr&#246;sse habe ich die Anzahl &#8220;Transaktionen&#8221; gew&#228;hlt, also wie oft mein Programm dran war mit W&#252;rfeln bis die 50 erreicht wurden. Dabei habe ich ein paar interessante Erkenntnisse gewonnen: So sind zum Beispiel die Resultate sehr unterschiedlich wenn zuf&#228;llig mit Wahrscheinlichkeit 1/4 oder wenn jedes 4. mal gesaved wird. Auch die optimale Wahrscheinlichkeit habe ich so nicht erwartet wie sie gemessen wurde.</p>
<p>Um meine Arbeit etwas zu teilen und um den Einstieg zu erleichtern, publiziere ich hier meine Spielerumgebung. Der geneigte Wettbewerbsteilnehme m&#252;sste nun nur noch:</p>
<ul>
<li>Den Spielernamen &#228;ndern (Konstante NAME),</li>
<li>Die Methode <tt>play</tt> mit Intelligenz f&#252;llen.</li>
</ul>
<p>Zuerst das <tt>Makefile</tt>:<br />
[cc lang="Make"]<br />
PHP = /usr/bin/php</p>
<p>build:<br />
        echo &#8220;PHP muss nit gebuildet werden <img src='http://blog.oncode.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .&#8221;<br />
game: wettbewerb.php<br />
        $(PHP) ./wettbewerb.php<br />
[/cc]</p>
<p>Und hier der Spieler <tt>wettbewerb.php</tt>, bereit getuned zu werden:<br />
[cc lang="php"]<br />
<?php<br />
/**<br />
 * Wettbewerbsgeruest von Skaldrom Y. Sarg (http://blog.oncode.info)<br />
 */</p>
<p>define(&#8220;NAME&#8221;,&#8221;test.spieler&#8221;); // UNBEDINGT AENDERN!!!! Kleinbuchstaben, keine Sonderzeichen<br />
define(&#8220;LOGFILE&#8221;,&#8221;dice.log&#8221;); // Schreibt keines wenn leer (fuer den Wettbewerb)<br />
define(&#8220;SERVER&#8221;, &#8220;wettbewerb.linux-magazin.de&#8221;);<br />
define(&#8220;PORT&#8221;, 3333);</p>
<p>class wettbewerb {</p>
<p>    /**<br />
     * Dies ist die Spielfunktion.<br />
     *<br />
     * Macht was cleveres, aber stehlt mir nicht die Preise!<br />
     *<br />
     *<br />
     * @param $numThrowsThisTransaction int Anzahl W&#252;rfe seit letzter 6 oder letztem Save<br />
     * @param $currentTransactionPoints int Punkte seit letzter 6 oder letztem Save<br />
     * @param $pointsAtLastSave         int Punkte bei letztem Save<br />
     * @param $transactions             int Anzahl gemachter Z&#252;ge<br />
     * @param $numSaves                 int Anzahl Saves<br />
     * @param $enemyPoints              int Punkte des Gegners<br />
     * @param $rollsThisTransaction     Array W&#252;rfe in diesem Durchgang<br />
     *<br />
     * @return String &#8220;roll&#8221; f&#252;r einen Wurf, &#8220;save&#8221; um zu speichern und abzugeben.<br />
     */</p>
<p>    function play($numThrowsThisTransaction, $currentTransactionPoints, $pointsAtLastSave, $transactions, $numSaves, $enemyPoints, $rollsThisTransaction) {<br />
        $this->log(&#8220;[PLAY-RESULT]: ROLL.&#8221;);<br />
        return &#8220;roll&#8221;;<br />
    }</p>
<p>    function log($message) {<br />
        if(LOGFILE) {<br />
            error_log(date(&#8220;r&#8221;).&#8221;: &#8220;.$message.&#8221;\n&#8221;, 3, LOGFILE);<br />
        }<br />
    }</p>
<p>    function secureFGetS() {<br />
        $response=&#8221;";<br />
        if(!$this->socket) {<br />
            do {<br />
                $this->connect();<br />
            } while(!$this->socket);<br />
        }<br />
        $response=fgets($this->socket);<br />
        $info = stream_get_meta_data($this->socket);<br />
        if ($info['timed_out']) {<br />
            $this->log(&#8220;Got a Socket Timeout! (unread:&#8221;.$info['unread_bytes'].&#8221;)&#8221;);<br />
            fclose($this->socket);<br />
            $this->socket=0;<br />
            $response=&#8221;";<br />
            sleep(5);<br />
        }<br />
        return $response;</p>
<p>    }</p>
<p>    function connect() {<br />
        // Kontaktaufnahme<br />
        $this->socket=0;<br />
        while(!$this->socket) {<br />
            $this->log(&#8220;CONNECTING&#8221;);<br />
            $this->socket = @fsockopen(SERVER , PORT, $errno , $errstr , 180);<br />
            if(!$this->socket) {<br />
                $this->log(&#8220;Verbindungsversuch fehlgeschlagen: ($errno) $errstr.&#8221;);<br />
                sleep(5);<br />
            }<br />
        }<br />
        if(function_exists(&#8220;stream_set_timeout&#8221;)) {<br />
            $this->log(&#8220;Set Socket Timeout.&#8221;);<br />
            stream_set_timeout($this->socket, 120); //two Mins<br />
        }<br />
        // Antwort des Servers<br />
        $this->log(&#8220;CONNECTED&#8221;);<br />
    }</p>
<p>    function playARound() {<br />
        $this->log(&#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; NEW GAME &#8220;.SERVER .&#8221;:&#8221;.PORT.&#8221; &#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&#8221;);</p>
<p>        do {<br />
            $this->connect();<br />
        } while(!$this->socket);<br />
        do {<br />
            $response=$this->secureFGetS();<br />
        } while (!$response);<br />
        $resInfo=split(&#8221; &#8220;, $response);<br />
        $serverCommand=strtoupper(trim($resInfo[0]));<br />
        $this->log(&#8220;[SERVER]: &#8220;.trim($response).&#8221; (&#8220;.$serverCommand.&#8221;)&#8221;);<br />
        switch($serverCommand) {<br />
            case &#8220;HELO&#8221;: break; // Alles OK<br />
            case &#8220;DENY&#8221;: fclose($this->socket);<br />
                return;<br />
                break; // Dann halt nicht<br />
            default: fclose($this->socket);<br />
                $this->log(&#8220;[CLIENT]: Exit on Hello because we do not understand [$serverCommand].&#8221;);<br />
                exit(); // DAS verstehen wir nicht!<br />
        }</p>
<p>        // Authentifizierung<br />
        $message=&#8221;AUTH &#8220;.strtolower(NAME);<br />
        $this->log(&#8220;[CLIENT]: &#8220;.$message);<br />
        fputs($this->socket, $message.&#8221;\n&#8221;);</p>
<p>        // Los gehts!<br />
        $currentPlayer=1; // Wer ist am Zug? 0 == wir, 1 == der Andere<br />
        $numThrowsThisTransaction=0;<br />
        $currentTransactionPoints=0;<br />
        $pointsAtLastSave=0;<br />
        $transactions=1;<br />
        $numSaves=0;<br />
        $enemyPoints=0;<br />
        $rollsThisTransaction=array();<br />
        do {<br />
            $response=&#8221;";<br />
            $response=$this->secureFGetS();<br />
            if(!$response) {<br />
                $this->log(&#8220;INGAME TIMEOUT: Forgetting this game.&#8221;);<br />
                return;<br />
            }<br />
            $this->log(&#8220;[SERVER]: &#8220;.trim($response));<br />
            $resInfo=split(&#8221; &#8220;, $response);<br />
            $serverCommand=strtoupper(trim($resInfo[0]));<br />
            switch($serverCommand) {<br />
                case &#8220;THRW&#8221;: // Ein Wurf<br />
                    if($currentPlayer==0) { // Wir sind dran<br />
                        if($resInfo[1]==6) { // Ooops, eine 6 gew&#252;rfelt<br />
                            $currentPlayer=1; // Der Andere ist dran<br />
                            $currentTransactionPoints=0;<br />
                            $numThrowsThisTransaction=0;<br />
                            $transactions++;<br />
                            $rollsThisTransaction=array();<br />
                        } else {<br />
                            $numThrowsThisTransaction++;<br />
                            $currentTransactionPoints+=$resInfo[1];<br />
                            $rollsThisTransaction[]=$resInfo[1];<br />
                        }<br />
                    }<br />
                    break;<br />
                case &#8220;DENY&#8221;: break; // Dann halt nicht<br />
                case &#8220;TURN&#8221;:<br />
                    $currentPlayer=0; // Wir sind dran!<br />
                    $enemyPoints=$resInfo[2];<br />
                    $pointsCurrentOurs=$resInfo[1];<br />
                    $currentTransactionPoints=$pointsCurrentOurs-$pointsAtLastSave;<br />
                    // Here we play!<br />
                    $ret=$this->play($numThrowsThisTransaction, $currentTransactionPoints, $pointsAtLastSave, $transactions, $numSaves, $enemyPoints, $rollsThisTransaction);<br />
                    if(strtolower($ret==&#8221;roll&#8221;)) { // Rollin&#8217; Baby<br />
                        $this->log(&#8220;[CLIENT]: ROLL&#8221;);<br />
                        fputs($this->socket, &#8220;ROLL\n&#8221;);<br />
                    } else { // Save<br />
                        $this->log(&#8220;[CLIENT]: SAVE&#8221;);<br />
                        fputs($this->socket, &#8220;SAVE\n&#8221;);<br />
                        $transactions++;<br />
                        $rollsThisTransaction=array();<br />
                        $numThrowsThisTransaction=0;<br />
                        $numSaves++;<br />
                        $pointsAtLastSave=$pointsCurrentOurs;<br />
                        $currentTransactionPoints=0;<br />
                        $currentPlayer=1;<br />
                    }<br />
                    break;<br />
                case &#8220;DEF&#8221;:<br />
                case &#8220;WIN&#8221;: break;<br />
                default: fclose($this->socket);<br />
                    $this->log(&#8220;[CLIENT]: Exit because we do not understand [$serverCommand].&#8221;);<br />
                    exit(); // DAS verstehen wir nicht!<br />
            }<br />
        } while (!in_array($serverCommand, array(&#8220;DENY&#8221;, &#8220;DEF&#8221;, &#8220;WIN&#8221;)));<br />
        // Feddich Lustig<br />
        fclose($this->socket);<br />
    }</p>
<p>}</p>
<p>$w=new wettbewerb();<br />
for($i=0;$i<1000;$i++) {<br />
    echo &#8220;*** $i ***\n&#8221;;<br />
    $w->playARound();<br />
}<br />
?><br />
[/cc]</p>

<p><a href="http://feedads.g.doubleclick.net/~a/_oWEM2g4KmPEddOvY8kNmfzEUGI/0/da"><img src="http://feedads.g.doubleclick.net/~a/_oWEM2g4KmPEddOvY8kNmfzEUGI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/_oWEM2g4KmPEddOvY8kNmfzEUGI/1/da"><img src="http://feedads.g.doubleclick.net/~a/_oWEM2g4KmPEddOvY8kNmfzEUGI/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=1PfqXdJlujQ:xN8zeVrUxxw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=1PfqXdJlujQ:xN8zeVrUxxw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?i=1PfqXdJlujQ:xN8zeVrUxxw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=1PfqXdJlujQ:xN8zeVrUxxw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?i=1PfqXdJlujQ:xN8zeVrUxxw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=1PfqXdJlujQ:xN8zeVrUxxw:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TechnikGothicUndAnderes/~4/1PfqXdJlujQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.oncode.info/2010/08/10/ein-programmierwettbewerb-vom-linux-magazin/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://blog.oncode.info/2010/08/10/ein-programmierwettbewerb-vom-linux-magazin/</feedburner:origLink></item>
		<item>
		<title>Automatischer Spell-Check in KMail</title>
		<link>http://feeds.oncode.info/~r/TechnikGothicUndAnderes/~3/9uNuiEBu-QQ/</link>
		<comments>http://blog.oncode.info/2010/06/28/automatischer-spell-check-in-kmail/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 08:42:27 +0000</pubDate>
		<dc:creator>skaldrom</dc:creator>
				<category><![CDATA[Desktop]]></category>
		<category><![CDATA[default]]></category>
		<category><![CDATA[Dictionary]]></category>
		<category><![CDATA[kde]]></category>
		<category><![CDATA[kmail]]></category>
		<category><![CDATA[Kubuntu]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[spell]]></category>

		<guid isPermaLink="false">http://blog.oncode.info/?p=1495</guid>
		<description><![CDATA[Automatische Rechtschreibepr&#252;fung in KMail einschalten.]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.oncode.info/wp-content/uploads/2010/06/orthogravieh.png" alt="" title="orthogravieh" width="194" height="140" class="lead" align="left"/>Als Ortogravieh-Experte bin ich sehr froh f&#252;r die roten Linien unter den falsch geschriebenen W&#246;rtern, man will ja nicht schon beim ersten Mail den Eindruck eines Dorftrottels hinterlassen <img src='http://blog.oncode.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Leider schaltet sich diese sehr n&#252;tzliche Funktion bei KMail immer mal wieder aus.</p>
<p>Was bisher geholfen hat:</p>
<ul>
<li>Folgende Pakete m&#252;ssen installiert werden:
<ul>
<li>spell</li>
<li>ispell</li>
<li>Lokale Dictionaries: ingerman, inswiss, &#8230;</li>
</ul>
</li>
<li>Global muss folgendes H&#228;ckchen gesetzt sein: <tt>Systemeinstellungen</tt> &rarr; <tt>Land/Region &amp; Sprache</tt> &rarr; <tt>Rechtschreibpr&#252;fung</tt> &rarr;<tt>Automatische Rechtschreibpr&#252;fung in der Voreinstellung aktiviert</tt></li>
<li>Das Standardw&#246;rterbuch (Default-Dictionary) muss man in der Identit&#228;t einstellen: KMail &rarr; Einstellungen&#8230; &rarr; Identit&#228;ten &rarr; &#196;ndern &rarr; Erweitert.</li>
<li>Beim Schreiben einer Mail muss unten rechts <tt>Rechteschreibpr&#252;fung: ein</tt> stehen.</li>
<li>Das aktuelle W&#246;rterbuch kann angezeigt werden bei Ansicht &rarr; W&#246;rterbuch.</tt>
</ul>

<p><a href="http://feedads.g.doubleclick.net/~a/kNplNMQpqvuHr515BVUWDFf609I/0/da"><img src="http://feedads.g.doubleclick.net/~a/kNplNMQpqvuHr515BVUWDFf609I/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/kNplNMQpqvuHr515BVUWDFf609I/1/da"><img src="http://feedads.g.doubleclick.net/~a/kNplNMQpqvuHr515BVUWDFf609I/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=9uNuiEBu-QQ:pa6eQUScq-I:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=9uNuiEBu-QQ:pa6eQUScq-I:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?i=9uNuiEBu-QQ:pa6eQUScq-I:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=9uNuiEBu-QQ:pa6eQUScq-I:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?i=9uNuiEBu-QQ:pa6eQUScq-I:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=9uNuiEBu-QQ:pa6eQUScq-I:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TechnikGothicUndAnderes/~4/9uNuiEBu-QQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.oncode.info/2010/06/28/automatischer-spell-check-in-kmail/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.oncode.info/2010/06/28/automatischer-spell-check-in-kmail/</feedburner:origLink></item>
		<item>
		<title>Blitz ohne Donner, Flash ohne Sound</title>
		<link>http://feeds.oncode.info/~r/TechnikGothicUndAnderes/~3/dulCXbK4Jv0/</link>
		<comments>http://blog.oncode.info/2010/06/21/blitz-ohne-donner-flash-ohne-sound/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 16:01:26 +0000</pubDate>
		<dc:creator>skaldrom</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[10.04]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[Kubuntu]]></category>
		<category><![CDATA[lucid]]></category>
		<category><![CDATA[Sound]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Youtube]]></category>

		<guid isPermaLink="false">http://blog.oncode.info/?p=1476</guid>
		<description><![CDATA[Blitz ohne Donner, Flash ohne Sound in Linux? Dummheit scheint additiv zu sein. Hier ein kleiner Rundumschlag.]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.oncode.info/wp-content/uploads/2010/06/flash.png" alt="" class="lead" align="left" />Linux ist ja nicht mehr Lustig. Fr&#252;her war man froh und stolz &#252;ber jede Taste die funktioniert hat, heute muss man sich ganz andere Gr&#252;nde zum Saufen suchen. Doch nun habe ich wieder einen Nachmittag verbracht um das zu erreichen, was unter Windows schon lange l&#228;uft und ich bin unglaublich stolz darauf *lach*. </p>
<p>Wie eine Seuche hat es in meinem kleinen Rechenzentrum um sich gegriffen: Eine Computerine nach der Anderen verweigerte den Sound zu Flash Videos. Ich selbst schaue mangels Multitasking eh nur ohne Ton, aber Frauen und Kinder m&#246;chten schon die volle Dr&#246;hnung. Nach den typischen &#8220;Jaja&#8221;s und &#8220;reboot mal&#8221;s (das tun sie nicht, und so kann man sich wunderbar dr&#252;cken) wurde die Opposition zu gross und ich habe mich hingesetzt. Schnell habe ich gemerkt, dass ich nicht der Einzige mit dem Problem bin, und die L&#246;sungen sind vielf&#228;ltig und unterschiedlich. </p>
<p>Hier einen kleinen Ablauf, der anderen gequ&#228;lten Machmals das Leben vielleicht erleichtert.</p>
<h3>Wichtige Voraussetzungen</h3>
<p>Folgendes sollte gegeben sein, bevor man &#252;berhaupt mit dem Herumdoktern beginnt:</p>
<ul>
<li>Der Grundsound muss laufen. Testbar bei K &rarr; System Settings &rarr; Multimedia. Hier jeweils die oberste Karte anw&#228;hlen und <tt>Test</tt> dr&#252;cken. Wenns hier nicht soundet, zuerst die <a href="https://help.ubuntu.com/community/SoundTroubleshooting">L&#228;rmausgabe fixen</a>.</li>
<li>Alle L&#246;sungen mit Pulseaudio betreffen Kubuntu <i>nicht</i>. Das geht nur die Gnome was an.</li>
<li>L&#228;uft es unter Windows? Teilweise muss man da irgendein Volume aufdrehen.</li>
<li>Bei einer nach Problemen schreienden Installation wie meiner (mehrere Compies, mehrere, umschaltbare Ein- und Ausgabem&#246;glichkeiten) hilft es manchmal, wenn der Rechner &#8211; der sounden soll &#8211; schon vor dem Booten mit den Lautsprechern verbunden wird.</li>
</ul>
<h3>Try the simple things first</h3>
<p>Zuerst sollte man mal die nichtinvasiven Dinge auschecken:</p>
<ul>
<li>Ist Flash &#252;berhaupt richtig aktiv im Browser? <tt>about:plugins</tt> in der Adresszeile sollte irgendwo flash auflisten.</li>
<li>Ist die (Software-)Lautst&#228;rke aufgedreht? Rechte Maustaste auf das Lautsprechersymbol &rarr; Show Mixer Window &rarr; Mixer. Hier sollte die richtige Soundkarte ganz vorne und alle Regler (vorallem PCM) ganz oben sein.</li>
<li><tt>alsamixer</tt> in der Konsole sollte die gew&#252;nschte Soundkarte zeigen und alles Wichtige (PCM) auf L&#228;rm gestellt haben.</li>
</ul>
<h3>Operation an den Innereien</h3>
<h4>Flash bereinigen</h4>
<p>Wenn es noch nicht funzt, geht es ans Eingemachte! Flash richtig installieren: Viele Browser haben 1000undein Orte an denen sie Plugins in zuf&#228;lliger Reihenfolge aufschnappen. Hier sollte man mal Ordnung machen und alle rausputzen Also:</p>
<ol>
<li>Alle Browser zumachen (Geschrei von Frau und Kind ignorieren).</li>
<li>Alle Pakete mit Flash auflisten: <tt>sudo dpkg -l | grep -i flash</tt>.</li>
<li>Alle Pakete mit Flash entfernen: <tt>sudo apt-get remove --purge flashplugin-installer flashplugin-nonfree</tt> (und alles Weitere, das oben aufgelistet wurde).</li>
<li>Alle Leichen vernichten: <tt>sudo locate libflashplayer.so</tt> und <i>alle</i> l&#246;schen.</li>
<li>Nach belieben rebooten. Ist zwar nicht notwendig, gibt aber ein heimeliges Windows-Gef&#252;hl *lach*.</li>
<li>Flash nun neu installieren. Daf&#252;r gibt es zwei M&#246;glichkeiten:
<ul>
<li><tt>sudo apt-get install flashplugin-installer flashplugin-nonfree</tt></li>
<li>Meine Empfehlung: <a href="http://flash-aid-extension.blogspot.com/">FLASH-AID</a>. Das ist ein Browserplugin das sich ziemlich intelligent anstellt und mit Ubuntu zusammenarbeitet.</li>
</ul>
</li>
</ol>
<h4>Probleme mit ALSA</h4>
<p>Das Flash-Plugin scheint nur auf die erste Soundkarte zuzugreifen, die ihm das System anbietet. Welche das ist sieht man mittels <tt>cat /proc/asound/modules</tt>. Meine Ausgabe:</p>
<pre>
 0 snd_hda_intel
 1 snd_ice1724
 2 snd_hda_intel
</pre>
<p>Hier <i>m&#252;sste</i> die gew&#252;nschte Ausgabekarte bei 0 erscheinen. Tut sie dies nicht, muss man sie ins K&#246;rbchen huschuschen. Dies tut man indem die Datei <tt>vi /etc/modprobe.d/alsa-base.conf</tt> editiert wird. Hier unter <tt># Prevent abnormal drivers from grabbing index 0</tt> folgendes einf&#252;gen:</p>
<pre>
options snd_hda_intel index=1
</pre>
<p>Statt <tt>snd_hda_intel</tt> nat&#252;rlich die unerw&#252;nschte Karte an Stelle 0 einsetzen. Reboot und probieren.</p>
<h3>Weitere M&#246;glichkeiten</h3>
<p>Wurde schon mal an der Soundkarterei herumgewurschtelt, k&#246;nnen auch Konfigurationsleichen ein Problem darstellen:</p>
<ul>
<li><tt>/etc/asound</tt> k&#246;nnte falsch sein. Ich konnte sie gnadenlos l&#246;schen.</li>
<li><tt>~/.asoundrc</tt> und <tt>~/.asoundrc.irgendwasdasichvergessenhabe</tt> k&#246;nnen ebenfalls gel&#246;scht werden.</li>
</ul>
<p>Auf jeden Fall sollte <tt>aplay -l</tt> eine sch&#246;ne Liste mit der gew&#252;nschten Soundkarte ganz oben ausgeben und <tt>aplay /usr/share/sounds/alsa/Noise.wav</tt> keine gr&#246;sseren Fehlermeldungen.</p>
<h3>Fazit</h3>
<p>Sollte es jetzt noch nicht funktionieren, muss halt ein Stummfilmorchester eingestellt werden.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/wKXy8fblNCt0gxBGrqzTZLxZGVc/0/da"><img src="http://feedads.g.doubleclick.net/~a/wKXy8fblNCt0gxBGrqzTZLxZGVc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/wKXy8fblNCt0gxBGrqzTZLxZGVc/1/da"><img src="http://feedads.g.doubleclick.net/~a/wKXy8fblNCt0gxBGrqzTZLxZGVc/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=dulCXbK4Jv0:G572EVWvam8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=dulCXbK4Jv0:G572EVWvam8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?i=dulCXbK4Jv0:G572EVWvam8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=dulCXbK4Jv0:G572EVWvam8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?i=dulCXbK4Jv0:G572EVWvam8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=dulCXbK4Jv0:G572EVWvam8:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TechnikGothicUndAnderes/~4/dulCXbK4Jv0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.oncode.info/2010/06/21/blitz-ohne-donner-flash-ohne-sound/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.oncode.info/2010/06/21/blitz-ohne-donner-flash-ohne-sound/</feedburner:origLink></item>
		<item>
		<title>Bookmarklets: Kleine Helferlein</title>
		<link>http://feeds.oncode.info/~r/TechnikGothicUndAnderes/~3/qAx_Mtu5VCQ/</link>
		<comments>http://blog.oncode.info/2009/12/15/bookmarklets-kleine-helferlein/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 15:04:44 +0000</pubDate>
		<dc:creator>skaldrom</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.oncode.info/?p=1450</guid>
		<description><![CDATA[Bookmarklets helfen bei kleinen Aufgaben. Sie sind nichts anderes als Links mit JavaScript, haben aber dadurch den ganzen Sprachumfang der Sprache zur Verf&#252;gung.]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.oncode.info/wp-content/uploads/2009/12/bookmark.png" alt="bookmark" title="bookmark" class="lead" align="right"/><a href="http://de.wikipedia.org/wiki/Bookmarklet">Bookmarklets</a> sind eigentlich ganz normale Links, die aber Javascript beinhalten. Sie k&#246;nnen aus einer beliebigen Website direkt an den bevorzugten Bookmark-Ort (Toolbar, Men&#252;, Sidebar, &#8230;) gezogen und verwendet werden. Die Idee ist so einfach und genial, dass es schon <a href="http://www.bookmarklets.com/">grosse Verzeichnisse</a> f&#252;r sie gibt. Da sie in Javascript programmiert sind, kann man auch den Quellcode direkt ansehen und f&#252;r sich anpassen.</p>
<p>Beispiele sind:</p>
<ul>
<li>Das auf der aktuellen Seite markierte Wort nachschlagen, &#252;bersetzen, auf der ganzen Seite markieren, &#8230;</li>
<li>Seitendaten (Bilder, Links, Texte) oder -metadaten (Frische, Gr&#246;sse, &#8230;) auslesen.</li>
<li>Seite ver&#228;ndern: (Schrift, Farbe, &#8230;)</li>
<li>&#8230;</li>
</ul>
<p>Hier ein Trivialbeispiel: <a href="http://www.ddo.com">ddo.com</a> ist ein MMPORG, das den Service &#8220;<a href="http://my.ddo.com">my.ddo.com</a>&#8221; anbietet. Dort k&#246;nnen Detaildaten &#252;ber die Charakteren der Spieler abgerufen werden indem eine spezielle URL nach dem Schema http://my.ddo.com/character/<i>welt</i>/<i>name</i>/ zusammengestellt wird. Das erste Bookmarklet nimmt vom Benutzer Welt und Name entgegen und ruft die entsprechende URL auf (Test: Senthessel auf Ghallanda):<br />
[cc lang="javascript"]<br />
<a href="javascript:void(Tn=prompt('Toon name:',''));void(Sr=prompt('Server:',''));if(Tn &#038;&#038; Sr) location.href='http://my.ddo.com/character/'+escape(Sr.toLowerCase())+'/'+escape(Tn.toLowerCase())+'/'">Suche DDO-Toon</a><br />
[/cc]</p>
<p>Es ist voll bookmarkf&#228;hig und sieht folgendermassen aus: <a href="javascript:void(Tn=prompt('Toon name:',''));void(Sr=prompt('Server:',''));if(Tn &#038;&#038; Sr) location.href='http://my.ddo.com/character/'+escape(Sr.toLowerCase())+'/'+escape(Tn.toLowerCase())+'/'">Suche DDO-Toon</a>.</p>
<p>Ein zweites Bookmarklet sucht auf einer bestimmten Welt und nimmt als Namen entweder den auf einer Webseite markierten Text oder die Eingabe in einem Dialog:<br />
[cc lang="javascript"]<br />
<a href="javascript:Tn=document.getSelection();if(!Tn){void(Tn=prompt('Toon name:',''))};if(Tn) location.href='http://my.ddo.com/character/ghallanda/'+escape(Tn.toLowerCase())+'/'">Search DDO-Toon On Ghallanda</a><br />
[/cc]</p>
<p>Beispiel: <a href="javascript:Tn=document.getSelection();if(!Tn){void(Tn=prompt('Toon name:',''))};if(Tn) location.href='http://my.ddo.com/character/ghallanda/'+escape(Tn.toLowerCase())+'/'">Search DDO-Toon On Ghallanda</a></p>
<p>Folgendes Bookmarklet sucht ein entsprechendes Ausbildungsmodul von I-CH (Quelltext anzeigen f&#252;r die Source <img src='http://blog.oncode.info/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ): <a href="javascript:Tn=document.getSelection();if(!Tn){void(Tn=prompt('Modul:',''))};if(Tn) location.href='http://www.i-ch.ch/modulbaukasten/servlet/WebInter?lang=de&#038;release=2&#038;aa_id=6&#038;class=COMain&#038;method=showSearch&#038;table=modul&#038;id=103&#038;lang=de&#038;mid=103&#038;search='+escape(Tn.toLowerCase())">Modulsuche auf I-CH</a></p>
<p>Am besten nimmt man ein bestehendes Bookmarklet und passt es auf seine Bed&#252;rfnisse an.</p>
<p><a name="ddobookmarklets"></a><br />
Hier eine Liste der kompletten DDO-Bookmarklets:</p>
<ul>
<li><a href="javascript:void(Tn=prompt('Toon name:',''));void(Sr=prompt('Server:',''));if(Tn &#038;&#038; Sr) location.href='http://my.ddo.com/character/'+escape(Sr.toLowerCase())+'/'+escape(Tn.toLowerCase())+'/'">Search DDO-Toon</a></li>
<li><a href="javascript:Tn=document.getSelection();if(!Tn){void(Tn=prompt('Toon name:',''))};if(Tn) location.href='http://my.ddo.com/character/argonnessen/'+escape(Tn.toLowerCase())+'/'">Search DDO-Toon On Argonnessen</a></li>
<li><a href="javascript:Tn=document.getSelection();if(!Tn){void(Tn=prompt('Toon name:',''))};if(Tn) location.href='http://my.ddo.com/character/cannith/'+escape(Tn.toLowerCase())+'/'">Search DDO-Toon On Cannith</a></li>
<li><a href="javascript:Tn=document.getSelection();if(!Tn){void(Tn=prompt('Toon name:',''))};if(Tn) location.href='http://my.ddo.com/character/ghallanda/'+escape(Tn.toLowerCase())+'/'">Search DDO-Toon On Ghallanda</a></li>
<li><a href="javascript:Tn=document.getSelection();if(!Tn){void(Tn=prompt('Toon name:',''))};if(Tn) location.href='http://my.ddo.com/character/khyber/'+escape(Tn.toLowerCase())+'/'">Search DDO-Toon On Khyber</a></li>
<li><a href="javascript:Tn=document.getSelection();if(!Tn){void(Tn=prompt('Toon name:',''))};if(Tn) location.href='http://my.ddo.com/character/lamannia/'+escape(Tn.toLowerCase())+'/'">Search DDO-Toon On Lamannia</a></li>
<li><a href="javascript:Tn=document.getSelection();if(!Tn){void(Tn=prompt('Toon name:',''))};if(Tn) location.href='http://my.ddo.com/character/orien/'+escape(Tn.toLowerCase())+'/'">Search DDO-Toon On Orien</a></li>
<li><a href="javascript:Tn=document.getSelection();if(!Tn){void(Tn=prompt('Toon name:',''))};if(Tn) location.href='http://my.ddo.com/character/sarlona/'+escape(Tn.toLowerCase())+'/'">Search DDO-Toon On Sarlona</a></li>
<li><a href="javascript:Tn=document.getSelection();if(!Tn){void(Tn=prompt('Toon name:',''))};if(Tn) location.href='http://my.ddo.com/character/thelanis/'+escape(Tn.toLowerCase())+'/'">Search DDO-Toon On Thelanis</a></li>
</ul>

<p><a href="http://feedads.g.doubleclick.net/~a/iMKuNRVZNWIdQQNGAdW2rbAEQes/0/da"><img src="http://feedads.g.doubleclick.net/~a/iMKuNRVZNWIdQQNGAdW2rbAEQes/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/iMKuNRVZNWIdQQNGAdW2rbAEQes/1/da"><img src="http://feedads.g.doubleclick.net/~a/iMKuNRVZNWIdQQNGAdW2rbAEQes/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=qAx_Mtu5VCQ:iyFvpKJoRcQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=qAx_Mtu5VCQ:iyFvpKJoRcQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?i=qAx_Mtu5VCQ:iyFvpKJoRcQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=qAx_Mtu5VCQ:iyFvpKJoRcQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?i=qAx_Mtu5VCQ:iyFvpKJoRcQ:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=qAx_Mtu5VCQ:iyFvpKJoRcQ:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TechnikGothicUndAnderes/~4/qAx_Mtu5VCQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.oncode.info/2009/12/15/bookmarklets-kleine-helferlein/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.oncode.info/2009/12/15/bookmarklets-kleine-helferlein/</feedburner:origLink></item>
		<item>
		<title>Zeitintervalle (Erledigungsfristen) in PHP</title>
		<link>http://feeds.oncode.info/~r/TechnikGothicUndAnderes/~3/ax--BsPfPx0/</link>
		<comments>http://blog.oncode.info/2009/12/13/zeitintervalle-erledigungsfristen-in-php/#comments</comments>
		<pubDate>Sun, 13 Dec 2009 17:26:40 +0000</pubDate>
		<dc:creator>skaldrom</dc:creator>
				<category><![CDATA[Theorie und Schnipsel]]></category>
		<category><![CDATA[intervall]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[zeit]]></category>
		<category><![CDATA[zeitintervall]]></category>

		<guid isPermaLink="false">http://blog.oncode.info/?p=1445</guid>
		<description><![CDATA[Dieser Artikel zeigt wie man Erledigungsintervalle oder Fristen in PHP parst.]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.oncode.info/wp-content/uploads/2009/12/time.png" alt="time" title="time" align="left" class="lead"/>Ich bin wiedereinmal am Coden und irgendwie scheine ich mit fortschreitendem Alter auf immer mehr ungel&#246;ste Probleme zu treffen. In der aktuellen Applikation geht es darum, dass Erledigungsfristen als Intervalle eingegeben werden k&#246;nnen: Beispielsweise muss eine Aufgabe immer in 2 Monaten, 1 Woche und 4 Sekunden nach dem Erfassen erledigt sein. Daraus ergeben sich ein Strauss an Problemen (oder ein Problemkorb, wie man neuerdings zu sagen scheint. Was f&#252;r eine schreckliche Vorstellung, nur FR&#220;CHTE-K&#246;rbe finde ich noch abschreckender):</p>
<ul>
<li>Jemand muss die Aufgabe erledigen. Zum Gl&#252;ck ist das ein PAL (Problem anderer Leute) <img src='http://blog.oncode.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  .</li>
<li>&#8220;In einem Monat&#8221; und &#8220;In einem Jahr&#8221; kann nicht trivial in Sekunden umgerechnet werden. Irgendein Soziopath hat mal bestimmt, dass nicht alle Monate und Jahre die gleiche Anzahl Tage haben. Ganz zu schweigen von Schaltsekunden und Sommer-/Winterzeit.</li>
<li>Aus hier zu verschweigenden Gr&#252;nden habe ich weder Lust noch Zeit ein GUI mit 7 Textfeldern f&#252;r Jahre, Monate, Wochen, Tage, Stunden, Minuten und Sekunden aufzubauen.</li>
</ul>
<p>Ich habe mich f&#252;r ein simples Eingabefeld entschieden, in denen das Erledigungsintervall in der Form &#8220;Zahl Zeitbezeichner Zahl Zeitbezeichner &#8230;&#8221; eingegeben werden kann. In obigem Beispiel w&#228;re das: &#8220;<tt>2m 1w 4s</tt>&#8220;.</p>
<p>Leider ist die Aufgabe ein Bisschen zu klein um einen <a href="http://blog.oncode.info/2007/10/25/eine-eigene-programmiersprache-erschaffen-lexer-und-parser-in-php/">richtigen Parser</a> hochzufahren <img src='http://blog.oncode.info/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  , und so habe ich die kleineren Kanonen hervorgeholt. Meine Idee is die Folgende: Dieses Intervall wird in einen String &#252;bersetzt, der direkt an <a href="http://php.net/manual/en/function.strtotime.php">strtotime</a> &#252;bergeben werden kann. Soll sich diese Funktion doch um die H&#228;sslichkeiten der Zeit k&#252;mmern.</p>
<p>Mein Ansatz ist zweistufig: Erst wird geparst und ein Array aus den Tokens erzeugt. Im Idealfall also immer abwechselnd &#8220;number&#8221; und &#8220;alpha&#8221;. Im zweiten Schritt wird dann der String daraus geformt. Hier der Code f&#252;r alle armen Seelen, die vielleicht mal auf dasselbe exotische Problem treffen sollten. Mir ist bewusst, dass ich auch mit RegExpen h&#228;tte arbeiten k&#246;nnen, aber die sind eh nur f&#252;r Weicheier <img src='http://blog.oncode.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> :</p>
<p>[cc lang="php"]<br />
/**<br />
 * Parses a string with an interval into a string that is understood by strtotime.<br />
 *<br />
 * Example: &#8220;3w 2d 4h 2s&#8221; means 3 Weeks, 2 days, 4 hours<br />
 */<br />
function timeIntervalToStrtotime($timeInterval) {<br />
    $tokens=array();<br />
    $currentTokenType=&#8221;";<br />
    $currentToken=&#8221;";</p>
<p>    // Poor man&#8217;s scanner<br />
    for($i=0; $i<strlen($timeInterval); $i++) {</p>
<p>        // Ignore whitespaces<br />
        if(ctype_space($timeInterval[$i])) {<br />
            continue;<br />
        }</p>
<p>        // Numbers or names<br />
        $thisTokenType=ctype_digit($timeInterval[$i])?&#8221;numeric&#8221;:&#8221;alpha&#8221;;</p>
<p>        if($currentTokenType == $thisTokenType) {<br />
            $currentToken.=$timeInterval[$i];<br />
        } // Else<br />
        if($currentTokenType != $thisTokenType) { // New Tokentype<br />
            if($currentTokenType!=&#8221;") { // Not first token<br />
                // Save old token<br />
                $tokens[]= array(&#8220;type&#8221; => $currentTokenType, &#8220;token&#8221; => $currentToken);<br />
            } else { // First token must be numeric<br />
                if($thisTokenType!=&#8221;numeric&#8221;) {<br />
                    return &#8220;&#8221;;<br />
                }<br />
            }<br />
            $currentTokenType=$thisTokenType;<br />
            $currentToken=$timeInterval[$i];<br />
        }<br />
    }<br />
    // Save last Token<br />
    if($currentTokenType!=&#8221;") {<br />
        $tokens[]= array(&#8220;type&#8221; => $currentTokenType, &#8220;token&#8221; => $currentToken);<br />
    }</p>
<p>    // Poor man&#8217;s parser</p>
<p>    // There has to be an even number of tokens<br />
    if(count($tokens) % 2 != 0) {<br />
        return &#8220;&#8221;;<br />
    }</p>
<p>    $ret=array();<br />
    for($i=0; $i<count($tokens); $i+=2) {<br />
        switch(strtolower($tokens[$i+1]["token"])) {<br />
            case &#8220;a&#8221;:<br />
            case &#8220;y&#8221;:<br />
            case &#8220;yr&#8221;:<br />
            case &#8220;year&#8221;:<br />
            case &#8220;years&#8221;: $ret[]=&#8221;+&#8221;.$tokens[$i]["token"].&#8221; years&#8221;; break;<br />
            case &#8220;m&#8221;:<br />
            case &#8220;mon&#8221;:<br />
            case &#8220;month&#8221;:<br />
            case &#8220;months&#8221;: $ret[]=&#8221;+&#8221;.$tokens[$i]["token"].&#8221; months&#8221;; break;<br />
            case &#8220;w&#8221;:<br />
            case &#8220;week&#8221;:<br />
            case &#8220;weeks&#8221;: $ret[]=&#8221;+&#8221;.$tokens[$i]["token"].&#8221; weeks&#8221;; break;<br />
            case &#8220;d&#8221;:<br />
            case &#8220;day&#8221;:<br />
            case &#8220;days&#8221;: $ret[]=&#8221;+&#8221;.$tokens[$i]["token"].&#8221; days&#8221;; break;<br />
            case &#8220;h&#8221;:<br />
            case &#8220;hr&#8221;:<br />
            case &#8220;hour&#8221;:<br />
            case &#8220;hours&#8221;: $ret[]=&#8221;+&#8221;.$tokens[$i]["token"].&#8221; hours&#8221;; break;<br />
            case &#8220;m&#8221;:<br />
            case &#8220;min&#8221;:<br />
            case &#8220;mins&#8221;:<br />
            case &#8220;minute&#8221;:<br />
            case &#8220;minutes&#8221;: $ret[]=&#8221;+&#8221;.$tokens[$i]["token"].&#8221; minutes&#8221;; break;<br />
            case &#8220;s&#8221;:<br />
            case &#8220;sec&#8221;:<br />
            case &#8220;secs&#8221;:<br />
            case &#8220;second&#8221;:<br />
            case &#8220;seconds&#8221;: $ret[]=&#8221;+&#8221;.$tokens[$i]["token"].&#8221; seconds&#8221;; break;<br />
            default: return &#8220;&#8221;;<br />
        }<br />
    }<br />
    return join(&#8221; &#8220;, $ret);<br />
}</p>
<p>$tests=array(&#8220;1s&#8221;, &#8220;1&#8243;, &#8221; 1y 2d 3 mins 4sec&#8221;, &#8221; 15 yr &#8220;, &#8220;a2 3mon&#8221;);<br />
foreach($tests as $test) {<br />
    echo &#8220;TEST:[$test]: &#8220;.timeIntervalToStrtotime($test).&#8221;\n&#8221;;<br />
}<br />
[/cc]</p>

<p><a href="http://feedads.g.doubleclick.net/~a/b4Rb3yWVBbTj8K3gFd1cpyPkRnc/0/da"><img src="http://feedads.g.doubleclick.net/~a/b4Rb3yWVBbTj8K3gFd1cpyPkRnc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/b4Rb3yWVBbTj8K3gFd1cpyPkRnc/1/da"><img src="http://feedads.g.doubleclick.net/~a/b4Rb3yWVBbTj8K3gFd1cpyPkRnc/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=ax--BsPfPx0:9ifMcECIjG8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=ax--BsPfPx0:9ifMcECIjG8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?i=ax--BsPfPx0:9ifMcECIjG8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=ax--BsPfPx0:9ifMcECIjG8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?i=ax--BsPfPx0:9ifMcECIjG8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=ax--BsPfPx0:9ifMcECIjG8:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TechnikGothicUndAnderes/~4/ax--BsPfPx0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.oncode.info/2009/12/13/zeitintervalle-erledigungsfristen-in-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.oncode.info/2009/12/13/zeitintervalle-erledigungsfristen-in-php/</feedburner:origLink></item>
		<item>
		<title>Webanwendungen: Office 2007 Dateien werden als ZIP heruntergeladen</title>
		<link>http://feeds.oncode.info/~r/TechnikGothicUndAnderes/~3/ME5VU4eedWs/</link>
		<comments>http://blog.oncode.info/2009/11/26/webanwendungen-office-2007-dateien-werden-als-zip-heruntergeladen/#comments</comments>
		<pubDate>Thu, 26 Nov 2009 12:07:14 +0000</pubDate>
		<dc:creator>skaldrom</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[2007]]></category>
		<category><![CDATA[docx]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[msie]]></category>
		<category><![CDATA[Office]]></category>
		<category><![CDATA[öffnen]]></category>
		<category><![CDATA[xlsx]]></category>

		<guid isPermaLink="false">http://blog.oncode.info/?p=1437</guid>
		<description><![CDATA[Wenn bei einer Webanwendung Office 2007 Dateien (docx, xlsx) als Zips downgeloaded werden, fehlen die korrekten Eintr&#228;ge in de Mimetype-Konfigurationsdatei.]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.oncode.info/wp-content/uploads/2009/11/zipper.png" alt="zipper" title="zipper" width="243" height="172" class="lead" align="left" /> Ein Server von uns versuchte wiedereinmal besonders originell zu sein: Eine in WordPress hochgeladene &#8220;.docx&#8221; Datei wurde im Internet Explorer als &#8220;.zip&#8221; zum Download offeriert. So richtig b&#246;se kann man dem dem Server nicht sein, hat er doch recht: Die Office 2007 Dateien sind an sich Zips, und trotzdem m&#246;chte man sie mit Word &#246;ffnen, oder?</p>
<p>Nach einigem Fluchen bin ich auf den korrekten <a href="http://www.webdeveloper.com/forum/showthread.php?t=162526">Eintrag gestossen</a> und konnte die L&#246;sung ableiten. In der Datei <tt>/etc/mime.types</tt> folgendes am Ende hinzuf&#252;gen und gut is:</p>
<pre>
application/vnd.ms-word.document.macroEnabled.12 .docm
application/vnd.openxmlformats-officedocument.wordprocessingml.document docx
application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx
application/vnd.ms-powerpoint.template.macroEnabled.12 potm
application/vnd.openxmlformats-officedocument.presentationml.template potx
application/vnd.ms-powerpoint.addin.macroEnabled.12 ppam
application/vnd.ms-powerpoint.slideshow.macroEnabled.12 ppsm
application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx
application/vnd.ms-powerpoint.presentation.macroEnabled.12 pptm
application/vnd.openxmlformats-officedocument.presentationml.presentation pptx
application/vnd.ms-excel.addin.macroEnabled.12 xlam
application/vnd.ms-excel.sheet.binary.macroEnabled.12 xlsb
application/vnd.ms-excel.sheet.macroEnabled.12 xlsm
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx
application/vnd.ms-excel.template.macroEnabled.12 xltm
application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx
</pre>

<p><a href="http://feedads.g.doubleclick.net/~a/yWN26Le6Fcen1mc_PQpx_uN_K68/0/da"><img src="http://feedads.g.doubleclick.net/~a/yWN26Le6Fcen1mc_PQpx_uN_K68/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/yWN26Le6Fcen1mc_PQpx_uN_K68/1/da"><img src="http://feedads.g.doubleclick.net/~a/yWN26Le6Fcen1mc_PQpx_uN_K68/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=ME5VU4eedWs:Tu2s_1jlJjQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=ME5VU4eedWs:Tu2s_1jlJjQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?i=ME5VU4eedWs:Tu2s_1jlJjQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=ME5VU4eedWs:Tu2s_1jlJjQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?i=ME5VU4eedWs:Tu2s_1jlJjQ:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=ME5VU4eedWs:Tu2s_1jlJjQ:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TechnikGothicUndAnderes/~4/ME5VU4eedWs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.oncode.info/2009/11/26/webanwendungen-office-2007-dateien-werden-als-zip-heruntergeladen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.oncode.info/2009/11/26/webanwendungen-office-2007-dateien-werden-als-zip-heruntergeladen/</feedburner:origLink></item>
		<item>
		<title>Der Stand der Technik: One for All Xsight Universalfernbedienungen</title>
		<link>http://feeds.oncode.info/~r/TechnikGothicUndAnderes/~3/zfVRH1TuWSk/</link>
		<comments>http://blog.oncode.info/2009/11/20/der-stand-der-technik-one-for-all-xsight-universalfernbedienungen/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 06:51:58 +0000</pubDate>
		<dc:creator>skaldrom</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Fernbedienung]]></category>
		<category><![CDATA[Universalfernbedienung]]></category>
		<category><![CDATA[Xsight]]></category>
		<category><![CDATA[Xsight Colour]]></category>
		<category><![CDATA[Xsight Touch]]></category>

		<guid isPermaLink="false">http://blog.oncode.info/?p=1411</guid>
		<description><![CDATA[Diese Universalferbedienungen n&#228;hern sich dem Computer an. Topmodernes Fersteuern aller Ger&#228;te, die auf Infrarot h&#246;ren.]]></description>
			<content:encoded><![CDATA[<p>[<a href="http://www.trigami.com/?blog=http://blog.oncode.info/" rel="nofollow" target="_blank">Trigami-Review</a>]<script type="text/javascript" src="http://s.trigami.com/261168s.js"></script><br />
<img src="http://blog.oncode.info/wp-content/uploads/2009/11/remote.png" alt="remote" title="remote" width="226" class="lead" align="left" /> Ein weiteres Problem in einem Techie-Haushalt (und wenn ich mich so umschaue, wohl langsam aber sicher auch bei &#8220;normalen&#8221; Menschen): Die Inflation der Fernbedienungen. TV-0, TV-1, DVD, Sound-System-0 und Sound-System-1, Satellitenreceiver, ja sogar mein Laptop verf&#252;gt mittlerweile &#252;ber eine Fernsteuerung. Das f&#252;hrt dazu, dass ich &#252;ber die Zeit ein ganzes IKEA-K&#246;rbchen mit diesen Dingern gef&#252;llt habe. Um eine DVD zu sehen (und zu h&#246;ren) brauche ich drei davon, die dann fr&#246;hlich auf meinem Bauch drapiert jedes wohlige R&#228;keln verhindern und gierig jedes Kr&#252;melchen ged&#252;nstete Kartoffelscheibchen in sich aufnehmen. Mindestens einmal pro Film muss ich aufstehen und einem dieser Ger&#228;te neue Batterien spendieren (und gleichzeitig die beiden Anderen gekonnt auf den Boden werfen).</p>
<p>Meine Experimente mit Universalfernbedienungen sind bis jetzt leider immer an meiner Unf&#228;higkeit gescheitert, papierne Unterlagen wieder-zugriffsf&#228;hig abzulegen. Wer kann sich schon die komplizierten Griffe merken, die Notwendig sind, um die Teile nach einer l&#228;ngeren Ruhepause neu zu programmieren? Ohne Kohl: bei einem Modell musste man sogar nach einer Fingerbrecher-Knopfkombination eine ganz bestimmte Zeit warten, damit das Reprogrammieren geklappt hat.</p>
<p>Ich war daher mehr als gespannt auf die &#8220;One for All&#8221; Xsight Ger&#228;te <a href="http://www.oneforall.de/de_DE/product/1/universal-fernbedienungen/3/advanced/61/xsight-colour" rel="nofollow">Xsight Colour</a> und <a href="http://www.oneforall.de/de_DE/product/1/universal-fernbedienungen/3/advanced/29/xsight-touch" rel="nofollow">Xsight Touch</a> . Sie haben einen Bildschirm, viele Kn&#246;pfe und einen USB-Anschluss. Was braucht es mehr, um des Geeken Herz h&#246;her schlagen zu lassen? (ok, ein SDK w&#228;r nicht schlecht <img src='http://blog.oncode.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ).</p>
<h3>Universalfernbedienungen auf h&#246;chstem Niveau</h3>
<div id="attachment_1420" class="wp-caption alignright" style="width: 307px"><img src="http://blog.oncode.info/wp-content/uploads/2009/11/boths.jpg" alt="Links die Touch, in der Mitte die Colour und rechts eine Zigarettenschachtel zum Gr&#246;ssenvergleich" title="boths" width="297" height="329" class="size-full wp-image-1420" /><p class="wp-caption-text">Links die Touch, in der Mitte die Colour und rechts eine Zigarettenschachtel zum Gr&#246;ssenvergleich</p></div>
<p>Schon beim Auspacken gefallen die Ger&#228;te. Sie sind etwas gross, sehen aber sehr elegant aus, und die blaue Beleuchtung bringt Star-Trek-Feeling. Beide Ger&#228;te k&#246;nnen entweder direkt oder per USB &#252;ber den PC konfiguriert werden. Das direkte Konfigurieren geht dank dem Bildschirm sehr schnell, aber die Datenbank ist nicht so gross wie bei der Online-Variante. </p>
<h4>Konfigurieren &#252;ber USB</h4>
<p>Nach der (leider Windows-Only) Installation der Software auf dem PC, wird das Ger&#228;t &#252;ber eine Webseite upgedated (Firmware) und konfiguriert. Das hat den Vorteil, dass die Datenbanken der Ger&#228;te aktuell gehalten werden k&#246;nnen. Man ist theoretisch also auch f&#252;r Ger&#228;te ger&#252;stet, die es noch gar nicht gibt. Der Nachteil dabei d&#252;rfte sein, dass One for All ziemlich viele Infos &#252;ber mich erh&#228;lt. Ich habe mich zum Beispiel sehr gefragt, wieso ich meinen Geburtstag und den Wohnort angeben muss.</p>
<div id="attachment_1419" class="wp-caption alignnone" style="width: 310px"><a href="http://blog.oncode.info/wp-content/uploads/2009/11/activex.png"><img src="http://blog.oncode.info/wp-content/uploads/2009/11/activex-300x206.png" alt="ActiveX muss aktiviert werden, dann klappts auch mit dem USB" title="activex" width="300" height="206" class="size-medium wp-image-1419" /></a><p class="wp-caption-text">ActiveX muss aktiviert werden, dann klappts auch mit dem USB</p></div>
<p>Nachdem ich ActiveX aktiviert habe, ging das Procedere dann auch ohne Probleme und speditiv vonstatten. Als Coder hat mich die Idee fasziniert, wie hier lokale Ger&#228;te mit online-Applikationen gesteuert werden. Das muss man im Auge behalten.</p>
<h4>Fernzusteuernde Ger&#228;te ausw&#228;hlen</h4>
<p>&#220;ber ein ansprechendes Men&#252; kann zuerst der Ger&#228;tetyp ausgew&#228;hlt und danach via Hersteller und Seriennummer genau spezifiziert werden. An sich sollte die Fernbedienung in der Lage sein, nach Angabe des Herstellers auch selbst&#228;ndig herauszufinden, mit welchem Modell sie es zu tun hat. Das hat bei mir leider nicht so ganz geklappt. Eine dritte M&#246;glichkeit ist das Lernen von bestehenden Fernbedienungen.</p>
<p>Nachdem ich alle Seriennummern ausfindig gemacht (und meinen Kopf drei mal am Fernsehtisch gestossen) habe, war das Einrichten kein Problem mehr, und alle Ger&#228;te, von der guten alten Lady (meinem SABA-R&#246;hren-TV) bis zum neuen Soundsystem gehorchten der Fernbedienung ohne zu Murren.</p>
<p>Wer lieber lugt als liest kann auch ein <a rel="nofollow" href="http://www.amazon.de/gp/mpd/permalink/m3IY89NTK25OTL">Kurzvideo &#252;ber die Einrichtung ansehen</a>.</p>
<h4>Aktivit&#228;ten</h4>
<p>Weil diese Universalfernbedienungen richtige, kleine Computer sind, bieten sie auch einiges an Komfortfunktionen. Beispielsweise sind &#8220;Aktivit&#228;ten&#8221; (<a rel="nofollow" href="http://www.amazon.de/gp/mpd/permalink/m4XH2BOSJI2U3">guckstDu Film</a>) Kombinationen von Fernbedienungskommandos: Bei mir w&#228;re &#8220;Film Schauen&#8221; das Einschalten des TV&#8217;s, DVD&#8217;s und des Soundsystems (und eigentlich auch das Dimmen des Lichts, aber so gut ausger&#252;stet bin ich noch nicht). Diese Vereinfachung will man sehr schnell nicht mehr missen.</p>
<h4>Profile und Favoriten</h4>
<div id="attachment_1426" class="wp-caption alignnone" style="width: 186px"><a href="http://blog.oncode.info/wp-content/uploads/2009/11/favoriten.png"><img src="http://blog.oncode.info/wp-content/uploads/2009/11/favoriten.png" alt="Favoriten mit Senderlogos" title="favoriten" width="176" height="220" class="size-full wp-image-1426" /></a><p class="wp-caption-text">Favoriten mit Senderlogos</p></div>
<p>&#220;ber die Webapplikation k&#246;nnen bis zu 72 <a rel="nofollow" href="http://www.amazon.de/gp/mpd/permalink/mAVW8HFE9H88J">Favorisierte TV-Sendern mit Logos eingerichtet werden</a>. Das ist wirklich praktisch, werden doch die Senderlogos in den Werbepausen (der Hauptumschaltzeit) bei den Sendern nicht angezeigt. Jedes Familienmitglied hat andere Senderpr&#228;ferenzen, und hier kommen die Profile ins Spiel: <a rel="nofollow" href="http://www.amazon.de/gp/mpd/permalink/m1ROPULZEUUR7G">Sechs Benutzerprofile k&#246;nnen unterschiedlich eingerichtet werden</a>, so dass alle ihre bevorzugten Sender in der Schnellauswahl haben.</p>
<h4>Unterschiede der Modelle</h4>
<p>Neben den oben beschriebenen Gemeinsamkeiten gibt es auch Unterschiede. Die <a rel="nofollow" href="http://www.oneforall.de/de_DE/product/1/universal-fernbedienungen/3/advanced/29/xsight-touch">Xsight Touch</a> bietet (wie der Name schon sagt) einen ber&#252;hrungsempfindlichen Bildschirm und eine &#8220;Bl&#228;ttermulde&#8221;, w&#228;hrend bei der <a rel="nofollow" href="http://www.oneforall.de/de_DE/product/1/universal-fernbedienungen/3/advanced/61/xsight-colour">Xsight Colour</a> die Navigation mit sechs Tasten auf der Seite gemacht wird. Als zus&#228;tzliches Schmankerl bringt die <a rel="nofollow" href="http://www.oneforall.de/de_DE/product/1/universal-fernbedienungen/3/advanced/29/xsight-touch">Xsight Touch</a> eine Ladestation mit, &#252;ber die der interne Akku aufgeladen wird. Dies ist ein unglaubliches Plus, denn wenn ich es mir schon mal gestatte mir Zeit f&#252;r einen Film zu nehmen, will ich diese nicht mit Batterien suchen verbringen.</p>
<h4>Problemchen</h4>
<p>Neue Technologien, neue Probleme. Da sich anscheinend alle Gadgets immer mehr dem Computer ann&#228;hern, werden auch die Probleme immer &#228;hnlicher. Beispielsweise hat wie erw&#228;hnt die Einrichtung &#252;ber Hersteller ohne Seriennummer nicht geklappt. Die Eindeutschung ist vorhanden, aber irgendwie nicht ganz &#252;berpr&#252;ft: Auf der Einrichtungs-Website erscheinen einige (wenige) Texte in Englisch, das Deutsch ist etwas holperig und auf den kleinen Displays bricht der Text so um, dass er teilweise nicht mehr gelesen werden kann. Wir haben halt mehr Buchstaben hier als im englischsprachigen Bereich. Spannend w&#228;re es, das mal auf Finnisch anzusehen <img src='http://blog.oncode.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> &#8230;</p>
<p>Viele der Probleme, die auf Amazon in den Benutzerrezensionen aufgeworfen werden (<a rel="nofollow" href="http://www.amazon.de/Xsight-Touch-Universal-Fernbedienung-Infrarot-Lernfunktion-Makrofunktions-Tasten/dp/B001LEHFIO/ref=sr_1_1?ie=UTF8&#038;s=ce-de&#038;qid=1256042956&#038;sr=1-1">XSight Touch auf Amazon</a>, <a rel="nofollow" href="http://www.amazon.de/Xsight-Colour-Universal-Fernbedienung-Infrarot-Lernfunktion-Makrofunktions-Tasten/dp/B001KNR0MM/ref=cm_cr_pr_product_top">Xsight Colour auf Amazon</a>), konnte ich nicht nachvollziehen. Vielleicht hatte ich neuere Versionen oder einfach mehr Gl&#252;ck.</p>
<h3>Xsight Kaufen</h3>
<p>Kaufen kann man die Fernbedienungen &#252;ber Amazon: <a rel="nofollow" href="http://www.amazon.de/Xsight-Touch-Universal-Fernbedienung-Infrarot-Lernfunktion-Makrofunktions-Tasten/dp/B001LEHFIO/ref=sr_1_1?ie=UTF8&#038;s=ce-de&#038;qid=1256042956&#038;sr=1-1">XSight Touch</a>, <a rel="nofollow" href="http://www.amazon.de/Xsight-Colour-Universal-Fernbedienung-Infrarot-Lernfunktion-Makrofunktions-Tasten/dp/B001KNR0MM/ref=cm_cr_pr_product_top">Xsight Colour</a>. Sie haben einen stolzen Preis (>100 €), bieten daf&#252;r aber einiges an Komfort und Vereinfachung. Vielleicht bleibt ja vom Weihnachtsgeld etwas &#252;brig <img src='http://blog.oncode.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>Sollte man gar nicht zufrieden und arg von den Problemen gebeutelt sein, gibt es einen Support und eine &#8220;Money Back&#8221; Garantie. </p>
<h3>Fazit</h3>
<p>Die ganze Ger&#228;tschaft macht einen unglaublich modernen Eindruck. Zum Einen ist da die Onlineapplikation um die Fernbedienung einzurichten, zum Anderen ist die Kampagne an vorderster 2.0 Front: Trigami-Kampagne, die professionell wirkenden Filme, Pr&#228;senz auf <a rel="nofollow" href="http://twitter.com/OFA_Xsight">Twitter</a> und auf <a rel="nofollow" href="http://www.facebook.com/pages/OneForAll-Xsight/135675795990">Facebook</a>. </p>
<p>Irgendwie sind die Jungs ihrer Zeit echt voraus! Das macht sie sympathisch und ich hoffe, dass sie Erfolg haben mit den Produkten.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/xFpnatoqznmNwbZmmA6xbxHODsM/0/da"><img src="http://feedads.g.doubleclick.net/~a/xFpnatoqznmNwbZmmA6xbxHODsM/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/xFpnatoqznmNwbZmmA6xbxHODsM/1/da"><img src="http://feedads.g.doubleclick.net/~a/xFpnatoqznmNwbZmmA6xbxHODsM/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=zfVRH1TuWSk:asjcEVp25cY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=zfVRH1TuWSk:asjcEVp25cY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?i=zfVRH1TuWSk:asjcEVp25cY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=zfVRH1TuWSk:asjcEVp25cY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?i=zfVRH1TuWSk:asjcEVp25cY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=zfVRH1TuWSk:asjcEVp25cY:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TechnikGothicUndAnderes/~4/zfVRH1TuWSk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.oncode.info/2009/11/20/der-stand-der-technik-one-for-all-xsight-universalfernbedienungen/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://blog.oncode.info/2009/11/20/der-stand-der-technik-one-for-all-xsight-universalfernbedienungen/</feedburner:origLink></item>
		<item>
		<title>Text- oder Quellcodedateien auf Ähnlichkeit prüfen unter Linux</title>
		<link>http://feeds.oncode.info/~r/TechnikGothicUndAnderes/~3/0JOfxsZzfG4/</link>
		<comments>http://blog.oncode.info/2009/11/12/text-oder-quellcodedateien-auf-aehnlichkeit-pruefen-unter-linux/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 15:23:52 +0000</pubDate>
		<dc:creator>skaldrom</dc:creator>
				<category><![CDATA[Bildung und Unterricht]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ähnlichkeiten]]></category>
		<category><![CDATA[Dateien]]></category>
		<category><![CDATA[Plagiat]]></category>
		<category><![CDATA[Unterricht]]></category>

		<guid isPermaLink="false">http://blog.oncode.info/?p=1399</guid>
		<description><![CDATA[Text oder Codedateien]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.oncode.info/wp-content/uploads/2009/11/mirror.png" alt="mirror" title="mirror" class="lead" align="left"/>Manchmal &#252;berf&#228;llt mich der starke Drang nachzuforschen, wieviel von meinem vermittelten Wissen auch tats&#228;chlich angekommen, gespeichert und wiedergegeben werden kann. Im Volksmund heisst dies &#8220;Pr&#252;fung&#8221;, im Mund der Lernenden &#8220;Folter&#8221;. Im Zeitalter der Kommunikation k&#246;nnte es nat&#252;rlich sein, dass Dateien weitergegeben werden. Als Beurteiler sollte man das herausfinden, so dass man diese Dateien wieder zur&#252;ckgeben kann <img src='http://blog.oncode.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> &#8230;</p>
<p>Eine der M&#246;glichkeiten unter Linux ist der <a href="http://www.cs.vu.nl/~dick/sim.html">similarity-tester</a>. Er kann Code in verschiedenen Programmiersprachen oder auch Text vergleichen. Als Argument &#252;bernimmt er eine Liste von Dateien f&#252;r den Vergleich.</p>
<p>Angenommen, man hat die Dateinamen vorgeschrieben und alle Resultate lokal, so listet folgender Befehl die &#196;hnlichkeiten prozentual auf, absteigend geordnet.</p>
<p>[cc lang="bash]<br />
sim_text -e -s -p `find . -name &#8216;aufgabe.vb&#8217;`<br />
[/cc]</p>
<p>Wer sich in die Optionen einarbeiten m&#246;chte, sei auf die Manpage verwiesen.</p>
<p>Eine weitere M&#246;glichkeit w&#228;re <a href="http://manpages.ubuntu.com/manpages/karmic/man1/simhash.1.html">Simhash</a>. Leider bin ich zu dumm es zu verstehen und f&#252;r meine Bed&#252;rfnisse aufzurufen.</p>
<p>Hat jemand vielleicht eine noch komfortablere L&#246;sung? Vielleicht auch f&#252;r Bin&#228;rdateien?</p>

<p><a href="http://feedads.g.doubleclick.net/~a/UhaSKMhZludS5OnEQGo4Ow7XN4s/0/da"><img src="http://feedads.g.doubleclick.net/~a/UhaSKMhZludS5OnEQGo4Ow7XN4s/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/UhaSKMhZludS5OnEQGo4Ow7XN4s/1/da"><img src="http://feedads.g.doubleclick.net/~a/UhaSKMhZludS5OnEQGo4Ow7XN4s/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=0JOfxsZzfG4:dKhZVPKVDCU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=0JOfxsZzfG4:dKhZVPKVDCU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?i=0JOfxsZzfG4:dKhZVPKVDCU:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=0JOfxsZzfG4:dKhZVPKVDCU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?i=0JOfxsZzfG4:dKhZVPKVDCU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=0JOfxsZzfG4:dKhZVPKVDCU:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TechnikGothicUndAnderes/~4/0JOfxsZzfG4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.oncode.info/2009/11/12/text-oder-quellcodedateien-auf-aehnlichkeit-pruefen-unter-linux/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.oncode.info/2009/11/12/text-oder-quellcodedateien-auf-aehnlichkeit-pruefen-unter-linux/</feedburner:origLink></item>
		<item>
		<title>m:n Beziehungen zu Lookup-Tables mit einem SQL-Befehl erstellen</title>
		<link>http://feeds.oncode.info/~r/TechnikGothicUndAnderes/~3/p6FHPUI3U48/</link>
		<comments>http://blog.oncode.info/2009/11/11/mn-beziehungen-zu-lookup-tables-mit-einem-sql-befehl-erstellen/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 07:35:40 +0000</pubDate>
		<dc:creator>skaldrom</dc:creator>
				<category><![CDATA[Theorie und Schnipsel]]></category>
		<category><![CDATA[insert]]></category>
		<category><![CDATA[Lookup]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[select]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://blog.oncode.info/?p=1380</guid>
		<description><![CDATA[Mei m:n Verbindungen mit Lookup-Tables k&#246;nnen die Verbindungen in einem SQL-Statement gemacht werden. Dieser Beitrag zeigt wie.]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.oncode.info/wp-content/uploads/2009/11/puzzle.png" alt="puzzle" title="puzzle" width="186" height="147" class="lead" align="left"/>Bei diesen Beitrag habe ich echt &#252;berlegt, ihn unter einem anderen Namen zu ver&#246;ffentlichen. Ist der Inhalt doch eigentlich sowas von trivial und f&#252;r Menschen mit mehr als zwei Hirnzellen wahrscheinlich sowieso offensichtlich. Aber das Gef&#252;hl, das mich durchflutet hat als mich Erkenntnis k&#252;sste war so erf&#252;llend und erhebend, dass ich dieses gerne mit Euch teilen w&#252;rde. </p>
<p>SQL ist eine geniale Erfindung. Zwar wird es im Moment arg von den schm&#228;chtigen <a href="http://en.wikipedia.org/wiki/NoSQL">noSQL</a> bedr&#228;ngt, aber es wird wie triumphieren *star-wars-musik-on*, denn die Anderen werden untergehen wie die noAngels, es wird gewinnen wie die Maden &#252;ber die noMaden, h&#228;ufiger verwendet werden, so wie es das Ah gegen&#252;ber noAh wird und edler sein, wie der Orden gegen&#252;ber noRden! Ich bin heute noch auf der Suche nach der vern&#252;nftigen Frage, die nicht in ein einziges SQL-Statement verpackt werden kann.*star-wars-musik-off*</p>
<h3>Beispiel-Schema</h3>
<p>Doch zur&#252;ck zum Problem: Es seien Entit&#228;ten gegeben, die m:n Beziehungen zu &#8220;lookup-Werten&#8221; haben. Ein bestehender Wert in einem Set also, das sich selten &#228;ndert wie beispielsweise Kategorien, Zust&#228;nde, Farben, L&#228;ndercodes, Geschlechter oder so etwas. Ein weiterer Use Case w&#228;re ein Import, bei dem die Datens&#228;tze schon erstellt wurden und nun nur noch die Verbindungen fehlen.</p>
<p>Hier ein Beispiel:<br />
<strong>Personen</strong> beinhalten, ja ratet mal, Personen.Hier vereinfacht nur mit Namen und Vornamen.<br />
<strong>Personentypen</strong> bezeichnen die Art der Person. Beispielsweise <em>Lernender</em>, <em>Lehrperson</em>, <em>Verwaltungsangestellter</em> oder auch <em>Schulleiter</em>.</p>
<p>Jede Person kann mehreren Personentypen entsprechen. Diagnose: klassisches m:n mit Verbindungstabelle (<strong>personen_personentypen</strong>).</p>
<p><a href="http://blog.oncode.info/wp-content/uploads/2009/11/erd.png"><img src="http://blog.oncode.info/wp-content/uploads/2009/11/erd-300x82.png" alt="ERD-Diagramm einer m:n Beziehung" title="ERD-Diagramm einer m:n Beziehung" width="300" height="82" class="alignnone size-medium wp-image-1381" /></a></p>
<p>Die Inhalte der Tabellen gestalten sich folgendermassen:</p>
<p><strong>Personen</strong></p>
<pre>
+----+---------------+-----------+
| id | name          | vorname   |
+----+---------------+-----------+
|  1 | Schinkler     | Sebastian |
|  2 | Moser         | Hanspeter |
|  3 | Gublinsbacher | Anneli    |
|  4 | Iltis         | Mahara    |
+----+---------------+-----------+
</pre>
<p><strong>Personentypen</strong></p>
<pre>
+----+-------------------------+
| id | personentyp             |
+----+-------------------------+
|  1 | Lernender               |
|  2 | Lehrperson              |
|  3 | Verwaltungsangestellter |
|  4 | Schulleiter             |
+----+-------------------------+
</pre>
<h3>Insert kombiniert mit Select</h3>
<p>Der alte Ablauf war folgendermassen:</p>
<ol>
<li>Lese ID von Personen.</li>
<li>Lese ID von Personentypen.</li>
<li>F&#252;ge einen neuen Verbindungsdatensatz in personen_personentypen ein.</li>
</ol>
<p>Doch es geht viel einfacher! Die Werte, die in personen_personentypen eingef&#252;gt werden sollen, k&#246;nnen direkt im Statement selektiert werden. Grunds&#228;tzlich f&#252;gt man also das Resultat einer Abfrage ein:</p>
<p>[cc lang="sql"]<br />
INSERT INTO personen_personentypen<br />
  SELECT p.id, pt.id FROM personen p, personentypen pt<br />
    WHERE p.name=&#8217;Moser&#8217; AND p.vorname=&#8217;Hanspeter&#8217; AND pt.personentyp=&#8217;Lehrperson&#8217;<br />
[/cc]</p>
<p>Wirklich effizient wird es, wenn man gerade mehrere Lookupwerte verbindet:<br />
[cc lang="sql"]<br />
INSERT INTO personen_personentypen<br />
  SELECT p.id, pt.id FROM personen p, personentypen pt<br />
    WHERE p.name=&#8217;Gublinsbacher&#8217; AND p.vorname=&#8217;Anneli&#8217; AND pt.personentyp IN(&#8216;Verwaltungsangestellter&#8217;, &#8216;Schulleiter&#8217;)<br />
[/cc]</p>
<p>Jaaa, mit so einfachen Dingen kann man mich gl&#252;cklich und zufrieden machen&#8230;</p>

<p><a href="http://feedads.g.doubleclick.net/~a/5yyjGC5RUX9k2L0Z1eZk_G1J69k/0/da"><img src="http://feedads.g.doubleclick.net/~a/5yyjGC5RUX9k2L0Z1eZk_G1J69k/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/5yyjGC5RUX9k2L0Z1eZk_G1J69k/1/da"><img src="http://feedads.g.doubleclick.net/~a/5yyjGC5RUX9k2L0Z1eZk_G1J69k/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=p6FHPUI3U48:YzfaUUWhc4c:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=p6FHPUI3U48:YzfaUUWhc4c:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?i=p6FHPUI3U48:YzfaUUWhc4c:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=p6FHPUI3U48:YzfaUUWhc4c:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?i=p6FHPUI3U48:YzfaUUWhc4c:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=p6FHPUI3U48:YzfaUUWhc4c:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TechnikGothicUndAnderes/~4/p6FHPUI3U48" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.oncode.info/2009/11/11/mn-beziehungen-zu-lookup-tables-mit-einem-sql-befehl-erstellen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.oncode.info/2009/11/11/mn-beziehungen-zu-lookup-tables-mit-einem-sql-befehl-erstellen/</feedburner:origLink></item>
		<item>
		<title>Kubuntu update und GRUB Wiederherstellung</title>
		<link>http://feeds.oncode.info/~r/TechnikGothicUndAnderes/~3/SfERxuYu73o/</link>
		<comments>http://blog.oncode.info/2009/11/01/kubuntu-update-und-grub-wiederherstellung/#comments</comments>
		<pubDate>Sun, 01 Nov 2009 17:13:32 +0000</pubDate>
		<dc:creator>skaldrom</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Grub]]></category>
		<category><![CDATA[Kubuntu]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Menu]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://blog.oncode.info/?p=1371</guid>
		<description><![CDATA[Entropie in Reinkultur: Alles tendiert zum gr&#246;sstm&#246;glichen Chaos und guter Wille pflastert den Weg ins Grab. Auf meinem Lieblingsrechner wurde vor langer Zeit Kubuntu installiert. Mit dem Update auf Version 9.10 hat sich gerade eine schon lange f&#228;llige Neuinstallation von Windows gekreuzt. (Neuinstallation weil: Vista Basic Home Premium &#8211; entgegen der Meinung des MS Update-Assistant [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.oncode.info/wp-content/uploads/2009/11/facepalm.png" alt="facepalm" title="facepalm" height="170" class="lead" align=left />Entropie in Reinkultur: Alles tendiert zum gr&#246;sstm&#246;glichen Chaos und guter Wille pflastert den Weg ins Grab. Auf meinem Lieblingsrechner wurde vor langer Zeit <a href="http://www.kubuntu.org/">Kubuntu</a> installiert. Mit dem Update auf Version 9.10 hat sich gerade eine schon lange f&#228;llige Neuinstallation von Windows gekreuzt. (Neuinstallation weil: <i>Vista Basic Home Premium</i> &#8211; entgegen der Meinung des MS Update-Assistant &#8211; nicht auf <i>Windows 7 Professional</i> upgedatet werden kann. Warum? Das weiss wohl nur ein <i>Microsoft Certified Client System Upgrade Engineer</i>, der wohl ein <i>Live Upgrade</i> &#252;ber <i>Windows Vista Home Half Master Business Game Edition</i> oder so empfehlen w&#252;rde *gna*.)</p>
<p>Windows startet nun wunderbar, hat aber nat&#252;rlich meinen Bootloader (GRUB) &#252;berschrieben und ich kann nimmer in mein geliebtes, frisch upgedatetes Kubuntu booten. Das kennen wir von fr&#252;her und mit Hilfe einer Boot-CD hat das schon bei Lilo wunderbar geklappt. Nicht jedoch dieses mal: Fehlermeldungen von nicht gefundenen Partitionen (<tt>"Could not find device for /boot: Not found or not a block device."</tt>) lachten Hohn &#252;ber <a href="http://wiki.ubuntuusers.de/GRUB">ganz</a> <a href="http://ubuntuforums.org/showthread.php?t=224351">verschiedene</a> <a href="http://www.belug.de/hilfe/howtos/bootloader-grub/">Anleitungen</a>.</p>
<p>Ein paar ausgerissene Haarb&#252;schel sp&#228;ter und nach einer sehr formal geordneten Analyse (*lach*) hab ich dann das Problem erfasst. Beim Update wird der alte Grub 0.97 weiterverwendet, eine Neuinstallation (und auf der 9.10 Life-CD) ist der neue Grub 1.97.</p>
<p>Nach ein paar weiteren Tritten gegen die Maschine war die L&#246;sung dann einfach: Eine <em>alte</em> Knoppix mit <em>altem</em> Grub rausgekramt, gebootet:</p>
<pre>
$> sudo grub
grub> find /boot/grub/stage1
 (hd0,5)
grub> root (hd0,5)
grub> setup (hd0)
grub> quit
</pre>
<p>Und alle sind wieder gl&#252;cklich, die Haare wachsen nach, die Falten werden sich wieder gl&#228;tten und die neuen Dellen im PC werden nicht weiter auffallen (is ja ein Dell *h&#246;h&#246;_und_schenkelklopf*).</p>

<p><a href="http://feedads.g.doubleclick.net/~a/X9sh_6KxTZpYPxDVVt_0zJ5mBxU/0/da"><img src="http://feedads.g.doubleclick.net/~a/X9sh_6KxTZpYPxDVVt_0zJ5mBxU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/X9sh_6KxTZpYPxDVVt_0zJ5mBxU/1/da"><img src="http://feedads.g.doubleclick.net/~a/X9sh_6KxTZpYPxDVVt_0zJ5mBxU/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=SfERxuYu73o:69ANTrBQsMw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=SfERxuYu73o:69ANTrBQsMw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?i=SfERxuYu73o:69ANTrBQsMw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=SfERxuYu73o:69ANTrBQsMw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?i=SfERxuYu73o:69ANTrBQsMw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.oncode.info/~ff/TechnikGothicUndAnderes?a=SfERxuYu73o:69ANTrBQsMw:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/TechnikGothicUndAnderes?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TechnikGothicUndAnderes/~4/SfERxuYu73o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.oncode.info/2009/11/01/kubuntu-update-und-grub-wiederherstellung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.oncode.info/2009/11/01/kubuntu-update-und-grub-wiederherstellung/</feedburner:origLink></item>
	</channel>
</rss>
