<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    <title>Mayflower Blog - E-Commerce</title>
    <link>http://blog.mayflower.de/</link>
    <description>the php &amp; javascript experts</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.5.3 - http://www.s9y.org/</generator>
    <pubDate>Thu, 08 Dec 2011 08:22:52 GMT</pubDate>

    <image>
        <url>http://blog.mayflower.de/templates/mayflower/img/s9y_banner_small.png</url>
        <title>RSS: Mayflower Blog - E-Commerce - the php &amp; javascript experts</title>
        <link>http://blog.mayflower.de/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>08.12. Agilere Datenbankentwicklung</title>
    <link>http://blog.mayflower.de/archives/801-08.12.-Agilere-Datenbankentwicklung.html</link>
            <category>E-Commerce</category>
            <category>Misc</category>
            <category>Open Source</category>
            <category>PHP-DE</category>
    
    <comments>http://blog.mayflower.de/archives/801-08.12.-Agilere-Datenbankentwicklung.html#comments</comments>
    <wfw:comment>http://blog.mayflower.de/wfwcomment.php?cid=801</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.mayflower.de/rss.php?version=2.0&amp;type=comments&amp;cid=801</wfw:commentRss>
    

    <author>nospam@example.com (Alberto Assmann)</author>
    <content:encoded>
    Agile Entwicklung ist gescheitert.&lt;br /&gt;
Jedenfalls auf Datenbankseite.&lt;br /&gt;
&lt;br /&gt;
Agile Entwicklung ist mehr als nur Scrum, hierzu kommen in den meisten Projekten noch weitere Tools und Vorgehensweisen zum Einsatz, um schnell auf neue Anforderungen zu reagieren.&lt;br /&gt;
Hierzu zählen in der eigentlichen Entwicklung Continuous Improvements, also das stetige Verbessern des Quellcode innerhalb eines Projektes, welche zum Beispiel durch Code Reviews und Refactorings unterstützt werden können.&lt;br /&gt;
 &lt;br /&gt;
Bedingt durch die sich schnell ändernden Anforderungen ändert sich auch der Code schneller und häufiger.&lt;br /&gt;
Um sich dennoch abzusichern, kommen hier Tools wie automatisierte Unittests, ausgeführt Beispielsweise in einer Continuous Integration Umgebung zum Einsatz.&lt;br /&gt;
&lt;br /&gt;
Inzwischen haben viele Projekte zudem erkannt, dass die kurzen Entwicklungszyklen, die mithilfe, eben genannter Techniken möglich werden,  entsprechend kurze Releasezyklen erfordern.&lt;br /&gt;
Im Idealfall führt dies zu einem Continuous Deployment, also der Fähigkeit ein Feature sofort nach der Fertigstellung zu releasen.&lt;br /&gt;
&lt;br /&gt;
Ein Prozess ist jedoch immer nur so gut, wie seine Teilprozesse.&lt;br /&gt;
An dieser Stelle sollten wir unseren Blick auf die Datenbank lenken.&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
	&lt;li&gt;Wie läuft hier die Entwicklung?&lt;/li&gt;
	&lt;li&gt;Wie automatisieren wir Datenbankupdates?&lt;/li&gt;
&lt;li&gt;Was für einen Stand hat unsere Datenbank auf Produktiv? Auf Staging? Auf dem Previewsystem?&lt;/li&gt;
&lt;li&gt;Wie sichern wir Datenverluste bei nachträglichen Änderungen ab?&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Bei uns lief es im Projekt bis vor kurzem so, dass vor einem Update der Datenbank händisch geprüft werden musste welche Änderungen noch nicht in der Datenbank existieren um dann entsprechende SQL Dateien zusammenfügen zu können, die die neuen Änderungen enthielten.&lt;br /&gt;
So ein Vorgehen ist nicht nur Fehleranfällig sondern auch Aufwendig.&lt;br /&gt;
Am stärksten Bemerkbar machte sich dies, beim migrieren von Daten, was bedeutete, dass die Reihenfolge von SQL Dateien und Migrationsskripten strikt beachtet werden musste.&lt;br /&gt;
&lt;br /&gt;
Refactorings hingegen liefen so ab, dass die neue Datenstruktur in Form von neuen Tabellen angelegt wurde, die Daten mithilfe von Migrationsskripten überführt wurden und die ursprünglichen Tabellen erst beim nächsten Release vollständig gelöscht wurden, sofern dies nicht vergessen wurde.&lt;br /&gt;
&lt;br /&gt;
Dieses Vorgehen kostete viel Zeit und Nerven, weshalb eine Alternative gesucht wurde.&lt;br /&gt;
&lt;br /&gt;
Vor kurzem haben wir als Team ein neues Tool gefunden welches uns viel Arbeit abnimmt und vor allem zusätzliche Sicherheit auf Datenbankseite gibt.&lt;br /&gt;
&lt;br /&gt;
Dies ist Liquibase, ein in Java geschriebenes Tool zum Refactoring und automatischen Update der Datenbank, welches unter der Apache 2.0 Lizenz zur freien Nutzung zur Verfügung steht.&lt;br /&gt;
&lt;br /&gt;
Liquibase bringt eine eigene Beschreibungssprache für Datenbankänderungen mit, die auf XML basiert.&lt;br /&gt;
Durch diese abstrakte Beschreibung der Änderungen in XML wird Datenbankunabhängigkeit ermöglicht.&lt;br /&gt;
So kann Liquibase mit jeder Datenbank umgehen für die ein JDBC Treiber verfügbar ist, so zum Beispiel MySQL, Microsoft SQL Server, Oracle, PostgreSQL, SQLite, Apache Derby und vielen weiteren.&lt;br /&gt;
&lt;br /&gt;
Definiert werden die Änderungen als sogenannte &lt;i&gt;Changesets&lt;/i&gt;, die in beliebiger Anzahl innerhalb eines &lt;i&gt;DatabaseChangelogs&lt;/i&gt; vorkommen können.&lt;br /&gt;
Jedes &lt;i&gt;Changeset&lt;/i&gt; setzt die Angabe eines &lt;b&gt;Autors&lt;/b&gt; und einer &lt;b&gt;Id&lt;/b&gt; voraus, wobei die &lt;b&gt;Id&lt;/b&gt; nur innerhalb des &lt;i&gt;DatabaseChangelogs&lt;/i&gt; eindeutig sein muss.&lt;br /&gt;
&lt;br /&gt;
Ein einfaches &lt;i&gt;Changelog&lt;/i&gt;, der eine einzelne Tabelle mit 2 Spalten, id und name, anlegt sieht wie folgt aus:

&lt;pre name=&quot;code&quot; class=&quot;xml&quot;&gt;
&lt;databaseChangeLog  xmlns=&quot;http://www.liquibase.org/xml/ns/dbchangelog&quot;  xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;  xsi:schemaLocation=&quot;http://www.liquibase.org/xml/ns/dbchangelog         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd&quot;&gt; 	
	&lt;changeSet id=&quot;1&quot; author=&quot;alberto.assmann@mayflower.de&quot;&gt;        				
		&lt;createTable tableName=&quot;department&quot;&gt;            		
			&lt;column name=&quot;id&quot; type=&quot;int&quot;&gt;                			
				&lt;constraints primaryKey=&quot;true&quot; nullable=&quot;false&quot;/&gt;            		
			&lt;/column&gt;            		
			&lt;column name=&quot;name&quot; type=&quot;varchar(50)&quot;&gt;                					
				&lt;constraints nullable=&quot;false&quot;/&gt;            		
			&lt;/column&gt;            	
		&lt;/createTable&gt;    
	&lt;/changeSet&gt;
&lt;/databaseChangeLog&gt;
&lt;/pre&gt;  
&lt;br /&gt;
Ausgeführt werden kann dieses Changelog entweder innerhalb eines vorhandenen Buildsystems, hierfür gibt es Tasks in ANT, Maven, Grails, Spring und in Phing als Erweiterung unter &lt;a href=https://github.com/bitExpert/liquibase-phing&gt;https://github.com/bitExpert/liquibase-phing&lt;/a&gt;, oder über die Kommandozeile:

&lt;pre name=&quot;code&quot; class=&quot;bash&quot;&gt;
java -jar liquibase.jar \
    --driver=com.mysql.jdbc.Driver \     
    --classpath=databasedriver/mysql-connector-java-5.1.17-bin.jar \     
    --changeLogFile=/path/to/changelog.xml \     
    --url=&quot;jdbc:mysql://127.0.0.1:3306/&lt;DB Name&gt;&quot; \     
   --username=&lt;UserName&gt; \     
   --password=&lt;Password&gt; \     
update
&lt;/pre&gt;
&lt;br /&gt;
Bei diesem Aufruf wird der Treibertyp, in unserem Fall JDBC MySQL, das Verzeichnis des Treibers, der Pfad zum auszuführenden Changelog, sowie URL der Datenbank, Nutzername und Passwort angegeben und der Befehl update, um Liquibase zu veranlassen, dass alle Änderungen eingespielt werden, die noch nicht in der Datenbank sind.&lt;br /&gt;
Am Rande sei hier bemerkt, dass der JDBC Treiber für die jeweilige Datenbank nicht Teil von Liquibase ist, ergo separat heruntergeladen werden muss.&lt;br /&gt;
&lt;br /&gt;
Wer sich jetzt fragt, woher Liquibase wissen kann, was bereits in der Datenbank vorhanden ist und was geupdatet werden muss, dem möge folgende kurze Erklärung dienen:&lt;br /&gt;
Liquibase speichert in der Tabelle &lt;i&gt;DATABASECHANGELOG&lt;/i&gt; Metainformationen zu jedem erfolgtem Update ab.&lt;br /&gt;
Hierzu gehört für jedes ausgeführte &lt;i&gt;Changeset&lt;/i&gt; der &lt;b&gt;Autor&lt;/b&gt;, die &lt;b&gt;Id&lt;/b&gt;, das &lt;b&gt;Ausführungsdatum&lt;/b&gt; und eine &lt;b&gt;Hashsumme&lt;/b&gt; des &lt;i&gt;Changesets&lt;/i&gt;.&lt;br /&gt;
Die &lt;b&gt;Hashsumme&lt;/b&gt; wird bei jedem neuen Update für alle bereits vorhandenen &lt;i&gt;Changesets&lt;/i&gt; geprüft, so dass nachträgliche Änderungen an einem bereits ausgeführten &lt;i&gt;Changeset&lt;/i&gt; nicht mehr möglich sind.&lt;br /&gt;
Es gibt zwar die Möglichkeit mit dem Kommandozeilenbefehl &lt;i&gt;clearChecksums&lt;/i&gt; alle Hashsummen zu löschen, jedoch ist die saubere Vorgehensweise bei einem Fehler ein neues &lt;i&gt;Changeset&lt;/i&gt; anzulegen, welches den Fehler behebt.&lt;br /&gt;
&lt;br /&gt;
Der größte Vorteil, den man mit echten &lt;i&gt;Changesets&lt;/i&gt; gewinnt, sind die &lt;i&gt;Rollbacks&lt;/i&gt;.&lt;br /&gt;
Für alle Änderungen die neue Tabellen, Spalten oder ähnliches anlegen, oder bestehende Verändern, bietet Liquibase automatische &lt;i&gt;Rollbacks&lt;/i&gt;.&lt;br /&gt;
Diese werden wichtig, sobald beim updaten etwas schief geht, denn dann wird der &lt;i&gt;Rollback&lt;/i&gt; ausgeführt, so dass eine inkonsistente Datenbank verhindert wird.
Jedoch sind die Rollbacks auch in der Entwicklung sehr nützlich, da jederzeit zu einem bestimmten Stand der Datenbank zurück gekehrt werden kann.&lt;br /&gt;
Dies ist Changesetabhängig möglich, mit &lt;i&gt;rollbackCount n&lt;/i&gt;, welches die letzten &lt;i&gt;n Changesets&lt;/i&gt; zurück nimmt, Datumsabhängig mit &lt;i&gt;rollbackDate &amp;lt;date&amp;gt;&lt;/i&gt;, welches alle &lt;i&gt;Changesets&lt;/i&gt; die neuer als das angegebene Datum sind zurück nimmt und &lt;i&gt;Tag&lt;/i&gt; abhängig.&lt;br /&gt;
Letzteres kehrt dabei zu einem in Liquibase gesicherten Stand der Datenbank zurück, einem sogenanntem &lt;i&gt;Tag&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
Für alle &lt;i&gt;Rollbacks&lt;/i&gt;, die nicht mit einem Automatismus abgedeckt werden, kann auch manuell ein &lt;i&gt;Rollback&lt;/i&gt; definiert werden.&lt;br /&gt;
Dies ist zum Beispiel der Fall wenn das Löschen einer Tabelle fehlschlägt und darauf entsprechend reagiert werden soll.&lt;br /&gt;
Das Definieren geschieht innerhalb des entsprechenden &lt;i&gt;Changesets&lt;/i&gt;, indem nach der eigentlichen Anweisung eine oder mehrere Rollbackanweisungen geschrieben werden,  die alle innerhalb des Tags &lt;i&gt;&amp;lt;rollback&amp;gt;&lt;/i&gt; stehen müssen.&lt;br /&gt;
&lt;br /&gt;
In den meisten Teams ist Dokumentation nicht gerade beliebt, jedoch ein notwendiges Übel um neuen Teammitgliedern den Einstieg zu erleichtern und nachvollziehbar zu machen, welche Änderungen wann gemacht wurden.&lt;br /&gt;
Auch hier Unterstützt uns Liquibase.
Mit dem Befehl &lt;i&gt;dbDoc&lt;/i&gt; und einer nachfolgenden Pfadangabe ist es möglich, eine Dokumentation aller Änderungen zu generieren, die mit dem angegebenen &lt;i&gt;DatabaseChangeLog&lt;/i&gt; durchgeführt werden würden.&lt;br /&gt;
Die dabei entstehende Änderungsdokumentation ist dabei stark an Java-Doc angelehnt.&lt;br /&gt;
&lt;br /&gt;
Am meisten Zeit bei der Datenbankentwicklung mit Liquibase verschlingt das Schreiben der &lt;i&gt;Changesets&lt;/i&gt;.&lt;br /&gt;
Zum Glück stellt auch hier Liquibase ein Tool bereit.&lt;br /&gt;
Die Methode &lt;i&gt;diffChangeLog&lt;/i&gt; generiert anhand der Unterschiede zwischen zwei Datenbanken die entsprechenden &lt;i&gt;Changesets&lt;/i&gt;.&lt;br /&gt;
Der Kommandozeilenaufruf dazu sieht ähnlich aus, wie beim updaten der Datenbank, jedoch werden zusätzlich die Daten der zweiten Datenbank angegeben, gegen welche geprüft wird:
&lt;pre name=&quot;code&quot; class=&quot;xml&quot;&gt;
java -jar liquibase.jar     \
	[...]    
	--changeLogFile=../data/sql/generatedChangelog.xml     \
	diffChangeLog   \  
	--referenceUrl=&lt;JDBC URL&gt;  \   
	--referenceUsername=&lt;BENUTZER NAME&gt; \     	
	--referencePassword=&lt;PASSWORT&gt;
&lt;/pre&gt;
&lt;br /&gt;
Die neuen &lt;i&gt;Changesets&lt;/i&gt; werden im angegebenen &lt;i&gt;changeLogFile&lt;/i&gt; gespeichert.
Dabei werden sowohl &lt;i&gt;Stored Procedures&lt;/i&gt; und &lt;i&gt;Functions&lt;/i&gt;, als auch &lt;i&gt;Trigger&lt;/i&gt; und &lt;i&gt;Check Constraints&lt;/i&gt; ignoriert.&lt;br /&gt;
&lt;br /&gt;
Die Unterschiede können mit Liquibase auch zwischen verschiedenen Datenbanksystemen ermittelt werde, beispielsweise einer MySQL und einer SQLite Datenbank.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Auch wenn die Einarbeitung in Liquibase einige Zeit erfordert und vor allem eine Umstellung in der Arbeitsweise, so möchte ich dieses geniale Tool im täglichen Arbeiten nicht mehr missen, da uns als Team damit viele Sorgen und Mehraufwände abgenommen werden. 
    </content:encoded>

    <pubDate>Wed, 07 Dec 2011 10:39:26 +0100</pubDate>
    <guid isPermaLink="false">http://blog.mayflower.de/archives/801-guid.html</guid>
    <category>agile entwicklung</category>
<category>automatisierung</category>
<category>datenbankentwicklung</category>
<category>deployment</category>
<category>liquibase</category>

</item>
<item>
    <title>Disruptive Kraft von OpenSource im E-Commerce</title>
    <link>http://blog.mayflower.de/archives/529-Disruptive-Kraft-von-OpenSource-im-E-Commerce.html</link>
            <category>E-Commerce</category>
            <category>Open Source</category>
            <category>OXID</category>
    
    <comments>http://blog.mayflower.de/archives/529-Disruptive-Kraft-von-OpenSource-im-E-Commerce.html#comments</comments>
    <wfw:comment>http://blog.mayflower.de/wfwcomment.php?cid=529</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://blog.mayflower.de/rss.php?version=2.0&amp;type=comments&amp;cid=529</wfw:commentRss>
    

    <author>nospam@example.com (Björn Schotte)</author>
    <content:encoded>
    &lt;p&gt;
Meine Keynote auf der OXID Commons 2010. Ein großer Dank gilt an die Veranstalter - mit mehr als 250 Teilnehmern hat sich die OXID Commons zu einer prächtigen Konferenz entwickelt, auf der Business, Community und Technologie nicht zu kurz kommen. Grandios die visionären Einblicke von Roland Fesenmayr in seiner Eröffnung - &lt;a href=&quot;http://www.excitingcommerce.de/2010/05/oxid-commons-2010.html&quot;&gt;Geschäftsmodelle bestimmen die Software, und nicht umgekehrt&lt;/a&gt;. Bilder von der Konferenz &lt;a href=&quot;http://www.oxid-esales.com/de/news/oxid-commons-2010/bilder&quot;&gt;hier&lt;/a&gt;, und natürlich auch die &lt;a href=&quot;http://www.oxid-esales.com/de/news/oxid-commons-2010/live-stream&quot;&gt;Videomitschnitte&lt;/a&gt;.
&lt;/p&gt;
&lt;div style=&quot;width:425px&quot; id=&quot;__ss_4032678&quot;&gt;&lt;strong style=&quot;display:block;margin:12px 0 4px&quot;&gt;&lt;a href=&quot;http://www.slideshare.net/mayflowergmbh/disruptive-kraft-von-open-source-im-ecommerce&quot; title=&quot;Disruptive Kraft von Open Source im E-Commerce&quot;&gt;Disruptive Kraft von Open Source im E-Commerce&lt;/a&gt;&lt;/strong&gt;&lt;object id=&quot;__sse4032678&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=disruptivekraftvonopensourceime-commerce-100510034947-phpapp02&amp;stripped_title=disruptive-kraft-von-open-source-im-ecommerce&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;/&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;/&gt;&lt;embed name=&quot;__sse4032678&quot; src=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=disruptivekraftvonopensourceime-commerce-100510034947-phpapp02&amp;stripped_title=disruptive-kraft-von-open-source-im-ecommerce&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style=&quot;padding:5px 0 12px&quot;&gt;View more &lt;a href=&quot;http://www.slideshare.net/&quot;&gt;presentations&lt;/a&gt; from &lt;a href=&quot;http://www.slideshare.net/mayflowergmbh&quot;&gt;Mayflower GmbH&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt; 
    </content:encoded>

    <pubDate>Mon, 10 May 2010 14:52:09 +0200</pubDate>
    <guid isPermaLink="false">http://blog.mayflower.de/archives/529-guid.html</guid>
    
</item>
<item>
    <title>Technik für die Show - Vortrag auf der OXID Commons</title>
    <link>http://blog.mayflower.de/archives/682-Technik-fuer-die-Show-Vortrag-auf-der-OXID-Commons.html</link>
            <category>E-Commerce</category>
            <category>OXID</category>
    
    <comments>http://blog.mayflower.de/archives/682-Technik-fuer-die-Show-Vortrag-auf-der-OXID-Commons.html#comments</comments>
    <wfw:comment>http://blog.mayflower.de/wfwcomment.php?cid=682</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.mayflower.de/rss.php?version=2.0&amp;type=comments&amp;cid=682</wfw:commentRss>
    

    <author>nospam@example.com (Björn Schotte)</author>
    <content:encoded>
    &lt;blockquote&gt;
Stillstand ist Rückschritt, das gilt auch und vor allem für Applikationen im Netz. Eine auf die Kundenstruktur zugeschnittene Lösung wird durch Oxid ersetzt. Dabei bleibt die Herausforderung einer heterogenen Kundenstruktur im B2B-Bereich, sowie die Anpassung von Oxid als Shopping-Platform an die hauseigene Warenwirtschaft als Führendes System. Steinigke Showtechnic hat den Schritt getan und sich auf die Realisierung im Rahmen von Scrum eingelassen. Dabei wurde Oxid per REST an die Warenwirtschaft angepasst und die interne Produktsuche durch eine Lösung auf Basis von Apache Solr ersetzt. Steffen Hartmann und Martin Brotzeller schildern die Erfahrungen aus zwei Perspektiven - der des Product Owners (Kunde) und der des Teams, das die Neuentwicklung umsetzte.
&lt;/blockquote&gt;
&lt;p&gt;
Unter diesem Motto halten Steffen Hartmann und Martin Brotzeller einen &lt;a href=&quot;http://www.oxid-esales.com/de/news/oxid-commons-2011/programm&quot;&gt;Vortrag auf der OXID Commons 2011&lt;/a&gt;, in der kommenden Woche am 5. Mai. Es erwarten Sie spannende Einblicke in ein Projekt mit über 20 Mannmonaten Entwicklungszeit und über 17.000 Artikeln.
&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;
Mehr Infos zum neuen Online Shop von Steinigke zeigt dieses Video:
&lt;/p&gt;
&lt;iframe width=&quot;560&quot; height=&quot;349&quot; src=&quot;http://www.youtube.com/embed/Q9bCAQVJj6c&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt; 
    </content:encoded>

    <pubDate>Fri, 29 Apr 2011 14:34:28 +0200</pubDate>
    <guid isPermaLink="false">http://blog.mayflower.de/archives/682-guid.html</guid>
    <category>oxid</category>

</item>
<item>
    <title>Oxid Commons and Unconference 2011</title>
    <link>http://blog.mayflower.de/archives/686-Oxid-Commons-and-Unconference-2011.html</link>
            <category>E-Commerce</category>
            <category>OXID</category>
    
    <comments>http://blog.mayflower.de/archives/686-Oxid-Commons-and-Unconference-2011.html#comments</comments>
    <wfw:comment>http://blog.mayflower.de/wfwcomment.php?cid=686</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.mayflower.de/rss.php?version=2.0&amp;type=comments&amp;cid=686</wfw:commentRss>
    

    <author>nospam@example.com (Martin Brotzeller)</author>
    <content:encoded>
    On Thursday, May 5th, Oxid arranged their Commons fair for the third time. I was there and gave a talk about our experiences with the new Oxid EE shop, on Friday i attended the Unconference there. &lt;br /&gt;&lt;a href=&quot;http://blog.mayflower.de/archives/686-Oxid-Commons-and-Unconference-2011.html#extended&quot;&gt;Continue reading &quot;Oxid Commons and Unconference 2011&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Mon, 09 May 2011 11:02:44 +0200</pubDate>
    <guid isPermaLink="false">http://blog.mayflower.de/archives/686-guid.html</guid>
    <category>conference</category>
<category>e-commerce</category>
<category>ecommerce</category>
<category>europe</category>
<category>events</category>
<category>oxid</category>
<category>unconference</category>

</item>
<item>
    <title>Zahlungsabwicklung über die PayPal-API</title>
    <link>http://blog.mayflower.de/archives/725-Zahlungsabwicklung-ueber-die-PayPal-API.html</link>
            <category>Development</category>
            <category>E-Commerce</category>
            <category>PHP-DE</category>
    
    <comments>http://blog.mayflower.de/archives/725-Zahlungsabwicklung-ueber-die-PayPal-API.html#comments</comments>
    <wfw:comment>http://blog.mayflower.de/wfwcomment.php?cid=725</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://blog.mayflower.de/rss.php?version=2.0&amp;type=comments&amp;cid=725</wfw:commentRss>
    

    <author>nospam@example.com (Inga Zilles)</author>
    <content:encoded>
    Hier findet ihr die Folien zu dem Mayflower Vortrag zu dem Thema &quot;Zahlungsabwicklung über die PayPal-API&quot;.&lt;br /&gt;
Am 14.07.2011 erklärte Stefan Krenz im Rahmen eines Mayflower Donnerstags-Vortrages die Integration von Zahlungen per PayPal in eine Software. Als Beispiel dient ein Onlineshop. Paypal bietet Entwicklern eine Sandbox zur Unterstützung an. Die Vorgehensweise zur Nutzung der Sandbox und die Schritte zur Zahlungsabwicklung werden in diesem Vortrag erklärt.&lt;br /&gt;&lt;br /&gt;

&lt;div style=&quot;width:425px&quot; id=&quot;__ss_8663158&quot;&gt; &lt;strong style=&quot;display:block;margin:12px 0 4px&quot;&gt;&lt;a href=&quot;http://www.slideshare.net/mayflowergmbh/zahlungsabwicklung-ber-die-paypalapi&quot; title=&quot;Zahlungsabwicklung über die PayPal-API&quot; target=&quot;_blank&quot;&gt;Zahlungsabwicklung über die PayPal-API&lt;/a&gt;&lt;/strong&gt; &lt;iframe src=&quot;http://www.slideshare.net/slideshow/embed_code/8663158&quot; width=&quot;425&quot; height=&quot;355&quot; frameborder=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; scrolling=&quot;no&quot;&gt;&lt;/iframe&gt; &lt;div style=&quot;padding:5px 0 12px&quot;&gt; View more &lt;a href=&quot;http://www.slideshare.net/&quot; target=&quot;_blank&quot;&gt;presentations&lt;/a&gt; from &lt;a href=&quot;http://www.slideshare.net/mayflowergmbh&quot; target=&quot;_blank&quot;&gt;Mayflower GmbH&lt;/a&gt; &lt;/div&gt; &lt;/div&gt; 
    </content:encoded>

    <pubDate>Fri, 22 Jul 2011 14:13:56 +0200</pubDate>
    <guid isPermaLink="false">http://blog.mayflower.de/archives/725-guid.html</guid>
    
</item>

</channel>
</rss>
