<?xml version="1.0"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title> blog</title>
            <link>http://www.pixeltricks.de/blog/rss</link>
            <atom:link href="http://www.pixeltricks.de/blog/rss" rel="self" type="application/rss+xml" />
            <description></description>

            
            <item>
                <title>pixeltricks ist Ausbildungsbetrieb 2012</title>
                <link>http://www.pixeltricks.de/blog/pixeltricks-ist-ausbildungsbetrieb-2012/</link>
                <description>&lt;p&gt;Seit 2009 sind wir Ausbildungsbetrieb der IHK für den Lehrberuf Fachinformatiker Anwendungsentwicklung (FIAE). Unsere beiden Auszubildenden Carolin und Patrick sind im ersten und im dritten Ausbildungsjahr.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Ein Fachinformatiker kann praktisch in allen Branchen eingesetzt werden. Der Großteil der Fachinformatiker ist in größeren Betrieben mit einer eigenen IT-Abteilung oder in eigenständigen Software- und Systemhäusern angestellt. Die Arbeitsbereiche von Fachinformatikern sind sehr vielseitig: Es beginnt bei der Analyse von Kundenanforderungen, der Planung, dem Einrichten, der Wartung und Administration von Systemen und Rechnernetzen, über die Anwendungs- und Datenbankentwicklung, Software-Engineering, Anpassung, Beschaffung und Installation von Hard- und Software bis zu Aufgaben in den Bereichen Consulting, Schulung und IT-Sicherheit.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Quelle: &lt;a href=&quot;http://www.pixeltricks.de/[sitetree_link%20id=]#http:/de.wikipedia.org/wiki/Fachinformatiker&quot;&gt;wikipedia&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Die IHK hat uns als Ausbildungsbetrieb 2012 ausgezeichnet und mit einer Urkunde belohnt. Diese Auszeichnung erhält jeder Ausbildungsbetrieb, ist im Grunde also eher als eine Geste zu verstehen, mit den üblichen Ausführungen über Zukunftssicherung des Landes und soziale Verantwortung. Oftmals hängen diese Urkunden dann sonnengebleicht im Eingangsbereich von Einkaufszentren oder Elekrofachmärkten.&lt;/p&gt;
&lt;p&gt;Dennoch eine schöne Geste, wie ich finde. Der Aufforderung, mit dem Aushang der Urkunde Werbung für Ausbildungsplätze zu machen, komme ich hiermit gerne nach. &lt;/p&gt;</description>
                <pubDate>Mon, 07 Jan 2013 14:29:57 +0100</pubDate>
                
                
                <guid>http://www.pixeltricks.de/blog/pixeltricks-ist-ausbildungsbetrieb-2012/</guid>
            </item>
            
            <item>
                <title>Neue Referenz: Stefan Steinmetz Mehl</title>
                <link>http://www.pixeltricks.de/blog/neue-referenz-stefan-steinmetz-mehl/</link>
                <description>&lt;p style=&quot;text-align: left;&quot;&gt;Auf der neuen Website von &lt;a href=&quot;http://www.stefan-steinmetz.de&quot; target=&quot;_blank&quot;&gt;Stefan Steinmetz&lt;/a&gt; - dem Mehl Erfinder - finden Sie eine Vielzahl an Informationen über das besondere, &lt;a href=&quot;http://www.stefan-steinmetz.de/main/unser-mehl-erfinder/stefan-steinmetz-verfahren-heute/&quot; target=&quot;_blank&quot;&gt;patentierte Herstellungs- und Reinigungsverfahren&lt;/a&gt; und erhalten diverse Einblicke in die einzelnen Schritte des Verarbeitungsprozesses von dem Rohmaterial Getreide bishin zum endgültigen Erhalt von Mehl.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;img class=&quot;center&quot; title=&quot;&quot; src=&quot;http://www.pixeltricks.de/assets/_resampled/resizedimage680756-stefansteinmetzwebsite.png&quot; alt=&quot;&quot; height=&quot;756&quot; width=&quot;680&quot;/&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;text-align: left;&quot;&gt;Wer mehr über die &lt;/span&gt;&lt;a style=&quot;text-align: left;&quot; href=&quot;http://www.stefan-steinmetz.de/main/unser-mehl-erfinder/&quot; target=&quot;_blank&quot;&gt;Geschichte&lt;/a&gt;&lt;span style=&quot;text-align: left;&quot;&gt; des Stefan Steinmetz&#039; erfahren möchte, kann zusätzlich in den vielen von Ihm verfassten, &lt;/span&gt;&lt;a style=&quot;text-align: left;&quot; href=&quot;http://www.stefan-steinmetz.de/main/unser-mehl-erfinder/historische-buecher-von-stefan-steinmetz/&quot; target=&quot;_blank&quot;&gt;digitalisierten Büchern&lt;/a&gt;&lt;span style=&quot;text-align: left;&quot;&gt;, beginnend mit dem Jahre 1893 bis einschließlich 1931, einen Großteil an Informationen gewinnen.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;img class=&quot;right&quot; style=&quot;float: right;&quot; title=&quot;&quot; src=&quot;http://www.pixeltricks.de/assets/_resampled/resizedimage350387-steinmetzwebsitebaeckersuche.png&quot; alt=&quot;&quot; height=&quot;387&quot; width=&quot;350&quot;/&gt;Weiter bietet Ihnen die Seite über die Suchfunktion Bäckersuche, einen Bäcker in Ihrer Nähe zu finden der STEFAN STEINMETZ Mehl zum Backen seiner Produkte verwendet. Geben Sie dazu einfach Ihre Postleitzahl in das Eingabefeld und Sie bekommen alle eingetragenen Bäcker in Ihrem Gebiet angezeigt.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Um die Seite multilingual zu gestalten, wird künftig die Möglichkeit geschaffen, zwischen zwei Sprachen wählen zu können.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Des weiteren wird es eine Funktion zur Rückverfolgung des Getreides in Ihrem Brot geben, sprich von der Filliale bis zum Getreidebauer.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Somit können Sie bequem per Internet prüfen, aus welchen Betrieben das Getreide mit denen Ihr Brot zubereitet wurde stammt.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Das Design wurde in Zusammenarbeit eines Grafikpartners des Kunden entwickelt und mit dem CSS-Framework &lt;a href=&quot;http://www.yaml.de/&quot;&gt;YAML&lt;/a&gt;, sowie dem CMS &lt;a href=&quot;http://www.silverstripe.org&quot;&gt;SilverStripe&lt;/a&gt; umgesetzt. Die Seite erfüllt vollständig den (X)HTML-Standard des &lt;a href=&quot;http://www.w3.org&quot; target=&quot;_blank&quot;&gt;W3C&lt;/a&gt;.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Besuchen Sie Stefan Steinmetz unter &lt;a href=&quot;http://www.stefan-steinmetz.de&quot;&gt;www.stefan-steinmetz.de&lt;/a&gt;&lt;/p&gt;</description>
                <pubDate>Tue, 17 Jul 2012 18:05:19 +0200</pubDate>
                
                
                <guid>http://www.pixeltricks.de/blog/neue-referenz-stefan-steinmetz-mehl/</guid>
            </item>
            
            <item>
                <title>Christians Praktikum bei pixeltricks</title>
                <link>http://www.pixeltricks.de/blog/christians-praktikum-bei-pixeltricks/</link>
                <description>&lt;h3&gt;Praktikum bei pixeltricks in Kaiserslautern&lt;/h3&gt;
&lt;p&gt;In der Zeit vom 6.6.2012  4.7.2012 absolvierte ich ein Praktikum bei der Firma pixeltricks in Kaiserslautern. Schon gleich am ersten Tag wurde ich herzlich aufgenommen und man merkte direkt, daß ein familiäres Klima herrscht, welches natürlich die Arbeitsweise positiv beeinflusst.&lt;/p&gt;
&lt;hr/&gt;&lt;h3&gt;Ankommen und Loslegen&lt;/h3&gt;
&lt;p&gt;&lt;img class=&quot;right&quot; style=&quot;float: right;&quot; title=&quot;&quot; src=&quot;http://www.pixeltricks.de/assets/Uploads/_resampled/resizedimage600533-Blog-Kirchner-Christian-3.odt.png&quot; alt=&quot;&quot; width=&quot;300&quot;/&gt;&lt;/p&gt;
&lt;p&gt;Nachdem ich am ersten Tag gemeinsam mit Sascha den Arbeitsplatz eingerichtet hatte und er mir zeigte, wie ich mich mit dem iMac zurechtfinde, wurde der Computer auch für die zukünftigen Aufgaben eingerichtet; zum einen wurde die NetBeans IDE installiert, damit ich meine Programmiersoftware für die Webentwicklung habe. Des weiteren wurde mir gezeigt, wie ich mit dem FireFox Plugin &quot;Firebug&quot;, das speziell dafür entwickelt wurde um HTML und CSS zu analysieren, jedes einzelne Element in einem Seitenquelltext auslesen kann und zB. sehe welche ID ein Eingabefeld hat. Mit diesem Wissen konnte ich mich an die Arbeit machen für meine kleinen Projekte.&lt;/p&gt;
&lt;p&gt;In der Entwicklung befindet sich gerade der Webshop &quot;SilverCart&quot; in der Version 1.3, der auf SilverStripe aufbaut. Man benötigt neben der Programmierung auch Tests, die Abläufe eines Kunden simulieren, um Fehler im Programm zu finden. Deshalb durfte ich mit dem PHP Framework &lt;a href=&quot;http://www.behat.org&quot;&gt;Behat&lt;/a&gt; solche automatisierten Testabläufe schreiben, sei es vom registrierten Benutzer, der einkauft bis hin zum nicht registrierten Benutzer, der sich einmal während des Einkaufes registriert oder das andere mal ohne eine Registrierung seinen Einkauf tätigt. Durch meine Simulation ist der ein oder andere Bug aufgetaucht, der natürlich sofort behoben wurde.&lt;br/&gt;&lt;br/&gt;Des weiteren konnte ich Erfahrungen in HTML, PHP und CSS sammeln, wobei ich die ein oder andere experimentelle Webseite erstellte und Übungen durchführte, die ich mir auf der Internetseite von SelfHTML erarbeitete. Auch wurde mir erklärt, dass man als Meta in einem HTML Code den Zeichensatz UTF-8 benutzt um Umlaute auf einer Internetseite darzustellen. Falls Probleme oder Fragen auftraten, konnte ich mich an jeden aus dem Team wenden, wodurch mir alles genau erklärt wurde.&lt;br/&gt;Die Hilfsbereitschaft war einfach 1A!&lt;/p&gt;
&lt;hr/&gt;&lt;h3&gt;So long and thanks for the fish&lt;/h3&gt;
&lt;p&gt;Für den täglichen Sport wurde auch gesorgt. Nach dem gemeinsamen Mittagessen war eine Runde Tischfussball angesetzt, denn schließlich müssen die gegessenen Kalorien auch wieder verbrannt werden ;)&lt;br/&gt;&lt;br/&gt;Ich hoffe das Team war zufrieden mit mir. Für mich war es eine recht interessante und abwechslungsreiche Zeit, die mir sehr viel Spaß und Freude bereitete.&lt;br/&gt;&lt;br/&gt;Zum Abschluss bedank ich mich nochmal bei Ramon Kupper, daß ich das Praktikum in seiner Firma absolvieren durfte und natürlich auch bei Dorothee, Patrick, Sebastian, Sascha und Roland.&lt;/p&gt;
&lt;p&gt;Macht weiter so Jungs :)&lt;/p&gt;</description>
                <pubDate>Tue, 03 Jul 2012 10:14:10 +0200</pubDate>
                
                
                <guid>http://www.pixeltricks.de/blog/christians-praktikum-bei-pixeltricks/</guid>
            </item>
            
            <item>
                <title>Neue Referenz: Walber-Schuhe aus Kandel</title>
                <link>http://www.pixeltricks.de/blog/neue-referenz-walber-schuhe-aus-kandel/</link>
                <description>&lt;p&gt;Seit 1908 werden in der Schuhfabrik Walber in Kandel fußgesunde Wohlfühlschuhe von Hand hergestellt. Durch die Manufaktur ist es möglich, jeden Schuh mit den Wunschfarben des Kunden herzustellen. Was gefällt ist erlaubt, und das ohne Aufpreis.&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;leftAlone&quot; src=&quot;http://www.pixeltricks.de/assets/Referenzen/_resampled/resizedimage680512-Walber-Schuhe.jpg&quot; width=&quot;680&quot; height=&quot;512&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;/p&gt;
&lt;p&gt;Auch im Webshop, den wir mit unserer &lt;a href=&quot;http://www.silvercart.de/&quot;&gt;Shopsoftware SilverCart&lt;/a&gt; realisiert haben, kann sich der Kunde seinen Traumschuh konfigurieren. Direkt nach der Bestellung wird der Schuh in der Fabrik von Hand nach Kundenvorgabe gefertigt.&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;left&quot; src=&quot;http://www.pixeltricks.de/assets/Referenzen/_resampled/resizedimage497521-walberprodukt.jpg&quot; alt=&quot;Produktansicht des SilverCart Webshop für Walberf-Schuhe&quot; width=&quot;497&quot; height=&quot;521&quot; title=&quot;&quot;/&gt;&lt;/p&gt;
&lt;p&gt;Design und Layout wurden vollständig von Herrn Markus Walber vorgegeben und von uns mit YAML und jquery in valides XHTML umgesetzt.&lt;/p&gt;
&lt;p&gt;Eine Bildergalerie zeigt Impressionen aus der Werkstatt und erklärt den Herstellungsprozess eines Schuhs vom Stanzen der einzelnen Schuhteile bis zur Entnahme der Schuhe aus der Presse.&lt;/p&gt;
&lt;p&gt;Eine weitere Besonderheit ist die direkte Anbindung des SilverCart Webshops an die &lt;a href=&quot;http://www.haendlerbund.de/&quot;&gt;Rechtstext-Schnittstelle des Händlerbund&lt;/a&gt;. Über diesen Webservice werden unter anderem Impressum, AGB, Widerrufsbelehrung automatisch eingelesen. Somit entsprechen die Rechtstexte immer den neuesten gesetzlichen Bestimmungen.&lt;/p&gt;
&lt;p&gt;Die Zahlung im Webshop wird mit dem SilverCart Zahlungsmodul für iPayment und dem Zahlungsmodul für PayPal ermöglicht.&lt;/p&gt;
&lt;p&gt;Zum Webshop von Walber-Schuhe:&lt;a href=&quot;http://www.walber-schuhe.de/&quot;&gt; www-walber-schuhe.de&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;</description>
                <pubDate>Wed, 18 Jan 2012 16:28:42 +0100</pubDate>
                
                
                <guid>http://www.pixeltricks.de/blog/neue-referenz-walber-schuhe-aus-kandel/</guid>
            </item>
            
            <item>
                <title>Warum Liebhaber die besseren Shopbetreiber sind</title>
                <link>http://www.pixeltricks.de/blog/warum-liebhaber-die-besseren-shopbetreiber-sind/</link>
                <description>&lt;p&gt;Vor etwas über einem neuen Jahr habe ich durch einen alten Bekannten die wohl schon seit meiner Kindheit latent schlummernde Leidenschaft zu ferngesteuerten Modellautos entdeckt. Genauer gesagt, zu Verbrenner-Modellen im Maßstab 1:8. Diese Modelle fahren mit einem Nitromethanol-Gemisch, wiegen etwa 4 kg und können Geschwindigkeiten von über 80 km/h erreichen. Dabei machen die Nitros einen herrlichen Höllenlärm.&lt;br/&gt;&lt;img class=&quot;left&quot; style=&quot;display: block; margin-left: auto; margin-right: auto;&quot; title=&quot;&quot; src=&quot;http://www.pixeltricks.de/assets/Uploads/carsonspecter1.jpg&quot; alt=&quot;Carson Specter II&quot; height=&quot;251&quot; width=&quot;450&quot;/&gt;&lt;br/&gt;Allerdings ist die Handhabung der Verbrenner-Motoren nicht gerade einsteigerfreundlich, weshalb ich bislang mehr Zeit damit verbracht habe, das Modell zum Fahren zu bringen als selbst damit zu fahren.&lt;/p&gt;
&lt;p&gt;Nach reiflicher Überlegung wollte ich nun den 3.5 ccm großen Verbrennermotor in meinem Carson Specter II durch einen leistungsstarken Elektromotor ersetzen. Immerhin sind das Chassis, die Fernbedienung und der Lenkservo ja fast unbenutzt und noch sehr gut zu gebrauchen.&lt;br/&gt;&lt;br/&gt;Mittlerweile habe ich mich durch etliche Foren gekämpft, Blogs gelesen und in vielen Online-Shops gestöbert um letztlich zu der Erkenntnis zu kommen, dass keiner der von mir besuchten Shops kundenfreundlich ist. Den Verdacht hatte ich schon vorher, als ich Ersatzteile benötigt habe, diese jedoch anhand der Hersteller-Artikelnummer schnell gefunden habe. Ohne die Explosionszeichnungen in der (übrigens sehr guten und sehr ausführlichen) Anleitung meines Nitro-Buggy würde ich wohl immer noch suchen. Keiner der Shops bietet einen Filter an, mit dem ich die passenden Tuning- und Ersatzteile für mein Modell auf einen Blick finden kann.&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;h2&gt;Warum ist das so schwer?&lt;/h2&gt;
&lt;p&gt;&lt;br/&gt;Im RC-Car-Bereich gibt es [auszugsweise] verschiedene Attribute:&lt;br/&gt;&lt;br/&gt;Maßstab: 1:10, 1:8, 1:5 etc&lt;br/&gt;Motor: Verbrenner (verschiedene Hubraumgrößen) oder Elektro (Brushed, Brushless),...&lt;br/&gt;Variante: Buggy, Truggy, Monster Truck, ShortCourse,...&lt;br/&gt;Hersteller: Carson, Ansmann, HPI, ThunderTiger,...&lt;br/&gt;Antrieb: 2WD, 4WD&lt;br/&gt;Einsatzzweck: Onroad, Offroad, Crawler,...&lt;br/&gt;[...]&lt;br/&gt;&lt;br/&gt;Würde es einen Online-Shop geben, der dieses Datenmodell bei allen seinen Produkten konsequent pflegt, dann könnte man über einfache Filter ganz einfach passende Ersatzteile für sein Modell finden. Oder man könnte sich als Einsteiger überhaupt erstmal einen schnellen Überlick über das komplexe Thema verschaffen und z.B. mit einem einfach umzusetzenden Fragebogen eine Art Online-Kaufberatung  erhalten. &lt;img class=&quot;left&quot; title=&quot;&quot; src=&quot;http://www.pixeltricks.de/assets/Uploads/carsonspecter2.jpg&quot; alt=&quot;Carson Specter II&quot; height=&quot;230&quot; width=&quot;450&quot;/&gt;&lt;br/&gt;&lt;br/&gt;Nun ist das ja nicht nur beim Modellbau so. In der Aquaristik ist ein Filter nur für bestimmte Beckengrößen geeignet. Wasserpflanzen, Wirbellose und Fische benötigen bestimmte Wasserwerte. Warum kann ich in keinem Online-Shop die Daten meines Aquariums und meine Wasserwerte eingeben und bekomme dann alle für mich geeigneten Produkte angezeigt?&lt;br/&gt;&lt;br/&gt;Wenn ich meine Kleidergröße kenne, warum kann ich in einem Webshop nicht alle anderen - für mich uninteressanten - Größen ausblenden? Soll ich mich wirklich durch jeden Mantel klicken, nur um dann zu merken, dass meine Größe &quot;leider gerade ausverkauft&quot; ist? &lt;br/&gt;&lt;br/&gt;Mit dieser Aufgabenstellung im Blick haben wir &lt;a href=&quot;http://www.silvercart.de&quot;&gt;unsere Shopsoftware SilverCart&lt;/a&gt; entwickelt. Es ist keine Hexerei, neue Attribute hinzuzufügen und selbst komplexe Filter können von uns wirtschaftlich maßgeschneidert für jede Branche und für jede Warengruppe entwickelt werden. Jetzt braucht es nur noch die passenden Liebhaber, die Ihr Sortiment wirklich lieben, ihren Kunden ein besseres Einkaufserlebnis bieten wollen und nicht einfach nur über den Webshop verkaufen wollen.&lt;br/&gt;&lt;br/&gt;Natürlich ist das ein nicht zu unterschätzender Aufwand bei der Pflege des Online-Shops. Aber ebenso wie der Fachverkäufer im Einzelhandel sein Sortiment kennen lernen muss und dafür Zeit und Geld investieren muss sollte auch der Online-Handel seine Hausaufgaben machen. Offensichtlich ist es aber einfacher mit Rabatten und Preisschlachten zu werben. Dabei sitzt doch gerade im Hobby-Bereich das Geld bei vielen Enthusiasten etwas lockerer.&lt;/p&gt;
&lt;h2&gt;Kunde droht mit Kauf&lt;/h2&gt;
&lt;p&gt;Ich werde mich wohl noch länger mit meinem Verbrenner auseinandersetzen. Hätte ein Shopbetreiber das Thema &quot;Umbau von Nitro zu Elo&quot; aufgegriffen und eventuell sogar passende Umbausätze angeboten, oder auf der Website im Blog oder mit Erfahrungsberichten vermittelt, dass er selbst ein Modellbau-Liebhaber ist und mir weiter helfen kann: ich hätte wohl gerne bei ihm eingekauft. Zu dumm, dass mein Urlaub jetzt vorbei ist und auch das Wetter wieder schlechter wurde...&lt;/p&gt;</description>
                <pubDate>Wed, 04 Jan 2012 23:09:53 +0100</pubDate>
                
                
                <guid>http://www.pixeltricks.de/blog/warum-liebhaber-die-besseren-shopbetreiber-sind/</guid>
            </item>
            
            <item>
                <title>Schnittstelle zu ProtectedShops</title>
                <link>http://www.pixeltricks.de/blog/schnittstelle-zu-protectedshops/</link>
                <description>&lt;p&gt;Vertrauen ist ein wichtiger Faktor im E-Commerce. Kundenbewertungen und geprüfte Rechtstexte wie beispielsweise AGB, Widerrufsbelehrung und Datenschutzerklärung gehören dazu. &lt;/p&gt;
&lt;p&gt;Die Protected Shops GmbH bietet Ihren Kunden verschiedene Schutz- und Bewertungspakete, die Sie jetzt sogar automatisch über eine Schnittstelle in unsere Shopsoftware SilverCart einlesen können. Damit sind Sie immer auf dem aktuellen Stand und können sich, &lt;a href=&quot;http://www.protectedshops.de/Haftungsuebernahmegarantie&quot;&gt;Dank der Haftungsübernahmegarantie&lt;/a&gt;, voll auf Ihren Online-Handel konzentrieren.&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 1em;&quot;&gt;&lt;em&gt;&quot;In Verbindung mit den Anwälten unserer Kooperations-Kanzlei, der IT-Recht Kanzlei, werden die Rechtstexte von Protected Shops ständig den neusten rechtlichen Gegebenheiten angepasst.&lt;/em&gt;&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 1em;&quot;&gt;&lt;em&gt;Gesetzesänderungen und neue Urteile werden berücksichtigt und wenn erforderlich, in die Rechtstexte eingearbeitet  ganz ohne Ihr Zutun.&lt;/em&gt;&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 1em;&quot;&gt;&lt;em&gt;Sie werden informiert, wenn die Texte aktualisiert wurden. So stehen Ihnen stets die aktuellen und rechtssicheren Texte zum Abruf im Protected Shops Portal zur Verfügung.&lt;/em&gt;&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 1em;&quot;&gt;&lt;em&gt;Bequemer geht es nicht  und das zu fairen Preisen!&quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Fragen Sie uns nach den Sonderkonditionen für SilverCart und sichern Sie Ihren Webshop noch heute mit dem Service von Protected Shops.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;</description>
                <pubDate>Mon, 28 Nov 2011 14:55:43 +0100</pubDate>
                
                
                <guid>http://www.pixeltricks.de/blog/schnittstelle-zu-protectedshops/</guid>
            </item>
            
            <item>
                <title>Wir haben SilverCart 1.2 veröffentlicht</title>
                <link>http://www.pixeltricks.de/blog/wir-haben-silvercart-1-2-veroeffentlicht/</link>
                <description>&lt;p&gt;&lt;img class=&quot;left&quot; src=&quot;http://www.pixeltricks.de/assets/Uploads/_resampled/resizedimage420600-SilverCart1.2.jpg&quot; alt=&quot;SilverCart 1.2 Webshop Software&quot; width=&quot;420&quot; height=&quot;600&quot; title=&quot;&quot;/&gt;&lt;/p&gt;
&lt;p&gt;Es ist geschafft! Wir haben unsere Shopsoftware SilverCart mit der neuen Version 1.2 in großen Punkten aber auch in vielen Details verbessern können. Dabei hatten wir rege Hilfe aus unserer Community, die uns mit Vorschlägen und bei der Fehlersuche tatkräftig unterstützt hat. Ganz wichtig war auch das Feedback der Entwickler, die SilverCart schon im produktiven Einsatz haben.&lt;/p&gt;
&lt;p&gt;Dank Roland, der über 300 Commits in unserer Mercurial-Versionskontrolle durchgesehen hat, haben wir hier ein Changelog mit den Änderungen und Neuerungen in SilverCart 1.2.&lt;/p&gt;
&lt;p&gt;Der Schwerpunkt dieser Version war ganz klar die unbedingte Verbesserung der Installationsfreundlichkeit und Detailverbesserungen bei der Usability im Backend.&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;font-size: 15px; font-weight: bold;&quot;&gt;Neue Funktionen&lt;/span&gt;&lt;/h2&gt;
&lt;ul&gt;&lt;li&gt;Produktbilder werden über die Fancybox gezoomt (JS)&lt;/li&gt;
&lt;li&gt;Die Einstellungen der Konfiguration sind jetzt optional für mehr Übersicht in Tabs geordnet &lt;/li&gt;
&lt;li&gt;Deeplinks&lt;/li&gt;
&lt;li&gt;Fremdbefüllung/Übergabe des Warenkorbs (z.B. über Preisportale)&lt;/li&gt;
&lt;li&gt;Benachrichtigungssystem im Frontend&lt;/li&gt;
&lt;li&gt;Google Taxonomie &lt;/li&gt;
&lt;li&gt;flexibles Widget System zum einfachen Anpassen des Shoplayouts&lt;/li&gt;
&lt;li&gt;Über Widget konfigurierbare Subnavigation&lt;/li&gt;
&lt;li&gt;neues Widget zur Anzeige der neuesten Blogeinträge&lt;/li&gt;
&lt;li&gt;Standard Widget-Sets haben nun Beispieldaten&lt;/li&gt;
&lt;li&gt;Produktgruppenseiten können den Inhalt der übergeordneten Produktgruppe erben. Dies ist einstellbar und im Standard abgeschaltet.&lt;/li&gt;
&lt;li&gt;die Anzahl der Produkte kann auf der Produktgruppenseite angezeigt werden&lt;/li&gt;
&lt;li&gt;es gibt jetzt eine Möglichkeit, Produktfilter-Plgins zu laden&lt;/li&gt;
&lt;li&gt;es können mehrere Anhänge über eine Shop-E-Mail verdendet werden&lt;/li&gt;
&lt;li&gt;Produktbilder können über die Produktverwaltung aus einem Webserver-Verzeichnis importiert werden&lt;/li&gt;
&lt;li&gt;es ist einstellbar, ob in den Warenkorb weitergeleitet werden soll wenn ein Produkt in den Warenkorb gelegt wurde&lt;/li&gt;
&lt;li&gt;es gibt einen SilvercartOrderPlugin-Mechanismus&lt;/li&gt;
&lt;li&gt;CSS- und JavaScript-Dateien werden im Live-Betrieb zu jeweils einer Datei zusammen gefasst um die Ladezeiten zu verbessern&lt;/li&gt;
&lt;li&gt;im Backend gibt es eine neue Funktion zur Optimierung der Datenbank. Dabei werden Relationen zu nicht mehr existierenden Objekte gelöscht&lt;/li&gt;
&lt;li&gt;neues Plugin-System für SilverCart Kern-Klassen. Dadurch lassen sich Updates auch bei umfangreichen projektspezifischen Anpassungen einfach einspielen&lt;/li&gt;
&lt;li&gt;&quot;AnythingSlider&quot; hinzugefügt (zur &lt;a href=&quot;http://css-tricks.com/3412-anythingslider-jquery-plugin/&quot;&gt;AnythingSlider-Website&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;JavaScript und CSS-Dateien die über Requirements::themedCSS/javascript werden jetzt wie Templates gerendert und dynamischen Template Code enthalten. &lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Verbesserungen&lt;/h2&gt;
&lt;ul&gt;&lt;li&gt;Der Installationsvorgang wurde so weit wie möglich vereinfacht. Bei installiertem SilverStripeDateien entpacken + dev/build ausführen. Bei einer Neuinstallation von SilverStripe kann SilverCart &quot;in einem Rutsch&quot; mitinstalliert werden.&lt;/li&gt;
&lt;li&gt;Ausgabe des Mindestbestellwerts für Bestellung auf der Warenkorbseite hinzugefügt&lt;/li&gt;
&lt;li&gt;Vollständige Überarbeitung des Frontend-Designs für mehr Usability. &lt;a href=&quot;http://demo.silvercart.org&quot;&gt;Ausserdem sieht es einfach nur sexy aus.&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Die Bereiche &quot;Administration&quot; und &quot;Konfiguration&quot; wurden im Backend hinzugefügt. Durch diese Aufgabenbezogene Aufteilung ist die Pflege des SilverCart Webshops für den Shopbetreiber einfacher.&lt;/li&gt;
&lt;li&gt;Der SilvercartProductExporter wurde grundlegend überarbeitet und optimiert. Durch die Verwendung von DB::query anstelle von DataObject::get läuft der Export wesentlich schneller bei geringerem Resourcenverbrauch&lt;/li&gt;
&lt;li&gt;Die Klasse SilvercartCustomerCategory wurde mitsamt allen Abhängigkeiten entfernt. Statt dessen wird die Klasse &quot;Group&quot; verwendet&lt;/li&gt;
&lt;li&gt;Der Kundenbereich ist jetzt optional SSL-Verschlüsselt&lt;/li&gt;
&lt;li&gt;Das Registrierungsformular ist jetzt optional SSL-Verschlüsselt&lt;/li&gt;
&lt;li&gt;Der SilverCartProduct CSV Export läuft jetzt wesentlich schneller&lt;/li&gt;
&lt;li&gt;Der Produktimport kommt jetzt besser mit sehr großen Datenmengen zurecht. Die Daten werden jetzt in einzelnen Tranchen rekursiv importiert.&lt;/li&gt;
&lt;li&gt;Der Produkt-Import läuft jetzt über CGI um die üblichen Probleme mit der Skriptlaufzeit beim Webserver zu umgehen&lt;/li&gt;
&lt;li&gt;es können jetzt frei definierbare Verpackungseinheiten am Produkt gepflegt werden, z.B. &quot;Inhalt: 6 Stück&quot;&lt;/li&gt;
&lt;li&gt;Übersetzungsfehler im Admin-Bereich behoben&lt;/li&gt;
&lt;li&gt;Bei der Registirierung ist das Double-Opt-In optional möglich&lt;/li&gt;
&lt;li&gt;Bei der Newsletter-Anmeldung ist das Double-Opt-In jetzt zwingend notwendig&lt;/li&gt;
&lt;li&gt;Mehrere Produtbilder können je Produkt hinterlegt werden. Die Zuordnung wurde vereinfacht und kann sogar automatisiert ablaufen.&lt;/li&gt;
&lt;li&gt;Suchergebnisseite hat jetzt die Möglichkeit die Menge der angezeigten Produkte über einen Filter zu begrenzen&lt;/li&gt;
&lt;li&gt;Unterseiten können die Widgets der Oberseiten übernehmen&lt;/li&gt;
&lt;li&gt;Die Produktpflegeseite im Backend ist durch die optionale Verwendung von Tabs übersichtlicher&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href=&quot;http://www.silvercart.org/downloads/&quot;&gt;Zur SilverCart 1.2 Download-Seite&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://demo.silvercart.org/&quot;&gt;Zum SilverCart 1.2 Demo-Shop&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Mit der Version 1.2 haben wir uns einige kleine und auch größere Träume erfüllt. Zwar haben wir unseren (rückblickend doch sehr ambitionierten) Zeitplan um 2 Monate überschritten, dafür aber auch wesentlich mehr Funktionen und Verbesserungen eingebaut als ursprünglich geplant. Das Warten hat sich also gelohnt.&lt;/p&gt;
&lt;p&gt;Mit dem jetzt vorhandenen Funktionsumfang ist SilverCart eine interessante Option und zweifelsfrei die erste Wahl für SilverStripe-Benutzer.&lt;/p&gt;
&lt;p&gt;Wir sind noch lange nicht fertig und es stehen noch einige Funktionen auf unserer Wunschliste. Gerade mit der unlängst veröffentlichten &lt;a href=&quot;http://www.silverstripe.org/silverstripe-3-0-alpha-1-is-ready-to-download/&quot;&gt;SilverStripe 3.0 alpha 1  &lt;/a&gt;zeigen sich völlig neue Perspektiven für die Optimierung des Backends auf.&lt;/p&gt;
&lt;p&gt;Lob, aber auch Kritik und vor allem Anregungen für die Zukunft sind jederzeit willkommen. Ganz besonders freuen wir uns aber auch über Unterstützung jeglicher Art. Es gibt viel zu tun und die unterschiedlichsten Möglichkeiten die Open Source Shopsoftware SilverCart zu unterstützen - eine kurze Nachricht reicht um mit uns Kontakt aufzunehmen.&lt;/p&gt;</description>
                <pubDate>Thu, 03 Nov 2011 17:21:43 +0100</pubDate>
                
                
                <guid>http://www.pixeltricks.de/blog/wir-haben-silvercart-1-2-veroeffentlicht/</guid>
            </item>
            
            <item>
                <title>SilverCart 1.2 steht kurz vor der Veröffentlichung</title>
                <link>http://www.pixeltricks.de/blog/silvercart-1-2-steht-kurz-vor-der-veroeffentlichung/</link>
                <description>&lt;p&gt;Wir haben seit der Veröffentlichung unserer Open Source Shopsoftware SilverCart viel internationalen Zuspruch und Anregungen erhalten. Viele dieser Anregungen konnten wir umsetzen und in die aktuelle Version 1.2 unserer Webshop-Software einfliessen lassen.&lt;/p&gt;
&lt;p&gt;Die Entwicklung von SilverCart 1.2 ist abgeschlossen. Wir werden die neue Version unserer Shopsoftware veröffentlichen, sobald die Qualitätssicherung abgeschlossen ist. Bei der Qualitätssicherung unterstützen uns gerade einige  Community-Mitglieder. Dank ihrer Hilfe konnten wir SilverCart von einigen Bugs befreien  und vor allem den Installationsprozess wesentlich vereinfachen.&lt;/p&gt;
&lt;p&gt;SilverCart wird übrigens auch schon international eingesetzt -  und zwar von einem E-Book-Store in England. Mehr darüber gibt es demnächst zu berichten.&lt;/p&gt;
&lt;p&gt;Wir pixeltrickser sind stolz auf SilverCart, auf viele neue Funktionen, neue Schnittstellen und noch mehr Detailverbesserungen.&lt;/p&gt;</description>
                <pubDate>Thu, 27 Oct 2011 20:02:11 +0200</pubDate>
                
                
                <guid>http://www.pixeltricks.de/blog/silvercart-1-2-steht-kurz-vor-der-veroeffentlichung/</guid>
            </item>
            
            <item>
                <title>pixeltricks auf der Mail Order World 2011</title>
                <link>http://www.pixeltricks.de/blog/pixeltricks-auf-der-mail-order-world-2011/</link>
                <description>&lt;p&gt;Dieses Jahr werden wir auf der Mail Order World in Wiesbaden am 5. und 6. Oktober als Aussteller vertreten sein.&lt;/p&gt;
&lt;p&gt;Die Mail Order World ist Europas größte Fachmesse für das gesamte Spektrum des Versandhandels. Und wir pixeltrickser sind mit unserer Shopsoftware SilverCart mit dabei.&lt;/p&gt;
&lt;p&gt;Die Mail Order World ist unsere erste Messe als Aussteller und ich jetzt schon sehr freudig gespannt auf das, was da alles auf uns zukommen wird. Immerhin - die Stromanschlüsse sind schon mal bestellt :-)&lt;/p&gt;
&lt;p&gt;Wir sind in Halle 9, Stand 911 und freuen uns auf Ihren Besuch - es gibt auch noch einige Freikarten.&lt;/p&gt;</description>
                <pubDate>Tue, 13 Sep 2011 20:56:55 +0200</pubDate>
                
                
                <guid>http://www.pixeltricks.de/blog/pixeltricks-auf-der-mail-order-world-2011/</guid>
            </item>
            
            <item>
                <title>Allein mit dem Löwen</title>
                <link>http://www.pixeltricks.de/blog/allein-mit-dem-loewen/</link>
                <description>&lt;p&gt;Ich habe großes Vertrauen zu Apple, mehr als zu jeder anderen Marke. Das ist in meinem Fall so bemerkenswert, weil ich bisher keiner anderen Marke treu war. Allerdings ist blinder Gehorsam auch nicht gerade mein Markenzeichen und so frage ich mich seit einigen Tagen, ob ich Apple weiter vertrauen soll.&lt;/p&gt;
&lt;p&gt;Der Mac hat mir zu Anfang des neuen Jahrtausends eine zentnerschwere Last von den Schultern genommen: Windows XP. Was habe ich mich über dieses OS aufgeregt: Man musste je nach Anwendungsgebiet seine Hardwarekomponenten selbst zusammenstellen, die dann von Windows mal erkannt wurden, mal nicht. Hat man sich einen neuen Rechner gekauft, hat man mitunter zwei ganze Tage gebraucht bis er konfiguriert war und die Daten portiert waren. Datenverluste waren die Regel, Konfigurationsoptionen in der Systemtiefe gut versteckt, das System ständig von Viren und Würmern bedroht, etc... Ich will nicht weiter über diese zeit nachdenken, denn ich merke schon, wie mein juckender Ausschlag zurückkommt. Der Mac war logisch und es musste garnicht konfiguriert werden. Ein neues Audiointerface gekauft? Einfach anstecken und benutzen! Textdokument von vor 2 Jahren finden? Dauert eine Sekunde mit Spotlight. Mal schnell was im Kalender nachschauen? iBook aufklappen und wieder zuklappen. Kurzum, Tiger, Leopard, Snow Leopard waren spitzenmäßige Betriebssysteme und jedes war noch besser als sein Vorgänger. Deshalb habe ich mir ohne lange zu zögern Lion gekauft. Erst einmal war der Preis von 23.99 total verlockend und dann hatte ich ein unglaubliches Vertrauen in den Installationsprozess.&lt;/p&gt;
&lt;p&gt;Installiert war Lion dann auch mit wenigen Mausklicks, das finde ich beachtenswert. Der erste Wehrmutstropfen war dann aber, dass iSync nicht mehr da war. iSync war ein super Tool für Leute mit alten Nokia Handys. Ich nehme an, dass die Marketingabteilung des iPhone daran schuld ist, dass iSync gekillt wurde. Ich finde das nicht korrekt.&lt;/p&gt;
&lt;p&gt;Das neue Adressbuch sieht scheisse aus und ist überhaupt nicht intuitiv. Es sieht aus wie ein Buch, kann aber nur einmal umgeblättert werden, nämlich zwischen einer Gruppenübersicht und Gruppendetails. Da muss man dann erst mal nachdenken.&lt;/p&gt;
&lt;p&gt;MacBook aufklappen und benutzen war gestern. Mit Lion muss man erst mal per Hand für eine WLAN Verbindung sorgen. Teilweise hat da das neue Update abhilfe geschafft. Ich erwarte da aber mehr von meinem Mac.&lt;/p&gt;
&lt;p&gt;Ich bin ein treuer iTunes Kunde und verwalte damit auch meine CD Sammlung (CDs waren diese unpraktischen silbernen Scheiben, an die sich in 10 Jahren kaum noch einer erinnern wird). Wenn ich mein MacBook ohne den externen Monitor benutze, dann ist das iTunes Fenster zu groß für das 13´´ Display, lässt sich aber nicht verkleinern, da die untere rechte Ecke nicht erreichbar ist.&lt;/p&gt;
&lt;p&gt;Das Verhalten der Fenster nervt mich unterschwellig schon seit längerem. Während ein CMD+W in manchen Applikationen einfach nur ein Fenster schließt, beendet es andere. Aus diesem Grund muss ich mein Adressbuch öfters mal neu starten. Der Klick auf grün oben links passt ein Browserfenster an den Monitor an, bei iTunes hat das den Effekt leider nicht.&lt;/p&gt;
&lt;p&gt;Wenn ich mein externes Hardwarefenster in Form eines Dell Monitors anschließe, gibt es ebenfalls Ärger. Der Monitor wird nicht wach, man muss ihm mit unerklärlichen Kombinationen aus Einschaltknopf und DVI Kabel ziehen auf die Sprünge helfen. Zum Teil ist das die Schuld von Dell, Lion hat das aber verschlimmert. Ziehe ich den Monitor wiederum ab um mit meinem MacBook mobil weiterzuarbeiten, bleibt das Display am MacBook dunkel und ich muss es zuerst zuklappen und dann wieder öffnen.&lt;/p&gt;
&lt;p&gt;Ich bin sehr anspruchsvoll, jaja ich weis. Ich will aber auch kein Diplom in Hardwarebedienung machen sondern schreiben, programmieren, Musik hören, Bilder anschauen, Termine verwalten, ... Meine Aufgaben stehen im Vordergrund, der Rechner mit dem ich sie erledige ist nur das Werkzeug dazu, das im Hintergrund still und zuverlässig seinen Dienst tut. Still und zuverlässig.&lt;/p&gt;</description>
                <pubDate>Fri, 19 Aug 2011 06:40:11 +0200</pubDate>
                
                
                <guid>http://www.pixeltricks.de/blog/allein-mit-dem-loewen/</guid>
            </item>
            
            <item>
                <title>SilverCart 1.1 ist fertig</title>
                <link>http://www.pixeltricks.de/blog/silvercart-1-1-ist-fertig/</link>
                <description>&lt;p&gt;Es ist vollbracht. SilverCart 1.1 ist veröffentlicht.&lt;/p&gt;
&lt;p&gt;Wir haben lange und hart gearbeitet, aber nun ist es geschafft. Mit über 200 Commits haben die neue Version unserer Open-Source Shopsoftware SilverCart fertig gestellt. In der Version 1.1 haben wir viele neue Funktionen und Verbesserungen eingebaut und auch einige Fehler beheben können.&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;left&quot; src=&quot;http://www.pixeltricks.de/assets/logosilvercart.png&quot; alt=&quot;SilverCart&quot; title=&quot;SilverCart, die moderne OpenSource Shopsoftware für das CMS SilverStripe&quot; width=&quot;264&quot; height=&quot;95&quot;/&gt;&lt;/p&gt;
&lt;p&gt;Vielen Dank an alle, die uns mit Übersetzungen, Kritik, Verbesserungsvorschlägen und Lob bei SilverCart geholfen haben.&lt;/p&gt;
&lt;p&gt;Mehr Informationen gibt es auf der deutschen &lt;a href=&quot;http://www.silvercart.de/2011/07/silvercart-1-1-veroffentlicht/&quot;&gt;SilverCart Webshop Projektseite&lt;/a&gt; und natürlich auf &lt;a href=&quot;http://www.silvercart.org&quot;&gt;silvercart.org&lt;/a&gt;.&lt;/p&gt;</description>
                <pubDate>Sat, 23 Jul 2011 11:59:55 +0200</pubDate>
                
                
                <guid>http://www.pixeltricks.de/blog/silvercart-1-1-ist-fertig/</guid>
            </item>
            
            <item>
                <title>Neues SilverStripe-Modul CustomHtmlForm</title>
                <link>http://www.pixeltricks.de/blog/neues-silverstripe-modul-customhtmlform/</link>
                <description>&lt;p&gt;Wir haben unser zweites Modul für das CMS SilverStripe veröffentlicht.&lt;/p&gt;
&lt;p&gt;Bei der Entwicklung unserer &lt;a href=&quot;http://www.silvercart.de/&quot;&gt;Shopsoftware SilverCart&lt;/a&gt; haben wir schnell gemerkt, dass wir bei der Gestaltung und Entwicklung von Formularen mehr Freiheiten brauchen, als das &lt;a href=&quot;http://www.silverstripe.org/&quot;&gt;CMS-Framework SilverStripe&lt;/a&gt; zur Verfügung stellt. &lt;/p&gt;
&lt;p&gt;Vor allem die dynamische Überprüfung von Eingaben in Echtzeit (z.B. sind Benutzername oder E-Mail-Adresse schon vergeben?) hat uns vorher schon so manches graue Haar gekostet.&lt;/p&gt;
&lt;p&gt;Deshalb haben wir das Modul CustomHtmlForms entwickelt und benutzen es seit 2010 sehr erfolgreich in allen unseren Projekten.&lt;/p&gt;
&lt;p&gt;Im Rahmen der Veröffentlichung unseres Shopsoftware haben wir uns entschlossen, das Modul ebenfalls unter der &lt;a href=&quot;http://www.gnu.org/licenses/lgpl.html&quot;&gt;Lesser General Public License (GNU LGPL)&lt;/a&gt; zu veröffentlichen. Damit tragen wir unseren kleinen Teil zum Erfolg der OpenSource-Software SilverStripe bei und können der Entwicklergemeinde etwas zurück geben.&lt;/p&gt;
&lt;p&gt;Mittlerweile ist das Modul in der Version 1.1 verfügbar und kann sowohl vom &lt;a href=&quot;http://www.silverstripe.org/customhtmlform-module/&quot;&gt;SilverStripe-Modulverzeichnis&lt;/a&gt; als auch von der &lt;a href=&quot;http://code.silvercart.org/&quot;&gt;SilverCart-Downloadseite&lt;/a&gt; herunter geladen werden.&lt;/p&gt;
&lt;p&gt;Die Dokumentation ist auf der &lt;a href=&quot;http://www.silvercart.org/documentation/techbase/develop/how-to-customize-forms/&quot;&gt;SilverCart-Projektseite&lt;/a&gt; in englischer Sprache verfügbar.&lt;/p&gt;</description>
                <pubDate>Mon, 11 Jul 2011 21:12:54 +0200</pubDate>
                
                
                <guid>http://www.pixeltricks.de/blog/neues-silverstripe-modul-customhtmlform/</guid>
            </item>
            
            <item>
                <title>Acht Wochen Praktikum bei pixeltricks</title>
                <link>http://www.pixeltricks.de/blog/acht-wochen-praktikum-bei-pixeltricks/</link>
                <description>&lt;p&gt;In meinem achtwöchigen Schülerpraktikum, hier bei pixeltricks, habe ich eine Vertiefung im Bereich der Anwendungsentwicklung erreicht. Da ich an meiner vorherigen Schule Informatik als Zusatzfach gewählt habe, ist dies somit die Grundlage für meinen beruflichen Weg geworden. An meiner jetzigen Schule verfolge ich diesen Weg weiter und möchte die Fachhochschulreife im Bereich IT-Systeme erreichen. Daher habe ich die Möglichkeit bekommen ein achtwöchiges Schülerpraktikum zu absolvieren. Das Team von pixeltricks beschäftigt sich mit Content Management, Shopsystemen, Portalsystemen, Consulting und Hosting.&lt;/p&gt;
&lt;p&gt;Vor meinem Praktikum hatte ich mir einige Gedanken gemacht, ob ich die ganze Arbeit leistungsmäßig mit meinen Computerkenntnissen schaffen kann. Ich habe es einfach auf mich zukommen gelassen.&lt;/p&gt;
&lt;p&gt;Nach meinem persönlichen Vorstellungsgespräch war ich bereit mein Praktikum zu beginnen. Als ich am ersten Tag ankam, wurde ich herzlichst begrüßt und dem Team vorgestellt.&lt;/p&gt;
&lt;hr/&gt;&lt;h2&gt;Auf die Plätze...&lt;/h2&gt;
&lt;p&gt;Danach konnte ich mich an meinem Arbeitsplatz einrichten. Patrick hatte mir geholfen, dass ich mich mit meinem zur Verfügung gestellten iMac zurecht finde. Zuerst durfte ich mir einige Einblicke in das Arbeiten der Web-Entwicklung verschaffen. Hier wird mit PHP gearbeitet. PHP ist eine Skriptsprache, die fast ausschließlich bei Webanwendungen verwendet wird.&lt;/p&gt;
&lt;p&gt;Am ersten Tag habe ich mich mit dem, auf &lt;a href=&quot;http://www.pixeltricks.de/blog/silverstripe-ist-das-flexibelste-content-management-system/&quot; target=&quot;_new&quot;&gt;SilverStripe&lt;/a&gt; aufbauenden, &lt;a href=&quot;http://silvercart.de&quot; target=&quot;_blank&quot;&gt;Webshop SilverCart&lt;/a&gt; vertraut gemacht und eine Übersicht inklusive Beschreibung aller Seitentypen erstellt.&lt;img class=&quot;left&quot; title=&quot;SilverCart Backend und UML 2 kompakt&quot; src=&quot;http://www.pixeltricks.de/assets/umlsilvercart.png&quot; alt=&quot;SilverCart Backend und UML 2 kompakt&quot; width=&quot;300&quot;/&gt;&lt;/p&gt;
&lt;p&gt;Für die kommenden Tage der ersten Woche hatte ich die Aufgabe eine Dokumentation über SilverCart zu schreiben, die die einzelnen Arbeitsschritte im Backend von SilverStripe und SilverCart darstellt. Dazu habe ich Screenshots angefertigt und an Roland weitergeleitet. Er verwendet diese, um die Dokumentation für Anwender von SilverCart zu verbessern.&lt;/p&gt;
&lt;p&gt;Zu Beginn der zweiten Woche hatte ich mich mit UML vertraut gemacht. UML (Unified Modeling Language) ist eine Modellierungssprache zum Festlegen von Beziehungen zwischen Klassen. Anschließend hatte ich mit Hilfe von MySQL Workbench ein EER Diagramm, zur SilverCart Version 1.0 erstellt und auf &lt;a href=&quot;http://www.silvercart.org&quot; target=&quot;_new&quot;&gt;www.silvercart.org&lt;/a&gt; veröffentlicht.&lt;/p&gt;
&lt;p&gt;Um den Demoshop von SilverCart mit Inhalt zu füllen, durfte ich mit der Digitalkamera von Ramon Bilder von allen möglichen Sachen machen, welche pixeltricks beschreiben oder zum täglichen Arbeiten benötigt werden.&lt;/p&gt;
&lt;p&gt;Anschließend erstellte ich passende Produkte im Demoshop und wies ihnen kreative Überschriften und kreative Artikelbeschreibungen zu. Nebenbei habe ich mehrere Produktgruppen für den Shop erstellt und alles zugeordnet.&lt;/p&gt;
&lt;hr/&gt;&lt;h2&gt;An die Arbeit&lt;/h2&gt;
&lt;p&gt;Ab der dritten Woche wurde ich dann in ein größeres Projekt mit einbezogen. Sascha und Sebastian haben mir geholfen, dass ich mich in Selenium IDE zurechtfinden werde. Selenium ist ein Programm, das Internetseiten testet und automatisch ablaufen lassen kann. Somit kann man Fehlerfälle und nicht erreichbare Seiten vermeiden.&lt;br/&gt; Dazu sollte ich &lt;a href=&quot;http://www.google.de/#hl=de&amp;amp;sa=X&amp;amp;ei=w9wWTt6WFs_B8QOQ38QO&amp;amp;ved=0CCMQBSgA&amp;amp;q=define%3A+use+cases&amp;amp;spell=1&amp;amp;bav=on.2,or.r_gc.r_pw.&amp;amp;fp=4e944cf36d1f2a2d&amp;amp;biw=1341&amp;amp;bih=753&quot; target=&quot;_new&quot;&gt; Use Cases&lt;/a&gt; definieren und den Vorgang beschreiben. An dieser Stelle möchte ich erwähnen, dass ich die Aufgabe nicht richtig verstanden hatte. Ich hatte wie zuvor bei der Dokumentation den Arbeitsschritt des SilverCart Webshops beschrieben. Jedoch sollte ich nicht aufschreiben was man mit den einzelnen Feldern macht, sondern wie die Use Case Sequenzen aufgebaut sind. Alle pixeltrickser hatten sich die Zeit genommen mit mir zusammen die Use Case Sequenzen zu definieren, damit ich dann die Selenium Tests umsetzen konnte. Jeder Selenium Test besteht aus mehreren Schritten, die automatisiert ausgeführt werden können.&lt;/p&gt;
&lt;h4&gt;Ein Beispiel für eine Use Case Sequenz im Checkout Prozess:&lt;/h4&gt;
&lt;ol&gt;&lt;li&gt;Kunde gibt nur die Rechnungsadresse an&lt;/li&gt;
&lt;li&gt;Kunde wählt Zahlungsart, Vorkasse&lt;/li&gt;
&lt;li&gt;Kunde wählt Versandart&lt;/li&gt;
&lt;li&gt;Kunde geht zur Bestellübersicht&lt;/li&gt;
&lt;li&gt;Kunde schließt Bestellung ab&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Dabei musste ich lernen, wie ein Programmierer zu denken.&lt;/p&gt;
&lt;p&gt;Damit ich die Tests vollständig durchführen konnte wurde das FireFox Plugin Firebug installiert. Firebug wird bezüglich analysieren von HTML und CSS verwendet. Mit Firebug kann man jedes einzelne Element auf der Internetseite untersuchen. Beim Herrausschreiben der ids aller Container konnte ich mehr über &lt;a href=&quot;http://de.wikipedia.org/wiki/Object-Relational-Mapping&quot; target=&quot;_blank&quot;&gt;ORM (object relational mapping)&lt;/a&gt; und das Architekturmuster, das bei SilverStripe verwendet wird, lernen. Zu jedem Use Case Vorgang werden Suite Cases abgespeichert. Darin kann man jeden einzelnen Klick nachvollziehen. Zwischendurch schaute ich Patrick beim Umsetzen eines Webdesigns mit HTML und CSS zu.&lt;/p&gt;
&lt;p&gt;In der fünften und sechsten Woche habe ich mir weitere Einblicke in die Webentwicklung verschafft. Sebastian und Patrick haben mit der &lt;a href=&quot;http://www.netbeans.org&quot; target=&quot;_new&quot;&gt;NetBeans IDE&lt;/a&gt; weitere Funktionen für SilverStripe programmiert. Außerdem konnte ich den beiden beim Verwalten und Anlegen verschiedener Web-Hosting Pakete zusehen und habe mir erklären lassen, wie dies funktioniert. Beim Erstellen und Zuordnen der symbolisierten Icons für SilverCart konnte ich meine eigene Meinung vertreten und eigene Ideen einbringen.&lt;/p&gt;
&lt;p&gt;Außerdem habe ich erfahren für was der Zeichensatz UTF-8 benötigt wird und ein &lt;a href=&quot;http://www.pixeltricks.de/blog/php-codesniffer-hook-fr-mercurial-unter-mac-os-x-10-6/&quot; target=&quot;_new&quot;&gt;Codesniffer&lt;/a&gt; für das Arbeiten im Team von hoher Bedeutung ist.&lt;/p&gt;
&lt;hr/&gt;&lt;h2&gt;Kekse!&lt;/h2&gt;
&lt;h2&gt;&lt;img class=&quot;left&quot; style=&quot;float: right;&quot; title=&quot;Kekse&quot; src=&quot;http://www.pixeltricks.de/assets/_resampled/resizedimage300232-zusammen.png&quot; alt=&quot;Kekse&quot; height=&quot;232&quot; width=&quot;300&quot;/&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;Die Besprechungen in meinem Praktikum waren immer sehr angebracht. Auch über die &lt;a href=&quot;http://www.pixeltricks.de/blog/silvercart-praesentation-in-london/&quot; target=&quot;_new&quot;&gt;SilverCart-Präsentation in London&lt;/a&gt; wurde fleißig berichtet.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;Beim täglichen Mittagessen, das wir zusammen verbringen, besprechen wir aktuelle Themen und unserer Phantasie bezüglich Keksen sind natürlich keine Grenzen gesetzt. Ich finde es gut, dass es einen Küchenplan gibt, mit dem man Essensvorschläge abgeben darf, sonst müsste ich jeden Tag Pesto essen. ;-)&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt; &lt;/p&gt;
&lt;p&gt;Natürlich hatte ich auch Besuch von einem Lehrer meiner Schule. Ich zeigte Ihm, womit ich mich in meinem Praktikum beschäftigte. Er hatte einen sehr interessierten Eindruck hinterlassen.&lt;img class=&quot;left&quot; style=&quot;float: right;&quot; title=&quot;CSS Farbpallette&quot; src=&quot;http://www.pixeltricks.de/assets/_resampled/resizedimage227230-farbpalletterot.png&quot; alt=&quot;CSS Farbpallette&quot; width=&quot;180&quot;/&gt;&lt;/p&gt;
&lt;p&gt;Gegen Ende meines Praktikums habe ich mich selbstständig durch die SelfHTML Touren durchgearbeitet, weil man HTML immer wieder gebrauchen kann. Rechts im Bild sind verschiedene Beispiele einer Farbpalette. Die Beschriftungen zeigen, welchem Hexadezimalbereich von HTML und CSS die jeweiligen Farben entsprechen.&lt;/p&gt;
&lt;p&gt;Anfangs habe ich einfache Beispiele zur Übung rausgeschrieben. Anschließend habe ich mein Wissen weiter ausgebaut, indem ich dann einen tabellarischen Lebenslauf erstellt habe. Mit Unterstützung von meinem Praktikumsteam konnte ich dann CSS Befehle ausprobieren, einbauen und auf die kleinen Einzelheiten achten. Das Gestalten mit CSS finde ich sehr aufregend.&lt;/p&gt;
&lt;p&gt;Um den Quellcode zu bearbeiten habe ich Adobe Dreamweaver CS4 und TextWrangler benutzt. Dabei habe ich mehr darüber erfahren, wie wichtig es ist, dass der Quelltext sauber und auch für ScreenReader ausführlich umgesetzt ist. Somit ist sichergestellt, dass auch Sehbehinderte Menschen das Internet verwenden können. Beispiel: Alle Bilder mit der Eigenschaft alt und title pflegen. Diese werden von den ScreenReadern anschließend dem Nutzer vorgelesen. Oder was es mit den verschiedenen DPI Auflösungen zwischen Windows und Mac OS X auf sich hat.&lt;/p&gt;
&lt;p&gt;Abschließend habe ich die Aufgabe bekommen im Internet nach Firmen oder Agenturen zu recherchieren, die SilverStripe benutzen. Dabei bin ich auf etwa 150 verschiedene Adressen gestoßen. Es ist ausreichend sich die Meta-Tags im Seitenquelltext anzeigen zu lassen, um zu sehen, dass die Seite mit SilverStripe erstellt wurde.&lt;/p&gt;
&lt;p&gt;Gerne hätte ich mehr über PHP erfahren und beispielsweise kleine Aufgaben ausprobiert.&lt;/p&gt;
&lt;hr/&gt;&lt;h2&gt;Die Zeit vergeht...&lt;/h2&gt;
&lt;p&gt;&lt;img class=&quot;left&quot; style=&quot;float: left;&quot; title=&quot;Kicker&quot; src=&quot;http://www.pixeltricks.de/assets/tischfussball.png&quot; alt=&quot;Kicker&quot; width=&quot;300&quot;/&gt;Nachdem ich vor meinem Praktikum alles auf mich zukommen gelassen habe, kann ich jetzt sagen, dass ich sehr viel gelernt habe. Nun kann ich auch schwierige Aufgaben lösen. Wichtig finde ich, dass meine Arbeit anerkannt wird, sodass ihr sie weiter verwenden könnt. Ich habe gelernt, dass man zu großem Erfolg kommen kann, wenn man sich nur in die gestellten Aufgaben hineinversetzt und sich herantraut. Denn in meinem Praktikum habe ich jeden Tag sehr viele, neue Erfahrungen im Bereich der Anwendungsentwicklung gesammelt.&lt;/p&gt;
&lt;p&gt;Ich hoffe, dass das pixeltricks-Team gut mit mir zurecht gekommen ist, denn ich fand mein Praktikum bei euch sehr interessant und abwechslungsreich. Ich bin sehr zufrieden mit der ruhigen und lockeren Arbeitsweise bei pixeltricks, auch wenn nebenher einige schräg geschossene Tore fallen und Musik gehört wird. Es gibt immer etwas zum Lachen. Für eure Hilfsbereitschaft und dafür, dass ich mein Praktikum bei euch machen durfte, möchte ich mich bedanken.&lt;/p&gt;</description>
                <pubDate>Fri, 08 Jul 2011 11:49:40 +0200</pubDate>
                
                
                <guid>http://www.pixeltricks.de/blog/acht-wochen-praktikum-bei-pixeltricks/</guid>
            </item>
            
            <item>
                <title>SilverCart-Präsentation in London</title>
                <link>http://www.pixeltricks.de/blog/silvercart-praesentation-in-london/</link>
                <description>&lt;p&gt;Zusammen mit Roland werde ich am 23. Juni nach London zur UK SilverStripe CMS User Group fliegen.&lt;/p&gt;
&lt;p&gt;Vor einigen Wochen hat uns die &lt;a href=&quot;http://www.meetup.com/SilverStripeUK/events/17526177/&quot;&gt;UK SilverStripe CMS User Group&lt;/a&gt; in London eingeladen um unser &lt;a href=&quot;http://www.silvercart.de/&quot;&gt;SilverStripe E-Commerce Modul SilverCart&lt;/a&gt; zu präsentieren.&lt;/p&gt;
&lt;p&gt;Die 2009 gegründete UK SilverStripe CMS User Group ist mit über 100 Mitgliedern die weltweit größte SilverStripe User Group. Die SilverStripe User Group wurde von der englischen Agentur &lt;a href=&quot;http://www.gpmd.co.uk/&quot;&gt;GPMD&lt;/a&gt; initiiert. GPMD ist offizieller SilverStripe-Partner.&lt;/p&gt;
&lt;p&gt;Neben dem Werdegang des Unternehmens werden wir darstellen, warum wir uns für SilverStripe und für die Entwicklung von SilverCart entschieden haben. Nach der Live-Präsentation des Shopsystems (Store Front und Adminbereich) werden wir die Präsenation mit einem Ausblick auf die kommenden SilverCart-Versionen und einer Frage-Antwort-Runde beenden.&lt;/p&gt;
&lt;p&gt;Wir freuen uns auf darauf, viele neue begeisterte SilverStripe-Fans kennen zu lernen.&lt;/p&gt;
&lt;p&gt;Weitere Informationen zur Veranstaltung gibt es unter &lt;a href=&quot;http://www.meetup.com/SilverStripeUK/events/17526177/&quot;&gt;http://www.meetup.com/SilverStripeUK/events/17526177/&lt;/a&gt;&lt;/p&gt;</description>
                <pubDate>Mon, 20 Jun 2011 17:13:21 +0200</pubDate>
                
                
                <guid>http://www.pixeltricks.de/blog/silvercart-praesentation-in-london/</guid>
            </item>
            
            <item>
                <title>Kommasetzung im Englischen</title>
                <link>http://www.pixeltricks.de/blog/kommasetzung-im-englischen/</link>
                <description>&lt;p&gt;In letzter Zeit schreibe ich vermehrt Blogbeiträge und Dokumentationssteiten in englischer Sprache für &lt;a title=&quot;Link zur Seite silvercart.org&quot; href=&quot;http://silvercart.org&quot; target=&quot;_blank&quot;&gt;silvercart.org&lt;/a&gt;.  Dabei werden meine Lücken in englischer Rechtschreibung deutlich. Unsere qualitativen Ansprüche an unseren Code sollen natürlich auch durch das Sprachliche verdeutlicht werden.&lt;/p&gt;
&lt;p&gt;Hier einmal die wichtigsten Regeln zur Kommasetzung im Englischen:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Nach Anreden: Dear John,. Bei geschäftlicher Korrespondenz wird im Englischen auf das Komma verzichtet, im Amerikanischen wird statt des Kommas ein Doppelpunkt gesetzt.&lt;/li&gt;
&lt;li&gt;Beginnt ein if-Satz mit if, ist ein Komma notwendig: If i would be rich, I would do the same things I am doing today.&lt;/li&gt;
&lt;li&gt;Nach einem Infinitiv am Satzanfang folgt ein Komma: To enlarge his skills as a programmer, he examines each and every bugfix.&lt;/li&gt;
&lt;li&gt;Einschübe werden durch Komma kenntlich gemacht, wenn sie für das Verständnis nicht relevant sind: Jim Meyer, who works in London, invited me to his birthday party.&lt;/li&gt;
&lt;li&gt;Please wird am Ende des Satzes durch Komma getrennt: Give me all Your money, please.&lt;/li&gt;
&lt;li&gt;Question Tags werden immer durch Komma getrennt: She is very good looking, isnt she?&lt;/li&gt;
&lt;li&gt;Aufzählungen werden durch Komma kenntlich gemacht: I like flowers, ice cream, soccer and my bike.&lt;/li&gt;
&lt;li&gt;Hauptsätze werden durch Komma geteilt: I had a terrible headache, and my windows machine broke down the third time today.&lt;/li&gt;
&lt;li&gt;Viele Adverbien verlangen ein anschließendes Komma, wenn sie am Satzanfang stehen: Furthermore, I told him to do so! Wenn sie in der Satzmitte stehen, werden sie sogar von Kommas eingefasst: Michael, instead, told me about his fathers accident.&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;So jetzt muss ich erst einmal meine ganzen alten Artikel überarbeiten ;)&lt;/div&gt;</description>
                <pubDate>Wed, 08 Jun 2011 12:52:07 +0200</pubDate>
                
                
                <guid>http://www.pixeltricks.de/blog/kommasetzung-im-englischen/</guid>
            </item>
            
            <item>
                <title>Wir feiern SilverCart 1.0</title>
                <link>http://www.pixeltricks.de/blog/wir-feiern-silvercart-1-0/</link>
                <description>&lt;p&gt;Dass wir an unserer eigenen Shopsoftware SilverCart arbeiten war ja nun schon seit einigen Monaten ein offenes Geheimnis. &lt;a href=&quot;http://silvercart.de&quot;&gt;SilverCart&lt;/a&gt; basiert auf dem CMS SilverStripe und dem PHP-Framework Sapphire&lt;/p&gt;
&lt;p&gt;Vor etwa 3 Monaten haben wir &lt;a href=&quot;http://silvercart.de&quot;&gt;SilverCart&lt;/a&gt; 0.9 veröffentlicht. In kurzen Abständen folgten Release candidates RC1, RC2 und RC3. Soeben haben wir die endgültige Version 1.0 veröffentlicht. Dieser Meilenstein muss natürlich gebührend gefeiert werden, weshalb wir uns jetzt zurückziehen um diesen Erfolg gebührend mit einem kleinen Grillfest zu feiern.&lt;/p&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;p&gt;  &lt;/p&gt;</description>
                <pubDate>Tue, 24 May 2011 15:41:26 +0200</pubDate>
                
                
                <guid>http://www.pixeltricks.de/blog/wir-feiern-silvercart-1-0/</guid>
            </item>
            
            <item>
                <title>SilverStripe und PHPUnit</title>
                <link>http://www.pixeltricks.de/blog/silverstripe-und-phpunit/</link>
                <description>&lt;p&gt;In meinem Leben als Programmierer gibt es einige Dinge, die ich unbedingt lernen wollte, im Tagesgeschäft aber nie Zeit dazu hatte. Jetzt über die Osterfeiertage habe ich endlich einmal Muße und kann mich dem Thema PHPUnit zuwenden.&lt;/p&gt;
&lt;p&gt;Das CMS und das Framework Sapphire von SilverStripe besitzen zusammen schon an die 150 Testklassen mit 2 bis 10 Tests, die die Methoden der Klassen auf ihre korrekte Funktionalität hin prüfen. Es gibt in der &lt;a title=&quot;Link zur SilverStripe Doku zu Unit Tests&quot; href=&quot;http://doc.silverstripe.org/sapphire/en/topics/testing/index&quot; target=&quot;_blank&quot;&gt;SilverStripe Doku auch eine kurze Einführung zu PHPUnit&lt;/a&gt;, oder besser gesagt zu dessen Implementierung in SilverStripe. Allerdings liegen die Tücken wie so oft in den Details und diese spart die Doku dann doch eher aus. Genau an dieser Stelle soll mein kleiner Artikel ins Spiel kommen und dem geneigten Leser einen Informationsvorsprung bieten, den ich selbst nicht hatte.&lt;/p&gt;
&lt;p&gt;Ich habe keine Ahnung, wie man PHPUnit auf einem Server installiert, diese Arbeit hat mir dankenswerterweise &lt;a href=&quot;http://www.pixeltricks.de/[sitetree_link id=113]#http://www.pixeltricks.de/unternehmen/team/sebastian-diel/&quot; target=&quot;_blank&quot;&gt;Sebastian&lt;/a&gt; abgenommen. Ich gehe bei meinen Ausführungen einfach davon aus, dass PHPUnit installiert ist, sonst läuft nämlich goanix.&lt;/p&gt;
&lt;h3&gt;Konvention vor Konfiguration&lt;/h3&gt;
&lt;p&gt;&quot;Convention over Configuration&quot;, nach diesem Prinzip funktioniert das Erstellen von Unit-Tests mit SilverStripe Bordmitteln. Neue Tests werden von der Klasse SapphireTest abgeleitet und im Verzeichnis &quot;tests&quot; in einem Modul oder im Projektverzeichnis abgelegt. Zu jeder Testklasse kann man eine YAML-Datei anlegen, in der die Testobjekte definiert werden. Man muss nämlich wissen, dass bei einem Testlauf nicht die Datenbank der Installation benutzt wird, sondern eine temporäre Datenbank erzeugt wird. Dies hat zwar den Vorteil, dass die Konfiguration und der Zustand der Installation nicht verändert werden, erfordert aber eine Definition aller Objekte, die während des Tests benötigt werden.&lt;/p&gt;
&lt;h3&gt;Auf die Plätze, fertig, ...&lt;/h3&gt;
&lt;p&gt;Ein SapphireTest lässt sich auf unterschiedliche Weise ansteuern. Ãber den Aufruf der URL [www.mysite.de]/dev/tests bekommt man eine Ãbersicht aller verfügbarer Tests. Mit  [www.mysite.de]/dev/tests/all kann man diese sukzessive Ablaufen lassen. Hier kann es zum Timeout des Servers kommen, ein einziger Test kann nämlich eine Sekunde und länger dauern. Mit  [www.mysite.de]/dev/tests/[TestKlasse] kann eine einzelne Testklasse aufgerufen werden, zum Entwickeln eines Test sehr nützlich. Nachdem ich einen halben Tag mit Sapphiretests experimentiert hatte, hatte ich so an die 50 Testdatenbanken unwissentlich erzeugt. Diese erkennt man immer am Namen &quot;tmpdb&quot; konkatiniert mit einer siebenstelligen Zufallszahl. Nach Abschluss der Testerei kann man diese mit  [www.mysite.de]/dev/tests/cleanupdb auf einen Schlag löschen.&lt;/p&gt;
&lt;h3&gt;Jetzt aber mal Butter bei die Fische&lt;/h3&gt;
&lt;p&gt;Ich will als keines Beispiel den Entwicklungsweg zu den ersten Tests für unser geliebtes Modul &lt;a title=&quot;Link zur Seite von Silvercart&quot; href=&quot;http://silvercart.org&quot; target=&quot;_blank&quot;&gt;SilverCart&lt;/a&gt; heranziehen. Ich habe mit Test für die Klasse SilvercartProduct begonnen. Ein Test untersucht immer das Verhalten einer Methode. Führt diese Manipulationen eines Objektes richtig aus? Liefert diese den richtigen Rückgabewert und diese hoffentlich für viele verschiedene Parameter? Eine Testmethode muss gemäß der Konvention immer mit dem Namenspräfix &quot;test&quot; beginnen.&lt;/p&gt;
&lt;p&gt;Als Erstes will ich das Verhalten eines Setters und eines Getter untersuchen:&lt;/p&gt;
&lt;pre&gt;/**
     * get all required attributes as an array.
     *
     * @return array the attributes required to display an product in the frontend
     * @author Roland Lehmann 
     * @since 23.10.2010
     */
    public static function getRequiredAttributes() {
        return self::$requiredAttributes;
    }

    /**
     * define all attributes that must be filled out to show products in the frontend.
     *
     * @param string $concatinatedAttributesString a string with all attribute names, seperated by comma, with or without whitespaces
     *
     * @since 23.10.2010
     * @return void
     * @author Roland Lehmann
     */
    public static function setRequiredAttributes($concatinatedAttributesString) {
        $requiredAttributesArray = array();
        $requiredAttributesArray = explode(&quot;,&quot;, str_replace(&quot; &quot;, &quot;&quot;, $concatinatedAttributesString));
        self::$requiredAttributes = $requiredAttributesArray;
    }
&lt;/pre&gt;
&lt;p&gt;Mit Hilfe des Setters sollen Pflichtattribute von Produkten definiert werden. Sind diese Attribute nicht gepflegt, werden die Produkte im Frontend nicht angezeigt. Der Test dazu sieht dann wie folgt aus:&lt;/p&gt;
&lt;pre&gt;class SilvercartProductTest extends SapphireTest {
    
    public static $fixture_file = &#039;silvercart/tests/SilvercartProductTest.yml&#039;;

/**
     * tests the reqired attributes system for products
     * 
     * @author Roland Lehmann 
     * @since 28.4.2011
     * @return void
     */
    public function testRequiredAttributes() {
        
        //two attributes
        SilvercartProduct::setRequiredAttributes(&quot;Price, Weight&quot;);
        $attributes = SilvercartProduct::getRequiredAttributes();
        $this-&amp;gt;assertEquals(array(&quot;Price&quot;, &quot;Weight&quot;), $attributes, &quot;Something went wrong setting two required attributes.&quot;);
        
        //four attributes
        SilvercartProduct::setRequiredAttributes(&quot;Price, Weight, ShortDescription, LongDescription&quot;);
        $attributes = SilvercartProduct::getRequiredAttributes();
        $this-&amp;gt;assertEquals(array(&quot;Price&quot;, &quot;Weight&quot;, &quot;ShortDescription&quot;, &quot;LongDescription&quot;), $attributes, &quot;Something went wrong setting four required attributes.&quot;);
    }
}&lt;/pre&gt;
&lt;p&gt;Im Test werden jetzt erst einmal die beiden Attribute &quot;Price&quot; und &quot;Weight&quot; gesetzt. Dann werden sie mit Hilfe des Getters wieder geladen. Wir nehmen jetzt natürlich an, dass der Getter die Attribute &quot;Price&quot; und &quot;Weight&quot; in einem Array zurückliefert. Diese Annahme wird mit $this-&amp;gt;assertEquals() in Code gegossen. Deren erster Parameter ist der erwartete Wert, der mit dem zweiten Parameter, dem tatsächlichen Wert verglichen wird. Falls die Annahme falsch ist, gilt der Test als fehlgeschlagen und der dritte Parameter wird als Fehlermeldung ausgegeben. Ein Test ist nur dann erfolgreich, wenn &lt;strong&gt;alle&lt;/strong&gt; seine Annahmen (engl. asserts) richtig sind.&lt;/p&gt;
&lt;h3&gt;Crash Test Dummies&lt;/h3&gt;
&lt;p&gt;In diesem Beispiel werden jetzt Testobjekte verwendet. Diese werden, wie schon gesagt, in einer YAML-Datei definiert. Der Code dazu ist wirklich minimalistisch:&lt;/p&gt;
&lt;pre&gt;SilvercartTax:
    VAT19:
        Title: 19%
        Rate: 19
        
SilvercartProduct:
    ProductWithPrice:
        isFreeOfCharge: 0
        Title: Product with price
        ShortDescription: This is the short description of the product with price
        LongDescription: This is the long description of the product with price
        isActive: 1
        PriceNetAmount: 90.00
        PriceNetCurrency: EUR
        PriceGrossAmount: 99.99
        PriceGrossCurrency: EUR
        SilvercartTax: =&amp;gt;SilvercartTax.VAT19
&lt;/pre&gt;
&lt;p&gt;Auf der ersten Ebene wird die Klasse (SilvercartTax) definiert, von der Objekte erzeugt werden. Die zweite Ebene ist der Identifikator eines Objekts, der in SilverStripe ja eigentlich die ID ist. Dazu aber gleich noch mehr. Auf der dritten Ebene werden Werte von Objektattributen (Title: 19%) oder Objektrelationen (SilvercartTax: =&amp;gt;SilvercartTax.VAT19) definiert. Bei einer Relation funktioniert das immer so:&lt;/p&gt;
&lt;pre&gt;NameDerRelation: =&amp;gt;[Klassenname].[Identifikator]&lt;/pre&gt;
&lt;p&gt;Das SilvercartTax-Objekt muss in der YAML-Datei vor dem SilvercartProduct-Objekt stehen. Dieses Prinzip gilt für alle Relationen.&lt;/p&gt;
&lt;p&gt;Jetzt aber zum eigentlichen Test mit Objekten. Der Test testGetTaxRate()&lt;/p&gt;
&lt;pre&gt;     /**
     * Is tax rate returned correctly?
     * 
     * @author Roland Lehmann 
     * @since 24.4.2011
     * @return void
     */
    public function testGetTaxRate() {
        $productWithTax = $this-&amp;gt;objFromFixture(&quot;SilvercartProduct&quot;, &quot;ProductWithPrice&quot;);
        $taxRate = $productWithTax-&amp;gt;getTaxRate();
        $this-&amp;gt;assertEquals(19, $taxRate, &quot;The tax rate is not correct.&quot;);
    }
&lt;/pre&gt;
&lt;p&gt;soll die Methode getTaxRate()&lt;/p&gt;
&lt;pre&gt;    /**
     * Returns the tax rate in percent. The attribute &#039;Rate&#039; of the relation
     * &#039;SilvercartTax&#039; is not used to handle with complex tax systems without
     * clearly defined product taxes.
     *
     * @return float the tax rate in percent
     *
     * @author Sebastian Diel 
     * @since 23.03.2011
     */
    public function getTaxRate() {
        return $this-&amp;gt;SilvercartTax()-&amp;gt;getTaxRate();
    }
&lt;/pre&gt;
&lt;p&gt;auf ihre korrekte Funktion hin überprüfen. Mit Hilfe der Methode objFromFixture() wird jetzt ein Produkt geladen, das in der YAML-Datei definiert wurde. Der erste Parameter steht für die Klasse, der zweite für den Identifikator des Objekts. Dieser Test ist an sich nicht besonders sinnvoll, prüft er doch lediglich das Ansprechen von Relationen. Dafür gibt es sicherlich einen Test im Framework. Er verdeutlicht aber hoffentlich den Umgang mit Objekten.&lt;/p&gt;
&lt;h3&gt;Das nur am Rande&lt;/h3&gt;
&lt;p&gt;Für den ein oder anderen ist es vielleicht wichtig zu wissen, dass während eines Tests ein Admin User erzeugt und eingeloggt wird. Dies geschieht irgendwo in der Methode  runTests() der Klasse TestRunner. Da viele der Methoden unseres SilverCart-Moduls auf die Klasse des eingeloggten Nutzers reagieren, ist das wichtig zu wissen.&lt;/p&gt;
&lt;p&gt;Beim Laden eines Objekts mit $obj = DataObject::get_one() ist man es ja gewohnt, dass Manipulationen an Attributen und Relationen auch an $obj stattfinden. Läd man ein Objekt aus der YAML-Datei mit $this-&amp;gt;objFromFixture(), ist das nicht der Fall:&lt;/p&gt;
&lt;pre&gt;        $productWithPrice = $this-&amp;gt;objFromFixture(&quot;SilvercartProduct&quot;, &quot;ProductWithPrice&quot;);
        $productWithPrice-&amp;gt;addToCart($cart-&amp;gt;ID, 2);
        $cartPosition = $this-&amp;gt;objFromFixture(&quot;SilvercartShoppingCartPosition&quot;, &quot;ShoppingCartPosition&quot;);
        $position = DataObject::get_by_id(&quot;SilvercartShoppingCartPosition&quot;, $cartPosition-&amp;gt;ID);
        $this-&amp;gt;assertEquals(3, $position-&amp;gt;Quantity, &quot;The quantity of the overwritten shopping cart position is incorrect.&quot;);
&lt;/pre&gt;
&lt;p&gt;Im Codebeispiel wird ein Produkt geladen und in den Einkaufswagen gelegt. Da es schon eine Position mit diesem Produkt gibt, wird deren Anzahl (Quantity) von 1 auf 3 erhöht. Die Position muss aber mit DataObject::get_one() neu geladen werden, da sich $cartPosition-&amp;gt;Quantity nicht manipulieren lässt. $cartPosition hat immer die in der YAML-Datei definierten Werte.&lt;/p&gt;</description>
                <pubDate>Sun, 24 Apr 2011 23:02:43 +0200</pubDate>
                
                
                <guid>http://www.pixeltricks.de/blog/silverstripe-und-phpunit/</guid>
            </item>
            
            <item>
                <title>Wer (y)A(ml) sagt, muss auch B sagen</title>
                <link>http://www.pixeltricks.de/blog/wer-yaml-sagt-muss-auch-b-sagen/</link>
                <description>&lt;p&gt;YAML ist unser hochgeschätztes CSS Framework, bitte nie wieder ohne! Wie man YAML und SilverStripe vereint, haben wir schon &lt;a title=&quot;Installation von YAML in SilverStripe&quot; href=&quot;http://www.pixeltricks.de/blog/installation-von-yaml-in-silverstripe/&quot;&gt;in einem unserer Blogbeiträge gezeigt.&lt;/a&gt; YAML hat bezüglich Formularen sehr genaue Anforderungen an das Markup, denen SilverStripe von Haus aus nicht gerecht wird. Da werden zum Beispiel &amp;lt;input&amp;gt; Felder in &amp;lt;div&amp;gt; geschachtet. Wer das ändern möchte, muss tief in die Trickkiste greifen. Aber uns ist ja bekanntlich kein Trick zu schwer ;-)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.pixeltricks.de/unternehmen/team/sascha-koehler/&quot;&gt;Sascha&lt;/a&gt; hat en passent ein Modul für SilverStripe entwickelt, das er CustomHtmlForm genannt hat. Einmal installiert bietet es dem Programmierer mittels Templates volle Kontrolle über das Markup und verändert den Umgang mit JavaScript.&lt;/p&gt;
&lt;p&gt;Im folgenden Beispiel will ich den Weg zu einem Kontaktformular beschreiben. Jedes Formular hat eine eigene Klasse und mit dieser fange ich jetzt an:&lt;/p&gt;
&lt;pre&gt;class ContactForm extends CustomHtmlForm {&lt;br/&gt;&lt;br/&gt;    protected $formFields = array(&lt;br/&gt;        &#039;Name&#039; =&amp;gt; array(&lt;br/&gt;            &#039;type&#039; =&amp;gt; &#039;TextField&#039;,&lt;br/&gt;            &#039;title&#039; =&amp;gt; &#039;Name&#039;,&lt;br/&gt;            &#039;checkRequirements&#039; =&amp;gt; array(&lt;br/&gt;                &#039;isFilledIn&#039; =&amp;gt; true,&lt;br/&gt;                &#039;hasMinLength&#039; =&amp;gt; 3&lt;br/&gt;            )&lt;br/&gt;        ),&lt;br/&gt;        &#039;Email&#039; =&amp;gt; array(&lt;br/&gt;            &#039;type&#039; =&amp;gt; &#039;TextField&#039;,&lt;br/&gt;            &#039;title&#039; =&amp;gt; &#039;Email Adresse&#039;,&lt;br/&gt;            &#039;value&#039; =&amp;gt; &#039;&#039;,&lt;br/&gt;            &#039;checkRequirements&#039; =&amp;gt; array(&lt;br/&gt;                &#039;isFilledIn&#039; =&amp;gt; true,&lt;br/&gt;                &#039;isEmailAddress&#039; =&amp;gt; true&lt;br/&gt;            )&lt;br/&gt;        ),&lt;br/&gt;        &#039;Message&#039; =&amp;gt; array(&lt;br/&gt;            &#039;type&#039; =&amp;gt; &#039;TextareaField&#039;,&lt;br/&gt;            &#039;title&#039; =&amp;gt; &#039;Nachricht&#039;,&lt;br/&gt;            &#039;checkRequirements&#039; =&amp;gt; array&lt;br/&gt;                (&lt;br/&gt;                &#039;isFilledIn&#039; =&amp;gt; true,&lt;br/&gt;                &#039;hasMinLength&#039; =&amp;gt; 3&lt;br/&gt;            )&lt;br/&gt;        )&lt;br/&gt;    );&lt;br/&gt;&lt;br/&gt;    protected $preferences = array(&lt;br/&gt;        &#039;submitButtonTitle&#039; =&amp;gt; &#039;absenden&#039;&lt;br/&gt;    );&lt;br/&gt;&lt;br/&gt;    protected function fillInFieldValues() {&lt;br/&gt;        $member = Member::currentUser();&lt;br/&gt;        if ($member) {&lt;br/&gt;            $this-&amp;gt;formFields[&#039;Name&#039;][&#039;value&#039;] = $member-&amp;gt;Surname;&lt;br/&gt;            $this-&amp;gt;formFields[&#039;Email&#039;][&#039;value&#039;] = $member-&amp;gt;Email;&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    protected function submitSuccess($data, $form, $formData) {&lt;br/&gt;&lt;br/&gt;        $email = new Email(&lt;br/&gt;                        &#039;info@pourlatable.de&#039;,&lt;br/&gt;                        &#039;rlehmann@pixeltricks.de&#039;,&lt;br/&gt;                        &#039;Kontaktformular Anfrage&#039;,&lt;br/&gt;                        &#039;&#039;&lt;br/&gt;        );&lt;br/&gt;&lt;br/&gt;        $email-&amp;gt;setTemplate(&#039;MailContact&#039;);&lt;br/&gt;        $email-&amp;gt;populateTemplate(&lt;br/&gt;                array(&lt;br/&gt;                    &#039;Name&#039; =&amp;gt; $formData[&#039;Name&#039;],&lt;br/&gt;                    &#039;Email&#039; =&amp;gt; $formData[&#039;Email&#039;],&lt;br/&gt;                    &#039;Message&#039; =&amp;gt; str_replace(&#039;\r\n&#039;, &#039;&amp;lt;br&amp;gt;&#039;, nl2br($formData[&#039;Message&#039;]))&lt;br/&gt;                )&lt;br/&gt;        );&lt;br/&gt;&lt;br/&gt;        $email-&amp;gt;send();&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;}&lt;/pre&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;p&gt;Im Array $formFields werden die Felder des Formulars definiert. Name ist der Identifier des Formularfeldes, type ist der SilverStripe Feldtyp und title ist die Beschriftung des Feldes. Mit checkRequirements kann man eine Reihe von Validierungsmethoden konfigurieren. Es gibt zur Zeit die Methoden hasSpecialSigns, isEmailAddress, isCurrency, isDate, isFilledIn, isFilledInDependantOn, isNumbersOnly, hasMinLength, hasLength, mustEqual, mustNotEqual.&lt;/p&gt;
&lt;p&gt;Im Array $preferences wird hier nur die Beschriftung des Submit Buttons festgelegt.&lt;/p&gt;
&lt;p&gt;Die Methode fillInFieldValues() dient zum Befüllen der Eingabefelder. Im Bespiel werden die Felder Name und Email mit den entsprechenden Werten eines eingeloggten Nutzers befüllt.&lt;/p&gt;
&lt;p&gt;Die Methode submitSuccess() wird aufgerufen, wenn keine Validierungsfehler aufbetreten sind. Im Gegensatz zur herkömmichen Action-Methode eines SilverStripe Formulars wird hier noch das Array $formData mitgeführt, das die Formulareingaben enthällt.&lt;/p&gt;
&lt;p&gt;So, das Formular brauch jetzt noch ein Template und muss in einen Controller implementiert werden. Ich fange mit dem CustomHtmlForm-atierten Template an. Es wird unter themes/blackcandy/templates/layout/ abgespeichert:&lt;/p&gt;
&lt;pre&gt;&amp;lt;% if IncludeFormTag %&amp;gt;&lt;br/&gt;&amp;lt;form class=&quot;yform&quot; $FormAttributes &amp;gt;&lt;br/&gt;&amp;lt;% end_if %&amp;gt;&lt;br/&gt;&lt;br/&gt;      $CustomHtmlFormMetadata&lt;br/&gt;&lt;br/&gt;      &amp;lt;fieldset&amp;gt;&lt;br/&gt;        &amp;lt;legend&amp;gt;Kontaktformular&amp;lt;/legend&amp;gt;&lt;br/&gt;        &amp;lt;div class=&quot;subcolumns&quot;&amp;gt;&lt;br/&gt;            &amp;lt;div class=&quot;c50l&quot;&amp;gt;&lt;br/&gt;                &amp;lt;div class=&quot;subcl&quot;&amp;gt;&lt;br/&gt;                    $CustomHtmlFormFieldByName(Name)&lt;br/&gt;                &amp;lt;/div&amp;gt;&lt;br/&gt;            &amp;lt;/div&amp;gt;&lt;br/&gt;            &amp;lt;div class=&quot;c50r&quot;&amp;gt;&lt;br/&gt;                &amp;lt;div class=&quot;subcr&quot;&amp;gt;&lt;br/&gt;                    $CustomHtmlFormFieldByName(Email)&lt;br/&gt;                &amp;lt;/div&amp;gt;&lt;br/&gt;            &amp;lt;/div&amp;gt;&lt;br/&gt;        &amp;lt;/div&amp;gt;&lt;br/&gt;        $CustomHtmlFormFieldByName(Message)&lt;br/&gt;    &amp;lt;/fieldset&amp;gt;&lt;br/&gt;&lt;br/&gt;    &amp;lt;div class=&quot;actionRow&quot;&amp;gt;&lt;br/&gt;        &amp;lt;div class=&quot;type-button&quot;&amp;gt;&lt;br/&gt;            &amp;lt;% control Actions %&amp;gt;&lt;br/&gt;            $Field&lt;br/&gt;            &amp;lt;% end_control %&amp;gt;&lt;br/&gt;        &amp;lt;/div&amp;gt;&lt;br/&gt;    &amp;lt;/div&amp;gt;&lt;br/&gt;&amp;lt;% if IncludeFormTag %&amp;gt;&lt;br/&gt;&amp;lt;/form&amp;gt;&lt;br/&gt;&amp;lt;% end_if %&amp;gt;&lt;br/&gt;&lt;/pre&gt;
&lt;div&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;line-height: 18px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;line-height: normal;&quot;&gt;
&lt;p&gt;Das Formular ist auf YAML-Art gestaltet. Mit $CustomHtmlFormFieldByName() werden die einzelnen Felder eingebaut. Der Parameter ist der Identifier des Feldes. Zum restlichen Zauber kann ich nicht viel sagen, das muss euch Sascha näher bringen ;)&lt;/p&gt;
&lt;p&gt;Jetzt muss das Formular noch in einem Controller angemeldet und aufgerufen werden. Das geschieht in der init() Methode des Controllers:&lt;/p&gt;
&lt;pre&gt;&lt;span style=&quot;font-family: Verdana, Lucida, Arial, sans-serif;&quot;&gt;public function init() {&lt;br/&gt;        $this-&amp;gt;registerCustomHtmlForm(&#039;ContactForm&#039;, new ContactForm($this));&lt;br/&gt;        parent::init();&lt;br/&gt;    }&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;Der Aufruf im Template des Controllers findet dann durch&lt;/p&gt;
&lt;pre&gt;&lt;span style=&quot;font-family: Verdana, Lucida, Arial, sans-serif;&quot;&gt;$InsertCustomHtmlForm(ContactForm)&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;statt. So einfach geht das mit SilverStripe, ein wenig pixeltricks und unserem Modul CustomHtmlForm.&lt;/p&gt;
&lt;p&gt;Das Modul CustomHtmlForm kann &lt;a title=&quot;Das CustomHtmlForm-Module für SilverStripe herunterladen&quot; href=&quot;https://bitbucket.org/silvercart/customhtmlform/overview&quot;&gt;hier auf bitbucket&lt;/a&gt; heruntergeladen werden.&lt;/p&gt;
&lt;p&gt;Die (nur auf englisch verfügbare) API-Dokumentation ist &lt;a title=&quot;API-Docs für CustomHtmlForm-Module für SilverStripe herunterladen&quot; href=&quot;http://doc.silvercart.org/modules/other/customhtmlform/1.0/&quot;&gt;hier auf unserer SilverCart-Projektseite&lt;/a&gt;.&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;</description>
                <pubDate>Tue, 05 Apr 2011 21:08:39 +0200</pubDate>
                
                
                <guid>http://www.pixeltricks.de/blog/wer-yaml-sagt-muss-auch-b-sagen/</guid>
            </item>
            
            <item>
                <title>SilverStripe 3: Roadmap Preview</title>
                <link>http://www.pixeltricks.de/blog/silverstripe-3-roadmap-preview/</link>
                <description>&lt;p&gt;Es gibt erste Informationen über die sehnsüchtig erwartete Version 3 des Open Source CMS Frameworks SilverStripe.&lt;/p&gt;
&lt;p&gt;Seit SilverStripe im Jahre 2007 in der Version 2.0 veröffentlicht wurde, sprang der Versionszähler jährlich um einen Minor-Release nach oben. Letztlich wurde 2010 die Version 2.4 veröffentlicht. Laut der Roadmap soll die Finale 3.0 noch in diesem Jahr veröffentlicht werden; eine Alpha-Version wird bis Mitte des Jahres erwartet.&lt;/p&gt;
&lt;h2&gt;Was wird uns SilverStripe 3.0 bringen?&lt;/h2&gt;
&lt;p&gt;Zunächst einmal soll das Backend der 3.0 für Entwickler einfacher anzupassen sein. Das ist der richtige Schritt, denn während einfache Dinge auch wirklich einfach sind, verlangen schwierige Dinge einen wirklich tiefen Griff in die Trickkiste.&lt;/p&gt;
&lt;p&gt;Die Entwicklungsfortschritte sollen weiterhin für jeden transparent sein. Backlog und Ticket-Stati sind nach wie vor auf &lt;a href=&quot;http://open.silverstripe.org/&quot;&gt;open.silverstripe.org&lt;/a&gt; ersichtlich.&lt;/p&gt;
&lt;p&gt;Es soll bei kurzen Zyklen (um nicht zu sagen: Sprints) bleiben, die ein meßbares Ziel haben. Kollaboration und dezentrale Entwicklung nach wie vor über github.com.&lt;/p&gt;
&lt;p&gt;Die (aus meiner Sicht) wichtigsten Aspekte:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Das ORM soll flexibler werden.&lt;/li&gt;
&lt;li&gt;Der Sapphire Core soll vom CMS getrennt werden&lt;/li&gt;
&lt;li&gt;UI des CMS soll schrittweise verbessert werden&lt;/li&gt;
&lt;li&gt;Inline Editing wird es (noch) nicht geben.&lt;/li&gt;
&lt;li&gt;Template flexibler: mehr als 2 Argumente im &amp;lt;% if %&amp;gt;&lt;/li&gt;
&lt;li&gt;Performanz, Datenbankabfragen sollen verbessert werden&lt;/li&gt;
&lt;li&gt;Es soll weniger statische Methodenaufrufe geben, dafür mehr &lt;a href=&quot;http://www.pixeltricks.de/blog/dependency-injection/&quot;&gt;Depency Injection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Konfiguration wie gehabt durch Entwickler im Code&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Datenbank: Fremdschlüssel und Contraints &lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;verbessertes Modulmanagement&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;versionerbare Assets (Bilder und Dokumente) mit einem verbesserten Workflow&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Ich finde die Roadmap sehr überzeugend. Es ist schön zu sehen, dass die Entwickler von SilverStripe dort anpacken, wo es nötig ist und nicht dort, wo es für die Marketingabteilung zweckmässiger ist.&lt;/p&gt;
&lt;p&gt;Es schein eine stetige und sinnvolle Weiterentwicklung zu werden und kein &quot;Big-Bang-Release&quot;.&lt;/p&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;p&gt;Herzlichen Dank, SilverStripe :-)&lt;/p&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;p&gt;Quelle: &lt;a href=&quot;http://prezi.com/lr3lmrgdhlgj/silverstripe-3-roadmap-preview/&quot;&gt;SilverStripe 3: Roadmap Preview by Ingo Schommer&lt;/a&gt;&lt;/p&gt;</description>
                <pubDate>Thu, 17 Feb 2011 15:51:28 +0100</pubDate>
                
                
                <guid>http://www.pixeltricks.de/blog/silverstripe-3-roadmap-preview/</guid>
            </item>
            
            <item>
                <title>Mit SilverStripe nach Babylon II</title>
                <link>http://www.pixeltricks.de/blog/mit-silverstripe-nach-babylon-2/</link>
                <description>&lt;p&gt;Zur Zeit entwickele ich zusammen mit Sascha und Sebastian ein SilverStripe-Modul, das kurz vor der Veröffentlichung steht. Einer der letzten Schritte ist die Implementierung der Mehrsprachigkeit. Dazu müssen allte Texte und Wörter aus Klassen und Templates, die im Frontend oder Backend erscheinen, durch eine Funktion ersetzt werden. Diese Funktion(_t()) setzt je nach eingestellter Sprache dann die passenden Sprachkonstanten ein.&lt;/p&gt;
&lt;h3&gt;Text Collector&lt;/h3&gt;
&lt;p&gt;Die erste Hürde, die es dabei zu nehmen gilt, ist der innere Schweinehund, denn bei diesem Arbeitsschritt handelt es sich größtenteils um eine Fleißarbeit. Jetzt da ich fertig bin, habe ich über 600 mal Text durch die _t()-Funktion ersetzt. Hilfe gibt es beim Erstellen der Sprachkonstanten vom &quot;Text Collector&quot;. Dieser liest die Aufrufe der _t()-Funktion in allen Templates und Klassen und erstellt eine entsprechende Zeile in der Datei /lang/de_DE.php, dem sogenannten Sprachpaket. Der Text Collector wird mit folgender URL aufgerufen:&lt;/p&gt;
&lt;pre&gt;&lt;span style=&quot;font-family: Verdana, Lucida, Arial, sans-serif;&quot;&gt;http://&amp;lt;mysite&amp;gt;/dev/tasks/i18nTextCollectorTask/?module=&amp;lt;modulename&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;Da ich zum ersten mal mit dem Text Collector gearbeitet hatte, wusste ich nicht, dass er dass Sprachpaket der in der _config.php eingestellten Standardsprache beschreibt, denn ich hatte dummerweise alle _t()-Funktionen mit englischem zweiten Parameter befüllt. Hier ein Beispiel:&lt;/p&gt;
&lt;pre&gt;&lt;span style=&quot;font-family: Verdana, Lucida, Arial, sans-serif;&quot;&gt;_t(&#039;DataPage.TITLE&#039;, &#039;my data&#039;)&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;Der Text Collector macht daraus im Sprachpaket folgende Zeile:&lt;/p&gt;
&lt;pre&gt;&lt;span style=&quot;font-family: Verdana, Lucida, Arial, sans-serif;&quot;&gt;$lang[&#039;de_DE&#039;][&#039;DataPage&#039;][&#039;TITLE&#039;] = &#039;my data&#039;;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;Der Text Collector verarbeitet zudem automatisch die Klassenattribute $singular_name und $plural_name. Diese müssen an keiner Stelle mit _t() dynamisiert werden, denn das Framework ersetzt die Klassenattribute automatisch, wenn sie mit dem Bezeichner SINGULARNAME bez. PLURALNAME im Sprachpaket vorhanden sind. Hier ein Beispiel:&lt;/p&gt;
&lt;pre&gt;&lt;p&gt;$lang[&#039;de_DE&#039;][&#039;DataPage&#039;][&#039;SINGULARNAME&#039;] = &#039;my data&#039;&lt;/p&gt;&lt;/pre&gt;
&lt;p&gt;Der Wert &#039;My data&#039; kam dabei aus der Klassenkonstanten $singular_name:&lt;/p&gt;
&lt;pre&gt;&lt;p&gt;class DataPage extends Page {&lt;/p&gt;&lt;p&gt;public static $singular_name = &quot;My data&quot;;&lt;/p&gt;&lt;/pre&gt;
&lt;h3&gt;Die anderen statischen Attribute&lt;/h3&gt;
&lt;p&gt;In PHP ist es nicht möglich einem statischen Attribut einer Klasse in der Definition einen dynamischen Wert zuzuweisen. Das muss im Constructor erfolgen. Auf diese weise lassen sich Attribute wie $field_label übersetzen:&lt;/p&gt;
&lt;pre&gt;&lt;p&gt;public function __construct($record = null, $isSingleton = false) {&lt;/p&gt;&lt;br/&gt;&lt;p&gt;self::$field_labels = array(&lt;/p&gt;&lt;br/&gt;&lt;p&gt;&#039;Title&#039; =&amp;gt; _t(&#039;Country.SINGULARNAME&#039;),&lt;/p&gt;&lt;br/&gt;&lt;p&gt;&#039;ISO2&#039; =&amp;gt; &#039;ISO2 Code&#039;,&lt;/p&gt;&lt;br/&gt;&lt;p&gt;&#039;ISO3&#039; =&amp;gt; &#039;ISO3 Code&#039;,&lt;/p&gt;&lt;br/&gt;&lt;p&gt;&#039;AttributedZones&#039; =&amp;gt; _t(&#039;Country.ATTRIBUTED_ZONES&#039;, &#039;attributed zones&#039;),&lt;/p&gt;&lt;br/&gt;&lt;p&gt;);&lt;/p&gt;&lt;br/&gt;&lt;p&gt;parent::__construct($record, $isSingleton);&lt;/p&gt;&lt;br/&gt;&lt;p&gt;}&lt;/p&gt;&lt;br/&gt;&lt;/pre&gt;
&lt;h3&gt;Workflow&lt;/h3&gt;
&lt;p&gt;Ich finde es sinnvoll, das zweite Attribut der _t()-Funktion in Englisch zu pflegen. So weis jeder Programmierer gleich, an welcher Stelle er gerade bastelt und muss nicht erst im Sprachpaket nachschauen, wenn er des Deutschen nicht mächtig ist. Ich setzte dabei voraus, dass jeder Programmierer Englisch kann.&lt;/p&gt;
&lt;p&gt;Beim Aufruf des Text Collectors wir das Sprachpaket der Systemsprache komplett überschrieben und alle Ãnderungen gehen verloren. Vor dem Aufruf des Text Collectors sollte man die Systemsprache auf en_US setzten, denn die _t()-Funktionen liefern ja englische Sprachwerte. Das $lang-Array habe ich dann mit der Hand in die de_DE.php kopiert und mit &quot;replace&quot; alle &quot;en_US&quot; in &quot;de_DE&quot; verwandelt. Jetzt muss ich nur noch 600 Textstellen ins Deutsche übersetzten :(&lt;/p&gt;
&lt;h3&gt;Fazit&lt;/h3&gt;
&lt;p&gt;Internationalisierung ist eine wichtiger Arbeitsschritt beim Bau eines Moduls. Ein Modul kann sich nur verbreiten, wenn Entwickler möglichst vieler Länder damit arbeiten. Dass man seine Sprachpakete automatisiert erstellt bekommt, ist ein super Feature.&lt;/p&gt;
&lt;p&gt;Danke SilverStripe-Team :)&lt;/p&gt;</description>
                <pubDate>Wed, 02 Feb 2011 20:22:13 +0100</pubDate>
                
                
                <guid>http://www.pixeltricks.de/blog/mit-silverstripe-nach-babylon-2/</guid>
            </item>
            
    </channel>
</rss>
