<?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>tkdmatze</title>
	<atom:link href="http://blog.tkdmatze.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.tkdmatze.de</link>
	<description>tkdmatze`s Blog</description>
	<lastBuildDate>Sun, 13 Nov 2011 10:55:39 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Wochenendprojekt : Chromium OS</title>
		<link>http://blog.tkdmatze.de/2011/11/13/wochenendprojekt-chromium-os/</link>
		<comments>http://blog.tkdmatze.de/2011/11/13/wochenendprojekt-chromium-os/#comments</comments>
		<pubDate>Sun, 13 Nov 2011 10:55:39 +0000</pubDate>
		<dc:creator>tkdmatze</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[MyWeb]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://blog.tkdmatze.de/?p=137</guid>
		<description><![CDATA[In der aktuellen Computerbild gibt es ein &#8220;Blitzstartsystem&#8221;, welche &#8220;Chromium&#8221; enth&#228;lt. Was sehr verwunderlich ist, da Google das ganze selbst noch nicht als stabil oder fertig deklariert. Aber ein Grund das ganz mal selbst auszuprobieren! Hat man ein Netbook, hat man das Problem, dass die CD einem gar nichts n&#252;tzt, braucht man auch nicht. Alles [...]]]></description>
			<content:encoded><![CDATA[<!-- AdSense Now! V1.51 -->
<!-- Post[count: 3] -->
<div class="adsense adsense-leadin" style="text-align:center;margin: 12px;"><script type="text/javascript"><!--
google_ad_client = "pub-0411621300036665";
/* 468x60, Erstellt 19.06.09 */
google_ad_slot = "7390492302";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div><p>In der aktuellen Computerbild gibt es ein &#8220;Blitzstartsystem&#8221;, welche &#8220;Chromium&#8221; enth&#228;lt. Was sehr verwunderlich ist, da Google das ganze selbst noch nicht als stabil oder fertig deklariert.</p>
<p>Aber ein Grund das ganz mal selbst auszuprobieren!</p>
<p>Hat man ein Netbook, hat man das Problem, dass die CD einem gar nichts n&#252;tzt, braucht man auch nicht. Alles was man zum Testen braucht ist ein USB-Stick mit mindestens 4 GB.</p>
<h3>Testvorbereitung</h3>
<p>Mein Testsystem ist ein Samsung NC 10 Plus. Fertige Builds gibts bei <a title="Hexxeh" href="http://chromeos.hexxeh.net/" target="_blank">http://chromeos.hexxeh.net/</a>. Dann folgt man einfach der Anleitung auf seiner Seite.Leider scheint die Downloadrate auf 40KB/s gedrosselt, was f&#252;r die 250 MB schon eine etwas l&#228;ngere Wartezeit ben&#246;tigt. Hat man den Download gemeistert, ist man schon fast fertig, entpacken und auf den USB-Stick schreiben. Nun kann man das Netbook neu starten. Im Bios den USB-Stick als 1. Bootlaufwerk ausw&#228;hlen sollte man auch nicht vergessen.</p>
<h3>Mein Test</h3>
<p>Es kann an dem billigen USB-Stick liegen oder daran, dass ich ein &#8220;Debug Build&#8221; erwischt habe, die &#8220;unter 10 Sekunden&#8221; erreiche ich nicht, es sind eher 20 Sekunden, aber weit besser als das vorinstallierte Windows 7. Im Gegensatz zu vielen im Netz wurde unser W-Lan problemlos erkannt. Anmeldung (&#252;ber Google Konto) und Browsen war problemlos m&#246;glich. Die Einrichtung klappte in unter 3 Minuten. Da kamen aber auch schon die ersten kleinen Fehlerteufel. Keiner davon war gravierend, aber sehr unsch&#246;n:</p>
<p>Eine kleine Auswahl:</p>
<ul>
<li>Die Zeitzonenumstellung speichert er nicht, er bleibt beharrlich auf amerikanischer Zeit</li>
<li>Multi- Touch l&#228;sst sich beim Touchpad nicht ausstellen</li>
<li>Silverlight geht quasi gar nicht</li>
</ul>
<p>Sieht man aber von diesen Makeln ab, so macht das System einen sehr flotten und stabilen Eindruck.</p>
<h3>Fazit</h3>
<p>Mein Netbook ist nun problemlos zu einem Chromebook geworden, Chromium OS hat noch einige kleinen Macken, die aber nicht gro&#223; st&#246;ren. Sp&#228;testens wenn Google selbst von einer stabilen Version spricht, ist es eine Alternative f&#252;r Netbook- Besitzer, welche eigentlich nur schnell mal ins Internet wollen.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tkdmatze.de/2011/11/13/wochenendprojekt-chromium-os/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mobbt LG Ossis?</title>
		<link>http://blog.tkdmatze.de/2011/08/02/mobbt-lg-ossis/</link>
		<comments>http://blog.tkdmatze.de/2011/08/02/mobbt-lg-ossis/#comments</comments>
		<pubDate>Tue, 02 Aug 2011 09:49:20 +0000</pubDate>
		<dc:creator>tkdmatze</dc:creator>
				<category><![CDATA[MyWeb]]></category>

		<guid isPermaLink="false">http://blog.tkdmatze.de/?p=134</guid>
		<description><![CDATA[Um neue Produkte toll in Szene zu setzen, gibt es mittlerweile M&#246;glichkeiten zu Hauf. &#8220;Interaktive&#8221; Youtube-Videos wie zB http://www.youtube.com/user/tippexperience von Tipp Ex sind innovativ und sprechen sich schnell herum. Fast 10 Millionen Aufrufe sind ein top Wert. Allerdings kann es auch zu Pannen kommen, zum Beispiel, wenn es um Fakes geht, wird aus Begeisterung schnell Ver&#228;rgerung. [...]]]></description>
			<content:encoded><![CDATA[<p>Um neue Produkte toll in Szene zu setzen, gibt es mittlerweile M&#246;glichkeiten zu Hauf.</p>
<p>&#8220;Interaktive&#8221; Youtube-Videos wie zB <a href="http://www.youtube.com/user/tippexperience">http://www.youtube.com/user/tippexperience</a><br />
von Tipp Ex sind innovativ und sprechen sich schnell herum. Fast 10 Millionen Aufrufe sind ein top Wert.</p>
<p>Allerdings kann es auch zu Pannen kommen, zum Beispiel, wenn es um Fakes geht, wird aus Begeisterung schnell Ver&#228;rgerung. Auch wenn ich nicht zu den Verschw&#246;rungstheoretikern wie in diesem <a title="Video" href="http://www.youtube.com/watch?v=Ng6hQfGzQig&amp;feature=player_embedded#at=111" target="_blank">Video</a> geh&#246;re, ist es schon beachtlich, wie oft Schleichwerbung gemacht wird.</p>
<p>Andere Interessante Pannen sind nat&#252;rlich Bugs, also wenn etwas nicht so funktioniert wie gewollt.<br />
Legend&#228;r ist Bill Gates und sein <a href="http://www.youtube.com/watch?v=k9jOi_Jd2dQ&amp;playnext=1&amp;list=PL96AE665CFA8794B6http://www.youtube.com/watch?v=k9jOi_Jd2dQ&amp;playnext=1&amp;list=PL96AE665CFA8794B6" target="_blank">abt&#252;rzendes Windows </a>.</p>
<p>Weit weniger spektakul&#228;r, aber dennoch &#228;rgerlich ist die Seite <a href="http://www.dein-leben-ist-3d.de/">http://www.dein-leben-ist-3d.de/</a> von LG.<br />
Hat man sich durch die sch&#246;n gemachte Pr&#228;sentation geklickt und gibt bei der H&#228;ndlersuche eine Postleitzahl aus Sachsen ein, so werde ich als Leipziger (04229) nach Wuppertal geschickt, immerhin 451km weit. Dresdener (01067) werden nach Mayen(542 km), Auer(08280) nach Rosenheim(451 km) verwiesen. Richtig Gl&#252;cklich k&#246;nnen sich die Chemnitzer (09111) sch&#228;tzen, diese werden gerade einmal 248 km weit nach Schwabach geschickt.</p>
<p>Als Entwickler ist mir klar wie dieser Fehler passieren konnte, als Ossi f&#252;hl ich mich gemobbt.</p>
<p>Also bitte  schnell nachbessern LG!</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tkdmatze.de/2011/08/02/mobbt-lg-ossis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GWT 2.2 kommt mit HTML5 Unterst&#252;tzung</title>
		<link>http://blog.tkdmatze.de/2011/02/16/gwt-2-2-kommt-mit-html5-unterstuetzung/</link>
		<comments>http://blog.tkdmatze.de/2011/02/16/gwt-2-2-kommt-mit-html5-unterstuetzung/#comments</comments>
		<pubDate>Wed, 16 Feb 2011 17:04:03 +0000</pubDate>
		<dc:creator>tkdmatze</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[MyWeb]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://blog.tkdmatze.de/?p=124</guid>
		<description><![CDATA[Nat&#252;rlich gibt es auch anderen &#196;nderungen, wie die Aktualisierung der CellTable oder der Integrierte GWTDesigner, eine &#220;bersicht dazu gibt es hier. Doch die neuen HTML5 Features, mit denen ja einige Firmen wie zB Facebook schon Arbeiten, sollen heute das Thema sein. Vorwarnung GWT ist ein Framework, welches die unterschiedlichen Javascript- Implementierungen der  Browser weitgehend vom Entwickler fernh&#228;lt. [...]]]></description>
			<content:encoded><![CDATA[<p>Nat&#252;rlich gibt es auch anderen &#196;nderungen, wie die Aktualisierung der CellTable oder der Integrierte GWTDesigner,<br />
eine &#220;bersicht dazu gibt es <a href="http://googlewebtoolkit.blogspot.com/2011/02/google-plugin-for-eclipse-and-gwt-22.html?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed:+blogspot/NWLT+(Google+Web+Toolkit+Blog)&amp;utm_content=Google+Feedfetcher" target="_blank">hier</a>. Doch die neuen HTML5 Features, mit denen ja einige Firmen wie zB <a href="http://www.zdnet.de/news/digitale_wirtschaft_internet_ebusiness_facebook_kritisiert_w3c__wir_brauchen_html_5_schon_heute_story-39002364-41539205-1.htm" target="_blank">Facebook</a> schon Arbeiten,<br />
sollen heute das Thema sein.</p>
<h3>Vorwarnung</h3>
<p>GWT ist ein Framework, welches die unterschiedlichen Javascript- Implementierungen der  Browser weitgehend vom Entwickler fernh&#228;lt.<br />
Doch beim Thema HTML5 und vor allem Canvas gibt es nicht nur unterschiedliche Implementierungen, es kann auch gar nicht vorhanden sein.<br />
Um welchen speziellen Browser es sich handelt, muss man wohl kaum erw&#228;hnen, in der neunten Version sollen aber die Features dabei sein.<br />
Wenn es doch schon so weit w&#228;re.</p>
<p>Auch Google hilft einem Webentwickler, welcher die Existenz des b&#246;sen Browsers vergessen hat mit ungewohnten Konstruktoren.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">canvas <span style="color: #339933;">=</span> <span style="color: #003399;">Canvas</span>.<span style="color: #006633;">createIfSupported</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
audio <span style="color: #339933;">=</span> Audio.<span style="color: #006633;">createIfSupported</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h3>Entwicklung</h3>
<p>In Java ist die Entwicklung kaum anders als mit Javascript.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> draw<span style="color: #009900;">&#40;</span><span style="color: #003399;">Canvas</span> toDraw<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		Context2d context <span style="color: #339933;">=</span> toDraw.<span style="color: #006633;">getContext2d</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		context.<span style="color: #006633;">clearRect</span><span style="color: #009900;">&#40;</span>x, y, <span style="color: #cc66cc;">72</span>, <span style="color: #cc66cc;">72</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #003399;">String</span> toPrint <span style="color: #339933;">=</span> image<span style="color: #009900;">&#91;</span>type<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>index <span style="color: #339933;">%</span> image<span style="color: #009900;">&#91;</span>type<span style="color: #009900;">&#93;</span>.<span style="color: #006633;">length</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #003399;">Image</span> map <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Image</span><span style="color: #009900;">&#40;</span>IMAGEPATH <span style="color: #339933;">+</span> toPrint<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		context.<span style="color: #006633;">drawImage</span><span style="color: #009900;">&#40;</span>ImageElement.<span style="color: #006633;">as</span><span style="color: #009900;">&#40;</span>map.<span style="color: #006633;">getElement</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>, x, y<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		index<span style="color: #339933;">++;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	audio.<span style="color: #006633;">getAudioElement</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setSrc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;audio/elf/attack.ogg&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		audio.<span style="color: #006633;">getAudioElement</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setAutoplay</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h3>Sinn und Zweck</h3>
<p>Interessanterweise halte ich Apple&#8217; s iPhone f&#252;r einen Meilenstein der Webentwicklung mit HTML5. Die Entscheidung kein Flash zuzulassen, nebenbei auch kein Siverlight,<br />
hat viele Entwickler vor ein Problem gestellt: <em>Wie kriege ich meine Multimedia-Inhalte aufs iPhone? </em>Neben Videos und Sound geht es auch um dynamische Grafiken.<br />
Und Apple hat als L&#246;sung des Problems HTML5 propagiert.  Seit dem letzten Update des App Stores, dass es verbietet, das finanzielle Transaktionen in Apps am Marketplace vorbeilaufen,<br />
suchen Firmen wie <a href="http://www.heise.de/developer/meldung/Reaktionen-auf-Apples-App-Store-Verkaufszwang-1190551.html" target="_blank">Amazon </a>nach einer Alternative um auf dem iPhone weiterhin vertreten zu sein.</p>
<p>Neben den 3 Tags Audio, Video und Canvas gibt es noch andere Features, wie LocalStorage, Offlinemodus und Websockets, welche ich bald auch im GWT erhoffe.</p>
<p>Auch die Branche der Browser- und Socialgames wird wohl kaum an HTML5 vorbeikommen. Zwar scheint dort Flash der Platzhirsch zu sein, das wird sich aber wohl in den n&#228;chsten Jahren &#228;ndern. Vielleicht schon mit der Version 9 des b&#246;ses Browsers.<br />
Dass es durchaus m&#246;glich ist, mit HTML5 schicke Sachen zu erstellen, soll eine meine kleine Demo zeigen:</p>
<p><a href="http://myasciigenerator.appspot.com/">http://myasciigenerator.appspot.com/</a></p>
<p>Ich hab das &#8220;Preload&#8221; Problem von Canvas nocht nicht ganz behoben, aber es ist auch nur eine Demo.</p>
<p>Grafiken und Sounds stammen aus dem Open-Source Game &#8220;<a href="http://www.wesnoth.org/" target="_blank">Battle for Wesnoth</a>&#8220;.</p>
<p>HTML5 kann und wird ein Flashkiller sein und GWT das Framework f&#252;r Browsergames der Zukunft.</p>
<p>Oder seid ihr anderer Meinung?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tkdmatze.de/2011/02/16/gwt-2-2-kommt-mit-html5-unterstuetzung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dogfooding &#8211; Wenn man f&#252;r sich selbst entwickelt</title>
		<link>http://blog.tkdmatze.de/2010/09/06/dogfooding-wenn-man-fuer-sich-selbst-entwickelt/</link>
		<comments>http://blog.tkdmatze.de/2010/09/06/dogfooding-wenn-man-fuer-sich-selbst-entwickelt/#comments</comments>
		<pubDate>Mon, 06 Sep 2010 19:40:15 +0000</pubDate>
		<dc:creator>tkdmatze</dc:creator>
				<category><![CDATA[MyWeb]]></category>

		<guid isPermaLink="false">http://blog.tkdmatze.de/?p=122</guid>
		<description><![CDATA[eat your own dogfood In der IT bedeudet das, da&#223; man seine eigene Software selbst einsetzen soll. So macht es z.B. Google mit Blogger und Microsoft mit .NET.  Aber auch im Web 2.0 Zeitalter gibt es daf&#252;r gute Beispiele 37signals.com: BaseCamp und Co sind unter der Pr&#228;misse entstanden, es selbst nutzen zu wollen. Und offensichtlich [...]]]></description>
			<content:encoded><![CDATA[<h2>eat your own dogfood</h2>
<p>In der IT bedeudet das, da&#223; man seine eigene Software selbst einsetzen soll. So macht es z.B. Google mit Blogger und Microsoft mit .NET.  Aber auch im Web 2.0 Zeitalter gibt es daf&#252;r gute Beispiele 37signals.com: BaseCamp und Co sind unter der Pr&#228;misse entstanden, es selbst nutzen zu <strong>wollen. </strong>Und offensichtlich wollen auch viele andere die Produkte benutzen. Und das, obwohl viele Experten sich &#252;ber den Erfolg solcher Entwicklungen wundern.</p>
<h2>kenne dich selbst</h2>
<p>Qualit&#228;t von Software hat viele Gesichter, genau wie die Art Software wahrzunehmen. Jeder hat seine eigenen Priorit&#228;ten und Vorlieben.  Um in einem Team gute/benutzbare Software zu schreiben, sollte also f&#252;r jeden Faktor ein entsprechender Typus Mensch vorhanden sein. Denn manche Kriterien schliessen sich normalerweise aus, dort ist es wichtig einen Mittelweg zu finden.  Betrachten wir einmal, bei welchem Entwickler man welchen Kompromiss eingehen muss, denn jeder Entwickler wird seine Priorit&#228;ten auf die Priorit&#228;ten des Projektes anwenden. Sonst wird das Projekt zwar einen Aspekt von Softwarequalit&#228;t &#252;bererf&#252;llen, andere jedoch vernachl&#228;ssigen.  Aber betrachten wir einfach mal die Typen Entwickler und ihre Vorstellung von &#8220;guter Software&#8221;.</p>
<h3>Zweckdienlichkeit</h3>
<p>Eigentlich &#252;berfl&#252;ssig zu erw&#228;hnen, da&#223; ein Programm seinen Zweck erf&#252;llen muss. Allzu oft gibt es aber Projekte, in denen ein Teilprojekt, zB ein CRM in einer Auktionsplattform, zu einem Selbstl&#228;ufer wird und viel mehr Entwicklungsarbeit bekommt als n&#246;tig, um den eigentlichen Zweck zu erf&#252;llen. Entwickler halten sich gerne mit solchen Nebens&#228;chlichkeiten auf, deswegen an das Ziel erinnern.</p>
<h3>Einfachheit/&#220;bersichtlichkeit</h3>
<p>Als Beispiel nenne ich hier einfach mal die ganzen IPhone- Apps. Wer h&#228;tte gedacht, da&#223; Programme, welche jeweils nur einen einzigen Verwendungszweck haben, zu Millionen gekauft werden? Aber Menschen, die nicht so erfahren mit Computern sind, sind weit weniger verwirrt. &#8220;Wo muss ich klicken?&#8221; er&#252;brigt sich die geringe Anzahl an Menus und Icons. Eine geringe Anzahl an Optionen, von denen die mei&#223;ten aber &#8220;oft&#8221; bis &#8220;stets&#8221; benutzt werden, runden das Ganze ab. Der Benutzer kann in einem Satz genau sagen, was die App macht.<br />
Entwickler handeln hier gerne nach dem &#8220;YAGNI &#8211; You ain&#8217;t gonna need it&#8221; &#8211; Prinzip. Dabei wird &#252;bersehen, da&#223; die nach der &#8220;MoSCoW&#8221; -Methode aufgestellten &#8220;Should have&#8221; Anforderungen den Erwartungen bestimmter Benutzergruppen entsprechen.</p>
<h3>Geschwindigkeit</h3>
<p>GMail durchsucht E-Mails in Bruchteilen von Sekunden. Die gleiche Aktion dauert in Outlook ein Vielfaches. Es gibt diese Performancefreaks, die zB tagelang bei ORM- Frameworks alle M&#246;glichkeiten der Cache- Konfiguration ausprobieren, um noch ein paar Millisek&#252;ndchen herauszuholen. Die Geschwindigkeit muss akzeptabel sein. Gerade im Web gilt: alles unter einer Sekunde ist gut. Ob 987 ms oder 612 ms  -  der Benutzer bekommt den Unterschied gar nicht mit. Deswegen bei akzeptabler Geschwindigkeit stoppen.</p>
<h3>Portabilit&#228;t und Flexibilit&#228;t</h3>
<p>Es gibt Programme, dort kann man die Daten nur in einem Format abspeichern, zB der gute alte Editor. Andere wiederum k&#246;nnen Daten(zB Bilder) in hunderten Formaten speichern. Fakt ist: Wenn man &#252;ber 90% der standardisierten und/oder vom Benutzer erwarteten Formate unterst&#252;tzt, ist alles in Ordnung. Ist es ohne gro&#223;es Refactoring unm&#246;glich ein anderes Exportformat zu implementieren, l&#228;uft was falsch. Der Kompromiss bleibt: so viele implementieren wie n&#246;tig &#8211; so viele zus&#228;tzlich erstellbar wie m&#246;glich.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tkdmatze.de/2010/09/06/dogfooding-wenn-man-fuer-sich-selbst-entwickelt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>YAGNI &#8211; you ain&#8217;t gonna need it</title>
		<link>http://blog.tkdmatze.de/2010/08/29/yagni-you-aint-gonna-need-it/</link>
		<comments>http://blog.tkdmatze.de/2010/08/29/yagni-you-aint-gonna-need-it/#comments</comments>
		<pubDate>Sun, 29 Aug 2010 15:57:58 +0000</pubDate>
		<dc:creator>tkdmatze</dc:creator>
				<category><![CDATA[MyWeb]]></category>

		<guid isPermaLink="false">http://blog.tkdmatze.de/?p=116</guid>
		<description><![CDATA[Vorwort Nein, du wirst es nicht brauchen. Aber du wirst es schreiben, testen, refactoren, dokumentieren und supporten. Du wirst sehr viel Zeit daf&#252;r verwenden und veschwenden f&#252;r keinen Nutzen. Das Programm wird nicht rechtzeitig fertig und deine Erkl&#228;rung ist der Fakt, dass man die Klassen wiederverwenden kann. Quasi als Framework f&#252;r das n&#228;chste  Programm. Irgendwann [...]]]></description>
			<content:encoded><![CDATA[<h2>Vorwort</h2>
<p>Nein, du wirst es nicht brauchen.</p>
<p>Aber du wirst es schreiben, testen, refactoren, dokumentieren und supporten.</p>
<p>Du wirst sehr viel Zeit daf&#252;r verwenden und veschwenden f&#252;r keinen Nutzen.</p>
<p>Das Programm wird nicht rechtzeitig fertig und deine Erkl&#228;rung ist der Fakt, dass man die Klassen wiederverwenden kann.<br />
Quasi als Framework f&#252;r das n&#228;chste  Programm.</p>
<p>Irgendwann kommt endlich der Tag, an dem ein neues Problem mit deinem &#8220;Framework&#8221; gel&#246;st werden kann, nur ein paar &#8220;Anpassungen&#8221; sind notwendig.<br />
du benutzt stolz deine Klassen und entdeckst einen Bug. Du l&#246;st den Bug,<br />
schreibst gleich noch ein paar neue Methoden f&#252;r neue Anwendungsf&#228;lle, welche dir in der Zeit eingefallen sind. Nat&#252;rlich getestet und dokumentiert.<br />
Dein Kollege bemerkt beil&#228;ufig, dass das Anpassen des Frameworks l&#228;nger gedauert hat, als die Entwicklung eine Programmes, welches einfach nur das eine Problem l&#246;st.</p>
<h4>Dein Kollege hat Recht</h4>
<p>Viele &#252;berstrapazieren Entwickler- Credos wie:</p>
<ul>
<li>Mach es wiederverwendbar!</li>
</ul>
<p>und</p>
<ul>
<li>Wiederhol dich nicht(<a href="http://de.wikipedia.org/wiki/Don%E2%80%99t_repeat_yourself" target="_blank">DRY</a>)!</li>
</ul>
<p>und entwickeln  Code, der scheinbar alle Teilprobleme eines Problems l&#246;sen kann.<br />
Dabei f&#228;llt einem nicht auf, dass man gerade <a href="http://de.wikipedia.org/wiki/Overengineering" target="_blank">Overengineering</a> betreibt. Ein Anti-Pattern!</p>
<h2>YAGNI vs Patterns</h2>
<p>Ich m&#246;chte heute mal dar&#252;ber schreiben, dass YAGNI nicht im Wiederspruch zu anderen Entwicklungs-Patterns steht,<br />
sondern sehr gut damit vereinbar ist.</p>
<p>Als Beispiel soll hier das Problem eines Simplen FTP-Uploads herhalten. Da Oberprojekt sei eine<br />
Web 2.0 Anwendung, bei der Profilbilder hochgeladen werden k&#246;nnen.<br />
Dazu soll das Jakarta Commons Net &#8211; Paket benutzt werden.<br />
Dieses Problem kann man nun auf 3 Wege l&#246;sen.</p>
<h4>L&#246;sung 1:</h4>
<p>Man schreibt in seinem Programm eine Methode in der Klasse, welche die Methode ben&#246;tigt.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> uploadFile<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> filename<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
<span style="color: #003399;">File</span> file <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">File</span><span style="color: #009900;">&#40;</span>filename<span style="color: #009900;">&#41;</span>
FTPClient ftpClient <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> FTPClient<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ftpClient.<span style="color: #006633;">connect</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;hardcodededurl&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ftpClient.<span style="color: #006633;">login</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;hardcodedusername&quot;</span>, <span style="color: #0000ff;">&quot;hardcodededpw&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ftpClient.<span style="color: #006633;">storeFile</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;filename&quot;</span>, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">FileInputStream</span><span style="color: #009900;">&#40;</span>file<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ftpClient.<span style="color: #006633;">logout</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ftpClient.<span style="color: #006633;">disconnect</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<h4>L&#246;sung 2:</h4>
<p>Man schreibt eine Klasse, die per FTP Bilder hochladen kann.</p>
<p>Diese Klasse hat nur eine Methode und einen Konstruktor.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> ImageFTPUploader<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> ImageFTPUploader<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> host,<span style="color: #003399;">String</span> user,<span style="color: #003399;">String</span> pw<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      <span style="color: #666666; font-style: italic;">// code</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000000; font-weight: bold;">public</span>  <span style="color: #000066; font-weight: bold;">void</span> upload<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> filename<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
       <span style="color: #666666; font-style: italic;">// code</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h4>L&#246;sung 3:</h4>
<p>Man baut ein FTP-Framework mit folgendem Interface.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">interface</span> IFTPUploader<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> IFTPUploader<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> host<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// anonymer Zugang</span>
    <span style="color: #000000; font-weight: bold;">public</span> IFTPUploader<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> host,<span style="color: #003399;">String</span> user,<span style="color: #003399;">String</span> pw<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// normaler Zugang</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setTransfermode<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> mode<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// ascii oder binary</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">File</span> downloadFile<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> remoteFile<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> uploadFile<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> localFile<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> listDir<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> remoteDir<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> changeDir<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> remoteChangeDir<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">// ... und ne Menge mehr in Version 2 ...</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>Mach es wiederverwendbar</h3>
<p>Schauen wir uns die 3 L&#246;sungen an, ist klar, das L&#246;sung 1 da ausscheidet. Die anderen beiden sind wiederverwendbar.<br />
Allerdings stellen sich mir bei L&#246;sung 3 die Fragen:</p>
<ul>
<li>Muss ich setTransfermode immer aufrufen?</li>
<li>Was ist der Standardwert?</li>
</ul>
<p>Ich bin gezwungen, die Doku zu lesen, weil so viele M&#246;glichkeiten bestehen.<br />
Mit Augenzudr&#252;cken gibt es keinen Punktabzug.</p>
<p>Punktestand: 0:1:1</p>
<h3>Keep it Simple and Stupid (KISS)</h3>
<p>Anders gesagt, schreib soviel Code wie du musst.</p>
<p>Hier scheidet L&#246;sung 3 aus, weil sie viel mehr als nur das eine Problem l&#246;st.</p>
<p>Punktestand: 1:2:1</p>
<h3>Don&#8217;t repeat yourself (DRY)</h3>
<p>Dieses Pattern ist sehr eng verwandt mit &#8220;Mach es wiederverwendbar&#8221;, deswegen ist die Punkteverteilung die gleiche</p>
<p>Punktestand 1:3:2</p>
<h3>Release early, Release Often(rero)</h3>
<p>Das ist nicht nur ein Pattern f&#252;r Firmen, sonder auch ein f&#252;r Entwickler. Time-To-Market (TTM) ist da der entscheidende Faktor.<br />
Code der irgendwann mal benutzt werden k&#246;nnte,  aber nicht zur Probleml&#246;sung beitr&#228;gt ist unn&#252;tz. Er kostet aber viel Zeit.</p>
<p>Wieder scheidet L&#246;sung 3 aus.</p>
<p>Punktestand 2:4:2</p>
<h3>There&#8217;s more than one way to do it</h3>
<p>Okay ganz anderes Problem (Phase 2 <img src='http://blog.tkdmatze.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ) jetzt sollen Lebensl&#228;ufe im .doc,.docx oder .pdf Format hochgeladen werden auf einen anderen Server.<br />
Das Projekt entwickelt ein anderer Programmierer als du.</p>
<p>Bei der L&#246;sung 1 gibt&#8217;s das gute alte Copy+Paste. es gibt eine Methode in seinem <em>LebenslaufConroller </em>die sowas macht</p>
<p>Bei L&#246;sung 2 gibt&#8217;s &#228;hnliches Copy+Paste, nur heisst die neue Klasse <em>LebenslaufFTPUploader </em>oder<em> DocumentUploader</em></p>
<p>Bei L&#246;sung 3 gibt es gar 4 M&#246;glichkeiten:</p>
<ol>
<li>Der andere Entwickler kennt dein Framework nicht und entwickelt was eigenes</li>
<li>Der andere Entwickler kennt dein Framework, dieses liefert aber nicht die Funktionalt&#228;t und er entwickelt was eigenes</li>
<li>Der andere Entwickler kennt dein Framework, dieses liefert aber nicht die Funktionalt&#228;t und er bittet dich, diese nachzuimplementieren</li>
<li>Der andere Entwickler kennt dein Framework, dieses liefert die ben&#246;tigte Funktionalit&#228;t</li>
</ol>
<p>Wollen wir ehrlich sein?<br />
M&#246;glichkeit 3 und 4 w&#252;rden wir uns alle w&#252;nschen. Die anderen M&#246;glichkeiten spiegeln die Realit&#228;t dar.<br />
Und manchmal sind wir im Urlaub oder krank. Deswegen bekommt L&#246;sung 3 wieder keinen Punkt.</p>
<p>Punktestand 3:5:2</p>
<h3>Worse is better / weniger ist mehr (<a href="http://en.wikipedia.org/wiki/Worse_is_better" target="_blank">wib</a>)</h3>
<p>Das muss man zun&#228;chst erkl&#228;ren:</p>
<ol>
<li>Simplicity: Das Programm/Die Klasse muss einfach benutzbar sein</li>
<li>Correctness: alles was funktioniert, muss zu 100% funktionieren.</li>
<li>Consistency: alles macht das, was man davon erwartet</li>
<li>Completeness: alles ist da, um das Problem zu l&#246;sen</li>
</ol>
<p>Eigentlich eine Sammlung der vorhergehenden Patterns.</p>
<p>Doch L&#246;sung 3 passt einfach nicht dazu.</p>
<p>Punktestand 4:6:2</p>
<h3>MoSCow</h3>
<p>Kurze Erkl&#228;rung</p>
<ol>
<li>Must have &#8211; <em>Minimal Usable SubseT &#8211; </em>Kann alles was es soll</li>
<li>Should have &#8211; Erwartungen an die Klasse</li>
<li>Could have &#8211; Hoffnungen an die Klasse</li>
<li>Won&#8217;t have &#8211; Die Goodies</li>
</ol>
<p>Okay, die gleichen Vorraussetzungen wie bei &#8220;There&#8217;s more than one way to do it&#8221;.<br />
Hier geht es um Erwartungen  an den Code.</p>
<p>L&#246;sung 1: man erwartet das es im Ausgangskontext funktioniert<br />
L&#246;sung 2: man erwartet das es funktioniert, Bilder &#252;ber FTP hochzuladen<br />
L&#246;sung 3: man erwartet das es funktioniert, bei allem was man &#252;ber FTP machen kann</p>
<p>Die Frage ist nun: erf&#252;llt man diese Erwartungen?<br />
Bei L&#246;sung 1 und 2 ist es einfach, jedoch sind die Erwartungen bei L&#246;sung 3 recht hoch.<br />
Man erwartet, das neue Problem damit l&#246;sen zu k&#246;nnen &#8230; und werden diese Erwartungen, von denen man beim Schreiben keinen blassen Schimmer hatte, nicht erf&#252;llt &#8230; verdammt man diese Klassse!</p>
<p>Punktestand 5:7:2</p>
<h2>Fazit</h2>
<p>Ich k&#246;nnte die Liste beliebig erweitern, doch das Ergebnis ist klar:<br />
Code den man nicht wiederverwenden kann, ist Mist.<br />
Coder der unter der Pr&#228;misse entsteht, alles zu k&#246;nnen, ist Mist.</p>
<p>Code ist nur dann sinnvoll, wenn er seinen Zweck erf&#252;llt und diesen Zweck zuverl&#228;ssig erf&#252;llt</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tkdmatze.de/2010/08/29/yagni-you-aint-gonna-need-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Webmatrix &#8211; Eine gute IDE(E) ?</title>
		<link>http://blog.tkdmatze.de/2010/07/25/webmatrix-eine-gute-idee/</link>
		<comments>http://blog.tkdmatze.de/2010/07/25/webmatrix-eine-gute-idee/#comments</comments>
		<pubDate>Sun, 25 Jul 2010 11:33:59 +0000</pubDate>
		<dc:creator>tkdmatze</dc:creator>
				<category><![CDATA[MyWeb]]></category>

		<guid isPermaLink="false">http://blog.tkdmatze.de/?p=114</guid>
		<description><![CDATA[IDE? IDE steht f&#252;r Integrated Development Enviroment oder auf gut deutsch Entwicklungsumgebung. Eine Vielzahl von Tools, die man im Entwicklungsprozess ben&#246;tigt unter einem Hut. Ich werde hier auf PHP- Entwicklung eingehen, da ich mit ASP noch nicht viel gemacht habe. Installation Wie installiert man PHP und MySQL f&#252;r Webmatrix? Auf der Webseite wird doch hoch [...]]]></description>
			<content:encoded><![CDATA[<h2>IDE?</h2>
<p>IDE steht f&#252;r Integrated Development Enviroment oder auf gut deutsch Entwicklungsumgebung. Eine Vielzahl von Tools, die man im Entwicklungsprozess ben&#246;tigt unter einem Hut. Ich werde hier auf PHP- Entwicklung eingehen, da ich mit ASP noch nicht viel gemacht habe.</p>
<h2>Installation</h2>
<p>Wie installiert man PHP und MySQL f&#252;r Webmatrix? Auf der Webseite wird doch hoch und heilig versprochen, dass man beides benutzen kann. Und nach langer Suche fand ich einen Weg dies zu bewerkstelligen. Man installiert einfach WordPress.<br />
Webmatrix kommt  mit einer <a href="http://www.microsoft.com/web/gallery/default.aspx" target="_blank">Handvoll Webapplikationen</a>. Viele davon sind in ASP, aber auch einige PHP-Apps sind dabei. Installieren kann man diese &#252;ber den Menupunkt &#8220;Neues Projekt -&gt; Projekt aus Web Gallery&#8221;. Dort kann man WordPress installieren.</p>
<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><a href="http://picasaweb.google.com/lh/photo/JFIPncLA6jX-T39bbox4HA?feat=embedwebsite"><img src="http://lh4.ggpht.com/_bXRwPOBXA9A/TDYaCumjnlI/AAAAAAAAAaA/orFjZXPp5Q8/s144/wordpress.jpg" alt="" /></a></td>
<td><a href="http://picasaweb.google.com/lh/photo/xEM6ruvfxfjnJ9uxdNgBng?feat=embedwebsite"><img src="http://lh6.ggpht.com/_bXRwPOBXA9A/TDYaDNUzltI/AAAAAAAAAaE/1B03JyfmvSg/s144/wordpress2.jpg" alt="" /></a></td>
<td><a href="http://picasaweb.google.com/lh/photo/9gFbSgdgEQZSib0-txDNSw?feat=embedwebsite"><img src="http://lh6.ggpht.com/_bXRwPOBXA9A/TDYaDuEdnMI/AAAAAAAAAak/xIyQ44YP2ok/s144/wordpress3.jpg" alt="" /></a></td>
<td><a href="http://picasaweb.google.com/lh/photo/Zsz0tlloALnJi1bDLrj-4g?feat=embedwebsite"><img src="http://lh4.ggpht.com/_bXRwPOBXA9A/TDYlxUhw8fI/AAAAAAAAAaw/HT_-2WOxVNU/s144/wordpress4.jpg" alt="" /></a></td>
</tr>
<tr>
<td>WordPress ausw&#228;hlen</td>
<td>Ja MySQL!!!!</td>
<td>PHP und Mysql<br />
werden installiert.</td>
<td>OOps was ist hier passiert?</td>
</tr>
</tbody>
</table>
<p>Der letzte Schritt ist den Mitgelieferten MySQL Server zu starten und Webmatrix neuzustarten.</p>
<h2>MySQL</h2>
<p>Microsoft h&#228;lt sein Versprechen und unterst&#252;tzt MySQL genau so gut wie die hauseigene SQL-L&#246;sung.<br />
<a href="http://picasaweb.google.com/lh/photo/rd0Nn_ZS524DlR9zca6Tdw?feat=embedwebsite"><img src="http://lh6.ggpht.com/_bXRwPOBXA9A/TDYlx4wYySI/AAAAAAAAAa0/TfqccvUwDfY/s144/mysql.jpg" alt="" /></a><br />
Neben Tabellen (wie in der Compact Edition) kann man nun auch Sichten und gespeicherte Prozeduren recht komfortabel erstellen.</p>
<h2>PHP</h2>
<p>Dank der WordPress- Installation bietet Webmatrix nun im Auswahlfeld auch PHP Seiten an, das gleiche Beispiel wir beim letzten Post mal in PHP.</p>
<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><a href="http://picasaweb.google.com/lh/photo/OKZ2H4aazkUEhkw_b0Z9cw?feat=embedwebsite"><img src="http://lh6.ggpht.com/_bXRwPOBXA9A/TDYlzFe3z3I/AAAAAAAAAa8/fUbpVOLGY9s/s144/php2.jpg" alt="" /></a></td>
<td><a href="http://picasaweb.google.com/lh/photo/dUXbnvs6zyBEphogPXOlLw?feat=embedwebsite"><img src="http://lh4.ggpht.com/_bXRwPOBXA9A/TDYl0FOxpGI/AAAAAAAAAbE/VrdLPU6H5b8/s144/codephp.jpg" alt="" /></a></td>
<td><a href="http://picasaweb.google.com/lh/photo/S9kRKz0bdhS-cA77mAp8vg?feat=embedwebsite"><img src="http://lh3.ggpht.com/_bXRwPOBXA9A/TDYlzntOWwI/AAAAAAAAAbA/wiQPyramK5I/s144/pagephp.jpg" alt="" /></a></td>
<td><a href="http://picasaweb.google.com/lh/photo/fsqwsXddsAcY_alowGtOmA?feat=embedwebsite"><img src="http://lh6.ggpht.com/_bXRwPOBXA9A/TEwekXgErtI/AAAAAAAAAbg/yaTbKnTrQl0/s144/deploy.jpg" alt="" /></a></td>
</tr>
<tr>
<td>Neue PHP Seite</td>
<td>Coden</td>
<td>Testen</td>
<td>Hochladen</td>
</tr>
</tbody>
</table>
<h2>Fazit</h2>
<p>Hat man die H&#252;rde der Installation &#252;berwunden, hat man kostenlos eine L&#246;sung, die sich nicht vor anderen kostenlosen Vertretern (zb <a href="http://www.phpeclipse.com/" target="_blank">PHPEclipse</a>, <a href="http://netbeans.org/features/php/" target="_blank">PHP for Netbeans</a>) verstecken muss. Auch wenn Features wie Codevervollst&#228;ndigung, Outlining  und Debugging fehlen, f&#252;r den Hobbyentwickler bietet Webmatrix alle Tools eines kompletten Entwicklungsprozesses. Alles wirkt wie aus einem Guss und verlangt nur wenig Eingew&#246;hnung.  Das Projekt befindet sich zur Zeit in der Beta und ich denke dass die in diesem Post angesprochenen Fehler bis zum Release verschwunden sind. Und dann kann man dieses Projekt ruhigen Gewissens weiterempfehlen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tkdmatze.de/2010/07/25/webmatrix-eine-gute-idee/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Webmatrix &#8211; Die Microsoft-Alternative zu LAMP?</title>
		<link>http://blog.tkdmatze.de/2010/07/07/webmatrix-die-microsoft-alternative-zu-lamp/</link>
		<comments>http://blog.tkdmatze.de/2010/07/07/webmatrix-die-microsoft-alternative-zu-lamp/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 14:47:33 +0000</pubDate>
		<dc:creator>tkdmatze</dc:creator>
				<category><![CDATA[MyWeb]]></category>

		<guid isPermaLink="false">http://blog.tkdmatze.de/?p=112</guid>
		<description><![CDATA[LAMP? Zun&#228;chst einmal F&#252;r alle Microsoft-J&#252;nger LAMP steht f&#252;r Linux + Apache + MySQL + PHP. Diese Kombination erlaubt es, mit kostenlos verf&#252;gbaren Komponenten, einen Webserver f&#252;r dynamische Webseiten mit Datenbankanbindung bereitzustellen. Etwa 90% des Internets setzen setzen auf diese Komponenten.(zB WordPress/Joomla/Typo/Wikipedia). Erweitert wird die Kombination oft durch FTP (zum Dateiaustauch) und phpMyAdmin(zur Datenbankverwaltung). Webmatrix Webmatrix ist [...]]]></description>
			<content:encoded><![CDATA[<h1>LAMP?</h1>
<p>Zun&#228;chst einmal F&#252;r alle Microsoft-J&#252;nger LAMP steht f&#252;r Linux + Apache + MySQL + PHP. Diese Kombination erlaubt es, mit kostenlos verf&#252;gbaren Komponenten, einen Webserver f&#252;r dynamische Webseiten mit Datenbankanbindung bereitzustellen. Etwa 90% des Internets setzen setzen auf diese Komponenten.(zB WordPress/Joomla/Typo/Wikipedia). Erweitert wird die Kombination oft durch FTP (zum Dateiaustauch) und phpMyAdmin(zur Datenbankverwaltung).</p>
<h1>Webmatrix</h1>
<p><a href="http://www.microsoft.com/web/webmatrix/" target="_blank"> Webmatrix </a>ist ein neues Projekt von Microsoft, welches sich aktuell in der Beta-Phase befindet. Dabei werden alle im Vorwort erw&#228;hnten Komponenten durch die Basisversionen von Microsoft- Pendants ersetzt und in Einklang gebracht. Zus&#228;tzlich steht die M&#246;glichkeit zum Upgrade einzelner Komponenten zur Verf&#252;gung.</p>
<h2>Windows  + IIS (Developer Express)</h2>
<p>Es ist wohl eine Frage der Zeit, bis die aktive Linux- Community die Neuerungen in Produkte wie Apache und Mono integrieren, bis dato ist man wohl an Microsoft als Betriebssystem beschr&#228;nkt. Die Beschr&#228;nkung ist allerdings keine Leistungs- , sondern eine Kostenfrage. Playground-Workspace (also einen Server zum Testen) auf LAMP- Basis ist im Netz teilweise sogar kostenlos zu erhalten. Windows-Hoster sind rar und vergleichsweise teuer. Wer sich allerdings einen Windowsserver hat, der wei&#223; auch was er f&#252;r das Geld bekommt.</p>
<h2>Microsoft SQL Server Compact</h2>
<p>Auch hier eine Kostenfrage.  Das mitgelieferte Modul ist zwar kostenlos, ist aber Einschr&#228;nkungen unterlegen(2 MB Speicher und 5 MB Arbeitsspeicher), mit der Express Version(auch kostenlos) sind es schon 10 GB Speicher und 1 GB RAM. Richtig Spa&#223; macht ein SQL-Server aber erst ab der Standard- Edition, welche dann aber auch mit &#252;ber <a href="http://www.billiger.de/suche.html?searchstring=SQL+Server+2005+Standard&amp;userkat=&amp;x=0&amp;y=0&amp;houston=1&amp;adword=angebote/rest-broad/Datenbank-Software_Microsoft/Sql%20Server%202005%20Standard" target="_blank">5000€</a> zu Buche schl&#228;gt. Zus&#228;tzlich bietet Microsoft die Anbindung an den neuen Clouddienst Azure SQL an.</p>
<p>Bis auf die d&#252;rftige mitgelieferte Version ist der Clou, da&#223; die Datenbankverwaltung direkt in die IDE integriert wurde.</p>
<h2>Sprachen</h2>
<p>Neben den alten Bekannten C#, VisualBasic und Co von Microsoft unterst&#252;tzt das Paket PHP und ASP.NET Web Pages(&#228;hnlich PHP und JSP). Gerade ASP.NET Web Pages machen das Ganze interessant, da man schnell und auf bekannten Wegen Applikationen erstellen kann.</p>
<h2>Deployment</h2>
<p>Auch dieses wurde in das Paket integriert und bietet die M&#246;glichkeiten FTP,SFTP und <a href="http://www.iis.net/download/webdeploy" target="_blank">Webdeploy</a>(ein microsofteigenes Format).</p>
<h2>Installation :</h2>
<p>Nicht mal 40 MB ben&#246;tigt das Paket in der Basisvariante:</p>
<table style="width: auto;">
<tbody>
<tr>
<td><a href="http://picasaweb.google.de/lh/photo/vGTm5nebWUtekLdGNJrNVg?feat=embedwebsite"><img src="http://lh5.ggpht.com/_bXRwPOBXA9A/TDSBRNpwQWI/AAAAAAAAAYg/1gL2n7ADvT0/s144/install.jpg" alt="" /></a></td>
</tr>
<tr>
<td style="font-family: arial,sans-serif; font-size: 11px; text-align: right;">Von <a href="http://picasaweb.google.de/lh/sredir?uname=9dragon9&amp;target=ALBUM&amp;id=5491155969804828881&amp;feat=embedwebsite"></a></td>
</tr>
</tbody>
</table>
<h2>Erste Schritte</h2>
<p>Selbstverst&#228;ndlich muss ich sowas immer ausprobieren, nat&#252;rlich immer mit dem &#8220;MyNotes&#8221; &#8211; Beispiel.</p>
<p>Nachdem mit einer &#8220;Empty Site&#8221; startet, sieht man zun&#228;chst den Startbildschirm:</p>
<table style="width: auto;">
<tbody>
<tr>
<td><a href="http://picasaweb.google.de/lh/photo/nCsUt1cJCb_ojXnt4LkykQ?feat=embedwebsite"><img src="http://lh5.ggpht.com/_bXRwPOBXA9A/TDSPXK-U47I/AAAAAAAAAY8/Xfr4SMjLcI4/s144/splash.jpg" alt="" /></a></td>
</tr>
<tr>
<td style="font-family: arial,sans-serif; font-size: 11px; text-align: right;">Von <a href="http://picasaweb.google.de/9dragon9/WebMatrix?feat=embedwebsite">WebMatrix</a></td>
</tr>
</tbody>
</table>
<p>Die Webseite startet automatisch. Ganz nett:  Webmatrix erkennt die Installierten Browser und bietet diese an, es gibt halt mehr als nur IE <img src='http://blog.tkdmatze.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Auf jeden Fall praktisch f&#252;r Designer.</p>
<table style="width: auto;">
<tbody>
<tr>
<td><a href="http://picasaweb.google.de/lh/photo/xnOUOCbKbKhJxrwVA45tmQ?feat=embedwebsite"><img src="http://lh4.ggpht.com/_bXRwPOBXA9A/TDSPXqpZPrI/AAAAAAAAAZA/rU5VKTQd0J8/s144/browsers.jpg" alt="" /></a></td>
</tr>
<tr>
<td style="font-family: arial,sans-serif; font-size: 11px; text-align: right;">Von <a href="http://picasaweb.google.de/9dragon9/WebMatrix?feat=embedwebsite">WebMatrix</a></td>
</tr>
</tbody>
</table>
<p>Okay leere Seiten sind langweilig, erstellen wir mal eine Datenbank, eine Tabelle und f&#252;llen diese mit Testdaten, dank der eingebauten Datenbankverwaltung supereinfach.</p>
<table style="width: auto;">
<tbody>
<tr>
<td><a href="http://picasaweb.google.de/lh/photo/v4HWliCOwS0GVc1HPczR6A?feat=embedwebsite"><img src="http://lh6.ggpht.com/_bXRwPOBXA9A/TDSPYaH8dtI/AAAAAAAAAZI/2SY_7hBqBEA/s144/startdb.jpg" alt="" /></a></td>
<td><a href="http://picasaweb.google.de/lh/photo/tly6wmLOGlyhknGDRMl9zA?feat=embedwebsite"><img src="http://lh4.ggpht.com/_bXRwPOBXA9A/TDSPY6KkXsI/AAAAAAAAAZM/RmPIrZoOkHI/s144/starttable.jpg" alt="" /></a></td>
<td><a href="http://picasaweb.google.de/lh/photo/UkH82nbexPqDpNgU61-2xg?feat=embedwebsite"><img src="http://lh6.ggpht.com/_bXRwPOBXA9A/TDSPZX_8l8I/AAAAAAAAAZQ/XzVrNyVi2FU/s144/createtable.jpg" alt="" /></a></td>
<td><a href="http://picasaweb.google.de/lh/photo/9ZAeImON9KhTboOzjeSqOQ?feat=embedwebsite"><img src="http://lh5.ggpht.com/_bXRwPOBXA9A/TDSPZlvGygI/AAAAAAAAAZU/kjRXwU-mKhc/s144/fillTable.jpg" alt="" /></a></td>
</tr>
<tr>
<td style="font-family: arial,sans-serif; font-size: 11px; text-align: right;">Von <a href="http://picasaweb.google.de/9dragon9/WebMatrix?feat=embedwebsite">WebMatrix</a></td>
<td style="font-family: arial,sans-serif; font-size: 11px; text-align: right;">Von <a href="http://picasaweb.google.de/9dragon9/WebMatrix?feat=embedwebsite">WebMatrix</a></td>
<td style="font-family: arial,sans-serif; font-size: 11px; text-align: right;">Von <a href="http://picasaweb.google.de/9dragon9/WebMatrix?feat=embedwebsite">WebMatrix</a></td>
<td style="font-family: arial,sans-serif; font-size: 11px; text-align: right;">Von <a href="http://picasaweb.google.de/9dragon9/WebMatrix?feat=embedwebsite">WebMatrix</a></td>
</tr>
</tbody>
</table>
<p>Nach ein paar Zeilen hat man schon eine einfache dynamische Webseite</p>
<table style="width: auto;">
<tbody>
<tr>
<td><a href="http://picasaweb.google.de/lh/photo/JK7dBiHHOW1lg7N6gvPhkA?feat=embedwebsite"><img src="http://lh3.ggpht.com/_bXRwPOBXA9A/TDSPa2cDmaI/AAAAAAAAAZc/EGr8vjZBJjY/s144/code1.jpg" alt="" /></a></td>
<td><a href="http://picasaweb.google.de/lh/photo/6va5KYFdtNIYWDG2feb1DA?feat=embedwebsite"><img src="http://lh6.ggpht.com/_bXRwPOBXA9A/TDSPaEJRciI/AAAAAAAAAZY/xJdxEA5CWHM/s144/pageselect.jpg" alt="" /></a></td>
</tr>
<tr>
<td style="font-family: arial,sans-serif; font-size: 11px; text-align: right;">Von <a href="http://picasaweb.google.de/9dragon9/WebMatrix?feat=embedwebsite">WebMatrix</a></td>
<td style="font-family: arial,sans-serif; font-size: 11px; text-align: right;">Von <a href="http://picasaweb.google.de/9dragon9/WebMatrix?feat=embedwebsite">WebMatrix</a></td>
</tr>
</tbody>
</table>
<p>und ein paar Minuten und Zeilen sp&#228;ter hat man die komplette CRUD-Funktionalit&#228;t hergestellt</p>
<table style="width: auto;">
<tbody>
<tr>
<td><a href="http://picasaweb.google.de/lh/photo/gWGCguj0ZiURAhd2sIod-Q?feat=embedwebsite"><img src="http://lh6.ggpht.com/_bXRwPOBXA9A/TDSPcG2d8QI/AAAAAAAAAZk/P0gVgn8GAKc/s144/code2.jpg" alt="" /></a></td>
<td><a href="http://picasaweb.google.de/lh/photo/zNIqIPCT9WLTzCWZf6NV1A?feat=embedwebsite"><img src="http://lh4.ggpht.com/_bXRwPOBXA9A/TDSPbcXq6tI/AAAAAAAAAZg/dodchvxbZu8/s144/pagecrud.jpg" alt="" /></a></td>
</tr>
<tr>
<td style="font-family: arial,sans-serif; font-size: 11px; text-align: right;">Von <a href="http://picasaweb.google.de/9dragon9/WebMatrix?feat=embedwebsite">WebMatrix</a></td>
<td style="font-family: arial,sans-serif; font-size: 11px; text-align: right;">Von <a href="http://picasaweb.google.de/9dragon9/WebMatrix?feat=embedwebsite">WebMatrix</a></td>
</tr>
</tbody>
</table>
<h2>Zwischenfazit</h2>
<p>Der Einstieg in die &#8220;Razor&#8221;- Sprache  ist sehr einfach und macht Lust auf mehr,<br />
gerade f&#252;r Einsteiger halte ich sie f&#252;r sehr geeignet. Wenn man nicht auf Hosting auf Windowsservern  angewiesen w&#228;re,<br />
w&#252;rde es sogar eine wirkliche Alternative zu PHP  darstellen. Leider hat diese tolle Projekt den Microsoftbeigeschmack.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tkdmatze.de/2010/07/07/webmatrix-die-microsoft-alternative-zu-lamp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cache me if you can &#8211; DB Caching nachr&#252;sten mit Google Guice</title>
		<link>http://blog.tkdmatze.de/2010/02/19/cache-me-if-you-can-db-caching-nachruesten-mit-google-guice/</link>
		<comments>http://blog.tkdmatze.de/2010/02/19/cache-me-if-you-can-db-caching-nachruesten-mit-google-guice/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 13:47:21 +0000</pubDate>
		<dc:creator>tkdmatze</dc:creator>
				<category><![CDATA[code.google]]></category>
		<category><![CDATA[ecclipse]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[MyWeb]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://blog.tkdmatze.de/?p=104</guid>
		<description><![CDATA[Das Problem Datenbankzugriffe sind teurer als Speicherzugriffe, das ist nicht neu. Viele Frameworks wie Hibernate setzen deswegen auf einen Cache, um die Anzahl der Datenbankzugriffe zu minimieren und damit die Performance zu erh&#246;hen. Das Caching passiert dabei mei&#223;t unter der Haube und l&#228;sst den Entwickler den Fokus auf die eigentlichen Arbeiten behalten. Mit Google App [...]]]></description>
			<content:encoded><![CDATA[<h2>Das Problem</h2>
<p>Datenbankzugriffe sind teurer als Speicherzugriffe, das ist nicht neu. Viele Frameworks wie <a href="https://www.hibernate.org/" target="_blank">Hibernate</a> setzen deswegen auf einen Cache, um die Anzahl der Datenbankzugriffe zu minimieren und damit die Performance zu erh&#246;hen. Das Caching passiert dabei mei&#223;t unter der Haube und l&#228;sst den Entwickler den Fokus auf die eigentlichen Arbeiten behalten.</p>
<p>Mit <a href="http://code.google.com/intl/de-DE/appengine/" target="_blank">Google App Engine</a> und  <a href="http://memcached.org/" target="_blank">Memcached</a> und dem verteilten Cache ist Caching auch in der Cloud m&#246;glich. Doch auch wenn bei App Engine  keine Persistenzl&#246;sung wie Hibernate oder EclipseLink m&#246;glich ist, kann man  auf eine einfache Weise Caching nachr&#252;sten.</p>
<h2>Vorher</h2>
<p>Eine einfache DAO-Klasse</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> NodeDAO <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Node load<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">long</span> id<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// code</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Node save<span style="color: #009900;">&#40;</span>Node node<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>node.<span style="color: #006633;">getId</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            insert<span style="color: #009900;">&#40;</span>node<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
            update<span style="color: #009900;">&#40;</span>node<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">return</span> node<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> delete<span style="color: #009900;">&#40;</span>Node node<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     <span style="color: #666666; font-style: italic;">// code</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> insert<span style="color: #009900;">&#40;</span>Node node<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// code</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> update<span style="color: #009900;">&#40;</span>Node node<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// code</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Relativ einfach, aber erf&#252;llt den Zweck.</p>
<h2>Schritt 1</h2>
<p>Zun&#228;chst erstellen wir ein Interface Indexed, damit die L&#246;sung sp&#228;ter f&#252;r verschiedene Klassen m&#246;glich ist.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">interface</span> Indexed <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">long</span> getId<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Und einen Simplen Cache (hier kann man sp&#228;ter auf MemCached umr&#252;sten)</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> SimpleCache <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">HashMap</span> cache<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">HashMap</span> getInstance<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>cache<span style="color: #339933;">==</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            cache <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">HashMap</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">return</span> cache<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Als Schl&#252;ssel soll hier Klassenname und ID fungieren</p>
<p>Noch ein paar kleine Interfaces f&#252;r die 3 Cache- bzw Datenbankfunktionen</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">@Retention<span style="color: #009900;">&#40;</span>RetentionPolicy.<span style="color: #006633;">RUNTIME</span><span style="color: #009900;">&#41;</span>
<span style="color: #000000; font-weight: bold;">public</span> @<span style="color: #000000; font-weight: bold;">interface</span> SelectCachable <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
@Retention<span style="color: #009900;">&#40;</span>RetentionPolicy.<span style="color: #006633;">RUNTIME</span><span style="color: #009900;">&#41;</span>
<span style="color: #000000; font-weight: bold;">public</span> @<span style="color: #000000; font-weight: bold;">interface</span> SaveCachable <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
@Retention<span style="color: #009900;">&#40;</span>RetentionPolicy.<span style="color: #006633;">RUNTIME</span><span style="color: #009900;">&#41;</span>
<span style="color: #000000; font-weight: bold;">public</span> @<span style="color: #000000; font-weight: bold;">interface</span> DeleteCachable <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span></pre></div></div>

<h2>Schritt 2</h2>
<p>Ein bisschen Guice-Magie</p>
<p>Starten wir mit dem SELECT oder GET &#8211; Befehl. Wenn wir einen Datensatz geladen haben, soll der im Cache verewigt werden. Ist er schon im Cache, soll keine Datenbankverbindung hergestellt werden. Wir benutzen den MethodInterceptor.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> SelectCacher <span style="color: #000000; font-weight: bold;">implements</span> MethodInterceptor<span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Object</span> invoke<span style="color: #009900;">&#40;</span>MethodInvocation call<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">Throwable</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">Object</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args <span style="color: #339933;">=</span> call.<span style="color: #006633;">getArguments</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">Object</span> result<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>args.<span style="color: #006633;">length</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">1</span> <span style="color: #339933;">&amp;&amp;</span> args<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #000000; font-weight: bold;">instanceof</span> <span style="color: #003399;">Long</span> <span style="color: #339933;">&amp;&amp;</span> SimpleCache.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">containsKey</span><span style="color: #009900;">&#40;</span>call.<span style="color: #006633;">getMethod</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getReturnType</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;@&quot;</span> <span style="color: #339933;">+</span> args<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #666666; font-style: italic;">// aus dem Cache holen</span>
            result <span style="color: #339933;">=</span> SimpleCache.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span> call.<span style="color: #006633;">getMethod</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getReturnType</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;@&quot;</span> <span style="color: #339933;">+</span> args<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>
            <span style="color: #666666; font-style: italic;">// Aus der DB Holen</span>
            result <span style="color: #339933;">=</span> call.<span style="color: #006633;">proceed</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            SimpleCache.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span> call.<span style="color: #006633;">getMethod</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getReturnType</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;@&quot;</span> <span style="color: #339933;">+</span> args<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span>,<span style="color: #009900;">&#40;</span>Indexed<span style="color: #009900;">&#41;</span> result<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">return</span> result<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Auch der DELETE-Befehl ist simpel:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> DeleteCacher <span style="color: #000000; font-weight: bold;">implements</span> MethodInterceptor <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Object</span> invoke<span style="color: #009900;">&#40;</span>MethodInvocation call<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">Throwable</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">Object</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args <span style="color: #339933;">=</span> call.<span style="color: #006633;">getArguments</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        Indexed indexer <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>Indexed<span style="color: #009900;">&#41;</span> args<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>args.<span style="color: #006633;">length</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">1</span> <span style="color: #339933;">&amp;&amp;</span> SimpleCache.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">containsKey</span><span style="color: #009900;">&#40;</span>indexer.<span style="color: #006633;">getClass</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;@&quot;</span> <span style="color: #339933;">+</span> indexer.<span style="color: #006633;">getId</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            SimpleCache.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">remove</span><span style="color: #009900;">&#40;</span> indexer.<span style="color: #006633;">getClass</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;@&quot;</span> <span style="color: #339933;">+</span> indexer.<span style="color: #006633;">getId</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">return</span> call.<span style="color: #006633;">proceed</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Zuletzt noch der PUT Befehl, hier muss man dazu sagen, dass aufgrund der ID entschieden wird, ob ein Insert oder Update geschieht, beim Insert wird bei @@IDENTITY die ID bestimmt und dem Objekt zugewiesen.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Object</span> invoke<span style="color: #009900;">&#40;</span>MethodInvocation call<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">Throwable</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">Object</span> result <span style="color: #339933;">=</span> call.<span style="color: #006633;">proceed</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        Indexed indexer <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>Indexed<span style="color: #009900;">&#41;</span> result<span style="color: #339933;">;</span>
        SimpleCache.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>indexer.<span style="color: #006633;">getClass</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;@&quot;</span> <span style="color: #339933;">+</span> indexer.<span style="color: #006633;">getId</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, indexer<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">return</span> result<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span></pre></div></div>

<h2>Schritt 3</h2>
<p>Nun m&#252;ssen wir noch die Annotationen mit den Interceptors verbinden. Das passiert bei Guice so:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> CacheModule <span style="color: #000000; font-weight: bold;">extends</span> AbstractModule<span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000066; font-weight: bold;">void</span> configure<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        bindInterceptor<span style="color: #009900;">&#40;</span>any<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, annotatedWith<span style="color: #009900;">&#40;</span>SelectCachable.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span>, <span style="color: #000000; font-weight: bold;">new</span> SelectCacher<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        bindInterceptor<span style="color: #009900;">&#40;</span>any<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, annotatedWith<span style="color: #009900;">&#40;</span>SaveCachable.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span>, <span style="color: #000000; font-weight: bold;">new</span> SaveCacher<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        bindInterceptor<span style="color: #009900;">&#40;</span>any<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, annotatedWith<span style="color: #009900;">&#40;</span>DeleteCachable.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span>, <span style="color: #000000; font-weight: bold;">new</span> DeleteCacher<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h2>Schritt 4</h2>
<p>Der finale Schritt, jetzt verbinden, oder besser gesagt injizieren, wir alles, was bisher erstellt wurde. Per Factory-Pattern erhalten wir wir nun eine Erweiterte Variante der Basisklasse. Per Annotationen bestimmen wir, welcher Methode welcher Interceptor zugewiesen wird.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> NodeDAO <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> NodeDAO create<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        Injector inj <span style="color: #339933;">=</span> Guice.<span style="color: #006633;">createInjector</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> CacheModule<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        NodeDAO ret <span style="color: #339933;">=</span> inj.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span>NodeDAO.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">return</span> ret<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @SelectCachable
    <span style="color: #000000; font-weight: bold;">public</span> Node load<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> id<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// Code</span>
    <span style="color: #009900;">&#125;</span>
    @SaveCachable
    <span style="color: #000000; font-weight: bold;">public</span> Node save<span style="color: #009900;">&#40;</span>Node node<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>node.<span style="color: #006633;">getId</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            insert<span style="color: #009900;">&#40;</span>node<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
            update<span style="color: #009900;">&#40;</span>node<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">return</span> node<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    @DeleteCachable
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> delete<span style="color: #009900;">&#40;</span>Node node<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// Code</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> insert<span style="color: #009900;">&#40;</span>Node node<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// Code</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> update<span style="color: #009900;">&#40;</span>Node node<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// Code</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h2>Fazit</h2>
<p>Mit Google Guice Funktionalit&#228;ten nachr&#252;sten ist recht einfach. Die L&#246;sung ist noch nicht ideal, aber ein guter Start, da alle Komponenten austauschbar sind.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tkdmatze.de/2010/02/19/cache-me-if-you-can-db-caching-nachruesten-mit-google-guice/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Was bringt 2010?</title>
		<link>http://blog.tkdmatze.de/2010/01/10/was-bringt-2010/</link>
		<comments>http://blog.tkdmatze.de/2010/01/10/was-bringt-2010/#comments</comments>
		<pubDate>Sun, 10 Jan 2010 18:09:48 +0000</pubDate>
		<dc:creator>tkdmatze</dc:creator>
				<category><![CDATA[MyWeb]]></category>

		<guid isPermaLink="false">http://blog.tkdmatze.de/?p=102</guid>
		<description><![CDATA[Das Jahr hat grad angefangen und da ist es Tradition sich gute Vors&#228;tze zu machen. Nachdem Ajaxian schon im letzten Jahr dazu aufrief, den IE6 nicht mehr zu unterst&#252;tzen, soll dies mein Vorsatz f&#252;r dieses Jahr sein. Nach dem die normalen Systemeinstellungen eh ein Upgrade zu IE7 oder IE8 ausf&#252;hren&#8230;.. warum muss man dieses Verbrechen [...]]]></description>
			<content:encoded><![CDATA[<h2>Das Jahr hat grad angefangen und da ist es Tradition sich gute Vors&#228;tze zu machen.</h2>
<p>Nachdem <a href="http://ajaxian.com/archives/i-wont-support-ie-6-in-2009">Ajaxian</a> schon im letzten Jahr dazu aufrief, den IE6 nicht mehr zu unterst&#252;tzen, soll dies mein Vorsatz f&#252;r dieses Jahr sein.</p>
<p>Nach dem die normalen Systemeinstellungen eh ein Upgrade zu IE7 oder IE8 ausf&#252;hren&#8230;.. warum muss man dieses Verbrechen an der (Web-Entwickler-) Menschheit weiter unterst&#252;tzen? <strong>I WILL NOT SUPPORT IE6 IN 2010!</strong></p>
<h2>N&#228;chstes Thema : Cloud Computing!</h2>
<p>Zur Zeit ist es noch ein Buzzword, welches einfach nur durch die Medien geht.</p>
<p>Bei jeder neuen Technologie gibt es 3 Phasen:</p>
<h4>Euphorie:</h4>
<p>Manches ist einfach nur toll, weil es neu und anders ist, ob &#8220;Ruby on Rails&#8221;, Server Side Pushing(Comet) oder eben gerade eben Cloud.</p>
<h4>Depression:</h4>
<p>Egal welche  Technologie, hier gibt es immer auch den Zeitpunkt, an dem die Entscheidung die man getroffen hat, einem irgendetwas verbaut.</p>
<p>Cal Handerson(Flickr) zeigt in diesem Video (<a href="http://www.youtube.com/watch?v=i6Fr65PFqfk">http://www.youtube.com/watch?v=i6Fr65PFqfk</a>) die Grenzen von Django auf.<br />
Das soll nur stellvertretend sein, f&#252;r all die b&#246;sen Kommentare, die &#252;ber irgendwelche Frameworks geschrieben oder gesagt werden.<br />
Wenigstens ist es &#8230; entertaining.</p>
<h4>Phase 3: Usablity</h4>
<p>Kann sich wer an den AJAX-Boom erinnern? Wahnsinniger Boom! Wer nutzt jetzt noch AJAX in der Reinform? Kaum einer!<br />
Das X in Ajax bedeudet XML, ein &#220;bertragungsprotokoll. Leider hat JSON weniger Overhead(Zus&#228;tzliche Daten zum &#220;bertragen) und mehr Unterst&#252;tzung des Browsers.<br />
Aber man nennt AJAX  ja nicht einfach in AJAJ um, es bleibt AJAX. Und mit JSON hat es die Phase der Usability bestanden.</p>
<p>Gerade sind viele neue Sachen im Kommen. Google Closure, Ruby On Rails, Grails, Spring Roo und eben Cloud Computing.<br />
Bei allen gilt es abzuwarten, bis die ersten Erfahrungen &#252;ber die Grenzen der Technologie gefunden werden. Dann gilt es f&#252;r den jeweiligen Anwendungsfall zu vergleichen, ob Vor- und Nachteile einer Technologie oder eines Frameworks dem Projekt angemessen sind.</p>
<p>F&#252;r das Jahr 2010 heisst es also die Augen aufhalten.</p>
<p><strong><br />
</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tkdmatze.de/2010/01/10/was-bringt-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>So Standards eben</title>
		<link>http://blog.tkdmatze.de/2009/11/21/so-standards-eben/</link>
		<comments>http://blog.tkdmatze.de/2009/11/21/so-standards-eben/#comments</comments>
		<pubDate>Sat, 21 Nov 2009 20:55:21 +0000</pubDate>
		<dc:creator>tkdmatze</dc:creator>
				<category><![CDATA[MyWeb]]></category>

		<guid isPermaLink="false">http://blog.tkdmatze.de/?p=100</guid>
		<description><![CDATA[Ich hab mir mal ne TVMovie geg&#246;nnt, nicht weil ich eine Fernsehzeitung brauch, gibt ja genug Programme, Internetseiten und Gadgets die das umsonst machen, sondern wegen dem Film &#8220;Die sieben Schwerter&#8221;. Voller Vorfreude lege ich die DVD in mein Laufwerk und dann kommt Windows Media Player kann diese DVD nicht wiedergeben, weil kein kompatibler DVD-Decoder [...]]]></description>
			<content:encoded><![CDATA[<p>Ich hab mir mal ne TVMovie geg&#246;nnt, nicht weil ich eine Fernsehzeitung brauch, gibt ja genug Programme, Internetseiten und Gadgets die das umsonst machen, sondern wegen dem Film &#8220;Die sieben Schwerter&#8221;. Voller Vorfreude lege ich die DVD in mein Laufwerk und dann kommt</p>
<blockquote>
<h1 style="margin-top: 0px; margin-right: 0px; margin-bottom: 8px; margin-left: 0px; font-size: 19px; font-weight: bold; color: #000000; line-height: 1.1; padding: 0px; border: 0px initial initial;">Windows Media Player kann diese DVD nicht wiedergeben, weil kein kompatibler DVD-Decoder installiert ist.</h1>
</blockquote>
<p>Okay &#8230; Google ist dein Freund</p>
<p><a href="http://www.computerhilfen.de/hilfen-5-41529-0.html" target="_blank">Ein</a>, <a href="http://de.answers.yahoo.com/question/index?qid=20071209060950AA6gtFL" target="_blank">Zwei</a>, <a href="http://forum.chip.de/windows-xp/hilfe-wmp-kein-kompatibler-dvd-decoder-installiert-813827.html" target="_blank">DREI</a> mal wird mir empfohlen, doch VLC zu benutzen. Die ersten 3 Treffer liefern alle eine L&#246;sung auf mein Problem.</p>
<p>Benutze ich allerdings die Porno- Suchmachine Bing</p>
<p><a href="http://www.computerhilfen.de/hilfe-5-.html" target="_blank">Eins</a>(falsche Verlinkung),<a href="http://forum.chip.de/windows-xp/media-player-9-0-will-keine-dvd-315915.html" target="_blank">Zwei</a>,<a href="http://www.computerhilfen.de/hilfe-5-60.html" target="_blank">Drei</a>(falsche Verlinkung),<a href="http://support.microsoft.com/kb/327994/de" target="_blank">Vier</a> ,<a href="http://www.microsoft.com/windows/windowsmedia/de/mp10/faq.aspx" target="_blank">F&#252;nf</a> ,<a href="http://www.meier-schemm.ch/services_multimedia.htm" target="_blank">Sechs</a> Suchresultate ohne L&#246;sung f&#252;r mein Problem!</p>
<p>Wenn man die Konkurrenz ausblendet um Probleml&#246;sungen auszublenden, schafft man kein Vertrauen. Ehrlicher und fairer Umgang mit den eigenen Schw&#228;chen ist etwas absolut maskulines, aber halt nichts &#8220;winzig doofes&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tkdmatze.de/2009/11/21/so-standards-eben/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

