<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>patrickburke.de &#187; Development</title>
	<atom:link href="http://patrickburke.de/wordpress/index.php/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://patrickburke.de/wordpress</link>
	<description>PHP, JavaScript, XHTML, CSS, Web.</description>
	<lastBuildDate>Wed, 19 May 2010 18:51:11 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Wer hat noch nicht, wer will nochmal?</title>
		<link>http://patrickburke.de/wordpress/index.php/2009/11/wer-hat-noch-nicht-wer-will-nochmal/</link>
		<comments>http://patrickburke.de/wordpress/index.php/2009/11/wer-hat-noch-nicht-wer-will-nochmal/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 18:57:15 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[chatten]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[free accounts]]></category>
		<category><![CDATA[free invitations]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google wave]]></category>
		<category><![CDATA[iron]]></category>
		<category><![CDATA[wave]]></category>
		<category><![CDATA[web2]]></category>

		<guid isPermaLink="false">http://patrickburke.de/wordpress/?p=264</guid>
		<description><![CDATA[UPDATE: Wave ab sofort offen für alle!
Also: Einladungen sind nicht länger nötig; anmelden und wohl fühlen  
UPDATE: Noch 13 übrig.
UPDATE: Wie es scheint bekommt nun jeder der schon bei Google Wave registriert ist weitere acht Einladungen. Somit komme ich jetzt auf insgesamt 14 Einladungen, die noch verschickt werden können.
Ich habe vor kurzem eine Google [...]]]></description>
			<content:encoded><![CDATA[<p><strong>UPDATE</strong>: <a href="http://www.golem.de/1005/75240.html">Wave ab sofort offen für alle</a>!<br />
Also: Einladungen sind nicht länger nötig; anmelden und wohl fühlen <img src='http://patrickburke.de/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>UPDATE</strong>: Noch 13 übrig.</p>
<p><strong>UPDATE</strong>: Wie es scheint bekommt nun jeder der schon bei Google Wave registriert ist weitere acht Einladungen. Somit komme ich jetzt auf insgesamt <strong>14 Einladungen</strong>, die noch verschickt werden können.</p>
<p>Ich habe vor kurzem eine <a href="http://wave.google.com">Google Wave</a> Einladung bekommen. Und nun, da ich die meisten Einladungen an Arbeitskollegen und Freunde verteilt habe und immer noch neun Einladungen übrig sind, dacht ich mir &#8220;Machste mal was nobles!&#8221;</p>
<p>Da ich persönlich ja gar nicht so auf Gewinnspiele oder Quizfragen etc. stehe mach ich es ganz kurz und schmerzlos: <strong>Die ersten neun Leute die diesen Artikel finden und einen Kommentar drunter schreiben bekommen eine Einladung.</strong> Die eMail Adresse ist dabei Pflicht, ohne die kann ich euch keine Einladung schicken. Ein Google Konto kann auch nach der Einladung erstellt werden. Aber früher oder später braucht man ein solches.</p>
<p>Google empfiehlt folgende Browser: <a href="http://iedeathmarch.org/">Internet Explorer 6</a>, <a href="http://www.getfirefox.com">Firefox 3.5</a>, <a href="http://www.apple.com/de/safari/download/">Safari 4</a> und <a href="http://www.google.com/chrome">Google Chrome</a>.<br />
Ne scherz, der IE kommt auf sowas natürlich gar nicht klar, weder Version 6 noch 7 noch 8, nur die anderen drei Browser werden von Google empfohlen. Opera (10.01) hat jedoch Probleme mit der Darstellung von Wave. Ich empfehle <a href="http://www.srware.net/software_srware_iron.php">Iron</a>, die Google-lose Version von Chrome. Warum? Wegen der schnellen JavaScript Engine und der Google-Losigkeit. Das ist kein gelaber, ich selbst hab mir extra Iron installiert, da Firefox zumindest bei der JS Ausführung ein wenig zu langsam ist. Vielleicht hilft auch ein schneller PC, das kann ich mangels letzterem nicht beurteilen.</p>
<p>Aber wenn man zu zweit, jeder mit entsprechender Performance mitttels Wave chattet kann man, und das hab ich erst nicht geglaubt, tatsächlich sehen wie der andere tippt. Vielleicht sollte ich es nochmal erwähnen: Das ist eine Preview Version. Oft bleibt bei alles hängen, Nachrichten kommen erst nach einer gewissen Zeit an, etc.</p>
<p>Nun denn, lasst die Spiele beginnen!</p>
]]></content:encoded>
			<wfw:commentRss>http://patrickburke.de/wordpress/index.php/2009/11/wer-hat-noch-nicht-wer-will-nochmal/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Zend_Acl Autoloader?</title>
		<link>http://patrickburke.de/wordpress/index.php/2009/07/zend_acl_autoloader/</link>
		<comments>http://patrickburke.de/wordpress/index.php/2009/07/zend_acl_autoloader/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 18:57:30 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[acl]]></category>
		<category><![CDATA[dynamic acl]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[zend framework]]></category>
		<category><![CDATA[zend_acl]]></category>
		<category><![CDATA[zion_acl]]></category>

		<guid isPermaLink="false">http://patrickburke.de/wordpress/?p=195</guid>
		<description><![CDATA[Wieder zum Zend Framework.
Als ich mir die Dokumentation zu Zend_Acl durchlas war mein erster Gedanke &#8220;Mein Gott, ich soll bei jedem Seiten Aufruf die gesamte ACL Struktur laden? Das kann doch nicht euer Ernst sein.&#8221;
Natürlich nicht. Erneut Google zur Hilfe gerufen fand ich schnell einen dynamischen ACL Loader im Wiki des Frameworks. Die Lösung! Funktioniert [...]]]></description>
			<content:encoded><![CDATA[<p>Wieder zum <a href="http://framework.zend.com" target="_blank">Zend Framework</a>.</p>
<p>Als ich mir die Dokumentation zu <em>Zend_Acl</em> durchlas war mein erster Gedanke &#8220;Mein Gott, ich soll bei jedem Seiten Aufruf die gesamte ACL Struktur laden? Das kann doch nicht euer Ernst sein.&#8221;</p>
<p>Natürlich nicht. Erneut Google zur Hilfe gerufen fand ich schnell <a href="http://framework.zend.com/wiki/display/ZFPROP/Zend_Acl+dynamic+loading+-+Aldemar+Bernal" target="_self">einen dynamischen ACL Loader</a> im Wiki des Frameworks. Die Lösung! Funktioniert auch super, doch zickte es ein wenig mit Objekte als Resource/Role IDs, selbst dann wenn diese das <em>Zend_Acl_Resource_Interface</em> bzw. das <em>Zend_Acl_Role_Interface</em> implementierten. Also überschrieb ich die entsprechende Methode einfach und fügte so die <span style="text-decoration: line-through;">fehlenden</span> gewünschten Funktionen hinzu.</p>
<p>Blödsinn! Warum? Ganz einfach: Ich hatte sowieso schon eine eigene Version von <em>Zend_Acl::isAllowed()</em> geschrieben (nicht überschrieben, meine Variante gehört zu einem Plugin das für ACL zuständig ist und nicht von <em>Zend_Acl</em> erbt), welche wiederum <em>Zend_Acl::isAllowed()</em> benutzt um festzustellen, ob Peter nun Zugriff hat oder nicht (Ein Name, den ich ständig als Platzhalter benutze, man kann ihn einfach so schnell tippen. Und nein, meine Passwörter enthalten diesen Namen nicht <img src='http://patrickburke.de/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ).</p>
<p>Jedenfalls lade ich nun innerhalb meiner Variante von <em>Zend_Acl::isAllowed()</em> zuerst alle Rollen und Resourcen nach denen gefragt ist (selbstverständlich mit einer Überprüfung ob diese nicht vielleicht schon geladen sind), besorge mir die Berechtigungsdaten aus der Datenbank, verwende entsprechend <em>Zend_Acl::allow()</em> bzw. <em>-::deny()</em> um die Berechtigungen festzulegen und am Schluß <em>Zend_Acl::isAllowed()</em> um nun endlich herauszubekommen wie es um Peters Berechtigungen bestellt ist. Das ACL Objekt sollte statisch deklariert werden um sicherzugehen, dass das Rad nicht ständig neu erfunden wird.</p>
]]></content:encoded>
			<wfw:commentRss>http://patrickburke.de/wordpress/index.php/2009/07/zend_acl_autoloader/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend_Layout: Layouts pro Modul</title>
		<link>http://patrickburke.de/wordpress/index.php/2009/07/zend_layout-layouts-per-module/</link>
		<comments>http://patrickburke.de/wordpress/index.php/2009/07/zend_layout-layouts-per-module/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 16:53:58 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[layout]]></category>
		<category><![CDATA[per module]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://patrickburke.de/wordpress/?p=184</guid>
		<description><![CDATA[Heute stand ich vor dem Problem, jedem der Module einer Zend Application eine eigene layout.phtml zuweisen zu müssen. Zuerst dachte ich, es sei ganz einfach über eine application.ini Zeile á la
admin.resources.layout.layoutPath = path/to/layout
möglich (wobei &#8220;admin&#8221; hier der Modulname ist). Doch wie so häufig brachte der Druck auf F5 Ernüchterung, es funktioniert so nicht.
Eine kurze Google [...]]]></description>
			<content:encoded><![CDATA[<p>Heute stand ich vor dem Problem, jedem der Module einer Zend Application eine eigene <em>layout.phtml</em> zuweisen zu müssen. Zuerst dachte ich, es sei ganz einfach über eine <em>application.ini </em>Zeile á la</p>
<p><em>admin.resources.layout.layoutPath = path/to/layout</em></p>
<p>möglich (wobei <em>&#8220;admin&#8221;</em> hier der Modulname ist). Doch wie so häufig brachte der Druck auf F5 Ernüchterung, es funktioniert so nicht.</p>
<p>Eine kurze Google Suche <a href="http://dustint.com/archives/28" target="_blank">ergab</a>, dass man sich einfach ein Front Controller Plugin schreiben kann, das vor dem Dispatchen abhängig vom Modulnamen die entsprechende layout.phtml lädt. Eigentlich genau das was ich wollte, aber es musste doch einen Weg geben ohne zusätzlichen Code dasselbe Ziel zu erreichen.</p>
<p>Also gab ich mich nicht mit diesem Plugin zufrieden und probierte herum, bis mir eine Fehlermeldung die Augen öffnete. Und zwar sucht Zend unter anderem auch im <em>/scripts/views/</em> Unterverzeichnis eines jeden Moduls nach einer <em>layout.phtml</em>. Also brauchte ich nur die <em>&#8220;resources.layout.*&#8221;</em> Einstellungen in der Konfiguration entfernen und eine <em>layout.phtml</em> in den eben genannten Verzeichnissen erstellen und &#8211; voilà &#8211; schon benutzt jedes Modul sein eigenes Layout; krass, oder?</p>
]]></content:encoded>
			<wfw:commentRss>http://patrickburke.de/wordpress/index.php/2009/07/zend_layout-layouts-per-module/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ferngesteuerte Batchfiles</title>
		<link>http://patrickburke.de/wordpress/index.php/2009/01/remote-batchfiles/</link>
		<comments>http://patrickburke.de/wordpress/index.php/2009/01/remote-batchfiles/#comments</comments>
		<pubDate>Fri, 16 Jan 2009 16:49:13 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Allgemeines]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[aptana]]></category>
		<category><![CDATA[psexec]]></category>
		<category><![CDATA[pstools]]></category>
		<category><![CDATA[smartsync]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://patrickburke.de/wordpress/?p=119</guid>
		<description><![CDATA[Wenn ich an einer Webseite arbeite mache ich üblicherweise kleine Änderungen, lade die Dateien hoch und teste was ich gemacht habe. Das hat sich so bewährt. Der Nachteil an dieser Vorgehensweise ist allerdings, dass ich immer wieder die frisch geänderten Dateien von meinem Computer aus in den www-root meines heimischen Servers übertragen muss. Und nur [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn ich an einer Webseite arbeite mache ich üblicherweise kleine Änderungen, lade die Dateien hoch und teste was ich gemacht habe. Das hat sich so bewährt. Der Nachteil an dieser Vorgehensweise ist allerdings, dass ich immer wieder die frisch geänderten Dateien von meinem Computer aus in den www-root meines heimischen Servers übertragen muss. Und nur die geänderten Dateien, nicht alles.</p>
<h2>Aptanas &#8220;Smartsync&#8221;</h2>
<p>Eigentlich die perfekte Lösung: Ein Klick, und alles im www-root wird auf den neuesten Stand gebracht. Dummerweise klappt das nicht ganz so einfach. Meistens lädt es nahezu alle Dateien neu hoch, auch die, die eigentlich noch aktuell sind. Das führt zu nervenden Wartezeiten. <a href="http://support.aptana.com/asap/browse/STU-3031">Ein Ticket im Aptana Support ist bereits erstellt</a>.</p>
<p>Ich will <a href="http://www.aptana.com">Aptana</a> nicht schlecht reden, im Gegenteil. Aptana ist hervorragend, es hat eine sehr gute Unterstützung für PHP (per Plugin, lass dich davon nicht abschrecken!), HTML, JavaScript, CSS und viele mehr. Sogar eine iPhone Testumgebung wird (ebenfalls per Plugin) angeboten. Sieh am besten selbst auf <a href="http://www.aptana.com">http://www.aptana.com</a> vorbei, kann ich nur empfehlen.<span id="more-119"></span></p>
<h2>Subversion</h2>
<p>Ich hab irgendwo im Internet schon ein Mal davon gelesen, dass man ein Versionskontrollsystem wie <a href="http://subversion.tigris.org/">Subversion</a> gut dazu benutzen kann, direkt durch ein Update-Befehl die neusten Dateien aus dem Repository in den www-root zu laden. So ein System berücksichtigt dabei automatisch, ob die Dateien überhaupt geändert wurden und entscheidet dementsprechend ob ein Upload einer Datei vorgenommen werden soll oder nicht. Da ich sowieso schon immer so ein System bei mir installieren wollte, habe ich die Gelegenheit genutzt und es einfach getan. <img src='http://patrickburke.de/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Das Problem und dessen Lösung</h2>
<p>Nach der Installation eines SVN Servers konnte es losgehen (ich benutze <a href="http://www.collab.net/products/subversion/">CollabNet Subversion</a>). Zuerst müssen zwei Batchfiles angelegt werden, eins auf dem Arbeitscomputer, eins auf dem Server. Das erste sorgt für das Commit ins Repository, das zweite für ein SVN-update vom Repo in den www-root (Nähere Informationen zur Installation und Benutzung von SVN entnimmst du am besten dem <a href="http://svnbook.red-bean.com/">SVN Book</a>).</p>
<p>Nun müsste man erst das Commit-Script auf dem einen, und dann das Update-Script auf dem anderen Computer ausführen. Und hier ist das Problem: Das ist mir schlicht weg zu umständlich. Der Haken ist, dass das Update-Script auf dem Server ausgeführt werden muss, und nicht über eine Freigabe auf meinem Computer. Jedesmal mit einer Remote Software auf den Server zugreifen um das Script aufzuführen macht es nicht besser.</p>
<p>Theoretisch besteht die Lösung aus einem DOS Befehl, der ein Skript ferngesteuert auf einem anderen Computer ausführt. So einen Befehl habe ich in DOS selbst leider nicht gefunden. Also habe ich mir das Internet zur Hilfe gerufen. Gefunden habe ich <a href="http://technet.microsoft.com/de-de/sysinternals/bb896649.aspx">PsTools</a>, genauer gesagt &#8220;<a href="http://technet.microsoft.com/de-de/sysinternals/bb897553.aspx">psexec</a>&#8220;, was sich unter diesen Tools befindet.</p>
<p>Dieses Tool macht genau das was ich brauche. Es führt ein Batchfile ferngesteuert auf einem anderen Computer aus. In meinem Fall wäre dies das Update-Script auf meinem heimischen Server.</p>
<p>Unter Verwendung dieses Tools war es mir nun möglich, das &#8220;Megaupdatebatchscript&#8221; zu schreiben, mit dessen Hilfe sich durch einen Klick der www-root aktualisiert. Das Megaupdatebatchscript enthält also nun einmal den Commit Befehl (ich benutze hier <a href="http://tortoisesvn.net/">TortoiseSVN</a>, um bei jedem Commit auch komfortabel einen Kommentar zu den Änderungen schreiben zu können) und einen Aufruf von &#8220;psexec&#8221;, welcher für die Ausführung des sich auf dem Server befindlichem Batchfiles mit dem SVN-update Befehl sorgt.</p>
<p>Das sieht bei mir dann so aus:</p>
<p>TortoiseProc.exe /command:commit /path:&#8221;C:/aptana_workspaces/patrick/patrickburke.de/&#8221; /closeonend:1</p>
<p>psexec -u &#8220;volker racho&#8221; -p &#8220;&#8221; \\volker c:\megaupdatebatchscript.cmd</p>
<p>Nähere Informationen zur ersten Zeile gibt es in <a href="http://tortoisesvn.net/docs/release/TortoiseSVN_de/tsvn-automation.html">den Docs von TortoiseSVN</a>. Wie man psexec benutzt ist auf <a href="http://technet.microsoft.com/de-de/sysinternals/bb897553.aspx">der Projekt Seite</a> erklärt.</p>
<h2>Die Geschwindigkeit</h2>
<p>Schneller geworden ist es aber unterm Strich doch nicht. Ich habe nämlich vergessen zu berücksichtigen, dass psexec schließlich auch eine Verbindung zum Server braucht, was irgendwie ziemlich lange dauert.</p>
<p>Aber hey, jetzt hab ich ein Versionskontrollsystem installiert.</p>
]]></content:encoded>
			<wfw:commentRss>http://patrickburke.de/wordpress/index.php/2009/01/remote-batchfiles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Smarty 3</title>
		<link>http://patrickburke.de/wordpress/index.php/2008/11/smarty-3/</link>
		<comments>http://patrickburke.de/wordpress/index.php/2008/11/smarty-3/#comments</comments>
		<pubDate>Mon, 03 Nov 2008 19:05:13 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[smarty]]></category>
		<category><![CDATA[smarty 3]]></category>
		<category><![CDATA[template engine]]></category>

		<guid isPermaLink="false">http://patrickburke.de/wordpress/?p=60</guid>
		<description><![CDATA[Mein favourite in Sachen Templates entwickelt sich weiter!
Ihr könnt in der Smarty Developers Group auch euren Senf dazu geben oder in der Smarty Discussion Group einfach mal so über diese tolle Template Engine plaudern.  
]]></description>
			<content:encoded><![CDATA[<p>Mein favourite in Sachen Templates entwickelt sich weiter!</p>
<p>Ihr könnt in der <a href="http://groups.google.com/group/smarty-developers?hl=en">Smarty Developers Group</a> auch euren Senf dazu geben oder in der <a href="http://groups.google.com/group/smarty-discussion?hl=en&amp;lnk=srg">Smarty Discussion Group</a> einfach mal so über diese tolle Template Engine plaudern. <img src='http://patrickburke.de/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://patrickburke.de/wordpress/index.php/2008/11/smarty-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
