<?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>Ajaxer</title>
	<atom:link href="http://ajaxer.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://ajaxer.de</link>
	<description>coding at the front{end}</description>
	<lastBuildDate>Mon, 14 May 2012 13:56:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>JavaScript für Enterprise-Entwickler: Professionell programmieren im Browser und auf dem Server</title>
		<link>http://ajaxer.de/2012/javascript/javascript-fur-enterprise-entwickler-professionell-programmieren-im-browser-und-auf-dem-server/</link>
		<comments>http://ajaxer.de/2012/javascript/javascript-fur-enterprise-entwickler-professionell-programmieren-im-browser-und-auf-dem-server/#comments</comments>
		<pubDate>Mon, 14 May 2012 13:56:19 +0000</pubDate>
		<dc:creator>Oliver Ochs</dc:creator>
				<category><![CDATA[buch]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ajaxer.de/?p=244</guid>
		<description><![CDATA[JavaScript ist längst nicht mehr nur für klassische Webprogrammierer interessant. Auch bei der Entwicklung von Unternehmensanwendungen spielt JavaScript eine immer größere Rolle: Enterprise-Entwickler mit Java- oder .NET-Hintergrund programmieren selbst Server- und Browser-seitig mit JavaScript, oder sie überarbeiten JavaScript-Code, der von &#8230; <a href="http://ajaxer.de/2012/javascript/javascript-fur-enterprise-entwickler-professionell-programmieren-im-browser-und-auf-dem-server/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://ajaxer.de/wp-content/uploads/2012/05/cover-klein.png" alt="Cover-klein in JavaScript für Enterprise-Entwickler: Professionell programmieren im Browser und auf dem Server - Ajaxer" align="right" /></p>
<p>JavaScript ist längst nicht mehr nur für klassische Webprogrammierer interessant. Auch bei der Entwicklung von Unternehmensanwendungen spielt JavaScript eine immer größere Rolle: Enterprise-Entwickler mit Java- oder .NET-Hintergrund programmieren selbst Server- und Browser-seitig mit JavaScript, oder sie überarbeiten JavaScript-Code, der von Webagenturen erstellt wurde.</p>
<p>Das Buch &#8220;<a href="http://www.amazon.de/gp/product/3898647285/ref=as_li_qf_sp_asin_tl?ie=UTF8&#038;tag=ajaxerde-21&#038;linkCode=as2&#038;camp=1638&#038;creative=6742&#038;creativeASIN=3898647285">JavaScript für Enterprise-Entwickler: Professionell programmieren im Browser und auf dem Server</a>&#8221; (Partner-Link zu Amazon) behandelt daher die Schwerpunkte, die für Entwickler aus dem Enterprise-Umfeld beim Umgang mit JavaScript besonders von Bedeutung sind. </p>
<p>Nach einem kompakten Überblick über die Kernkonzepte von JavaScript geht der Autor im Detail auf wichtige Themen der professionellen Anwendungsentwicklung ein. Behandelt werden u.a.:</p>
<p>- JavaScript als funktionale, prototypische und objektorientierte Sprache<br />
- Testen<br />
- Packaging<br />
- Entwurfsmuster<br />
- node.js: JavaScript auf dem Server</p>
<p>Zielgruppe sind professionelle Backend-Enwickler, die sich schnell in JavaScript einarbeiten wollen. Darüber hinaus spricht das Buch Webentwickler an, die über den Browser-Rand hinausblicken möchten. </p>
<p>Kenntnisse in der Webentwicklung sind für die Lektüre erforderlich, ein Java-EE- (oder .NET-) Hintergrund ist hilfreich.</p>
<h4>Gesucht und gefunden durch:</h4><ul><li>buch javascript enterprise</li></ul>]]></content:encoded>
			<wfw:commentRss>http://ajaxer.de/2012/javascript/javascript-fur-enterprise-entwickler-professionell-programmieren-im-browser-und-auf-dem-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JSConf.eu 2011 &#8211; Tag 2</title>
		<link>http://ajaxer.de/2011/javascript/jsconf-eu-2011-tag-2/</link>
		<comments>http://ajaxer.de/2011/javascript/jsconf-eu-2011-tag-2/#comments</comments>
		<pubDate>Tue, 04 Oct 2011 21:12:28 +0000</pubDate>
		<dc:creator>Oliver Ochs</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ajaxer.de/?p=230</guid>
		<description><![CDATA[Nach einer richtig guten Party ging es am zweiten Tag mit der JSConf.eu direkt weiter. Tomasz Janzcuk von Microsoft zeigte, wie sich leichtgewichtige Node-Anwendungen (Singe-Page-Anwendungen, die auf node.js aufbauen) kostengünstig skalieren lassen. Es lassen sich nicht nur einzelne Node-Instanzen pro &#8230; <a href="http://ajaxer.de/2011/javascript/jsconf-eu-2011-tag-2/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Nach einer richtig guten Party ging es am zweiten Tag mit der <a href="http://JSConf.eu">JSConf.eu</a> direkt weiter.</p>
<p>Tomasz Janzcuk von Microsoft zeigte, wie sich leichtgewichtige Node-Anwendungen (Singe-Page-Anwendungen, die auf node.js aufbauen) kostengünstig skalieren lassen. Es lassen sich nicht nur einzelne Node-Instanzen pro virtualisierter Maschine, sondern auch innerhalb einer virtualisierten Maschine verschiedene Node-Prozesse starten. Statt einzelner Node-Prozesse lassen sich zudem auch leichtgewichtige Threads verwenden. Dies ist aber nicht effektiv genug. Erst mit dem Verwenden von isolierten Kontexten innerhalb einzelner Threads lassen sich die Betriebskosten einer leichtgewichtigen Node-Anwendung signifikant drücken.</p>
<p>Andrea Giammarchi von Nokia berichtete von Problemen, die beim Entwickeln von HTML5-Apps auf neuen Endgeräten (Mobile und Tablet) auftreten. HTML5 ist kein fester Standard und die Implementierungen in verschiedenen (mobilen) Browsern sind noch sehr unterschiedlich. Er konnte Lösungen und Workarounds für gängige Probleme aufzeigen. Dieser Talk schien direkt aus der Praxis zu kommen und Giammarchi Tipps erscheinen sehr wertvoll.</p>
<p>Jed Schmidt rockte den Saal mit seinem Vortrag über 140byt.es.</p>
<p>Jakub Siemiątkowski implementierte Voxels in JavaScript. Wenn eine 3D-Welt nicht aus Polygonen sondern aus Würfeln zusammengesetzt wird, dann nennt man diese Würfel Voxel bzw. die Welt Voxelspace. Voxel sind sehr speicher- und rechenzeitintensiv. Trotzdem konnte er eine &#8211; wenn auch langsame und nicht besonders stabile &#8211; Implementierung live demonstrieren.</p>
<p>Lea Verou hielt einen sehr umfangreichen Talk über Polyfills. Polyfills sind Softwarekomponenten, die fehlende Implementierungen von spezifizierten Features in Webbrowsern durch JavaScript nachimplementieren. Wenn ein Browser das spezifizierte Feature selbst implementiert, dann werden die Polyfills nicht verwendet sondern die native Implementierung des Browser führt das Feature selbst aus. Polyfills sind also Softwarekomponenten, die nur so lange leben sollten, bis die jeweiligen Features von allen Zielbrowsern unterstützt wird. </p>
<p>James Coglan verwendete Websockets, um nahezu alle Laptops im Raum fernzusteuern, um darauf Musik wiederzugeben.</p>
<p>David Coallier demonstrierte node-php. Mit node-php lassen sich PHP-Anwendungen in Node ausführen. Durch node-php sind Node und PHP nicht länger Konkurrenzplattformen sondern lassen sich gemeinsam in einer Webanwendung nutzen.</p>
<p>Tom Robinson, einer der Autoren des Cappuccino Webframeworks, hielt einen Talk über Compiler und Interpreter. Er führte anschaulich und durch Beispiele in die Welt von Compilern ein, die selbst in JavaScript implementiert sind oder JavaScript als Zielsprache erzeugen. Jeder Entwickler sollte selbst in der Lage sein, einen eigenen Compiler für eine eigene (domänenspezifische) Sprache zu schreiben, denn dies ist nicht so schwer, wie es auf den ersten Blick erscheint.</p>
<p>Douglas Campos präsentierte dyn.js. Dyn.js ist eine JavaScript-Implementierung auf der Java Virtual Machine. Anders als Rhino, das noch auf Java 1.2 aufbaut, verwendet dyn.js „Invoke Dynamic“, ein neues Feature der JVM seit Java 7. Durch „Invoke Dynamic“ kann JavaScript für die JVM sehr viel einfacher und evtl. sogar performanter implementiert werden als dies noch Rhino tut.</p>
<p>Michael Aufreiter hielt einen sehr interessanten Talk über data.js. Data.js ist eine JavaScript-Biblothek zum Bauen von datengetriebenen Webapplikation. Es bietet Features zur Defintion, Manipluation und Persistierungen von Graphen in Node und / oder im Webbrowser. Data.js ist die technische Basis von  substance.io, einem webbasierten Dokumentenmanagementsystem. </p>
<p>Erik Corry führte in den neuen Garbage Collector von Googles V8 ein. Zudem konnte er Tipps zeigen, um Memory-Leaks zu vermeiden.</p>
<p>Michal Budzyinski hielt einen unterhaltsamen Talk über anaglyphe 3D-Darstellung (jene bunten Bilder, die über zweifarbige Brillen erst dreidimensional wahrgenommen werden). Er konnte in einer Live-Coding-Session eine Demo entwickeln, in dem Side-By-Side-Bilder der NASA anaglyph im Browser dargestellt werden. Dazu verwendete er das Canvas-Element und JavaScript.</p>
<p>Beendet wurde die Konferenz durch zwei sehr emotionsgeladene Talks. James Whelton stellte das Projekt „Coder Dojo“ vor, in dem Kinder unterrichtet werden. Ein T-Shirt, das von Brendan Eich getragen wurde, wurde zugunsten dieses Projekts für 1.500 € an die Veranstalter versteigert.  Chris Williams hielt schließlich das Schluss-Plädoyer, in dem er alle Anwesenden zu einer positiveren Einstellung im Umgang miteinander aufforderte.</p>
<p>Die Konferenz war sehr gelungen &#8211; ein Lob an die Veranstalter!</p>
<h4>Gesucht und gefunden durch:</h4><ul><li>james whelton jsconf</li></ul>]]></content:encoded>
			<wfw:commentRss>http://ajaxer.de/2011/javascript/jsconf-eu-2011-tag-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JSConf.eu 2011 &#8211; Tag 1</title>
		<link>http://ajaxer.de/2011/javascript/jsconf-eu-2011-tag-1/</link>
		<comments>http://ajaxer.de/2011/javascript/jsconf-eu-2011-tag-1/#comments</comments>
		<pubDate>Sat, 01 Oct 2011 20:02:11 +0000</pubDate>
		<dc:creator>Oliver Ochs</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ajaxer.de/?p=226</guid>
		<description><![CDATA[Ich bin auf der JSConf.eu 2011. Hier meine Eindrücke vom ersten Tag. Der Veranstaltungsort &#8211; die Alte Münze Berlin &#8211; ist eine alte Geldfabrik in Berlin Mitte. Hier wurden 1935 bis 2006 Münzen geprägt. Seit der Schließung kann man die &#8230; <a href="http://ajaxer.de/2011/javascript/jsconf-eu-2011-tag-1/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ich bin auf der JSConf.eu 2011. Hier meine Eindrücke vom ersten Tag.</p>
<p>Der Veranstaltungsort &#8211; die Alte Münze Berlin &#8211; ist eine alte Geldfabrik in Berlin Mitte. Hier wurden 1935 bis 2006 Münzen geprägt. Seit der Schließung kann man die alten Münze als Veranstaltungsort mieten. Und die Alte Münze Berlin eignet sich hervorragend für eine Konferenz &#8211; etwas heruntergekommen aber mit dem gewissen etwas an Industrieromantik.</p>
<p>Dean McNamee berichtete von Plask. Laut der Konferenzbeschreibung ist Plask „is a multimedia programming environment. It brings together many of the recent advances in web-related technologies, graphics rendering, and languages, and brings them away from the web.“ Zwar hatte der Talk einige recht anschauliche Beispiele zur Verwendung von Plask, aber so richtig konnte ich die Essenz nicht fassen. Mir ist unklar, was Plask im Wesentlichen von anderen Exerimentier-Umgebungen wie Processing / Processing.js unterscheidet. </p>
<p>Peter van der Zee plädierte für mehr Tools. Im Bezug auf Entwicklerwerkzeuge befindet sich JavaScript &#8211; trotz Firebug, Web-Inspector und Chrome-Debugger &#8211; noch im Mittelalter. Als Beispiel für ein gelungenes Entwicklungswerkzeug präsentierte Van der Zee Zeon.js. Zeon.js is ist ein Tool, das im Browser läuft. In einer Text-Area lässt sich mit Zeon.js JavaScript bearbeiten. Zeon.js findet dabei Probleme. Anders als bekannte Tools wie JSLint ist Zeon.js jedoch interaktiv. Es ist eine wirkliche Hilfe und kein Hindernis beim Entwickeln. Zeon.js benutzt einen selbst geschriebenen Parser und statische Analsyse, um Probleme zu finden. Van der Zee führte Tiefer in dieses Thema ein und ermutigte die anwesenden Entwickler, ähnliche Werkzeuge zu schreiben, um die Arbeit mit JavaScript zu vereinfachen.</p>
<p>Aaron Quint ist der Autor von sammy.js. In seinem Talk rantete über Front-End-Frameworks. Frameworks sind keine Religion. Frameworks sollen Probleme lösen. Statt Hypes zu folgen sollten sich Entwickler wieder mehr ihren eigentlichen Aufgaben widmen und weniger fanatisch im Hinblick auf Technologien und Frameworks eingestellt sein. </p>
<p>Marijn Haverbeke, der Autor des Buchs „Eloquent JavaScript“ und des Minifizierers uglify.js, beschäftigte sich in letzter Zeit vermehrt mit Front-End-Performance, dem DOM und hardwarebeschleunigtem Rendering. In seinem Talk präsentierte er seine Erkenntnisse. Diese waren zwar teilweise nicht neu, trotzdem konnte man den Talk aber als gelungen bezeichnen.</p>
<p>Paul Bakaus, der Autor von jQuery-UI, ist inzwischen CTO bei der Social-Game-Schmiede Zynga. Er zeigte, welche Probleme es auch heute noch gibt, wenn man Spiele im Browser entwickeln möchte. Er plädierte dafür, alte Browser (&lt; IE 9) nicht länger zu unterstützen. Zum Lösen des Problems des Scrollens und des Verschiebens des Viewports vor allem auf mobilen Endgeräten präsentierte er „Scroller“ und „Viewporter“. Diese stehen ab heute als OpenSource auf Github zur Verfügung. </p>
<p>Jan Kleinert und Paul Kinlan präsentierten Web-Intents. Web-Intents übertragen das Konzept der Intents auf Android-Smartphones („An intent is an abstract description of an operation to be performed…“) auf den Webbrowser. Statt eine Vielzahl von Diensten für Image Hosting, Social Bookmarking usw. zu integrieren (und den Benutzer damit zu verwirren), spezifiziert eine Anwendung lediglich einen Intent (wie „Sharing“ oder „Image Editing“). Der Webbrowser schlägt dann dem Nutzer Dienste vor, die genau dieses Feature bieten und bei denen er bereits registriert ist. Web-Intents könnten die Art, wie Webanwendungen Dienste dritter Webanwendungen integrieren, grundlegend verändern, sofern sich Web-Intents durchsetzen können.</p>
<p>Tobias Schneider, Nikolai Onken und Stephan Seidt präsentierten die „Arduino Extravaganza“. Dies ist ein Trinkspiel. Im Webbrowser müssen zwei Kontrahenten ein Problem in JavaScript lösen. Eine von einem Arduino-Board gesteuerte Zapfanlage mixt für den Verlierer ein hochalkoholisches Getränk. Die Farbe des Getränks wird vom Gewinner als Hexcode festgelegt &#8211; die Anlage kümmert sich vollautomatisch um die richtige Mischung. // no comment</p>
<p>Philip Tellis zeigte, wie sich Netzwerke mit JavaScript im Browser messen lassen. Dabei ging er ins Detail. Gegen Ende des Talks konnte er zeigen, wie sich ein Netzwerkscanner im Browser schreiben lässt, der automatisiert Cross-Site-Request-Forgery-Attacken durchführen kann. Dies war einer der interessantesten Talks bisher.</p>
<p>Jakob Mattson hielt ein Plädoyer für eine neue dynamische Sprache, die JavaScript ablösen sollte. JavaScript selbst sei zu statisch und zu wenig formbar, um den Ansprüchen an eine moderne, dynamische Sprache gerecht zu werden. Auch Sprachen wie CoffeeScript, die JavaScript erzeugen, sind laut Mattson kein Ausweg. </p>
<p>Alon Zakai zeige Emscripten. Emscripten ermöglicht es, C/C++-Code im Browser laufen zu lassen. Dazu nutzt Emscripten die LLVM (Low Level Virtual Machine). Ähnlich wie ein Java-Compiler Bytecode erzeugt, erzeugt LLVM-GCC (ein GCC-Compiler, der die LLVM unterstützt) Bitcode. Diesen Bitcode, der sehr viel einfacher als C/C++-Code ist, kann Emscripten zu JavaScript kompilieren. Standardbibliotheken bringt Emscripten gleich mit. So lassen sich C/C++-Bibliotheken direkt im Browser nutzen. Selbst komplexe Anwendungen wie das Computerspiel Quake laufen so im Browser. Dieser Talk war mehr als beeindruckend.</p>
<p>Als Überraschungsgast trat Bendan Eich, der Schöpfer von JavaScript, auf. Er zeigte, welche Features voraussichtlich in ES6 (ECMAScript 6th Edition) enthalten sein werden. Außerdem konnte er RiverTrail präsentieren. RiverTrail implementiert parallelisierbare Arrays in JavaScript. In einer grafischen Demo mit Web-CL zeigte er, dass eine parallelisierte Implementierung des Demos zehn mal so schnell lief wie eine sequentielle Implementierung. Sein Talk entsprach im Wesentlichen dem Talk, den er auf der Capitol.js gehalten hatte. Er lässt sich auf seiner Website komplett einsehen. </p>
<h4>Gesucht und gefunden durch:</h4><ul><li>alte münze berlin mieten</li><li>js conf</li><li>probleme ie9 zeon</li></ul>]]></content:encoded>
			<wfw:commentRss>http://ajaxer.de/2011/javascript/jsconf-eu-2011-tag-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web Performance Optimierung im Webbrowser &#8211; JavaScript und das DOM</title>
		<link>http://ajaxer.de/2011/javascript/web-performance-optimierung-im-webbrowser-javascript-und-das-dom/</link>
		<comments>http://ajaxer.de/2011/javascript/web-performance-optimierung-im-webbrowser-javascript-und-das-dom/#comments</comments>
		<pubDate>Tue, 13 Sep 2011 19:35:02 +0000</pubDate>
		<dc:creator>Oliver Ochs</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ajaxer.de/?p=222</guid>
		<description><![CDATA[Web Performance Optimierung konzentrierte sich in den letzten Jahren vor allem auf die Optimierung der Ladezeit einer Seite. Dazu haben sich Best Practices durchgesetzt, die bereits in einem Artikel in diesem Blog beschrieben wurden. In jüngster Zeit wandert der Fokus &#8230; <a href="http://ajaxer.de/2011/javascript/web-performance-optimierung-im-webbrowser-javascript-und-das-dom/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Web Performance Optimierung konzentrierte sich in den letzten Jahren vor allem auf die Optimierung der Ladezeit einer Seite. Dazu haben sich Best Practices durchgesetzt, die bereits in einem Artikel in diesem Blog beschrieben wurden.</p>
<p>In jüngster Zeit wandert der Fokus jedoch immer mehr auf die Optimierung einer geladenen Seite, also auf die Zeit, die ein Browser für das Rendering und die Manipulation des DOMs benötigt. </p>
<p>In diesem Blog-Beitrag werden ich mich auf JavaScript konzentrieren.</p>
<p><strong>Document.write</strong></p>
<p>Die Verwendung von document.write ist generell – auch für JavaScripte von Dritten – untersagt. Es sind stattdessen DOM-Operationen (auch innerHtml) zu verwenden. Dies dient nicht nur der der Performance, sondern auch der Robustheit.</p>
<p><strong>Inline-JavaScript</strong></p>
<p>Inline-JavaScript sollte vermieden werden. Wenn dies nicht geht, sollten sie sich am Ende der Seite befinden. Das gilt auch für Event-Listener, die direkt in HTML-Elemente geschrieben werden. Diese sollten eigentlich erst nach dem Laden der Seite gebunden werden. Es sollten zudem so wenige JavaScript-Blöcke wie möglich verwendet werden, da jeder Block zu einer kurzen Verzögerung im Rendering führt.</p>
<p><strong>JavaScript-Blöcke</strong></p>
<p>Jeder JavaScript-Block wird isoliert abgearbeitet. Wenn in einem solchen ein Fehler auftritt, beeinflusst dies andere JavaScript-Blöcke nicht. Daher sollten Scripte, die mit Scripten von Dritten (Tracking, Targeting etc.) interagieren, in einem eigenen Block laufen. Dies widerspricht zwar der Anforderung, möglichst wenige Inline-JavaScripte einzubinden, sorgt aber für Robustheit der Seite. Um  Performance-Einbußen zu minimieren, sollten diese Blöcke ausschließlich am Seitenende eingesetzt werden.</p>
<p><strong>Selektoren</strong></p>
<p>Selektoren, die z.B. in jQuery verwendet werden, sollten möglichst performant sein.</p>
<p>Nach Möglichkeit sollten nur Selektoren verwendet werden, die moderne Browser nativ implementieren können. Ob ein Selektor in der nativen Implementierung eines Browser funktioniert, kann man über die Funktion document.querySelectorAll in der Firebug-, Safari-, Internet Explorer- oder Chrome-Konsole testen (z.B. document.querySelectorAll(&#8220;.container .p&#8211;heading-1&#8243;)).</p>
<p>Zum Beispiel implementieren nicht alle Browser die Funktion document.getElementsByClassName. Ein Class-Selektor müsste also von einer Library wie jQuery implementiert werden. Wenn man einen Class-Selektor verwendet, dann muss jQuery alle Elemente der Seite (oder des Bereichs) über einen *-Selektor in eine Liste sammeln und jedes Element prüfen, ob seine Klasse der Klasse des Selektors entspricht. Dies kann auf einer Seite mit sehr vielen Elementen lange dauern. Statt Class-Selektoren sollte man also möglichst ID-Selektoren verwenden. Wenn ein ID-Selektor nicht möglich ist, kann man Events auch per Event Delegation (siehe unten!) an ein Vorfahren-Element binden, dass sich per ID referenzieren lässt.</p>
<p><strong>Minimiere DOM-Manipulationen</strong></p>
<p>JavaScript-Engines werden immer schneller. Dies gilt aber nicht unbedingt für den Zugriff auf das DOM. Manipulationen hieran sind teuer, weswegen sie minimiert werden sollten. Auf DOM-Manipulationen in Schleifen sollte nach Möglichkeit völlig verzichtet werden.</p>
<p><strong>Cache DOM-Nodes und Attribute</strong></p>
<p>Das Ermitteln von DOM-Elementen und -Attributen kostet Zeit. Daher sollten Elemente und Attribute einmalig ermittelt und dann in Variablen gecacht werden. Wenn sich das DOM verändert, so verändert sich auch automatisch das DOM-Element, das bereits ermittelt wurde – es besteht keine Notwendigkeit, erneut das Element im DOM zu suchen und auszuwerten. Module, die Objekte kapseln, können auch zur Zwischenspeicherung der DOM-Elemente genutzt werden.</p>
<p><strong>Minimiere Redraws und Reflows</strong></p>
<p>Jede Änderung im DOM führt zu einer Neuberechnung und einem Rendering der Seite. Dieser Redraw findet immer nach Events bzw. nach dem Beenden von JavaScript-Callbacks, die durch diese Events ausgelöst wurden, statt.</p>
<p>Änderungen sollten kumulativ erfolgen. Statt aus dem DOM zu lesen, in das DOM zu schreiben, erneut aus dem DOM zu lesen und wieder in das DOM zu schreiben, sollten Lese- und Schreiboperationen gebündelt erfolgen, so dass diese Operationen in einem einzigen Redraw bzw. Reflow erfolgen.</p>
<p><strong>Das Document-Ready-Event</strong></p>
<p>Im Document-Ready-Event sollte so wenig wie möglich getan werden. Lediglich Event-Listener dürfen an Elemente gebunden werden. Diese Elemente sollten nach Möglichkeit per ID referenziert werden. Wenn dies nicht möglich ist, bietet sich Event Delegation (siehe unten!) an.</p>
<p>Gänzlich verzichtet werden sollte auf DOM-Manipulationen, die schon beim Laden der Seite stattfinden (wie das Erzeugen von DIVs auf Reserve oder das Setzen von Attributen aufgrund von CSS-Klassen). Das DOM sollte bereits auf dem Server statt erst im Browser manipuliert werden.</p>
<p><strong>Lazy Initialisation</strong></p>
<p>Berechnungen und Bindings beim Document-Ready-Event sollten minimiert werden (siehe oben!), sondern erst durchgeführt werden, wenn sie benötigt werden (z.B. nach einen Klick-Event). Natürlich ist  im Einzelfall abzuwägen, ob Lazy Initialisation einen Vorteil bietet. Eine Lazy Initialisation bei einem MouseOver-Event könnte als störend (verzögert) empfunden werden, während sie nach einem Klick-Event vom User nicht bemerkt wird.</p>
<p><strong>Event Delegation</strong></p>
<p>Es kann nach dem Laden der Seite lange dauern, bis alle Event Handler an DOM-Elemente gebunden sind. Um diese Zeit zu minimieren, bietet sich Event Delegation an, die der der Lazy Initalisation ähnelt. Man registriert ein Event (z.B. ein Klick-Event) an einem umschließenden Bereich, der sich z.B. über eine ID referenzieren lässt. Die Auflösung auf das einzelne geklickte Element findet dann erst nach dem Klick-Event statt. Die Zeit, die beim Laden der Seite eingespart wird, tritt dann also bei jedem einzelnen Event auf. Daher ist im Einzelfall abzuwägen, ob Event Delegation einen Vorteil bietet. Eine Event Delegation bei einem MouseOver-Event könnte als störend empfunden werden, während eine Event Delegation nach einem Klick-Event vom User nicht bemerkt wird.</p>
<p>Dies ist ein Cross-Post vom <a href="http://blog.holisticon.de/2011/09/web-performance-optimierung-im-frontend-teil-1-javascript/" target="_blank">Holisticon-Blog</a>.</p>
<h4>Gesucht und gefunden durch:</h4><ul><li>jquery minimieren</li><li>browser optimierung mit javascript</li><li>javascript sollte man dom verwenden</li><li>javascript performance dom</li><li>javascript optimieren</li><li>innerhtml with jquery javascript event delegation</li><li>firebug chrome minimieren</li><li>dom manipulation jquery performance</li><li>dom innerhtml events delegate</li><li>performance dom manipulation</li></ul>]]></content:encoded>
			<wfw:commentRss>http://ajaxer.de/2011/javascript/web-performance-optimierung-im-webbrowser-javascript-und-das-dom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GooglePlus Cheat-Sheet</title>
		<link>http://ajaxer.de/2011/javascript/googleplus-cheat-sheet/</link>
		<comments>http://ajaxer.de/2011/javascript/googleplus-cheat-sheet/#comments</comments>
		<pubDate>Fri, 01 Jul 2011 13:33:12 +0000</pubDate>
		<dc:creator>Askin Er</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ajaxer.de/?p=214</guid>
		<description><![CDATA[Anlässlich zu google neuem Dienst &#8220;google+&#8221; hier einpaar Shortcuts ShortCuts: J ScrollUP K ScrollDown ENTER Beitrag kommentieren TAB+ENTER Beitrag absenden qq Zum Chat Kommentare: @User &#8211; Links zu einem User *Fett-Text* _ kursiv _ - durchgestrichen -]]></description>
			<content:encoded><![CDATA[<p>Anlässlich zu google neuem Dienst &#8220;google+&#8221; hier einpaar Shortcuts</p>
<p>ShortCuts:<br />
<strong>J</strong> ScrollUP<br />
<strong>K</strong> ScrollDown<br />
<strong>ENTER </strong> Beitrag kommentieren<br />
<strong>TAB+ENTER</strong> Beitrag absenden<br />
<strong>qq</strong> Zum Chat</p>
<p>Kommentare:<br />
<strong>@</strong>User &#8211; Links zu einem User<br />
<strong>*</strong><strong>Fett-Text</strong><strong>*</strong><br />
<strong>_ </strong><em>kursiv</em> <strong>_ </strong><br />
<strong>-</strong> <del datetime="2011-07-01T13:27:06+00:00">durchgestrichen</del> <strong>-</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxer.de/2011/javascript/googleplus-cheat-sheet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JSON-P mit jQuery</title>
		<link>http://ajaxer.de/2011/javascript/json-p-mit-jquery/</link>
		<comments>http://ajaxer.de/2011/javascript/json-p-mit-jquery/#comments</comments>
		<pubDate>Sat, 16 Apr 2011 21:59:33 +0000</pubDate>
		<dc:creator>Oliver Ochs</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ajaxer.de/?p=201</guid>
		<description><![CDATA[Viele Webapplikationen laden Daten per JavaScript im JSON-Format von einem Server in den Browser, um sie dort darzustellen oder zu verarbeiten. Ein solcher Beispieldatensatz im JSON-Format könnte wie folgt aussehen: { “cities”: [”Hamburg”, “New-York”, “Tokio”] } Ein Webbrowser lässt allerdings &#8230; <a href="http://ajaxer.de/2011/javascript/json-p-mit-jquery/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Viele Webapplikationen laden Daten per JavaScript im JSON-Format von einem Server in den Browser, um sie dort darzustellen oder zu verarbeiten. Ein solcher Beispieldatensatz im JSON-Format könnte wie folgt aussehen:</p>
<pre>
<code>
{
    “cities”: [”Hamburg”, “New-York”, “Tokio”]
}
</code>
</pre>
<p>Ein Webbrowser lässt allerdings nicht zu, dass ein Script Daten von einer anderen Domain lädt als der, von der die Seite, in die das Script eingebettet wurde, geladen wurde. JavaScript hat also keinen Zugriff auf Daten, die von einer anderen Domain kommen. Diese Einschränkung ist ein Security-Feature des Browsers und als Same Origin Policy bekannt.</p>
<p>Oft ist es aber nötig, Daten von einer fremden Domain oder einer eigenen Subdomain zu ermitteln. Die saubere technische Lösung für dieses Problem ist Cross Origin Resource Sharing. Beim Cross Origin Resource Sharing werden Berechtigungen über HTTP-Header gesteuert. Leider funktioniert Cross Origin Resource Sharing nicht mit Legacy-Browsern, die noch häufig anzutreffen sind.</p>
<p>Ein Workaround, der in jedem Browser funktioniert, ist JSON-P: JSON with Padding. Ein Script darf selbst zwar keine Daten von einer fremden Domain anfordern, aber es darf einen Script-Tag generieren, der ein weiteres JavaScript von dieser fremden Domain lädt und direkt ausführt. Diesem nachgeladenen JavaScript übergibt man als GET-Parameter den Namen einer Callback-Funktion, die von dem nachgeladenen JavaScript ausgeführt werden sollte. Per Konvention trägt dieser GET-Parameter den Namen „_jsonp“.</p>
<p>Das so eingebundene Script muss dynamisch auf dem Server in einer Weise erzeugt werden, dass es die übergebene Callback-Funktion aufruft, sobald es vom Browser geladen wurde. Der Callback-Funktion werden in der Regel die Daten übergeben, die man ansonsten direkt als JSON-Objekt angefragt hätte:</p>
<pre>
<code>
jsonpCallback (

  {

    “cities”: [”Hamburg”, “New-York”, “Tokio”]

  }

);
</code>
</pre>
<p>Die Callback-Funktion wird von dem Script, das eigentlich die Daten anfordern wollte, bereitgestellt. So werden Daten von einer fremden Domain per JSON-P geladen. Front-End-Libraries wie jQuery stellen eine automatisch generierte Callback-Funktion bereit. Daher muss sich der Entwickler nicht um das Schreiben dieser Callback-Funktion kümmern.</p>
<pre>
<code>
return $.ajax(
 {

  type: “GET”,

  url: “http://my.otherdomain.de/rest-ws/myservice/” + data,

  error: errorcallback,

  success: callback,

  dataType: “jsonp”,

  jsonp: “_jsonp”,

  jsonpCallback: “ jsonpCallback “

 }
);
</code>
</pre>
<p>Auf Client-Seite stellt JSON-P also kein Problem dar und wird von gängigen JavaScript-Bibliotheken unterstützt.</p>
<p>Wie man auf einem Java Enterprise Server mit dem Spring Framework und CXF einen JSON-P-Provider realiseren kann, lässt sich auf dem <a href="http://blog.holisticon.de/2011/04/json-p-mit-spring-und-cxf/" title="JSON-P mit Spring und CXF">Holisticon-Blog</a> nachlesen.</p>
<p>Dies ist ein Crosspost vom <a href="http://simonox.blogspot.com/2011/04/viele-webapplikationen-laden-daten-per.html" title="JSON-P mit Spring und CXF">SimonOx-Blog</a>.</p>
<h4>Gesucht und gefunden durch:</h4><ul><li>json jquery</li><li>jquery jsonp callback</li><li>Cross-Origin Resource Sharing</li><li>jquery same origin policy</li><li>jquery json</li><li>jquery jsonp</li><li>json callback</li><li>jquery callback json</li><li>jquery jsonp script ressource</li><li>jquery same origin</li></ul>]]></content:encoded>
			<wfw:commentRss>http://ajaxer.de/2011/javascript/json-p-mit-jquery/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Nachteile funktionaler Vererbung</title>
		<link>http://ajaxer.de/2010/javascript/nachteile-funktionaler-vererbung/</link>
		<comments>http://ajaxer.de/2010/javascript/nachteile-funktionaler-vererbung/#comments</comments>
		<pubDate>Mon, 13 Dec 2010 21:49:35 +0000</pubDate>
		<dc:creator>Oliver Ochs</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ajaxer.de/?p=178</guid>
		<description><![CDATA[Jedes Mal, wenn ein neues Sub-Objekt erzeugt wird, werden zwei neue Funktionen erzeugt: einmal für das Sub-Objekt und einmal für das Super-Objekt. Diese Objekte sind nicht leichtgewichtig, denn das innere Super-Objekt wird als Closure im äußeren Sub-Objekt referenziert. Das Verwenden von vielen Closures kann zu Memory-Leaks führen.

Typen können nicht durch den Instanceof-Operator getestet werden. Sowohl das Super-Objekt "Square" als auch das Sub-Objekt "Box" sind einfache Funktionen. Eine Box-Objekt ist keine Instanz des Square-Objekts. Dies liegt daran, dass keine Konstruktorfunktion verwendet wird <a href="http://ajaxer.de/2010/javascript/nachteile-funktionaler-vererbung/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In meinem letzten Blog-Post hatte ich die funktionale Vererbung in JavaScript vorgestellt. Diese funktionale Vererbung hat allerdings einige Nachteile.</p>
<p>Jedes Mal, wenn ein neues Sub-Objekt erzeugt wird, werden zwei neue Funktionen erzeugt: einmal für das Sub-Objekt und einmal für das Super-Objekt. Diese Objekte sind nicht leichtgewichtig, denn das innere Super-Objekt wird als Closure im äußeren Sub-Objekt referenziert. Das Verwenden von vielen Closures kann zu Memory-Leaks führen.</p>
<p>Typen können nicht durch den Instanceof-Operator getestet werden. Sowohl das Super-Objekt &#8220;Square&#8221; als auch das Sub-Objekt &#8220;Box&#8221; sind einfache Funktionen. Eine Box-Objekt ist keine Instanz des Square-Objekts. Dies liegt daran, dass keine Konstruktorfunktion verwendet wird.</p>
<p><code>print(myBox instanceof square); // false<br />
</code></p>
<p>Typen lassen sich zudem nicht erweitern. Das Super-Objekt wird in einer Closure gehalten. Es ist von außen nicht sichtbar.</p>
<p>Der Syntax zum Erzeugen einer neuen Objekt-Instanz entspricht nicht den Konventionen von JavaScript.</p>
<p><code>var myBox = box(5);<br />
</code></p>
<p>Neue Objekt-Instanzen werden in JavaScript mit dem new-Operator auf einer Konstruktorfunktion erzeugt. Da das Entwurfsmuster der funktionalen Vererbung keine Konstrutkorfunktionen kennt, kann der new-Operator nicht verwendet werden. Dies kann zu Fehlern in der Verwendung des Codes führen.</p>
<p><code>new Box(5); // ReferenceError: Box is not defined</code></p>
<p>Funktionale Vererbung sollte also nur in Ausnahmefällen angewendet werden, in denen ein funktionales Paradigma am sinnvollsten erscheint.</p>
<h4>Gesucht und gefunden durch:</h4><ul><li>vererbung nachteile</li><li>javascript vererbung</li><li>jquery vererbung</li><li>javascript funktionale vererbung</li><li>vererbung in jquery</li><li>nachteile von vererbung</li><li>closures nachteile</li><li>javascript vererbung -prototype</li><li>javascript prototype closure</li><li>vererbung vorteile nachteile</li></ul>]]></content:encoded>
			<wfw:commentRss>http://ajaxer.de/2010/javascript/nachteile-funktionaler-vererbung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Funktionale Vererbung</title>
		<link>http://ajaxer.de/2010/javascript/funktionale-vererbung/</link>
		<comments>http://ajaxer.de/2010/javascript/funktionale-vererbung/#comments</comments>
		<pubDate>Thu, 11 Nov 2010 23:05:26 +0000</pubDate>
		<dc:creator>Oliver Ochs</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ajaxer.de/?p=153</guid>
		<description><![CDATA[Funktionale Vererbung ist ein Begriff, der durch Douglas Crockford geprägt wurde. Funktionen sind Objekte. Wie Objekte können Funktionen auch selbst Eigenschaften (Properties) und Methoden (Funktionen) haben. Funktionale Verberbung implementiert man, indem man eine Funktion erstellt, die Objekte erzeugt und diese &#8230; <a href="http://ajaxer.de/2010/javascript/funktionale-vererbung/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Funktionale Vererbung ist ein Begriff, der durch Douglas Crockford geprägt wurde.</p>
<p>Funktionen sind Objekte. Wie Objekte können Funktionen auch selbst Eigenschaften (Properties) und Methoden (Funktionen) haben.</p>
<p>Funktionale Verberbung implementiert man, indem man eine Funktion erstellt, die Objekte erzeugt und diese zurückgibt. Innerhalb dieser Objekt-erzeugenden Funktion gibt es private Instanzvariablen. Auf diese kann das zurückgegebene Objekt als Closure zugreifen. Für die Nutzer des zurückgegebenen Objekts sind diese jedoch unsichtbar. Das zurückzugebende Objekt wird um Methoden erweitern. Diese Methoden haben ebenfalls Zugriff auf die privaten Variablen.</p>
<pre>function square(width) {</pre>
<pre>  var squareObject = {};</pre>
<pre>  squareObject.getArea = function() {</pre>
<pre>    if (width &gt; 0) {</pre>
<pre>      return width * width;</pre>
<pre>    }</pre>
<pre> }</pre>
<pre> return squareObject;</pre>
<pre>}</pre>
<pre>var mySquare = square(5);</pre>
<pre>print(mySquare.getArea()); // 25</pre>
<pre>print(mySquare.width); // undefined</pre>
<p>Vererbung lässt sich in der funktionalen Vererbung durch das Dekorierer-Entwurfsmuster implementieren. Um einen Subtypen zu implementieren erweitert man den Supertypen um die benötigten Eigenschaften oder Methoden. Zu überschreibende Methoden speichert man in privaten Variablen, um diese auch dann noch verwenden zu können, wenn man die  Methoden des Super-Objekts bereits überschrieben hat.</p>
<pre>function box(width) {</pre>
<pre>  var boxObject = square(width);</pre>
<pre>  var getSquareArea = boxObject.getArea;</pre>
<pre>  boxObject.getVolume = function() {</pre>
<pre>    if (width &gt; 0) {</pre>
<pre>      return getSquareArea() * width;</pre>
<pre>    }</pre>
<pre>  }</pre>
<pre>  boxObject.getArea = function() {</pre>
<pre>    if (width &gt; 0) {</pre>
<pre>        return getSquareArea() * 6;</pre>
<pre>    }</pre>
<pre>  }</pre>
<pre>  return boxObject;</pre>
<pre>}</pre>
<pre>var myBox = box(5);</pre>
<pre>print(myBox.getVolume());  // 125</pre>
<pre>print(myBox.getArea()); // 150</pre>
<p>Dieser Ansatz ist wohl der einfachste Ansatz zur Objekt-orientierten Programmierung in JavaScript, da er ohne Prototypen und Konstruktor-Objekte auskommt.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxer.de/2010/javascript/funktionale-vererbung/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Node.js</title>
		<link>http://ajaxer.de/2010/json/node-js/</link>
		<comments>http://ajaxer.de/2010/json/node-js/#comments</comments>
		<pubDate>Sun, 03 Oct 2010 18:56:46 +0000</pubDate>
		<dc:creator>Askin Er</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[node.js]]></category>

		<guid isPermaLink="false">http://ajaxer.de/?p=137</guid>
		<description><![CDATA[Node.js hat in der Regel zwei Reaktionen verursacht. Die erste Gruppe die es sofort verstanden haben oder jene die es verwirrt. Wenn Du dich zur zweiten Gruppe zählst solltest Du diesen abschnitt lesen ansonsten gleich zur Installation und dem ersten &#8230; <a href="http://ajaxer.de/2010/json/node-js/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Node.js hat in der Regel zwei Reaktionen verursacht. Die erste Gruppe die es sofort verstanden haben oder jene die es verwirrt.</p>
<p>Wenn Du dich zur zweiten Gruppe zählst solltest Du diesen abschnitt lesen ansonsten gleich zur Installation und dem ersten Test springen.</p>
<h2>Was node.js alles ist:</h2>
<ul>
<li>Serverseitiges JavaScript</li>
<li>Es ist Ereignis-Basiert, also vergleichbar mit einer Event-Machine</li>
<li>Das JS ist die Ausführung von JavaScript-Engine V8 (das Ding, das Google Chrome so schnell macht ).</li>
<li>Node.js stellt eine JavaScript-API auf das Netzwerk und Zugriff auf das Dateisystem zur Verfügung.</li>
<li>Es lässt Sie JavaScript-Programme im Terminal ausführen. z.B. in dem man  &#8217;node meineApp.js &#8221; ausführt.</li>
</ul>
<h2>Wann und wieso sollte man Node benutzen ?</h2>
<p class="p1">Node.js ist sehr gut, wenn Sie mehrere Dinge gleichzeitig tun muss. In Node.js läuft alles parallel, außer dem Code. Das kann man sich so vorstellen (Achtung Metapher), dass der Code so etwas wie der König ist und Node.js eine Menge von Dienern. Der König gibt seinen Dienern eine Liste von Aufgaben, die dann von den den Dienern untereinander aufgeteilt werden und und abgearbeitet (Metapher Ende).</p>
<p class="p1">
<p class="p1">Ein wichtiger Grund für Node.js ist die Effizienz. In einer Web-Anwendung ist das wichtigste Ansprechzeit, diese Kosten in der Regel Zeit, um all die Datenbank-Abfragen auszuführen. Mit Node.js kann man alle Anfragen auf einmal ausführen, wodurch die Reaktionszeit auf die Dauer der langsamste Anfrage minimiert wird.</p>
<p class="p1">
<p class="p1">Ein weiterer Grund ist JavaScript. Man kann Node.js benutzen, um Code zwischen dem Browser und Backen zu teilen. JavaScript ist auch auf dem Weg zu einem wirklich universellen Sprache zu werden.</p>
<h2>Node.js installieren</h2>
<h3>Mac installation</h3>
<p>Wer das großartige <a href="http://github.com/mxcl/homebrew">Hombrew</a> unter OSX nutzt kann mit folgender Zeile node einfach installieren</p>
<blockquote><p><strong>brew install node </strong></p></blockquote>
<p><strong><span style="font-weight: normal;">Ohne jeglichen schnickschnack brauchen wir lediglich drei schritte</span></strong></p>
<ol>
<li>Apples Developer tools <a href="http://developer.apple.com/technologies/tools/">XCode</a> installieren</li>
<li><a href="http://help.github.com/mac-git-installation/">git</a> Installieren</li>
<li>und folgende Zeilen ausführen</li>
</ol>
<blockquote><p>git clone git://github.com/ry/node.git<br />
cd node<br />
./configure<br />
make<br />
sudo make install</p></blockquote>
<h3>Ubuntu installation</h3>
<p>Abhängigkeiten installieren</p>
<blockquote><p><span style="font-family: monospace;">sudo apt-get install g++ curl libssl-dev apache2-utils</span></p></blockquote>
<p><span style="font-family: monospace;">sudo apt-get install git-core</span></p>
<p>Dann aktuelle quellen von gitHub clonen und installieren</p>
<blockquote><p><span style="font-family: monospace;">git clone git://github.com/ry/node.git<br />
cd node<br />
./configure<br />
make<br />
sudo make install</span></p></blockquote>
<h3>Windows installation</h3>
<ol>
<li><a href="http://www.cygwin.com/">cygwin</a> installieren</li>
<li>aus der SetUp der von cygwin folgende Pakete installieren<br />
<blockquote>
<ul>
<li>devel → openssl</li>
<li>devel → g++-gcc</li>
<li>devel → make</li>
<li>python → python</li>
<li>devel → git</li>
</ul>
</blockquote>
</li>
<li> dann die cygwin bash starten <strong>Start -&gt; Cygwin -&gt; Cygwin Basg Shell</strong></li>
<li><strong> </strong>Dann aktuelle quellen von gitHub clonen und installieren</li>
</ol>
<blockquote><p>git clone git://github.com/ry/node.git<br />
cd node<br />
./configure<br />
make<br />
sudo make install</p></blockquote>
<h2>Wir testen mal unsere erste helloWorld</h2>
<p>In der Datei helloWorld.js kopieren wir zum testen folgende Zeilen:</p>
<blockquote>
<div id="_mcePaste"><strong>var http = require(&#8216;http&#8217;);</strong></div>
<div id="_mcePaste"><strong>http.createServer(function (req, res) {</strong></div>
<div id="_mcePaste"><strong>res.writeHead(200, {&#8216;Content-Type&#8217;: &#8216;text/plain&#8217;});</strong></div>
<div id="_mcePaste"><strong> res.end(&#8216;Hallo Welt &#8211; helloNode.js \n&#8217;);</strong></div>
<div id="_mcePaste"><strong> }).listen(8765, &#8220;127.0.0.1&#8243;);</strong></div>
<div id="_mcePaste"><strong>console.log(&#8216;Server running at http://127.0.0.1:8765/&#8217;);</strong></div>
</blockquote>
<div>gestartet wird der Server, welches nur den String &#8220;&#8221; ausgibt per</div>
<blockquote>
<div>node helloNode.js</div>
</blockquote>
<div>Jetzt wenn wir in der Terminal-Console keine Fehler sehen und folgende Ausgabe &#8221;Server running at http://127.0.0.1:8765/&#8221;  können wir das unter <a href="http://127.0.0.1:8765">http://127.0.0.1:8765</a> testen.</div>
<h4>Gesucht und gefunden durch:</h4><ul><li>node js</li><li>nodejs</li><li>node js tutorial</li><li>node js tutorial deutsch</li><li>node js installieren</li><li>nodejs tutorial</li><li>node js anleitung</li><li>nodejs tutorial deutsch</li><li>was ist Node js</li><li>nodejs installieren</li></ul>]]></content:encoded>
			<wfw:commentRss>http://ajaxer.de/2010/json/node-js/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Google V8</title>
		<link>http://ajaxer.de/2010/javascript/google-v8-installieren/</link>
		<comments>http://ajaxer.de/2010/javascript/google-v8-installieren/#comments</comments>
		<pubDate>Fri, 10 Sep 2010 21:42:09 +0000</pubDate>
		<dc:creator>Oliver Ochs</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[node.js]]></category>

		<guid isPermaLink="false">http://ajaxer.de/?p=116</guid>
		<description><![CDATA[In den letzten Jahren hat sich der Webbrowser zu der wichtigsten Anwendung auf dem Desktop-Rechner und im Smartphone entwickelt. Er ist in die Domäne von ausgewachsenen Applikation wie Mail-Clients und Office-Suiten vorgestoßen und hat scheinbar allgegenwärtige Programme wie Microsoft Outlook &#8230; <a href="http://ajaxer.de/2010/javascript/google-v8-installieren/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p lang="de-DE">In den letzten Jahren  hat sich der Webbrowser zu der wichtigsten Anwendung auf dem Desktop-Rechner und im Smartphone entwickelt. Er ist in die Domäne von ausgewachsenen Applikation wie Mail-Clients und  Office-Suiten vorgestoßen und hat scheinbar allgegenwärtige Programme wie Microsoft Outlook und Word teilweise bereits verdrängt. Anwendungslogik wandert zunehmend vom Server zum Client, vom Backend in den Webbrowser.</p>
<p lang="de-DE">Wenn immer mehr Anwendungslogik vom Server in den Client verlagert wird, stellt sich für einen Entwickler die Frage, ob der Rest der Anwendungslogik im Backend nicht in der gleichen Sprache entwickelt werden kann, die auch im Webbrowser verwendet wird. Es gibt keinen logischen Grund, warum JavaScript ausschließlich im Webbrowser laufen sollte. Es erscheint zudem wirtschaftlich, wenn man auf eine große Zahl an Entwicklern zurückgreifen kann, die in einer einzigen Sprache entwickeln. JavaScript auf dem Server könnte sicherlich nicht gewachsene SAP- oder SOA-Umgebungen, dafür aber Webframeworks wie ASP.net, Spring MVC / Webflow oder JSF ersetzen.</p>
<p lang="de-DE">Inzwischen wird JavaScript also auf dem Server interessant. Sogar Datenbanken wie Couch-DB verwenden JavaScript als native Abfragesprache. Mit ECMAScript 5 gibt es zudem in der Sprache selbst interessante neue Features.</p>
<p lang="de-DE">V8 ist die JavaScript-Laufzeitumgebung, die von Google für Googles Chome-Browser entwickelt wurde. V8 implementiert in der aktuellen Version 2.2 ECMA Script 3.</p>
<p lang="de-DE">Google  entwickelte mit V8 eine Laufzeitumgebung, die auf Mac OS X, Linux und Windows läuft. V8 ist komplett in C++ geschrieben und lässt sich eingebettet in C++-Applikationen verwenden.  Außerdem lässt es sich natürlich auch allein stehend ausführen.</p>
<p lang="de-DE">V8 gilt als sehr schnell. Verantwortlich für die Entwicklung war Lars Bak. Vor noch etwa zehn Jahren hatte Java den Ruf, langsam und hakelig zu sein. Ein kleines Start-Up um Lars Bak entwickelte jedoch eine neue Java Virtual Machine, die den Code zur Laufzeit kompilierte. Der Java JIT war geboren. Die von Lars Bak entwickelte Virtuelle Maschine ist der Ursprung von Hotspot, der aktuellen Java Virtual Machine von Sun Microsystems (jetzt Oracle). Erst durch Hotspot konnte Java die Popularität erreichen, die es heute hat. Genauso wie HotSpot Java beschleunigt hatte, beschleunigt V8 auch JavaScript.</p>
<p lang="de-DE">V8 kompiliert JavaScript zu nativem Microcode anstatt es zu interpretieren. Weitere Beschleunigung erreicht V8, indem es die Rückgabewerte von Methoden cacht. Dieses Optimierungs-Technik wird inline caching genannt. Der Garbage Collector ist zwar ein Stop-the-World-Garbage Collector, allerdings ist er sehr schnell. Mit V8 läuft JavaScript fast so schnell wie ein kompiliertes, natives Programm.</p>
<p lang="de-DE">Als V8 veröffentlicht wurde, war es etwa doppelt so schnell wie die Laufzeitumgebungen anderer Hersteller. Dies erst führte dazu, dass ein richtiges Wettrennen zwischen Browsern und deren JavaScript-Laufzeitumgebungen stattgefunden hat. Ohne V8 wären TraceMonkey, JägerMonkey oder SquirrelFish wahrscheinlich nicht so schnell entwickelt worden.</p>
<p lang="de-DE">Google betrachtete JavaScript als einen der Treiber des Webs. Google ließ sich sogar dazu verleiten, ein reines Web-Betriebssystem Google Chrome OS anzukündigen, das sich ausschließlich durch Web-Technologien, also HTML und JavaScript, programmieren lässt.</p>
<p lang="de-DE">V8 könnte eine &#8211; wenn nicht die &#8211; Grundlage für JavaScript auf dem Server oder in nativen Anwendungen bilden.</p>
<p lang="de-DE">Um V8 zu installieren, benötigt man Subversion und SCons. Subversion ist ein Source-Code-Management-System, SCons ein Build-System. Unter MacOS verwendet man am besten Ports.</p>
<p lang="de-DE">
<p lang="de-DE"><span style="color: #4a4a4a;"><span style="font-family: Consolas;"><span style="font-size: x-small;">$ sudo port install scons subversion</span></span></span></p>
<p lang="de-DE">
<p lang="de-DE">Unter Ubuntu Linux verwendet man dazu den Package-Manger apt.</p>
<p lang="de-DE">
<p><span style="color: #4a4a4a;"><span style="font-family: Consolas;"><span style="font-size: x-small;">$ sudo apt-get install zip scons subversion </span></span></span></p>
<p lang="de-DE">
<p lang="de-DE">Unter der 64bit-Version von Ubuntu Linux könnte es notwendig sein, dass man zusätzlich noch die Multi-Lib-Packages installiert.</p>
<p lang="de-DE">
<p lang="de-DE"><span style="color: #4a4a4a;"><span style="font-family: Consolas;"><span style="font-size: x-small;">$ sudo apt-get install g++-multilib gcc-multilib</span></span></span></p>
<p lang="de-DE">
<p lang="de-DE">Anschließend kann man V8 aus dem Subversion-Repository auschecken und bauen.</p>
<p lang="de-DE">
<p lang="de-DE"><span style="color: #4a4a4a;"><span style="font-family: Consolas;"><span style="font-size: x-small;">$ svn checkout http://v8.googlecode.com/svn/trunk/ v8</span></span></span></p>
<p lang="de-DE"><span style="color: #4a4a4a;"><span style="font-family: Consolas;"><span style="font-size: x-small;">$ cd v8</span></span></span></p>
<p lang="de-DE"><span style="color: #4a4a4a;"><span style="font-family: Consolas;"><span style="font-size: x-small;">$ scons sample=shell</span></span></span></p>
<p lang="de-DE">
<p lang="de-DE">Nun kann man V8 über das Kommando „shell“ starten.</p>
<p lang="de-DE">
<p lang="de-DE"><span style="color: #4a4a4a;"><span style="font-family: Consolas;"><span style="font-size: x-small;">$ ./shell</span></span></span></p>
<p lang="de-DE"><span style="color: #4a4a4a;"><span style="font-family: Consolas;"><span style="font-size: x-small;">V8 version 2.2.21</span></span></span></p>
<p lang="de-DE"><span style="color: #4a4a4a;"><span style="font-family: Consolas;"><span style="font-size: x-small;">&gt; print(&#8220;Hello World&#8221;);</span></span></span></p>
<p lang="de-DE"><span style="color: #4a4a4a;"><span style="font-family: Consolas;"><span style="font-size: x-small;">Hello World</span></span></span></p>
<p lang="de-DE"><span style="color: #4a4a4a;"><span style="font-family: Consolas;"><span style="font-size: x-small;">&gt; quit();</span></span></span></p>
<h4>Gesucht und gefunden durch:</h4><ul><li>ajaxer</li><li>google v8</li><li>google v8 hello world</li><li>javascript shell ubuntu v8</li><li>v8 garbage collector</li></ul>]]></content:encoded>
			<wfw:commentRss>http://ajaxer.de/2010/javascript/google-v8-installieren/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Safari extension selber schreiben</title>
		<link>http://ajaxer.de/2010/offtopic/safari-extension-selber-schreiben/</link>
		<comments>http://ajaxer.de/2010/offtopic/safari-extension-selber-schreiben/#comments</comments>
		<pubDate>Thu, 29 Jul 2010 13:03:59 +0000</pubDate>
		<dc:creator>Askin Er</dc:creator>
				<category><![CDATA[OffTopic]]></category>

		<guid isPermaLink="false">http://ajaxer.de/?p=111</guid>
		<description><![CDATA[Wussten Du, dass jeder eine Erweiterung für Safari schreiben kann ? Jeder kann es und es ist wirklich einfacher, als Du vielleicht denkst seine eigene Safari Extension zu Programmieren. Was du brauchst, um deine eigenen Safari-Erweiterung machen Kenntnisse in HTML, &#8230; <a href="http://ajaxer.de/2010/offtopic/safari-extension-selber-schreiben/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Wussten Du, dass jeder eine Erweiterung für Safari schreiben kann ?</p>
<p>Jeder kann es und es ist wirklich einfacher, als Du vielleicht denkst seine eigene Safari Extension zu Programmieren.</p>
<h3>Was du brauchst, um deine eigenen Safari-Erweiterung machen</h3>
<ul>
<li>Kenntnisse in HTML, CSS und JavaScript</li>
<li>Die neueste Version von Safari (in diesem Fall, <a href="http://translate.googleusercontent.com/translate_c?hl=de&amp;ie=UTF-8&amp;sl=en&amp;tl=de&amp;u=http://osxdaily.com/2010/06/08/safari-5-has-been-unleashed/&amp;prev=_t&amp;rurl=translate.google.de&amp;usg=ALkJrhiIdS4VVq9goS3bT8Kjp4uWOTPejw">Safari 5</a> )</li>
<li>Melden Sie sich an die werden Teil der <a href="http://translate.googleusercontent.com/translate_c?hl=de&amp;ie=UTF-8&amp;sl=en&amp;tl=de&amp;u=http://developer.apple.com/safari/&amp;prev=_t&amp;rurl=translate.google.de&amp;usg=ALkJrhgZMn9Ki-uXA51mpTjI61WJDsUEjw">Safari bei Apple Developer Program</a></li>
<li>Gültige Zertifikate signiert von Apple für jeden Safari-Erweiterung</li>
<li>Aktivieren des Developer-Menü in Safari</li>
</ul>
<p>An diesem Punkt ist es wirklich nur eine Frage der Idee, die man umsetzen möchte und den notwendigen HTML-und Javascript-Funktionalität für Ihre Erweiterungen.</p>
<p>Ein Teil der Entwicklung wird in Safari durch den so genannten Extension Builder (befindet sich unter Entwickler-Menü).</p>
<p>Apple nimmt einen ähnlichen Ansatz wie bei der Entwicklung für IOS, man muß also als Developer bei Apple registriert sein.  Jede  Safari Extensions muss ein Zertifikat von Apple zugewiesen bekommen. Zum Glück ist das erstellen eines Zertifikats  stressfrei und und mit einem Mac oder Windows Rechner online schon getan (<a href="http://translate.googleusercontent.com/translate_c?hl=de&amp;ie=UTF-8&amp;sl=en&amp;tl=de&amp;u=http://developer.apple.com/safari/certificates/index.action&amp;prev=_t&amp;rurl=translate.google.de&amp;usg=ALkJrhjU_oWDsSGjfgjqigSZoNsebr3RTQ">Safari Certificate Assistant</a>).</p>
<h4>Gesucht und gefunden durch:</h4><ul><li>safari extensions erstellen</li><li>safari extensions entwickeln</li><li>safari extension programmieren</li><li>safari erweiterungen programmieren</li><li>eigene safari extension</li><li>safari addon programmieren</li><li>safari erweiterung erstellen</li><li>safari extension erstellen</li><li>safari extensions programmieren</li><li>safari erweiterung programmieren</li></ul>]]></content:encoded>
			<wfw:commentRss>http://ajaxer.de/2010/offtopic/safari-extension-selber-schreiben/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Titan Javascript Web-Framework</title>
		<link>http://ajaxer.de/2010/offtopic/titan-javascript-web-framework/</link>
		<comments>http://ajaxer.de/2010/offtopic/titan-javascript-web-framework/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 17:18:42 +0000</pubDate>
		<dc:creator>Askin Er</dc:creator>
				<category><![CDATA[OffTopic]]></category>

		<guid isPermaLink="false">http://ajaxer.de/?p=99</guid>
		<description><![CDATA[Was ist Titan? Titan ist ein Open Source JavaScript Web-Framework basierend auf JSON und REST . Es basiert auf jQuery, wodurch es die einfach zu benutzen ist, vorrausgesetzt, man hat Erfahrungen in Javascript und JQuery. Titan arbeitet mit einer JSON-Schnittstelle, &#8230; <a href="http://ajaxer.de/2010/offtopic/titan-javascript-web-framework/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Was ist Titan?</p>
<p>Titan ist ein  Open Source JavaScript Web-Framework basierend auf <a title="Was ist JSON ?" href="http://en.wikipedia.org/wiki/JSON" target="_blank">JSON</a> und <a title="Was ist REST ?" href="http://en.wikipedia.org/wiki/REST" target="_blank">REST</a> . Es basiert auf  jQuery, wodurch es die einfach zu benutzen ist, vorrausgesetzt, man hat Erfahrungen in Javascript und JQuery. Titan arbeitet mit einer JSON-Schnittstelle, woddurch problemlos aus der JSON-Datenstruktur die HTML-Elemente erzeugt werden können.</p>
<p>Titan ist erstaunlich genial. Es ist extrem  einfach zu bedienen und beschleunigt die Entwicklungszeiten. Wenn man sich bereits mit jQuery &amp;  Javascript auskjennt ist die Lernkurve gleich Null.<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="225" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=8763767&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="400" height="225" src="http://vimeo.com/moogaloop.swf?clip_id=8763767&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p><a href="http://vimeo.com/8763767"></a></p>
<p>Features von Titan!</p>
<ul>
<li> <strong>Template unabhängig</strong><br />
Titan darf nicht HTML  generieren, sondern es nutzt die vorhandene benutzerdefinierte  HTML-Elemente.</li>
<li> <strong>Basierend auf Standards</strong><br />
Titan ist 100% HTML und  CSS-Validie. Die Titan  CSS-Schnittstelle ist vollständig gültig.</li>
<li> <strong>Weniger Code ist guter Code</strong><br />
Titan ist nur  25kb.</li>
</ul>
<p>Bei den ersten gehversuchen mit Titan habe ich schnell Ergebnisse erzielen können, was mich zu diesem Artikel bewegt hat.</p>
<h4>Gesucht und gefunden durch:</h4><ul><li>titanium framework</li><li>titanium javascript framework</li><li>titanium js framework</li></ul>]]></content:encoded>
			<wfw:commentRss>http://ajaxer.de/2010/offtopic/titan-javascript-web-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EU-Kartellverfahren Microsoft IE vs. Alternativbrowser</title>
		<link>http://ajaxer.de/2009/offtopic/eu-kartellverfahren-microsoft-ie-vs-alternativbrowser/</link>
		<comments>http://ajaxer.de/2009/offtopic/eu-kartellverfahren-microsoft-ie-vs-alternativbrowser/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 10:00:43 +0000</pubDate>
		<dc:creator>Askin Er</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[OffTopic]]></category>

		<guid isPermaLink="false">http://ajaxer.de/?p=94</guid>
		<description><![CDATA[Die EU ist der Meinung, dass durch die gleichzeitige Installation von Betriebssystem und Browser gegen EU Wettbewerbsrecht verstoßen wird und Microsoft seine marktbeherrschende Stellung im Browserbereich zum Nachteil von Nutzern und Konlurrenten ausnutzt. Mag man zum Thema Betriebssystem und Browser denken &#8230; <a href="http://ajaxer.de/2009/offtopic/eu-kartellverfahren-microsoft-ie-vs-alternativbrowser/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Die EU ist der Meinung, dass durch die gleichzeitige Installation von Betriebssystem und Browser gegen EU Wettbewerbsrecht verstoßen wird und Microsoft seine marktbeherrschende Stellung im Browserbereich zum Nachteil von Nutzern und Konlurrenten ausnutzt.</p>
<p style="text-align: left;">Mag man zum Thema Betriebssystem und Browser denken was man will, aber warum soll Microsoft nicht gleich Apple den hauseigenen Browser in der aktuellen Version mit installieren dürfen? Warum kümmern sich monatelang EU-Gremien um diese Nichtigkeit?</p>
<p style="text-align: left;">Geht man von einem normalen Anwender aus, der sich im Technikmarkt einen vorkonfigurierten Computer kauft, welcher wohl zu 90% mit einem Windows Betriebssystem ausgestattet sein wird, fragt man sich, weshalb er nach Inbetriebnahme nicht den Standardbrowser des Betriebssystemherstellers finden und nutzen können soll.</p>
<p style="text-align: left;">Ist Microsoft etwa Schuld daran, dass bspw. Apple sein Betriebssystem nur für die hauseigenen und mitunter vollkommen überteuerten Computer anbietet? Hat man beim Leopard Firefox und Opera vorinstalliert? Wird google in seinem angekündigten Betriebssystem den Internet Explorer standardmäßig anbieten?</p>
<p style="text-align: left;">Trotz aller Fragen machte Microsoft den Kartellisten das Angebot, beim Start des Internet Explores eine Alternativbrowserauswahl, dem so gennanten Web Browser Ballot, bereit zu stellen</p>
<p style="text-align: left;"><a href="http://ajaxer.de/wp-content/uploads/2009/11/ieAlternative.jpg"><img class="alignnone size-full wp-image-95" src="http://ajaxer.de/wp-content/uploads/2009/11/ieAlternative.jpg" alt="IeAlternative in EU-Kartellverfahren Microsoft IE vs. Alternativbrowser  - Ajaxer" width="500" height="310" /></a></p>
<p><em>Quelle:</em> <a style="color: #641727; text-decoration: none;" rel="web" href="http://www.microsoft.com/windows/post.aspx?p=06792bc6-15ba-460f-960c-efb8651b201c"><em>microsoft.com</em></a></p>
<p style="text-align: left;">Das ist nun laut <a style="color: #641727; text-decoration: none;" rel="web" href="http://www.heise.de/newsticker/meldung/EU-Kartellverfahren-Microsoft-Konkurrenten-verlangen-Aenderungen-am-Auswahlfenster-fuer-Web-Browser-850932.html">heise.de</a> auch wieder nicht richtig, da man z.b. noch das Logo sieht und alles schlimm und furchtbar und Bevormundung und <strong>Verschwendung von Steuergelder in Brüssel!</strong></p>
<p style="text-align: left;">Alle anderen Hersteller von Software-Anwendungen sollten sich schon mal in Brüssel bewerben, damit sie im nächsten Verfahren vielleicht auch ein kleines Werbebanner etc. nach der Windowsinstallation eingeblendet bekommen. E-Mail-Client Hersteller, wie wär es z.B. mit einer Beschwerde?</p>
<h4>Gesucht und gefunden durch:</h4><ul><li>bewegungsparallaxe</li><li>css bewegungsparallaxe</li></ul>]]></content:encoded>
			<wfw:commentRss>http://ajaxer.de/2009/offtopic/eu-kartellverfahren-microsoft-ie-vs-alternativbrowser/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascript Parallax Animation</title>
		<link>http://ajaxer.de/2009/offtopic/javascript-parallax-animation/</link>
		<comments>http://ajaxer.de/2009/offtopic/javascript-parallax-animation/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 17:25:59 +0000</pubDate>
		<dc:creator>Askin Er</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[MooTools]]></category>
		<category><![CDATA[OffTopic]]></category>

		<guid isPermaLink="false">http://ajaxer.de/?p=74</guid>
		<description><![CDATA[Animationen mit Javascript und CSS Unter Bewegungsparallaxe versteht man in der Wahrnehmungspsychologie den Effekt, der sich optisch ergibt, wenn verschiedene Objekte unterschiedlich von einander entfernt in einer Landschaft verteilt sind und sich der Beobachter parallel zu diesen Objekten seitlich fortbewegt &#8230; <a href="http://ajaxer.de/2009/offtopic/javascript-parallax-animation/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h1>Animationen mit Javascript und CSS</h1>
<blockquote><p>Unter <strong>Bewegungsparallaxe</strong> versteht man in der Wahrnehmungspsychologie den Effekt, der sich optisch ergibt, wenn verschiedene Objekte unterschiedlich von einander entfernt in einer Landschaft verteilt sind und sich der Beobachter parallel zu diesen Objekten seitlich fortbewegt und dabei in Richtung Horizont blickt. Dieser Effekt tritt beispielsweise auf, wenn man aus dem Seitenfenster eines fahrenden Autos oder Zuges schaut.</p>
<p>Das Resultat ist, dass diejenigen Objekte, die nahe beim Betrachter sind, sich schneller bewegen als die weit vom Betrachter entfernten. Die Bewegung der Objekte geht approximativ gegen Null, je näher sie dem Horizont sind, der sich nur minimal bewegt (in Abhängigkeit von der Gesamtgeschwindigkeit).</p>
<p>Quelle: Wikipedia</p></blockquote>
<p>Animationen sind was schönes. Animationen kennt man im Web jedoch oft nur in 2 Dimensionaler. Das man aber durch bewegungs Parallaxe auch 3D Animationen hinbekommt ist aus alter Zeit her auch nichts neues und wurde schon n-mal in Spielen Realisiert.</p>
<p><strong><span style="text-decoration: underline;">JQuery  jParallax</span></strong></p>
<p>jParallax erstellt aus einem ausgewähltem Element in einem Fenster oder Viewport, mit deren Kind-Elementen eine Parallax-Animation. Die Kind-Elemente werden in Schichten/Layer unterteilt. Diese Schichten bewegen sich in Reaktion auf die Maus und je nach ihren Abmessungen (und Optionen für Schicht-Initialisierung). Dadurch entsteht ein eindrucksvoller Parallax-Effekt.</p>
<p><a href="http://ajaxer.de/wp-content/uploads/2009/10/Bildschirmfoto-2009-10-27-um-08.39.50.png"><img style="padding: 0px; margin: 0px; border: 0px none initial;" src="http://ajaxer.de/wp-content/uploads/2009/10/Bildschirmfoto-2009-10-27-um-08.39.50.png" alt="Bildschirmfoto-2009-10-27-um-08 39 50 in Javascript Parallax Animation - Ajaxer" width="381" height="230" /></a></p>
<p>http://webdev.stephband.info/parallax.html</p>
<p><strong><span style="text-decoration: underline;">MooTools mParallax</span></strong></p>
<p>mParallax funktioniert genau wie jParallax, ist jedoch wie der Name es andeutet auf MooTools basierend</p>
<p>http://www.piksite.com/mParallax/</p>
<p><strong><span style="text-decoration: underline;">JavaScript (No Framework)</span></strong></p>
<p>Ohne jeglichen Framework und in puristischem Javascript hat <a title="inner.geek" href="http://inner.geek.nz/javascript/parallax/" target="_blank">Brett Taylor</a> ein sehr schönes Beispiel für ein Parallax-Effekt hervorgebracht.</p>
<p><a href="http://inner.geek.nz/javascript/parallax/" target="_self"><img class="alignnone size-full wp-image-91" src="http://ajaxer.de/wp-content/uploads/2009/10/Bildschirmfoto-2009-10-29-um-18.14.07.png" alt="Bildschirmfoto-2009-10-29-um-18 14 07 in Javascript Parallax Animation - Ajaxer" width="393" height="155" /></a></p>
<p>Ein weiteres Beispiel für Himmels, bzw, Sternen Animationen findet man  bei <a href="http://www.esqsoft.com/javascript/parallax-scrolling-example.htm">esqsoft</a></p>
<p><strong>CSS</strong></p>
<p><a href="http://css-tricks.com/examples/StarryNightMoving/" target="_self">CSS-Tricks </a>hat sich auch diesem Thema angenommen und ebenso ein anschauliches Beispiel mit der Einbettung von Content und einer Hintergrund-Parallaxe implementiert</p>
<p><strong><a href="http://ajaxer.de/wp-content/uploads/2009/10/Bildschirmfoto-2009-10-27-um-08.39.06.png"><img style="padding: 0px; margin: 0px; border: 0px none initial;" src="http://ajaxer.de/wp-content/uploads/2009/10/Bildschirmfoto-2009-10-27-um-08.39.06.png" alt="Bildschirmfoto-2009-10-27-um-08 39 06 in Javascript Parallax Animation - Ajaxer" width="353" height="306" /></a></strong></p>
<p>Eine weitere Möglichkeit Parallax Animationen rein in CSS zu realiseren findet man auf der Seite von <a href="http://resources.contentwithstyle.co.uk/img_bg_demo/" target="_self">contentwithstyle.co.uk</a>. Hier wurden auf  GIF-Animationen über ein ander geschichtet und dadurch auch eine Animation erstellt, die an die 16-Bit Konsolen erinnert.</p>
<p><span style="font-size: xx-small;"><span style="font-size: small;"><span><br />
</span></span></span></p>
<h4>Gesucht und gefunden durch:</h4><ul><li>parallax js</li><li>parallax javascript</li><li>javascript parallax</li><li>js parallax</li><li>javascript animationen</li><li>parallax animation</li><li>parallaxe javascript</li><li>javascript Parallaxe</li><li>parallaxe html</li><li>bewegungsparallaxe animation</li></ul>]]></content:encoded>
			<wfw:commentRss>http://ajaxer.de/2009/offtopic/javascript-parallax-animation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Script.aculo.us 1.8.3 veröffentlicht</title>
		<link>http://ajaxer.de/2009/prototypejs/script-aculo-us-1-8-3-veroffentlicht/</link>
		<comments>http://ajaxer.de/2009/prototypejs/script-aculo-us-1-8-3-veroffentlicht/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 12:06:48 +0000</pubDate>
		<dc:creator>Askin Er</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PrototypeJS]]></category>
		<category><![CDATA[Script.aculo.us]]></category>

		<guid isPermaLink="false">http://ajaxer.de/?p=78</guid>
		<description><![CDATA[Script.aculo.us 1.8.3 wurde aktualisiert. Die aktuelle Version von Script.aculo.us setzt auf auf derPrototype Version 1.6.1 .  Es wurden einige Bugs behoben. Gesucht und gefunden durch:prototype js sound]]></description>
			<content:encoded><![CDATA[<p>Script.aculo.us 1.8.3 wurde aktualisiert.</p>
<p style="text-align: center;"><a href="http://script.aculo.us/scriptaculous_logo.png"><img class="aligncenter" src="http://script.aculo.us/scriptaculous_logo.png" alt="Scriptaculous Logo in Script.aculo.us 1.8.3 veröffentlicht - Ajaxer" width="244" height="89" /></a></p>
<p>Die aktuelle Version von Script.aculo.us setzt auf auf derPrototype Version 1.6.1 .  Es wurden einige <a title="1.8.3 bugfix release" href="https://prototype.lighthouseapp.com/projects/8887/milestones/9608-1-8-2-bugfix-release" target="_self">Bugs</a> behoben.</p>
<h4>Gesucht und gefunden durch:</h4><ul><li>prototype js sound</li></ul>]]></content:encoded>
			<wfw:commentRss>http://ajaxer.de/2009/prototypejs/script-aculo-us-1-8-3-veroffentlicht/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JavaScript MP3 PLayer ohne Flash</title>
		<link>http://ajaxer.de/2009/prototypejs/javascript-mp3-player-ohne-flash/</link>
		<comments>http://ajaxer.de/2009/prototypejs/javascript-mp3-player-ohne-flash/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 18:16:17 +0000</pubDate>
		<dc:creator>Askin Er</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PrototypeJS]]></category>

		<guid isPermaLink="false">http://ajaxer.de/?p=69</guid>
		<description><![CDATA[Pimp3 bietet Ihnen eine einfache Möglichkeit zum Einfügen eines reinen Javascript MP3-Player (kein Flash erforderlich). Dabei lädt es eine Wiedergabeliste deiner Sound-Dateien (. Mp3&#8242;s) von einer externen JSON-Datei per  Ajax. Diese Quell-Datei kann auch dynamisch mit serverseitigen Sprachen generiert werden. &#8230; <a href="http://ajaxer.de/2009/prototypejs/javascript-mp3-player-ohne-flash/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a title="Javascript MP3 PLayer" href="http://cssrevolt.com/upload/files/pimp3/" target="_blank">Pimp3</a> bietet Ihnen eine einfache Möglichkeit zum Einfügen eines reinen Javascript MP3-Player (kein Flash erforderlich). Dabei lädt es eine Wiedergabeliste deiner Sound-Dateien (. Mp3&#8242;s) von einer externen JSON-Datei per  Ajax. Diese Quell-Datei kann auch dynamisch mit serverseitigen Sprachen generiert werden. Das &#8220;Look and Feel der Pimp3 ist völlig anpassbar (Skins) in der CSS-Datei.</p>
<p>Pimp3 basiert auf  <a style="outline-style: none; outline-width: initial; outline-color: initial; color: #4e7bb4;" title="Prototype" href="http://prototypejs.org/">Prototype</a> (1.6.0.3) und dem  <a style="outline-style: none; outline-width: initial; outline-color: initial; color: #4e7bb4;" title="Scriptaculous" href="http://script.aculo.us/">Scriptaculous</a> Sound (1.8.2)</p>
<p>Wenn man eine Alternative zu den gewohnten Flash-MP3 Playern sucht ist Pimp3 empfehlenswert.</p>
<h4>Gesucht und gefunden durch:</h4><ul><li>javascript mp3 player</li><li>mp3 Player Javascript</li><li>javascript mp3</li><li>mp3 player ohne flash</li><li>mp3 javascript</li><li>js mp3 player</li><li>java script mp3 player</li><li>javascript mp3 player ohne flash</li><li>javascript player</li><li>javascript mp3player</li></ul>]]></content:encoded>
			<wfw:commentRss>http://ajaxer.de/2009/prototypejs/javascript-mp3-player-ohne-flash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mooFX</title>
		<link>http://ajaxer.de/2009/prototypejs/moofx/</link>
		<comments>http://ajaxer.de/2009/prototypejs/moofx/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 20:45:25 +0000</pubDate>
		<dc:creator>Askin Er</dc:creator>
				<category><![CDATA[PrototypeJS]]></category>

		<guid isPermaLink="false">http://ajaxer.de/?p=28</guid>
		<description><![CDATA[Auf der Prototype basierend, bietet die mooFX Bibliothek so ziemlich frische Effekte. Try it mooFX]]></description>
			<content:encoded><![CDATA[<p>Auf der Prototype basierend, bietet die mooFX Bibliothek so ziemlich frische Effekte.</p>
<p>Try it <a href="http://moofx.mad4milk.net/">mooFX</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxer.de/2009/prototypejs/moofx/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Wipes</title>
		<link>http://ajaxer.de/2009/prototypejs/wipes/</link>
		<comments>http://ajaxer.de/2009/prototypejs/wipes/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 21:19:59 +0000</pubDate>
		<dc:creator>Askin Er</dc:creator>
				<category><![CDATA[PrototypeJS]]></category>
		<category><![CDATA[Effekte]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Wipes]]></category>

		<guid isPermaLink="false">http://ajaxer.de/?p=14</guid>
		<description><![CDATA[Der Scriptaculoues Effekt bietet die Möglichkeiten, die man regulär mit Flash realisieren würde. Wipes ist da eine Javascript Umsetzung die überaus witzige Effekte bietet. Es folgende Horizontal/Vertikal Effekte: Vertical split Horizontal split Wipe right Wipe left Wipe up Wipe down Page Flip Horizontal panels Vertical panels &#8230; <a href="http://ajaxer.de/2009/prototypejs/wipes/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Der Scriptaculoues Effekt bietet die Möglichkeiten, die man regulär mit Flash realisieren würde. Wipes ist da eine Javascript Umsetzung die überaus witzige Effekte bietet.</p>
<p>Es folgende Horizontal/Vertikal Effekte:</p>
<ul>
<li>Vertical split</li>
<li>Horizontal split</li>
<li>Wipe right</li>
<li>Wipe left</li>
<li>Wipe up</li>
<li>Wipe down</li>
<li>Page Flip</li>
<li>Horizontal panels</li>
<li>Vertical panels</li>
</ul>
<p><a title="Wipes" href="http://jameslab.moveable.com/wipe/" target="_blank">Wipes</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxer.de/2009/prototypejs/wipes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zoomy v2</title>
		<link>http://ajaxer.de/2009/prototypejs/zoomy-v2/</link>
		<comments>http://ajaxer.de/2009/prototypejs/zoomy-v2/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 21:09:49 +0000</pubDate>
		<dc:creator>Askin Er</dc:creator>
				<category><![CDATA[PrototypeJS]]></category>
		<category><![CDATA[Bildergalerie]]></category>
		<category><![CDATA[Fenster]]></category>
		<category><![CDATA[Transparenz]]></category>
		<category><![CDATA[Zoomen]]></category>

		<guid isPermaLink="false">http://ajaxer.de/?p=9</guid>
		<description><![CDATA[Zoomy.js ist auf der PrototypeJS basieren. Es bietet auf eine einfache Weise eine Bildergalerie zu erstellen. Wie der Name schon sagt, kann man Bilder zoomen &#8211; entweder als als PopUp (als Layer) oder in einer Box. Die Box kann verschoben werden und &#8230; <a href="http://ajaxer.de/2009/prototypejs/zoomy-v2/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Zoomy.js ist auf der PrototypeJS basieren.</p>
<p>Es bietet auf eine einfache Weise eine Bildergalerie zu erstellen. Wie der Name schon sagt, kann man Bilder zoomen &#8211; entweder als als PopUp (als Layer) oder in einer Box. Die Box kann verschoben werden und wird beim verschieben Transparent, was ich persönlich sehr nett finde.</p>
<p><a title="Link zu Zoomy v2" href="http://www.cssrevolt.com/upload/files/zoomy-v2/" target="_blank">Zoomy v2</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxer.de/2009/prototypejs/zoomy-v2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>KISS &#8211; KEEP IT STUPID and SIMPLE</title>
		<link>http://ajaxer.de/2009/offtopic/kiss-keep-it-stupid-and-simple/</link>
		<comments>http://ajaxer.de/2009/offtopic/kiss-keep-it-stupid-and-simple/#comments</comments>
		<pubDate>Sun, 15 Feb 2009 13:44:17 +0000</pubDate>
		<dc:creator>Askin Er</dc:creator>
				<category><![CDATA[DoJo]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[OffTopic]]></category>
		<category><![CDATA[PrototypeJS]]></category>

		<guid isPermaLink="false">http://ajaxer.de/?p=3</guid>
		<description><![CDATA[dumm und einfach? Mann sollte es eher Keep It Simple and with Sense heissen. Das wird hier jetzt auch geschehen]]></description>
			<content:encoded><![CDATA[<p>dumm und einfach?</p>
<p>Mann sollte es eher <strong>Keep It Simple and with Sense</strong> heissen.</p>
<p>Das wird hier jetzt auch geschehen</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxer.de/2009/offtopic/kiss-keep-it-stupid-and-simple/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

