<?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>madcats[welt] &#187; Web-Entwicklung</title>
	<atom:link href="http://www.madcatswelt.org/tag/web-entwicklung/feed" rel="self" type="application/rss+xml" />
	<link>http://www.madcatswelt.org</link>
	<description></description>
	<lastBuildDate>Tue, 17 Jan 2012 20:39:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Aktuelle JavaScript-Benchmarks</title>
		<link>http://www.madcatswelt.org/2011/11/aktuelle-javascript-benchmarks.html</link>
		<comments>http://www.madcatswelt.org/2011/11/aktuelle-javascript-benchmarks.html#comments</comments>
		<pubDate>Sat, 05 Nov 2011 21:52:49 +0000</pubDate>
		<dc:creator>MadCat</dc:creator>
				<category><![CDATA[Test]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Benchmarks]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Mozilla Firefox]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Web-Entwicklung]]></category>

		<guid isPermaLink="false">http://www.madcatswelt.org/?p=784</guid>
		<description><![CDATA[<p>Nach etwas über einem halben Jahr wird es wieder einmal Zeit, den JavaScript Engines der aktuellen Browser-Versionen auf den Zahn zu fühlen. Die Versionssprünge im Vergleich zu den <a href="http://www.madcatswelt.org/2011/03/javascript-benchmarks.html">letzten Benchmarks</a> sind beachtlich. Firefox ging von Version 3 (4 war noch Beta) auf 7, Chrome von 10 auf 15. Microsoft machte da einen vergleichsweise kleinen [...]]]></description>
			<content:encoded><![CDATA[<p>Nach etwas über einem halben Jahr wird es wieder einmal Zeit, den JavaScript Engines der aktuellen Browser-Versionen auf den Zahn zu fühlen. Die Versionssprünge im Vergleich zu den <a href="http://www.madcatswelt.org/2011/03/javascript-benchmarks.html">letzten Benchmarks</a> sind beachtlich. Firefox ging von Version 3 (4 war noch Beta) auf 7, Chrome von 10 auf 15. Microsoft machte da einen vergleichsweise kleinen Schritt von 8 auf 9, während Apple und Opera bei ihren Hauptversionen 5 und 11 treu geblieben sind.</p>
<p>Wie üblich dient als Testplattform mein Privatrechner mit folgender Spezifikation: Intel Core i5 750, 8 GB RAM, Intel X25 G2 80 GB und Windows 7 Professional x64 SP 1.</p>
<p>Hier sind die Ergebnisse:</p>
<p><img class="aligncenter size-full wp-image-798" title="js_benchmarks_v4_1" src="http://static.madcatswelt.org/wp-content/uploads/js_benchmarks_v4_1.png" alt="" width="548" height="723" /></p>
<p>&nbsp;</p>
<p>Es gibt auch dieses mal keinen klaren Gewinner, der sich alle drei Siege sichern konnte, aber Chrome 15 ist im Schnitt wieder die Nummer 1. Der Internet Explorer 9 mag zwar unter SunSpider der schnellste Kandidat sein, er verliert jedoch die anderen zwei Tests klar. Es liegt daher die Vermutung nahe, dass Microsoft hier einige Optimierungen vorgenommen hat &#8212; zumal sich an SunSpider schon länger nichts mehr getan hat.</p>
<p>Wie man schön sehen kann, hat Apple im letzten halben Jahr wirklich Fortschritte mit der Nitro Engine gemacht. Safari hat sich von der roten Laterne ins Mittelfeld vorgekämpft und überholt nun Firefox in gleich zwei Disziplinen. Es bleibt abzuwarten, ob Apple den Vorsprung halten kann. Ab Firefox 9 wird Mozillas <a href="http://de.wikipedia.org/wiki/Just-in-time-Kompilierung">JIT</a> JägerMonkey durch <a href="http://en.wikipedia.org/wiki/Type_inference">Type Inference</a> bis zu 30% mehr Leistung bringen. Dazu befindet sich mit <a href="https://wiki.mozilla.org/Platform/Features/IonMonkey">IonMonkey</a> ein neuer JIT in Arbeit, der wahrscheinlich JägerMonkey und evtl. auch TraceMonkey ersetzen wird. IonMonkey wird eine andere, moderne Architektur besitzen und damit die Wartbarkeit als auch Optimierungsmöglichkeiten für die Entwickler deutlich verbessern.</p>
<p>Bleibt noch Opera 11, der sich mal wieder sehr gut schlägt und die klare Nummer Zwei im Starterfeld ist.</p>
<h3>Fazit</h3>
<p>Chrome gewinnt &#8212; wie immer. Opera ist Zweiter und im weiteren Feld kämpft sich Safari an Firefox und Microsofts Internet Explorer vorbei.</p>
<p>Ich bin gespannt, ob Microsoft mit dem Internet Explorer 10 wieder aufholen kann. Vielleicht sollte man in Redmond auch die Release-Zyklen überdenken. Alle anderen Hersteller können wesentlich schneller reagieren und optimieren, während Microsoft nur jährlich neue Major Releases bringen will. Wobei ich es für fraglich halte, ob wirklich jedes Jahr eine neue Version kommen wird.</p>
<p>Natürlich haben theoretische Benchmarks in der Praxis weit weniger Relevanz. Meine aktuellen Experimente mit <a href="http://www.sencha.com/products/extjs/">ExtJS</a> zeigen sehr deutlich, dass bei <a href="http://de.wikipedia.org/wiki/Rich_Internet_Application">Rich Internet Applications</a> Firefox immer noch kein sonderlich gutes Bild abgibt. Das aufgebaute UI, das für eine RIA eh noch recht spartanisch ausgestattet ist, läuft in allen anderen Browsern wesentlich weniger träge und ruckelig. Gleiches lässt sich auf diverse andere JavaScript-lastige Seiten übertragen, z.B. GMail oder iCloud.</p>
<p>JägerMonkey mit Type Inference, IonMonkey und die lang erwartete Integration des <a href="https://wiki.mozilla.org/Electrolysis">Electrolysis-Projekts</a> sind darum wichtiger denn je.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.madcatswelt.org/2011/11/aktuelle-javascript-benchmarks.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript-Benchmarks</title>
		<link>http://www.madcatswelt.org/2011/03/javascript-benchmarks.html</link>
		<comments>http://www.madcatswelt.org/2011/03/javascript-benchmarks.html#comments</comments>
		<pubDate>Wed, 09 Mar 2011 22:06:42 +0000</pubDate>
		<dc:creator>MadCat</dc:creator>
				<category><![CDATA[Test]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Mozilla Firefox]]></category>
		<category><![CDATA[Web-Entwicklung]]></category>

		<guid isPermaLink="false">http://www.madcatswelt.org/?p=706</guid>
		<description><![CDATA[<p>In den letzten Monaten tat sich viel in der Browser-Landschaft: Mitte Dezember kam Opera 11. Google bringt fast schon im Monatstakt neue Chrome-Versionen &#8212; erst gestern Version 10. Wie Microsoft heute mitteilte, kommt der finale Internet Explorer 9 am 14. März und Firefox 4 wird auch nicht mehr lange auf sich warten lassen. Es wird [...]]]></description>
			<content:encoded><![CDATA[<p>In den letzten Monaten tat sich viel in der Browser-Landschaft: Mitte Dezember kam Opera 11. Google bringt fast schon im Monatstakt neue Chrome-Versionen &#8212; erst gestern Version 10. Wie Microsoft heute mitteilte, kommt der finale Internet Explorer 9 am 14. März und Firefox 4 wird auch nicht mehr lange auf sich warten lassen. Es wird wieder Zeit, sich einen Überblick in Sachen JavaScript-Leistung zu verschaffen. Inbesondere Google und Opera treiben hier die Entwicklung stark voran, während Mozilla und Microsoft versuchen endlich aufzuschließen.</p>
<p>Als Testplattform diente ein Intel Core i5 750 mit 8 GB RAM, einer Intel X25-M G2 80 GB und Windows 7 Professional x64 SP1.</p>
<p>Hier die Ergebnisse als Diagramme:</p>
<p><img class="alignnone size-full wp-image-715" title="benchmarks_2011-03-09" src="http://static.madcatswelt.org/wp-content/uploads/benchmarks_2011-03-09.png" alt="" width="576" height="716" /></p>
<p>Aufgrund der Charakteristik und Optimierungen der einzelnen Benchmarks, gibt es keinen klaren Sieger. Am neutralsten &#8212; obwohl er dem WebKit-Projekt entstammt &#8212; erscheint mir SunSpider. Es ist dabei fast schon ironisch, dass die eigene Engine &#8220;Nitro&#8221; am schlechsten abschneidet.</p>
<p>Im Vergleich zu den anderen Ergebnissen, sind die Einzelwerte aber recht nahe beisammen. Verwunderlich ist nur, dass der Internet Explorer 9 selbst Chrome und Opera leicht abhängt. Hier wurde ja desöfteren schon eine SunSpider-Optimierung der Engine seitens Microsoft vermutet. Belegen lässt sich das allerdings nicht. Klar ist aber, dass die JavaScript-Leistung gegenüber den Vorgängern deutlich zugenommen hat.</p>
<p>Bei den V8-Benchmarks ist klar ersichtlich, dass er für Chrome optimiert wurde, während der Rest des Feldes grob auf einem Niveau zu sein scheint. Ähnlich drastisch scheint Kraken auf die Tracer-Technik von TraceMonkey bzw. JägerMonkey (Mozilla) ausgerichtet zu sein. Die Tracing-Technik dominierte oft Tests, wenn sie aufgrund des Programmierung des Scripts richtig arbeiten kann. In der Praxis ist das ist leider selten der Fall, daher kam meist der herkömliche JIT in Mozillas SpiderMonkey Engine zum Einsatz. Ab Firefox 4 steht ein neuer JIT namens JaegerMonkey zur Verfügung, der zum Teil auf WebKits Nitro basiert und deutliche Vorteile gegenüber dem alten System hat.</p>
<p><strong>Fazit</strong></p>
<p>Ingesamt überzeugt Chrome 10 bzw. V8 mit der besten Gesamtleistung im Starterfeld. Opera 11, Firefox 4 und der Internet Explorer 9 teilen sich das Mittelfeld, wobei Opera 11 die Gruppe klar anführt und der IE 9 das Rücklicht hält. Safari 5 schneidet in zwei von drei Tests als Letzter und im dritten als Vorletzter ab. Hier sollten Apple die und anderen Initiatoren des WebKit-Projekts demnächst nachlegen, sonst wird der einstmalige ICE schnell zum Regionalzug.</p>
<p>Wie bei solchen Benchmarks üblich, handelt es sich hierbei natürlich in erster Linie um theoretische Ergebnisse. Praktisch betrachtet, also beim normalen Surfen, sind die Unterschiede der Testkandidaten bei weitem nicht so drastisch. Heftige Ausreißer wie noch zwischen Firefox 3.6 oder dem IE 8 und aktuellen Chrome-Versionen entfallen fast vollständig. Mozillas und Microsofts Anstrengungen wieder Anschluss zu finden, sind also geglückt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.madcatswelt.org/2011/03/javascript-benchmarks.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ein paar Änderungen</title>
		<link>http://www.madcatswelt.org/2011/03/ein-paar-anderungen.html</link>
		<comments>http://www.madcatswelt.org/2011/03/ein-paar-anderungen.html#comments</comments>
		<pubDate>Sat, 05 Mar 2011 19:27:07 +0000</pubDate>
		<dc:creator>MadCat</dc:creator>
				<category><![CDATA[Test]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[Amazon CloudFront]]></category>
		<category><![CDATA[Amazon S3]]></category>
		<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[CDN]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Piwik]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Web-Entwicklung]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.madcatswelt.org/?p=669</guid>
		<description><![CDATA[<p>Nach langer Abstinenz durch Blog-Unlust, wird es Zeit wieder etwas zu schreiben. Ich habe in vergangenen Tagen einige technische Änderungen vorgenommen:</p> <p>Ein Großteil der statischen Inhalte (Bilder, CSS-Dateien, JavaScripts etc.) wird nun über ein Content Delivery Network (CDN) bereitgestellt. Hierzu verwende ich ich die Services <a href="http://aws.amazon.com/de/s3/" target="_blank">Amazon S3</a> bzw. <a href="http://aws.amazon.com/de/cloudfront/" target="_blank">Amazon CloudFront</a>. S3 [...]]]></description>
			<content:encoded><![CDATA[<p>Nach langer Abstinenz durch Blog-Unlust, wird es Zeit wieder etwas zu schreiben. Ich habe in vergangenen Tagen einige technische Änderungen vorgenommen:</p>
<ul>
<li>
<p>Ein Großteil der statischen Inhalte (Bilder, CSS-Dateien, JavaScripts etc.) wird nun über ein Content Delivery Network (CDN) bereitgestellt. Hierzu verwende ich ich die Services <a href="http://aws.amazon.com/de/s3/" target="_blank">Amazon S3</a> bzw. <a href="http://aws.amazon.com/de/cloudfront/" target="_blank">Amazon CloudFront</a>. S3 übernimmt die eigentliche Speicherung der Dateien innerhalb des Amazon-Netzwerks. CloudFront bezieht die Daten von S3 und stellt sie wahlweise als Download- oder Streaming-Inhalt über das weltweite CloudFront-Netzwerk bereit. Realisiert wird das ganze über das WordPress-Plug-In <a href="http://wordpress.org/extend/plugins/w3-total-cache/" target="_blank">W3 Total Cache</a>, das die Dateien zu S3 überträgt und sich um die URL-Umschreibung zu CloudFront kümmert.</p>
<p>Das klingt nun extrem überdimensioniert und ist es eigentlich auch. Mir geht es dabei um den technischen Aspekt, wie man sowas realisiert und die sich daraus ergebenden Vorteile von Cloud Hosting Services. Abgesehen davon, ist es unschlagbar günstig. Man zahlt keinerlei Grundgebühren, es wird nur abgerechnet, was man wirklich verbraucht. Für meine Verhältnisse in Sachen Traffic und Zugriffe, kostet das nur ein paar Cent im Monat.</p>
</li>
<li>
<p>Nach dem ich zwischenzeitlich wieder Google Analytics als Statistikdienst genutzt hatte, bin ich nun auf <a href="http://piwik.org/" target="_blank">Piwik</a> umgestiegen. Piwik ist eine Open Source-Lösung, die fast alles kann, was Analytics auch bietet, läuft aber lokal auf meinem Web-Server. IP-Adressen werden ausschließlich anonymisiert verwendet.</p>
<p>Wer nicht von Piwik erfasst werden möchte, kann sich <a href="http://analytics.madcatswelt.org/index.php?module=CoreAdminHome&amp;action=optOut" target="_blank">hier</a> per Cookie ausschließen lassen.</p>
</li>
<li>
<p>Wie oben schon erwähnt, setze ich nun W3 Total Cache ein. Neben der Bereitstellung der statischen Inhalte über ein CDN, bietet es vor allem diverse Caching-Systeme für Dateien, Datenbank-Inhalte, Objekte oder auch HTTP-Kompression. Die Ladezeiten sollten so angenehmer sein und gleichzeitig wird der Server geschont.</p>
</li>
</ul>
<p>So, das war&#8217;s dann erstmal. In Zukunft werden wieder mehr Einträge folgen, wie üblich hauptsächlich über Technik, Web-Entwicklung oder Spiele.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.madcatswelt.org/2011/03/ein-paar-anderungen.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress³</title>
		<link>http://www.madcatswelt.org/2010/04/wordpress.html</link>
		<comments>http://www.madcatswelt.org/2010/04/wordpress.html#comments</comments>
		<pubDate>Sat, 24 Apr 2010 23:21:43 +0000</pubDate>
		<dc:creator>MadCat</dc:creator>
				<category><![CDATA[Test]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[madcats.welt]]></category>
		<category><![CDATA[Web-Entwicklung]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.madcatswelt.org/?p=459</guid>
		<description><![CDATA[<p>Es ist vollbracht: madcats[welt] läuft mit WordPress.</p> <p>Angekündigt war dieser Schritt bereits für September, aber wie das halt so ist, kam immer etwas dazwischen. Dabei war eigentlich alles in ein paar Stunden fertig. Der technische Teil war schnell erledigt, aber ein passendes Design zu finden, war ob dieser Riesenauswahl gar nicht so einfach.</p> <p>Am Ende [...]]]></description>
			<content:encoded><![CDATA[<p>Es ist vollbracht: madcats[welt] läuft mit WordPress.</p>
<p>Angekündigt war dieser Schritt bereits für September, aber wie das halt so ist, kam immer etwas dazwischen. Dabei war eigentlich alles in ein paar Stunden fertig. Der technische Teil war schnell erledigt, aber ein passendes Design zu finden, war ob dieser Riesenauswahl gar nicht so einfach.</p>
<p>Am Ende fiel meine Entscheidung auf zBench, das ich aber zu einer aufpolierten Version von mcw[ruby] umgebaut habe &#8212; vom Original-Design ist eigentlich nicht mehr viel übrig. Die Anpassungen sind noch nicht ganz fertig. Bei den Kommentaren und der Tag Cloud wird sich in den nächsten Tagen noch etwas tun.</p>
<p>Um endlich von den Einschränkungen der immer selben Schriftarten für Websites wegzukommen, nutze ich jetzt den Dienst <a href="http://typekit.com/" target="_blank">typekit</a>. Typekit bietet professionelle (und daher meist kostenpflichtige) Schriften als Web-Fonts an. Man stellt sich einfach ein Schriftpaket für seine Seite zusammen, fügt zwei Zeilen JavaScript in den head-Bereich ein und kann die Schriften wie gewohnt im Stylesheet angeben. Den Rest erledigt typekit.</p>
<p>Wer das ausprobieren möchte, kann einen kostenlosen Trial-Account mit maximal zwei Schriften und 5 GB/Monat Traffic (für die Schriften) nutzen. Für die meisten Blogs sollte das sogar ausreichen, ansonsten dürfte der &#8220;Personal Plan&#8221; für 24,99 $ im Jahr die richtige Wahl sein. In Anbetracht der Auswahl und sich ergebenden neuen Möglichkeiten, finde ich das nicht sonderlich teuer. Aktuell verwende ich für Überschriften &#8220;Adelle&#8221; und im Fließtext &#8220;Droid Sans&#8221;.</p>
<p>Zum Schluss noch etwas Werbung bzw. die Erklärung für die Überschrift:</p>
<p>Ich kümmere mich ja bereits seit Jahren um die technische Seite von <a href="http://www.piadettmer.de/" target="_blank">Pias Weblog</a>. Bisher lief alles über die FTP-Veröffentlichung von Blogger. Anfang des Jahres kündigte Google an, diese Funktion zum 1. Mai 2010 einzustellen. Betroffenen wird ein Umzug auf Blogspot mit eigener Domain empfohlen. An sich eine brauchbare Lösung, wenn man dafür nicht die DNS-Einträge der Domain in einem Umfang ändern müsste, den kaum ein großer Hosting-Anbieter erlaubt. Daher haben wir uns für einen Umzug auf WordPress entschieden.</p>
<p>Da Pia gerne und viel fotografiert, haben wir gleich noch ein zweites WordPress als <a href="http://fotografie.piadettmer.de/" target="_blank">Foto-Blog</a> eingerichtet. Momentan sind noch nicht so viele Bilder online, aber ein Blick lohnt sich definitiv jetzt schon!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.madcatswelt.org/2010/04/wordpress.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Status Februar 2009</title>
		<link>http://www.madcatswelt.org/2009/02/status-februar-2009.html</link>
		<comments>http://www.madcatswelt.org/2009/02/status-februar-2009.html#comments</comments>
		<pubDate>Tue, 03 Feb 2009 00:06:54 +0000</pubDate>
		<dc:creator>MadCat</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Battlestar Galactica]]></category>
		<category><![CDATA[Biohazard]]></category>
		<category><![CDATA[iPod]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Krempel]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[RAF]]></category>
		<category><![CDATA[Spiele]]></category>
		<category><![CDATA[Star Wars]]></category>
		<category><![CDATA[Web-Entwicklung]]></category>

		<guid isPermaLink="false">http://localhost/Ruby/2009/02/status-februar-2009.html</guid>
		<description><![CDATA[<p>Filme: Resident Evil Degeneration, Star Wars &#8211; The Clone Wars (uff)</p> <p>Serien: Battlestar Galactica Season 4</p> <p>Bücher: Stefan Aust &#8211; Der Baader-Meinhof-Komplex (ja, immer noch), Drew Karpyshyn &#8211; Darth Bane: Rule of Two</p> <p>Zeitschriften: PHP-Magazin, <a href="http://www.mpg.de/bilderBerichteDokumente/multimedial/mpForschung/index.html">MaxPlanckForschung</a></p> <p>iTunes/iPod: Queen &#8211; Breakthru</p> <p>Spiele: GTA IV (PC), iShoot (iPod)</p> <p>Javascript-Bibliothek des Jahres 2008: <a href="http://jquery.com/">jQuery </a></p> <p>Ein [...]]]></description>
			<content:encoded><![CDATA[<p>Filme: Resident Evil Degeneration, Star Wars &#8211; The Clone Wars (uff)</p>
<p>Serien: Battlestar Galactica Season 4</p>
<p>Bücher: Stefan Aust &#8211; Der Baader-Meinhof-Komplex (ja, immer noch), Drew Karpyshyn &#8211; Darth Bane: Rule of Two</p>
<p>Zeitschriften: PHP-Magazin, <a href="http://www.mpg.de/bilderBerichteDokumente/multimedial/mpForschung/index.html">MaxPlanckForschung</a></p>
<p>iTunes/iPod: Queen &#8211; Breakthru</p>
<p>Spiele: GTA IV (PC), iShoot (iPod)</p>
<p>Javascript-Bibliothek des Jahres 2008: <a href="http://jquery.com/">jQuery </a></p>
<p>Ein kurzes Wort zur <a href="http://www.mpg.de/bilderBerichteDokumente/multimedial/mpForschung/index.html">MaxPlanckForschung</a>: sie wird vierteljährlich herausgegeben und kann kostenlos als PDF oder im <a href="http://www.mpg.de/metanavi/kontakt/kontaktformular/indexBestMPF.html">Abonnement</a> bezogen werden. Ich kann sie jedem, der sich für wissenschaftliche Magazine interessiert nur ans Herz legen. Die Texte erfordern aber teilweise viel Hintergrundwissen des Lesers, daher lest bitte erst ein Artikel online und abonniert nicht einfach blind, nur weil es kostenlos ist.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.madcatswelt.org/2009/02/status-februar-2009.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML 5</title>
		<link>http://www.madcatswelt.org/2009/02/html-5.html</link>
		<comments>http://www.madcatswelt.org/2009/02/html-5.html#comments</comments>
		<pubDate>Mon, 02 Feb 2009 22:37:45 +0000</pubDate>
		<dc:creator>MadCat</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Web-Entwicklung]]></category>

		<guid isPermaLink="false">http://localhost/Ruby/2009/02/html-5.html</guid>
		<description><![CDATA[<p>Ein sehr guter, informatiker <a href="http://www.peterkroener.de/html5-was-geht-heute-schon-was-geht-nicht-der-grosse-ueberblick/">Artikel</a> von Peter Kröner zum Thema HTML 5 und dessen aktuelle Situation bzw. Browser-Unterstützung.</p> <p>Und mal wieder macht uns Microsoft künstlich das Leben schwer &#8230;</p> <p>Via: <a href="http://praegnanz.de/weblog/html-5-der-gute-artikel">praegnanz.de</a></p>]]></description>
			<content:encoded><![CDATA[<p>Ein sehr guter, informatiker <a href="http://www.peterkroener.de/html5-was-geht-heute-schon-was-geht-nicht-der-grosse-ueberblick/">Artikel</a> von Peter Kröner zum Thema HTML 5 und dessen aktuelle Situation bzw. Browser-Unterstützung.</p>
<p>Und mal wieder macht uns Microsoft künstlich das Leben schwer &#8230;</p>
<p>Via: <a href="http://praegnanz.de/weblog/html-5-der-gute-artikel">praegnanz.de</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.madcatswelt.org/2009/02/html-5.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>15 nützliche Apps für Web-Designer/Entwickler</title>
		<link>http://www.madcatswelt.org/2009/01/15-nutzliche-apps-fur-web-designerentwickler.html</link>
		<comments>http://www.madcatswelt.org/2009/01/15-nutzliche-apps-fur-web-designerentwickler.html#comments</comments>
		<pubDate>Fri, 30 Jan 2009 16:56:47 +0000</pubDate>
		<dc:creator>MadCat</dc:creator>
				<category><![CDATA[Test]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[Amazon S3]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[OS X]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Spiele]]></category>
		<category><![CDATA[Web-Entwicklung]]></category>

		<guid isPermaLink="false">http://localhost/Ruby/2009/01/15-nützliche-apps-für-web-designerentwickler.html</guid>
		<description><![CDATA[<p><a href="http://www.noupe.com/tools/15-incredible-mac-apps-for-freelance-web-designers.html">http://www.noupe.com/tools/15-incredible-mac-apps-for-freelance-web-designers.html</a></p> <p>Konnte zwar bisher nicht alle ausprobieren, aber was ich bisher von Pixelmator, Espresso und Coda gesehen habe, begeisiert mich einfach. Außerdem nutze ich schon Cyberduck schon länger und bin ebenfalls sehr zufrieden.</p> <p>Besonders angetan bin ich von Pixelmator. Es orientiert sich an Photoshop, und steht ihm in der Funktionsvielfalt in vielen Bereichen nichts [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.noupe.com/tools/15-incredible-mac-apps-for-freelance-web-designers.html">http://www.noupe.com/tools/15-incredible-mac-apps-for-freelance-web-designers.html</a></p>
<p>Konnte zwar bisher nicht alle ausprobieren, aber was ich bisher von Pixelmator, Espresso und Coda gesehen habe, begeisiert mich einfach. Außerdem nutze ich schon Cyberduck schon länger und bin ebenfalls sehr zufrieden.</p>
<p>Besonders angetan bin ich von Pixelmator. Es orientiert sich an Photoshop, und steht ihm in der Funktionsvielfalt in vielen Bereichen nichts nach. Trotzdem wirkt die App nicht überladen und ist recht flott. Dank Core Image werden Bildberechnungen über die Grafikkarte erledigt, was ein zusätzliches Geschwindigkeitsplus einbringt. Für jemanden wie mich, der die Möglichkeiten von Photoshop gar nicht ausnutzen kann, aber dennoch ein gutes Bildbearbeitungsprogramm fürs Web braucht, sind die 59 Dollar sehr gut angelegt und vor allem verschmerzbarer, als Adobes Preis-, Produkt- und paranoide Kopierschutzpolitik.</p>
<p>Espresso und Coda wissen ebenfalls zu begeistern. Der Schwerpunkt von Espresso liegt bei XHTML und CSS, um schnell eleganten, modernen Quelltext zu schreiben. Coda geht mehr in die Entwicklerecke und bietet zahlreiche Features, z.B. einen integrierten FTP/SFTP/FTP SSL/WebDAV-Client mit diversen Veröffentlichtungsmöglichkeiten, SVN- und Terminal-Unterstützung sowie ein Plug-In-System.</p>
<p>Cyberduck ist ein FTP/SFTP/SCP/WebDAV/Amazon S3-Client, der es ermöglicht Dateien direkt auf dem Server zu bearbeiten. Leider kann es nicht mehrere Verbindungen gleichzeitig offenhalten, wie es WinSCP vormacht.</p>
<p>Die Fülle, aber vor allem die Funktionen und die Bedienbarkeit von Programmen im Webdesign-Sektor unter OS X, lässt Windows- und Linux-Konkurrenz dieses Marktes vor Neid erblassen. Was soll ich denn bitte mit dem GIMP, wenn ich Pixelmator habe?</p>
<p>Allmählich denke ich über einen Komplettumstieg nach. Allerdings eignet sich bisher kein Mac wirklich gut zum Spielen, daher bin ich vorerst auf beide Welten angewiesen. Bin aber gespannt, ob die neuen iMacs, endlich bessere GPUs spendiert bekommen &#8211; ein Mac Pro ist dann doch zuviel des Guten und dann noch der Preis &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.madcatswelt.org/2009/01/15-nutzliche-apps-fur-web-designerentwickler.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Neue Benchmarks</title>
		<link>http://www.madcatswelt.org/2009/01/neue-benchmarks.html</link>
		<comments>http://www.madcatswelt.org/2009/01/neue-benchmarks.html#comments</comments>
		<pubDate>Fri, 09 Jan 2009 19:10:50 +0000</pubDate>
		<dc:creator>MadCat</dc:creator>
				<category><![CDATA[Test]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Benchmarks]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Web-Entwicklung]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://localhost/Ruby/2009/01/neue-benchmarks.html</guid>
		<description><![CDATA[<p>Dromaeo hat vor kurzem ein neues Testverfahren eingeführt. Statt der benötigten Zeit für die Tests, wird nun gemessen, wie viele Durchläufe durchschnittlich pro Sekunde in einer fest definierten Zeit erreicht werden. Das macht die ganze Sache langwieriger, aber auch genauer und sagt wesentlich mehr über die Leistungsfähigkeit einer Javascript Engine aus.</p> <p>Statt auf zwei unterschiedlichen [...]]]></description>
			<content:encoded><![CDATA[<p>Dromaeo hat vor kurzem ein neues Testverfahren eingeführt. Statt der benötigten Zeit für die Tests, wird nun gemessen, wie viele Durchläufe durchschnittlich pro Sekunde in einer fest definierten Zeit erreicht werden. Das macht die ganze Sache langwieriger, aber auch genauer und sagt wesentlich mehr über die Leistungsfähigkeit einer Javascript Engine aus.</p>
<p>Statt auf zwei unterschiedlichen Systemen zu messen, habe ich nun unterschiedliche Benchmarks gewählt: Dromaeo Javascript Test (Mozilla.org), SunSpider Javascript Test (Webkit-Team) und V8 Javascript Test (Google).</p>
<p><img src="http://static.madcatswelt.org/wp-content/uploads/2009-01-09.png" alt="Testergebnisse" /></p>
<p>Testsystem: Intel Core 2 Duo E8400, 2 GB RAM, Windows XP SP 3</p>
<p>Ein Bild sagt mehr als 1.000 Worte. Chrome deklassiert alle anderen Browser, nur im hauseigenen V8-Test ist das aktuelle Webkit Nightly Build einen Tick schneller. Wie üblich sind die  Entwickler-Versionen ihren aktuellen Final-Kollegen deutlich voraus, und die Javascript-Leistung des Internet Explorers, sofern er sich überhaupt testen lies, ist ein schlechter Scherz.</p>
<p>Ein blamables Ergebnis für Microsoft, das mit dem IE 8 auch nicht großartig besser werden wird. Wenn man sich in Redmond angesichts solcher vernichtenden Benchmarks nicht endlich im Zugzwang sieht, sind sie entweder blind und/oder blöd. Google treibt die Entwicklung mit großen Schritten voran, während nur Webkit bzw. Apple halbwegs mithalten kann. Mozilla.org und Opera müssen sich sehr anstrengen, um wieder Anschluss zu finden.</p>
<p>Und Microsoft? Tja, ich sehe nur zwei Möglichkeiten: den ganzen alten IE-Quellcode öffentlich verbrennen und komplett neu schreiben, oder man setzt in Zukunft auf Webkit/Squirrelfish bzw. Webkit/V8 oder Gecko/Tracemonkey.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.madcatswelt.org/2009/01/neue-benchmarks.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Von Eichhörnchen-Fischen, Motoren und Spuraffen</title>
		<link>http://www.madcatswelt.org/2009/01/von-eichhornchen-fischen-motoren-und-spuraffen.html</link>
		<comments>http://www.madcatswelt.org/2009/01/von-eichhornchen-fischen-motoren-und-spuraffen.html#comments</comments>
		<pubDate>Sun, 04 Jan 2009 00:49:14 +0000</pubDate>
		<dc:creator>MadCat</dc:creator>
				<category><![CDATA[Test]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[OS X]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Web-Entwicklung]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://localhost/Ruby/2009/01/von-eichhoernchen-fischen-motoren-und-spuraffen.html</guid>
		<description><![CDATA[<p>Oder anders gesagt: Benchmarks von Squirrelfish, V8 und Tracemonkey mit Hilfe von <a href="http://dromaeo.com/">dromaeo.com</a>.</p> <p>Testsystem: Intel Core 2 Duo P8600, 2 GB RAM), MacOS X 10.5.6 (MacBook Pro 15&#8243; 2,4 GHz Late 2008)</p> <p></p> <p>Testystem: Intel Core 2 Duo E8400, 2 GB RAM, Windows XP Service Pack 3</p> <p></p> <p>Das Squirrelfish schnell ist, war ja [...]]]></description>
			<content:encoded><![CDATA[<pre></pre>
<p>Oder anders gesagt: Benchmarks von Squirrelfish, V8 und Tracemonkey mit Hilfe von <a href="http://dromaeo.com/">dromaeo.com</a>.</p>
<p>Testsystem: Intel Core 2 Duo P8600, 2 GB RAM), MacOS X 10.5.6 (MacBook Pro 15&#8243; 2,4 GHz Late 2008)</p>
<p><img title="Ergebnisse (Mac)" src="http://static.madcatswelt.org/wp-content/uploads/2009-01-04_mac.png" alt="Ergebnisse (Mac)" width="552" height="212" /></p>
<pre></pre>
<p>Testystem: Intel Core 2 Duo E8400, 2 GB RAM, Windows XP Service Pack 3</p>
<p><img title="Ergebnisse (PC)" src="http://static.madcatswelt.org/wp-content/uploads/2009-01-04_pc.png" alt="Ergebnisse (PC)" width="552" height="245" /></p>
<p>Das Squirrelfish schnell ist, war ja schon bekannt. Aber das es V8 und Tracemonkey dermaßen in den Hintern tritt, hätte ich nicht gedacht. Auf die Antwort von Mozilla und Google dürfen wir alle gespannt sein.</p>
<p>Anmerkung zum Internet Explorer: leider konnte ich weder den IE 6 noch 7 dazu bewegen, überhaupt einen Benchmark durchlaufen zu lassen. Entweder meldete er Javascript-Fehler oder stürzte ab. Aus Tests von anderen Leuten, ist aber bekannt, dass er im Vergleich extrem langsam ist &#8211; im Schnitt etwa 10 &#8211; 15 Sekunden.</p>
<p>Während bei Safari der Taktenraten- und Cache-Unterschied sich noch halbwegs realistisch in den Ergebissen von OS X und Windows widerspiegelt, zeigt sich bei Firefox, dass Mozilla die Mac-Version noch weiter optimieren sollte.</p>
<p><strong>Update:</strong> Nun mit Diagrammen statt Text-Ergebnissen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.madcatswelt.org/2009/01/von-eichhornchen-fischen-motoren-und-spuraffen.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sapphire</title>
		<link>http://www.madcatswelt.org/2008/12/sapphire.html</link>
		<comments>http://www.madcatswelt.org/2008/12/sapphire.html#comments</comments>
		<pubDate>Mon, 29 Dec 2008 18:46:47 +0000</pubDate>
		<dc:creator>MadCat</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[madcats.welt]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Netbeans]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Web-Entwicklung]]></category>

		<guid isPermaLink="false">http://localhost/Ruby/2008/12/sapphire.html</guid>
		<description><![CDATA[<p>Wie schon angekündigt, habe ich mit dem Umstieg auf Netbeans begonnen, Sapphire komplett neu zu schreiben. Der eigentliche Kern ist nahezu fertig und die ersten Module in Arbeit &#8211; ging alles wesentlich schneller als erwartet. Daher werde ich Ruby nicht mehr weiter entwickeln und die bestehenden Module umschreiben.</p> <p>Dinge, wie die Mandanten-Fähigkeit noch in Ruby [...]]]></description>
			<content:encoded><![CDATA[<p>Wie schon angekündigt, habe ich mit dem Umstieg auf Netbeans begonnen, Sapphire komplett neu zu schreiben. Der eigentliche Kern ist nahezu fertig und die ersten Module in Arbeit &#8211; ging alles wesentlich schneller als erwartet. Daher werde ich Ruby nicht mehr weiter entwickeln und die bestehenden Module umschreiben.</p>
<p>Dinge, wie die Mandanten-Fähigkeit noch in Ruby zu integrieren, obwohl sie im Sapphire-Kern schon implementiert sind, ist sinnlos. Außerdem ermöglicht es die neue Struktur wesentlich schneller und besser, Änderungen am Hauptsystem vorzunehmen. Das Portieren der Ruby-Module sollte relativ schnell und unproblematisch laufen.</p>
<p>Die wichtigsten Unterschied zwischen Ruby und Sapphire:</p>
<ol>
<li>Sapphire ist durchgängig objektorientiert, soweit es PHP 5 ermöglicht.</li>
<li>Es werden ausschließlich Prepared SQL Statements über MySQLi oder PDO unterstützt. </li>
<li>Die Fehler-Verwaltung läuft komplett über Exceptions (SPL und eigene).</li>
<li>Bessere und nun vollständige Implementierung des MVC-Patterns.</li>
<li>Alle Singleton-Patterns wurden entfernt.</li>
<li>Mandantenfähig von Anfang an.</li>
<li>Abstraktionsebene aller Superglobals.</li>
<li>Alle assoziativen Arrays wurden durch Instanzen der Klasse Data ersetzt.</li>
<li>Kleinere Änderungen an der Datenbank, u.a. für die Mandantenfähigkeit. (Ein Import-Script wie von Version 1 auf 2, ist nicht nötig.)</li>
</ol>
<p>Insgesamt bin ich mit bisherigen Stand sehr zufrieden. Vieles ist im Vergleich zu Ruby einfacher geworden, ganz besonders der Modul-Manager &#8211; bei gleichem Funktionsumfang braucht er nur knapp die Hälfte des Quelltexts. Es ist nun wesentlich einfacher, zu überprüfen, ob ein Modul schon geladen ist und an dessen Funktionen heran zu kommen. Zusammen mit einem zukünftig implementierten Observer-Pattern und der Factory des Kerns, ist das die neue Modul-Schnittstelle.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.madcatswelt.org/2008/12/sapphire.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MacBook Pro Erfahrungsbericht #1</title>
		<link>http://www.madcatswelt.org/2008/12/macbook-pro-erfahrungsbericht-1.html</link>
		<comments>http://www.madcatswelt.org/2008/12/macbook-pro-erfahrungsbericht-1.html#comments</comments>
		<pubDate>Wed, 24 Dec 2008 22:23:27 +0000</pubDate>
		<dc:creator>MadCat</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[MacBook]]></category>
		<category><![CDATA[OS X]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[Web-Entwicklung]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[World of Warcraft]]></category>

		<guid isPermaLink="false">http://localhost/Ruby/2008/12/macbook-pro-erfahrungsbericht-1.html</guid>
		<description><![CDATA[<p>Wie versprochen, hier nun der erste Erfahrungsbericht:</p> <p>Allgemeines</p> <p>Zwei Tage sind um und ich bin begeistert. Von den Kinderkrankheiten ist nichts zu merken. Es wurde aber ohnehin mit der neuen Firmware ausgeliefert und das Update auf MacOS X 10.5.6 letzte Woche, dürfte auch dazu beigetragen haben, dass keine Probleme aufgetreten sind</p> <p>MacOS X macht durch [...]]]></description>
			<content:encoded><![CDATA[<p>Wie versprochen, hier nun der erste Erfahrungsbericht:</p>
<p><strong>Allgemeines</strong></p>
<p>Zwei Tage sind um und ich bin begeistert. Von den Kinderkrankheiten ist nichts zu merken. Es wurde aber ohnehin mit der neuen Firmware ausgeliefert und das Update auf MacOS X 10.5.6 letzte Woche, dürfte auch dazu beigetragen haben, dass keine Probleme aufgetreten sind</p>
<p>MacOS X macht durch die stärkere Hardware und das größere Display erst richtig Spaß. Leider fehlt noch ein Mini Displayport-Adapter auf HDMI, so dass ich das MacBook an meinen Monitor anschließen kann. Spätestens Mitte Januar sollten aber welche verfügbar sein, da Apple die Schnittstellen-Spezifikation allen Herstellern kostenlos zur Verfügung stellt.</p>
<p>Dann mit dem MacBook-Display auf 1440&#215;900 und 1920&#215;1200 auf dem 24&#8243;-Monitor, dürfte mein normaler Windows-Rechner arge Konkurrenz bekommen. Allerdings habe ich via Bootcamp nun auch Vista 64 drauf.</p>
<p>Die Installation lief problemlos und kaum langsamer, als auf dem PC. Die anschließende Update-Orgie dauerte mit Service Pack1 und allem drum und dran gute drei Stunden. An der Hardware sollte es aber kaum gelegen haben, obwohl das MacBook nur eine Platte mit 5.400 RPM hat &#8211; evtl. tausche ich sie noch gegen eine 7.200er aus.</p>
<p><strong>Arbeit</strong></p>
<p>Arbeiten mit Netbeans gestaltet sich unter OS X genauso komfortabel wie unter Windows. Dank SVN musste ich nur einen Checkout machen und hatte die kompletten Ruby- und Sapphire-Projekte sofort verfügbar. So kann ich jetzt endlich im Zug an Sapphire weiterarbeiten und kann es zuhause einfach ins SVN stopfen. (Gut, das wäre mit dem PowerBook auch gegangen, aber Netbeans lief darauf kaum arbeitstauglich.)</p>
<p>Allein durch die Touch-Gesten, macht es einfach sehr viel Spaß. Fürs Programmieren braucht man definitiv keine Maus mehr: das meiste läuft eh über die &#8211; sehr gute &#8211; Tastatur, die dank Hintergrundbeleuchtung in dunklen Umgebungen das Tippen erleichert, und alles andere funktioniert perfekt mit dem Multitouch-Trackpad.</p>
<p>Zum vertikalen und horizontalen Scrollen benutzt man einfach zwei Finger. Zoomen und Drehen von Bildern funktionuert wie beim iPhone/iPod touch. Drei Finger um sich iPhoto oder Preview durch die einzeln geöffneten Dateien zu bewegen. Vier Finger nach unten, um Exposé zu öffen; vier Finger nach oben, um Exposé zu schließen, oder falls es geschlossen ist, alle aktive Programme des Spaces zur Seite zu schieben, um den Schreibtisch freizulegen. Außerdem öffnet sich mit vier Fingern horizontal ein Task-Wechsel-Menü.</p>
<p>Apple hat hier sicher noch lange nicht alle Möglichkeiten ausgeschöpft und es werden mit weitere OS X-Versionen sicher noch mehr Gesten folgen. Dazu erleichtert einem die Glasoberfläche das Navigieren erheblich. Bisher habe ich kein Trackpad benutzt, das den Finger ähnlich gut und präzise gleiten lässt. Ingesamt kann man sagen, dass eine Maus komplett überflüssig geworden ist, so lange man nicht pixelgenau arbeiten muss.</p>
<p><strong>Spielen</strong></p>
<p>Der Mac-Client von World of Warcraft ist toll. iTunes ist voll integriert (Hey Blizzard, das geht auf dem PC sicher auch). WoW läuft sehr flüssig, aber leider ist die Geforce 9600M GT mit den neuen Schatten etwas überfordert &#8211; man muss ihr aber zu Gute halten, dass selbst die Radeon HD 4870 dabei ordentlich schuften muss. In den nächsten Tagen werde ich unter Vista noch weitere Spiele testen. Außer Blizzard liefert ja dummerweise niemand OS X-Versionen mit.</p>
<p><strong>Fazit</strong></p>
<p>Normale Notebooks mit dieser Hardware mögen deutlich billiger sein, aber Features wie das Multitouch-Trackpad und so viele andere Dinge &#8211; und wenn es nur die zwei ausklappbaren Haken zum Kabelaufrollen am Netzteil sind &#8211; machen den Preisunterschied mehr als wett. Diese ganzen Kleinigkeiten erleichtern einem die tägliche Arbeit und auch die Freizeit. Der oft ausgesprochene Satz, dass Apple-User nur auf das Design abfahren, mag schon teilweise stimmen. Trotzdem wissen auch viele dies alles zu schätzen. Man merkt einfach, dass Apple bei vielem weiterdenkt, als der Rest und dafür bin ich auch gerne bereit mehr zu zahlen.</p>
<p>Die PC-Konkurrenz hinkt bei Design, Usability, Innovation und selbst der Musikauswahl für Werbung meilenweit hinterher. Der stetig steigende Markanteil von Macs bzw. MacOS X, zeigt doch, dass viele Windows und seine Macken satt haben.</p>
<p>Ich will hier Windows nicht verdammen. Mit XP bin ich seit sieben Jahren sehr zufrieden, aber man kann vieles besser machen und Apple zeigt wie man das anpacken kann. Immerhin hat Microsoft wohl eingesehen, dass Vista ein gigantischer Schuss in den Ofen war und bügelt hoffentlich mit Windows 7 vieles wieder aus. OS X ist zwar in vielen Belangen überlegen, aber in einigen auch nicht und Konkurrenz hat noch keinem geschadet.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.madcatswelt.org/2008/12/macbook-pro-erfahrungsbericht-1.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Array-Objekte in PHP</title>
		<link>http://www.madcatswelt.org/2008/12/array-objekte-in-php.html</link>
		<comments>http://www.madcatswelt.org/2008/12/array-objekte-in-php.html#comments</comments>
		<pubDate>Fri, 12 Dec 2008 16:40:14 +0000</pubDate>
		<dc:creator>MadCat</dc:creator>
				<category><![CDATA[Test]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Web-Entwicklung]]></category>

		<guid isPermaLink="false">http://localhost/Ruby/2008/12/array-objekte-in-php.html</guid>
		<description><![CDATA[<p>Bekanntlich sind Arrays in PHP keine Objekte, wie es z.B. in C# oder Java der Fall ist. Dennoch ist es mit den Interfaces und vorgefertigten Klassen der <a href="http://www.php.net/~helly/php/ext/spl/">Standard PHP Library</a> (SPL) möglich, eine Klasse zu entwerfen, die sich wie ein Array verhält. Das mag überflüssig oder überdimensioniert erscheinen, aber ich halte es für ein [...]]]></description>
			<content:encoded><![CDATA[<p>Bekanntlich sind Arrays in PHP keine Objekte, wie es z.B. in C# oder Java der Fall ist. Dennoch ist es mit den Interfaces und vorgefertigten Klassen der <a href="http://www.php.net/~helly/php/ext/spl/">Standard PHP Library</a> (SPL) möglich, eine Klasse zu entwerfen, die sich wie ein Array verhält. Das mag überflüssig oder überdimensioniert erscheinen, aber ich halte es für ein gutes Beispiel, welche Dinge die SPL möglich macht:</p>
<pre name="code" class="php">&lt;?php

class MyArray implements ArrayAccess, Countable, Iterator {

	private $data = array();
	public $length = 0;
	private $position = 0;
	private $keys = array();

	public function __construct() {
		$args = func_get_args();

		if(count($args) > 0) {
			foreach ($args as $key => $value) {
				$this->data[$key] = $value;
				$this->length++;
			}

			$this->keys = array_keys($this->data);
		}
	}

	public function __destruct() {
		unset($this->data);
	}

	public function __set($offset, $value) {
		return null;
	}

	public function __call($method, $args) {
		return null;
	}

	public function offsetExists($offset) {
		return isset($this->data[$offset]);
	}

	public function offsetGet($offset) {
		return $this->data[$offset];
	}

	public function offsetSet($offset, $value) {
		$this->data[$offset] = $value;
		$this->length++;
		$this->keys = array_keys($this->data);
	}

	public function offsetUnset($offset) {
		unset($this->data[$offset]);
		$this->length--;
		$this->keys = array_keys($this->data);
	}

	public function count() {
		return $this->length;
	}

	public function rewind() {
		$this->position = 0;
	}

	public function next() {
		$this->position++;
	}

	public function key() {
		return $this->keys[$this->position];
	}

	public function current() {
		return $this->data[$this->key()];
	}

	public function valid() {
		if($this->position < $this->length) {
			return true;
		}

		return false;
	}
}

?&gt;</pre>
<p><strong>Interface ArrayAccess:</strong></p>
<ul>
<li>offsetExists()</li>
<li>offsetGet()</li>
<li>offsetSet()</li>
<li>offsetUnset()</li>
</ul>
<p>Diese Methoden sorgen dafür, dass man das Objekt wie ein ganz normales PHP-Array benutzen kann, d.h. eine Einträge hinzufügen, ausgeben oder löschen.</p>
<p><strong>Interface Countable:</strong></p>
<ul>
<li>count()</li>
</ul>
<p>Wie der Name schon sagt, gibt die Methode count() einfach nur die Anzahl der aktuellen Array-Items aus.</p>
<p><strong>Interface Iterator:</strong></p>
<ul>
<li>rewind()</li>
<li>next()</li>
<li>key()</li>
<li>current()</li>
<li>valid()</li>
</ul>
<p>Wer vor PHP 4 schon anbord war, wird diese PHP-Funktionen sicher noch kennen, um assoziative Arrays über eine while()-Schleife zu iterieren. Und nichts anderes machen auch die entsprechenden Methoden. Nur sorgen sie in diesem Fall dafür, dass man das Array-Objekt mit foreach() durchlaufen kann.</p>
<p>Zusätzlich sind die magischen Methoden __set() und __call() leer implementiert, so dass man die Eigenschaft $length nicht überschreiben kann und nicht beabsichtigte Methodenaufrufe verhindert werden. Der Konstruktor ermöglicht außerdem wie bei array() beim Initialisieren Werte in das Array zu schreiben.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.madcatswelt.org/2008/12/array-objekte-in-php.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quo vadis, PHP?</title>
		<link>http://www.madcatswelt.org/2008/12/quo-vadis-php.html</link>
		<comments>http://www.madcatswelt.org/2008/12/quo-vadis-php.html#comments</comments>
		<pubDate>Wed, 10 Dec 2008 15:34:25 +0000</pubDate>
		<dc:creator>MadCat</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Web-Entwicklung]]></category>

		<guid isPermaLink="false">http://localhost/Ruby/2008/12/quo-vadis-php.html</guid>
		<description><![CDATA[<p>Vor knapp zwei Jahren habe ich mir diese Frage im Eintrag »<a href="http://www.madcatswelt.org/2006/12/sorgenkind-php.html">Sorgenkind PHP</a>« schon einmal gestellt. Seit dem hat sich leider kaum etwas getan: PHP 5.2 war 2006 die aktuellste Version und ist es immer noch, obwohl man damals davon ausging, dass PHP 6 im Laufe des Jahres 2007 erscheinen würde.</p> <p>Die Entwicklung geht [...]]]></description>
			<content:encoded><![CDATA[<p>Vor knapp zwei Jahren habe ich mir diese Frage im Eintrag »<a href="http://www.madcatswelt.org/2006/12/sorgenkind-php.html">Sorgenkind PHP</a>« schon einmal gestellt. Seit dem hat sich leider kaum etwas getan: PHP 5.2 war 2006 die aktuellste Version und ist es immer noch, obwohl man damals davon ausging, dass PHP 6 im Laufe des Jahres 2007 erscheinen würde.</p>
<p>Die Entwicklung geht nur schleppend voran. Eigentlich sollte letzte Woche die finale Version 5.3 erscheinen, aber stattdessen kam nur die Alpha 3. Nun wird erste Quartal 2009 als Termin genannt. Momentan glaube ich eher, dass dann erst die Beta-Phase beginnt. An PHP 6 ist momentan gar nicht zu denken.</p>
<p>Sicher bringt 5.3 auch schon viele Neuerungen, u.a. Namespaces und Geschwindigkeitssteigerungen von bis zu 30%, aber langsam bin ich das Warten leid. Probleme wie die nicht einheitliche Namensgebung von integrierten Funktionen/Methoden und Klassen, nicht durchgängige Objektorientierung im Core und in vorhandenen Extensions und vor allem viele sicherheitsrelevante Dinge wie die Typisierung von skalaren Variablen bzw. Parametern oder bessere Möglichkeiten, Benutzereingaben zu kontrollieren, fehlen PHP einfach.</p>
<p>Zwar gibt es für viele dieser Probleme Lösungen durch Frameworks, Extensions oder Tricks. Wirklich zufriedenstellend ist das aber nicht. Andere Sprachen haben dieses Features von Haus aus implementiert und entwickeln sich ständig weiter.</p>
<p>PHP verliert mehr und mehr an Anschluss, wird aber trotzdem erfolgreich bleiben. Objektorientierte Programmierung ist kein Muss, Fehler werden großzügig verziehen und selbst der mieseste Schrottcode, liefert noch brauchbare Ergebnisse. Besonders letzteres ist ein Problem, aber zugleich auch der Grund für den anhaltenden Erfolg. Man muss nicht verstehen, was man programmiert, es funktioniert ja meist auch so.</p>
<p>Ich bin dafür, einen zweiten Entwicklungszweig für PHP einzuführen. Der erste wird so weitergeführt wie bisher, also Script-Kiddie-freundlich ausgerichtet und der andere wird von Grund auf neu entwickelt &#8211; mit allen Features, die eine moderne objektorientierte Sprache im Hinblick auf dynamische Websites braucht. Damit wären die Probleme gelöst und PHP bleibt trotzdem »einsteigerfreundlich«.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.madcatswelt.org/2008/12/quo-vadis-php.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Netbeans</title>
		<link>http://www.madcatswelt.org/2008/12/netbeans.html</link>
		<comments>http://www.madcatswelt.org/2008/12/netbeans.html#comments</comments>
		<pubDate>Wed, 10 Dec 2008 00:25:27 +0000</pubDate>
		<dc:creator>MadCat</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[madcats.welt]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Netbeans]]></category>
		<category><![CDATA[Netz]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Web-Entwicklung]]></category>

		<guid isPermaLink="false">http://localhost/Ruby/2008/12/netbeans.html</guid>
		<description><![CDATA[<p>Einige werden sich fragen, warum ich als primärer PHP- und C#-Entwickler nun über eine Java-IDE schreibe: Seit Version 6.5 hat Netbeans eine offizielle PHP-Unterstützung. Zwar bieten das viele Entwicklungsumgebungen, aber wirklich überzeugen konnte ich mich bisher keine. Zumal mein geliebtes UE Studio teilweise auch entsprechende Funktionen bietet.</p> <p>Netbeans dagegen gefiel mir auf anhieb. Es ist [...]]]></description>
			<content:encoded><![CDATA[<p>Einige werden sich fragen, warum ich als primärer PHP- und C#-Entwickler nun über eine Java-IDE schreibe: Seit Version 6.5 hat Netbeans eine offizielle PHP-Unterstützung. Zwar bieten das viele Entwicklungsumgebungen, aber wirklich überzeugen konnte ich mich bisher keine. Zumal mein geliebtes UE Studio teilweise auch entsprechende Funktionen bietet.</p>
<p>Netbeans dagegen gefiel mir auf anhieb. Es ist klar strukturiert, nicht überfrachtet und hat eine funktionale grafische Oberfläche. Dazu beherrschaft die Code-Vervollständigung sogar noch CSS und Javascript &#8211; bei letzterem werden sogar Browser-Kompatbilitäten der verschiedenen Methoden angezeigt.</p>
<p>Plug-Ins sind für nahezu alle wichtigen Zwecke vorhanden, egal ob C/C++, Ruby, SOA oder CVS/SVN. Außerdem lassen sie sich bequem über das GUI auswählen bzw. verwalten.</p>
<p>Die PHP-Unterstützung ist stellenweise noch etwas holprig. So bietet z.B. das SVN-Modul noch keine Möglichkeit, ein neues Projekt direkt aus einem Checkout zu erstellen. Und es gesellen sich noch ein paar kleinere Bugs dazu. Dennoch kann ich nur empfehlen, Netbeans 6.5 zumindest auszuprobieren. Mit etwas Feinschliff ist genug Potenzial verhanden, eine der besten PHP-IDEs anzubieten. Weiter so, Sun!</p>
<p>Ich habe mich dazu entschlossen, die Weiterentwicklung von Ruby und vor allem Sapphire in Netbeans zu übernehmen. Den bereits vorhandenen Code von Sapphire habe ich gelöscht und das Projekt neu begonnen. Meine bisherigen Konzepte haben sich schnell als nicht praktikabel herausgestellt.</p>
<p>Manchmal hätte ich große Lust, PHP zum Teufel zu jagen und alles mit C# bzw. ASP.NET zu machen, aber ein Windows-Webserver kommt definitiv nicht in Frage. Hierzu werde ich in den nächsten Tagen noch etwas ausführlicher schreiben.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.madcatswelt.org/2008/12/netbeans.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby Alpha 3</title>
		<link>http://www.madcatswelt.org/2008/09/ruby-alpha-3.html</link>
		<comments>http://www.madcatswelt.org/2008/09/ruby-alpha-3.html#comments</comments>
		<pubDate>Sun, 14 Sep 2008 19:44:51 +0000</pubDate>
		<dc:creator>MadCat</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[madcats.welt]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Web-Entwicklung]]></category>

		<guid isPermaLink="false">http://localhost/Ruby/2008/09/ruby-alpha-3.html</guid>
		<description><![CDATA[<p>Änderungen gegenüber der Alpha 2:</p> Klasse Config: Methode delVar() entfernt Methode delete() hinzufügt:<br />Vereinheitlicht das Namensschema und ist in der Lage mehrere Konfigurationsvariablen auf einmal zu löschen. Magische Methode __toString() implementiert.<br />Gibt alle gespeicherten Konfigurationsvariablen mittels print_r() zurück. Magische Methode __get() gibt nun eine Fehlermeldung zurück, wenn auf eine nicht verfügbare Konfigurationsvariable zugegriffen wird. Konfigurationsvariablen [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Änderungen gegenüber der Alpha 2:</strong></p>
<ul>
<li>Klasse Config:
<ol>
<li>Methode <em>delVar()</em> entfernt</li>
<li>Methode <em>delete()</em> hinzufügt:<br />Vereinheitlicht das Namensschema und ist in der Lage mehrere Konfigurationsvariablen auf einmal zu löschen.</li>
<li>Magische Methode <em>__toString()</em> implementiert.<br />Gibt alle gespeicherten Konfigurationsvariablen mittels <em>print_r()</em> zurück.</li>
<li>Magische Methode <em>__get()</em> gibt nun eine Fehlermeldung zurück, wenn auf eine nicht verfügbare Konfigurationsvariable zugegriffen wird.</li>
<li>Konfigurationsvariablen <em>ScriptName</em>, <em>ScriptDir</em>, <em>ScriptRoot</em>, <em>ScriptURL</em>, <em>TemplateDir</em>, <em>TemplateURL</em>, <em>TemplateName</em>, <em>TemplateDateFormat</em>, <em>TemplateTimeFormat </em>und <em>TemplateDateTimeFormat </em>wurden in die Unterobjekte <em>script</em> und <em>template</em> der Klasse Data zugeorndet. Die Präfixe <em>Template</em> und <em>Script</em> entfallen. Außerdem beginnen die Eigenschaften alle mit Kleinbuchstaben.</li>
</ol>
</li>
<li>Klasse MySmarty:
<ol>
<li>Es ist nicht länger notwendig, die Smarty-Methoden <em>assign()</em> und <em>assign_by_ref()</em> zu verwenden, um Smarty Variablen zuzuweisen. Stattdessen wird über die magischen Methoden <em>__get()</em> und <em>__set()</em> dem Smarty-Objekt der entsprechende Wert übergeben.</li>
<li>Magische Methoden <em>__get()</em>, <em>__set()</em>, <em>__isset()</em> und <em>__unset()</em> implementiert.<br />Ermöglichen og. Vereinfachungen, um Smarty mit Variablen zu füttern.</li>
</ol>
</li>
<li>Vereinheitlichtes Namensschema aller Konfigurationsvariablen entsprechend og. Änderungen zu Kleinbuchstaben am Namensbeginn.</li>
<li>Vereinheitlichte Klassennamen im Core-System.</li>
<li>Datenbankschnittstelle über PDO hinzugefügt, Ausnahmen werden über die Klasse PDOException statt DbException gehandhabt.</li>
<li>Die verfügbaren Datenbankschnittstellen MySQL, MySQLi und PDO lassen sich über die Konfigurationsdatei anwählen.</li>
<li>Markup-Vereinfachungen im Standard-Layout</li>
<li>Update auf Smarty 2.6.20 und jQuery 1.2.6</li>
<li>Anpassungen aller Klassen und Templates an das neue Namensschema und Smarty-Variablen-Handling.</li>
<li>Funktion <em>json_encode()</em> wird hinzugefügt, falls PHP 5.2 ohne JSON-Erweiterung kompiliert wurde.</li>
<li>Grundsätzliche Funktionalität, um falsch als Spam oder Ham erkannte Kommentare an Akismet zu melden.</li>
<li>Weitere kleine Optimierungen und Vereinfachungen der Core- und Modul-Klassen.</li>
</ul>
<p><strong>Geplante Änderungen bis zur ersten Beta-Version:</strong></p>
<ul>
<li>Wegfall der normalen MySQL-Schnittstelle und Unterstützung für MySQL 4.1.</li>
<li>Absicherung über vorbereitete SQL-Abfragen mittels der Methode <em>prepare()</em> von MySQLi bzw. PDO.</li>
<li>Namespaces für den Core und die Module, sofern PHP 5.3 verfügbar ist.</li>
<li>Admin-Bereich für Kategorien/Tags, Kommentare, Bilder, Texte und Konfigurations-Verwaltung.</li>
<li>Neues Tag- und Kategorie-Handling im Admin-Bereich.</li>
<li>Spam-Schutz ohne Akismet und Captchas.</li>
<li>Module Texts und Images implementieren.</li>
<li>Multi-Weblog-Unterstützung über mehrere Domains hinweg.</li>
<li><em>json_encode()</em> durch <em>Zend_Json_Encoder::encode()</em> ersetzen.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.madcatswelt.org/2008/09/ruby-alpha-3.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Singleton mit PHP 5</title>
		<link>http://www.madcatswelt.org/2008/08/singleton-mit-php-5.html</link>
		<comments>http://www.madcatswelt.org/2008/08/singleton-mit-php-5.html#comments</comments>
		<pubDate>Fri, 15 Aug 2008 17:18:02 +0000</pubDate>
		<dc:creator>MadCat</dc:creator>
				<category><![CDATA[Test]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web-Entwicklung]]></category>

		<guid isPermaLink="false">http://localhost/Ruby/2008/08/singleton-mit-php-5.html</guid>
		<description><![CDATA[<p>Singleton ist ein sog. Design Pattern, zu Deutsch Entwurfsmuster. Einfach gesagt, sind es Standardlösungen für bestimmte Problemstellungen innerhalb der objektorientierten Programmierung, die immer wieder auftreten.</p> <p>Eines der einfachsten Muster ist das Singleton. Es stellt sicher, dass von einer Klasse nur eine Instanz erzeugt werden kann und keine weitere. Bei bestimmten Objekten, z.B. für die Datenbank-Verbindung, [...]]]></description>
			<content:encoded><![CDATA[<p>Singleton ist ein sog. Design Pattern, zu Deutsch Entwurfsmuster. Einfach gesagt, sind es Standardlösungen für bestimmte Problemstellungen innerhalb der objektorientierten Programmierung, die immer wieder auftreten.</p>
<p>Eines der einfachsten Muster ist das Singleton. Es stellt sicher, dass von einer Klasse nur eine Instanz erzeugt werden kann und keine weitere. Bei bestimmten Objekten, z.B. für die Datenbank-Verbindung, kann das sehr hilfreich sein. Da ein Singleton über eine statische Methode aufgerufen wird, ist es außerdem möglich dieselbe Instanz einer Klasse ohne Probleme überall im Script aufrufen zu können &#8211; widerrum sehr nützlich bei Datenbanken.</p>
<p>So sieht in Singleton in PHP 5 aus:</p>
<pre name="code" class="php">&lt;?php

class Demo {

	/**
	 * @access private
	 * @static
	 * @var object
	 */

	private static $_instance = null;

	/**
	 * Singleton
	 *
	 * @access public
	 * @static
	 * @return object self::$Instance
	 */

	public final static function getInstance() {
		if(!self::$_instance instanceof Demo) {
			self::$_instance = new Demo();
		}

		return self::$_instance;
	}

	/**
	 * Constructor
	 *
	 * @access private
	 */

	private function __construct() {
		// Code
	}

	/**
	 * No Clone Wars
	 *
	 * @final
	 * @access private
	 */

	public final function __clone() {
		return null;
	}

}

?&gt;</pre>
<p>Zuerst wird das statische Attribut <em>$instance</em> als null definiert, gefolgt von der statischen Methode <em>getInstance()</em>. Die überprüft, ob in <em>self::$instance</em> bereits eine Instanz der Klasse hinterlegt ist. Falls nein, wird ein neues Objekt erstellt und die Referenz in <em>self::$instance</em> gespeichert. Anschließend gibt <em>getInstance()</em> die Instanz der Klasse zurück.</p>
<p>Wichtig ist, dass der Konstruktor der Klasse als <em>private</em> definiert ist. Somit ist sichergestellt, dass nur <em>getInstance()</em> ihn aufrufen kann und man keine weiteres Objekt der Klasse erzeugen darf. Ebenso muss die Methode <em>__clone()</em> als <em>private</em> deklariert werden, damit das Objekt nicht kopiert werden darf.</p>
<p>Mit folgendem Code erhält man nun die Instanz der Klasse:</p>
<pre name="code" class="php">$demo = Demo::getInstance();</pre>
<p>Dieser Aufruf funktioniert überall, sobald die entsprechende Klasse eingebunden wurde.</p>
<p>Das Singleton Pattern ist aus diversen Gründen recht umstritten. Viele sind der Ansicht, dass man es gar nicht bräuchte. Das mag vielleicht in der normalen Anwendungsentwicklung zutreffen, aber für Web-Programmierung mit PHP, ist es insbesondere bei Datenbank-Verbindungen sinnvoll. Gerade Anfänger begehen oft in dieser Hinsicht, da die alte MySQL-Schnittstelle verwendet und auf die Verwaltung der einzelnen Verbindungen zum Datenbank-Server gepfiffen wird. Eine DB-Klasse mit Singleton stellt sicher, dass es nur eine Verbindung gibt und das entsprechende Objekt überall verfügbar ist.</p>
<p><strong>Hinweis:</strong> aufgrund der mangelhaften Objekt-Unterstützung in PHP 4, ist ein Singleton dort &#8211; in der oben gezeigten. Form &#8211; nicht möglich.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.madcatswelt.org/2008/08/singleton-mit-php-5.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Es muss nicht immer Flash sein</title>
		<link>http://www.madcatswelt.org/2008/08/es-muss-nicht-immer-flash-sein.html</link>
		<comments>http://www.madcatswelt.org/2008/08/es-muss-nicht-immer-flash-sein.html#comments</comments>
		<pubDate>Sat, 02 Aug 2008 17:21:00 +0000</pubDate>
		<dc:creator>MadCat</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Metroid]]></category>
		<category><![CDATA[Web-Entwicklung]]></category>

		<guid isPermaLink="false">http://localhost/Ruby/2008/08/es-muss-nicht-immer-flash-sein.html</guid>
		<description><![CDATA[<p>Umgesetzt mit <a href="http://dhonishow.de/">Dhonishow</a>. Basierte früher auf Prototype, wurde nun auf jQuery umgestellt und macht so manche Flash-Animation neidisch. Gepackt hat das Script gerade mal 8 KB, dazu kommt ein Stylesheet und ein paar Grafiken. Insgesamt sind es knappe 20 KB.</p> <p>Eine Galerie damit zu bauen, ist kinderleicht. Man muss nur das Stylesheet und die [...]]]></description>
			<content:encoded><![CDATA[<div class="dhonishow effect_slide duration_1dot0 center-width_566 center-height_440"><img src="uploads/img/samus1.jpg" alt="Samus Aran" /><img src="uploads/img/samus2.jpg" alt="One girl in all the world" /></div>
<p>Umgesetzt mit <a href="http://dhonishow.de/">Dhonishow</a>. Basierte früher auf Prototype, wurde nun auf jQuery umgestellt und macht so manche Flash-Animation neidisch. Gepackt hat das Script gerade mal 8 KB, dazu kommt ein Stylesheet und ein paar Grafiken. Insgesamt sind es knappe 20 KB.</p>
<p>Eine Galerie damit zu bauen, ist kinderleicht. Man muss nur das Stylesheet und die jQuery-Erweiterung einbinden &#8211; ggf. noch jQuery selbst, wenn es bisher nicht nutzt. Die Galerie-Bilder packt man nun in ein div-Element und weist diesem einfach ein paar Klassen dazu, die man sich einfach per Klick auf der Dhonishow-Website, je nach gewünschten Effekten, zusammenstellen kann.</p>
<p>Die Samus-Artworks stammen von <a href="http://transfuse.deviantart.com/">Ivan Flores</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.madcatswelt.org/2008/08/es-muss-nicht-immer-flash-sein.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Spaß mit jQuery</title>
		<link>http://www.madcatswelt.org/2008/06/spas-mit-jquery.html</link>
		<comments>http://www.madcatswelt.org/2008/06/spas-mit-jquery.html#comments</comments>
		<pubDate>Thu, 19 Jun 2008 00:35:18 +0000</pubDate>
		<dc:creator>MadCat</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Web-Entwicklung]]></category>

		<guid isPermaLink="false">http://localhost/Ruby/2008/06/spass-mit-jquery.html</guid>
		<description><![CDATA[<p>Das letzte meiner <a href="2008/06/jquery-beispiele.html">jQuery-Beispiele</a> beschäftigt sich ja damit, externen Links ein Icon und target=&#8221;_blank&#8221; zu verpassen. Mit allem drum und dran umfasst die Funktion zehn Zeilen Code. Dank ein paar Tricks und der wunderbaren CSS-Selektor-Syntax, geht das ganze aber auch in einer einzigen Zeile:</p> $('#content .post a:not([href^="' + $('base').attr('href') + '"])[href^="http://"]').css('background', 'url(' + templateURL [...]]]></description>
			<content:encoded><![CDATA[<p>Das letzte meiner <a href="2008/06/jquery-beispiele.html">jQuery-Beispiele</a> beschäftigt sich ja damit, externen Links ein Icon und target=&#8221;_blank&#8221; zu verpassen. Mit allem drum und dran umfasst die Funktion zehn Zeilen Code. Dank ein paar Tricks und der wunderbaren CSS-Selektor-Syntax, geht das ganze aber auch in einer einzigen Zeile:</p>
<pre name="code" class="js">$('#content .post a:not([href^="' + $('base').attr('href') + '"])[href^="http://"]').css('background', 'url(' + templateURL + 'img/shape_move_forwards.png) no-repeat right 1px').css('padding-right', '20px').attr('title', 'Externer Link').attr('target', '_blank');</pre>
<p>Es werden also alle a-Element der Klasse &#8220;post&#8221; innerhalb der ID &#8220;content&#8221; angewählt, die nicht mit der Basis-URL, aber dafür mit &#8220;http://&#8221; beginnen. So wird sichergestellt, dass alle externen Links erwischt werden, aber z.B. relative interne Links (die <a href="http://tinymce.moxiecode.com/">TinyMCE</a> gerne macht) oder ID-Aufrufe nicht betroffen sind.</p>
<p>Allen betroffenen Elementen wird nun das Icon als Hintergrundbild zugewiesen, ein entsprechendes Padding gesetzt, sowie das title- und target-Attribut.</p>
<p>Mit einer so effizienten und gleichzeitig einfachten Syntax zu arbeiten, macht einfach Spaß. Und so lange diese CSS-Selektoren noch nicht vollständig implementiert sind, hilft jQuery browser-unabhängig aus.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.madcatswelt.org/2008/06/spas-mit-jquery.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery-Beispiele</title>
		<link>http://www.madcatswelt.org/2008/06/jquery-beispiele.html</link>
		<comments>http://www.madcatswelt.org/2008/06/jquery-beispiele.html#comments</comments>
		<pubDate>Sun, 15 Jun 2008 22:00:00 +0000</pubDate>
		<dc:creator>MadCat</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Web-Entwicklung]]></category>

		<guid isPermaLink="false">http://localhost/Ruby/2008/06/jquery-beispiele.html</guid>
		<description><![CDATA[<p>Es gibt zwar viele Javascript-Frameworks, aber sowohl privat als auch im Büro bevorzuge ich <a href="http://jquery.com/">jQuery</a>. Mit knapp 31 KB (gepackt) ist es schön klein, nicht überladen und inzwischen auch recht flott. Der größte Vorteil ist aber, dass der Zugriff auf die DOM-Objekte über die CSS-Syntax erfolgt &#8211; und auch mit den Selektoren, die z.B. [...]]]></description>
			<content:encoded><![CDATA[<p>Es gibt zwar viele Javascript-Frameworks, aber sowohl privat als auch im Büro bevorzuge ich <a href="http://jquery.com/">jQuery</a>. Mit knapp 31 KB (gepackt) ist es schön klein, nicht überladen und inzwischen auch recht flott. Der größte Vorteil ist aber, dass der Zugriff auf die DOM-Objekte über die CSS-Syntax erfolgt &#8211; und auch mit den Selektoren, die z.B. der Internet Explorer nicht unterstützt.</p>
<p>Anhand von ein paar Code-Zeilen, die ich hier im Blog verwende, wird klar wie simpel, aber auch mächtig jQuery ist.</p>
<p>Grundsätzlich befinden sich alle Funktionen in der jQuery-Methode ready(), die auf das gesamte DOM angewandt wird. Dabei werden die Elemente schon manipuilert, sobald der DOM-Baum fertig geladen ist und nicht erst, wie beim Event onload(), wenn alles geladen wurde.</p>
<pre name="code" class="js">$(document).ready(function() {	Code &#8230;});</pre>
<p>jQuery bietet ein eigenes Event-Handling an, das es über die CSS-Syntax ermöglicht Events an DOM-Elemente zu hängen. Als Beispiel fungiert hier das Abschicken eines Textfeldes beim Druck auf Enter.</p>
<pre name="code" class="js">$('form input[type="text"]').keyup(function(event) {	if(event.keyCode == 13) {		$(this).parents('form').submit();	}});</pre>
<p>Damit wird an jedes Textfeld das Event keyup() gebunden und beim Druck auf Enter das übergeordnete Formular abgeschickt.</p>
<p>Als zweites Beispiel dient die automatische Erkennung, ob ein Link innerhalb eines Blog-Eintrags auf eine externe Seite verweist und falls ja, automatisch das Attribut target auf &#8220;_blank&#8221; gesetzt wird, sowie dem a-Elemet ein Bild für eine entsprechende Kennzeichnung als externer Link anhängt wird.</p>
<pre name="code" class="js">$('#content .post a').each(function() {	if($(this).attr('href').indexOf($('base').attr('href')) == -1 		 &amp;&amp; $(this).attr('href') != '#' &amp;&amp; $(this).children('img').length == 0 		 &amp;&amp; $(this).attr('href').indexOf('javascript:') == -1) {

		$(this).attr('title', 'Externer Link').attr('target', '_blank');		$(this).after(' <a title="Externer Link" href="' + $(this).attr('href') + '" target="_blank"><img style="vertical-align: middle;" src="' + templateURL + 'img/shape_move_forwards.png" alt="External link" /></a>');	}});</pre>
<p>&#8220;$(this)&#8221; steht für aktuelle Element des each-Durchlaufs. Es handelt sich dabei aber um ein jQuery-Objekt, das z.B. nicht alle DOM-Methoden erlaubt. In einer each-Schleife ist aber auch der Zugriff auf das DOM-Element über &#8220;this&#8221; möglich.</p>
<p>Die If-Bedingung prüft, ob die verlinkte URL zur eigenen Seite gehört, ob sie einen Anker-Aufruf enthält oder Javascript-Code ausführt. Trifft nichts von dem zu, werden die Attribute &#8220;title&#8221; und &#8220;target&#8221; gesetzt. Solche Verkettungen sind möglich, weil jede manipulierende jQuery-Methode eine Referenz auf das bearbeitete Objekt zurückgibt. Danach wird dem a-Element ein weiteres a anhängt, das die Bild-Kennzeichnung für einen externen Link enthält.</p>
<p>Zu guter letzt noch ein Einzeiler, der ein Problem mit dem Syntax Highlighter löst. Aus Kompatibilitätsgründen zu älteren Einträgen bin ich leider gezwungen, jeden Text durch die PHP-Funktion nl2br() zu schicken, um Zeilenumbrüche in br-Elemente ersetzen zu lassen. Bei Code-Ausschnitten in pre-Elementen ergibt sich dabei ein Problem, weil entweder das br-Element als Text am jeder Zeile anzeigt wird oder sogar umgebrochen wird und somit zig überflüssige Leerzeilen vorhanden sind.</p>
<pre name="code" class="js">$('pre[name="code"] br').remove();</pre>
<p>Damit werden alle br-Elemente entfernt und die Code-Ansicht ist sauber. Sicherlich hätte man das ganze auch gleich serverseitig lösen können, aber wozu sich mit regulären Ausdrücken rumquälen, wenn eine Zeile Javascript ausreicht?</p>
<p>Ich hoffe, dass meine Beispiele halbwegs verständlich sind und der ein oder andere, sich entschließt jQuery eine Chance zu geben &#8211; es lohnt sich!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.madcatswelt.org/2008/06/jquery-beispiele.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Quo vadis, GUI?</title>
		<link>http://www.madcatswelt.org/2006/05/quo-vadis-gui.html</link>
		<comments>http://www.madcatswelt.org/2006/05/quo-vadis-gui.html#comments</comments>
		<pubDate>Sun, 21 May 2006 20:40:11 +0000</pubDate>
		<dc:creator>MadCat</dc:creator>
				<category><![CDATA[Gedanken]]></category>
		<category><![CDATA[Netz]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Web-Entwicklung]]></category>

		<guid isPermaLink="false">http://localhost/Ruby/2006/05/quo-vadis-gui.html</guid>
		<description><![CDATA[<p>Bin ich eigentlich der einzige, der sich von diesem ganzen Effekt-Overkill in Benutzeroberflächen regelrecht gestört fühlt? Echtzeitvorschau von Tasks und Fenstern, transparente Fenster, 3D-Effekte für Mini- und Maximieren oder sogar noch weit übertriebener, wie es <a href="http://video.google.com/videoplay?docid=431574721033313224&#38;q=xgl">XGL</a> unter Linux möglich macht.</p> <p>Klar, sieht nett aus, aber hat es irgendeinen praktischen Nutzen? Für mich jedenfalls keinen. [...]]]></description>
			<content:encoded><![CDATA[<p>Bin ich eigentlich der einzige, der sich von diesem ganzen Effekt-Overkill in Benutzeroberflächen regelrecht gestört fühlt? Echtzeitvorschau von Tasks und Fenstern, transparente Fenster, 3D-Effekte für Mini- und Maximieren oder sogar noch weit übertriebener, wie es <a href="http://video.google.com/videoplay?docid=431574721033313224&amp;q=xgl">XGL</a> unter Linux möglich macht.</p>
<p>Klar, sieht nett aus, aber hat es irgendeinen praktischen Nutzen? Für mich jedenfalls keinen. Im Gegenteil, es behindert teilweise nur die Arbeit. Man sieht ja auch an vielen Websites, daß ein aufwendiges Design mit Flash-Spielereien und Javascript-Orgien oft grausig zu bedienen ist und meistens keine Inhalte hat.<br />Die Entwickler sollten lieber darüber nachdenken, wie man GUIs sinnvoll durch solche Dinge erweitern kann und nicht Effekte um der Effekte Willen einbauen, die niemand braucht und einem spätestens nach dem Sattsehen auf den Keks gehen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.madcatswelt.org/2006/05/quo-vadis-gui.html/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using memcached
Database Caching 3/81 queries in 0.026 seconds using memcached
Object Caching 1370/1556 objects using memcached
Content Delivery Network via Amazon Web Services: CloudFront: static.madcatswelt.org

Served from: www.madcatswelt.org @ 2012-02-06 06:59:10 -->
