<?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>KM2 &#62;&#62; Neuerfindung &#187; Technikzeugs</title>
	<atom:link href="http://www.km2.de/blog/tags/technikzeugs/feed" rel="self" type="application/rss+xml" />
	<link>http://www.km2.de/blog</link>
	<description>Arbeitstitel</description>
	<lastBuildDate>Fri, 10 Feb 2012 10:57:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Non Blocking JavaScript</title>
		<link>http://www.km2.de/blog/2009/12/02/non-blocking-javascript.html</link>
		<comments>http://www.km2.de/blog/2009/12/02/non-blocking-javascript.html#comments</comments>
		<pubDate>Wed, 02 Dec 2009 12:48:39 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Background Task]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Nebenläufigkeit]]></category>
		<category><![CDATA[Technikzeugs]]></category>

		<guid isPermaLink="false">http://www.km2.de/blog/?p=3154</guid>
		<description><![CDATA[JavaScript ist toll. Ja. Und ist heute aus der Webentwicklung nicht mehr wegzudenken. Allerdings hat Javascript einen kleinen Schwachpunkt: Es gibt keine Nebenläufigkeit. JavaScript wird linear ausgeführt*. Will man beispielsweise länger dauernde Operationen in JavaScript realisieren, gerät man schnell an den Punkt, dass der Browser nicht reagiert, blockiert, träge wird. Eine Lösung dies zu umgehen [...]]]></description>
			<content:encoded><![CDATA[<p>JavaScript ist toll. Ja. Und ist heute aus der Webentwicklung nicht mehr wegzudenken. Allerdings hat Javascript einen kleinen Schwachpunkt: Es gibt keine Nebenläufigkeit. JavaScript wird linear ausgeführt*.</p>
<p>Will man beispielsweise länger dauernde Operationen in JavaScript realisieren, gerät man schnell an den Punkt, dass der Browser nicht reagiert, blockiert, träge wird. Eine Lösung dies zu umgehen gibt es: Die Algorithmen dahingehend ändern, nur kleine Teile des Problems auf einmal zu berechnen.</p>
<p><span id="more-3154"></span><strong>Beispiel:<span> Alle Zahlen von 0 bis 100000 zusammenzählen.</span></strong></p>
<pre>var sum = 0;
for (var i = 0; i &lt; 1000000; i++) {
    sum += i;
}</pre>
<p>Diese Schleife blockiert und das Script reagiert träge bzw. gar nicht mehr. Damit man nun das Rad nicht neu erfinden muss, hat <a href="http://www.tumuski.com/">Thomas </a><span><a href="http://www.tumuski.com/">Peri</a> eine sehr interessante JavaScript-Bibliothek geschrieben: <a href="http://www.tumuski.com/code/clumpy/overview/">Clumpy</a>. </span></p>
<p><span>Clumpy versucht eine Pseudonebenläufigkeit in JavaScript zu realisieren, und das auf eine sehr elegante Art.</span></p>
<p><strong><span>Beispiel: Die obere Schleife mit dem Clumpy-Way-Of-Life:</span></strong></p>
<pre>var sum = 0;
clumpy.for_loop(
    function () { i = 0; },
    function () { return i &lt; 100000; },
    function () { i++; },
    function () {
        sum += i;
    }
);</pre>
<p>Clumpy kann aber noch viel mehr: Verschachtelung von Schleifen, Verkettung, saubere Notification über den Status &#8230; etc &#8230; <em>I am impressed my dear!</em></p>
<p><em>* Die asynchronen HTTP-Requests werden über, nun ja, </em><em>esoterische Mittel realisiert, damit eine Anfrage nicht blockiert.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.km2.de/blog/2009/12/02/non-blocking-javascript.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP5: Keine Ausnahmen bei den Exceptions</title>
		<link>http://www.km2.de/blog/2009/11/20/php5-keine-ausnahmen-bei-den-exceptions.html</link>
		<comments>http://www.km2.de/blog/2009/11/20/php5-keine-ausnahmen-bei-den-exceptions.html#comments</comments>
		<pubDate>Fri, 20 Nov 2009 16:08:40 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Exceptions]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Technikzeugs]]></category>

		<guid isPermaLink="false">http://www.km2.de/blog/?p=3138</guid>
		<description><![CDATA[PHP gehört zu Sprachen, die einen unglaublich schlechten Ruf genießen. Dieser Ruf gründet sich hauptsächlich auf die teilweise sehr pragmatisch implementierten Konzepte in Version 4 der Sprache. PHP 5 war für alle die eine größere Codebasis pflegen ein echter Sprung nach vorne. Und jetzt, fünf Jahre nach Veröffentlich von PHP 5, haben selbst die faulsten [...]]]></description>
			<content:encoded><![CDATA[<p>PHP gehört zu Sprachen, die einen unglaublich schlechten Ruf genießen. Dieser Ruf gründet sich hauptsächlich auf die teilweise sehr <em>pragmatisch</em> implementierten Konzepte in Version 4 der Sprache. PHP 5 war für alle die eine größere Codebasis pflegen ein echter Sprung nach vorne. Und jetzt, fünf Jahre nach Veröffentlich von PHP 5, haben selbst die <span style="text-decoration: line-through;">faulsten</span> konservativsten Systemadministratoren Updates installiert und man kann als Hacker endlich davon bei der täglichen Arbeit profitieren. Zum Beispiel, bei der Fehlerbehandlung.<br />
Das Problem ist so alt wie die Programmierung: Was mache ich mit Fehlern? Also keinen logischen Fehlern, sondern nicht vorhersagbare Seiteneffekte  Fehler die entstehen, weil eine Datei nicht schreibbar ist, ein Server nicht erreichbar oder weil der Drucker schlicht lichterloh in Flammen steht?</p>
<p><span id="more-3138"></span>Jeder der ernsthaft in PHP programmiert, weiß, dass die eingebaute Fehlerbehandlung eher suboptimal umgesetzt sind. Der Errorhandler spuckt zwar artig Meldungen aus, jedoch greift nicht die beste Neuerung in PHP 5: Exceptions. Bei Builtin-Funktionen auf Rückgabewerte abzufragen funktioniert, jedoch setzt das eine ziemlich große Disziplin bei den Entwicklern voraus. Schön ist anders. Bei selbst geschriebenem Code kann man auf Exceptions setzen, doch dann muss man stets zwei Fehlerkonzepte in seiner Architektur vereinen.<br />
Daher hier ein wenig Code, mit dem man die Fehlerbehandlung von Built-In-Funktionen durch Exceptions spiegeln kann. Dazu wird ein eigener Fehlerhandler installiert, der jede auftretende Fehlermeldung in eine Exception umwandelt. Zwar alles mehr eine Skizze, aber man versteht das Prinzip.</p>
<p><strong>Beispiel:</strong></p>
<pre>FaultHandler::install();
try {
    // Wirft eine Exception
    eregi ();
} catch (Exception $e) {
    //  Insert additional magic:
    //  HTTP-Status-Code, JSON convert, Error-Logging ...
    print $e;
}
FaultHandler::uninstall ();</pre>
<p>Hier die Implementierung:</p>
<pre>class FaultException extends Exception {

     public function __construct($msg, $code, $file, $line) {
          parent::__construct($msg, $code);
          $this-&gt;file = $file;
          $this-&gt;line = $line;
          //     get a well rendered stack trace
          $this-&gt;trace = FaultException::getStackTrace ();
     }     //     end method __construct

     function __toString () {
          return ("".parent::__toString ()."\n\n".$this-&gt;trace."");
     }     //     end method __toString

     function getStackTrace () {
          $NL = "\n";
          $dbgTrace = debug_backtrace();
          $dbgMsg .= "Debug backtrace:".$NL;
          $dbgTrace = array_reverse ($dbgTrace);
          for ($i = 0; $i &lt; count ($dbgTrace) - 3; $i++) {
              $dbgInfo = $dbgTrace[$i];
             $dbgMsg .= "#".($i).": "
                       .$dbgInfo['file']." (line ".$dbgInfo['line'].")"
                       ."-&gt; "
                       .$dbgInfo['function']." "
                       ."(".join (", ",$dbgInfo['args']).")".$NL;
          }
          return $dbgMsg;
     }     //     end method getStackTrace

}     //     end class FaultException

abstract class FaultHandler {

     public static function install () {
          set_error_handler (array ("FaultHandler", "handleError"));
     }     //     end method install

     public static function uninstall () {
          restore_error_handler();
     }     //     end method uninstall

     public static function handleError ($no, $str, $file, $line) {
          throw new FaultException ($str, $no, $file, $line);
     }     //     end method handleError

}     //     end class FaultHandler</pre>
<p>Ausbaumöglichkeiten gibt es viele: Innerhalb einer JSON-Schnittstelle könnte man sich seine Fehlermeldungen als schöne Exception-Nachrichten schicken lassen oder Logging einbauen oder oder oder.</p>
<p>Vielleicht finde ich ja mal Zeit, mehr als nur eine Skizze zu schreiben.<em> Stay tuned.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.km2.de/blog/2009/11/20/php5-keine-ausnahmen-bei-den-exceptions.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Go-Lang: Und alle so Yeah. Alex Sneak Peek in eine unfertige Sprache</title>
		<link>http://www.km2.de/blog/2009/11/12/go-lang-und-alle-so-yeah-alex-sneak-peek-in-eine-unfertige-sprache.html</link>
		<comments>http://www.km2.de/blog/2009/11/12/go-lang-und-alle-so-yeah-alex-sneak-peek-in-eine-unfertige-sprache.html#comments</comments>
		<pubDate>Thu, 12 Nov 2009 10:02:59 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Programmiersprache]]></category>
		<category><![CDATA[Technikzeugs]]></category>

		<guid isPermaLink="false">http://www.km2.de/blog/?p=3115</guid>
		<description><![CDATA[Programmieren, so meinen die Google-Ingenieure, sei viel zu schwierig. Also sind sie hingegangen und haben ein interessantes soziologisches technisches Experiment gestartet: Mit Googles Hebel eine Programmiersprache in freier Wildnis zu entwerfen: Go-Lang. Denn wenn selbst eine Hardwarebude wie Apple daher kommt und anfängt die Urgroßmutter C um neue Sprachfeatures zu erweitern, kann es ja nicht [...]]]></description>
			<content:encoded><![CDATA[<p><em>Programmieren</em>, so meinen die Google-Ingenieure, <em>sei viel zu schwierig.</em> Also sind sie hingegangen und haben ein interessantes <del datetime="2009-11-12T08:54:43+00:00">soziologisches</del> technisches Experiment gestartet: Mit Googles Hebel eine Programmiersprache in freier Wildnis zu entwerfen: <a href="http://golang.org/">Go-Lang</a>.</p>
<p>Denn wenn selbst eine Hardwarebude wie Apple daher kommt und anfängt die Urgroßmutter C um neue Sprachfeatures zu erweitern, kann es ja nicht angehen, dass die Damen und Herren bei Google zurückstehen. Mit Versprechungen halten die Go-Macher nicht gerade hinter dem Berg: Einfaches Programmieren, schneller Code, einfach umzusetzende Nebenläufigkeit, Spaß soll es auch noch machen und dass es Open Source ist versteht sich ja von selbst. Dann muss es ja wohl gut sein, oder?</p>
<p>Oder? <em>Oder!?</em></p>
<p>Nein, gut ist anders. Viel und ganz anders. So begrüßenswert der Versuch auch sein mag, eine fixe Sprache mit eingebautem Garbage Collector zu etablieren &#8230; die Konzepte wirken nicht eigenständig oder gar wie aus einem Guss. Mehr wie die Hochzeitsszene aus der Dreigroschenoper, mit einer Braut wie aus einem Tim-Burton-Film. Etwas Neues, etwas Gebrauchtes und etwas Blaues. Und mit Zombies.</p>
<p>Man glaubt es kaum: Google verzichtet auf LLVM und stampft stattdessen eine eigene Toolchain aus dem Boden. Der 6g-Compiler ist trotzdem ziemlich fix und mit den Fehlermeldungen kann man arbeiten. Effizienter Compilerbau ist keine Kleinigkeit, gerade wenn man die Sprachfeatures nicht mal halbwegs spezifiziert hat. Hut ab Google, Yeah!</p>
<p>Die Features und Konzepte sind dann aber schon weniger <em>Yeah!</em>: Keine Typehierachie, dafür aber Interfaces, das Modulkonzept ist eine wilde Mischung aus Java und Python, keine Exceptions, Unicode-Unterstützung nur über zusätzliche Module (wtf?!), kein sauberes Asserting (hey, <a href="http://golang.org/doc/go_faq.html#Where_is_assert">by design</a> *hust*) und  von dem Versprechen der <strong>einfachen</strong> Nebenläufigkeit ist man noch Lichtjahre entfernt.</p>
<p>Egal. Hey, jeder Hacker sollte wenigstens einmal in seinem Leben eine Programmiersprache entwickelt haben. Das geht schon in Ordnung, auch wenn das Ergebnis wirkt wie eine Chimäre aus C, C++, Erlang, Python und Scala.</p>
<p>Wirklich interessant ist aber wie die Community reagiert. Bis heute morgen sind etwa 600 Mails aufgeschlagen, Interesse ist also da. Neben der <em>- nachvollziehbaren -</em> Forderung nach Exceptions und sonstigem technischem Zuckerguss, fragen Leute (ernsthaft!), ob Go nicht die richtige Sprache für die Umsetzung ihrer Business-Transaktionen sei. Immerhin stamme sie ja von Google, da müsse das ja gut sein.Oder, ob nicht jemand Lust hätte, ein MVC-Framework zu schreiben, denn Go sei ganz toll und alles was man bräuchte wäre ein bisschen Code um in Gang zu kommen. Oder, ob jemand nicht einen MySQL-Treiber schreiben wollte, den bräuchte nämlich jemand. Dringend!</p>
<p>Kleine Projekte, kleine Sorgen &#8211; große Projekte, große Sorgen. Immerhin haben sie ein süßes Maskottchen.</p>
<p><a rel="attachment wp-att-3116" href="http://www.km2.de/blog/2009/11/12/go-lang-und-alle-so-yeah-alex-sneak-peek-in-eine-unfertige-sprache.html/logo-153x55"><img class="alignnone size-full wp-image-3116" title="logo-153x55" src="http://www.km2.de/blog/wp-content/uploads/2009/11/logo-153x55.png" alt="logo-153x55" width="153" height="55" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.km2.de/blog/2009/11/12/go-lang-und-alle-so-yeah-alex-sneak-peek-in-eine-unfertige-sprache.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Your Operating System is not supported.</title>
		<link>http://www.km2.de/blog/2009/07/05/your-operating-system-is-not-supported.html</link>
		<comments>http://www.km2.de/blog/2009/07/05/your-operating-system-is-not-supported.html#comments</comments>
		<pubDate>Sun, 05 Jul 2009 20:49:36 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Dateien synchronisieren]]></category>
		<category><![CDATA[Dropbox]]></category>
		<category><![CDATA[Technikzeugs]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.km2.de/blog/?p=2328</guid>
		<description><![CDATA[Gestern erhielt ich meine Einladung zu Ubuntu One &#8211; einem Dienst der Dateien über Rechnergrenzen hinweg synchron halten will. Wer viel mit (vielen) Dateien hantiert und diese dann auch auf mehreren System bearbeiten will, kennt das Problem: Wie bekomme ich unterschiedlichen Versionen in den Griff? USB-Sticks vergisst man (ich zumindest), Dateien über SCP oder FTP [...]]]></description>
			<content:encoded><![CDATA[<p>Gestern erhielt ich meine Einladung zu <a href="https://ubuntuone.com/">Ubuntu One</a> &#8211; einem Dienst der Dateien  über Rechnergrenzen hinweg synchron halten will. Wer viel mit (vielen) Dateien hantiert und diese dann auch auf mehreren System bearbeiten will, kennt das Problem: Wie  bekomme ich unterschiedlichen Versionen in den Griff? USB-Sticks vergisst man (ich zumindest), Dateien über SCP oder FTP zu verteilen ist (mir) zu mühsam und  aus dem Alter, mir selbst eMails mit Dateianhängen zu schicken bin ich definitiv  raus (das ist so 2003).</p>
<p>Im Moment nutze ich <a href="http://www.getdropbox.com/">Dropbox</a> um genau  dieses Problem zu beseitigen. Dropbox integriert sich nahtlos auf Dateisystemebene:  Alle Dateien eines Verzeichnisses werden auf Änderungen überwacht und nur die  Änderungen werden an einen zentralen Server übertragen.  Wird in einer hundert MiB große Datei ein Byte geändert, geht genau dieses eine  Byte über die Leitung (plus ein bisschen Overhead). Alle Clients synchronisieren sich selbstständig mit dem Server.</p>
<p>Der enorme Vorteil: Es funktioniert Out-of-the-box auf allen drei wichtigen  Plattformen: Windows, Linux und Mac (und läuft sogar mit ein bisschen Bastelei  unter *BSD, aber die sind Bastelei gewohnt).</p>
<p>Die Sache wäre so schön, gäbe es da nicht einen Haken: Dropbox ist Closed-Source.</p>
<p>Die Jungs von getdropbox.com machen einen netten Eindruck, keine Frage, sind  bestimmt Kumpeltypen, ich würde mit denen <a href="http://www.km2.de/blog/2009/06/30/eine-frage-der-ehre-in-golf-we-trust-2009.html">Crossgolf spielen</a> und so.  Aber ich würde schon gerne einmal sehen, was da mit meinen Dateien <em>genau</em> passiert.</p>
<p>Da kam mir die Einladung zu Ubtuntu One gerade recht. <em>Sache geritzt</em>,  dachte ich mir: Gleiches Funktionsprinzip wie Dropbox, Open-Source-Client, mit  meinen Gebühren unterstütze ich ein tolles Projekt und brauche mich nicht mehr  zu ärgern.</p>
<p><em>Aber Pustekuchen!</em></p>
<p>An dieser Stelle der Hinweis: Das hier ist kein Rant. Ich will den Ubuntu-Entwicklern  gar nicht ihre Arbeit madig machen (Jungs, ihr macht einen tollen Job!). Aber  welcher Teufel hat euch denn geritten in eine <em>Public Beta</em> zu gehen und nur Clients für  Ubuntu anzubieten? Denkt ihr wirklich, es gäbe da draußen nur noch Ubuntu Boxen?</p>
<p>Diese Plattformbeschränkungen nerven (gewaltig!) und waren jahrelang einer der  berechtigten Hauptkritikpunkte an Microsoft aus der Open-Source-Szene.</p>
<p>Ich brauche meine Daten <strong>überall</strong> wo ich bin. Und nicht nur  dort, wo ein Ubuntu verfügbar ist.</p>
<p>Jetzt könnte ich hingehen und mir selbst einen Client schreiben. Oder den  Source-Code nehmen und ihn porten (so wie ich es sehe ein bis zwei Tage Arbeit,  Python rocks, nur ganz wenige Showstopper). Aber &#8230; will ich das wirklich?  Das  ist <strong>nicht</strong> Ubuntu-Style, echt nicht. Ubuntu-Style ist One-Click,  Erdtöne und freundliche Icons.</p>
<p>Ehrlich: Alternative Systeme haben nur dann eine Chance, wenn sie selbst zum Ziel  haben, sich überflüssig zu machen, unsichtbar zu sein. Erfolg wird durch Austauschbarkeit definiert. Insellösungen, gekappselt und isoliert von anderen  Systemen mögen zu DOS-Zeiten funktioniert haben. Aber heute? Selbst Microsoft hat das mittlerweile erkannt. Jetzt war das doch ein Rant. <em>Snark.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.km2.de/blog/2009/07/05/your-operating-system-is-not-supported.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

