<?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>Axel Jung &#187; pear</title>
	<atom:link href="http://www.ajung.de/tag/pear/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ajung.de</link>
	<description>Privater Blog von Axel Jung aus Wiesbaden</description>
	<lastBuildDate>Mon, 03 May 2010 19:12:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>PHP Tools Workaround für Windows</title>
		<link>http://www.ajung.de/2009/11/25/php-tools-workaround-fur-windows/</link>
		<comments>http://www.ajung.de/2009/11/25/php-tools-workaround-fur-windows/#comments</comments>
		<pubDate>Wed, 25 Nov 2009 09:33:23 +0000</pubDate>
		<dc:creator>ajung</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[pear]]></category>

		<guid isPermaLink="false">http://www.ajung.de/?p=587</guid>
		<description><![CDATA[Leider gibt es in den PHP Tools für Eclipse einen kleinen Bug unter Windows wenn man ein eigenen Coding Standard verwenden will. Der PHP_CodeSniffer kann mit dem Parameter &#8211;standard aufgerufen werden und der CodeSniffer sucht in dem Pfad nach Sniff Dateien. Der CodeSniffer verwendet dafür die PHP Konstante DIRECTORY_SEPARATOR die ja bekanntlich unter Windows ein [...]]]></description>
			<content:encoded><![CDATA[<p>Leider gibt es in den <a href="http://www.phpsrc.org/wiki/">PHP Tools für Eclipse</a> einen kleinen Bug unter Windows wenn man ein eigenen Coding Standard verwenden will. Der <a href="http://pear.php.net/package/PHP_CodeSniffer/">PHP_CodeSniffer</a> kann mit dem Parameter &#8211;standard aufgerufen werden und der CodeSniffer sucht in dem Pfad nach Sniff Dateien. Der CodeSniffer verwendet dafür die PHP Konstante DIRECTORY_SEPARATOR die ja bekanntlich unter Windows ein \ ist und kein /. Jetzt sollte man unter Windows den CodeSniffer wie folgt aufrufen:</p>
<pre>phpcs --standard=C:\path\to\standard</pre>
<p>Wenn man aber bei den PHP-Tools in die Debug Ausgabe schaut wird folgender Befehl ausgeführt</p>
<pre>phpcs --standard=C:/path/to/standard</pre>
<p>Dadurch findet der CodeSniffer die Dateien nicht.</p>
<p>Ich habe den Bug gemeldet und hoffe das es bald behoben ist.</p>
<p>Als Workaround habe ich den CodeSniffer innerhalb des PEAR Packet angepasst und folgende Zeile ergänzt:</p>
<pre>PHP\CodeSniffer.php Zeile 400</pre>
<pre>$this-&gt;standardDir = str_replace('/',DIRECTORY_SEPARATOR,$this-&gt;standardDir);</pre>
<p>In Eclipse muss man dann noch bei den PHP-Tools Einstellungen die lokale PEAR Libary verwenden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ajung.de/2009/11/25/php-tools-workaround-fur-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Code Analyse mit PHP_Depend</title>
		<link>http://www.ajung.de/2009/11/05/code-analyse-mit-php_depend/</link>
		<comments>http://www.ajung.de/2009/11/05/code-analyse-mit-php_depend/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 18:49:55 +0000</pubDate>
		<dc:creator>ajung</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Typo3]]></category>
		<category><![CDATA[pear]]></category>

		<guid isPermaLink="false">http://www.ajung.de/?p=544</guid>
		<description><![CDATA[Das PHP Pear Packet &#8220;PHP_Depend&#8221; eignet sich hervoragent zur Analyse der Code Qualität des eigenen PHP Projekts. Es lässt sich einfach über den Pear Installer installieren und kann dann auf der Comando Zeile über den Befehl &#8220;pdepend&#8221; aufrufen. Es wird nur PHP benötigt und kein Webserver oder Datenbank. Eine Installation unter Windows war ohne Probleme [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://pdepend.org/"><img class="alignright size-full wp-image-545" title="php_depend" src="http://www.ajung.de/wp-content/uploads/2009/11/php_depend.png" alt="php_depend" width="250" height="110" /></a>Das PHP Pear Packet &#8220;<a href="http://pdepend.org/">PHP_Depend</a>&#8221; eignet sich hervoragent zur Analyse der Code Qualität des eigenen PHP Projekts. Es lässt sich einfach über den Pear Installer installieren und kann dann auf der Comando Zeile über den Befehl &#8220;pdepend&#8221; aufrufen. Es wird nur PHP benötigt und kein Webserver oder Datenbank. Eine Installation unter Windows war ohne Probleme möglich.</p>
<p>Man kann PHP_Depend über einen beliebigen Code Ordner laufen lassen und sich dabei verschiedenen Formate ausgeben lassen.</p>
<p><a href="http://clarkware.com/software/JDepend.html">JDepend</a> ist ein Format aus der JavaWelt und wohl auch für den Namen des Projektes verantwortlich</p>
<blockquote><p>JDepend traverses Java class file directories and generates design quality metrics for each Java package. JDepend allows you to automatically measure the quality of a design in terms of its extensibility, reusability, and maintainability to manage package dependencies effectively.</p></blockquote>
<ul>
<li>&#8211;jdepend-chart=&#8230;.svg Erzeugt eine SVG Grafik die die Instabilität in Abhängigkeit zur Abstraktion anzeigt</li>
<li>&#8211; jdepend-xml=&#8230;xml Gibt diese Informationen als XML Datei aus</li>
</ul>
<p>Es gibt auch eine reine XML Ausgabe,  in der die Ergebnisse für jede einzelne Datei steht</p>
<ul>
<li>&#8211;summary-xml=&#8230;.xml</li>
</ul>
<p>Spannend ist auch die Pyramiden Darstellung</p>
<ul>
<li>&#8211;overview-pyramid=&#8230;.xml</li>
</ul>
<p><img class="alignnone size-full wp-image-559" title="pyramid" src="http://www.ajung.de/wp-content/uploads/2009/11/pyramid2.png" alt="pyramid" width="500" height="274" /></p>
<h3>@package</h3>
<p>Wenn man in seinen PHPDoc Kommentaren nicht mit dem @package Element gearbeitet hat muss man den Parameter <strong>&#8211;bad-documentation </strong>angeben. Lässt man den weg wird entweder gar nichts erzeugt oder nur für die Dateien die diesen Element besitzen. Um ordentlich mit dem Tool arbeiten zu können, sollte man @package ergänzen.</p>
<h3>Typo3 Vergleich</h3>
<p>Ich habe man den Kern von Typo3 Version 4 und 5 mit dem Tool analysiert:</p>
<p>JDepend Chart:</p>
<p>Typo3 4</p>
<p><img class="alignnone size-full wp-image-561" title="4_typo3" src="http://www.ajung.de/wp-content/uploads/2009/11/4_typo3.png" alt="4_typo3" width="402" height="252" /></p>
<p>Typo3 5</p>
<p><img class="alignnone size-full wp-image-563" title="5_typo3" src="http://www.ajung.de/wp-content/uploads/2009/11/5_typo3.png" alt="5_typo3" width="405" height="265" /></p>
<p>Überblick:</p>
<p>Typo3 4</p>
<p><img class="alignnone size-full wp-image-560" title="ov_4_typo3" src="http://www.ajung.de/wp-content/uploads/2009/11/ov_4_typo3.png" alt="ov_4_typo3" width="400" height="158" /></p>
<p>Typo3 5</p>
<p><img class="alignnone size-full wp-image-562" title="ov_5_typo3" src="http://www.ajung.de/wp-content/uploads/2009/11/ov_5_typo3.png" alt="ov_5_typo3" width="423" height="162" /></p>
<p>Aussagekräftig ist dieser Vergleich natürlich noch nicht, da Version 5 noch kaum Code enthält, aber man kann einen deutliche besseren Code erkennen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ajung.de/2009/11/05/code-analyse-mit-php_depend/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Design Pattern: Observer/Events mit PEAR</title>
		<link>http://www.ajung.de/2008/08/15/design-pattern-observerevents-mit-pear/</link>
		<comments>http://www.ajung.de/2008/08/15/design-pattern-observerevents-mit-pear/#comments</comments>
		<pubDate>Fri, 15 Aug 2008 15:29:30 +0000</pubDate>
		<dc:creator>ajung</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[design pattern]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[pear]]></category>

		<guid isPermaLink="false">http://www.ajung.de/?p=47</guid>
		<description><![CDATA[Das Events Design Pattern ist ein sehr nützliches Pattern wenn man eine Anwendung hat in der sehr viel fachliche Logik auftritt und es ständig neue Anforderungen an bestehenden Prozessen gibt. Beispielsweise kann es sein das nach einen Login verschiedene Dinge geprüft werden müssen. Zusätzlich sollen vielleicht noch Aktionen geloggt werden. Wenn man jedesmal den Code [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-49" style="border: 1px solid black;" title="pear-package-event_dispatcher_1218811672121" src="http://www.ajung.de/wp-content/uploads/2008/08/pear-package-event_dispatcher_1218811672121.png" alt="" width="358" height="222" />Das Events  Design Pattern ist ein sehr nützliches Pattern wenn man eine Anwendung hat in der sehr viel fachliche Logik auftritt und es ständig neue Anforderungen an bestehenden Prozessen gibt.</p>
<p>Beispielsweise kann es sein das nach einen Login verschiedene Dinge geprüft werden müssen. Zusätzlich sollen vielleicht noch Aktionen geloggt werden.</p>
<p>Wenn man jedesmal den Code für den Login erweitern würde, dann hätte man innerhalb kürzester Zeit eine riesige Klasse mit schwer wartbaren Code.</p>
<p>Bei dem Observer Pattern gibt eine Anwendung nur bekannt das ein bestimmtes Ereignis (Event) stattgefunden hat. Andere Programmteile können sich von außen an den EventDispatcher anmelden und werden dann von diesen benachrichtigt wenn das Ereignis eintritt.</p>
<p>In der PHP Bibliothek <a href="http://pear.php.net/">PEAR</a> gibt es dieses Pattern schon fertig programmiert: <a href="http://pear.php.net/package/Event_Dispatcher">Event_Dispatcher.</a></p>
<h4>1. Handler erstellen</h4>
<p>Als Erstes benötigt man einen Handler der das Ereignis verarbeitet.</p>
<p>class Handler{<br />
/**<br />
* @param    Event_Notification<br />
*/<br />
public function getOnlogin(Event_Notification $oEvent_Notification){<br />
$oValueObjects_User = $oEvent_Notification-&gt;getNotificationObject();<br />
$aInfos = $oEvent_Notification-&gt;getNotificationInfo();<br />
// mach irgendetwas<br />
}<br />
}</p>
<h4>2. Handler registrieren</h4>
<p>Jetzt muss der Handler beim Event Dispatcher registriert werden.</p>
<pre>require_once 'Event/Dispatcher.php';
$oEvent_Dispatcher = Event_Dispatcher::getInstance();
$oEvent_Dispatcher-&gt;addObserver(array(new Handler(),'onLogin'),'onLogin');</pre>
<p>Der erste Parameter ist ein PHP Callback. Als dritten Parameter kann man von eingrenzen von welche Objekten dieser Event geworfen werden darf.</p>
<h4>3. Ereignis auslösen</h4>
<p>Jetzt muss das Ereignis noch ausgelöst werden.</p>
<pre>require_once 'Event/Dispatcher.php';
Event_Dispatcher::getInstance()-&gt;post($this,'onLogin',$aInfo);</pre>
<p>Im dritten Parameter kann man noch Informationen in Form eines Array übergeben.</p>
<h3>Nutzen</h3>
<h4>Veränderung vermeiden</h4>
<p>Der Nutzen in dem Pattern liegt darin das man die Anwendung nicht mehr nachträglich anpassen muss um Erweiterungen einzubauen.</p>
<h4>Verantwortlichkeiten sauber trennen</h4>
<p>Die Verantworltichkeit der Kompontenten bleibt frei von Nebensächlichkeiten. Zum Beispiel kümmert sich dann die Login Komponente nur um das Login und sonst nichts. Alles andere wird über die Events abgearbeitet.</p>
<h3>Fazit</h3>
<p>Ich verwende dieses Pattern sehr viel und es macht die Anwendung wartbarer und den Einbau von Erweiterungen einfacher. In anderen Sprachen wie .NET ist das Pattern bereits in die Sprache eingebaut.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ajung.de/2008/08/15/design-pattern-observerevents-mit-pear/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
