<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="/templates/default/atom.css" type="text/css" ?>

<feed 
   xmlns="http://www.w3.org/2005/Atom"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/">
    <link href="http://nutwerk.de/feeds/atom.xml" rel="self" title="Octavians Nutwerk" type="application/atom+xml" />
    <link href="http://nutwerk.de/"                        rel="alternate"    title="Octavians Nutwerk" type="text/html" />
    <link href="http://nutwerk.de/rss.php?version=2.0"     rel="alternate"    title="Octavians Nutwerk" type="application/rss+xml" />
    <title type="html">Octavians Nutwerk</title>
    <subtitle type="html">&quot;Oh Nutwerk. Wo der grilbe Wakwak-Vogel zirbelt grell wie Tee-Service. Des wachen Mundes arg geschlauchter Gartenkohl, von Honigmoehnchen kandelabert, a.&quot; - Switch</subtitle>
    <icon>http://nutwerk.de/templates/square/img/s9y_banner_small.png</icon>
    <id>http://nutwerk.de/</id>
    <updated>2010-03-28T15:00:34Z</updated>
    <generator uri="http://www.s9y.org/" version="1.5.3">Serendipity 1.5.3 - http://www.s9y.org/</generator>
    <dc:language>de</dc:language>

    <entry>
        <link href="http://nutwerk.de/archives/24-Blog-Fruehjahrsputz.html" rel="alternate" title="Blog-Frühjahrsputz" />
        <author>
            <name>Marc Jakubowski</name>
                    </author>
    
        <published>2010-03-28T15:00:34Z</published>
        <updated>2010-03-28T15:00:34Z</updated>
        <wfw:comment>http://nutwerk.de/wfwcomment.php?cid=24</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://nutwerk.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=24</wfw:commentRss>
    
            <category scheme="http://nutwerk.de/categories/2-Web-Entwicklung" label="Web / Entwicklung" term="Web / Entwicklung" />
    
        <id>http://nutwerk.de/archives/24-guid.html</id>
        <title type="html">Blog-Frühjahrsputz</title>
        <content type="xhtml" xml:base="http://nutwerk.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Nachdem ich meine fast einjährige, ungeplante Blogpause vor kurzem mit einem <a href="http://nutwerk.de/archives/23-Warenkorbregel-Versandkostenfrei-ab-Betrag-X.html" title="Magento Warenkorbregel">Artikel zu Magento</a> beendet habe, war es nun an der Zeit endlich das Blog-Theme umzugestalten. <br />
Somit sollte jetzt alles etwas übersichtlicher und besser lesbar sein, wobei neben neuem Layout auch einige unnötige Elemente entfernt wurden. Mal schauen inwieweit mich das motiviert ab und zu etwas zu bloggen, was im Gegensatz zum twittern und facebooken heutzutage ja doch etwas mehr Aufwand bedarf <img src="http://nutwerk.de/templates/default/img/emoticons/wink.png" alt=";-)" style="display: inline; vertical-align: bottom;" class="emoticon" />  
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://nutwerk.de/archives/23-Warenkorbregel-Versandkostenfrei-ab-Betrag-X.html" rel="alternate" title="Warenkorbregel: Versandkostenfrei ab Betrag X" />
        <author>
            <name>Marc Jakubowski</name>
                    </author>
    
        <published>2010-03-18T18:24:23Z</published>
        <updated>2010-03-19T09:15:35Z</updated>
        <wfw:comment>http://nutwerk.de/wfwcomment.php?cid=23</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://nutwerk.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=23</wfw:commentRss>
    
            <category scheme="http://nutwerk.de/categories/11-Magento" label="Magento" term="Magento" />
    
        <id>http://nutwerk.de/archives/23-guid.html</id>
        <title type="html">Warenkorbregel: Versandkostenfrei ab Betrag X</title>
        <content type="xhtml" xml:base="http://nutwerk.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Möchte man in Magento eine Warenkorbregel im Stile von "<strong>Versand ist kostenfrei, wenn der Bestellwert größer als 50€ ist</strong>" einzurichten, gibt es ein paar Dinge zu beachten.<br />
<br />
Die gleiche Aufgabe hatte ich kürzlich und es wollte einfach nicht funktionieren. Die Regel anfürsich schien korrekt zu sein, jedoch wurden immer die konfigurierten Table-Rates als Versandkosten verwendet statt dem kostenfreien Versand. Der Trick ist nun, dass man die Versandmethode "Versandkostenfrei" aktivieren muss, da die erstellte Regel sonst schlichtweg ignoriert wird.<br />
<br />
Also unter System -> Konfiguration -> Versandarten -> Versandkostenfrei die Option Aktiv=Ja setzen und zusätzlich die Mindestebestellmenge (gemeint ist damit die Zwischensumme und nicht Anzahl der Artikel) auf einen sehr hohen Wert (z.B. 999999) setzen, da dieser sonst eventuell die Warenkorbregel aushebelt.<br />
<br />
Die Regel selbst sieht dann beispielsweise so aus:<br />
Bedingungen:<br />
Zwischensumme  größer gleich als   42.02<br />
(Wichtig ist, dass hier der Nettobetrag der gewünschten Mindestzwischensumme eingegeben wird!)<br />
<br />
Aktionen:<br />
Versandkostenfrei: Für Versand mit passenden Artikeln<br />
<br />
Wenn man nun Artikel mit einer Zwischensumm von 50€ (Brutto) bzw 42,02€ (Netto) in den Warenkorb legt und den Bestellprozess durchgeht, sollte nun auf der Bestellbestätigungsseite die kostenfreie Versandmethode aufgelistet sein. Wenn man zurück in den Warenkorb wechselt und beispielsweise die Anzahl der Artikel verringert um unter die definierte Grenze zu kommen, sollte die kostenfreie Versandmethode verschwinden bzw. durch eine andere konfigurierte ersetzt werden.<br />
<br />
Das ganze habe ich mit Version 1.3.2.4 getestet, sollte aber auch bei älteren Versionen funktionieren. Ob in 1.4 dieses Verhalten korrigiert wurde habe ich noch nicht ausprobiert, aber da die Steuerregeln überarbeitet wurde, könnte es sein, dass man zumindest Brutto-Zwischensummen angeben kann. 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://nutwerk.de/archives/22-Welcome-back.html" rel="alternate" title="Welcome back" />
        <author>
            <name>Marc Jakubowski</name>
                    </author>
    
        <published>2009-04-20T18:32:56Z</published>
        <updated>2009-04-21T07:51:50Z</updated>
        <wfw:comment>http://nutwerk.de/wfwcomment.php?cid=22</wfw:comment>
    
        <slash:comments>5</slash:comments>
        <wfw:commentRss>http://nutwerk.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=22</wfw:commentRss>
    
            <category scheme="http://nutwerk.de/categories/1-Sonstiges" label="Sonstiges" term="Sonstiges" />
    
        <id>http://nutwerk.de/archives/22-guid.html</id>
        <title type="html">Welcome back</title>
        <content type="xhtml" xml:base="http://nutwerk.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Wie <a href="http://octavian.supersized.org/archives/24-Domainwechsel.html" title="Domainwechsel">angekündigt</a> habe ich mein Blog von <a href="http://octavian.supersized.org">octavian.supersized.org</a> hierher auf einen eigenen Server umgezogen, was mir mehr Möglichkeiten bietet eine ordentliche Webpräsenz zu basteln, die neben diesem Blog auch Infos über meine Hobbyprojekte beinhalten wird.<br />
<br />
Als nächstes will ich mir ein eigenes Theme basteln, das möglichst schlicht aussieht, vielleicht angelehnt an das todoyo.de "Design".<br />
<br />
Das Versprechen mehr zu bloggen gebe ich an dieser Stelle besser nicht <img src="http://nutwerk.de/templates/default/img/emoticons/wink.png" alt=";-)" style="display: inline; vertical-align: bottom;" class="emoticon" />  
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://nutwerk.de/archives/19-peXi-Zwischenstand-Prototyp.html" rel="alternate" title="peXi - Zwischenstand Prototyp" />
        <author>
            <name>Marc Jakubowski</name>
                    </author>
    
        <published>2009-02-16T09:29:00Z</published>
        <updated>2009-02-16T09:29:00Z</updated>
        <wfw:comment>http://nutwerk.de/wfwcomment.php?cid=19</wfw:comment>
    
        <slash:comments>4</slash:comments>
        <wfw:commentRss>http://nutwerk.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=19</wfw:commentRss>
    
            <category scheme="http://nutwerk.de/categories/7-Middleware" label="Middleware" term="Middleware" />
    
        <id>http://nutwerk.de/archives/19-guid.html</id>
        <title type="html">peXi - Zwischenstand Prototyp</title>
        <content type="xhtml" xml:base="http://nutwerk.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                In den vergangenen Tagen habe ich mich mit der Implementierung eines ersten Prototyps beschäftigt.<br />
<br />
<h3>Versuchsaufbau</h3><br />
Das Szenario ist zunächst so trivial wie möglich, zeigt jedoch bereits an welchen Stellen Probleme auftreten werden, so dass man diese schon frühzeitig bei der Architekturüberlegung berücksichtigen kann.<br />
<br />
Im Prinzip sieht das Szenario wie folgt aus:<br />
<ul><br />
<li>Sender schickt Message an Middleware Server<br />
<li>Server nimmt Message entgegen und legt sie in eine Queue<br />
<li>Engine holt Message aus Queue und schickt sie an Empfänger<br />
<li>Empfänger nimmt Message entgegen und speichert sie im Filesystem<br />
</ul><br />
Dieser einfache Aufbau beschränkt sich also erst einmal auf die asynchrone Verarbeitung von Testnachrichten vom Sender über die Middleware bis zum Empfänger.<br />
Die verwendeten Komponenten werden im Folgenden näher beschrieben:<br />
 <h3>Komponenten</h3><br />
<h4>Sender</h4><br />
Script, welches über den Browser aufgerufen werden kann und dann per Zend_Http_Client beliebig viele HTTP-Post Nachrichten an den Middleware Server sendet. Der Einfachheit halber wird lediglich der Parameter "message" mit dem Wert von uniqid() gesendet, also noch keine "sinnvolle" Nachricht.<br />
Die Nachrichten werden stumpf rausgefeuert, ohne speziell auf die Antwort des Servers zu reagieren.<br />
<br />
<h4>Server</h4><br />
Script, welches vom Sender angesprochen wird und die gepostete Nachricht entgegen nimmt. Der Nachrichteninhalt wird in einer Queue gespeichert, welche eine InnoDb Tabelle mit den Feldern "id", "message" und "status" ist. Bei erfolgreichem Speichern in die Queue wird ein HTTP Response Code 200 an den Sender zurückgeschickt, ansonsten ein Fehlercode.<br />
<br />
<h4>Engine</h4><br />
Die Engine ist die Hauptkomponente der Middleware und besteht aus einem langlaufenden PHP-CLI Script (per "while (true) { ... }"), welches kontinuierlich die Queue abfragt, ob neue, unverarbeitete Nachrichten vorhanden sind.<br />
Ist dies nicht der Fall, wartet das Script 5 Sekunden vor der nächsten Abfrage.<br />
<br />
Sind neue Nachrichten vorhanden, wird eine Beliebige selektiert und wiederrum per Zend_Http_Client als HTTP-Post Nachricht mit den Parametern "id" und "message" an den Receiver gesendet. Je nach Response Code wird die Nachricht in der Queue als "verarbeitet", "fehlerhaft" oder "neu" (zum erneuten Verarbeiten) markiert.<br />
<br />
<h4>Receiver</h4><br />
Script, welches von der Engine angesprochen wird und die gepostete Nachricht entgegen nimmt. Der Nachrichteninhalt wird in einer Textdatei im Filesystem mit dem Namen der "id" und Inhalt der "message" abgelegt. Sollte die Datei wider Erwarten bereits existieren wird ein Fehlercode zurückgesendet.<br />
<br />
<br />
<h3>Analyse</h3><br />
Da ich (noch) auf einem Windows Rechner entwickle, sind Aussagen über Performance nur schwer zu treffen, zunächst ging es mir um den reibungslosen Ablauf des Prozesses.<br />
<br />
Der lansamste Teil in diesem Versuchsaufbau ist das Versenden der Nachrichten per HTTP-Post, da für jede eingehende und ausgehende Nachricht der Middleware HTTP Verbindungen zu Scripten aufgebaut werden müssen.<br />
<br />
Da die Engine ein langlaufender Prozess ist, kann es passieren, dass je nach Konfiguration und Anzahl der verarbeiteten Nachrichten das Memory Limit erreicht wird.<br />
<br />
Um eine parallele Verarbeitung mit mehreren Prozessen zu simulieren, habe ich testweise bis zu 6 Instanzen des Engine Scripts gestartet wobei sofort das Problem von Race Conditions auftrat.<br />
<br />
<br />
<h3>Schlussfolgerungen</h3><br />
Benutzung einer Unix Umgebung, um bessere Aussagen über die Performance treffen und Forking nutzen zu können.<br />
<br />
Testen von anderen Methoden zur Nachrichtenübertragung, z.B. per "cUrl", persistente HTTP Verbindungen und Versenden von mehreren Nachrichten auf einmal.<br />
<br />
Abarbeitung der Queue mit Verwendung von Transaktionen und Locking um Race Conditions zu vermeiden.<br />
<br />
Parallele Verarbeitung der Messages durch Prozess Forking.<br />
<br />
<br />
<h3>Weiteres Vorgehen</h3><br />
Als nächstes werde ich synchrone Nachrichten implementieren, das heißt, dass die Nachrichten nicht in der Queue gespeichert werden um von der Engine abgearbeitet zu werden, sondern dass das Server selbst  die Verarbeitung auslöst, um die Antwort des Empfängers an den Sender zurückgeben zu können.<br />
<br />
Dazu muss der Verarbeitungsteil, der bislang fest in der Engine implementiert ist ausgelagert werden, damit dieser direkt vom Server Script aufgerufen werden kann. Dies hat außerdem den Vorteil, dass eine Umstellung der Engine auf Forking einfacher zu implementieren ist, da dann jeder nebenläufige Prozess eine eigenständige Verarbeitung auslöst.<br />
<br />
<br />
Falls jemand weitere Ideen zur Optimierung hat, bitte per Kommentar mitteilen <img src="http://nutwerk.de/templates/default/img/emoticons/smile.png" alt=":-)" style="display: inline; vertical-align: bottom;" class="emoticon" /> 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://nutwerk.de/archives/18-PHP-Message-orientierte-Middleware.html" rel="alternate" title="PHP Message-orientierte Middleware" />
        <author>
            <name>Marc Jakubowski</name>
                    </author>
    
        <published>2009-02-13T10:32:00Z</published>
        <updated>2009-04-01T16:13:14Z</updated>
        <wfw:comment>http://nutwerk.de/wfwcomment.php?cid=18</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://nutwerk.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=18</wfw:commentRss>
    
            <category scheme="http://nutwerk.de/categories/7-Middleware" label="Middleware" term="Middleware" />
    
        <id>http://nutwerk.de/archives/18-guid.html</id>
        <title type="html">PHP Message-orientierte Middleware</title>
        <content type="xhtml" xml:base="http://nutwerk.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Bei meinem früheren Arbeitgeber hatte ich die Gelegenheit Projekte mittels <a href="http://help.sap.com/saphelp_nw04/helpdata/EN/0f/80243b4a66ae0ce10000000a11402f/frameset.htm" title="SAP Exchange Infrastructure">SAP Exchange Infrastructure</a> zu realisieren. <br />
Bei dem Produkt handelt es sich um eine in Java und ABAP implementierte Message-orientierte Middleware, die es ermöglicht eingehende Nachrichten der verschiedensten Formate in andere Formate zu transformieren und an beliebige Empfänger zu verteilen, also ideal zun Datenaustausch in einer heterogenen Umgebung.<br />
<br />
Da ich von den Möglichkeiten dieser Software ziemlich beeindruckt war, es jedoch nicht realistisch ist, sich so ein Teil zu lizensieren, schaute ich mich nach ähnlichen Lösungen um. Da gäbe es zum Beispiel <a href="http://de.wikipedia.org/wiki/WebSphere" title="IBM WebSphere">IBM WebSphere</a>, welches für den privaten Gebrauch aber ebenso ausscheidet. <h3>Message Queues</h3><br />
Bei reinen Message Queues sind <a href="http://en.wikipedia.org/wiki/Java_Message_Service" title="Java Message Service">JMS</a> und <a href="http://activemq.apache.org/" title="Apache ActiveMQ">Apache ActiveMQ</a> als OpenSource Lösungen die verbreitetsten.<br />
<br />
Die Suche nach in PHP implementierten Middlewares oder Message Queues war sehr ernüchternd. Zwar gibt es zu den oben genannten und anderen Lösungen oft Bibliotheken, um mit PHP darauf zugreifen zu können, den Aufwand diese Systeme aufsetzen zu müssen erspart dies aber nicht.<br />
<br />
Die einzig brauchbare PHP Message Queue scheint <a href="https://www.dropr.org/" title="dropr">dropr</a> zu sein, welche bereits bei <a href="http://www.jimdo.com/" title="Jimdo">Jimdo</a> im Produktiveinsatz verwendet wird um Nachrichten zwischen global verteilten Servern auszutauschen.<br />
<br />
Wenn jemand weitere brauchbare Lösungen kennt, bitte einen Kommentar hinterlassen.<br />
<br />
<h3>Das Rad neu erfinden</h3><br />
Als Entwickler reizt es mich jetzt natürlich selbst in PHP eine entsprechende Middleware zu entwickeln <img src="http://nutwerk.de/templates/default/img/emoticons/wink.png" alt=";-)" style="display: inline; vertical-align: bottom;" class="emoticon" /><br />
Ob dies nun sinnvoll ist oder nicht, sei mal dahingestellt, von der technischen bzw archtitekturellen Seite ist es auf jeden Fall eine interessante Herausforderung.<br />
Im Prinzip soll sich der Funktionsumfang an der SAP XI orientieren, wobei es wohl etwas vermessen wäre die Komplexität des Systems genau so abbilden zu können, von daher wird es eine ziemlich abgespeckte Variante werden. <br />
<br />
<h3>Funktionalität</h3><br />
Ein ausgearbeitetes Konzept gibt es noch nicht, wird es vielleicht auch nie geben, da ich es iterativ angehen werde um nach und nach den Komplexitätsgrad zu erhöhen.<br />
Einen groben Überblick der zu bedenkenden Komponenten gibt es im Wiki zum Google Code Projekt <a href="http://code.google.com/p/pexi" title="peXi - PHP Exchange Infrastructure">peXi - PHP Exchange Infrastructure</a>.<br />
<br />
Im Groben soll das System später einmal folgendes können:<br />
<ul><br />
<li> Synchrone/Asynchrone Verarbeitung<br />
<li> Unterstützung vieler Nachrichtenformate/Protokolle<br />
<li> (Zwischen-/Persistente) Speicherung in Queues<br />
<li> Senden an beliebige Empfänger<br />
<li> Transformation von Nachrichten in Zielformat<br />
<li> Erstellen von Szenarien<br />
<li> Abbildung von Systemlandschaften<br />
</ul><br />
In dem Zusammenhang gilt es natürlich auch noch folgende Themen zu beachten:<br />
<ul><br />
<li> Skalierbare Architektur<br />
<li> Performanceoptimierung<br />
<li> Sicherheit / Authentifizierung / Zugriffskontrolle<br />
<li> Monitoring<br />
<li> Usability der Konfigurationsoberfläche<br />
</ul><br />
Das reicht dann auch erstmal <img src="http://nutwerk.de/templates/default/img/emoticons/wink.png" alt=";-)" style="display: inline; vertical-align: bottom;" class="emoticon" /><br />
<br />
<h3>Entwicklung eines Prototyps</h3><br />
Als erstes gilt es einen simplen asynchronen Prototyp zu erstellen, der aus diesen Komponenten bestehen wird:<br />
<ul><br />
<li> Sender: Sendet HTTP Messages an Server<br />
<li> Server: Empfängt Messages und speichert diese in einer Queue<br />
<li> Engine: Daemon, der periodisch die Queue nach neuen Messages checkt um diese an Empfänger zu schicken<br />
<li> Empfänger: Nimmt Messages entgegen und speichert diese im Filesystem<br />
</ul><br />
Ein erster rudimentärer Test funktionierte bereits. Nun gilt es die einzelnen Komponenten Stück für Stück zu isolieren und auzubauen und eine ordentliche Architektur zu entwickeln.<br />
<br />
Hilfe und Ideen sind gerne willkommen <img src="http://nutwerk.de/templates/default/img/emoticons/smile.png" alt=":-)" style="display: inline; vertical-align: bottom;" class="emoticon" /> 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://nutwerk.de/archives/16-7-Things-About-Me.html" rel="alternate" title="7 Things About Me" />
        <author>
            <name>Marc Jakubowski</name>
                    </author>
    
        <published>2009-01-05T11:10:00Z</published>
        <updated>2009-01-05T11:10:00Z</updated>
        <wfw:comment>http://nutwerk.de/wfwcomment.php?cid=16</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://nutwerk.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=16</wfw:commentRss>
    
            <category scheme="http://nutwerk.de/categories/4-Persoenliches" label="Persönliches" term="Persönliches" />
    
        <id>http://nutwerk.de/archives/16-guid.html</id>
        <title type="html">7 Things About Me</title>
        <content type="xhtml" xml:base="http://nutwerk.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <a href="http://usrportage.de/" title="Lars Strojny">Lars Strojny</a> was so kind <a href="http://usrportage.de/archives/907-Seven-Things.html" title="Seven Things - by Lars Strojny">tagging</a> me for the <a href="http://in2it.be/whotaggedwho.php" title="Who tagged who">7 Things blog chain</a>, that reached almost all PHP developers out there during the holidays.<br />
So here are some (even embarassing) facts about me, that you problably didn't know:<br />
<br />
(1) I have a twin sister. She is 10 minutes older than me, because I preferred chilling a bit more instead of coming out. And NO we don't look similar at all! She got all the beauty <img src="http://nutwerk.de/templates/default/img/emoticons/wink.png" alt=";-)" style="display: inline; vertical-align: bottom;" class="emoticon" /><br />
<br />
(2) When I was a little kid, I joined my sister in doing ballet. I don't know why, but it was some fun until I ended my career in pre-school <img src="http://nutwerk.de/templates/default/img/emoticons/tongue.png" alt=":-P" style="display: inline; vertical-align: bottom;" class="emoticon" /><br />
<br />
(3) I was a really good track and field athlete until I received my first PC and the belly started to grow<br />
<br />
(4) For over 3 years I have been a cheerleader. I was once forced by my former girlfriend to try it out and I really liked throwing girls in the air and doing some acrobatics, so I continued voluntarily. And NO I don't wear a skirt <img src="http://nutwerk.de/templates/default/img/emoticons/tongue.png" alt=":-P" style="display: inline; vertical-align: bottom;" class="emoticon" /> It's one of the most dangerous sports btw.<br />
<br />
(5) I was a lazy pupil at grammar school and preferred playing Quake3 and learning PHP instead of learning for my Abitur (high school diploma) that I passed without problems, which came out to be a good choice regarding my current profession<br />
<br />
(6) I immediatly forget the plot of a movie I just saw. So it's still exciting seeing the same movie multiple times, but very annoying when people talk about funny scenes and I just can't remember them.<br />
<br />
(7) I have the super power of being able to sleep in every place and situation. I once managed to sleep on a crowded dancefloor in a club next to a giant speaker (without alcohol involved!).<br />
<br />
That's it. <br />
I nominate:<br />
- <a href="http://georgbuske.de/" title="Georg Buske">Georg Buske</a> because he is a loyal fellow smoker at work  
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://nutwerk.de/archives/15-CSRF-Protection-Updated.html" rel="alternate" title="CSRF Protection (Updated)" />
        <author>
            <name>Marc Jakubowski</name>
                    </author>
    
        <published>2008-04-22T11:12:00Z</published>
        <updated>2010-03-28T00:56:53Z</updated>
        <wfw:comment>http://nutwerk.de/wfwcomment.php?cid=15</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://nutwerk.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=15</wfw:commentRss>
    
            <category scheme="http://nutwerk.de/categories/9-todoyode" label="todoyo.de" term="todoyo.de" />
            <category scheme="http://nutwerk.de/categories/10-ZendFramework" label="ZendFramework" term="ZendFramework" />
    
        <id>http://nutwerk.de/archives/15-guid.html</id>
        <title type="html">CSRF Protection (Updated)</title>
        <content type="xhtml" xml:base="http://nutwerk.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Nachdem <a href="http://blog.fukami.io/">fukami</a> beim letzten Bonner <a href="http://www.webmontag.de/doku.php?id=07.04.2008_bonn">WebMontag</a> erläutert hatte was <a href="http://de.wikipedia.org/wiki/CSRF">CSRF</a> ist und was man alles damit anrichten kann, war mir zunächst nicht ganz klar, wie so etwas in der Praxis ausgenutzt wird und welche Schutzmaßnahmen man dagegen implementieren kann.<br />
<br />
Netterweise demonstrierte mir mein Kollege <a href="http://usrportage.de/">Lary Strojny</a> anhand meines Projekts <a href="http://todoyo.de">todoyo.de</a> wie so etwas genau aussieht. Er schickte mir einen unscheinbaren Link, den ich natürlich sofort öffnete und gelangte auf eine einfache Seite mit 3 Images, welche allerdings nicht richtig geladen wurden. Die Bilderpfade lauteten in etwa "http://todoyo.de/task/delete/id/1234". Wäre ich nun bei todoyo eingeloggt gewesen, wären ohne, dass ich etwas gemerkt hätte, einige meiner Aufgaben gelöscht worden. Die IDs der Aufgaben besorgte er sich aus der öffentlichen todoyo-Entwicklerliste. Glücklicherweise war ich nicht eingeloggt <img src="http://nutwerk.de/templates/default/img/emoticons/wink.png" alt=";-)" style="display: inline; vertical-align: bottom;" class="emoticon" /><br />
<br />
Dadurch wurde mir schlagartig klar, wie CSRF Angriffe funktionieren und welchen Schaden man damit alles anrichten kann, wenn die Seite nicht entsprechend geschützt ist.<br />
<br />
Wie sehen nun die Gegenmaßnahmen aus, um so etwas zu verhindern? Folgende Schritte habe ich unternommen: - Aufgaben-IDs aus öffentlichen Listen entfernt<br /><br />
- Bei allen Formularen POST Requests erzwungen<br /><br />
- und anschließend nur POST Variablen auswerten<br /><br />
- Tokens in jedes Formular eingebaut<br /><br />
- Tokens auch für Links zu Datenänderungen benutzen (z.B. einfaches Löschen von Aufgaben per Link statt per Formular)<br />
<br />
Im Code sieht das Ganze jetzt so aus:<br />
<br />
[geshi lang=php]<br />
<?php<br />
// Todoyo/View/Helper/CsrfKey.php<br />
class Todoyo_View_Helper_CsrfKey<br />
{<br />
    protected $_token = '';<br />
<br />
    public function csrfKey()<br />
    {<br />
        if (empty($_SESSION['tokens'])) {<br />
            $_SESSION['tokens'] = array();<br />
        }<br />
<br />
        if (empty($this->_token)) {<br />
            $this->_token = md5(uniqid(rand(), TRUE));<br />
            $_SESSION['tokens'][] = $this->_token;<br />
            $_SESSION['tokens'] = array_slice($_SESSION['tokens'], -100);<br />
        }<br />
        return $this->_token;<br />
    }<br />
}<br />
<br />
<br />
// Todoyo/Controller/Action.php<br />
class Todoyo_Controller_Action extends Zend_Controller_Action<br />
{<br />
    // Prüft ob aktuelle Action geschützt ist und ob CSRF Key gültig ist<br />
    public function checkCsrfKey($actions)<br />
    {<br />
        // Keine CSRF geschützen Actions? Weiter<br />
        if (empty($actions)) {<br />
            return true;<br />
        }<br />
        // Action nicht eine der CSRF geschützen Actions? Weiter<br />
        if (!in_array($this->_request->getActionName(), $actions)) {<br />
            return true;<br />
    	}<br />
<br />
        $token = $this->_getParam('x');<br />
<br />
        // Kein Token oder Token nicht in Session? Abbruch!<br />
        if (empty($token) or !in_array($token, (array) $_SESSION['tokens'])) {<br />
            $this->_flash->addMessage('Unerlaubte Aktion');<br />
            $this->_redirect('/');<br />
            return false;<br />
        }<br />
<br />
        // Token war gültig? Token löschen und weiter<br />
        $pos = array_search($token, $_SESSION['tokens']);<br />
        unset($_SESSION['tokens'][$pos]);<br />
        return true;<br />
    }<br />
<br />
    // Prupft ob für aktuelle Action POST erzwungen wurde und wirklich POST ist<br />
    public function checkPost($actions)<br />
    {<br />
        // Keine POST Actions erzwungen? Weiter<br />
        if (empty($actions)) {<br />
            return true;<br />
        }<br />
        // Action keine erzwungene POST Action? Weiter<br />
        if (!in_array($this->_request->getActionName(), $actions)) {<br />
            return true;<br />
    	}<br />
<br />
    	// Action ist kein POST? Abbruch!<br />
    	if (!$this->_request->isPost()) {<br />
            $this->_flash->addMessage('Fehler beim Verarbeiten der Formulareingaben');<br />
            $this->_redirect('/');<br />
        }<br />
<br />
        return $this->checkCsrfKey($actions);<br />
    }<br />
}<br />
<br />
// TaskController.php<br />
class TaskController extends Todoyo_Controller_Action<br />
{<br />
    public function init()<br />
    {<br />
    	parent::init();<br />
    	$this->checkCsrfKey(array('insert', 'delete'));<br />
    	$this->checkPost(array('insert'));<br />
    }<br />
}<br />
<br />
// index/index.phtml<br />
<form action="/task/insert" method="post"><br />
    <input type="text" name="title" value=""><br />
    <input type="hidden" name="x" value="<?=$this->csrfKey()?>"><br />
    <input type="submit" name="submit" value="Speichern"><br />
</form><br />
<br />
<a href=/task/delete/id/1234/x/<?=$this->csrfKey()?>>Aufgabe löschen</a><br />
[/geshi]<br />
<br />
Was geschieht im Detail?<br />
<br />
Im Template wird nun bei jeder Aktion, die geschützt werden soll, ein CSRF Key (Token) entweder als Hidden Input Feld eingefügt, oder bei Links mit an die URL angehangen.<br />
Der CsrfKey-View-Helper liefert bei jedem Aufruf einen neuen zufälligen String, der in der Session gespeichert wird. Pro Seitenaufruf wird ein einziger Token erzeugt und für alle Elemente verwendet. Die Anzahl der gültigen Tokens wurde auf 100 beschränkt, um die Session nicht unnötig aufzublähen und dennoch gültige Requests bei mehreren Tabs/Seiten zu ermöglichen.<br />
<br />
Nach dem Abschicken eines Formulars, wird bevor die eigentliche Action ausgeführt wird, geprüft, ob die Aktion durch einen POST-Request entstanden sein muss, was bei Formularen klar der Fall ist. Der Methode "checkPost" werden also alle Actions übergeben, bei denen wir POST erzwingen wollen. Zusätzlich wir bei definierten Actions geprüft, ob sie einen CSRF Key besitzen müssen, und falls ja, ob dieser auch gültig ist (=in der Session vorhanden ist). Wenn ja, dann wird der benutzte Token aus der Session gelöscht und die Action wir ausgeführt. Bei der Verwendung von "checkPost()" wird automatisch auch der CSRF Key überprüft, weil alle Formulare zwingend einen gültigen Token haben müssen, URLs hingegen nur bei Bedarf.<br />
<br />
Somit kann man für jeden Controller ganz einfach definieren, welche Actions ausschließlich per POST aufgerufen werden dürfen und welche durch CSRF geschützt werden sollen. In der Regeln ist dies bei allen Aktionen der Fall, bei denen Daten geändert werden (insert, update, delete,...). Bei Anzeige-Aktionen legt man eher Wert auf schöne URLs ohne einen Token.<br />
<br />
Für weitere Verbesserungsvorschläge oder Fehlerhinweise wäre ich sehr dankbar <img src="http://nutwerk.de/templates/default/img/emoticons/smile.png" alt=":-)" style="display: inline; vertical-align: bottom;" class="emoticon" /><br />
<br />
<strong>UPDATE:</strong><br />
<br />
Im <a href="http://www.zfforum.de/showthread.php?t=1808">deutschen Zend Framework Forum</a> wurden ein paar Vorschläge geäußert:<br />
<br />
- Auslagerung der "checkPost()" und "checkCsrf()" Funktionalität in einen eigenen <a href="http://framework.zend.com/manual/de/zend.controller.actionhelpers.html#zend.controller.actionhelper.writingyourown">ActionHelper</a><br /><br />
- Nutzung von <a href="http://framework.zend.com/manual/de/zend.session.html">Zend_Session_Namespace</a> zum Zugriff auf die Session Tokens<br /><br />
- Erstellung eines <a href="http://framework.zend.com/manual/de/zend.form.elements.html#zend.form.elements.custom">Zend_Form_Element</a> um z.B. automatisch bei jedem Form das Hidden Token Element hinzuzufügen<br /> 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://nutwerk.de/archives/14-Videos-vom-WebMontag-in-Bonn-online.html" rel="alternate" title="Videos vom WebMontag in Bonn online" />
        <author>
            <name>Marc Jakubowski</name>
                    </author>
    
        <published>2008-04-18T13:33:00Z</published>
        <updated>2008-04-18T13:33:00Z</updated>
        <wfw:comment>http://nutwerk.de/wfwcomment.php?cid=14</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://nutwerk.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=14</wfw:commentRss>
    
            <category scheme="http://nutwerk.de/categories/6-KonferenzenBarCamps" label="Konferenzen/BarCamps" term="Konferenzen/BarCamps" />
    
        <id>http://nutwerk.de/archives/14-guid.html</id>
        <title type="html">Videos vom WebMontag in Bonn online</title>
        <content type="xhtml" xml:base="http://nutwerk.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Mittlerweile sind auch die Aufzeichnungen einiger Vorträge des <a href="http://www.webmontag.de/doku.php?id=07.04.2008_bonn">WebMontags vom 7. April</a> online:<br />
<br />
- <a href="http://www.cafe-podcast.de/video.php?v=2907b411eb1712c08b5ab8894bc08b48">Christian Scholz - Data Portability</a><br />
- <a href="http://www.cafe-podcast.de/video.php?v=1ae363c6d1ddd517dd849e1179fa1acd">Roland Schäfer und Nico Zorn - Produki.de</a><br />
- <a href="http://www.cafe-podcast.de/video.php?v=b9a9dda0f176b13ee1da7ca578a6af72">Thomas Schindler - Cellcast.de</a><br />
- <a href="http://www.cafe-podcast.de/video.php?v=be1a263db19d66646dda7a308c9c0d2e">Philipp Strube - myPEAK.net</a><br />
<br />
Leider scheinen die Vortragenden zu den Themen "CSRF" (fukami) und "Das chinesische Web" (Oliver Ueberholz) einer Veröffentlichung nicht zugestimmt zu haben, schade.<br />
<br />
UPDATE: Tollerweise habe ich gerade ein <a href="http://www.elektrischer-reporter.de/index.php/site/film/38/">Video gefunden</a>, wo <a href="http://www.webworkblogger.de/">Oliver</a> quasi den gleichen Vortrag hält wie beim WebMontag <img src="http://nutwerk.de/templates/default/img/emoticons/smile.png" alt=":-)" style="display: inline; vertical-align: bottom;" class="emoticon" />  
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://nutwerk.de/archives/13-Mein-neues-Projekt-todoyo.de.html" rel="alternate" title="Mein neues Projekt: todoyo.de" />
        <author>
            <name>Marc Jakubowski</name>
                    </author>
    
        <published>2008-04-16T22:10:00Z</published>
        <updated>2009-04-02T08:34:05Z</updated>
        <wfw:comment>http://nutwerk.de/wfwcomment.php?cid=13</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://nutwerk.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=13</wfw:commentRss>
    
            <category scheme="http://nutwerk.de/categories/9-todoyode" label="todoyo.de" term="todoyo.de" />
    
        <id>http://nutwerk.de/archives/13-guid.html</id>
        <title type="html">Mein neues Projekt: todoyo.de</title>
        <content type="xhtml" xml:base="http://nutwerk.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Seit ca 2 Wochen arbeite ich an einem neuen Projekt, welches ich auf den Namen <a href="http://todoyo.de">"todoyo - notieren. erledigen. freigeben."</a> bzw auf Englisch <a href="http://todoyo.net">"todoyo - note. do. share"</a> getauft habe.<br />
Wie man am Namen erkennen kann geht es um das Thema ToDo-Listen.<br />
<br />
Wie kam es dazu?<br />
 Nun, seit geraumer Zeit bin ich begeisterter Nutzer diverser Google Services wie <a href="http://mail.google.com">Gmail</a>, <a href="http://www.google.com/reader">Google Reader</a>, <a href="http://www.google.com/calendar">Google Calendar</a> oder <a href="http://docs.google.com/">Google Docs</a>.<br />
Diese Anwendungen finde ich deshalb so toll, weil sie großen Wert auf intuitive Bedienbarkeit und Übersichtlichkeit legen und trotzdem eine Menge an Funktionalität bieten. So gibt es jeweile eine Hauptansicht, welche alle Informationen schlicht darstellt und dank <a href="http://de.wikipedia.org/wiki/Ajax_(Programmierung)">Ajax </a>Spielereien eine unterbrechungsfreie Bearbeitung ermöglichen. Hinzu kommt noch, dass ich keine Lust habe Datenbestände zwischen meinem Home-PC und meinem Arbeits-Macbook zu synchronisieren und ich von überall Zugriff darauf habe.<br />
<br />
Etwas was mir noch fehlte war eine entsprechende Anwendung um meine privaten Erledigungen und auch Arbeitsaufgaben und Projektschritte zu verwalten. Dafür habe ich eine zeitlang <a href="http://www.rememberthemilk.com/">Remember-The-Milk</a> genutzt und auch dessen GMail Integration, aber irgendwie war mir das nicht schlicht genug und zu umständlich. Warum also nicht selbst versuchen es besser zu machen, wenn man schonmal PHP Entwickler ist <img src="http://nutwerk.de/templates/default/img/emoticons/wink.png" alt=";-)" style="display: inline; vertical-align: bottom;" class="emoticon" /><br />
<br />
Hinzu kam noch, dass ich unbedingt einmal ein paar neue Komponenten des <a href="http://framework.zend.com">Zend Frameworks</a> ausprobieren wollte, welche ich bislang noch nicht direkt genutzt hatte, wie z.B. <a href="http://framework.zend.com/manual/en/zend.layout.html">Zend_Layout</a> mit dem <a href="http://framework.zend.com/manual/en/zend.controller.actionhelpers.html#zend.controller.actionhelpers.viewrenderer">ViewRenderer</a>, <a href="http://framework.zend.com/manual/en/zend.translate.html">Internationalisierung</a> oder die diversen <a href="http://framework.zend.com/manual/en/zend.service.html">Service</a> Komponenten. <a href="http://jquery.com">jQuery</a> wollte ich mir in dem Zusammenhang auch einmal genauer anschauen.<br />
<br />
Nach ein paar Überlegungen wie ich die Handhabung der Anwendung am effektivsten gestalten könnte, legte ich los und begann erst einmal mit der Kernfunktionalität: den Listen und Aufgaben. Dies ging alles überraschend einfach, da das ZendFramework einem extrem viel des MVC Designs abnimmt und die Applikationsstruktur grob vorgibt. Danach folgten Schritt für Schritt immer mehr Features und Optimierungen.<br />
<br />
Als Template Engine habe ich nach jahrelanger <a href="http://www.smarty.net/">Smarty</a> Nutzung mal wieder reines PHP (mit Short-Open-Tags) benutzt, was einem etwas mehr Freiheiten als Smarty bietet, wobei man aufpassen muss nicht plötzlich Logik in die somit mächtigen Templates zu packen.<br />
Zwischenzeitlich hatte ich einmal versucht, das Projekt auf Smarty umzuschreiben, bin aber daran gescheitert, dass eine Zend_Layout Nutzung dadurch quasi unmöglich wurde und nur mit hässlichen Workarounds funktioniert hätte. Also Änderungen verworfen und weiter mit PHP als Template Sprache.<br />
<br />
Praktisch war, dass ich die Listen- und Aufgaben Funktionalität von todoyo selbst für dessen eigene Entwicklung nutzen und gleichzeitig testen konnte. Mittlerweile ist die <a href="http://todoyo.de/index.php/list/show/Octavian/todoyo">Entwicklungs-Todo-Liste</a> Liste immer länger geworden, da einem natürlich immer mehr interessante Features einfallen, die man realisieren könnte.<br />
<br />
Also auf jeden Fall ein nettes Projekt für zwischendurch. Auch wenn es später vielleicht kaum jemand nutzen wird, so erfüllt es auf jeden Fall meine eigenen Anforderungen, die ich an ToDo-Listen stelle und wird mich in Zukunft in meinem Alltag unterstützen.<br />
<br />
Also, schaut es euch doch einmal an <img src="http://nutwerk.de/templates/default/img/emoticons/smile.png" alt=":-)" style="display: inline; vertical-align: bottom;" class="emoticon" /> 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://nutwerk.de/archives/12-Mein-erster-Webmontag.html" rel="alternate" title="Mein erster Webmontag" />
        <author>
            <name>Marc Jakubowski</name>
                    </author>
    
        <published>2008-04-14T19:22:00Z</published>
        <updated>2008-04-14T19:22:00Z</updated>
        <wfw:comment>http://nutwerk.de/wfwcomment.php?cid=12</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://nutwerk.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=12</wfw:commentRss>
    
            <category scheme="http://nutwerk.de/categories/6-KonferenzenBarCamps" label="Konferenzen/BarCamps" term="Konferenzen/BarCamps" />
    
        <id>http://nutwerk.de/archives/12-guid.html</id>
        <title type="html">Mein erster Webmontag</title>
        <content type="xhtml" xml:base="http://nutwerk.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Vor mittlerweile genau einer Woche war ich zum ersten Mal bei einem <a href="http://webmontag.de/doku.php?id=bonn" title="Webmontag">Webmontag</a>. Dieser fand in Bonn im <a href="http://www.cafe-podcast.de/" title="Café Podcast">Café Podcast</a> statt. Das ist ein nettes Café, welches mit einer kleinen Bühne für Vorträge ausgestattet ist und sich somit optimal für solch eine Veranstaltung eignet.<br />
<br />
Anwesend waren geschätzte 40-50 Leute, was die Erwartungen übertraf. Meine Kollegen <a href="http://www.lostfocus.de/">Dominik</a>, Ben und <a href="http://jm.tosses.info/">Jan Manuel</a> waren ebenfalls am Start.<br />
<br />
Folgende Themen/Projekte wurden in den Sessions vorgestellt: <a href="http://www.mypeak.net">myPEAK.net</a>, <a href="http://cellcast.de">cellcast.de</a>, <a href="http://www.produki.de">produki</a>, <a href="http://dataportability.org">DataPortability Project</a>, <a href="http://de.wikipedia.org/wiki/CSRF">CSRF</a>, Internet in China.<br />
 <a href="http://www.mypeak.net">myPEAK.net</a> ist eine Art Community in der die Mitglieder selbst Wettbewerbe erstellen können. So gibt es zum Beispiel Wettbewerbe wie "Schönster Sonnenuntergang", wo Bilder gepostet werden können und darüber abgestimmt wird, welcher Sonnenuntergang am schönsten abgelichtet wurde. Oder zum Beispiel das beste Musikvideo. Externe Medien können dabei einfach eingebunden werden. Der Sieger dieser Wettstreits erhält Punkte.<br />
<br />
<a href="http://cellcast.de">cellcast.de</a> ist eine Plattform, bei der man eine bestimmte Telefonnummer anruft hinter der sich ein digitaler Anrufbeantworter befindet, der dann das Gespräch aufzeichnet und danach als Podcast zur Verfügung stellt. So kann man mit dem Handy von überall Podcasts oder gar Videocasts aufzeichnen, was unter anderem als Live-Berichterstattung für regionale Sportveranstaltungen genutzt werden könnte. Dazu wurde dann noch eine handliche API präsentiert.<br />
<br />
<a href="http://www.produki.de">produki</a> setzt sich auf den Begriffen "Produkt" und "Wiki" zusammen und ist also ein Produkt-Wiki. Der Sinn besteht darin Pro und Contra Listen über alle möglichen Produkte an einer Stelle zusammenzutragen, so dass man nicht mehr ziellos nach Produktrezensionen googeln muss. Zu jedem Produkt gibt es eine ausführliche Beschreibung mit Bildern und Links. Die Kommentare können je nach Nützlichkeit bewertet werden, so dass für Suchende die hilfreichsten Meinungen zu einem Produkt knapp zusammengefasst werden können. Man kann ebenfalls eine Liste mit allen Produkten, Geräten, Fahrzeugen etc anlegen, die man so besitzt, was ein Zuhörer für potenzielle Einbrecher sehr nützlich fand, wenn der Benutzer zusätzlich seine Adresse hinterlegt <img src="http://nutwerk.de/templates/default/img/emoticons/wink.png" alt=";-)" style="display: inline; vertical-align: bottom;" class="emoticon" /> Das vorgestellte Geschäftsmodell dazu war ebenfalls etwas dubios.<br />
<br />
Das <a href="http://dataportability.org">DataPortability Project</a> ist eine im Moment sehr gehypte Anstrengung mehrer namhafter Firmen, sich auf technische und strategische Konventionen zu einigen wenn es darum geht, Datenbestände von einem (Web 2.0) Portal in ein anderes zu überführen, so dass Benutzer mehrerer solcher Seiten nich überall separat ihre Profile und Datenbestände pflegen müssen. Dabei ist noch nicht ganz klar, ob neben einer Export/Import Lösung auf Benutzerseite, Portale auch direkt Daten miteinander austauschen oder ob es zentrale Server geben soll wo man seine Daten pflegt und die dann von anderen Diensten angezapft werden. Ich halte nur für fragliche wie viele der bekanntesten Seiten überhaupt Interesse daran haben ihr Daten zu teilen oder auf einem gemeinsamen Server zu belassen. Die Antwort des Vortragenden war in etwa "Wenn ein paar kleine erstmal den Anfang gemacht haben, werden die großen, wie Facebook, mitziehen müssen". Würde mich wundern, da die Benutzerdaten ja das einzige sind, was diese milliardenschweren Verkaufsbeträge der SocialNetworks annähernd rechtfertigen.<br />
<br />
Danach versuchte <a href="http://blog.fukami.io">fukami</a> (übrigens ein ex-Kollege, den ich leider nicht mehr kennengelernt habe) dem Publikum, in dem sich "angeblich" (hat sich auf Nachfrage keiner gemeldet) keine Entwickler befanden, die CSRF Problematik näher zu bringen. Das Thema war nich so ganz einfach zu erklären, aber am Ende konnte sich doch jeder etwas darunter vorstellen. Zumindest sollte jedem klar geworden sein, welche Gefahren von dieser Manipulationstechnik ausgehen können. Auf entsprechende Gegenmaßnahmen (neben Form-Token) hätte gerne auch noch ausführlicher eingegangen werden können.<br />
<br />
Zum Schluß kam der meiner Meinung nach interessanteste Vortrag, indem es um das "Internet in China" ging. Der Referent erzählte dabei von seiner Reise durch Asien und wie Chinesen das Internet erleben, vor allem mit starken Bezug zu ihrer Kultur und Geschichte. So lernte man beispielsweise, dass sie den ganzen Tag in gigantischen Internet Cafés abhängen wobei es eine 20%ige Nichtraucherquote gibt ;D Es wurde von "Kreisen" erzählt, in denen sie die Welt begreifen und wie das Regime ihre Zensur durchsetzt. Ich war erstaunt, dass dort die hier so bekannten Seiten wie Google oder Youtube garnicht genutzt werden, sondern dass sie einen eigenen Gegenpart zu Google haben und 140 konkurrierende Videoportale statt nur Youtube. Es wurde auch auf das Thema "Kopien" eingegangen. In China ist es für jemanden eine Ehre, wenn er so gut in seinem Handwerk (z.b. Kaligraphie) ist, dass andere ihn kopieren, also wird solang geübt bis die Kopie exakt so aussieht wie das Original des Gurus. Nur blöd, dass die hiesigen Erfinder diese Ehre nicht zu schätzen wissen <img src="http://nutwerk.de/templates/default/img/emoticons/wink.png" alt=";-)" style="display: inline; vertical-align: bottom;" class="emoticon" /><br />
Bleibt abzuwarten wann die ersten erfolgreichen Seiten aus China auch nach Europa rüberschwappen und den Markt aufmischen.<br />
<br />
Neben den Sessions wurde natürlich auch reichlich gefachsimpelt, Fotos gemacht und Bier und Kaffee geschlürft.<br />
Angeblich sollten auch noch Videomitschnitte der Vorträge veröffentlich werden.<br />
<br />
Ingesamt war es eine sehr angenehme Veranstaltung, die anscheinend am 2. Juni 2008 wiederholt wird und ich mir sicherlich nicht entgehen lassen werden. <br />
Vielleicht werde ich ja dort auch mal etwas präsentieren <img src="http://nutwerk.de/templates/default/img/emoticons/smile.png" alt=":-)" style="display: inline; vertical-align: bottom;" class="emoticon" /> 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://nutwerk.de/archives/11-me-PHP-Unconference.html" rel="alternate" title="me @ PHP Unconference" />
        <author>
            <name>Marc Jakubowski</name>
                    </author>
    
        <published>2008-03-27T09:22:00Z</published>
        <updated>2008-03-27T09:22:00Z</updated>
        <wfw:comment>http://nutwerk.de/wfwcomment.php?cid=11</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://nutwerk.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=11</wfw:commentRss>
    
            <category scheme="http://nutwerk.de/categories/6-KonferenzenBarCamps" label="Konferenzen/BarCamps" term="Konferenzen/BarCamps" />
    
        <id>http://nutwerk.de/archives/11-guid.html</id>
        <title type="html">me @ PHP Unconference</title>
        <content type="xhtml" xml:base="http://nutwerk.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Am 26/27. April diesen Jahres werde ich das erste Mal das Vergnügen haben an einer <a href="http://en.wikipedia.org/wiki/Unconference">Unconference</a> teilzunehmen.<br />
Genauer gesagt geht es mit meinem Kollegen <a href="http://usrportage.de">Lars Strojny</a> zur <a href="http://www.php-unconference.de/">PHP Unconference</a> nach Hamburg.<br />
<br />
Nachdem ich in den letzten Jahren Entwickler-Veranstaltungen wie <a href="http://www.multimediatreff.de/">Multimediatreff</a>, <a href="http://froscon.de/">frOSCon</a> und <a href="http://weekender.hartes-php.de/">PHP Weekender</a> besucht habe, wird dies nun meine erste Unconference sein. Ich weiß noch nicht genau was mich dort erwartet und wie das Ganze ablaufen wird, aber von der Beschreibung her scheint es ein angenehmes Zusammentreffen von Gleichgesinnten und bekannten Personen aus der PHP-Welt zu werden, wobei mehr oder weniger spontan zahlreiche Sessions zu den verschiedensten Themen rund um Softwareentwicklung gehalten werden.<br />
<br />
Wahrscheinlich werde ich mit Lars zusammen unsere Business-Erweiterung zum <a href="http://framework.zend.com">Zend Framework</a> vorstellen bzw. damit verbundene Themen. Ansonsten interessieren mich natürlich alles rund um Communities,  Social Networking und das Zend Framework. Ob ich daraus selbst noch eine Session basteln könnte werden die nächsten Wochen zeigen.<br />
<br />
Bin gespannt <img src="http://nutwerk.de/templates/default/img/emoticons/smile.png" alt=":-)" style="display: inline; vertical-align: bottom;" class="emoticon" />  
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://nutwerk.de/archives/10-Neues-Blog-Theme.html" rel="alternate" title="Neues Blog Theme" />
        <author>
            <name>Marc Jakubowski</name>
                    </author>
    
        <published>2008-02-26T15:22:00Z</published>
        <updated>2008-02-26T15:22:00Z</updated>
        <wfw:comment>http://nutwerk.de/wfwcomment.php?cid=10</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://nutwerk.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=10</wfw:commentRss>
    
            <category scheme="http://nutwerk.de/categories/1-Sonstiges" label="Sonstiges" term="Sonstiges" />
    
        <id>http://nutwerk.de/archives/10-guid.html</id>
        <title type="html">Neues Blog Theme</title>
        <content type="xhtml" xml:base="http://nutwerk.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Wie man sieht habe ich mich für ein neues Theme für mein Blog entschieden.<br />
Das alte hatte ein paar merkwürdige Fehler, so dass im IE der Text zu einem lustigen Buchstabengulasch zusammengestaucht wurde.<br />
Das hier find ich nun schön schlicht und klar strukturiert. Gefällt <img src="http://nutwerk.de/templates/default/img/emoticons/smile.png" alt=":-)" style="display: inline; vertical-align: bottom;" class="emoticon" /><br />
<br />
Vielleicht motiviert mich das neue Theme ja auch dazu etwas mehr zu bloggen <img src="http://nutwerk.de/templates/default/img/emoticons/wink.png" alt=";-)" style="display: inline; vertical-align: bottom;" class="emoticon" /><br />
<br />
Achja, <a href="http://garv.in/serendipity/archives/1226-Jetzt-vorbestellen-Das-Serendipity-Handbuch.html" title="Garvin Hicking">Garvin</a> hat sein <a href="http://www.amazon.de/dp/3937514546" title="Serendipity Buch">Buch</a> zu <a href="http://s9y.org/" title="Serendipity">Serendipity</a> fertiggestellt (der besten Blog-Software der Welt, mit der auch dieses Blog hier läuft), also los kaufen!  
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://nutwerk.de/archives/9-Debuglib-fuer-PHP5.html" rel="alternate" title="Debuglib für PHP5" />
        <author>
            <name>Marc Jakubowski</name>
                    </author>
    
        <published>2007-11-12T15:01:00Z</published>
        <updated>2007-11-12T15:01:00Z</updated>
        <wfw:comment>http://nutwerk.de/wfwcomment.php?cid=9</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://nutwerk.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=9</wfw:commentRss>
    
            <category scheme="http://nutwerk.de/categories/2-Web-Entwicklung" label="Web / Entwicklung" term="Web / Entwicklung" />
    
        <id>http://nutwerk.de/archives/9-guid.html</id>
        <title type="html">Debuglib für PHP5</title>
        <content type="xhtml" xml:base="http://nutwerk.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Tulpe hat eine neue Version seiner netten Debug-Bebliothek veröffentlicht, zu finden unter <a href="http://www.atomar.de/debuglib/"  title="Debuglib">http://www.atomar.de/debuglib/</a>.<br />
<br />
Das Tool ist sehr schick um alle Variablen, die während der Scriptlaufzeit gesetzt wurden, strukturiert auszugeben. Arrays und Objekte werden dabei verschachtelt dargestellt wobei einige Formatierungsoptionen zur Verfügung stehen.<br />
<br />
Auf jeden Fall um einiges schicker als echo, var_dump oder print_r <img src="http://nutwerk.de/templates/default/img/emoticons/wink.png" alt=";-)" style="display: inline; vertical-align: bottom;" class="emoticon" />  
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://nutwerk.de/archives/8-Dont-be-evil.html" rel="alternate" title="Don´t be evil" />
        <author>
            <name>Marc Jakubowski</name>
                    </author>
    
        <published>2007-09-06T10:45:00Z</published>
        <updated>2007-09-06T10:45:00Z</updated>
        <wfw:comment>http://nutwerk.de/wfwcomment.php?cid=8</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://nutwerk.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=8</wfw:commentRss>
    
            <category scheme="http://nutwerk.de/categories/1-Sonstiges" label="Sonstiges" term="Sonstiges" />
    
        <id>http://nutwerk.de/archives/8-guid.html</id>
        <title type="html">Don´t be evil</title>
        <content type="xhtml" xml:base="http://nutwerk.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                So lautet Googles Motto. <br />
Spätestens aber wenn man so lustige Sachen wie <a href="http://www.golem.de/0709/54556.html"  title="Artikel">das hier</a> liest, möchte man meinen, dass die doch nicht so nett sind.<br />
<br />
Aber immerhin sind sie ja so nett und warnen einen in den AGBs, dass sie die Daten nach belieben nutzen wollen, wobei dies andere Seiten wohl genauso machen, nur heimlich.<br />
Bei GMail fand ichs ja schon lustig, dass man bei der Anzeige einer Email passend zum Inhalt der Mail Werbung angezeigt bekommt, aber könnte man ja noch als nette Dienstleistung auslegen <img src="http://nutwerk.de/templates/default/img/emoticons/wink.png" alt=";-)" style="display: inline; vertical-align: bottom;" class="emoticon" /><br />
<br />
Naja ich nutze trotzdem regelmäßig diverse Produkte von Google, wie zum Beispiel GMail, Calendar, Reader, AdSense, Maps weil es einfach innovative Angebote sind die großen Wert auf Nutzbarkeit und Einfachheit legen was ich sehr ansprechend finde. Muss man eben nur aufpassen was man dort für Daten zur Verfügung stellen möchte.<br />
<br />
UPDATE: <a href="http://www.heise.de/newsticker/meldung/95613/from/rss09"  title="Gegendarstellung">Laut einem Google Pressesprecher</a> ist es wohl doch nicht so schlimm wie befürchtet <img src="http://nutwerk.de/templates/default/img/emoticons/wink.png" alt=";-)" style="display: inline; vertical-align: bottom;" class="emoticon" />  
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://nutwerk.de/archives/7-Alles-NEUe-macht-der-Juli.html" rel="alternate" title="Alles NEUe macht der Juli" />
        <author>
            <name>Marc Jakubowski</name>
                    </author>
    
        <published>2007-07-30T07:16:00Z</published>
        <updated>2007-07-30T07:16:00Z</updated>
        <wfw:comment>http://nutwerk.de/wfwcomment.php?cid=7</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://nutwerk.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=7</wfw:commentRss>
    
            <category scheme="http://nutwerk.de/categories/4-Persoenliches" label="Persönliches" term="Persönliches" />
    
        <id>http://nutwerk.de/archives/7-guid.html</id>
        <title type="html">Alles NEUe macht der Juli</title>
        <content type="xhtml" xml:base="http://nutwerk.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Was ein aufregender Monat <img src="http://nutwerk.de/templates/default/img/emoticons/smile.png" alt=":-)" style="display: inline; vertical-align: bottom;" class="emoticon" /><br />
Da schaut man einmal völlig unbedarft im Netz nach was der Markt im Moment an Stellenangeboten hergibt und ehe man sich versieht hat man einen neuen Job.<br />
<br />
In meinem Fall schaute ich mich bei <a href="http://www.xing.de"  title="Xing">Xings</a> neuer Jobbörse nach Angeboten als PHP Entwickler im Raum Köln-Bonn um und wurde relativ schnell fündig. <a href="http://neu.de"  title="Neu.de">Neu.de</a> war auf der Suche nach Entwicklern mit Erfahrung und Interesse an <a href="http://de.wikipedia.org/wiki/Web_2.0"  title="Web2.0">Web 2.0</a> Technologien. Also genau das, womit ich mich seit Jahren beschäftige.<br />
Habe daraufhin einen Entwickler angeschrieben, der mich ermutigte mich einfach mal zu bewerben. Dies tat ich dann auch, wobei es garnicht so einfach war nach 6 Jahren wieder eine Email-Bewerbung zu schreiben, aber war doch recht zufrieden mit dem Ergebnis. Kurz darauf erhielt ich die Einladung zum Vorstellungsgespräch, welches sehr positiv verlief, so dass ich eine Zusage erhielt und nun voraussichtlich im Oktober anfange <img src="http://nutwerk.de/templates/default/img/emoticons/smile.png" alt=":-)" style="display: inline; vertical-align: bottom;" class="emoticon" /><br />
<br />
Einziger Wermutstropfen ist noch die Vorstellung meine netten Kollegen hier hinter mir zu lassen, aber im Gegenzug freue ich mich auch schon auf die neuen Herausforderungen und das neue Team, welches einen sehr sympathischen Eindruck machte.<br />
<br />
Also, falls du Single bist, einfach mal bei <a href="http://neu.de"  title="Neu.de">neu.de</a> vorbeischauen =)  
            </div>
        </content>
        
    </entry>

</feed>