<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><!-- generator="wordpress/2.3" --><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Nachrichten:Scheinwohnsitz</title>
	<link>http://blog.scheinwohnsitz.de</link>
	<description>Ein weiteres tolles WordPress-Blog</description>
	<pubDate>Mon, 22 Oct 2007 07:56:15 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3 DE-Edition</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/scheinwohnsitz" /><feedburner:info uri="scheinwohnsitz" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>JavaScript - Komprimierung</title>
		<link>http://feedproxy.google.com/~r/scheinwohnsitz/~3/par5_wtWlxQ/</link>
		<comments>http://blog.scheinwohnsitz.de/?p=12#comments</comments>
		<pubDate>Fri, 19 Oct 2007 19:49:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://blog.scheinwohnsitz.de/?p=12</guid>
		<description><![CDATA[Bei der JavaScript-Entwicklung werden die Dateien meist durch Formatierungen und Kommentare unnötig aufgebläht, was unter anderem beim Laden einer Seite zu einem höheren Datentransfer zwischen Client und Server führt.
Um diesen Faktor zu minimieren, kann man jedoch folgende Lösungen einsetzen:
Compressoren
Compressoren analysieren den Quellcode einer Datei und entfernen Zeilenumbrüche, -einschübe und kommentare. Zudem werden Variablen- bzw. Funktionsnamen [...]]]></description>
			<content:encoded><![CDATA[<p>Bei der JavaScript-Entwicklung werden die Dateien meist durch Formatierungen und Kommentare unnötig aufgebläht, was unter anderem beim Laden einer Seite zu einem höheren Datentransfer zwischen Client und Server führt.</p>
<p>Um diesen Faktor zu minimieren, kann man jedoch folgende Lösungen einsetzen:</p>
<p><strong>Compressoren</strong></p>
<p>Compressoren analysieren den Quellcode einer Datei und entfernen Zeilenumbrüche, -einschübe und kommentare. Zudem werden Variablen- bzw. Funktionsnamen gegen einzelne Buchstaben bzw. Zahlen ausgetauscht. Die eigentlichen Namen, gehen hierbei jedoch nicht verloren, sondern werden in ein separates Index-Objekt ausgelagert. Das so entstandene Konstrukt wird in eine eval-Funktion gepackt, so dass der entstandene String vom Browser interpretiert werden kann.</p>
<p><em>Tools:</em></p>
<blockquote><p>JavaScript-Online-Compressor: <a href="http://dean.edwards.name/packer/">dean.edwards.name</a></p></blockquote>
<blockquote><p>Java-Compressor: <a href="http://developer.yahoo.com/yui/compressor/">YUI Compressor</a></p></blockquote>
<p><strong>gzip</strong></p>
<p>gzip ist ein Kompressions-Format, dass von jedem gängigen Browser gelesen und ausgewertet werden kann. Eine JavaScript-Datei muss hierzu nur als gzip-Archiv verpackt werden und kann danach wie eine normale JavaScript Datei in den HTML-Quellcode eingebunden werden. Wichtig hierbei ist jedoch, dass die Endung &#8220;gz&#8221; nicht mit angegeben wird.</p>
<p><em>Beispiel:</em></p>
<p><code>//Einbindung der Datei foo.js.gz<br />
&lt;script src="foo.js" type="text/javascript"&gt;&lt;/script&gt;</code></p>
<p><em>Tools &amp; Links:</em></p>
<blockquote><p>gzip-Packer: <a href="http://www.7-zip.org/">7-zip</a></p>
<p>Apache-Tutorial: <a href="http://schroepl.net/projekte/mod_gzip.src/doku_download/deutsch/">Auslieferung komprimierter Inhalte</a></p></blockquote>
<p><strong>Fazit </strong></p>
<p>Um eine maximale Datenkompression zu erhalten, kombiniert man am besten die oben erwähnten Lösungen. Um sich ein Bild von der so erzielten Volumeneinsparung machen zu können, kann man folgenden Link empfehlen:</p>
<blockquote><p><a href="http://compressorrater.thruhere.net/">CompressorRater</a></p></blockquote>
<img src="http://feeds.feedburner.com/~r/scheinwohnsitz/~4/par5_wtWlxQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.scheinwohnsitz.de/?feed=rss2&amp;p=12</wfw:commentRss>
		<feedburner:origLink>http://blog.scheinwohnsitz.de/?p=12</feedburner:origLink></item>
		<item>
		<title>dojox.cometd - Defekter “unsubscribe”-Befehl</title>
		<link>http://feedproxy.google.com/~r/scheinwohnsitz/~3/JawB4jONuKA/</link>
		<comments>http://blog.scheinwohnsitz.de/?p=11#comments</comments>
		<pubDate>Thu, 18 Oct 2007 13:16:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Cometd]]></category>

		<category><![CDATA[Dojo]]></category>

		<guid isPermaLink="false">http://blog.scheinwohnsitz.de/?p=11</guid>
		<description><![CDATA[Dojo bietet für den Cometd-Server einer passende Schnittstelle an, die auf dem Bayeux-Protokoll aufbaut, und genutzt wird um sich bei Kanälen an- bzw. abzumelden. Die Befehle hiefür lauten &#8220;subscribe&#8221; und &#8220;unsubscribe&#8221;. Unsubscribe ist jedoch noch mit einem Bug gespickt.
Folgendes Beispiel soll dies verdeutlichen:

dojox.cometd.subscribe('/foo/test', this, 'foo' );
dojox.cometd.unsubscribe('/foo/test', this, 'foo' );
dojox.cometd.subscribe('/foo/test', this, 'foo' );
dojox.cometd.unsubscribe('/foo/test', this, 'foo' );
dojox.cometd.subscribe('/foo/test', [...]]]></description>
			<content:encoded><![CDATA[<p>Dojo bietet für den Cometd-Server einer passende Schnittstelle an, die auf dem Bayeux-Protokoll aufbaut, und genutzt wird um sich bei Kanälen an- bzw. abzumelden. Die Befehle hiefür lauten &#8220;subscribe&#8221; und &#8220;unsubscribe&#8221;. Unsubscribe ist jedoch noch mit einem Bug gespickt.</p>
<p>Folgendes Beispiel soll dies verdeutlichen:<br />
<code><br />
dojox.cometd.subscribe('/foo/test', this, 'foo' );<br />
dojox.cometd.unsubscribe('/foo/test', this, 'foo' );<br />
dojox.cometd.subscribe('/foo/test', this, 'foo' );<br />
dojox.cometd.unsubscribe('/foo/test', this, 'foo' );<br />
dojox.cometd.subscribe('/foo/test', this, 'foo' );<br />
dojox.cometd.publish( '/foo/test', {  } );</code></p>
<p>In diesem aufgezeigten Fall, deaktiviert dojox zwar den gebuchten Kanal, jedoch nur temporär, was dazu führt, dass nach dem Publish die Funktion &#8220;foo&#8221; 3x aufgerufen wird. Da dieser Bug auch in der Version 0.9 von Dojo noch vorhanden ist, gibt es einen Patch, der jedoch manuell nachgetragen werden muss.</p>
<p>Eine Anleitung hierzu findet man unter:</p>
<p><a href="http://trac.dojotoolkit.org/attachment/ticket/3895/dojox-cometd-fix.patch">dojox-cometd-fix</a></p>
<img src="http://feeds.feedburner.com/~r/scheinwohnsitz/~4/JawB4jONuKA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.scheinwohnsitz.de/?feed=rss2&amp;p=11</wfw:commentRss>
		<feedburner:origLink>http://blog.scheinwohnsitz.de/?p=11</feedburner:origLink></item>
		<item>
		<title>CSS - Regel für den Regel-Namen</title>
		<link>http://feedproxy.google.com/~r/scheinwohnsitz/~3/5usfQfyrF-g/</link>
		<comments>http://blog.scheinwohnsitz.de/?p=9#comments</comments>
		<pubDate>Tue, 16 Oct 2007 08:44:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://blog.scheinwohnsitz.de/?p=9</guid>
		<description><![CDATA[Ich halte fest, nach 6-stündiger Fehlersuche:
Der CSS-Regel-Name, muss &#8230;

aus Buchstaben und Zahlen bestehen
mit einem Buchstaben beginnen

Dumm nur, wenn man sich bei jedem Aufruf einer Seite eine ID generieren lässt und diese einmal mit einem Buchstaben bzw. mit einer Zahl beginnt. Dann wird die Fehlersuche zur Suche nach der Nadel im Heuhaufen.
]]></description>
			<content:encoded><![CDATA[<p>Ich halte fest, nach 6-stündiger Fehlersuche:</p>
<p>Der CSS-Regel-Name, muss &#8230;</p>
<ul>
<li>aus Buchstaben und Zahlen bestehen</li>
<li>mit einem Buchstaben beginnen</li>
</ul>
<p>Dumm nur, wenn man sich bei jedem Aufruf einer Seite eine ID generieren lässt und diese einmal mit einem Buchstaben bzw. mit einer Zahl beginnt. Dann wird die Fehlersuche zur Suche nach der Nadel im Heuhaufen.</p>
<img src="http://feeds.feedburner.com/~r/scheinwohnsitz/~4/5usfQfyrF-g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.scheinwohnsitz.de/?feed=rss2&amp;p=9</wfw:commentRss>
		<feedburner:origLink>http://blog.scheinwohnsitz.de/?p=9</feedburner:origLink></item>
		<item>
		<title>TribalFX - JavaScript Framework</title>
		<link>http://feedproxy.google.com/~r/scheinwohnsitz/~3/c5eq1z4xhcY/</link>
		<comments>http://blog.scheinwohnsitz.de/?p=6#comments</comments>
		<pubDate>Thu, 11 Oct 2007 13:43:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Allgemein]]></category>

		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://blog.scheinwohnsitz.de/?p=6</guid>
		<description><![CDATA[Bei TribalFX handelt es sich um ein Framework, dass dem Benutzer nicht eine  reichhaltige Anzahl an Widgets bieten soll, sondern die Funktionalität  und Effektivität des Javascripts erweitern soll. D.h. es soll weitestgehend die objektorientierte Entwicklung unterstützt  werden aber auch die funktionale Erweiterbarkeit des DOM im Fokus stehen.
Die Schwerpunkte bei der Entwicklung des [...]]]></description>
			<content:encoded><![CDATA[<p>Bei TribalFX handelt es sich um ein Framework, dass dem Benutzer nicht eine  reichhaltige Anzahl an Widgets bieten soll, sondern die Funktionalität  und Effektivität des Javascripts erweitern soll. D.h. es soll weitestgehend die objektorientierte Entwicklung unterstützt  werden aber auch die funktionale Erweiterbarkeit des DOM im Fokus stehen.</p>
<p>Die Schwerpunkte bei der Entwicklung des Frameworks lagen auf folgenden Punkten:</p>
<ul>
<li>strikte Trennung von HTML, JavaScript und CSS</li>
<li>Erweiterung der Funktionsbibliotheken von HTML-Elementen</li>
<li>Erweiterung der Funktionsbibliotheken von Objekten</li>
<li>AJAX mit Berechnung einer prozentualen Fortschrittsanzeige</li>
<li>Bearbeitung von CSS-Eigenschaften direkt in der Stylesheet-Datei</li>
<li>Adaption von Funktionen zwischen IE und Firefox</li>
</ul>
<p><strong>Download:</strong></p>
<p><a href="http://blog.scheinwohnsitz.de/wp-content/uploads/2007/10/tribalfx_075.zip" title="TribalFX Version 0.75">TribalFX Version 0.75</a></p>
<p><a href="http://blog.scheinwohnsitz.de/wp-content/uploads/2007/10/tribalfx_api_075.pdf" title="TribalFX API Version 0.75">TribalFX API Version 0.75</a></p>
<img src="http://feeds.feedburner.com/~r/scheinwohnsitz/~4/c5eq1z4xhcY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.scheinwohnsitz.de/?feed=rss2&amp;p=6</wfw:commentRss>
		<feedburner:origLink>http://blog.scheinwohnsitz.de/?p=6</feedburner:origLink></item>
		<item>
		<title>Javascript-Weichen? Nein danke!</title>
		<link>http://feedproxy.google.com/~r/scheinwohnsitz/~3/FnrOJylRZzE/</link>
		<comments>http://blog.scheinwohnsitz.de/?p=4#comments</comments>
		<pubDate>Mon, 10 Sep 2007 19:24:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://blog.scheinwohnsitz.de/?p=4</guid>
		<description><![CDATA[Javascript-Entwicklung unter Firefox und dem Internet Explorer ist eine Herausforderung für sich. Beide Browser verfügen zum Teil über den gleichen Sprachschatz, verwenden jedoch auch einen eigenen Befehlssatz, der von dem jeweilig anderen Browsertyp nicht verstanden wird bzw. die entsprechende Funktion besitzt einen anderslautenden Namen.
Beispiel: Event-Listener: 
//IE
object.attachEvent( 'onclick', callMe );
//Firefox
object.addEventListener( 'click', callMe, false );

In solchen Fällen [...]]]></description>
			<content:encoded><![CDATA[<p>Javascript-Entwicklung unter Firefox und dem Internet Explorer ist eine Herausforderung für sich. Beide Browser verfügen zum Teil über den gleichen Sprachschatz, verwenden jedoch auch einen eigenen Befehlssatz, der von dem jeweilig anderen Browsertyp nicht verstanden wird bzw. die entsprechende Funktion besitzt einen anderslautenden Namen.</p>
<p><em>Beispiel: Event-Listener:</em> <code><br />
//IE<br />
object.attachEvent( 'onclick', callMe );<br />
//Firefox<br />
object.addEventListener( 'click', callMe, false );<br />
</code></p>
<p>In solchen Fällen muss meist auf Programmierweichen oder Workarounds zurückgegriffen werden, was wiederum die Übersichtlichkeit des Codes nicht gerade fördert und den Quellcode nur sinnlos aufbläht.</p>
<p><em>Beispiel: Weiche Event-Listener</em><code><br />
if( object.addEventListener ) {<br />
object.addEventListener( 'click', callMe, false );<br />
} else {<br />
object.attachEvent( 'onclick', callMe );<br />
}</code></p>
<p><em>Beispiel: Workaround Event-Listener:</em><code><br />
function addEventToObject( object, e, func ) {<br />
var oldhandler = object[ e ];<br />
object[ e ] = ( typeof object[ e ] != 'function' ) ? func : function( e ) {<br />
oldhandler( e );<br />
func( e );<br />
};<br />
}<br />
</code></p>
<p>Kann man nicht auf Weichen und Workarounds, speziell beim Internet Explorer und Firefox, komplett verzichten?</p>
<p>Javascript besitzt unter anderem die prototype-Funktion, mit der es möglich ist eigene Methoden bzw. Klassen zu überschreiben aber auch DOM-Objekte zu erweitern. Diese grundlegende Funktionalität unterstützten zunächst erst einmal beide Browser.</p>
<p>Folgende DOM-Objekte sind verfügbar:</p>
<ul>
<li>Object</li>
<li>Array</li>
<li>String</li>
<li>Number</li>
<li>Date</li>
<li>Function</li>
<li>RegExp</li>
<li>Boolean</li>
</ul>
<p>Mit dieser Erkenntnis, lässt sich nun schon einmal die Weiche bzw. der Workaround z.B. für einen allgemein gültigen Event-Listener aufheben.</p>
<p><em>Beispiel: attachEvent()</em><code><br />
Object.prototype.attachEvent = function( type, handler ) {<br />
handler.eventHandler = function( e ) {<br />
window.event = e;<br />
return handler();<br />
};<br />
this.addEventListener( type.replace( /on/, '' ), handler.eventHandler, false );<br />
}</code></p>
<p>Das Überschreiben einer vom DOM-Objekt vorgegebenen Funktion ignoriert bei diesem  aufgezeigten Lösungsansatz der IE jedoch.</p>
<p><strong>Der kleine aber feine Unterschied</strong></p>
<p>Der Firefox jedoch kann mit dem nun aufgezeigten Lösungsansatz nicht nur eigens erstellt Methoden, Klassen und bestehende DOM-Objekte, sondern auch DOM-Interfaces überschreiben bzw. diese um einzelne Methoden erweitern.</p>
<p>Auflistung einiger DOM-Interfaces:</p>
<ul>
<li>HTMLCollection</li>
<li>HTMLDocument</li>
<li>HTMLElement</li>
<li>Node</li>
<li>Event</li>
<li>CSSStyleDeclaration</li>
</ul>
<p>Aufbauend auf dieser Erkenntnis ist es möglich dem Firefox auch die Getter und Setter des IE beizubringen.</p>
<p><em>Beispiel: event.keyCode für den Firefox</em><code><br />
Event.prototype.__defineGetter__( 'keyCode', function() {<br />
return this.which;<br />
} );<br />
</code></p>
<p>Hierbei muss man jedoch aufpassen, dass die Getter und Setter zentral in einer Datei für den FF definiert werden und mit einer Weiche vor dem Zugriff des IE geschützt sind, da sich dieser ansonsten mit einer Fehlermeldung melden kann, wenn der Debugger-Modus eingestellt ist. Man sieht, um eine Weiche kommt man nicht ganz rum <img src='http://blog.scheinwohnsitz.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Quellen:<br />
<a href="http://krum.rz.uni-mannheim.de/web-tech99w/sess-5.html">Document Object Model (DOM)</a><br />
<a href="http://phrogz.net/JS/Classes/ExtendingJavaScriptObjectsAndClasses.html">Extending JavaScript Objects and Classes</a><br />
<a href="http://webfx.eae.net/dhtml/ieemu/index.html">IE Emu for Moz</a></p>
<img src="http://feeds.feedburner.com/~r/scheinwohnsitz/~4/FnrOJylRZzE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.scheinwohnsitz.de/?feed=rss2&amp;p=4</wfw:commentRss>
		<feedburner:origLink>http://blog.scheinwohnsitz.de/?p=4</feedburner:origLink></item>
	</channel>
</rss>
