<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-10302924</id><updated>2011-11-30T18:40:11.535+01:00</updated><category term='23c3'/><title type='text'>SimonOX</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://simonox.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default?start-index=101&amp;max-results=100'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>215</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-10302924.post-2406005900628300606</id><published>2011-10-04T22:13:00.000+02:00</published><updated>2011-10-04T23:18:02.629+02:00</updated><title type='text'>JSConf.eu - Roundup Tag 2</title><content type='html'>Nach einer richtig guten Party ging es am zweiten Tag mit der &lt;a href="http://JSConf.eu"&gt;JSConf.eu&lt;/a&gt; direkt weiter.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Jed Schmidt rockte den Saal mit seinem Vortrag über 140byt.es.&lt;br /&gt;&lt;br /&gt;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 - wenn auch langsame und nicht besonders stabile - Implementierung live demonstrieren.&lt;br /&gt;&lt;br /&gt;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. &lt;br /&gt;&lt;br /&gt;James Coglan verwendete Websockets, um nahezu alle Laptops im Raum fernzusteuern, um darauf Musik wiederzugeben.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt; &lt;br /&gt;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. &lt;br /&gt;&lt;br /&gt;Erik Corry führte in den neuen Garbage Collector von Googles V8 ein. Zudem konnte er Tipps zeigen, um Memory-Leaks zu vermeiden.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Die Konferenz war sehr gelungen - ein Lob an die Veranstalter!&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-2406005900628300606?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/2406005900628300606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/2406005900628300606'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2011/10/jsconfeu-roundup-tag-2.html' title='JSConf.eu - Roundup Tag 2'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-8433813278517013053</id><published>2011-10-01T20:52:00.000+02:00</published><updated>2011-10-04T22:11:01.067+02:00</updated><title type='text'>JSConf.eu - Roundup Tag 1</title><content type='html'>Ich bin auf der &lt;a href="http://JSConf.eu"&gt;JSConf.eu&lt;/a&gt; 2011. Hier meine Eindrücke vom ersten Tag.&lt;br /&gt;&lt;br /&gt;Der Veranstaltungsort - die Alte Münze Berlin - 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 - etwas heruntergekommen aber mit dem gewissen etwas an Industrieromantik.&lt;br /&gt;&lt;br /&gt;Nach dem &lt;a href="http://vimeo.com/29873668"&gt;Eröffnungssong&lt;/a&gt; von Bella Morningstar berichtete Dean McNamee 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. &lt;strike&gt;Mir ist unklar, was Plask im Wesentlichen von anderen Exerimentier-Umgebungen wie Processing / Processing.js unterscheidet.&lt;/strike&gt; Plask ist wie Processing auf Speed! &lt;br /&gt;&lt;br /&gt;Peter van der Zee plädierte für mehr Tools. Im Bezug auf Entwicklerwerkzeuge befindet sich JavaScript - trotz Firebug, Web-Inspector und Chrome-Debugger - 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.&lt;br /&gt;&lt;br /&gt;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. &lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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 (&amp;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. &lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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 - die Anlage kümmert sich vollautomatisch um die richtige Mischung. &lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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. &lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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 einem grafischen Demo mit Web-CL zeigte er, dass eine parallelisierte Implementierung des Demos zehn mal so schnell lief wie eine sequentielle Implementierung. &lt;br /&gt;Sein Talk entsprach im Wesentlichen dem Talk, den er auf der Capitol.js gehalten hatte. Er lässt sich auf seiner Website komplett einsehen. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-8433813278517013053?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/8433813278517013053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/8433813278517013053'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2011/10/jsconfeu-roundup-tag-1.html' title='JSConf.eu - Roundup Tag 1'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-6419041060874276948</id><published>2011-09-21T21:49:00.001+02:00</published><updated>2011-09-21T21:49:45.028+02:00</updated><title type='text'>WPO - DOM und CSS</title><content type='html'>&lt;p&gt;In den letzen Monaten wanderte der Fokus in der Web Performance Optimierung von der Zeit, die zum Laden einer Seite benötigt wurde, zunehmend auf die Geschwindigkeit, in der das Rendering einer Seite und die anschließende Manipulation der Seite durchgeführt werden kann.&lt;/p&gt;&lt;p&gt;Der letzte Blog-Beitrag konzentrierte sich auf JavaScript, wohingegen sich dieser Blog-Beitrag mit dem DOM und CSS beschäftigt.&lt;/p&gt;&lt;p&gt;&lt;b&gt;DOM&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Die Verschachtelung des DOMs sollte nicht zu tief werden, genauer: Eine Schachtelungstiefe von mehr als 15 sollte unbedingt vermieden werden.&lt;/p&gt;&lt;p&gt;Elemente sollten über CSS gestylt werden. Direkt in Elementen sollten Style-Attribute nur in Ausnahmefällen (z.B. zur individuellen Platzierung) verwendet werden.&lt;/p&gt;&lt;p&gt;Leere DOM-Nodes sollten vermieden werden. Dies gilt auch für Spacer- oder Clear-DIVs.&lt;/p&gt;&lt;p&gt;Auch auf sonstige überflüssige Elemente (z.B. Grafiken für gerundete Ecken) sollte nach Möglichkeit (d.h. wenn dies der Style-Guide erlaubt) verzichtet werden.&lt;/p&gt;&lt;p&gt;Die Komplexität des DOMs lässt sich mit dem Bookmarklet DOM-Monster von Thomas Fuchs auch auf fremden Seiten überprüfen.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Benutze Hardware-Beschleunigung&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Moderne Browser (IE9, Mozilla und Webkit) bieten hardwarebeschleunigtes Rendering. Dieses macht sich allerdings erst bei der Berechnung von Animationen (Ein- und Ausblenden von Dialogen, Bewegen von Infoboxen über den Bildschirm) wirklich bemerkbar.&lt;/p&gt;&lt;p&gt;Hardwarebeschleunigung steht allerdings (wenn man von Canvas und WebGL absieht) nur CSS, nicht aber JavaScript zur Verfügung. Darum sollten Animationen stets per CSS mit Transitions erfolgen. JavaScript sollte nur als Fallback eingesetzt werden.&lt;/p&gt;&lt;p&gt;&lt;code&gt;#transition_animated {-moz-transition: all 5s ease-out;-o-transition: all 5s ease-out;-webkit-transition: all 5s ease-out;transition: all 5s ease-out;}&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Nutze CSS-Features durchgänging&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Effekte wie Schatten oder gerundete Ecken können und sollten mit CSS realisiert werden. Für Browser, die dies nicht unterstützen, wird dann auf eine Darstellung ohne diese Effekte zurückgegriffen. Einige CSS-Features kann man in alten IE-Versionen durch CSS3-Pie nachrüsten. Allerdings wirkt sich CSS3-PIE negativ auf die Laufzeit aus.&lt;/p&gt;&lt;p&gt;&lt;b&gt;CSS-Selektoren&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Ein Browser wertet CSS-Selektoren von rechts nach links aus. Eine Auswertung von rechts nach links ist nämlich technisch einfacher und performanter zu implementieren, da mit diesem Ansatz lediglich Listen gefiltert (reduziert) werden müssen. D.h., zunächst werden im Dokument alle Elemente ermittelt, die im rechten Teil des CSS-Selektors stehen, dann wird durch die Liste der gefundenen Elemente iteriert. Auf jedes vorher ermittelte Element wird dann der nächste Selektor ausgewertet. Die Liste wird um diesen Selektor reduziert.&lt;/p&gt;&lt;p&gt;Hierzu ein Negativbeispiel aus einem Stylesheet, das so wirklich existierte:&lt;/p&gt;&lt;p&gt;&lt;code&gt;div#page_navigation #navbar_01 ul.navbar_02 li.act_childs a&lt;/code&gt;&lt;/p&gt;&lt;p&gt;• a – Es werden alle Links einer Seite  in einer Liste gesammelt. Diese kann sehr lang werden, denn die Seite kann sehr viele Links enthalten.&lt;br /&gt;• li.act_childs – Es werden von allen Elementen in der Liste die Parent-Nodes ermittelt, um zu prüfen, ob diese ein Listen-Element mit der Klasse act_childs enthalten. Die Liste wird anhand dieses Kriterium reduziert.&lt;br /&gt;• ul.navbar_02 – Es werden von allen Elementen in der Liste die Parent-Nodes ermittelt, um zu prüfen, ob diese eine ungeordnete Liste mit der Klasse navbar_02 enhalten. Die Liste wird anhand dieses Kriterium reduziert.&lt;br /&gt;• #navbar_01 – Es werden von allen Elementen in der Liste die Parent-Nodes ermittelt, um zu prüfen, ob ein Element die ID navbar_01 hat. Eine ID muss auf einer HTML-Seite eindeutig sein. Die Liste wird anhand dieses Kriterium reduziert.&lt;br /&gt;• div#page_navigation – Obwohl im vorherigen Selektor bereits eine eindeutige ID angegeben wurde, werden von allen Elementen in der Liste die Parent-Nodes ermittelt, um zu prüfen, ob diese ein DIV mit der ID page_navigation enhalten. Ein ID-Selektor ist bereits eindeutig. Eine zusätzliche Überprüfung, ob dies ein DIV ist, ist überflüssig. Die Liste wird durch dieses Kriterium nicht wirklich reduziert, denn der vorhergehende ID-Selektor war bereits eindeutig.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Daher gelten einige Regeln für effektive CSS-Selektoren:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;Verwende effektive Selektoren&lt;/i&gt;&lt;/p&gt;&lt;p&gt;IDs sind die effektivsten Selektoren, gefolgt von Klassen-, Tags- und Universal-Selektoren.&lt;/p&gt;&lt;p&gt;&lt;code&gt;#main_navigation /* ID */&lt;br /&gt;.main_navigation /* Class */&lt;br /&gt;ul li a /* Tag */&lt;br /&gt;li a [title='Zurück zur Startseite'] /* Universal */&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Man sollte stets den schnellsten geeigneten Selektor möglichst weit rechts verwenden und den HTML-Code entsprechend gestalten. Selektoren auf Tags und Universal-Selektoren sollten komplett vermieden werden.&lt;/p&gt;&lt;p&gt;Ebenso sollten Descendant-Selektoren vermieden werden, die am langsamsten sind (siehe oben!). Oft lassen sich Descendant-Selektoren durch Child-Selektoren beschleunigen. Child-Selektoren sind zwar auch nicht schnell, aber doch schneller als Descendant-Selektoren, da von einem Element nicht potentiell alle Vorfahren, sondern lediglich das Elternelement ermittelt werden muss.&lt;/p&gt;&lt;p&gt;&lt;code&gt;ul.navbar_02 li.act_childs /* bad */&lt;br /&gt;ul.navbar_02 &gt; li.act_childs /* still bad but better */&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;Überqualifiziere Selektoren nicht&lt;/i&gt;&lt;/p&gt;&lt;p&gt;IDs sind bereits eindeutig. Auch Klassen sollten nur für einen Tag definiert sein. Daher sind überqualifizierte Selektoren wie div#main_navigation oder li .act_childs überflüssig. Es genügt, die Elemente über den sehr schnellen ID-Selektor oder den Class-Selektor zu filtern.&lt;/p&gt;&lt;p&gt;&lt;i&gt;Halte die Selektor-Kette kurz&lt;/i&gt;&lt;/p&gt;&lt;p&gt;Je länger die Selektor-Kette, desto mehr Operationen muss der Browser durchführen, um ein Element zu finden. Daher sollte die Kette der Selektoren kurz gehalten werden; überflüssige sollten ganz vermieden werden.Wenn sich eine Selektor-Kette nicht vermeiden lässt, dann sollte sie möglichst früh fehlschlagen, damit Elemente nicht überflüssig oft evaluiert werden müssen, bevor sie herausgefiltert werden.&lt;/p&gt;&lt;p&gt;&lt;i&gt;Benutze Kaskadierung&lt;/i&gt;&lt;/p&gt;&lt;p&gt;Oft lässt sich eine lange Selektor-Kette durch Kaskadierung vermeiden. CSS kaskadiert Style-Informationen hin zu den Sub-Elementen. Daher lässt sich ein Style oft schon an einem Vater-Element notieren, damit er im Kinder-Element angewendet wird.&lt;/p&gt;&lt;p&gt;Lange Selektoren trifft man oft an:&lt;code&gt;#navbar_01 ul.navbar_02 li a { font: „Arial“}&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Dieser lange Selektor könnte durch die Verwendung eines kurzen Selektors minimiert werden.&lt;/p&gt;&lt;p&gt;&lt;code&gt;#navbar_01 { font: „Arial“}&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Dieser Blog-Beitrag sollte gezeigt haben, dass nicht nur dynamische Inhalte und Download-Größen sondern auch Struktur und Styling mitverantwortlich für die Performance einer Website sein können.&lt;/p&gt;&lt;p&gt;Dies ist ein Cross-Post vom &lt;a href="http://blog.holisticon.de/2011/09/web-performance-optimierung-im-frontend-teil-2-dom-und-css/" title"Web Performance Optimierung im Frontend Teil 2 – DOM und CSS"&gt;Holisticon-Blog&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-6419041060874276948?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/6419041060874276948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/6419041060874276948'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2011/09/wpo-dom-und-css.html' title='WPO - DOM und CSS'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-633507222086097649</id><published>2011-09-13T21:44:00.000+02:00</published><updated>2011-09-13T21:44:02.377+02:00</updated><title type='text'>WPO - JavaScript und das DOM</title><content type='html'>&lt;p&gt;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.&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;In diesem Blog-Beitrag werden ich mich auf JavaScript konzentrieren.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Document.write&lt;/b&gt;&lt;/p&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Inline-JavaScript&lt;/b&gt;&lt;/p&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;&lt;b&gt;JavaScript-Blöcke&lt;/b&gt;&lt;/p&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Selektoren&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Selektoren, die z.B. in jQuery verwendet werden, sollten möglichst performant sein.&lt;/p&gt;&lt;p&gt;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(“.container .p–heading-1″)).&lt;/p&gt;&lt;p&gt;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.&lt;/p&gt;&lt;b&gt;Minimiere DOM-Manipulationen&lt;/b&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Cache DOM-Nodes und Attribute&lt;/b&gt;&lt;/p&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Minimiere Redraws und Reflows&lt;/b&gt;&lt;/p&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;Ä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.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Das Document-Ready-Event&lt;/b&gt;&lt;/p&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Lazy Initialisation&lt;/b&gt;&lt;/p&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Event Delegation&lt;/b&gt;&lt;/p&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;Dies ist ein Cross-Post vom &lt;a href="http://blog.holisticon.de/2011/09/web-performance-optimierung-im-frontend-teil-1-javascript/"&gt;Holisticon-Blog&lt;/a&gt; und von &lt;a href="http://ajaxer.de/2011/javascript/web-performance-optimierung-im-webbrowser-javascript-und-das-dom/"&gt;Ajaxer&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-633507222086097649?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/633507222086097649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/633507222086097649'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2011/09/wpo-javascript-und-das-dom.html' title='WPO - JavaScript und das DOM'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-2755955189397195951</id><published>2011-04-16T23:48:00.007+02:00</published><updated>2011-04-17T00:22:16.770+02:00</updated><title type='text'>JSON-P mit Spring und CXF</title><content type='html'>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:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;{&lt;br /&gt;  “cities”: [”Hamburg”, “New-York”, “Tokio”]&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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“.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;script src="”http://my.otherdomain.de/rest-ws/myservice/mydata?_jsonp=jsonpCallback“" type="”text/javascript”"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;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:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;jsonpCallback (&lt;br /&gt; &lt;br /&gt;  {&lt;br /&gt; &lt;br /&gt;    “cities”: [”Hamburg”, “New-York”, “Tokio”]&lt;br /&gt; &lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;);&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;return $.ajax({&lt;br /&gt; &lt;br /&gt;type: “GET”,&lt;br /&gt; &lt;br /&gt;url: “http://my.otherdomain.de/rest-ws/myservice/” + data,&lt;br /&gt; &lt;br /&gt;error: errorcallback,&lt;br /&gt; &lt;br /&gt;success: callback,&lt;br /&gt; &lt;br /&gt;dataType: “jsonp”,&lt;br /&gt; &lt;br /&gt;jsonp: “_jsonp”,&lt;br /&gt; &lt;br /&gt;jsonpCallback: “ jsonpCallback “&lt;br /&gt; &lt;br /&gt;});&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Auf Client-Seite stellt JSON-P also kein Problem dar und wird von gängigen JavaScript-Bibliotheken unterstützt.&lt;br /&gt;&lt;br /&gt;Auf dem Java Enterprise-Server wird für RESTful Services oft eine JAX-RS-Implementierung benutzt. Eine gängige JAX-RS-Implementierung ist Apache CXF. Allerdings stellt CXF im Moment noch kein JSON-P zur Verfügung (JIRA 3005). Daher muss man sich einen eigenen JSON-P-Provider schreiben. Dies ist glücklicherweise sehr einfach, denn man kann alle Funktionalitäten vom Default-JSONProvider erben:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;@Produces("application/json")&lt;br /&gt; &lt;br /&gt;public class JSONPProvider extends JSONProvider {&lt;br /&gt; &lt;br /&gt;  @Override&lt;br /&gt; &lt;br /&gt;  public void writeTo(&lt;br /&gt; &lt;br /&gt;    Object obj, Class cls,&lt;br /&gt; &lt;br /&gt;    Type genericType, Annotation[] anns,&lt;br /&gt; &lt;br /&gt;    MediaType m, MultivaluedMap&lt;string, object=""&gt; headers,&lt;br /&gt; &lt;br /&gt;    OutputStream os&lt;br /&gt; &lt;br /&gt;  ) throws IOException {&lt;br /&gt; &lt;br /&gt;    final String prefix = request.getParameter("_jsonp"); // fix for demo&lt;br /&gt; &lt;br /&gt;    final boolean hasPrefix = !StringUtils.isEmpty(prefix);&lt;br /&gt; &lt;br /&gt;    if(hasPrefix) {&lt;br /&gt; &lt;br /&gt;      // … check for injection first&lt;br /&gt; &lt;br /&gt;      os.write(prefix); // simplified&lt;br /&gt; &lt;br /&gt;      os.write('(');&lt;br /&gt; &lt;br /&gt;      super.writeTo(obj, cls, genericType, anns, m, headers, os);&lt;br /&gt; &lt;br /&gt;      os.write(')');&lt;br /&gt; &lt;br /&gt;    } else {&lt;br /&gt; &lt;br /&gt;      super.writeTo(obj, cls, genericType, anns, m, headers, os);&lt;br /&gt; &lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Dieser eigene JSON-P-Provider macht nichts, außer die vom JSON-Provider erzeugten JSON-Daten mit dem Aufruf einer Callback-Funktion zu umschließen, falls ein Request-Paramter „_jsonp“ übergeben wurde. Das abgedrucke Listing ist simplifiziert. Selbstverständlich muss man den Eingabeparameter „prefix“ prüfen, um eine Code-Injection auszuschließen.&lt;br /&gt;&lt;br /&gt;Dieser selbst geschriebene JSON-P-Provider kann im Spring-Framework nun als JSON-P-Provider-Bean definiert werden. Letztere kann in einem JAX-RS-Server genutzt werden.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;&lt;beans&gt;&lt;br /&gt; &lt;br /&gt;  &lt;import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml"&gt;&lt;br /&gt; &lt;br /&gt;  &lt;bean class="com.holisticon.rest.service.&amp;lt;strong&amp;gt;JSONPProvider&amp;lt;/strong&amp;gt;" id="JSONPProvider"&gt;&lt;br /&gt; &lt;br /&gt;  &lt;jaxrs:server address="/myService" id="myRestfulServiceServer"&gt;&lt;br /&gt; &lt;br /&gt;    &lt;jaxrs:servicebeans&gt;&lt;br /&gt; &lt;br /&gt;      &lt;ref bean="myRestfulService"&gt;&lt;br /&gt; &lt;br /&gt;    &lt;/ref&gt;&lt;/jaxrs:servicebeans&gt;&lt;br /&gt; &lt;br /&gt;    &lt;jaxrs:providers&gt;&lt;br /&gt; &lt;br /&gt;     &lt;ref bean="JSONPProvider "&gt;&lt;br /&gt; &lt;br /&gt;   &lt;/ref&gt;&lt;/jaxrs:providers&gt;&lt;br /&gt; &lt;br /&gt;  &lt;/jaxrs:server&gt;&lt;br /&gt; &lt;br /&gt;&lt;/bean&gt;&lt;/import&gt;&lt;/beans&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;So lassen sich RESTful Services, die bisher nur JSON sprechen konnten, durch Konfiguration des JSON-P-Providers so erweitern, dass sie auch optional JSON-P sprechen können.&lt;br /&gt;&lt;br /&gt;Dies ist ein Cross-Post vom &lt;a href="http://blog.holisticon.de/2011/04/json-p-mit-spring-und-cxf/"&gt;Holisticon-Blog&lt;/a&gt;&amp;nbsp;und von &lt;a href="http://ajaxer.de/javascript/json-p-mit-jquery/" title="json-p mit jquery"&gt;Ajaxer&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-2755955189397195951?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/2755955189397195951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/2755955189397195951'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2011/04/viele-webapplikationen-laden-daten-per.html' title='JSON-P mit Spring und CXF'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-4232904399650170358</id><published>2011-03-03T23:33:00.002+01:00</published><updated>2011-03-03T23:34:34.038+01:00</updated><title type='text'>Türstehen für Bohnen – Bean Validation mit domänenspezifischen Typen in der Praxis</title><content type='html'>&lt;div&gt;Simon Zambrovski und Oliver Ochs, JavaMagazin Ausgabe 4.2011&lt;br /&gt;&lt;br /&gt;&lt;img src="http://blog.holisticon.de/wp-content/uploads/2011/03/JM4_114d6f943b2b0fc.jpg"&gt;&lt;br /&gt;Nachdem vor Kurzem Simon Zambrovski und Oliver Ochs bereits einen IT-Talk zum Thema Bean Validation gehalten haben, ist nun auch ein JavaMagazin-Artikel zum gleichen Thema erschienen.&lt;br /&gt;&lt;br /&gt;In einer Java-Enterprise-Anwendung werden Daten erfasst und verarbeitet. Diese Daten müssen validiert werden. Die Validierungslogik ist meist eng an die Daten, die validiert werden, gekoppelt. Darum werden durch JSR-303 Bean Validation die Validierungsregeln direkt an die Daten annotiert. Der JSR-303 ist ein Teil der Java EE 6. Das heißt, man kann Bean Validation in Java EE 6 sowohl mit JSF als auch mit JPA einsetzen. Doch auch außerhalb der Java EE 6-Welt lässt sich Bean Validation z.B. mit Spring 3 verwenden.&lt;br /&gt;&lt;br /&gt;Der Artikel bietet einem praxisnahen Überblick über den Einsatz von JSR-303 mit all diesen Frameworks. Zudem wird die Verwendung von domänenspezifischen Typen tiefer gehend erläutert.&lt;br /&gt;&lt;br /&gt;Man findet den Artikel in der Rubrik "Enterprise".&lt;br /&gt;&lt;br /&gt;Mehr Informationen findet man im &lt;a href="http://blog.holisticon.de"&gt;Holisticon-Blog&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-4232904399650170358?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/4232904399650170358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/4232904399650170358'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2011/03/turstehen-fur-bohnen-bean-validation.html' title='Türstehen für Bohnen – Bean Validation mit domänenspezifischen Typen in der Praxis'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-3375218522006543954</id><published>2010-12-31T14:49:00.003+01:00</published><updated>2011-01-01T13:46:21.717+01:00</updated><title type='text'>UKW-Sender in Hamburg</title><content type='html'>Hier eine Senderliste der in Hamburg empfangbaren UKW-Radiosender. &lt;br /&gt;&lt;br /&gt;Die angegebenen Sendetürme sind die, die mir am wahrscheinlichsten vorkommen. Die Sender, die von Bergedorf aus abgestrahlt werden, kann ich leider selbst nicht empfangen.&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;   &lt;th&gt;No.&lt;/th&gt;&lt;th&gt;Sender&lt;/th&gt;&lt;th&gt;Sendeturm&lt;/th&gt;&lt;th&gt;Frequenz&lt;/th&gt; &lt;/tr&gt;&lt;/thead&gt; &lt;tbody&gt;&lt;tr&gt;   &lt;td&gt;1&lt;/td&gt;&lt;td&gt;NDR 2&lt;/td&gt;&lt;td&gt;Moorfleet&lt;/td&gt;&lt;td&gt;87,6&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;Deutschlandfunk&lt;/td&gt;&lt;td&gt;Mitte&lt;/td&gt;&lt;td&gt;88,7&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;3&lt;/td&gt;&lt;td&gt;DeutschlandRadio Kultur&lt;/td&gt;&lt;td&gt;Mitte&lt;/td&gt;&lt;td&gt;89,1&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;4&lt;/td&gt;&lt;td&gt;NDR 1 Welle Nord&lt;/td&gt;&lt;td&gt;Moorfleet&lt;/td&gt;&lt;td&gt;89,5&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;5&lt;/td&gt;&lt;td&gt;NDR 90,3&lt;/td&gt;&lt;td&gt;Moorfleet&lt;/td&gt;&lt;td&gt;90,3&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;6&lt;/td&gt;&lt;td&gt;917 xfm&lt;/td&gt;&lt;td&gt;Mitte&lt;/td&gt;&lt;td&gt;91,7&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;7&lt;/td&gt;&lt;td&gt;NDR Info&lt;/td&gt;&lt;td&gt;Moorfleet&lt;/td&gt;&lt;td&gt;92,3&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;8&lt;/td&gt;&lt;td&gt;FSK - Freies Senderkombinat&lt;/td&gt;&lt;td&gt;Mitte&lt;/td&gt;&lt;td&gt;93,0&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;9&lt;/td&gt;&lt;td&gt;Delta Radio&lt;/td&gt;&lt;td&gt;Mitte&lt;/td&gt;&lt;td&gt;93,4&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;10&lt;/td&gt;&lt;td&gt;NJOY Radio&lt;/td&gt;&lt;td&gt;Mitte&lt;/td&gt;&lt;td&gt;94,2&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;11&lt;/td&gt;&lt;td&gt;Oldie 95&lt;/td&gt;&lt;td&gt;Mitte&lt;/td&gt;&lt;td&gt;95,0&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;12&lt;/td&gt;&lt;td&gt;Offener Kanal Hamburg&lt;/td&gt;&lt;td&gt;Mitte&lt;/td&gt;&lt;td&gt;96,0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;Energy 97,1&lt;/td&gt;&lt;td&gt;Mitte&lt;/td&gt;&lt;td&gt;97,1&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;14&lt;/td&gt;&lt;td&gt;Klassik Radio&lt;/td&gt;&lt;td&gt;Mitte&lt;/td&gt;&lt;td&gt;98,1&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;15&lt;/td&gt;&lt;td&gt;NDR Kultur&lt;/td&gt;&lt;td&gt;Moorfleet&lt;/td&gt;&lt;td&gt;99,2&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;16&lt;/td&gt;&lt;td&gt;R.SH&lt;/td&gt;&lt;td&gt;Mitte&lt;/td&gt;&lt;td&gt;100,0&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;17&lt;/td&gt;&lt;td&gt;Radio ffn&lt;/td&gt;&lt;td&gt;Rosengarten&lt;/td&gt;&lt;td&gt;100,6&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;18&lt;/td&gt;&lt;td&gt;Radio Nora&lt;/td&gt;&lt;td&gt;Kaltenkirchen&lt;/td&gt;&lt;td&gt;101,1&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;19&lt;/td&gt;&lt;td&gt;R.SH&lt;/td&gt;&lt;td&gt;Kaltenkirchen&lt;/td&gt;&lt;td&gt;102,9&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;20&lt;/td&gt;&lt;td&gt;NDR 1 Niedersachsen&lt;/td&gt;&lt;td&gt;Rosengarten&lt;/td&gt;&lt;td&gt;103,2&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;21&lt;/td&gt;&lt;td&gt;Radio Hamburg&lt;/td&gt;&lt;td&gt;Moorfleet&lt;/td&gt;&lt;td&gt;103,6&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;22&lt;/td&gt;&lt;td&gt;Radio Hamburg&lt;/td&gt;&lt;td&gt;Mitte&lt;/td&gt;&lt;td&gt;104,0&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;23&lt;/td&gt;&lt;td&gt;Hit-Radio Antenne&lt;/td&gt;&lt;td&gt;Rosengarten&lt;/td&gt;&lt;td&gt;105,1&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;24&lt;/td&gt;&lt;td&gt;NDR 1 Welle Nord&lt;/td&gt;&lt;td&gt;Neumünster&lt;/td&gt;&lt;td&gt;106,4&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;25&lt;/td&gt;&lt;td&gt;106!8 Alster Radio rock'n'pop&lt;/td&gt;&lt;td&gt;Höltigbaum&lt;/td&gt;&lt;td&gt;106,8&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;26&lt;/td&gt;&lt;td&gt;Delta Radio&lt;/td&gt;&lt;td&gt;Kaltenkirchen&lt;/td&gt;&lt;td&gt;107,4&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;27&lt;/td&gt;&lt;td&gt;Oldie 95&lt;/td&gt;&lt;td&gt;Bergedorf&lt;/td&gt;&lt;td&gt;88,1&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;28&lt;/td&gt;&lt;td&gt;Energy 97,1&amp;nbsp;&lt;/td&gt;&lt;td&gt;Bergedorf&lt;/td&gt;&lt;td&gt;100,9&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;29&lt;/td&gt;&lt;td&gt;R.SH&amp;nbsp;&lt;/td&gt;&lt;td&gt;Bergedorf&lt;/td&gt;&lt;td&gt;102,0&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;30&lt;/td&gt;&lt;td&gt;Delta Radio&amp;nbsp;&lt;/td&gt;&lt;td&gt;Bergedorf&lt;/td&gt;&lt;td&gt;107,7&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-3375218522006543954?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/3375218522006543954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/3375218522006543954'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2010/12/ukw-sender-in-hamburg.html' title='UKW-Sender in Hamburg'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-6421097185391307347</id><published>2010-12-13T22:52:00.001+01:00</published><updated>2010-12-13T23:08:51.472+01:00</updated><title type='text'>Nachteile funktionaler Vererbung in JavaScript</title><content type='html'>In meinem letzten Blog-Post hatte ich die funktionale Vererbung in JavaScript vorgestellt. Diese funktionale Vererbung hat allerdings einige Nachteile.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;print(myBox instanceof square); // false&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Typen lassen sich zudem nicht erweitern. Das Super-Objekt wird in einer Closure gehalten. Es ist von außen nicht sichtbar.&lt;br /&gt;&lt;br /&gt;Der Syntax zum Erzeugen einer neuen Objekt-Instanz entspricht nicht den Konventionen von JavaScript.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;var myBox = box(5);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;new Box(5); // ReferenceError: Box is not defined&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Funktionale Vererbung sollte also nur in Ausnahmefällen angewendet werden, in denen ein funktionales Paradigma am sinnvollsten erscheint.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ajaxer.de/javascript/nachteile-funktionaler-vererbung/"&gt;Dies ist ein Cross-Post von Ajaxer.de.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-6421097185391307347?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/6421097185391307347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/6421097185391307347'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2010/12/nachteile-funktionaler-vererbung-in.html' title='Nachteile funktionaler Vererbung in JavaScript'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-9010553172827495993</id><published>2010-11-18T12:53:00.001+01:00</published><updated>2010-11-18T12:53:33.930+01:00</updated><title type='text'>Google Street View</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/5187095860/" title="photo sharing"&gt;&lt;img src="http://farm2.static.flickr.com/1042/5187095860_c8b98abbc9_m.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/5187095860/"&gt;Google Street View&lt;/a&gt;&lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/simonox/"&gt;SimonOx&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-9010553172827495993?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/9010553172827495993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/9010553172827495993'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2010/11/google-street-view.html' title='Google Street View'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm2.static.flickr.com/1042/5187095860_c8b98abbc9_t.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-6015058607749099383</id><published>2010-11-12T00:10:00.004+01:00</published><updated>2010-12-13T23:09:37.027+01:00</updated><title type='text'>Funktionale Vererbung in JavaScript</title><content type='html'>Funktionale Vererbung ist ein Begriff, der durch Douglas Crockford geprägt wurde.&lt;br /&gt;&lt;br /&gt;Funktionen sind Objekte. Wie Objekte können Funktionen auch selbst Eigenschaften (Properties) und Methoden (Funktionen) haben.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;function square(width) {&lt;br /&gt;  var squareObject = {};&lt;br /&gt;  squareObject.getArea = function() {&lt;br /&gt;    if (width &amp;gt; 0) {&lt;br /&gt;      return width * width;&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;   return squareObject;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;var mySquare = square(5);&lt;br /&gt;print(mySquare.getArea()); // 25&lt;br /&gt;print(mySquare.width); // undefined&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;function box(width) {&lt;br /&gt;  var boxObject = square(width);&lt;br /&gt;  var getSquareArea = boxObject.getArea;&lt;br /&gt;  boxObject.getVolume = function() {&lt;br /&gt;    if (width &amp;gt; 0) {&lt;br /&gt;      return getSquareArea() * width; &lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  boxObject.getArea = function() {&lt;br /&gt;    if (width &amp;gt; 0) {&lt;br /&gt;      return getSquareArea() * 6;  &lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  return boxObject;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;var myBox = box(5);&lt;br /&gt;print(myBox.getVolume());  // 125&lt;br /&gt;print(myBox.getArea()); // 150&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Dieser Ansatz ist wohl der einfachste Ansatz zur Objekt-orientierten Programmierung in JavaScript, da er ohne Prototypen und Konstruktor-Funktionen auskommt.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ajaxer.de/javascript/funktionale-vererbung/"&gt;Dies ist ein Cross-Post von Ajaxer.de.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-6015058607749099383?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/6015058607749099383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/6015058607749099383'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2010/11/funktionale-vererbung-in-javascript.html' title='Funktionale Vererbung in JavaScript'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-1550844237825913639</id><published>2010-09-10T23:50:00.004+02:00</published><updated>2010-12-13T23:12:11.037+01:00</updated><title type='text'>Google V8 installieren</title><content type='html'>&lt;div lang="de-DE"&gt;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.&lt;/div&gt;&lt;div lang="de-DE"&gt;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.&lt;/div&gt;&lt;div lang="de-DE"&gt;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.&lt;/div&gt;&lt;div lang="de-DE"&gt;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.&lt;/div&gt;&lt;div lang="de-DE"&gt;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.&lt;/div&gt;&lt;div lang="de-DE"&gt;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.&lt;/div&gt;&lt;div lang="de-DE"&gt;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.&lt;/div&gt;&lt;div lang="de-DE"&gt;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.&lt;/div&gt;&lt;div lang="de-DE"&gt;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.&lt;/div&gt;&lt;div lang="de-DE"&gt;V8 könnte eine - wenn nicht die - Grundlage für JavaScript auf dem Server oder in nativen Anwendungen bilden.&lt;/div&gt;&lt;div lang="de-DE"&gt;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.&lt;/div&gt;&lt;div lang="de-DE"&gt;&lt;/div&gt;&lt;div lang="de-DE"&gt;&lt;span style="color: #4a4a4a;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: x-small;"&gt;$ sudo port install scons subversion&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div lang="de-DE"&gt;&lt;/div&gt;&lt;div lang="de-DE"&gt;Unter Ubuntu Linux verwendet man dazu den Package-Manger apt.&lt;/div&gt;&lt;div lang="de-DE"&gt;&lt;/div&gt;&lt;span style="color: #4a4a4a;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: x-small;"&gt;$ sudo apt-get install zip scons subversion &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div lang="de-DE"&gt;&lt;/div&gt;&lt;div lang="de-DE"&gt;Unter der 64bit-Version von Ubuntu Linux könnte es notwendig sein, dass man zusätzlich noch die Multi-Lib-Packages installiert.&lt;/div&gt;&lt;div lang="de-DE"&gt;&lt;/div&gt;&lt;div lang="de-DE"&gt;&lt;span style="color: #4a4a4a;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: x-small;"&gt;$ sudo apt-get install g++-multilib gcc-multilib&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div lang="de-DE"&gt;&lt;/div&gt;&lt;div lang="de-DE"&gt;Anschließend kann man V8 aus dem Subversion-Repository auschecken und bauen.&lt;/div&gt;&lt;div lang="de-DE"&gt;&lt;/div&gt;&lt;div lang="de-DE"&gt;&lt;span style="color: #4a4a4a;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: x-small;"&gt;$ svn checkout http://v8.googlecode.com/svn/trunk/ v8&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div lang="de-DE"&gt;&lt;span style="color: #4a4a4a;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: x-small;"&gt;$ cd v8&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div lang="de-DE"&gt;&lt;span style="color: #4a4a4a;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: x-small;"&gt;$ scons sample=shell&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div lang="de-DE"&gt;&lt;/div&gt;&lt;div lang="de-DE"&gt;Nun kann man V8 über das Kommando „shell“ starten.&lt;/div&gt;&lt;div lang="de-DE"&gt;&lt;/div&gt;&lt;div lang="de-DE"&gt;&lt;span style="color: #4a4a4a;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: x-small;"&gt;$ ./shell&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div lang="de-DE"&gt;&lt;span style="color: #4a4a4a;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: x-small;"&gt;V8 version 2.2.21&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div lang="de-DE"&gt;&lt;span style="color: #4a4a4a;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;gt; print("Hello World");&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div lang="de-DE"&gt;&lt;span style="color: #4a4a4a;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: x-small;"&gt;Hello World&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div lang="de-DE"&gt;&lt;span style="color: #4a4a4a;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;gt; quit();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div lang="de-DE"&gt;&lt;span style="color: #4a4a4a;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div lang="de-DE"&gt;&lt;span class="Apple-style-span" style="color: #4a4a4a;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;a href="http://ajaxer.de/javascript/google-v8-installieren/"&gt;Dies ist ein Cross-Post von Ajaxer.de.&lt;/a&gt; &lt;a href="http://blog.holisticon.de/2010/11/server-side-javascript-mit-google-v8/"&gt;In Teilen befindet sicher Eintrag auch auf dem Holisticon-Blog.&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div lang="de-DE"&gt;&lt;span class="Apple-style-span" style="color: #4a4a4a;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-1550844237825913639?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/1550844237825913639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/1550844237825913639'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2010/09/google-v8-installieren.html' title='Google V8 installieren'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-5199568817515549002</id><published>2010-08-12T14:27:00.000+02:00</published><updated>2010-08-14T21:22:43.777+02:00</updated><title type='text'>Good-bye Google Wave - Hello Etherpad</title><content type='html'>Am vierten August verkündete Goole im offiziellen Google Wave Blog, dass das Projekt eingestellt wird. Die Server werden zwar bis Jahresende weiter laufen und die Quelltexte sollen — wie vor über einem Jahr versprochen — veröffentlicht werden, allerdings wird das Projekt nicht weiter entwickelt.&lt;br /&gt;&lt;br /&gt;Teile der bisherigen Entwicklung sollen weiterhin in anderen Google-Projekten Anwendung finden, Konzepte und Techniken hinter Google Wave sind in andere Google-Produkte wie Google Docs oder Google Mail eingeflossen. &lt;br /&gt;&lt;br /&gt;Bereits in unserer Artikelserie zu Google Wave zogen Jochen Jörg und ich folgendes Fazit:&lt;br /&gt;&lt;br /&gt;„Evtl. hätte Wave weniger komplex und auf das Wesentliche konzentriert starten sollen. Im Moment macht Wave, obwohl es schon seit einem Jahr in der Preview verfügbar ist, noch einen unfertigen Eindruck. [...] Die Zukunft wird zeigen, ob Google Wave ein Experiment aus den Google Labs bleiben wird oder ob es sich als eine Art Schweizer Taschenmesser für die Zusammenarbeit und Kommunikation in der Cloud etabliert.“&lt;br /&gt;&lt;br /&gt;Es gibt „weniger komplexe“ Alternativen zu Google Wave. Neben Stand-Alone-Anwendungen wie SubEthaEdit von den CodingMonkeys gibt es Etherpad.&lt;br /&gt;&lt;br /&gt;AppJet war ein Web 2.0-Startup, das 2007 u. a. von zwei Google-Mitarbeitern gegründet wurde. Der Fokus des Unternehmens war Etherpad. Etherpad ist ein web-basierter Echtzeit-Editor für kollaboratives Schreiben. Es bietet also das gleiche Kernfeature wie Google Wave, konzentriert sich aber auf das Wesentliche. AppJet wurde von Google gekauft und die Etherpad-Website wurde vorübergehend geschlossen. Allerdings ist der Quellcode von Etherpad komplett offen gelegt. &lt;br /&gt;&lt;br /&gt;Auf einem Linux-Server mit Ubuntu ist es sehr einfach, Etherpad zu installieren.&lt;br /&gt;&lt;br /&gt;Es gibt ein eigenes Repository für Etherpad. Dies muss man dem Paket-Manager APT bekannt machen. Dazu trägt man folgende Zeilen in die /etc/apt/sources.list-Datei ein:&lt;br /&gt;&lt;br /&gt;deb http://etherpad.org/apt all .&lt;br /&gt;deb http://ftp.de.debian.org/debian  sid main non-free&lt;br /&gt;&lt;br /&gt;Damit diese Repository verwendet wird, muss man updaten:&lt;br /&gt;$ apt-get update&lt;br /&gt;&lt;br /&gt;Dann lässt sich Etherpad einfach installieren:&lt;br /&gt;$ apt-get install etherpad&lt;br /&gt;&lt;br /&gt;Sämtliche Abhängigkeiten wie MySQL, Java und Scala sollten automatisch durch den Paketmanager aufgelöst werden. Ein dialog-gestützter Installer führt dann durch die Konfiguration. Man sollte sich im einfachsten Fall eine eigene Sub-Domain für Etherpad reservieren und diese in der Konfiguration bekanntgeben. In diesem Beispiel ist die Domain pad.mydomain.de.&lt;br /&gt;&lt;br /&gt;Normalerweise wird dann Etherpad über das Start-Script unter /etc/init.d/etherpad gestartet. Da dieses Startscript aber keine Fehler in der Konsole meldet, sollten die ersten Startversuche über das gesprächigere Start-Script run-local.sh erfolgen. Eventuell muss - je nach Server - im Startup-Script vorher die Variable MXRAM=”1G” angepasst werden. 512M sollten für Etherpad ausreichend sein:&lt;br /&gt;&lt;br /&gt;/usr/share/etherpad/etherpad $ ./bin/run-local.sh &lt;br /&gt;Using config file: ./etc/etherpad.local.properties&lt;br /&gt;Using mysql database type.&lt;br /&gt;Establishing mysql connection (this may take a minute)...&lt;br /&gt;mysql connection established.&lt;br /&gt;HTTP server listening on http://localhost:9000/&lt;br /&gt;&lt;br /&gt;Ob wirklich ein Etherpad auf Port 9000 lauscht, lässt sich leicht testen:&lt;br /&gt;$ lynx localhost:9000&lt;br /&gt;&lt;br /&gt;Falls Etherpad nicht funktioniert, kann man es über eine Properties-Datei konfigurieren:&lt;br /&gt;&lt;br /&gt;/etc/etherpad/etherpad.local.properties&lt;br /&gt;&lt;br /&gt;Natürlich möchte man in der Regel nicht, dass Etherpad im Internet über den Port 9000 erreichbar ist. Darum muss man den Apache entsprechend konfigurieren, dass ein Request auf dem Standardport 80 an Etherpad auf dem Port 9000 weitergeleitet wird. Dies geht am einfachsten über das Apache-Modul mod_proxy.&lt;br /&gt;&lt;br /&gt;$ a2enmod proxy_http&lt;br /&gt;Enabling proxy as a dependency&lt;br /&gt;Module proxy installed; run /etc/init.d/apache2 force-reload to enable.&lt;br /&gt;Module proxy_http installed; run /etc/init.d/apache2 force-reload to enable.&lt;br /&gt;&lt;br /&gt;Ein virtueller Host kann nun über den Proxy an Etherpad weitergeleitet werden:&lt;br /&gt;&lt;br /&gt;NameVirtualHost *&lt;br /&gt;&amp;lt;VirtualHost *&amp;gt;&lt;br /&gt;   ServerName pad.mydomain.de&lt;br /&gt;   ProxyRequests Off&lt;br /&gt;   &amp;lt;Proxy *&amp;gt;&lt;br /&gt;       Order deny,allow&lt;br /&gt;       Allow from all&lt;br /&gt;   &amp;lt;/Proxy&amp;gt;&lt;br /&gt;   ProxyPass / http://localhost:9000/&lt;br /&gt;   ProxyPassReverse / http://localhost:9000/&lt;br /&gt;   ProxyPreserveHost       on&lt;br /&gt;   &amp;lt;Location /&amp;gt;&lt;br /&gt;      Order allow,deny&lt;br /&gt;      Allow from all&lt;br /&gt;   &amp;lt;/Location&amp;gt;&lt;br /&gt;&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;&lt;br /&gt;Jetzt sollte sich Etherpad auch über das Internet mit den Browser aufrufen lassen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-5199568817515549002?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/5199568817515549002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/5199568817515549002'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2010/08/good-bye-google-wave-hello-etherpad.html' title='Good-bye Google Wave - Hello Etherpad'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-3310745218181066265</id><published>2010-07-01T22:39:00.001+02:00</published><updated>2010-12-13T23:08:00.720+01:00</updated><title type='text'>Javamagazin -  Maskenball - Google Wave (Teil 3)</title><content type='html'>&lt;strong&gt;Maskenball - Clientseitige Erweiterung von Google Wave&lt;br /&gt;&lt;/strong&gt;Oliver Ochs und Jochen Jörg, JavaMagazin Ausgabe 8.2010&lt;br /&gt;&lt;br /&gt;Im ersten Teil der Artikelserie haben wir die grundlegenden Konzepte von Google Wave vorgestellt und Wave ausführlich aus der Produktperspektive betrachtet. Im zweiten Artikel wurden die Funktionsweise sowie das Wave Protokoll näher beleuchtet. Ferner haben wir anhand eines Beispiels gezeigt, wie Wave mit Hilfe der Robot API erweitert werden kann. In diesem dritten Teil werden wir beschreiben, wie sich Wave unter Verwendung der Embed API in eine Website einbinden lässt und wie sich Gadgets - Miniprogramme, die im Client laufen - mit Hilfe der Gadgets API programmieren lassen.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.holisticon.de/2010/07/javamagazin-maskenball-google-wave-teil-3/"&gt;Dies ist ein Cross-Post des Holisticon-Blogs.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-3310745218181066265?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/3310745218181066265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/3310745218181066265'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2010/07/javamagazin-maskenball-google-wave-teil.html' title='Javamagazin -  Maskenball - Google Wave (Teil 3)'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-4637382101111257202</id><published>2010-06-01T22:34:00.001+02:00</published><updated>2010-12-13T23:05:56.519+01:00</updated><title type='text'>Javamagazin - Föderierte Agenten - Google Wave (Teil 2)</title><content type='html'>&lt;strong&gt;Föderierte Agenten - Serverseitige Erweiterungen von Google Wave&lt;br /&gt;&lt;/strong&gt;Oliver Ochs und Jochen Jörg, JavaMagazin Ausgabe 7.2010 &lt;br /&gt;&lt;br /&gt;Im ersten Teil der Artikelserie haben wir die grundlegende Konzepte von Google Wave vorgestellt und Wave ausführlich aus der Produktperspektive betrachtet. Außerdem haben wir einen eigenen Wave Federation Server aufgesetzt. In diesem zweiten Artikel werden wir die Funktionsweise und das Wave Protokoll näher beleuchten. Ferner wird anhand eines Beispiels gezeigt, wie Wave mit Hilfe der Robot API erweitert werden kann.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.holisticon.de/2010/06/javamagazin-foderierte-agenten-google-wave-teil-2/"&gt;Dies ist ein Cross-Post des Holisticon-Blogs.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-4637382101111257202?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/4637382101111257202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/4637382101111257202'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2010/06/javamagazin-foderierte-agenten-google.html' title='Javamagazin - Föderierte Agenten - Google Wave (Teil 2)'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-7535199629129600935</id><published>2010-05-13T08:48:00.000+02:00</published><updated>2010-05-13T08:59:36.916+02:00</updated><title type='text'>Rezept für Spuntenkäse (Spundekäse)</title><content type='html'>&lt;ul style="list-style-type: disc"&gt;&lt;li&gt;500 g Quark&lt;/li&gt;&lt;li&gt;250 g Butter&lt;/li&gt;&lt;li&gt;2 Pck. Frischkäse, natur&lt;/li&gt;&lt;li&gt;1 Pck. Schmelzkäse (rechteckig)&lt;/li&gt;&lt;li&gt;1-2 Zwiebeln&lt;/li&gt;&lt;li&gt;3 El. Paprikapulver, edelsüß&lt;/li&gt;&lt;li&gt;Pfeffer und Salz&lt;/li&gt;&lt;li&gt;zusätzlich Paprikapulver, edelsüß zum garnieren&lt;/li&gt;&lt;/ul&gt;Zutaten mit dem Handrührgerät verrühren, mit Paprikapulver garnieren.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-7535199629129600935?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/7535199629129600935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/7535199629129600935'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2010/05/rezept-fur-spuntenkase.html' title='Rezept für Spuntenkäse (Spundekäse)'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-8269152502429401273</id><published>2010-05-01T22:26:00.001+02:00</published><updated>2010-12-13T23:07:01.739+01:00</updated><title type='text'>Javamagazin - Der Schockwellenreiter - Google Wave (Teil 1)</title><content type='html'>&lt;strong&gt;Der Schockwellenreiter - Google Wave&lt;br /&gt;&lt;/strong&gt;Oliver Ochs und Jochen Jörg, JavaMagazin Ausgabe 6.2010&lt;br /&gt;&lt;br /&gt;Google Wave ist ein Werkzeug, mit dem die Kommunikation und Zusammenarbeit über das Internet revolutioniert werden sollte. Dieser radikale Ansatz könnte Wave auch scheitern lassen. In dieser dreiteiligen Artikelserie werden wir zeigen, was Google Wave ist, wie es funktioniert und welche Konzepte sich dahinter verbergen.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.holisticon.de/2010/05/javamagazin-der-schockwellenreiter-google-wave-teil-1/"&gt;Dies ist ein Cross-Post des Holisticon-Blogs.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-8269152502429401273?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/8269152502429401273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/8269152502429401273'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2010/05/javamagazin-der-schockwellenreiter.html' title='Javamagazin - Der Schockwellenreiter - Google Wave (Teil 1)'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-1690191075402409173</id><published>2010-03-31T12:43:00.002+02:00</published><updated>2010-03-31T12:43:47.274+02:00</updated><title type='text'>Für Emma Punk - Elektrische Version</title><content type='html'>&lt;embed height="266" src="http://www.blogger.com/img/videoplayer.swf?videoUrl=http%3A%2F%2Fv22.nonxt8.googlevideo.com%2Fvideoplayback%3Fid%3D0ab7aab0d7e7a1ba%26itag%3D5%26begin%3D0%26len%3D86400000%26app%3Dblogger%26et%3Dplay%26el%3DEMBEDDED%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1272179178%26sparams%3Did%252Citag%252Cip%252Cipbits%252Cexpire%26signature%3D325F9AE48715DED3A268B41C74FACCC794C6FFC8.D50A52E87D03E1DE88F86A3FCCE4AFDFA5B2461%26key%3Dck1&amp;amp;thumbnailUrl=http%3A%2F%2Fvideo.google.com%2FThumbnailServer2%3Fapp%3Dblogger%26contentid%3Dab7aab0d7e7a1ba%26offsetms%3D5000%26itag%3Dw320%26sigh%3DDFoIBbIFmnfv96p8Ae07pOKT8co&amp;amp;messagesUrl=video.google.com%2FFlashUiStrings.xlb%3Fframe%3Dflashstrings%26hl%3Den&amp;amp;nogvlm=1" type="application/futuresplash" width="320" &gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-1690191075402409173?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/1690191075402409173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/1690191075402409173'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2010/03/fur-emma-punk-elektrische-version.html' title='Für Emma Punk - Elektrische Version'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-3448620130273465893</id><published>2010-03-29T00:09:00.004+02:00</published><updated>2010-03-31T12:44:14.638+02:00</updated><title type='text'>Für Emma Punk... (Die Goldenen Zitronen - Für immer Punk)</title><content type='html'>&lt;object class="BLOG_video_class" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" height="266" id="BLOG_video-fd6c7cba9e80c2e0" width="320"&gt;&lt;param name="movie" value="http://www.blogger.com/img/videoplayer.swf?videoUrl=http%3A%2F%2Fv22.nonxt7.googlevideo.com%2Fvideoplayback%3Fid%3Dfd6c7cba9e80c2e0%26itag%3D5%26begin%3D0%26len%3D86400000%26app%3Dblogger%26et%3Dplay%26el%3DEMBEDDED%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1271953364%26sparams%3Did%252Citag%252Cip%252Cipbits%252Cexpire%26signature%3D5CA968BAECECE5CCA739673433977750423962E7.4404D7C1A18AAB74B0338352971EABC0992665D3%26key%3Dck1&amp;amp;thumbnailUrl=http%3A%2F%2Fvideo.google.com%2FThumbnailServer2%3Fapp%3Dblogger%26contentid%3Dfd6c7cba9e80c2e0%26offsetms%3D5000%26itag%3Dw320%26sigh%3DD1Lc_XC-_HTp6qkQ-YSbRoPp0bE&amp;amp;messagesUrl=video.google.com%2FFlashUiStrings.xlb%3Fframe%3Dflashstrings%26hl%3Den&amp;amp;nogvlm=1"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;embed width="320" height="266" src="http://www.blogger.com/img/videoplayer.swf?videoUrl=http%3A%2F%2Fv22.nonxt7.googlevideo.com%2Fvideoplayback%3Fid%3Dfd6c7cba9e80c2e0%26itag%3D5%26begin%3D0%26len%3D86400000%26app%3Dblogger%26et%3Dplay%26el%3DEMBEDDED%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1271953364%26sparams%3Did%252Citag%252Cip%252Cipbits%252Cexpire%26signature%3D5CA968BAECECE5CCA739673433977750423962E7.4404D7C1A18AAB74B0338352971EABC0992665D3%26key%3Dck1&amp;amp;thumbnailUrl=http%3A%2F%2Fvideo.google.com%2FThumbnailServer2%3Fapp%3Dblogger%26contentid%3Dfd6c7cba9e80c2e0%26offsetms%3D5000%26itag%3Dw320%26sigh%3DD1Lc_XC-_HTp6qkQ-YSbRoPp0bE&amp;amp;messagesUrl=video.google.com%2FFlashUiStrings.xlb%3Fframe%3Dflashstrings%26hl%3Den&amp;amp;nogvlm=1" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-3448620130273465893?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/3448620130273465893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/3448620130273465893'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2010/03/blog-post.html' title='Für Emma Punk... (Die Goldenen Zitronen - Für immer Punk)'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-5146537017884418034</id><published>2010-03-24T15:49:00.000+01:00</published><updated>2010-03-29T00:07:35.478+02:00</updated><title type='text'>Web Performance-Optimierung</title><content type='html'>&lt;strong&gt;Performance-Optimierung&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Bei einem Kunde wurde die Performance der Website optimiert. Inspiriert wurde diese Optimierung durch das Buch „High Performance Web Sites: 14 Steps to Faster-Loading Web Sites“ von Steve Souders.&lt;br /&gt;&lt;br /&gt;Anhand der Engineering-Taks, die in diesem Buch beschrieben werden, wurden folgende Regeln aufgestellt und implementiert.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Rendering so früh wie möglich erlauben&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Wenn ein Benutzer eine Seite aufruft, so muss er warten, bis die Seite aufgebaut ist. Während er wartet, benötigt er ein visuelles Feedback, damit er sicher gehen kann, dass die Seite funktioniert. Durch das Feedback erscheint für den Nutzer die Zeit, die er auf die Seite wartet, subjektiv kürzer.&lt;br /&gt;&lt;br /&gt;In Webseiten wird in der Regel kein Fortschrittsbalken eingeblendet, sondern die Seite selbst ist der Fortschrittsbalken. Statt dass der Nutzer vor einer weißen Seite sitzt, die sich nach der Wartezeit in einem einzigen Augenblick aufbaut, sollte sich die Seite im Browser nach und nach aufbauen.&lt;br /&gt;&lt;br /&gt;Um dies zu erreichen, sollte es dem Web-Browser technisch ermöglicht werden, herunter geladene Inhalte so früh wie möglich darstellen zu können. Dazu benötigt er einfach möglichst früh alle nötigen Informationen zum Rendering der Seite.&lt;br /&gt;&lt;br /&gt;Außerdem sollte man - z.B. nach dem Rendering des Kopfbereichs - den HTTP-Output flushen.&lt;br /&gt;&lt;br /&gt;Eine weiße Seite erscheint (vor allem im Internet Explorer) trotzdem dann, wenn&lt;br /&gt;&lt;br /&gt;&lt;ul style="list-style-type: disc"&gt;&lt;li&gt;man eine Seite in einem neuen Fenster öffnet,&lt;/li&gt;&lt;li&gt;der Browser während eines Reloads bewegt wird (z.B. minimiert und wiedergestellt wird),&lt;/li&gt;&lt;li&gt;eine Seite als Homepage (als erste Seite überhaupt) geladen wird.&lt;/li&gt;&lt;/ul&gt;Schlimmer als eine weiße Seite ist ein Flash of Unstyled Content (FUC). Dieser wird hervorgerufen, wenn Stylesheet-Informationen erst dann ausgewertet werden, wenn der Browser bereits mit der Darstellung des Contents begonnen hat.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Dimensionen von Grafiken und Bildern festlegen&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Wenn man für Images (Bilder und Grafiken) die Höhe und Breiter schon im Image-Tag vorgibt, kann der Browser mit der Berechnung der Seite schon beginnen, bevor die eigentlichen Binaries der Bilder heruntergeladen wurden.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;CSS in den Seitenkopf einbauen&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Stylesheets, die bereits im Dokumenten-Kopf (HEAD) eingebunden werden, ermöglichen es dem Browser, möglichst früh mit dem Rendering zu beginnen. Zudem wird durch das Einbinden in den Dokumenten-Kopf der FUC vermieden.&lt;br /&gt;&lt;br /&gt;CSS sollte immer über den Link-Tag eingebunden werden. @import-Regeln im CSS werden nämlich erst später, wenn das CSS bereits heruntergeladen wurde, evaluiert.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;CSS vor JavaScript einbinden&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Browser blockieren JavaScripte bis alle CSS-Dateien geladen sind. Dies liegt daran, dass JavaScripte Informationen aus Style-Attributen verwenden könnten. Darum muss der Browser vor der Ausführung von JavaScript warten, bis die CSS-Dateien geladen sind. Also sollte man, um eine Blockierung zu vermeiden, CSS-Dateien auch im HTML-Code vor JavaScript-Dateien referenzieren.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Reduziere die Anzahl der HTTP-Requests&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Je weniger einzelne Ressourcen (Dateien) ein Browser laden muss, desto schneller können diese herunter geladen werden, da der Over-Head durch HTTP bzw. durch TCP-Round-Trips entfällt. Außerdem gilt: je kleiner diese Ressourcen sind, desto schneller sind werden sie übertragen.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Parallelisiere Downloads über verschiedene Hosts&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Ein Browser kann pro Host nur eine bestimmte Anzahl an Verbindungen öffnen. Eine Übersicht, welcher Browser wie viele Verbindungen gleichzeitig öffnen kann, bietet die Website &lt;span style="text-decoration: underline;"&gt;&lt;a href="http://browserscope.org/"&gt;browserscope.org&lt;/a&gt;&lt;/span&gt;. Der Internet Explorer 6 (IE6) kann z.B. nur zwei Verbindungen pro Host öffnen.&lt;br /&gt;&lt;br /&gt;Wenn man die Ressourcen einer Site auf mehrere Hosts verteilt, dann kann der Browser eine größere Anzahl an Verbindungen verwenden.&lt;br /&gt;&lt;br /&gt;Für statische Inhalte wurden also zwei (virtuelle) Static-Hosts angelegt, über die diese Inhalte ausgeliefert werden.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Reduziere DNS-Lookups&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Allerdings lassen sich nicht beliebig viele Host-Namen verwenden. Pro Host-Name ist nämlich ein DNS-Lookup notwendig. Firefox speichert DNS-Lookups nur für eine Minute zwischen. D.h., wenn man zu viele Host für den parallelen Download verwendet, wird der Geschwindigkeitsvorteil, der durch verschiedenen Hosts erreicht wird, durch die DNS-Lookups wieder aufgehoben.&lt;br /&gt;&lt;br /&gt;Es sollte also pro Site nicht mehr als 2-4 Hosts zur Parallelisierung verwendet werden. Das Einbinden von Ressourcen sehr vieler Hosts, wie sie bei Zählpixeln (und Mash-Ups) üblich sind, sollte vermieden werden.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Reduziere SSL-Handshakes&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Es ist zu im Einzelfall zu überprüfen, ob bei einer Seite, die über HTTPS ausgeliefert wird, es sich überhaupt lohnt, verschiedene parallele Hosts zu verwenden. Evtl. wird die Zeit, die durch parallele Downloads gewonnen wird, durch einen zusätzlichen SSL-Handshake wieder verbraucht.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Verwende ein CDN&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Content Delivery Networks bieten ein Netzwerk aus Servern, die an verschiedenen Standpunkten gehostet werden. Über dieses Netzwerk lassen sich Ressourcen wie Videos oder große Downloads räumlich verteilen. Nutzern, die eine Ressource aus dem CDN anfordern, wird diese automatisch über einen räumlich nahe liegenden Server ausgeliefert.&lt;br /&gt;&lt;br /&gt;Große Dateien (wie Trailer und andere Flash-Movies) werden über ein CDN ausgeliefert. Flash-Movies sind grundsätzlich so zu gestalten, dass sie von einer beliebigen URL ausgeliefert werden können. Dies ist wegen der Verwendung von ActionScript und der Same Origin Policy nicht selbstvertändlich.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Verwende einen cookie-freien Host für statischen Content&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Cookies werden bei jedem Request der Cookie-Domain vom Browser zum Server übertragen. Die Bandbreite vom Browser zum Server ist oft viel kleiner als die Bandbreite vom Server zum Browser. Das Übertragen dieser Cookies ist für viele Inhalte unnützer Overhead. Content, der statisch ist, also keine Session-Informationen o.ä. aus Cookies benötigt, sollte darum von einer zweiten, Cookie-freien Domain ausgeliefert werden. Beispiele für solchen Content sind Stylesheets, Grafiken und Flash-Movies, die nicht über das CDN (siehe oben!) ausgeliefert werden.&lt;br /&gt;&lt;br /&gt;Ein URI-Builder in einem CMS, der zwischen statischen und dynamischen Inhalten unterscheiden kann, liefert dynamische Inhalte ohne Hostname, statische Inhalt jedoch über einen konfigurierten Host für statische Inhalte.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Optimiere Stylesheets&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Leicht lassen sich HTTP-Requests reduzieren, indem man CSS-Dateien zu wenigen oder zu einer einzigen Ressource zusammenfasst.&lt;br /&gt;&lt;br /&gt;Überflüssige White-Spaces lassen sich in den CSS-Dateien über den YUI-Compressor entfernen. Diese Komprimierung sollte automatisiert im Build bzw. im Publikationsprozess stattfinden.&lt;br /&gt;&lt;br /&gt;Da CSS-Expressions und lange CSS-Selektoren sich negativ auf die Browser-Performance auswirken, sollten diese vermieden werden.&lt;br /&gt;&lt;br /&gt;Background-Grafiken in Stylesheets lassen sich zu CSS-Sprites zusammenfassen. Wenn es auf einer Seite 25 grafische Elemente gleicher Größe gibt, lassen sich diese zu einer Sprite-Map mit 5x5 Elementen zusammenfassen. Statt 25 HTTP-Requests findet dann nur noch ein einziger HTTP-Request statt. Ein gutes Beispiel für CSS-Sprites ist die Sprite-Map, die Google auf der Suchseite verwendet.&lt;br /&gt;&lt;br /&gt;Das Bookmarklet auf &lt;span style="text-decoration: underline;"&gt;&lt;a href="http://spriteme.org/"&gt;spriteme.org&lt;/a&gt;&lt;/span&gt; kann automatisch Sprite-Maps einer Seite generieren.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Optimiere JavaScript&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;JavaScripts, die auf verschiedenen Seiten benötigt werden, sollten nicht inline im HTML-Dokument sondern als eigene JavaScript-Ressource verwendet werden. So wird die Größe des einzelnen HTML-Dokuments reduziert. JavaScripte, die nur auf einer Seite verwendet werden, sollten inline im HTML-Dokument stehen, um die Anzahl der Requests zu reduzieren.&lt;br /&gt;&lt;br /&gt;Viele Browser laden JavaScript – im Gegensatz zu anderen Ressourcen wie Grafiken oder Stylesheets – nicht parallel sondern arbeiten ein JavaScript-Dokument nach dem anderen ab. Der Download von JavaScript blockiert also den parallelen Download von Ressourcen. Darum machen sich Optimierungen in JavaScript-Bibliotheken besonders stark bemerkbar.&lt;br /&gt;&lt;br /&gt;Ähnlich wie bei CSS-Dateien lassen sich auch JavaScript-Bibliotheken zu wenigen JavaScript-Ressourcen zusammenfassen. &lt;br /&gt;Dies hat zudem den Vorteil, dass Abhängigkeiten zwischen Bibliotheken explizit gemacht werden. Wenn eine Bibliothek wie jQuery-UI von der Bibliothek jQuery abhängt, dann muss jQuery in der einzigen Bibliotheks-Ressource vor jQuery-UI eingebunden werden. Das Zusammenfassen von JavaScript-Bibliotheken zu einer einzigen JavaScript-Ressource sollte im Build-Prozess durch einen Assembler erfolgen. Durch das Verwenden eines Assemblers im Build-Prozess lässt sich zudem sicher stellen, dass Scripte nicht doppelt eingebunden werden.&lt;br /&gt;&lt;br /&gt;Die Größe von JavaScript-Dokumenten lässt sich zudem leicht durch das Minifizieren reduzieren. Durch das Minifizieren werden Kommentare und überflüssige Whitespaces aus dem JavaScript entfernt. Gängige Kompressoren sind Google Closure, JSMin von Douglas Crockford oder YUI-Compress von Yahoo. Auch das Minifizieren von JavaScript sollte automatisiert im Build-Prozess erfolgen. Alternativ lässt sich auch zur Laufzeit JavaScript-Code über den YUI-compressor komprimieren. Dazu lässt sich der Google-HTML-Kompressor (&lt;span style="text-decoration: underline;"&gt;&lt;a href="http://htmlcompressor.googlecode.com/"&gt;htmlcompressor.googlecode.com&lt;/a&gt;&lt;/span&gt;) in Verbindung mit dem YUI-Compressor verwenden.&lt;br /&gt;&lt;br /&gt;JavaScripte, die nicht schon vor dem Rendern der Seite benötigt werden, lassen sich leicht in den Fuß des Dokuments packen. So werden sichtbare Elemente vor den JavaScript-Ressourcen geladen und die Seite wird bereits dargestellt, während JavaScript-Bibliotheken, die im Fuß der Seite eingebunden wurden, noch nachladen.&lt;br /&gt;&lt;br /&gt;JavaScripte sollten so erstellt werden, dass sie nicht über document.write() direkt in den HTML-Strom schreiben sondern das DOM nach dem Laden der Seite manipulieren. So wird verhindert, dass der Browser das Rendering blockiert oder sogar unnötig oft ein Re-Rendering durchführen muss.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Verwende den Expires-Header&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Beim ersten Besuch einer Seite muss der Browser alle Inhalte herunter laden. Diese Inhalte lassen sich im Browser-Cache zwischen speichern. Ob und wie lange diese Inhalte gespeichert werden, wird über HTTP-Header wie den Expires-Header gesteuert: Expires: Wed, 14 Oct 2010 09:01:30 GMT&lt;br /&gt;&lt;br /&gt;Für statischen Inhalt lässt sich dieser auf beispielsweise ein Jahr in die Zukunft setzen. So wird der Browser veranlasst, Dokumente möglichst lange zwischen zu speichern. Man kann den Header auch weiter in die Zukunft setzen, allerdings wird dies im RFC nicht empfohlen.&lt;br /&gt;&lt;br /&gt;Der Expires-Header hat den Nachteil, dass er ein Datum erwartet. Eigentlich müsste also die Zeit zwischen Server und Browser synchronisiert sein. Statt dem Expires-Header wurde in http 1.1 darum die Max-Age-Direktive des Cache-Control-Headers eingeführt, die eine Angabe in Sekunden erwartet: Expires: Wed, 14 Oct 2010 09:01:30 GMT Cache-Control: max-age=31536000&lt;br /&gt;&lt;br /&gt;Obwohl der Cache-Control-Header den Expires-Header ablösen sollte, empfiehlt es sich, beide Header übereinstimmend zu setzen. Dies kann das „mod_expires“-Modul des Apaches zu übernehmen.&lt;br /&gt;&lt;br /&gt;Wenn nun allerdings statischer Inhalt, der ein Jahr im Cache des Browsers liegen soll, auf dem Server geändert wird, so bekommt der Nutzer dies nicht mehr mit.&lt;br /&gt;&lt;br /&gt;Darum muss neben dem Setzen von Expires-Headern auch dafür gesorgt werden, dass die veränderten Inhalte eine neue (eindeutige) URL bekommen. Ein URI-Builder integriert darum das Release-Datum einer Ressource in die URL der Ressource: content/static/5940026/2009-10-12-11-52-39/thumbnail.gif&lt;br /&gt;&lt;br /&gt;Wenn eine neue Version der Ressource veröffentlicht wird, dann wird im HTML-Dokument automatisch eine neue URL generiert. Der Browser holt dann die Ressource nicht mehr aus dem Cache sondern holt sich die neue Version der Ressource ab.&lt;br /&gt;&lt;br /&gt;Statt einer eindeutigen URL ließe sich auch der/das ETAG verwenden. Ein ETAG kann man sich wie eine Prüfsumme über den Content vorstellen. Der Server überträgt die Prüfsumme (den ETAG) zusammen mit dem Content im HTTP-Header. Wenn der Browser die Ressource erneut benötigt, überträgt er beim GET-Request den ETAG der Ressource mit, die er in seinem Cache findet. Der Server kann nun, wenn sich der ETAG nicht geändert hat, mit einer http-304-Response (Not Modified) antworten.&lt;br /&gt;&lt;br /&gt;Gegenüber einer eindeutigen URL hat der ETAG zwei Nachteile. ETAGs lassen sich ein einem Verbund von Apaches (Loadbalancing) nur schwer eindeutig konfigurieren und ETAGs benötigen für jede angeforderte Ressource einen http-Roundtrip.&lt;br /&gt;&lt;br /&gt;Darum sind Expires- und Cache-Control-Header dem ETAG vorzuziehen.&lt;br /&gt;&lt;br /&gt;ETAGs, die der Tomcat setzt, sollten vom Apache entfernt werden!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Komprimiere Ressourcen&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Textuelle Ressourcen (HTML, JavaScript und CSS) lassen sich komprimiert übertragen. Bereits komprimierte Ressourcen wie Grafiken und PDFs sollten nicht zusätzlich noch einmal komprimiert werden. Die gebräuchlichste Komprimierung ist die GZIP-Komprimierung. Browser, die eine komprimierte Übertragung unterstützen, teilen dies beim GET-Request dem Server mit:&lt;br /&gt;&lt;br /&gt;Accept-Encoding: gzip, deflate&lt;br /&gt;&lt;br /&gt;Wenn der Server dann die Ressource komprimiert ausliefert, antwortet er mit dem Response-Header:&lt;br /&gt;&lt;br /&gt;Content-Encoding: gzip&lt;br /&gt;&lt;br /&gt;Am Apache einschalten lässt sich GZIP mit dem Modul „mod_gzip“ (Apache 1.3) bzw. “mod_deflate“ (Apache 2.x).&lt;br /&gt;&lt;br /&gt;Obwohl der Internet Explorer 6 offiziell Kompression unterstütz, kommt es doch hin und wieder zu Fehlern, z.B. wenn auf dem gleichen Rechner eine alte Version des RealPlayers installiert ist. Um auf Nummer Sicher zu gehen, sollte man darum die Kompression nur für gängige Browser, die neuer als der Internet Explorer 6 sind, aktivieren.&lt;br /&gt;&lt;br /&gt;Leider interpretieren einige Proxies, die z.B. in Unternehmen eingesetzt werden, den Content-Encoding-Header falsch. Dies kann dazu führen, dass ein Browser, der GZIP unterstützt, vom Proxy nicht-gezipte Ressourcen ausgeliefert bekommt, oder schlimmer, dass ein Browser, der keine Kompression unterstütz, vom Proxy komprimierte Inhalte bekommt.&lt;br /&gt;&lt;br /&gt;Darum müsste dann der Vary-Header entsprechend so gesetzt werden, dass ein Proxy je nach Encoding und Browser (User-Agents) unterschiedliche Ressourcen für unterschiedliche Encodings und Browser (User-Agents) zwischenspeichert:&lt;br /&gt;&lt;br /&gt;Vary: Accept-Encoding,User-Agent&lt;br /&gt;&lt;br /&gt;Leider landen so sehr viele Artefakte im Cache, weswegen der Vary-Header nicht wie oben beschrieben konfiguriert wurde. Es wird also hingenommen, dass fehlerhafte Proxies und IE6-Versionen eine nicht optimale Darstellung der Seite erhalten.&lt;br /&gt;&lt;br /&gt;Vor dem Zippen des HTML-Contents lässt sich dieser über den Code-Kompressor minifizieren. Dadurch lassen sich überflüssige HTML-Kommentare, Whitespaces etc. entfernen:&lt;br /&gt;&lt;br /&gt;&amp;lt;%@ taglib uri=„&lt;span style="text-decoration: underline;"&gt;&lt;a href="http://htmlcompressor.googlecode.com/taglib/compressor"&gt;http://htmlcompressor.googlecode.com/taglib/compressor&lt;/a&gt;&lt;/span&gt;“ prefix=„compress“ %&amp;gt;&lt;br /&gt;&amp;lt;compress:html enabled=„true“ compressJavaScript=„true“&amp;gt;&lt;br /&gt;&amp;lt;!-- here is your JSP code --&amp;gt;&lt;br /&gt;&amp;lt;/compress:hmlt&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Ermögliche Proxy-Caching&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Obwohl es Probleme mit Proxies geben kann (siehe oben!), solle das Caching durch Proxies trotzdem generell motiviert werden. Dies erreicht man, indem man den Cache-Control-Header auf Public setzt. So teilt man nicht nur dem Browser, sondern auch Proxies explizit mit, dass Inhalte gecacht werden dürfen.&lt;br /&gt;&lt;br /&gt;Cache-Control: Public&lt;br /&gt;&lt;br /&gt;Einige Browser lassen sich durch diesen Header zusätzlich überreden, Ressourcen, die über HTTPS ausgeliefert werden, zwischen zu speichern, obwohl im Normalfall Ressourcen, die über eine geschützt Verbindung ausgeliefert werden, nicht auf der Festplatte zwischengespeichert werden sollen.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-5146537017884418034?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/5146537017884418034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/5146537017884418034'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2010/03/web-performance-optimierung.html' title='Web Performance-Optimierung'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-4887728491487302287</id><published>2009-10-11T17:04:00.001+02:00</published><updated>2009-10-11T17:04:08.738+02:00</updated><title type='text'>Hirschpark</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/4001395152/" title="photo sharing"&gt;&lt;img src="http://farm3.static.flickr.com/2558/4001395152_51f8055f37.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/4001395152/"&gt;Hirschpark&lt;/a&gt;&lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/simonox/"&gt;SimonOx&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-4887728491487302287?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/4887728491487302287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/4887728491487302287'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2009/10/hirschpark.html' title='Hirschpark'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2558/4001395152_51f8055f37_t.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-6854154449855574035</id><published>2009-08-15T19:59:00.001+02:00</published><updated>2009-08-15T19:59:22.713+02:00</updated><title type='text'>Wasser, wild</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3823945412/" title="photo sharing"&gt;&lt;img src="http://farm3.static.flickr.com/2535/3823945412_3db5d1d273.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3823945412/"&gt;Wasser, wild&lt;/a&gt;&lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/simonox/"&gt;SimonOx&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-6854154449855574035?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/6854154449855574035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/6854154449855574035'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2009/08/wasser-wild.html' title='Wasser, wild'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2535/3823945412_3db5d1d273_t.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-6341079136492825552</id><published>2009-08-15T19:17:00.001+02:00</published><updated>2009-08-15T19:17:48.905+02:00</updated><title type='text'>Master of puppets</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3823042199/" title="photo sharing"&gt;&lt;img src="http://farm3.static.flickr.com/2582/3823042199_3e1ccc7012.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3823042199/"&gt;Master of puppets&lt;/a&gt;&lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/simonox/"&gt;SimonOx&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-6341079136492825552?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/6341079136492825552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/6341079136492825552'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2009/08/master-of-puppets.html' title='Master of puppets'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2582/3823042199_3e1ccc7012_t.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-4598666802204846871</id><published>2009-08-15T19:14:00.001+02:00</published><updated>2009-08-15T19:14:48.882+02:00</updated><title type='text'>Hamburger DOM</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3823841088/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3573/3823841088_8ac96a7b4d.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3823841088/"&gt;Hamburger DOM&lt;/a&gt;&lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/simonox/"&gt;SimonOx&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-4598666802204846871?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/4598666802204846871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/4598666802204846871'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2009/08/hamburger-dom.html' title='Hamburger DOM'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3573/3823841088_8ac96a7b4d_t.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-9058696407781053334</id><published>2009-06-19T19:50:00.001+02:00</published><updated>2009-06-19T19:50:38.079+02:00</updated><title type='text'>Pommes</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3641140899/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3356/3641140899_07eafa25ef.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3641140899/"&gt;Pommes&lt;/a&gt;&lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/simonox/"&gt;SimonOx&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;--&lt;br /&gt;Sent via a mobile device&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-9058696407781053334?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/9058696407781053334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/9058696407781053334'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2009/06/pommes.html' title='Pommes'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3356/3641140899_07eafa25ef_t.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-5206394729799494577</id><published>2009-06-13T20:28:00.001+02:00</published><updated>2009-06-13T20:28:22.764+02:00</updated><title type='text'>Tagewerk</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3622911320/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3414/3622911320_ab79514606.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3622911320/"&gt;Tagewerk&lt;/a&gt;&lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/simonox/"&gt;SimonOx&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-5206394729799494577?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/5206394729799494577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/5206394729799494577'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2009/06/tagewerk.html' title='Tagewerk'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3414/3622911320_ab79514606_t.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-6428216856868322727</id><published>2009-05-21T22:48:00.001+02:00</published><updated>2009-05-21T22:48:27.825+02:00</updated><title type='text'>Java Server Pages Kaffee</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3552579658/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3598/3552579658_480074df17.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3552579658/"&gt;Java Server Pages Kaffee&lt;/a&gt;&lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/simonox/"&gt;SimonOx&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-6428216856868322727?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/6428216856868322727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/6428216856868322727'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2009/05/java-server-pages-kaffee.html' title='Java Server Pages Kaffee'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3598/3552579658_480074df17_t.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-1579503412019212588</id><published>2009-04-24T16:53:00.001+02:00</published><updated>2009-04-24T16:53:19.652+02:00</updated><title type='text'>Zauber-iPhone</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3471181140/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3571/3471181140_5dcdfb48a9.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3471181140/"&gt;Zauber-iPhone&lt;/a&gt;&lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/simonox/"&gt;SimonOx&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-1579503412019212588?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/1579503412019212588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/1579503412019212588'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2009/04/zauber-iphone.html' title='Zauber-iPhone'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3571/3471181140_5dcdfb48a9_t.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-7409179576060359668</id><published>2009-04-24T16:15:00.001+02:00</published><updated>2009-04-24T16:15:55.256+02:00</updated><title type='text'>AGAXY iPhone</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3471114908/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3541/3471114908_1db5d8c59a.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3471114908/"&gt;AGAXY iPhone&lt;/a&gt;&lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/simonox/"&gt;SimonOx&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-7409179576060359668?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/7409179576060359668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/7409179576060359668'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2009/04/agaxy-iphone.html' title='AGAXY iPhone'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3541/3471114908_1db5d8c59a_t.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-6117481989327663351</id><published>2009-04-23T15:47:00.001+02:00</published><updated>2009-04-23T15:47:55.068+02:00</updated><title type='text'>Eine Nummer groesser - noch im Bau</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3468496368/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3508/3468496368_4514c5b5a4.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3468496368/"&gt;Eine Nummer groesser - noch im Bau&lt;/a&gt;&lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/simonox/"&gt;SimonOx&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-6117481989327663351?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/6117481989327663351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/6117481989327663351'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2009/04/eine-nummer-groesser-noch-im-bau.html' title='Eine Nummer groesser - noch im Bau'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3508/3468496368_4514c5b5a4_t.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-8160369932945896245</id><published>2009-04-22T14:32:00.001+02:00</published><updated>2009-04-22T14:32:26.009+02:00</updated><title type='text'>Alles-Automat</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3464824219/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3533/3464824219_cf7cb3986d.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3464824219/"&gt;Alles-Automat&lt;/a&gt;&lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/simonox/"&gt;SimonOx&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-8160369932945896245?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/8160369932945896245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/8160369932945896245'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2009/04/alles-automat.html' title='Alles-Automat'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3533/3464824219_cf7cb3986d_t.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-3878466818267989466</id><published>2009-04-15T18:09:00.001+02:00</published><updated>2009-04-15T18:09:58.879+02:00</updated><title type='text'>Kräuterspirale</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3444357823/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3325/3444357823_feb701174b.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3444357823/"&gt;Kräuterspirale&lt;/a&gt;&lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/simonox/"&gt;SimonOx&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-3878466818267989466?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/3878466818267989466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/3878466818267989466'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2009/04/krauterspirale.html' title='Kräuterspirale'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3325/3444357823_feb701174b_t.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-9051444085338942252</id><published>2009-04-14T19:25:00.001+02:00</published><updated>2009-04-14T19:25:14.493+02:00</updated><title type='text'>Schaukeln beruhigt</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3442364708/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3538/3442364708_7459fce67d.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3442364708/"&gt;Schaukeln beruhigt&lt;/a&gt;&lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/simonox/"&gt;SimonOx&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-9051444085338942252?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/9051444085338942252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/9051444085338942252'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2009/04/schaukeln-beruhigt.html' title='Schaukeln beruhigt'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3538/3442364708_7459fce67d_t.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-5170167640780129321</id><published>2009-04-12T16:05:00.001+02:00</published><updated>2009-04-12T16:05:51.277+02:00</updated><title type='text'>Kugelbahn mit Nahbereichslinse</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3433907969/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3560/3433907969_8e7f31f616.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3433907969/"&gt;Kugelbahn mit Nahbereichslinse&lt;/a&gt;&lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/simonox/"&gt;SimonOx&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-5170167640780129321?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/5170167640780129321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/5170167640780129321'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2009/04/kugelbahn-mit-nahbereichslinse.html' title='Kugelbahn mit Nahbereichslinse'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3560/3433907969_8e7f31f616_t.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-435891223761032580</id><published>2009-04-12T16:04:00.001+02:00</published><updated>2009-04-12T16:04:41.934+02:00</updated><title type='text'>Osterhase</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3434712970/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3603/3434712970_5cbbf3e584.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3434712970/"&gt;Osterhase&lt;/a&gt;&lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/simonox/"&gt;SimonOx&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-435891223761032580?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/435891223761032580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/435891223761032580'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2009/04/osterhase.html' title='Osterhase'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3603/3434712970_5cbbf3e584_t.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-2145784772772739521</id><published>2009-04-11T11:05:00.001+02:00</published><updated>2009-04-11T11:05:21.729+02:00</updated><title type='text'>Einfach eingeschlafen</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3431291592/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3631/3431291592_103e2f9371.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3431291592/"&gt;Einfach eingeschlafen&lt;/a&gt;&lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/simonox/"&gt;SimonOx&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-2145784772772739521?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/2145784772772739521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/2145784772772739521'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2009/04/einfach-eingeschlafen.html' title='Einfach eingeschlafen'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3631/3431291592_103e2f9371_t.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-7921920806836061213</id><published>2009-04-10T08:09:00.001+02:00</published><updated>2009-04-10T08:09:57.129+02:00</updated><title type='text'>Nutella-Brot</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3427701813/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3341/3427701813_0431e8961f.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3427701813/"&gt;Nutella-Brot&lt;/a&gt;&lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/simonox/"&gt;SimonOx&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-7921920806836061213?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/7921920806836061213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/7921920806836061213'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2009/04/nutella-brot.html' title='Nutella-Brot'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3341/3427701813_0431e8961f_t.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-2846388045407353907</id><published>2009-03-21T09:57:00.001+01:00</published><updated>2009-03-21T09:57:54.219+01:00</updated><title type='text'>Schnarcht</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3371679601/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3626/3371679601_4672335f4d.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3371679601/"&gt;Schnarcht&lt;/a&gt;&lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/simonox/"&gt;SimonOx&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-2846388045407353907?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/2846388045407353907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/2846388045407353907'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2009/03/schnarcht.html' title='Schnarcht'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3626/3371679601_4672335f4d_t.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-1968961007372958071</id><published>2009-03-19T22:23:00.001+01:00</published><updated>2009-03-19T22:23:10.417+01:00</updated><title type='text'>Emma liest c't</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3368175289/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3622/3368175289_b8206ec59d_m.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3368175289/"&gt;IMG_0015.JPG&lt;/a&gt;&lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/simonox/"&gt;SimonOx&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-1968961007372958071?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/1968961007372958071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/1968961007372958071'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2009/03/emma-liest-c.html' title='Emma liest c&amp;#39;t'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3622/3368175289_b8206ec59d_t.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-7407598120810036336</id><published>2009-03-19T22:05:00.001+01:00</published><updated>2009-03-19T22:05:10.976+01:00</updated><title type='text'>Tropenaquarium</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3368973840/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3458/3368973840_84e84c430f.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/3368973840/"&gt;Tropenaquarium&lt;/a&gt;&lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/simonox/"&gt;SimonOx&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-7407598120810036336?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/7407598120810036336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/7407598120810036336'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2009/03/tropenaquarium.html' title='Tropenaquarium'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3458/3368973840_84e84c430f_t.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-962956117106567807</id><published>2008-12-09T20:39:00.001+01:00</published><updated>2008-12-09T20:40:35.945+01:00</updated><title type='text'>Lock-Screen bei Ubuntu eee</title><content type='html'>... neulich beim Installieren auf einem eeePC aufgefallen: Aus dem Lock-Screen kommt man auch mit einem gültigen Passwort nicht mehr raus. MGSimon hat die Lösung ergoogelt(?):&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CAUSE:&lt;br /&gt; /sbin/unix_chkpwd has wrong group/permissions&lt;br /&gt;SOLUTION:&lt;br /&gt; sudo chown root:shadow /sbin/unix_chkpwd&lt;br /&gt; sudo chmod 2755 /sbin/unix_chkpwd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-962956117106567807?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/962956117106567807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/962956117106567807'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2008/12/lock-screen-bei-ubuntu-eee.html' title='Lock-Screen bei Ubuntu eee'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-5623184255060748915</id><published>2008-12-09T20:33:00.001+01:00</published><updated>2008-12-09T20:33:56.195+01:00</updated><title type='text'>Reminder: CrashDumps nur noch ins Log laufen lassen</title><content type='html'>$ defaults write com.apple.CrashReporter DialogType Server&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-5623184255060748915?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/5623184255060748915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/5623184255060748915'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2008/12/reminder-crashdumps-nur-noch-ins-log.html' title='Reminder: CrashDumps nur noch ins Log laufen lassen'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-2683943047956926367</id><published>2008-11-27T16:41:00.003+01:00</published><updated>2008-11-27T17:09:17.540+01:00</updated><title type='text'>Reminder. BeanShell und CoreMedia</title><content type='html'>BeanShell starten: &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code&gt;$COREM_HOME$ ./cm bsh&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CoreMedia Connection einsourcen: &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;bsh % source("bin/bshrc");&lt;br /&gt;*** Connecting as admin ***&lt;br /&gt;*** Connected: CapConnection[http://*****:4441/coremedia/ior admin open] ***&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Connection ausgeben:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;bsh % connection;&lt;br /&gt;CapConnection[http://****:4441/coremedia/ior admin open]&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Mit Repository verbinden:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;bsh % repository = connection.getContentRepository();&lt;br /&gt;com.coremedia.cotopaxi.content.ContentRepositoryImpl@1347d33&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Systeminfo ausgeben:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;bsh % repository .getServerSystemInfo();&lt;br /&gt;CapSystemInfo[client=false, component=Content Repository in /opt/coremedia/dev/cms-redaktion, release=5.2, build: #304 (02.07.2008/00:05:27), host name=********, ip address=127.0.0.1, port=4441, os=Linux 2.6.18-92.1.10.el5 (i386), processors=4, jvm=Java HotSpot(TM) Server VM 1.5.0_16 (mixed mode) in /usr/local/jdk1.5.0_16/jre, max memory=981MByte]&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Content holen:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;bsh % repository.getContent("1");&lt;br /&gt;Content[coremedia:///cap/content/1]&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-2683943047956926367?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/2683943047956926367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/2683943047956926367'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2008/11/reminder-beanshell-und-coremedia.html' title='Reminder. BeanShell und CoreMedia'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-8064686291874292713</id><published>2008-05-19T12:58:00.001+02:00</published><updated>2008-05-19T12:58:32.584+02:00</updated><title type='text'>Emma Louise ist gut drauf</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/2504482741/" title="photo sharing"&gt;&lt;img src="http://farm3.static.flickr.com/2348/2504482741_4e892fa5cb_m.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/simonox/2504482741/"&gt;emma_louise2&lt;/a&gt;&lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/simonox/"&gt;SimonOx&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-8064686291874292713?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/8064686291874292713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/8064686291874292713'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2008/05/emma-louise-ist-gut-drauf.html' title='Emma Louise ist gut drauf'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2348/2504482741_4e892fa5cb_t.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-3354543262596832153</id><published>2008-03-29T13:56:00.001+01:00</published><updated>2008-03-29T13:56:45.238+01:00</updated><title type='text'>Emma Louise</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt; &lt;a href="http://www.flickr.com/photos/simonox/2370313295/" title="photo sharing"&gt;&lt;img src="http://farm3.static.flickr.com/2089/2370313295_347c341e89_m.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt; &lt;br /&gt; &lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;  &lt;a href="http://www.flickr.com/photos/simonox/2370313295/"&gt;Emma_Louise.jpeg&lt;/a&gt;  &lt;br /&gt;  Originally uploaded by &lt;a href="http://www.flickr.com/people/simonox/"&gt;SimonOx&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;Am 27.03.2008 kam Emma Louise zur Welt. Sie  wog bei der Geburt 4365 g und war 54 cm groß.&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-3354543262596832153?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/3354543262596832153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/3354543262596832153'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2008/03/emma-louise.html' title='Emma Louise'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2089/2370313295_347c341e89_t.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-6936845461958522887</id><published>2008-01-08T19:54:00.000+01:00</published><updated>2008-01-08T20:03:56.697+01:00</updated><title type='text'>Reminder: DVD-Images unter Linux brennen</title><content type='html'>Zuerst muss man den eigentlichen Brenner ermitteln. Dazu dient der Befehl wodim (write data to optical disk media):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;~$ wodim --devices&lt;br /&gt;&lt;br /&gt;wodim: Overview of accessible drives (2 found) :&lt;br /&gt;-------------------------------------------------------------------------&lt;br /&gt; 0  dev='/dev/hdc'      rwrw-- : 'HL-DT-ST' 'DVD-ROM GDR8164B'&lt;br /&gt; 1  dev='/dev/hdd'      rwrw-- : 'PHILIPS' 'DVDR1648P1'&lt;br /&gt;-------------------------------------------------------------------------&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Der DVD-Brenner ist - wie man erkennen kann - das Device /dev/hdd.&lt;br /&gt;&lt;br /&gt;Nun kann man ein ISO-Image (auch wenn es kein valides ISO-Image ist ;-)) mit growisofs brennen:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;growisofs -Z /dev/hdd=/home/user/my_maybe_non_valid_iso_image.iso&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-6936845461958522887?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/6936845461958522887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/6936845461958522887'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2008/01/reminder-dvd-images-unter-linux-brennen.html' title='Reminder: DVD-Images unter Linux brennen'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-2584490518273978339</id><published>2007-11-21T14:17:00.001+01:00</published><updated>2007-11-21T14:18:21.296+01:00</updated><title type='text'>Tor Exit Nodes sind illegal....</title><content type='html'>&lt;blockquote&gt;&lt;br /&gt;Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;--Benjamin Franklin&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-2584490518273978339?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/2584490518273978339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/2584490518273978339'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2007/11/tor-exit-nodes-sind-illegal.html' title='Tor Exit Nodes sind illegal....'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-85932877358945543</id><published>2007-11-21T10:29:00.000+01:00</published><updated>2007-11-21T10:32:31.398+01:00</updated><title type='text'>Photos taken in Freie und Hansestadt Hamburg on Flickr!</title><content type='html'>Bei Flickr gibt es ein schönes, neues Feature: &lt;a href="http://www.flickr.com/places/Germany/Hamburg"&gt;Photos taken in Freie und Hansestadt Hamburg on Flickr!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;Die URL sit ganz einfach, hier mal als Beispiel:&lt;br /&gt;&lt;li&gt;Hamburg: http://www.flickr.com/places/Germany/Hamburg&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Berlin: http://www.flickr.com/places/Germany/Berlin&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Tokyo: http://www.flickr.com/places/Japan/Tokio&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-85932877358945543?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/85932877358945543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/85932877358945543'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2007/11/photos-taken-in-freie-und-hansestadt.html' title='Photos taken in Freie und Hansestadt Hamburg on Flickr!'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-926130126594727256</id><published>2007-11-14T08:42:00.000+01:00</published><updated>2007-11-14T08:44:49.878+01:00</updated><title type='text'>HOWTO: Mit dem OpenVPN-Server unter Apple Mac-OS X mit Windows verbinden</title><content type='html'>Auf den im vorherigem Blog-Eintrag installierten OpenVPN-Server lässt sich natürlich auch von Windows aus zugreifen. Dazu benötigt der Windows-Rechner eigene Zertifikate. Diese heißen in diesem Beispiel:&lt;br /&gt;&lt;br /&gt;   &lt;ul&gt;&lt;br /&gt;     &lt;li&gt;Zertifikat: windows-cert.pem&lt;/li&gt;&lt;br /&gt;     &lt;li&gt;Key: windows.pem&lt;/li&gt;&lt;br /&gt;   &lt;/ul&gt; &lt;br /&gt;   &lt;br /&gt;Wie Tunnelblick unter Apple Mac-OS X gibt es für den Client auch eine Windows-GUI: OpenVPN GUI. Diese lässt sich von openvpn.se herunterladen: openvpn-2.0.9-gui-1.0.3-install.exe auf &lt;a href="http://openvpn.se/download.html"&gt;http://openvpn.se/download.html&lt;/a&gt;.&lt;br /&gt;   &lt;br /&gt;Man kann die OpenVPN-GUI einfach per Doppelklick auf den Installer installieren. Die Warnung, dass der TUN/TAP-Treiber nicht signiert ist, ignoriert man einfach.&lt;br /&gt;   &lt;br /&gt;Die Konfigurationsdatei "openvpn.conf", die man auf dem Mac mit Tunnelblick erzeugt und angepasst hat, kopiert man nach "C:\Programme\OpenVPN\config\openvpn.ovpn" und bennent sie um in openvpn.ovpn. Sollte man die mit Tunnelblick erzeugte Konfigurationsdatei nicht zur Hand haben, kann man statt dessen  auch eine Beispielkonfiguration aus dem OpenVPN-HOWTO als Template nehmen und anpassen.&lt;br /&gt;   &lt;br /&gt;Die Zertifikate (s.o.!) muss man ebenfalls in das Verzeichnis "C:\Programme\OpenVPN\config kopieren und in die Konfigurationsdatei eintragen, die Konfigurationsdatei also entsprechend anpassen.&lt;br /&gt;   &lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;    ca ca.crt&lt;br /&gt;    cert windows-cert.pem&lt;br /&gt;    key windows.pem&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;   &lt;br /&gt;Nun kann man die OpenVPN-GUI starten. Im System-Tray erscheint ein neues Icon. Durch Rechtsklick auf dieses neue Icon erscheint ein Kontextmenü, indem man den Menüpunkt "connect" wählt. Der Tunnel sollte sich nun aufbauen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-926130126594727256?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/926130126594727256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/926130126594727256'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2007/11/howto-mit-dem-openvpn-server-unter.html' title='HOWTO: Mit dem OpenVPN-Server unter Apple Mac-OS X mit Windows verbinden'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-1519901022634472322</id><published>2007-11-10T23:04:00.000+01:00</published><updated>2007-11-11T14:24:32.608+01:00</updated><title type='text'>HOWTO OpenVPN unter Apple MacOS-X als Client verwenden</title><content type='html'>Für MacOS-X Clients gibt es die bereits im vorherigen HOWTO (http://simonox.blogspot.com/2007/11/howto-openvpn-unter-apple-macos-x.html) angesprochene Software "Tunnelblick". Diese Software ist eine grafische Benutzeroberfläche für OpenVPN, die alle notwendigen Treiber gleich mitbringt. Einem Benutzer, der nur einen Client verwenden möchte, ist es i.d.R. nicht zuzumuten, auf der Kommandozeile Pakete zu installieren und einzurichten. "Tunnelblick" haben wir bereits im letzten Teil des HOWTOs heruntergeladen und auf einem USB-Stick gesichert. Auf dem USB-Stick befinden sich ebenfalls Zertifikate, die auf dem Server erzeugt wurden.&lt;br /&gt;&lt;br /&gt;Kurz gesagt muss man nur "Tunnelblick" in das Application-Verzeichnis kopieren, einen Ordner "~/Library/openvpn" erstellen und dort die Zertifikate hinkopieren. Anschließend kann man Tunnelblick starten, den Server einrichten und OpenVPN benutzen. Trotzdem an dieser Stelle eine Step-by-Step-Anleitung.&lt;br /&gt;&lt;br /&gt;Das Diskimage von Tunnelblick aktivieren wir und ziehen das Tunneblick-Icon in den Programm-Ordner. Anschließend legen wir mit dem Finder unter dem Heimverzeichnis (erkennbar am Haus-Icon) im Library-Unterverzeichnis ein Unterverzeichnis "openvpn" an (~/Library/openvpn). In dieses Verzeichnis kopieren wir mit dem Finder die Zertifikate und die Konfiguration vom USB-Stick:&lt;br /&gt;&lt;br /&gt;   * ca.crt&lt;br /&gt;   * iBook-cert.pem&lt;br /&gt;   * iBook-key.pem&lt;br /&gt;&lt;br /&gt;Nun können wir Tunnelblick starten.  Es erscheint in der Menüleiste als Icon, das aussieht wie ein Eisenbahntunnel. Tunnelblick legt automatisch eine openvpn.conf-Datei im gleichen Ordner an, in dem die Zertifikate liegen. Diese Konfigurationsdatei muss man bearbeiten, um sich mit dem eigenen Server zu verbinden. Dazu muss man die richtigen Textstellen finden und durch eigene Konfiguration ersetzten. &lt;br /&gt;&lt;br /&gt;Um mit dem Server, der im letzten HOWTO installiert und gestartet wurde, eine Verbindung aufzubauen, sind folgende Stellen in der Konfigurationsdatei zu ersetzen. Die Host-Adresse "myserver.dyndns.org" ist entsprechend anzupassen:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;remote myserver.dyndns.org 443&lt;br /&gt;&lt;br /&gt;ca ca.crt&lt;br /&gt;cert iBook-cert.pem&lt;br /&gt;key iBook-key.pem&lt;br /&gt;&lt;br /&gt;cipher AES-256-CBC&lt;br /&gt;&lt;br /&gt;dev tun&lt;br /&gt;&lt;br /&gt;proto udp&lt;br /&gt;&lt;br /&gt;port 443&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Nun können wir auf das Tunnelblick-Symbol klicken und  "Verbinden: openvpn" wählen. Die Verbindung sollte zustande kommen. Falls die Verbindung zustande kommt, sollte man sich die Konfigurationsdatei unter "~/Library/openvpn" sichern, um sie als Template für weitere Client-Installationen verwenden zu können. &lt;br /&gt;&lt;br /&gt;Nun kann man z.B. ein SMB-Share mounten, einen HTTP-Proxy ansprechen usw. Der OpenVPN-Server selbst ist unter der im Server konfigurierten IP-Adresse 10.8.0.1 zu erreichen. Tunnelblick hat die Option, automatisch eine Verbindung zum OpenVPN-Server aufzubauen. Dies ist praktisch, da diese auch aufgebaut wird, wenn das Client-Notebook einmal abhanden kommen sollte. Dazu muss allerdings eingestellt sein, dass sich ds iBook automatisch mit offenen Netzwerken konnektiert. OpenVPN läuft nämlich natürlich nur dann, wenn auch eine Internet-Verbindung besteht. &lt;br /&gt;&lt;br /&gt;Wenn sich das iBook mit dem OpenVPN-Server konnektiert, kann man in der OpenVPN-Server-Log-Datei wenigstens erkennen, von welcher IP-Adresse aus sich das Notebook einloggt. In der Log-Datei des Servers kann man nämlich die einzelnen Verbindungen erkennen. Diese sehen wie folgt aus:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;OpenVPN CLIENT LIST&lt;br /&gt;Updated,Sat Nov 10 23:10:41 2007&lt;br /&gt;Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since&lt;br /&gt;iBook,XX.XX.XX.XX:60347,13180,13895,Sat Nov 10 22:49:34 2007&lt;br /&gt;ROUTING TABLE&lt;br /&gt;Virtual Address,Common Name,Real Address,Last Ref&lt;br /&gt;10.8.0.6,iBook,XX.XX.XX.XX:60347,Sat Nov 10 22:49:35 2007&lt;br /&gt;GLOBAL STATS&lt;br /&gt;Max bcast/mcast queue length,0&lt;br /&gt;END&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Dies bedeutet, dass eine Verbindung vom Rechner, auf dem das iBook-Zertifikat liegt und der die IP-Adresse xx.xx.xx.xx hat, eine Verbindung aufgebaut wurde. Dieser Client-Rechner hat die VPN-IP-Adresse 10.8.9.6 bekommen.&lt;br /&gt;&lt;br /&gt;Sollte das Notebook abhanden kommen, sollte man irgendwann natürlich das Zertifikat des Clients zurückziehen. Dies geschieht auf dem Server wie folgt:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;sudo openssl ca -revoke /certs/iBook-cert.pem&lt;br /&gt;sudo openssl ca -gencrl -out crl.pem&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Das Zurückziehen des Zertifikats muss man dem OpenVPN-Server bekannt machen:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;sudo /bin/sh -c "cat ca.crt crl.pem &gt;/etc/openVPN/revoke.pem"&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Das Überprüfen der zurückgezogenen Zertifikate muss man in der Konfigurationsdatei des OpenVPN-Servers einstellen:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;crl-verify /etc/openvpn/revoke.pem&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-1519901022634472322?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/1519901022634472322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/1519901022634472322'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2007/11/howto-openvpn-unter-apple-macos-x-als.html' title='HOWTO OpenVPN unter Apple MacOS-X als Client verwenden'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-488619547167320251</id><published>2007-11-10T15:06:00.000+01:00</published><updated>2007-11-11T14:40:25.553+01:00</updated><title type='text'>HOWTO OpenVPN unter Apple MacOS-X</title><content type='html'>Das OpenVPN-HOWTO (http://openvpn.net/howto.html) geht nur auf die Verwendung von OpenVPN unter Linux und Windows ein. MacOS-X wird dort nicht berücksichtigt. Zwar gab es in der c't einen Artikel zu OpenVPN unter MacOS-X, allerdings wurde in diesem Artikel nicht auf die Konfiguration des Servers eingegangen. Darum an dieser Stelle ein HOWTO für OpenVPN unter MacOS-X. Um dieses HOWTO nachzuspielen, sind keine Programmierkenntnisse erforderlich. Allerdings sollte man wissen, was eine Shell ist und auch den Texteditor "vi" rudimentär bedienen können (oder man verwendet einen anderen Texteditor wie Smultron oder TextMate).&lt;br /&gt;&lt;br /&gt;Man verwendet ein VPN (Virtuelles Privates Netzwerk) um über öffentliche/unsichere Netzwerke eine Verbindung mit einem privaten/sicheren Netzwerk aufzubauen. Bei dem privaten Netzwerk kann es sich um das Mini-Home-Netzwerk hinter dem eigenen DSL-Router handeln. &lt;br /&gt;&lt;br /&gt;Bei einem VPN wir ein Tunnel zwischen dem Client und dem VPN-Server aufgebaut. Durch den Tunnel fließen dann alle Datenpakete verschlüsselt. OpenVPN ist eine Software zur Realisierung eines solchen VPNs. OpenVPN baut eine verschlüsselte Verbindung zwischen zwei Rechnern (oder zwei Gateways oder Rechner und Gateway) über das offene, unverschlüsselte Internet auf.&lt;br /&gt;&lt;br /&gt;OpenVPN kommt - im Ggs. zu IPSec usw. - mit nur einem Protokoll und einem Port aus, ist also recht schlank und einfach. So kann man auch NAT-Router einfach so einrichten, dass sie OpenVPN nicht blocken. Mehr zu OpenVPN findet man in der Wikipedia unter (http://de.wikipedia.org/wiki/OpenVPN).&lt;br /&gt;&lt;br /&gt;OpenVPN bentutzt OpenSSL zur Verschlüsselung. Als Protokolle lassen sich TCP oder UDP einsetzen. &lt;br /&gt;&lt;br /&gt;Ein Client kann sich gegenüber dem Server mit verschiedenen Verfahren authentifizieren. Für kleine Netze kommen zwar Preshared-Keys in Betracht, sicherer sind allerdings Zertifikate. Ein Client braucht ein gültiges (signiertes) Zertifikat, im sich gegenüber dem Server auszuweisen.&lt;br /&gt;&lt;br /&gt;Der Aufbau einer OpenVPN-Verbindung läuft wie folgt ab: Ein Client baut eine Verbindung zum Server auf. Ein X.509-Zertifikat des Servers wird geprüft, um festzustellen, ob der Server wirklich der gewünschte OpenVPN-Server oder ein Man-in-the-Middle ist. Die Prüfung wird mit dem öffentlichen Schlüssel der CA (Certificate Authority) durchgeführt. Es gibt kommerzielle CAs, in diesem HOWTO wird allerdings selbst CA gespielt (demoCA). &lt;br /&gt;Wenn das Zertifikat gültig ist, dann wird eine verschlüsselte Verbindung aufgebaut.&lt;br /&gt;&lt;br /&gt;Diese Verbindung erfolgt über SSL aka. TLS. Dabei nutzt OpenVPN die offene SSL-Implementierung OpenSSL. Eine private IP-Adresse bekommt der Client vom Server über den Tunnel. Die Endpunkte des Tunnels sind virtuelle Interfaces (TUN/TAP). MacOS-X bringt diese nicht mit. Darum müssen diese nachinstalliert werden.&lt;br /&gt; &lt;br /&gt;Unter Ubuntu-Linux (mit apt) oder Windows (mit einem Installer) lässt sich OpenVPN recht leicht mit Binär-Paketen installieren. Für MacOS gibt es solche Binärpakete leider (noch?) nicht. Darum muss man OpenVPN unter MacOS selbst bauen. Dazu sind die XCode-Tools von Apple (auf der Installations-CD #1 von MacOS-X) nötig. &lt;br /&gt;&lt;br /&gt;Zunächst muss man zwei Pakete herunterladen:&lt;br /&gt;&lt;br /&gt;   * LZO: &lt;a href="http://www.oberhumer.com/opensource/lzo/"&gt;http://www.oberhumer.com/opensource/lzo/&lt;/a&gt;&lt;br /&gt;   * OpenVPN: &lt;a href="http://openvpn.net"&gt;http://openvpn.net&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Beide Downloads kann man - sofern StuffIt o.ä. installiert ist - per Doppelklick auf dem Desktop entpacken und in das Home-Verzeichnis verschieben. Spätestens danach muss man die Shell öffnen und damit weiterarbeiten. &lt;br /&gt;&lt;br /&gt;LZO ist eine Kompressionsbiliothek, die die Datenpakete von OpenVPN komprimiert. So reagiert das virtuelle Netzwerk über eine langsame Internet-Verbindung weniger träge, da die verschlüsselten Datenpakte komprimiert werden.&lt;br /&gt;&lt;br /&gt;LZO baut man im Unix-üblichen configure--make--make-install-Dreischritt (btw: die Tilde (Schlangenlinie) "~" befindet sich bei MacOS unter Alt+n(+Leertaste)):&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;cd ~/lzo-2.02/&lt;br /&gt;./configure&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Sollte nun die Meldung "configure: error: no acceptable C compiler found in $PATH" erscheinen, scheinen die XCode-Tools nicht installiert zu sein. Ansonsten sollten rechte viele Checks über das Terminal laufen, bis die Meldung "Type `make' to build LZO. Type `make install' to install LZO. After installing LZO, please read the accompanied documentation." erscheint. Dieser Aufforderung  folgen wir.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;make&lt;br /&gt;sudo make install&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Nach dem dies erfolgreich durchgelaufen ist ("Libraries have been installed in: /usr/local/lib") wird OpenVPN installiert. OpenVPN ist die eigentliche VPN-Software.&lt;br /&gt;&lt;br /&gt;Man wechselt in das Verzeichnis, in das OpenVPN entpackt wurde, baut und installiert es:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;cd ~/openvpn-2.0.9/&lt;br /&gt;./configure&lt;br /&gt;make&lt;br /&gt;make check&lt;br /&gt;sudo make install&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Nun sollte OpenVPN in usr/local/sbin/openvpn installiert worden sein. Aus bequemlichkeitsgründen trägt man OpenVPN in die PATH-Umgebungsvariable ein, die in der versteckten Datei .bash-profile gesetzt werden kann. Man editiert diese Datei mit VI:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;cd ~&lt;br /&gt;vi .bash_profile &lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;In diese Datei trägt man nun den zusätzlichen Pfad ein. Evtl. sind dort bereits Pfade (wie im Beispiel Python) eingetragen, die man dann nur erweitern muss:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;PATH="/Library/Frameworks/Python.framework/Versions/Current/bin:/usr/local/sbin:${PATH}"&lt;br /&gt;export PATH&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Damit die Änderung am Bash-Profile gültig wird, muss man die das Terminal neu starten. Ob die Änderungen wirksam sind, kann man über den Befehl &lt;code&gt;&lt;pre&gt;env&lt;/pre&gt;&lt;/code&gt; kontrollieren. Die PATH-Umgebungsvariable sollte und den Pfad "/usr/local/sbin" enthalten.&lt;br /&gt;&lt;br /&gt;Nun lässt sich OpenVPN testweise starten:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;openvpn --version&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Eine Meldung wie die folgende sollte erscheinen:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;OpenVPN 2.0.9 powerpc-apple-darwin8.10.0 [SSL] [LZO] built on Oct 15 2007&lt;br /&gt;Developed by James Yonan&lt;br /&gt;Copyright (C) 2002-2005 OpenVPN Solutions LLC &lt;info@openvpn.net&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Wie man an dem Text "[LZO]" erkennt, wurde  von OpenVPN die Kompressionsbibliothek LZO erkannt und eingebunden :-)&lt;br /&gt;&lt;br /&gt;Nun muss man einen Schlüssel für die Certificate Authority erzeugen:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;cd /System/Library/OpenSSL/&lt;br /&gt;sudo openSSL genrsa -des3 -out ca.key 2048&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Auf die Frage "Enter pass phrase for ca.key:" sollte man mit einem möglichst komplizierten Passwort antworten, denn eine Verschlüsselung ist stets so stark (oder schwach) wie das gewählte Passwort. Eine best-practice ist, die Anfangsbuchstaben eines langen Satzes kombiniert man Zahlen und Sonderzeichen zu verwenden. Den erzeugen Schlüssel sollte man auf einem USB-Stick, auf dem auch der GPG/PGP-Key gesichert ist, sichern, damit er nicht verloren geht. Das Passwort sollte man nicht vergessen (oder im Schlüsselbund sichern).&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;mkdir /Volumes/USB\ DISK/OpenVPN&lt;br /&gt;cp ca.key /Volumes/USB\ DISK/OpenVPN/&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Nachdem man nun den Schlüssel hat, kann man die Certificate Authority selbst erzeugen:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;sudo openSSL req -new -x509 -days 9999 -key ca.key -out ca.crt&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Im folgenden Dialog beantwortet man die Fragen am "sinnvollsten" wie folgt:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;Country Name (2 letter code) [AU]:KZ&lt;br /&gt;State or Province Name (full name) [Some-State]:Kasachstan&lt;br /&gt;Locality Name (eg, city) []:Astana&lt;br /&gt;Organization Name (eg, company) [Internet Widgits Pty Ltd]:Menin Kasachstanym Ltd.&lt;br /&gt;Organizational Unit Name (eg, section) []:&lt;br /&gt;Common Name (eg, YOUR name) []:borat&lt;br /&gt;Email Address []:borat@whitehouse.gov&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Die Aktionen, die man für die Certificate Authority durchführen musste, müssen nun auch für das Server-Zertifikat durchgeführt werden. Eigentlich ist für OpenVPN gar kein "richtiges" Server-Zertifikat nötig. Normalerweise wird ein Server-Zertifikat für viel Geld von Verisign u.a. gekauft. Normalsterbliche gebe das Geld lieber anders aus. Darum erzeugen wir uns das Server-Zertifikat selbst.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;sudo openSSL genrsa -out server.key 2048 &lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Auch diesen Server-Key sichern wir auf dem USB-Stick.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;cp server.key /Volumes/USB\ DISK/OpenVPN/&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Nun legen wir eine Certifikate Signing Request an (nicht um diesen an Verisign zu stellen):&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;sudo openSSL req -new -key server.key -out server.csr&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Die nun folgende Dialoge beantwortet man wie beim Erstellen der Certificate Authority. Den CSR sichert man wieder auf dem USB-Stick.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;cp server.csr /Volumes/USB\ DISK/OpenVPN/&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Um den CSR selbst zu signieren, legen wir eine geeignete Ordnerstruktur mit einigen Dateien an:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;sudo mkdir -p demoCA/private&lt;br /&gt;sudo cp ca.key demoCA/private/cakey.pem&lt;br /&gt;sudo cp ca.crt demoCA/cacert.pem&lt;br /&gt;sudo mkdir demoCA/newcerts&lt;br /&gt;sudo touch demoCA/index.txt&lt;br /&gt;sudo /bin/sh -c "echo "01" &gt; demoCA/serial&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Mit dieser Ordnerstruktur können wir den CSR selbst signieren.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;sudo openSSL ca -policy policy_anything -in server.csr -out cerver.crt&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Auf die Frage "Sign the certificate? [y/n]" antwortet man mit "y". Dito auf "1 out of 1 certificate requests certified, commit?" mit "y". Nun sollte das Zertifikat erzeugt sein. Dies lässt sich prüfen.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;cd demoCA&lt;br /&gt;openssl x509 -noout -in cacert.pem -issuer -subject -dates&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Dieses Zertifikat sichert man auf den USB-Stick und sichert es gegen unbefugten Zugriff:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;cd demoCA&lt;br /&gt;cp cacert.pem /Volumes/USB\ DISK/OpenVPN&lt;br /&gt;sudo chmod 700 newcerts/&lt;br /&gt;sudo chmod 700 private/&lt;br /&gt;sudo chmod 700 cacert.pem&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Letztlich werden nur noch Parameter für die Verschlüsselung angelegt. Die Verschlüsselung wird über den Diffie-Hellman-Schlüsselaustausch (http://de.wikipedia.org/wiki/Diffie-Hellman-Schlüsselaustausch) realisiert. Darum muss die Datei dh2048.pem erzeugt werden:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;cd ..&lt;br /&gt;sudo openssl dhparam -out dh2048.pem 2048&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Da dieses Tool meldet "This is going to take a long time", ist nun Zeit für eine Pause... puh!&lt;br /&gt;&lt;br /&gt;Nun kann man für einzelne Client-Zertifikate erzeugen. Folgend für ein iBook:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;sudo mkdir certs&lt;br /&gt;sudo openssl req -new -newkey rsa:2048 -out certs/iBook-crs.pem -keyout  private/iBook-key.pem -nodes&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Diese Client-Zertifikate muss man natürlich aus signieren:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;sudo openssl x509 -req -in certs/iBook-crs.pem -out certs/iBook-cert.pem -CA demoCA/cacert.pem -CAkey demoCA/private/cakey.pem -CAserial demoCA/serial -days 9999&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Die Server-Zertifikate kopiert man nun in eine Verzeichnis, in dem ein Nutzer, der OpenVPN startet, lesen kann:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;sudo mkdir /etc/openVPN&lt;br /&gt;sudo cp server.crt /etc/openVPN&lt;br /&gt;sudo cp server.key /etc/openVPN&lt;br /&gt;sudo cp dh2048.pem  /etc/openVPN&lt;br /&gt;sudo cp ca.crt  /etc/openVPN&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Für den Mac-Client saugt man sich gleich schon Sandro Laubs "Tunnelblick" (&lt;a href="http://www.tunnelblick.net/"&gt;http://www.tunnelblick.net/&lt;/a&gt;) und kopiert es auf den USB-Stick. Die Client-Zertifikate kopiert man ebenfalls auf den USB-Stick, um sie auf einen Client (z.B. das oben schon angesprochene iBook) zu übertragen:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;cp ~/Desktop/Tunnelblick-versal-3.0b6.dmg /Volumes/USB\ DISK/&lt;br /&gt;sudo cp certs/iBook-cert.pem /Volumes/USB\ DISK/&lt;br /&gt;sudo cp private/iBook-key.pem /Volumes/USB\ DISK/&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Um OpenVPN nutzen zu können, benötigt man ein IP-Tunnel-Kernel-Extension. Einen Installer dafür findet man bei Mattias Nissler (&lt;a href="http://www-user.rhrk.uni-kl.de/~nissler/tuntap/"&gt;http://www-user.rhrk.uni-kl.de/~nissler/tuntap/&lt;/a&gt;). Diesen installiert man mit dem Installer. Ein Client, der Tunnelblick verwendet, braucht diesen Treiber nicht, da Tunnelblick alles mitbringt.&lt;br /&gt;&lt;br /&gt;Der OpenVPN-Server benötigt eine Konfigurationsdatei "server.conf". Diese Datei legt man  unter "/etc/openVPN/server.conf" ab. Eine Beispiel-Konfigurationsdatei kann man direkt bei OpenVPN herunterladen (http://openvpn.net/howto.html#examples). Als Besonderheit wird OpenVPN auf dem HTTPS-Port 443 gestartet. Damit kommt man auch durch eine restriktive Firewall auf den Server. Des weiteren müssen unsere Keys und CAs in diese Konfigurationsdatei eingetragen werden. Da MacOS-X ein Unix-Betriebssystem ist, existiert dort der User und die Gruppe "nobody", unter dessen Account OpenVPN laufen soll. Dazu müssen die entsprechenden Stellen in der Konfigurationsdatei gefunden und geändert werden:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;cipher AES-256-CBC&lt;br /&gt;&lt;br /&gt;dev tun&lt;br /&gt;&lt;br /&gt;proto udp&lt;br /&gt;&lt;br /&gt;port 443&lt;br /&gt;&lt;br /&gt;ca /etc/openVPN/ca.crt&lt;br /&gt;cert /etc/openVPN/server.crt&lt;br /&gt;key /etc/openVPN/server.key  # This file should be kept secret&lt;br /&gt;&lt;br /&gt;dh /etc/openVPN/dh2048.pem&lt;br /&gt;&lt;br /&gt;push "route 100.8.0.1 255.255.255.0"&lt;br /&gt;&lt;br /&gt;user nobody&lt;br /&gt;group nobody&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Die Werte &lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;cipher AES-256-CBC&lt;br /&gt;&lt;br /&gt;dev tun&lt;br /&gt;&lt;br /&gt;proto udp&lt;br /&gt;&lt;br /&gt;port 443&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;sollte man sich notieren, da man diese auf dem Client genauso konfigurieren muss. Evtl. kann man gleich die Server-Konfiguration als Referenz auf dem USB-Stick ablegen.&lt;br /&gt;&lt;br /&gt;Nun kann man testweise den OpenVPN-Server starten:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;sudo openvpn /etc/openVPN/server.conf&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Der Server sollte sich, wenn alles richtig konfiguriert ist, wie folgt melden:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;"Initialization Sequence Completed"&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt; &lt;br /&gt;&lt;br /&gt;Damit das Routing richtig funktioniert, muss man unter MacOS-X noch die Datei "/etc/hostconfig" bearbeiten:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;sudo vi /etc/hostconfig&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Dort fügt man einen Eintrag hinzu und startet den Rechner neu:&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;IPFORWARDING=YES&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Der Name des eigenen Servers sollte über das Internet auflösbar sein. Also sollte man auf dem Server DynDNS ö.ä. verwenden. DynDNS lässt sich in den meisten DSL-Routern einstellen. Bitte dafür einfach mal auf der Konfigurations-Oberfäche des eigenen Routers herumspielen, bis es funktioniert. Außerdem muss der HTTPS-Port 443 auf den eigenen Rechner geforwardet werden. Auch das muss in der Router-Konfiguratione eingerichtet werden. Der Menüpunkt dafür heißt meist Virtueller Server o.ä.. Schließlich muss der HTTPS-Port noch in der MacOS-X-Firewall freigeschaltet werden.&lt;br /&gt;&lt;br /&gt;OpenVPN lässt sich z.B. mit Lingon als Autostart-Item einrichten. Alternativ lässt sich auch ein Startup-Item unter "/Library/StartupItems/openvpn" anlegen und ein Start-Script dort erstellen:&lt;br /&gt;&lt;br /&gt;openvpn:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;##&lt;br /&gt;# OpenVPN-Server&lt;br /&gt;##&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;. /etc/rc.common&lt;br /&gt;&lt;br /&gt;StartService()&lt;br /&gt;{&lt;br /&gt;                ConsoleMessage "Starting OpenVPN-Server"&lt;br /&gt;                /usr/local/sbin/openvpn --daemon --cd /etc/openVPN \&lt;br /&gt;                        --config /etc/openVPN/server.conf \&lt;br /&gt;                        --writepid /var/run/openvpn.pid&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;StopService()&lt;br /&gt;{&lt;br /&gt;        pid=$(GetPID openvpn)   &lt;br /&gt;        if [ $? = 0 ]; then&lt;br /&gt;                ConsoleMessage "Stopping OpenVPN-Server"&lt;br /&gt;                kill -TERM "${pid}"&lt;br /&gt;        fi&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;RestartService () { StopService; StartService; }&lt;br /&gt;&lt;br /&gt;RunService "$1"&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;StartupParameters.plist:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;plist version="1.0"&amp;gt;&lt;br /&gt;&amp;lt;dict&amp;gt;&lt;br /&gt;        &amp;lt;key&amp;gt;Description&amp;lt;/key&amp;gt;&lt;br /&gt;        &amp;lt;string&amp;gt;openvpn&amp;lt;/string&amp;gt;&lt;br /&gt;        &amp;lt;key&amp;gt;Provides&amp;lt;/key&amp;gt;&lt;br /&gt;        &amp;lt;array&amp;gt;&lt;br /&gt;                &amp;lt;string&amp;gt;openvpn&amp;lt;/string&amp;gt;&lt;br /&gt;        &amp;lt;/array&amp;gt;&lt;br /&gt;        &amp;lt;key&amp;gt;Requires&amp;lt;/key&amp;gt;&lt;br /&gt;        &amp;lt;array&amp;gt;&lt;br /&gt;                &amp;lt;string&amp;gt;Network Configuration&amp;lt;/string&amp;gt;&lt;br /&gt;                &amp;lt;string&amp;gt;tun&amp;lt;/string&amp;gt;&lt;br /&gt;        &amp;lt;/array&amp;gt;&lt;br /&gt;        &amp;lt;key&amp;gt;Uses&amp;lt;/key&amp;gt;&lt;br /&gt;        &amp;lt;array&amp;gt;&lt;br /&gt;                &amp;lt;string&amp;gt;IPServices&amp;lt;/string&amp;gt;&lt;br /&gt;        &amp;lt;/array&amp;gt;&lt;br /&gt;&amp;lt;/dict&amp;gt;&lt;br /&gt;&amp;lt;/plist&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Damit ist der OpenVPN-Server eingerichtet. Im zweiten Teil dieses HOWTOs (&lt;a href="http://simonox.blogspot.com/2007/11/howto-openvpn-unter-apple-macos-x-als.html"&gt;http://simonox.blogspot.com/2007/11/howto-openvpn-unter-apple-macos-x-als.html&lt;/a&gt;)wird der Client mit dem Server verbunden.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-488619547167320251?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/488619547167320251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/488619547167320251'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2007/11/howto-openvpn-unter-apple-macos-x.html' title='HOWTO OpenVPN unter Apple MacOS-X'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-7800846111758279203</id><published>2007-10-15T19:09:00.001+02:00</published><updated>2007-10-15T19:09:55.943+02:00</updated><title type='text'>Blog Action Day</title><content type='html'>&lt;a href="http://de.wikipedia.org/wiki/Umweltschutz"&gt;Umweltschutz&lt;/a&gt; ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-7800846111758279203?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/7800846111758279203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/7800846111758279203'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2007/10/blog-action-day_15.html' title='Blog Action Day'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-439707222706893941</id><published>2007-10-04T00:00:00.000+02:00</published><updated>2007-10-04T00:01:07.229+02:00</updated><title type='text'>Blog Action Day</title><content type='html'>&lt;a href="http://www.free-burma.org/"&gt;&lt;img src="http://freeburma.s3.amazonaws.com/freeburma.gif" alt="Banner" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-439707222706893941?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/439707222706893941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/439707222706893941'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2007/10/blog-action-day.html' title='Blog Action Day'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-6902054460622431837</id><published>2007-09-17T10:31:00.001+02:00</published><updated>2007-09-17T10:31:57.756+02:00</updated><title type='text'>Frattinizer.js auf Spreeblick</title><content type='html'>&lt;blockquote&gt;&lt;br /&gt;Der für Sicherheit, Freiheit und Recht zuständige EU-Kommissar Franco Frattini schlägt vor, Wörter wie Bombe, Töten, Genozid oder Terrorismus aus dem Internet zu verbannen. Damit will er verhindern, dass Terroristen Bombenbauanleitungen aus dem Internet herunterladen. Eine Einschränkung der Meinungsfreiheit sieht der Kommissar darin nicht - wer „Bombe“ tippt, will wohl auch Bomben bauen. &lt;br /&gt;&lt;br /&gt;Mehr: &lt;a href="http://www.spreeblick.com/2007/09/15/bombenidee/"&gt;http://www.spreeblick.com/2007/09/15/bombenidee/&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-6902054460622431837?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/6902054460622431837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/6902054460622431837'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2007/09/frattinizerjs-auf-spreeblick.html' title='Frattinizer.js auf Spreeblick'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-4212236779360985039</id><published>2007-09-06T14:46:00.000+02:00</published><updated>2007-11-10T23:33:49.828+01:00</updated><title type='text'>Blog Action Day</title><content type='html'>Am 15. Oktoper ist Blog Action Day: &lt;a href="http://blogactionday.org"&gt;http://blogactionday.org&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-4212236779360985039?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/4212236779360985039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/4212236779360985039'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2007/09/blog-action-day.html' title='Blog Action Day'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-1710466711306066818</id><published>2007-08-15T22:18:00.000+02:00</published><updated>2007-08-15T22:42:46.785+02:00</updated><title type='text'>Mit dem Mac-Adressbuch auf GMail-Adressen zugreifen</title><content type='html'>Die Installation von GCalDaemon habe ich bereits im Post http://simonox.blogspot.com/2007/08/ical-mit-google-ber-das-opensource-tool.html beschrieben. Bevor man die folgenden Schritte unternehmen kann, muss man vorher diese Installation durchgeführt haben.&lt;br /&gt;&lt;br /&gt;Nun ist der nächste Schritt mit dem Mac-Adressbuch auf die in GMail gespeicherten Kontakte zuzugreifen.&lt;br /&gt;&lt;br /&gt;Dazu bearbeite ich wieder im conf-Verzeichnis von GCalDaemon die Konfigurationsdatei:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;cd /Applications/GCALDaemon/conf&lt;br /&gt;vi gcal-daemon.cfg&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Folgende Properties passe ich dazu an, wobei spamme@gmail.com durch die eigene GMail-Adresse und das Passwort durch das eigene generierte Passwort zu ersetzen ist, das sich bereits in dieser Datei an einer anderen Stelle befinden sollte:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;# Enable LDAP server&lt;br /&gt;ldap.enabled=true&lt;br /&gt;&lt;br /&gt;# Port of the LDAP server (default is "9080")&lt;br /&gt;ldap.port=9080&lt;br /&gt;&lt;br /&gt;# Gmail user (your full email address)&lt;br /&gt;ldap.google.username=spamme@gmail.com&lt;br /&gt;&lt;br /&gt;# Gmail password (use password encoder!)&lt;br /&gt;ldap.google.password=XXXXXXXXXXXXXXXXXXX&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Über Lingon (oder die Aktivitäts-Anzeige, der Prozess heißt "java") stoppe ich den bereits gestarteten GCalDaemon und rufe ihn testweise wieder über die Kommandozeile auf:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;cd /Applications/GCALDaemon/bin&lt;br /&gt;./standalone-start.sh &lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;GCalDaemon sollte sich wie folgt melden:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;INFO  | GCALDaemon V1.0 beta 13e starting...&lt;br /&gt;INFO  | RSS/ATOM feed converter enabled.&lt;br /&gt;INFO  | Local time zone is Zentraleurop?ische Zeit.&lt;br /&gt;INFO  | HTTP server starting on port 9090...&lt;br /&gt;INFO  | HTTP server started successfully.&lt;br /&gt;INFO  | Start listening file /Users/spamme/Library/Application Support/iCal/Sources/770D9C33-FD94-41A1-8257-CF84AB7313F7.calendar/corestorage.ics...&lt;br /&gt;INFO  | File listener started successfully.&lt;br /&gt;INFO  | Offline file synchronization enabled.&lt;br /&gt;INFO  | LDAP server starting on port 9080...&lt;br /&gt;INFO  | LDAP server started successfully.&lt;br /&gt;INFO  | Gmail notifier disabled.&lt;br /&gt;INFO  | Sendmail service disabled.&lt;br /&gt;INFO  | Mail terminal disabled.&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Neu ist die Zeile, dass ein LDAP-Server auf dem Port 9080 gestartet wurde.&lt;br /&gt;&lt;br /&gt;Nun ist es Zeit, das Adressbuch zu öffnen:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;open /Applications/Address\ Book.app&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Unter Adressbuch -&gt; Einstellungen -&gt; LDAP kann man nun ein neues LDAP-Verzeichnis hinzufügen (vorher ein Backup des bereits existierenden Adressbuch erstellen, obwohl dem Adressbuch eigentlich nichts passieren sollte!).&lt;br /&gt;&lt;br /&gt;Als Name trage ich "GCalDaemon" ein, unter Server "localhost", unter Port "9080". &lt;br /&gt;&lt;br /&gt;Nun kann man das GMail-Adressbuch auch mit dem Mac-Adressbuch durchsuchen und per Mac-Mail auch Adressen aus dem GMail-Adressbuch verwenden.&lt;br /&gt;&lt;br /&gt;Den GCalDaemon stoppe ich nun wieder (Ctrl+C) und aktiviere ihn mit Lingon erneut.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-1710466711306066818?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/1710466711306066818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/1710466711306066818'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2007/08/mit-dem-mac-adressbuch-auf-gmail.html' title='Mit dem Mac-Adressbuch auf GMail-Adressen zugreifen'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-4022174741761565435</id><published>2007-08-15T20:24:00.000+02:00</published><updated>2007-08-15T23:07:04.332+02:00</updated><title type='text'>iCal mit Google über das OpenSource-Tool GCalDaemon synchronisieren</title><content type='html'>GCalDaemon ist eine Anwendung um iCal-kompatible Kalenderprogramme (z.B. iCal auf MacOS) mit dem Google Calendar zu synchronisieren. &lt;br /&gt;&lt;br /&gt;Die Software gibt es für Linux, MacOS und Windows. Im folgenden möchte ich nur auf die Installation unter MacOS eingehen.&lt;br /&gt;&lt;br /&gt;Wichtig ist, dass bei der unten beschrieben Installation ein MacOS-Kalender einen Google-Kalender zunächst überschreibt. In Goolge Calendar kann man mehrere Kalender einrichten. Darum sollte man in Goolge Calender zunächst ein SyncCalendar eingerichtet werden, der dann mit einem SyncCalendar auf MacOS-Seite synchronisiert werden kann. Sonst verliert man all seine Termin (ich fand dies beim Rumexperimentieren mehr als ärgerlich). &lt;br /&gt;&lt;br /&gt;Nach der Installation kann man beide Kalender verwenden. Diese synchronisieren sich dann gegenseitig.&lt;br /&gt;&lt;br /&gt;Den GCalDemon lädt man unter http://gcaldaemon.sourceforge.net/ herunter und entpackt ihn lokal auf den Desktop. Dauerhaft legt man ihn auf dem eigenen Rechner am besten im Anwendungsordner '/Applications' ab. Der eigene Nutzername wird hier mit "SpamMe" angegeben. Statt "SpamMe" ist natürlich der eigene Benutzerkurzname einzutragen:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;cp -r /Users/SpamMe/Desktop/gcaldaemon-linux-1.0-beta13\ Folder/GCALDaemon /Applications&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Nun sollte unter /Applications der Demon liegen. Dies lässt sich einfach überprüfen: &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;ls /Applications/GCALDaemon/&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Nun wechselt man in dieses Verzeichnis und überprüft zuerst den Passwort-Encoder:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;cd /Applications/GCALDaemon/bin&lt;br /&gt;./password-encoder.sh&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ein Input-Prompt fragt nun nach dem Google-Passwort, dass man eingeben sollte:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Original password: XXXXXXX&lt;br /&gt;Encoded  password: XXXXXXXXXXXXXXX&lt;br /&gt;&lt;br /&gt;Sample configuration options for GCALDaemon:&lt;br /&gt;&lt;br /&gt;file.google.password=XXXXXXXXXXXXXXX&lt;br /&gt;ldap.google.password=XXXXXXXXXXXXXXX&lt;br /&gt;&lt;br /&gt;notifier.google.password=XXXXXXXXXXXXXXX&lt;br /&gt;sendmail.google.password=XXXXXXXXXXXXXXX&lt;br /&gt;mailterm.google.password=XXXXXXXXXXXXXXX&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Das generierte Passwort sollte man sich - z.B. über die Zwischenablage - merken!&lt;br /&gt;&lt;br /&gt;Unter MacOS verwende ich iCal als Kalender-Anwendung. Also wechsele ich nun in den iCal-Ordner,&lt;br /&gt;starte iCal und erstelle dort einen neuen Kalender "GCalDaemon" oder "SyncCalendar":&lt;br /&gt;&lt;code&gt;&lt;br /&gt;open  Library/Application\ Support/iCal/Sources/&lt;br /&gt;open -a iCal&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Der Backslash ist auf einer Apple-Tastatur übrigens auf Shift+Alt+7 ;-)&lt;br /&gt;&lt;br /&gt;Den neu erstellen Kalender kann ich am Datum erkennen.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;ls -Sc&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;In meinem Fall ist dies der Kalender mit dem kryptischen Dateinamen 770D9C33-FD94-41A1-8257-CF84AB7313F7.calendar.&lt;br /&gt;&lt;br /&gt;Also wechsele ich ich das Verzeichnis des neuen Kalenders, um mich zu versichern, dass dies auch wirklich der neue Kalender ist:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;cd  770D9C33-FD94-41A1-8257-CF84AB7313F7.calendar&lt;br /&gt;less Info.plist &lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;In dieser XML-Datei kann ich sehen, dass dies wirklich der neu erstellte Kalender ist:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;plist version="1.0"&amp;gt;&lt;br /&gt;&amp;lt;dict&amp;gt;&lt;br /&gt;        &amp;lt;key&amp;gt;Key&amp;lt;/key&amp;gt;&lt;br /&gt;        &amp;lt;string&amp;gt;770D9C33-FD94-41A1-8257-CF84AB7313F7&amp;lt;/string&amp;gt;&lt;br /&gt;        &amp;lt;key&amp;gt;Title&amp;lt;/key&amp;gt;&lt;br /&gt;        &amp;lt;string&amp;gt;GCalDaemon&amp;lt;/string&amp;gt;&lt;br /&gt;        &amp;lt;key&amp;gt;Type&amp;lt;/key&amp;gt;&lt;br /&gt;        &amp;lt;string&gt;com.apple.ical.sources.naivereadwrite&amp;lt;/string&amp;gt;&lt;br /&gt;&amp;lt;/dict&amp;gt;&lt;br /&gt;&amp;lt;/plist&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;GCalDaemon erwartet, dass unter dem conf-Verzeichnis Einstellungen vorgenommen werden. Eine dieser Einstellungen ist, dass man ein - wenn auch verschlüsseltes - Passwort einträgt. Dies ist fast schon ein Bug der Anwendung. Eine solche Information gehört nicht in das für jeden lesbare Application-Verzeichnis. Als Workaround schlage ich folgendes vor: ich verschiebe  den conf-Ordner in mein Home-Verzeichnis und erstelle anschließend einen symbolischen Link auf mein Home-Verzeichnis im GCalDaemon-Verzeichnis:&lt;/b&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;cd /Applications/GCALDaemon&lt;br /&gt;mv conf ~/.GCalDaemon&lt;br /&gt;ln -s ~/.GCalDaemon conf&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Auch das Log-Verzeichnis gehört eigentlich nicht in den Applikations-Ordner. Also verschiebe ich dieses Verzeichnis mit dem gleichen Workaround:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;cd /Applications/GCALDaemon&lt;br /&gt;sudo mv log /var/log/GCalDaemon&lt;br /&gt;ln -s /var/log/GCalDaemon log&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ob die beiden symbolischen Links erstellt wurden, kann man einfach überprüfen:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;cd /Applications/GCALDaemon&lt;br /&gt;ls -l&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Den oben ermittelten Kalender trage ich nun in die Konfigurations-Datei des GCalDaemons ein:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;cd /Applications/GCALDaemon/conf&lt;br /&gt;vi gcal-daemon.cfg&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Unter file.ical.path trage ich die neu erstellte Kalender-Datei corestorage.ics im neu erstellten Kalender 770D9C33-7-CF84AB7313F7.calendar ein. Wichtig ist hier die komplette Pfadangame. Kalender-Name und Nutzerkurzname sind natürlich anzupassen:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;file.ical.path=/Users/SpamMe/Library/Application Support/iCal/Sources/770D9C33-7-CF84AB7313F7.calendar/corestorage.ics&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Das vorhin erzeugte Passwort (XXXXXXXXXXXXX) trage ich unter file.google.password ein:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;file.google.password=XXXXXXXXXXXXXXXXXX&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Meine GMail-Adresse trage ich file.google.username unter ein&lt;br /&gt;&lt;code&gt;&lt;br /&gt;file.google.username=spamme@gmail.com&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Im Goolge-Kalender sollte man spätestens jetzt wie oben bereits beschrieben einen NEUEN Kalender anlegen ("z.B. SyncCalender"), da der GCalDaemon sonst die bereits vorhandenen Termine überschreibt!&lt;br /&gt;&lt;br /&gt;Unter https://www.google.com/calendar/render kann man eine unter Einstellungen -&gt; Kalender -&gt; Privatadresse über das Kontextmenü auf das iCal-Icon eine iCal-URL in die Zwischenablage kopieren. Diese URL &lt;br /&gt;http://www.google.com/calendar/ical/spamme%40gmail.com/private-XXXXXXXXXXXXXXXXXXX/basic.ics trage ich unter file.private.ical.url ein:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;file.private.ical.url=/calendar/ical/spamme%40gmail.com/private-XXXXXXXXXXXXXXXXXXX/basic.ics&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Die Zeile file.enabled setze ich auf true:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;file.enabled=true&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Nun kann ich den GCalDaemon starten:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;cd ../bin&lt;br /&gt;./standalone-start.sh&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Der GCalDaemon sollte erfolgreich starten:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;INFO  | GCALDaemon V1.0 beta 13e starting...&lt;br /&gt;INFO  | RSS/ATOM feed converter enabled.&lt;br /&gt;INFO  | Local time zone is Zentraleurop?ische Zeit.&lt;br /&gt;INFO  | HTTP server starting on port 9090...&lt;br /&gt;INFO  | HTTP server started successfully.&lt;br /&gt;INFO  | Start listening file /Users/SpamMe/Library/Application Support/iCal/Sources/770D9C33-FD94-41A1-8257-CF84AB7313F7.calendar/corestorage.ics...&lt;br /&gt;INFO  | File listener started successfully.&lt;br /&gt;INFO  | Offline file synchronization enabled.&lt;br /&gt;INFO  | LDAP server disabled.&lt;br /&gt;INFO  | Gmail notifier disabled.&lt;br /&gt;INFO  | Sendmail service disabled.&lt;br /&gt;INFO  | Mail terminal disabled.&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;In iCal erstelle ich nun einen Testeintrag (z.B. morgen) und warte ab, ob dieser nach einiger Zeit im Google-Kalender erscheint und umgekehrt.&lt;br /&gt;&lt;br /&gt;Wer nicht warten möchte kann eine Synchronisation auch sofort testen:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;cd /Applications/GCALDaemon/bin&lt;br /&gt;./sync-now.sh &lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Wenn der in GCal erstellte Termin nun im Google-Kalender erscheint, kann man mit der Anwendung "Lingon" (http://lingon.sourceforge.net/) den GCalDaemon als Startup-Item eintragen.&lt;br /&gt;&lt;br /&gt;Ich starte Lingon, wähle "Assistant" in der Button-Leiste, wähle "Run a job at startup", vergebe als Label "GCalDaemon", aktiviere, dass der Job nur startet, wenn ich einlogt bin und trage als Job "/Applications/GCALDaemon/bin/standalone-start.sh" ein.&lt;br /&gt;&lt;br /&gt;Tipp: Da es sich bei GCalDaemon um eine Java-Anwendung handelt, findet man GCalDaemon in der Aktivitäts-Anzeige NICHT unter GCalDaemon oder standalone-start.sh sondern unter "java".&lt;br /&gt;&lt;br /&gt;Nun wird mein Google Calendar regelmäßig mit meinem iCal-Kalender synchronisiert.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-4022174741761565435?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/4022174741761565435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/4022174741761565435'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2007/08/ical-mit-google-ber-das-opensource-tool.html' title='iCal mit Google über das OpenSource-Tool GCalDaemon synchronisieren'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-7588456407441411725</id><published>2007-07-29T20:22:00.000+02:00</published><updated>2007-07-29T20:25:33.320+02:00</updated><title type='text'>Web 2.0 U-Bahn-Plan</title><content type='html'>Ich mag Informationsgrafiken, besonders U-Bahn-Pläne. Gleichgesinnte aus Japan haben einen Web 2.0 U-Bahn-Plan erstellt. Wirklich sehr gelungen: &lt;a href="http://www.informationarchitects.jp/ia-trendmap-2007v2#more-403"&gt;http://www.informationarchitects.jp/ia-trendmap-2007v2#more-403&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;img src="http://www.informationarchitects.jp/slash/google_trend_2007.gif"&gt;http://www.informationarchitects.jp/slash/google_trend_2007.gif&lt;/img&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-7588456407441411725?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/7588456407441411725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/7588456407441411725'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2007/07/web-20-u-bahn-plan.html' title='Web 2.0 U-Bahn-Plan'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-6845843993286017720</id><published>2007-07-29T19:57:00.000+02:00</published><updated>2007-07-29T20:00:15.138+02:00</updated><title type='text'></title><content type='html'>Ich möchte das Blog an dieser Stelle nutzen, um einen Text weiterzuleiten:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Kick the Corruption Out of the BBC!&lt;br /&gt;&lt;br /&gt;Today the BBC made it official—they have been corrupted by Microsoft. With today's launch of the iPlayer, the BBC Trust has failed in its most basic of duties and handed over to Microsoft sole control of the on-line distribution of BBC programming. From today, you will need to own a Microsoft operating system to view BBC programming on the web. And you must accept the Digital Restrictions Management (DRM) that the iPlayer imposes.&lt;br /&gt;&lt;br /&gt;Read the story about the corruption of the BBC: &lt;br /&gt;&lt;a href="http://defectivebydesign.org/sites/nodrm.civicactions.net/modules/civicrm/extern/url.php?q=266275&amp;u=346"&gt;http://defectivebydesign.org/sites/nodrm.civicactions.net/modules/civicrm/extern/url.php?q=266275&amp;u=346&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Digg this story! &lt;a href="http://defectivebydesign.org/sites/nodrm.civicactions.net/modules/civicrm/extern/url.php?q=266275&amp;u=347"&gt;http://defectivebydesign.org/sites/nodrm.civicactions.net/modules/civicrm/extern/url.php?q=266275&amp;u=347&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Join us in London on August 14th as we continue the fight against DRM and kick the corruption out of the BBC. Sign up now! -- August 14th, London at the BBC Television Centre.&lt;br /&gt;&lt;br /&gt;In solidarity,&lt;br /&gt;Josh, John, Peter and the DRM Elimination Crew.&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-6845843993286017720?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/6845843993286017720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/6845843993286017720'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2007/07/ich-mchte-das-blog-dieser-stelle-nutzen.html' title=''/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-3828742002056434527</id><published>2007-07-26T21:32:00.000+02:00</published><updated>2007-07-26T21:41:52.018+02:00</updated><title type='text'>iSync</title><content type='html'>Mit dem Update auf das neue Apple iSync Version 2.4 (501.2) hat iSync aufgehört, sich mit meinem K750i zu synchronisieren. Dabei galten Sony-Mobiltelefone bisher als "Mac"-Handies.&lt;br /&gt;&lt;br /&gt;Im Apfeltalk-Forum stieß ich auf folgenden Tipp:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Im Finder auf das Programm iSync einen Rechts-Click (ctrl + Click) machen und auf Paketinhalt zeigen gehen. Dann durch diesen Pfad klicken:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;/Contents/PlugIns/ApplePhoneConduit.syncdevice/Contents/PlugIns/PhoneModelsSync.phoneplugin/Contents/Resources&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;und dann die Datei MetaClasses.plist per Doppelklick öffnen. Dann links neben dem Root auf den Pfeil klicken, dann den Eintrag com.sony-ericsson.K700 suchen und den Pfeil links danben wieder anklicken. Dann unter InheritsForm den Eintrag auf "family.com.sony-ericsson.legacy" ändern (Ohne (!) die Anführungsstriche). Dann das über File Save speichern und dann schließen. Jetzt iSync starten und der Sync klappt wieder&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Danach ließen sich zwar Termine nicht mehr synchronisieren. Allerdings hat das Synchronisieren von Kontakten wieder funktioniert.... scheinbar.&lt;br /&gt;&lt;br /&gt;Anschließend waren nämlich alle Adressen weg. Nur noch die Telefonnummern waren vorhanden. Allerdings waren die Adressen noch auf einem iPod gesichert.&lt;br /&gt;&lt;br /&gt;Also konnte ich den iPod an einen anderen Mac anschließen (automatische Synchronisation mit iTunes etc. war damit disabled).&lt;br /&gt;&lt;br /&gt;Im Festplatten-Modus konnte ich die Datei iSync.vcf im Ordner “contacts” auf einen USB-Stick sichern.&lt;br /&gt;&lt;br /&gt;Im Adressbuch meines Macs konnte ich die Datei dann importieren.&lt;br /&gt;&lt;br /&gt;Seitdem funktioniert nicht nur das Synchronisieren von Kontakten wieder, auch der Kalender lässt sich synchronisieren, wenn man die Option "Ereignisse ignorieren, älter als 'Heute'" auswählt.&lt;br /&gt;&lt;br /&gt;Ein weiters Problem: iTuneMyWalkman bricht manchmal die Synchronsiation richtig großer Podcasts (Videos wie der Elektrische Reporter oder den Podcast des FSK Sunday Service) ab und man hat Dateien von 0 Byte Größe auf der SD Card, die sich natürlich nicht abspielen lassen. Das Problem werde ich aber heute nicht mehr fixen ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-3828742002056434527?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/3828742002056434527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/3828742002056434527'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2007/07/isync.html' title='iSync'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-5651453309006075045</id><published>2007-03-16T08:10:00.000+01:00</published><updated>2007-03-16T08:12:52.328+01:00</updated><title type='text'></title><content type='html'>&lt;h1&gt;An open letter to Steve Jobs&lt;/h1&gt;&lt;br /&gt;&lt;a href="http://www.defectivebydesign.org/actions/open_letter/steve_jobs"&gt;&lt;br /&gt;&lt;img src="http://www.defectivebydesign.org/sites/nodrm.civicactions.net/files/images/steve_jester_jobs_200px.gif" &gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-5651453309006075045?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/5651453309006075045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/5651453309006075045'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2007/03/open-letter-to-steve-jobs.html' title=''/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-7396235866059559516</id><published>2007-03-14T21:56:00.001+01:00</published><updated>2007-03-14T21:56:19.321+01:00</updated><title type='text'>Layout dieses Blogs - E-Mail-Bloging</title><content type='html'>-----BEGIN PGP SIGNED MESSAGE-----&lt;br&gt;Hash: SHA1&lt;p&gt;Wer sich &amp;#252;ber das Layout des letzten Postings wundert:&lt;p&gt;Ich bin seit einiger Zeit hinter einer ziemlich fiesen Firewall, die  &lt;br&gt;ich auch - aus beruflichen Gr&amp;#252;nden - nicht hacken m&amp;#246;chte.  Au&amp;#223;erdem  &lt;br&gt;hat Google meinen Blogger-Account migriert. Im Moment kenne ich noch  &lt;br&gt;kein Plugin, mit dem man auf dem migrierten Blogger-Acount blogen  &lt;br&gt;k&amp;#246;nnte. Was spricht der &amp;#252;berhaupt?&lt;p&gt;Darum gehe ich jetzt dazu &amp;#252;ber, per E-Mail zu blogen. E-Mail finde  &lt;br&gt;ich &amp;#252;brigens immer besser. Z.B. f&amp;#252;lle ich auch meine BackPack-To-Do- &lt;br&gt;Liste nur noch per E-Mail. Einfach eine Mail mit dem Betreff &amp;quot;to-do&amp;quot;  &lt;br&gt;an meine Backpackit-Adresse schicken und der Content ist in meiner To- &lt;br&gt;Do-Liste. Perfekt und schn&amp;#246;rkellos :-)&lt;p&gt;-----BEGIN PGP SIGNATURE-----&lt;br&gt;Version: GnuPG v1.4.1 (Darwin)&lt;p&gt;iD8DBQFF+GFkZf4PRw/GKLgRArsyAJ9CRXVqnM3rsFNIY7SLpYjcRFuprACfYqGr&lt;br&gt;6t7BvDiKZdljZ1DrtkrgpFM=&lt;br&gt;=8G8h&lt;br&gt;-----END PGP SIGNATURE-----&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-7396235866059559516?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/7396235866059559516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/7396235866059559516'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2007/03/layout-dieses-blogs-e-mail-bloging.html' title='Layout dieses Blogs - E-Mail-Bloging'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-3351108596645670952</id><published>2007-03-14T21:51:00.001+01:00</published><updated>2007-03-14T21:51:28.517+01:00</updated><title type='text'>Audium -&gt; Mabber -&gt; Twitter</title><content type='html'>Ich habe heute Audium, Twitter und Mabber ausprobiert.&lt;p&gt;Mabber ist ein Jabber-Client, der au&amp;#223;erdem noch f&amp;#252;r weitere Protokolle&lt;br&gt;ein Gatway anbietet. So kann man &amp;#252;ber Mabber auch an ICQ-Kontakte&lt;br&gt;senden. Au&amp;#223;erdem gibt&amp;#39;s f&amp;#252;r Mabber einen JavaClient f&amp;#252;rs Mobile. So kann&lt;br&gt;man statt &amp;#252;ber SMS auch &amp;#252;ber IM kommunizieren.&lt;p&gt;Twitter ist das Aequivalent zum wall-Befehl unter Linux. Man schickt  &lt;br&gt;eine&lt;br&gt;Message und auf der Wall erscheint, was man geschickt hat. Meistens&lt;br&gt;schickt man einfach, _was_ man gerade macht. Nicht besondern sinnvoll,&lt;br&gt;aber nett.&lt;p&gt;Allerdings kann man &amp;#252;ber Jabber an Twitter@twitter.com eine Message&lt;br&gt;senden. Das macht die Sache interessant.&lt;p&gt;Twitter hat zwar auch eine SMS-Funktion, diese funktioniert aber nur&lt;br&gt;&amp;#252;ber eine teuere, internationale Rufnummer.&lt;p&gt;Wenn man nun aber Twitter mit Mabber verkn&amp;#252;pft, dann kann man auch&lt;br&gt;g&amp;#252;nstig twittern :-)&lt;p&gt;Audium ein - zugegeben feiner - Multiprotokoll-IM-Client f&amp;#252;r MacOS.&lt;br&gt;Sieht gut aus und _funktioniert_.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-3351108596645670952?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/3351108596645670952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/3351108596645670952'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2007/03/audium-mabber-twitter.html' title='Audium -&gt; Mabber -&gt; Twitter'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-6523765868586050945</id><published>2006-12-31T16:24:00.001+01:00</published><updated>2006-12-31T16:24:41.916+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='23c3'/><title type='text'>Lawrence Lessig auf dem 23C3</title><content type='html'>&lt;embed style="width:400px; height:326px;" id="VideoPlayback" type="application/x-shockwave-flash" src="http://video.google.com/googleplayer.swf?docId=7661663613180520595&amp;hl=de" flashvars=""&gt; &lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-6523765868586050945?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/6523765868586050945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/6523765868586050945'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/12/lawrence-lessig-auf-dem-23c3.html' title='Lawrence Lessig auf dem 23C3'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-116610929062960157</id><published>2006-12-14T16:14:00.000+01:00</published><updated>2006-12-14T16:16:16.740+01:00</updated><title type='text'>So ist RSS nicht gemeint</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;Liebe Spex-Redaktion, &lt;br /&gt;&lt;br /&gt;es ist ja schön, dass Ihr einen RSS-Feed anbietet. Wenn der RSS-Feed die Nachrichten jedoch nur verstümelt rausgibt, dann bringt der rein gar nichts.&lt;br /&gt;&lt;br /&gt;Vielleicht wollt Ihr ja, dass jeder wirklich auch auf die Seite kommt, um dort die Werbebanner anzuklicken.Das ist durchaus Euer gutes Recht, aber so wie der RSS-Feed im Moment aussieht, ist er relativ nutzlos.spex.de &gt;&gt;&gt; NEWS&lt;/p&gt;&lt;p&gt;Read more at &lt;a href="http://www.spex.de/web/news_index.php"&gt;www.spex.de/web/news_in...&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-116610929062960157?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/116610929062960157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/116610929062960157'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/12/so-ist-rss-nicht-gemeint.html' title='So ist RSS nicht gemeint'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-116582249290269641</id><published>2006-12-11T08:34:00.000+01:00</published><updated>2006-12-11T09:43:16.626+01:00</updated><title type='text'>heise online - BIENE 2006: Barrierefreie Websites prämiert</title><content type='html'>&lt;div&gt;&lt;p&gt;Die &lt;a href="http://www.barmer.de/"&gt;BARMER&lt;/a&gt;-Site ist mit dem &lt;a href="www.biene-award.de/award"&gt;BIENE 2006-Award&lt;/a&gt; in Gold ausgezeichnet worden.&lt;/p&gt;&lt;p&gt;Read more at&lt;a href="http://www.heise.de/newsticker/meldung/82299"&gt;www.heise.de/newsticker...&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------^&lt;/sourcetext&gt;&lt;/parsererror&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-116582249290269641?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/116582249290269641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/116582249290269641'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/12/heise-online-biene-2006-barrierefreie.html' title='heise online - BIENE 2006: Barrierefreie Websites prämiert'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-116548217753591056</id><published>2006-12-07T10:02:00.000+01:00</published><updated>2006-12-07T10:02:57.616+01:00</updated><title type='text'>TV-Tipp für Freitag: 23</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;Read more at &lt;a href="http://www.schnitt.de/tvtip/artikel/23.shtml"&gt;www.schnitt.de/tvtip/ar...&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-116548217753591056?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/116548217753591056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/116548217753591056'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/12/tv-tipp-fr-freitag-23.html' title='TV-Tipp für Freitag: 23'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-116538781899587306</id><published>2006-12-06T07:50:00.000+01:00</published><updated>2006-12-06T07:50:19.313+01:00</updated><title type='text'>DarwiinRemote is released! (Hirolog)</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;Die Fernbedienung eine Wii mit 'nem Mac koppeln. Bin mal gespannt (noch habe ich keine Wii)&lt;/p&gt;&lt;p&gt;Read more at &lt;a href="http://blog.hiroaki.jp/2006/12/000433.html"&gt;blog.hiroaki.jp/2006/12...&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-116538781899587306?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/116538781899587306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/116538781899587306'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/12/darwiinremote-is-released-hirolog.html' title='DarwiinRemote is released! (Hirolog)'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-116495736131372907</id><published>2006-12-01T08:16:00.000+01:00</published><updated>2006-12-01T08:16:01.366+01:00</updated><title type='text'>Productive Talk Compilation: 8-episode podcast with GTD’s David Allen | 43 Folders</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;Sollte man evtl. mal reinhören.. obwohl seeehr lange.&lt;/p&gt;&lt;p&gt;Read more at &lt;a href="http://www.43folders.com/2006/11/28/productive-talk-comp/"&gt;www.43folders.com/2006/...&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-116495736131372907?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/116495736131372907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/116495736131372907'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/12/productive-talk-compilation-8-episode.html' title='Productive Talk Compilation: 8-episode podcast with GTD’s David Allen | 43 Folders'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-116488010953576933</id><published>2006-11-30T10:48:00.000+01:00</published><updated>2006-11-30T10:48:29.546+01:00</updated><title type='text'>praegnanz.de: Vermischtes aus aller Welt III</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;Das sagt ja einiges über die GEMA aus ;-)&lt;/p&gt;&lt;span&gt;Leider war Dr. Pappi von der GEMA bei den Hörfunkgesprächen nicht persönlich anwesend, sondern schickte einen Stellvertreter (dessen Name mir entfallen ist), mit dem ich mich in der Fragerunde nach dem Vortrag unbedingt noch verbal anlegen musste, wie ich das schon im Mai mit Pappi persönlich gemacht hatte. Dabei stellte sich heraus, dass der Ersatz-Pappi – ungelogen, ich habe Zeugen! – nicht wusste, was CreativeCommons sind. Da wurde mir einiges klar und ich hörte auf zu fragen.&lt;/span&gt;&lt;p&gt;Read more at &lt;a href="http://praegnanz.de/weblog/vermischtes-aus-aller-welt-iii"&gt;praegnanz.de/weblog/ver...&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-116488010953576933?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/116488010953576933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/116488010953576933'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/11/praegnanzde-vermischtes-aus-aller-welt.html' title='praegnanz.de: Vermischtes aus aller Welt III'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-116487975571916442</id><published>2006-11-30T10:42:00.000+01:00</published><updated>2006-11-30T10:42:36.236+01:00</updated><title type='text'>Extreme Hour vs. XP-Game</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;Hier sind zwei "Spiele" verlinkt, mit denen man XP-Projekte spielerisch erfahren kann. Unbedingt mal ausprobieren...&lt;/p&gt;&lt;p&gt;Read more at &lt;a href="http://www.frankwestphal.de/ExtremeHourvs.XP-Game.html"&gt;www.frankwestphal.de/Ex...&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-116487975571916442?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/116487975571916442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/116487975571916442'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/11/extreme-hour-vs-xp-game.html' title='Extreme Hour vs. XP-Game'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-116474628231277636</id><published>2006-11-28T21:38:00.000+01:00</published><updated>2006-11-28T21:38:02.316+01:00</updated><title type='text'>DhoniShow</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;Nette JavaScript / DOM-Bildergallerie. Unter CC-Lizenz (aber leider nicht (L)GPL... komisch... ist doch Software)&lt;/p&gt;&lt;p&gt;Read more at &lt;a href="http://dhonishow.de/"&gt;dhonishow.de/&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-116474628231277636?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/116474628231277636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/116474628231277636'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/11/dhonishow.html' title='DhoniShow'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-116474599521444335</id><published>2006-11-28T21:33:00.000+01:00</published><updated>2006-11-28T21:33:15.220+01:00</updated><title type='text'>Sundance Winner ‘The Corporation’ Released for Free on BitTorrent at Torrentfreak</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;Wow, ein Film, der selbst beim Sundance gewonnen hat, zum kostenlosen Download. Es geht voran :-)&lt;/p&gt;&lt;p&gt;Read more at &lt;a href="http://torrentfreak.com/sundance-winner-the-corporation-released-for-free-on-bittorrent/"&gt;torrentfreak.com/sundan...&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-116474599521444335?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/116474599521444335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/116474599521444335'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/11/sundance-winner-corporation-released.html' title='Sundance Winner ‘The Corporation’ Released for Free on BitTorrent at Torrentfreak'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-116474579741105018</id><published>2006-11-28T21:29:00.000+01:00</published><updated>2006-11-28T21:29:57.606+01:00</updated><title type='text'>Aurora - an iTunes and EyeTV Alarm Clock for Mac OS X</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;Nettes Programm. Verwandelt einen Mac in einen Radiowecker (inkl. Schlummer-Funktion auf der Leertaste und Einschlaffunktion). Das schönste ist, dass es den Mac aus dem Tiefschlaf wecken und ihn anschließend auch wieder einschlafen lassen kann. &lt;/p&gt;&lt;p&gt;Read more at &lt;a href="http://metaquark.de/aurora/"&gt;metaquark.de/aurora/&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-116474579741105018?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/116474579741105018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/116474579741105018'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/11/aurora-itunes-and-eyetv-alarm-clock.html' title='Aurora - an iTunes and EyeTV Alarm Clock for Mac OS X'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-116233439127214690</id><published>2006-10-31T23:39:00.000+01:00</published><updated>2006-10-31T23:39:51.343+01:00</updated><title type='text'></title><content type='html'>Mit Google-Docs kann man auch bloggen.&lt;br&gt;&lt;br&gt;Naja, so richtig gut gefällt mir das nicht. &lt;br&gt;&lt;br&gt;Ist wie all diese Wysiwyg-Editoren halt.&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-116233439127214690?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/116233439127214690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/116233439127214690'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/10/mit-google-docs-kann-man-auch-bloggen.html' title=''/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-116220868369176651</id><published>2006-10-30T12:44:00.000+01:00</published><updated>2006-10-30T12:44:43.753+01:00</updated><title type='text'>Weekend Project: Build your own graveyard - Lifehacker</title><content type='html'>&lt;div xmlns="http://purl.org/atom/ns#"&gt;      &lt;p&gt;Cool, ne nette Gartendekoration :)&lt;/p&gt;      &lt;p&gt;        Read more at        &lt;a href="http://www.lifehacker.com/software/clips/weekend-project-build-your-own-graveyard-210822.php"&gt;www.lifehacker.com/soft...&lt;/a&gt;      &lt;/p&gt;    &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-116220868369176651?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/116220868369176651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/116220868369176651'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/10/weekend-project-build-your-own.html' title='Weekend Project: Build your own graveyard - Lifehacker'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-116126174938779009</id><published>2006-10-19T14:42:00.000+02:00</published><updated>2006-10-19T14:42:29.966+02:00</updated><title type='text'>DEUTSCHER BUNDESTAG – Petitionsausschuss: E-Petitionen Petition einsehen/unterschreiben</title><content type='html'>&lt;div xmlns="http://purl.org/atom/ns#"&gt;      &lt;p&gt;Wahlmaschinen verbieten&lt;/p&gt;      Hier kann man beim schottischen Parlament für den Deutschen Bundestat eine Online-Petition unterschreiben.      &lt;p&gt;        Read more at        &lt;a href="http://itc.napier.ac.uk/e-Petition/bundestag/view_petition.asp?PetitionID=294"&gt;Petition Wahlmaschinen&lt;/a&gt;        &lt;a href="http://www.bundestag.de/ausschuesse/a02/onlinepet/server.html"&gt;Warum Schottland?&lt;/a&gt;      &lt;/p&gt;    &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-116126174938779009?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/116126174938779009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/116126174938779009'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/10/deutscher-bundestag-petitionsausschuss.html' title='DEUTSCHER BUNDESTAG – Petitionsausschuss: E-Petitionen Petition einsehen/unterschreiben'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-116039545955103195</id><published>2006-10-09T14:04:00.000+02:00</published><updated>2006-10-09T14:04:19.630+02:00</updated><title type='text'>Every Video Game</title><content type='html'>&lt;div xmlns="http://purl.org/atom/ns#"&gt;      &lt;p&gt;Wow, alte 8bit-Klassiker im Browser spielen :)&lt;/p&gt;      &lt;p&gt;        Read more at        &lt;a href="http://www.everyvideogame.com/"&gt;www.everyvideogame.com/&lt;/a&gt;      &lt;/p&gt;    &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-116039545955103195?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/116039545955103195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/116039545955103195'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/10/every-video-game.html' title='Every Video Game'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-115670408319093327</id><published>2006-08-27T20:41:00.000+02:00</published><updated>2006-08-27T20:41:23.483+02:00</updated><title type='text'></title><content type='html'>&lt;b&gt;Starmania&lt;/b&gt;&lt;br /&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://youtube.com/v/sD6dKvVFzog"&gt;&lt;/param&gt;&lt;embed src="http://youtube.com/v/sD6dKvVFzog" type="application/x-shockwave-flash" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br&gt;Death-Metal zu DSDSS.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-115670408319093327?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115670408319093327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115670408319093327'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/08/starmania-death-metal-zu-dsdss.html' title=''/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-115634704494234590</id><published>2006-08-23T17:30:00.000+02:00</published><updated>2006-08-23T17:30:45.046+02:00</updated><title type='text'>Angriff durch Dilettanten</title><content type='html'>&lt;div xmlns="http://purl.org/atom/ns#"&gt;      Aha, doch keine "zerfetzten" Züge:      &lt;span&gt;Aus den misslungenen Bahnanschlägen kann deshalb nicht geschlossen werden, dass Deutschland bereits ins Fadenkreuz des hoch professionellen Terrorismus nach dem Muster von Al Qaida geraten wäre. Vielmehr sieht – nach den derzeit bekannten Informationen – alles nach einem schlecht vorbereiteten Angriff durch Amateure aus. Auch dagegen muss sich der Staat wehren – aber bitte mit Augenmaß und ohne voreilige Panikmache.&lt;/span&gt;      &lt;p&gt;        Read more at        &lt;a href="http://www.tagesspiegel.de/meinung/archiv/23.08.2006/2728245.asp"&gt;www.tagesspiegel.de/mei...&lt;/a&gt;      &lt;/p&gt;    &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-115634704494234590?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115634704494234590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115634704494234590'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/08/angriff-durch-dilettanten.html' title='Angriff durch Dilettanten'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-115632531465329850</id><published>2006-08-23T11:28:00.000+02:00</published><updated>2006-08-23T11:30:35.630+02:00</updated><title type='text'>HamachiX Online Help</title><content type='html'>&lt;div xmlns="http://purl.org/atom/ns#"&gt;      &lt;p&gt;Hamachi ist ein VPN für arme. Wer jedoch scheut, OpenVPN selbst zu installieren (trotz der OSX-GUI Tunnelblick) kann es mal mit HamachiX ausprobieren.&lt;/p&gt;      Mit Hamachi kann man z.B. seine iTunes-Library über's Internet sharen (siehe &lt;a href="http://www.profit42.com/index.php/2006/05/15/share-itunes-music-over-the-internet-in-3-easy-steps/"&gt;share itunes music over the internet in 3 easy steps&lt;/a&gt;!)&lt;p&gt;        Read more at        &lt;a href="http://spaceants.net/hamachix/manual/index.html"&gt;spaceants.net/hamachix/...&lt;/a&gt;      &lt;/p&gt;    &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-115632531465329850?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115632531465329850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115632531465329850'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/08/hamachix-online-help.html' title='HamachiX Online Help'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-115588820193848788</id><published>2006-08-18T09:58:00.000+02:00</published><updated>2006-08-18T10:06:33.286+02:00</updated><title type='text'>Management vs. Entwickler</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;blockquote&gt;Brian Stevens, Technikchef bei Red Hat, bestätigte in einem Interview mit eWeek die Position, dass die Virtualisierungslösung noch nicht reif für den Einsatz im Unternehmen ist. Novell, seit Erscheinen von Suse Linux Enterprise Server (SLES) 10 Mitte Juli erster Anbieter eines Unternehmensprodukts mit integriertem Xen, handele unverantwortlich und riskiere, dass die Anwender schlechte Erfahrungen mit der Linux-Virtualisierung machten. Red Hat wisse, was Xen noch alles fehle; Novell sei es wichtiger gewesen, erster zu sein.&lt;br /&gt;&lt;br /&gt;Novell-CTO Jeff Jaffe widerprach prompt. Novell habe Xen ausgiebig getestet und sei fest davon überzeugt, dass die Software fertig sei. "Könnte es sein, dass es Red Hat peinlich ist, sechs Monate hinterherzuhinken?", fragte er auf der LinuxWorld Conference &amp;amp; Expo.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Read more: &lt;a href="http://www.heise.de/newsticker/meldung/76972"&gt;heise online - Linux-Virtualisierung mit Xen: Ja, nein, vielleicht&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Read more: &lt;a href="http://www.novell.com/linux/virtualization/"&gt;Novell Xen&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-115588820193848788?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115588820193848788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115588820193848788'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/08/management-vs-entwickler.html' title='Management vs. Entwickler'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-115574041442857840</id><published>2006-08-16T16:55:00.000+02:00</published><updated>2006-08-16T17:00:14.490+02:00</updated><title type='text'>Das ist gar nicht so weit weg von Hamburg</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;blockquote href="http://www.heise.de/tp/r4/artikel/23/23313/1.html"&gt;Im Seebad Heiligendamm wird im Juni 2007 das G8-Treffen über die Bühne gehen. Unterschiedliche Protestbündnisse breiten sich schon &lt;a href="http://gipfelsoli.org/"&gt;theoretisch&lt;/a&gt; und auch &lt;a href="http://www.camp06.org/"&gt;praktisch&lt;/a&gt; darauf vor.&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-115574041442857840?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115574041442857840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115574041442857840'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/08/das-ist-gar-nicht-so-weit-weg-von.html' title='Das ist gar nicht so weit weg von Hamburg'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-115571929701773581</id><published>2006-08-16T11:08:00.000+02:00</published><updated>2006-08-16T11:08:17.356+02:00</updated><title type='text'>Von World-of-Java gibt's jetzt auch eine "Personal Edition"</title><content type='html'>&lt;div xmlns="http://purl.org/atom/ns#"&gt;      &lt;p&gt;WOJ personal edition&lt;/p&gt;      &lt;p&gt;This edition is designed for people working for non-commercial organisation on a non-commercial product.If you meet this requirement our service is free for you. You will have access to all the open source projects registered in our database.&lt;/p&gt;      &lt;p&gt;Since it's a free edition we do not provide any warranty on server's response time, bandwidth. Furthermore, requests for adding missing module may be processed with delay&lt;/p&gt;      &lt;p&gt;        Read more at        &lt;a href="http://www.worldofjava.org/pricing.do"&gt;www.worldofjava.org/pri...&lt;/a&gt;      &lt;/p&gt;    &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-115571929701773581?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115571929701773581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115571929701773581'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/08/von-world-of-java-gibts-jetzt-auch.html' title='Von World-of-Java gibt&apos;s jetzt auch eine &quot;Personal Edition&quot;'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-115556144191712132</id><published>2006-08-14T15:17:00.000+02:00</published><updated>2006-08-14T15:17:22.010+02:00</updated><title type='text'>Open Source Xara Xtreme - Open-source graphics software</title><content type='html'>&lt;div xmlns="http://purl.org/atom/ns#"&gt;      Hoffentlich besser als InkScape (und schneller als Xara damals auf meinem 368SX16 ;)      &lt;p&gt;        Read more at        &lt;a href="http://www.xaraxtreme.org/"&gt;www.xaraxtreme.org/&lt;/a&gt;      &lt;/p&gt;    &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-115556144191712132?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115556144191712132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115556144191712132'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/08/open-source-xara-xtreme-open-source.html' title='Open Source Xara Xtreme - Open-source graphics software'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-115554912619062135</id><published>2006-08-14T11:47:00.000+02:00</published><updated>2006-08-14T11:52:06.240+02:00</updated><title type='text'>iWebExtender </title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Damit braucht man keinen .mac-Account mehr, um iWeb zu verwenden. Ich selbst habe weder iWeb noch den Extender ausprobiert, könnte das aber mal machen:&lt;br /&gt;&lt;blockquote&gt;iWebExtender helps extend iWeb&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-115554912619062135?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115554912619062135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115554912619062135'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/08/iwebextender.html' title='iWebExtender '/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-115553804998907054</id><published>2006-08-14T08:47:00.000+02:00</published><updated>2006-08-14T08:47:29.996+02:00</updated><title type='text'>trackntrace.de: Packetverfolgung per RSS-Feed</title><content type='html'>&lt;div xmlns="http://purl.org/atom/ns#"&gt;      &lt;p&gt;Diese Seite ermöglicht die Sendungsverfolgung gewöhnlicher DHL-Pakete ("Track &amp;amp; Trace für Jedermann"). Indem Sie unten Ihre Paketdaten eingeben, beauftragen Sie dieses Programm, regelmäßig bei DHL den aktuellen Paketstatus zu überprüfen und zu speichern und Ihnen auf Anfrage anzuzeigen.&lt;/p&gt;      &lt;p&gt;        Read more at        &lt;a href="http://www.trackntrace.de/"&gt;www.trackntrace.de/&lt;/a&gt;      &lt;/p&gt;    &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-115553804998907054?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115553804998907054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115553804998907054'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/08/trackntracede-packetverfolgung-per-rss.html' title='trackntrace.de: Packetverfolgung per RSS-Feed'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-115553793099321838</id><published>2006-08-14T08:45:00.000+02:00</published><updated>2006-08-14T08:45:30.996+02:00</updated><title type='text'>rendr 2</title><content type='html'>&lt;div xmlns="http://purl.org/atom/ns#"&gt;      &lt;p&gt;Ein GreaseMonkey-Script, das es einem erlaubt, auf einer bestehenden Seite CSS zu verändern und dabei live die Veränderung zu begutachten. Ideal, um beispielsweise eine Blogger- oder MySpace-Seite zu stylen.&lt;/p&gt;      &lt;p&gt;        Read more at        &lt;a href="http://www.rendur.com/"&gt;www.rendur.com/&lt;/a&gt;      &lt;/p&gt;    &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-115553793099321838?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115553793099321838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115553793099321838'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/08/rendr-2.html' title='rendr 2'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-115553779091837878</id><published>2006-08-14T08:43:00.000+02:00</published><updated>2006-08-14T08:43:10.966+02:00</updated><title type='text'>ardour | the new digital audio workstation</title><content type='html'>&lt;div xmlns="http://purl.org/atom/ns#"&gt;      &lt;p&gt;Ardour is a digital audio workstation. You can use it to record, edit and mix multi-track audio. Produce your own CD's. Mix video soundtracks. Experiment with new ideas about music and sound. Generate sound installations for 12 speaker gallery shows. Have Fun.&lt;/p&gt;      &lt;p&gt;        Read more at        &lt;a href="http://ardour.org/"&gt;ardour.org/&lt;/a&gt;      &lt;/p&gt;    &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-115553779091837878?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115553779091837878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115553779091837878'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/08/ardour-new-digital-audio-workstation.html' title='ardour | the new digital audio workstation'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-115462518707454951</id><published>2006-08-03T19:08:00.000+02:00</published><updated>2006-08-03T19:13:07.136+02:00</updated><title type='text'>Sie können den Rechner jetzt ausschalten</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt; &lt;a href="http://www.flickr.com/photos/simonox/205814811/" title="photo sharing"&gt;&lt;img src="http://static.flickr.com/89/205814811_e2eb4d1456_m.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt; &lt;br /&gt; &lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;  &lt;a href="http://www.flickr.com/photos/simonox/205814811/"&gt;Sie können den Rechner jetzt ausschalten&lt;/a&gt;  &lt;br /&gt;  Originally uploaded by &lt;a href="http://www.flickr.com/people/simonox/"&gt;SimonOx&lt;/a&gt;. &lt;/span&gt;&lt;/div&gt;Sie können Deutschland jetzt ausschalten&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-115462518707454951?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115462518707454951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115462518707454951'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/08/sie-knnen-den-rechner-jetzt.html' title='Sie können den Rechner jetzt ausschalten'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-115451320641265371</id><published>2006-08-02T12:02:00.000+02:00</published><updated>2006-08-02T12:06:46.466+02:00</updated><title type='text'>TV-Tipp: Donnie Darko</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a href="http://www.schnitt.de/tvtip/artikel/donnie_darko.shtml"&gt;Donnie Darko&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Donnie Darko&lt;br/&gt;&lt;br/&gt;&lt;br /&gt;USA 2004. R.B: Richard Kelly. K: Steven Poster. S: Sam Bauer, Eric Stand. M: Michael Andrews. P: Pandora Cinema, Flower Films u.a. D: Jake Gyllenhaal, Drew Barrymore, James Duval, Patrick Swayze u.a. 100 Min.&lt;br /&gt; &lt;br /&gt;VOX, Sonntag, 06.08.2006, 22.00 Uhr&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-115451320641265371?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115451320641265371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115451320641265371'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/08/tv-tipp-donnie-darko.html' title='TV-Tipp: Donnie Darko'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-115437121423849850</id><published>2006-07-31T20:39:00.000+02:00</published><updated>2006-07-31T20:40:14.250+02:00</updated><title type='text'>DVD-Backup unter Linux</title><content type='html'>dvdbackup -M -i/dev/dvd -o/tmp/dvd/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-115437121423849850?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115437121423849850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115437121423849850'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/07/dvd-backup-unter-linux.html' title='DVD-Backup unter Linux'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-115389925362529805</id><published>2006-07-26T09:34:00.000+02:00</published><updated>2006-07-26T09:34:13.663+02:00</updated><title type='text'>Podcasting und die GEMA Teil 2</title><content type='html'>&lt;div xmlns="http://purl.org/atom/ns#"&gt;      &lt;p&gt;Schade: Wenn man Musik im Podcast haben möchte, darf man die nicht bennen, nicht komplett spielen und noch nicht einmal einen Künstler in den Mittelpunkt stellen. Redefreiheit hat man auch nicht. Länger als 30min darf der Spaß nicht dauern. Mehr als zwei folgen darf der Podcast auch nicht haben (1 * XML und 2 * Audio = 3 URLs). Und das ganze soll dann 30 € im Monat kosten... /*no comment*/&lt;/p&gt;      &lt;p&gt;        Read more at        &lt;a href="http://www.gema.de/musiknutzer/senden/podcast.shtml"&gt;www.gema.de/musiknutzer...&lt;/a&gt;      &lt;/p&gt;    &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-115389925362529805?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115389925362529805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115389925362529805'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/07/podcasting-und-die-gema-teil-2.html' title='Podcasting und die GEMA Teil 2'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-115377280343238083</id><published>2006-07-24T22:22:00.000+02:00</published><updated>2006-07-24T22:26:43.500+02:00</updated><title type='text'>Hmm, wär auch mal was</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;blockquote cite="http://www.aaronrogers.com/nintendods/index.php"&gt;Nintendo DS Development Tutorial&lt;/blockquote&gt;&lt;p class="citation"&gt;&lt;cite cite="http://www.aaronrogers.com/nintendods/index.php"&gt;&lt;a href="http://www.aaronrogers.com/nintendods/index.php"&gt;Nintendo DS Development Tutorial :: Introduction&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;  &lt;p/&gt;&lt;p/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-115377280343238083?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115377280343238083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115377280343238083'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/07/hmm-wr-auch-mal-was.html' title='Hmm, wär auch mal was'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-115364083685904743</id><published>2006-07-23T09:42:00.000+02:00</published><updated>2006-07-23T09:47:16.900+02:00</updated><title type='text'>Suchmaschinenoptmierungsaufdeckplugin</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;blockquote cite="http://tools.seobook.com/firefox/seo-for-firefox.html"&gt;SEO for Firefox (Beta)&lt;/blockquote&gt;&lt;p class="citation"&gt;&lt;cite cite="http://tools.seobook.com/firefox/seo-for-firefox.html"&gt;&lt;a href="http://tools.seobook.com/firefox/seo-for-firefox.html"&gt;SEO for Firefox&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;  &lt;p/&gt;&lt;p/&gt;&lt;p style="font-size:10px;text-align:right;"&gt;technorati tags:&lt;a href="http://technorati.com/tag/firefox" rel="tag"&gt;firefox&lt;/a&gt;, &lt;a href="http://technorati.com/tag/plugin" rel="tag"&gt;plugin&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-115364083685904743?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115364083685904743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115364083685904743'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/07/suchmaschinenoptmierungsaufdeckplugin.html' title='Suchmaschinenoptmierungsaufdeckplugin'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-115264628194271268</id><published>2006-07-11T21:27:00.000+02:00</published><updated>2006-07-11T21:31:22.010+02:00</updated><title type='text'>Hit it like Zidane</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a href="http://www.spinchat.de/zidane"&gt;Hit it like Zidane - Zid Vicious - Das bessere Zidane Online Spiel&lt;/a&gt; &lt;br/&gt; &lt;br/&gt; &lt;p/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-115264628194271268?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115264628194271268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115264628194271268'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/07/hit-it-like-zidane.html' title='Hit it like Zidane'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-115262114622612451</id><published>2006-07-11T14:28:00.000+02:00</published><updated>2006-07-11T14:32:26.316+02:00</updated><title type='text'>Da fehlt jetzt nur noch Web2.0 und man hätte alle Buzzword in einem Buchtitel ;)</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a href="http://www.amazon.de/gp/product/3826616103/302-4598214-6784047"&gt;Amazon.de: Software Factories. Moderne Software-Architekturen mit SOA, MDA, Patterns und agilen Methoden: Bücher: Jack Greenfield,Keith Short&lt;/a&gt;:&lt;blockquote&gt;Software Factories. Moderne Software-Architekturen mit SOA, MDA, Patterns und agilen Methoden &lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-115262114622612451?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115262114622612451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115262114622612451'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/07/da-fehlt-jetzt-nur-noch-web20-und-man.html' title='Da fehlt jetzt nur noch Web2.0 und man hätte alle Buzzword in einem Buchtitel ;)'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-115255376670349612</id><published>2006-07-10T19:45:00.000+02:00</published><updated>2006-07-10T19:50:32.063+02:00</updated><title type='text'>Blaue Standardsoftware</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;blockquote cite="http://de.wikipedia.org/wiki/CICS"&gt;Die wahre Geschichte von CICS lässt sich heute nicht mehr klären, klar ist nur, dass CICS in den frühen 70er Jahren aufgetaucht ist und ursprünglich nicht von IBM war.&lt;/blockquote&gt;&lt;p class="citation"&gt;&lt;cite cite="http://de.wikipedia.org/wiki/CICS"&gt;&lt;a href="http://de.wikipedia.org/wiki/CICS"&gt;Customer Information Control System - Wikipedia&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;  &lt;p/&gt;&lt;p/&gt;&lt;p style="font-size:10px;text-align:right;"&gt;technorati tags:&lt;a href="http://technorati.com/tag/CICS" rel="tag"&gt;CICS&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-115255376670349612?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115255376670349612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115255376670349612'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/07/blaue-standardsoftware.html' title='Blaue Standardsoftware'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-115254796859391774</id><published>2006-07-10T18:08:00.000+02:00</published><updated>2006-07-10T18:12:48.653+02:00</updated><title type='text'>Wizard-of-OS 4 in Berlin</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;blockquote cite="http://www.wizards-of-os.org/"&gt;Wizards of OS 4Information Freedom RulesInternationale Konferenz 14.-16. September 2006 in der Columbia-HalleColumbiadamm 13-21, Berlin, Unkostenbeitrag dieses Jahr für drei Tage: 60 €  &lt;/blockquote&gt;&lt;p class="citation"&gt;&lt;cite cite="http://www.wizards-of-os.org/"&gt;&lt;a href="http://www.wizards-of-os.org/"&gt;Wizard of OS: Wizards of OS 4&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;  &lt;p/&gt;&lt;p/&gt;&lt;p style="font-size:10px;text-align:right;"&gt;technorati tags:&lt;a href="http://technorati.com/tag/open%20source" rel="tag"&gt;open source&lt;/a&gt;, &lt;a href="http://technorati.com/tag/free" rel="tag"&gt;free&lt;/a&gt;, &lt;a href="http://technorati.com/tag/information" rel="tag"&gt;information&lt;/a&gt;, &lt;a href="http://technorati.com/tag/wos4" rel="tag"&gt;wos4&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-115254796859391774?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115254796859391774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115254796859391774'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/07/wizard-of-os-4-in-berlin.html' title='Wizard-of-OS 4 in Berlin'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-115245112047059000</id><published>2006-07-09T15:18:00.000+02:00</published><updated>2006-07-09T15:18:40.473+02:00</updated><title type='text'>www.einfallsreich.tv - video on demand</title><content type='html'>&lt;div xmlns="http://purl.org/atom/ns#"&gt;      &lt;p&gt;Da ich nächste Woche in Wiesbaden sein werde, schaffe ich es evtl. sogar einmal beim Wiesbadener Kultursommer dabei zu sein. U.a. hat dort auch der CCC Mainz ein Projekt. Auf einfallsreich.org gibt's den passenden Videocast.&lt;/p&gt;      &lt;p&gt;        Read more at        &lt;a href="http://www.einfallsreich.org/"&gt;www.einfallsreich.org/&lt;/a&gt;      &lt;/p&gt;    &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-115245112047059000?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115245112047059000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115245112047059000'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/07/wwweinfallsreichtv-video-on-demand.html' title='www.einfallsreich.tv - video on demand'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-10302924.post-115245083048087352</id><published>2006-07-09T15:09:00.000+02:00</published><updated>2006-07-09T15:13:50.573+02:00</updated><title type='text'>crates &amp; barrels</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;blockquote cite="http://medien.akbild.ac.at/armin/crates_and_barrels/"&gt;This is about crates and barrels in videogames.&lt;/blockquote&gt;&lt;p class="citation"&gt;&lt;cite cite="http://medien.akbild.ac.at/armin/crates_and_barrels/"&gt;&lt;a href="http://medien.akbild.ac.at/armin/crates_and_barrels/"&gt;crates and barrels&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;  &lt;p/&gt;&lt;p/&gt;&lt;p style="font-size:10px;text-align:right;"&gt;technorati tags:&lt;a href="http://technorati.com/tag/game" rel="tag"&gt;game&lt;/a&gt;, &lt;a href="http://technorati.com/tag/art" rel="tag"&gt;art&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10302924-115245083048087352?l=simonox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115245083048087352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10302924/posts/default/115245083048087352'/><link rel='alternate' type='text/html' href='http://simonox.blogspot.com/2006/07/crates-barrels.html' title='crates &amp; barrels'/><author><name>SimonOx</name><uri>http://www.blogger.com/profile/09141136617807345113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_j15LQHU7DEA/S373_bq1icI/AAAAAAAAAP8/tm-thf2rUkk/s1600-R/996245.jpg'/></author></entry></feed>
