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

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    
    <title>Manuel Pichler - planet-php</title>
    <link>http://www.manuel-pichler.de/</link>
    <description>Trust is good, (phpUnder)Control is better.</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.6 - http://www.s9y.org/</generator>
    
    

<item>
    <title>A brief introduction to the Coupling Between Objects metric</title>
    <link>http://www.manuel-pichler.de/archives/97-A-brief-introduction-to-the-Coupling-Between-Objects-metric.html</link>
            <category>php</category>
            <category>php_depend</category>
            <category>phpugdo</category>
            <category>planet-php</category>
            <category>projects</category>
    
    <comments>http://www.manuel-pichler.de/archives/97-A-brief-introduction-to-the-Coupling-Between-Objects-metric.html#comments</comments>
    <wfw:comment>http://www.manuel-pichler.de/wfwcomment.php?cid=97</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://www.manuel-pichler.de/rss.php?version=2.0&amp;type=comments&amp;cid=97</wfw:commentRss>
    

    <author>nospam@example.com (Manuel Pichler)</author>
    <content:encoded>
    &lt;p&gt;
  In this blog post I will give you a brief introduction into the &lt;em&gt;Coupling Between Objects&lt;/em&gt;
  metric,  that is one of the metrics calculated by the static code analysis tool
  &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2407&amp;amp;entry_id=97&quot; title=&quot;http://pdepend.org&quot;  onmouseover=&quot;window.status=&#039;http://pdepend.org&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;PHP_Depend&lt;/a&gt;.
&lt;/p&gt;


&lt;p&gt;
  The &lt;em&gt;Coupling Between Objects&lt;/em&gt; or &lt;em&gt;CBO&lt;/em&gt; metric was originally 
  defined by Chidamber &amp;amp; Kemerer in their IEEE paper &amp;quot;A Metrics  Suite 
  for Object Oriented Design&amp;quot; &lt;a href=&quot;#ckoom&quot; id=&quot;id1&quot;&gt;[1]&lt;/a&gt;. This
  software metric represents the number of other types a class or interface is
  coupled to. The &lt;em&gt;CBO&lt;/em&gt; metric is calculated for classes and interfaces. 
  It counts the unique number of reference types that occur through method 
  calls, method parameters, return types, thrown exceptions and accessed 
  fields. But there is an exception for types that are either a subtype or 
  supertype of the given class, because these types are not included in the 
  calculated &lt;em&gt;CBO&lt;/em&gt; value.
&lt;/p&gt;
&lt;p&gt;
  Excessive coupled classes prevent reuse of existing components and they are
  damaging for a modular, encapsulated software design. To improve the 
  modularity of a software the inter coupling between different classes should
  be kept to a minimum. Beside reusability a high coupling has a second
  drawback, a class that is coupled to other classes is sensitive to changes in
  that classes and as a result it becomes more difficult to maintain and gets
  more error-prone. Additionally it is harder to test a heavly coupled class in
  isolation and it is harder to understand such a class. Therefore you should
  keep the number of dependencies at a minimum.
&lt;/p&gt;

&lt;h5 id=&quot;thresholds&quot;&gt;Thresholds&lt;/h5&gt;
&lt;p&gt;
  Based on their research Sahraoui, Godin and Miceli &lt;a href=&quot;#sgmqa&quot; id=&quot;id2&quot;&gt;[2]&lt;/a&gt; 
  suggest a maximum &lt;em&gt;CBO&lt;/em&gt; value of &lt;em&gt;14&lt;/em&gt;, because higher values 
  have negative impacts on several quality aspects of a class, which includes 
  the maintainability, stability and understandability.
&lt;/p&gt;

&lt;h5 id=&quot;see-also&quot;&gt;See also&lt;/h5&gt;
&lt;dl&gt;
  &lt;dt&gt;
    &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2410&amp;amp;entry_id=97&quot; title=&quot;http://pdepend.org/documentation/software-metrics/efferent-coupling.html&quot;  onmouseover=&quot;window.status=&#039;http://pdepend.org/documentation/software-metrics/efferent-coupling.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Efferent Coupling&lt;/a&gt;: 
  &lt;/dt&gt;
  &lt;dd&gt;
    &lt;em&gt;Efferent Coupling&lt;/em&gt; or &lt;em&gt;CE&lt;/em&gt; is a different name for
    the same metric, that is frequently used in the literatur.
  &lt;/dd&gt;
  &lt;dt&gt;
    &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2411&amp;amp;entry_id=97&quot; title=&quot;http://pdepend.org/documentation/software-metrics/afferent-coupling.html&quot;  onmouseover=&quot;window.status=&#039;http://pdepend.org/documentation/software-metrics/afferent-coupling.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Afferent Coupling&lt;/a&gt;:
  &lt;/dt&gt;
  &lt;dd&gt;
    The &lt;em&gt;Afferent Coupling&lt;/em&gt; or &lt;em&gt;CA&lt;/em&gt; is a metric that calculates the 
    reverse coupling of a class.
  &lt;/dd&gt;
&lt;/dl&gt;

&lt;h5 id=&quot;bibliography&quot;&gt;Bibliography&lt;/h5&gt;
&lt;dl&gt;
  &lt;dt id=&quot;ckoom&quot;&gt;
    &lt;a href=&quot;#id1&quot;&gt;[1]&lt;/a&gt;
  &lt;/dt&gt;
  &lt;dd&gt;
    &lt;p&gt;
      &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2413&amp;amp;entry_id=97&quot; title=&quot;http://www.iiitd.ac.in/PhD2010/papers/SW_Paper2.pdf&quot;  onmouseover=&quot;window.status=&#039;http://www.iiitd.ac.in/PhD2010/papers/SW_Paper2.pdf&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;http://www.iiitd.ac.in/PhD2010/papers/SW_Paper2.pdf&lt;/a&gt;
    &lt;/p&gt;
    &lt;p&gt;
      IEEE Transactions on Software Engineering; A Metrics Suite for Object
      Oriented Design; Chidamber &amp;amp; Kemerer, 1994
    &lt;/p&gt;
  &lt;/dd&gt;
  &lt;dt&gt;
    &lt;a href=&quot;#id2&quot;&gt;[2]&lt;/a&gt;
  &lt;/dt&gt;
  &lt;dd&gt;
    &lt;p&gt;
      &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2415&amp;amp;entry_id=97&quot; title=&quot;http://www.iro.umontreal.ca/~sahraouh/papers/ICSM00.pdf&quot;  onmouseover=&quot;window.status=&#039;http://www.iro.umontreal.ca/~sahraouh/papers/ICSM00.pdf&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;http://www.iro.umontreal.ca/~sahraouh/papers/ICSM00.pdf&lt;/a&gt;
    &lt;/p&gt;
    &lt;p&gt;
      Software Maintenance, 2000. Proceedings. International Conference; Can
      metrics help to bridge the gap between the improvement of OO design
      quality and its automation?; Sahraoui, Godin, Miceli; 2000    
    &lt;/p&gt;
  &lt;/dd&gt;
&lt;/dl&gt;
 
    </content:encoded>

    <pubDate>Tue, 15 Mar 2011 11:59:00 +0100</pubDate>
    <guid isPermaLink="false">http://www.manuel-pichler.de/archives/97-guid.html</guid>
    <category>cbo</category>
<category>coupling between objects</category>
<category>php_depend</category>
<category>quality assurance</category>
<category>software metrics</category>

</item>
<item>
    <title>PHP_Depend 0.10.2 released</title>
    <link>http://www.manuel-pichler.de/archives/96-PHP_Depend-0.10.2-released.html</link>
            <category>php</category>
            <category>php_depend</category>
            <category>planet-php</category>
            <category>projects</category>
    
    <comments>http://www.manuel-pichler.de/archives/96-PHP_Depend-0.10.2-released.html#comments</comments>
    <wfw:comment>http://www.manuel-pichler.de/wfwcomment.php?cid=96</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.manuel-pichler.de/rss.php?version=2.0&amp;type=comments&amp;cid=96</wfw:commentRss>
    

    <author>nospam@example.com (Manuel Pichler)</author>
    <content:encoded>
    &lt;p&gt;
  We are proud to announce release 0.10.2 of &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2400&amp;amp;entry_id=96&quot; title=&quot;http://pdepend.org&quot;  onmouseover=&quot;window.status=&#039;http://pdepend.org&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;PHP_Depend&lt;/a&gt;. Beside two bug fixes this release implements four new software metrics:
&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2401&amp;amp;entry_id=96&quot; title=&quot;http://pdepend.org/documentation/software-metrics/efferent-coupling.html&quot;  onmouseover=&quot;window.status=&#039;http://pdepend.org/documentation/software-metrics/efferent-coupling.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Efferent Coupling&lt;/a&gt;: The number of classes a class depends on.
  &lt;/li&gt;
  &lt;li&gt;
    &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2402&amp;amp;entry_id=96&quot; title=&quot;http://pdepend.org/documentation/software-metrics/afferent-coupling.html&quot;  onmouseover=&quot;window.status=&#039;http://pdepend.org/documentation/software-metrics/afferent-coupling.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Afferent Coupling&lt;/a&gt;: The number of classes that depend on a class.
  &lt;/li&gt;
  &lt;li&gt;
    &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2403&amp;amp;entry_id=96&quot; title=&quot;http://pdepend.org/documentation/software-metrics/number-of-public-methods.html&quot;  onmouseover=&quot;window.status=&#039;http://pdepend.org/documentation/software-metrics/number-of-public-methods.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Number of Public Methods&lt;/a&gt;: The public api/interface of a class.
  &lt;/li&gt;
  &lt;li&gt;
    &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2404&amp;amp;entry_id=96&quot; title=&quot;http://pdepend.org/documentation/software-metrics/coupling-between-objects.html&quot;  onmouseover=&quot;window.status=&#039;http://pdepend.org/documentation/software-metrics/coupling-between-objects.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Coupling Between Objects&lt;/a&gt;: The coupling of a class.
  &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;p&gt;
  A detailed CHANGELOG can be found on the project&#039;s &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2405&amp;amp;entry_id=96&quot; title=&quot;http://pdepend.org/download/release/0.10.2/changelog.html&quot;  onmouseover=&quot;window.status=&#039;http://pdepend.org/download/release/0.10.2/changelog.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;download page&lt;/a&gt; and a complete, detailed description of the newly implemented software metrics in PHP_Depend&#039;s &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2406&amp;amp;entry_id=96&quot; title=&quot;http://pdepend.org/documentation/software-metrics/index.html&quot;  onmouseover=&quot;window.status=&#039;http://pdepend.org/documentation/software-metrics/index.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;metric catalog&lt;/a&gt;.
&lt;/p&gt; 
    </content:encoded>

    <pubDate>Mon, 28 Feb 2011 11:25:00 +0100</pubDate>
    <guid isPermaLink="false">http://www.manuel-pichler.de/archives/96-guid.html</guid>
    <category>php_depend</category>
<category>quality assurance</category>
<category>software metrics</category>
<category>static code analysis</category>

</item>
<item>
    <title>Brief introduction to the Class Interface Size metric</title>
    <link>http://www.manuel-pichler.de/archives/95-Brief-introduction-to-the-Class-Interface-Size-metric.html</link>
            <category>php</category>
            <category>php_depend</category>
            <category>planet-php</category>
    
    <comments>http://www.manuel-pichler.de/archives/95-Brief-introduction-to-the-Class-Interface-Size-metric.html#comments</comments>
    <wfw:comment>http://www.manuel-pichler.de/wfwcomment.php?cid=95</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.manuel-pichler.de/rss.php?version=2.0&amp;type=comments&amp;cid=95</wfw:commentRss>
    

    <author>nospam@example.com (Manuel Pichler)</author>
    <content:encoded>
    &lt;p&gt;
  This blog post will give you a brief introduction into the &lt;em&gt;Class Interface Size&lt;/em&gt; metric, as it is calculated by the static code analysis tool &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2396&amp;amp;entry_id=95&quot; title=&quot;http://pdepend.org&quot;  onmouseover=&quot;window.status=&#039;http://pdepend.org&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;PHP_Depend&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
  The &lt;em&gt;Class Interface Size&lt;/em&gt; or &lt;em&gt;CIS&lt;/em&gt; metric is measure of the 
  public services that a class provides. This metric was orginally defined in 
  the &lt;em&gt;QMOOD&lt;/em&gt; model &lt;a href=&quot;#moodcis&quot; id=&quot;id1&quot;&gt;[1]&lt;/a&gt; by Bansiya &amp;amp; 
  Davis.
&lt;/p&gt; 

&lt;p&gt;
  The orginal version of the &lt;em&gt;CIS&lt;/em&gt; metric was defined as the number of 
  public methods that a class provides. Each of these methods can be seen as a 
  service where surrounding application can send messages to or receive messages 
  from a class.
&lt;/p&gt;

&lt;blockquote&gt;
  &lt;strong&gt;CIS = public(NOM)&lt;/strong&gt;
&lt;/blockquote&gt;

&lt;p&gt;
  A newer variant of the &lt;em&gt;CIS&lt;/em&gt; metric also includes the public attributes
  of a class, because theses properties can also be used to transport messages 
  or information between a class and the surrounding application.
&lt;/p&gt;

&lt;blockquote&gt;
  &lt;strong&gt;CIS = public(NOM) + public(VARS)&lt;/strong&gt;
&lt;/blockquote&gt;

&lt;p&gt;
  PHP_Depend uses the second variant and counts all public methods and 
  attributes declared in a class to calculate its &lt;em&gt;Class Interface Size&lt;/em&gt; 
  metric.
&lt;/p&gt;

&lt;p&gt;
  This metric is a good indicator for the choosen software design. Several
  classes with a high &lt;em&gt;CIS&lt;/em&gt; value are a sure sign that the design of the
  analyzed software prefers composition over inheritance to share common
  functionality between different components. So in most cases a high value is
  a good a sign, because composition increases the reusability and flexibility.
  But there are also situations where wrongly used composition of functionality
  leads to a design that is harder to understand and maintain.
&lt;/p&gt;

&lt;h5 id=&quot;thresholds&quot;&gt;Thresholds&lt;/h5&gt;
&lt;p&gt;
  It is not easy to define good thresholds for this metric, because those values
  heavy depend on the choosen design, e.g. inheritance or composition. But in
  generall we can say that is best practice to limit the public interface that
  can be used to alter the internal state of an object. Therefore we suggest 
  &lt;code&gt;20&lt;/code&gt;
  as a reference point for the upper limit.
&lt;/p&gt;

&lt;h5 id=&quot;bibliography&quot;&gt;Bibliography&lt;/h5&gt;
&lt;dl&gt;
  &lt;dt id=&quot;moodcis&quot;&gt;
    &lt;a href=&quot;#id1&quot;&gt;[1]&lt;/a&gt;
  &lt;/dt&gt;
  &lt;dd&gt;
    &lt;p&gt;
      &lt;a class=&quot;reference external&quot; href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2399&amp;amp;entry_id=95&quot; title=&quot;http://www.ptidej.net/teaching/inf6306/fall09/notes/course4/Bansiya02-QualityModel.pdf&quot;  onmouseover=&quot;window.status=&#039;http://www.ptidej.net/teaching/inf6306/fall09/notes/course4/Bansiya02-QualityModel.pdf&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;http://www.ptidej.net/teaching/inf6306/fall09/notes/course4/Bansiya02-QualityModel.pdf&lt;/a&gt;
    &lt;/p&gt;
    &lt;p&gt;
      IEEE Transactions on Software Enginerring; &lt;em&gt;Hierarchical Model for 
      Object-Oriented Design Quality Assessment&lt;/em&gt;; Bansiya &amp;amp; Davis; 2002
    &lt;/p&gt;
  &lt;/dd&gt;
&lt;/dl&gt; 
    </content:encoded>

    <pubDate>Fri, 25 Feb 2011 16:50:00 +0100</pubDate>
    <guid isPermaLink="false">http://www.manuel-pichler.de/archives/95-guid.html</guid>
    <category>class interface size</category>
<category>php_depend</category>
<category>quality assurance</category>
<category>software metrics</category>

</item>
<item>
    <title>phpUnderControl 0.6.0beta2 released</title>
    <link>http://www.manuel-pichler.de/archives/92-phpUnderControl-0.6.0beta2-released.html</link>
            <category>php</category>
            <category>phpugdo</category>
            <category>phpundercontrol</category>
            <category>planet-php</category>
            <category>projects</category>
    
    <comments>http://www.manuel-pichler.de/archives/92-phpUnderControl-0.6.0beta2-released.html#comments</comments>
    <wfw:comment>http://www.manuel-pichler.de/wfwcomment.php?cid=92</wfw:comment>

    <slash:comments>3</slash:comments>
    <wfw:commentRss>http://www.manuel-pichler.de/rss.php?version=2.0&amp;type=comments&amp;cid=92</wfw:commentRss>
    

    <author>nospam@example.com (Manuel Pichler)</author>
    <content:encoded>
    &lt;p&gt;
  Today I have released the &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2382&amp;amp;entry_id=92&quot; title=&quot;http://github.com/manuelpichler/phpUnderControl/tree/0.6.0beta2&quot;  onmouseover=&quot;window.status=&#039;http://github.com/manuelpichler/phpUnderControl/tree/0.6.0beta2&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;second beta&lt;/a&gt; version of &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2383&amp;amp;entry_id=92&quot; title=&quot;http://php-under-control.org&quot;  onmouseover=&quot;window.status=&#039;http://php-under-control.org&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;phpUnderControl&lt;/a&gt;. Beside several minor tweaks and bug fixes, this release contains one additional feature I was asked for during the &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2384&amp;amp;entry_id=92&quot; title=&quot;http://it-republik.de/php/phpconference/&quot;  onmouseover=&quot;window.status=&#039;http://it-republik.de/php/phpconference/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;IPC&lt;/a&gt; in Berlin. This feature allows you to specify a maximum number of log entries that will be shown in the generated metric charts. This can be very useful once you have a project with a great amount of builds and the chart rendering gets slower and slower.
&lt;/p&gt;

&lt;p&gt;
  This feature adds a new option &lt;code&gt;--max-number&lt;/code&gt; to phpUnderControl&#039;s &lt;code&gt;chart&lt;/code&gt; command. To rebuild all your charts you can call phpUnderControl&#039;s shell script with the following command:
&lt;/p&gt;

&lt;pre&gt;
  mapi@arwen ~ $ phpuc --force-update --max-number 42 \
                 /opt/cruisecontrol/logs/phpUnderControl \
                 /opt/cruisecontrol/logs/phpUnderControl
&lt;/pre&gt;

&lt;p&gt;
  You can get the latest release of phpUnderControl through its pear channel:
&lt;/p&gt;

&lt;pre&gt;
  mapi@arwen ~ $ pear upgrade --alldeps phpuc/phpUnderControl-0.6.0beta2
  Starting to download phpUnderControl-0.6.0beta2.tgz (546,314 bytes)
  ...................................................................
  .............................done: 546,314 bytes
&lt;/pre&gt;

&lt;p&gt;
  or you can get the latest development version on &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2386&amp;amp;entry_id=92&quot; title=&quot;http://github.com/manuelpichler/phpUnderControl&quot;  onmouseover=&quot;window.status=&#039;http://github.com/manuelpichler/phpUnderControl&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;github&lt;/a&gt;.
&lt;/p&gt; 
    </content:encoded>

    <pubDate>Thu, 10 Jun 2010 12:25:00 +0200</pubDate>
    <guid isPermaLink="false">http://www.manuel-pichler.de/archives/92-guid.html</guid>
    <category>continuous integration</category>
<category>cruisecontrol</category>
<category>phpundercontrol</category>
<category>release announcement</category>

</item>
<item>
    <title>Presenting the first Qafoo Service - Zeta Components</title>
    <link>http://www.manuel-pichler.de/archives/91-Presenting-the-first-Qafoo-Service-Zeta-Components.html</link>
            <category>php</category>
            <category>phpugdo</category>
            <category>planet-php</category>
            <category>Qafoo</category>
    
    <comments>http://www.manuel-pichler.de/archives/91-Presenting-the-first-Qafoo-Service-Zeta-Components.html#comments</comments>
    <wfw:comment>http://www.manuel-pichler.de/wfwcomment.php?cid=91</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.manuel-pichler.de/rss.php?version=2.0&amp;type=comments&amp;cid=91</wfw:commentRss>
    

    <author>nospam@example.com (Manuel Pichler)</author>
    <content:encoded>
    &lt;p&gt;
  Now that the founding of the &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2372&amp;amp;entry_id=91&quot; title=&quot;http://qafoo.com&quot;  onmouseover=&quot;window.status=&#039;http://qafoo.com&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Qafoo - Passion for software quality&lt;/a&gt; company is announced, it is time to present the consulting services which we will provide around the quality lifecycle of PHP applications.
&lt;/p&gt;
&lt;p&gt;
  The first series of services that we will provide is all around the high quality component library &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2373&amp;amp;entry_id=91&quot; title=&quot;http://incubator.apache.org/projects/zetacomponents.html&quot;  onmouseover=&quot;window.status=&#039;http://incubator.apache.org/projects/zetacomponents.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Zeta Components&lt;/a&gt;, formally known as &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2374&amp;amp;entry_id=91&quot; title=&quot;http://ezcomponents.org&quot;  onmouseover=&quot;window.status=&#039;http://ezcomponents.org&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;eZ Components&lt;/a&gt;. The Zeta Components provide a loosely coupled set of unique and well thought out features, like the WebDAV server implementation, the Graph component which makes the generation of appealing charts very easy, or the widely used Mail component. Other aspects of the &lt;em&gt;Zeta Components&lt;/em&gt;, which highlight our quality claim for the &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2372&amp;amp;entry_id=91&quot; title=&quot;http://qafoo.com&quot;  onmouseover=&quot;window.status=&#039;http://qafoo.com&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Qafoo GmbH&lt;/a&gt;, are the excessive documentation and the very high test coverage, which guarantees a consistently good product quality. Another key benefit of the &lt;em&gt;Zeta Components&lt;/em&gt; are their loosely coupled structure, so that you can cherry pick some of the components and integrate them in your current application or framework infrastructure.
&lt;/p&gt;
&lt;p&gt;
  Based on the profound knowledge of &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2380&amp;amp;entry_id=91&quot; title=&quot;http://schlitt.info&quot;  onmouseover=&quot;window.status=&#039;http://schlitt.info&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Toby&lt;/a&gt; and &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2381&amp;amp;entry_id=91&quot; title=&quot;http://kore-nordmann.de&quot;  onmouseover=&quot;window.status=&#039;http://kore-nordmann.de&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Kore&lt;/a&gt;, two core developers behind the components for last five years, we will offer professional trainings and support that is backed by a company. Furthermore we provide paid-development and customization of the components to your own special needs.
&lt;/p&gt;
&lt;p&gt;
  Another point that speaks for the use of Zeta components is that the components are currently on their way to become an official project under the umbrella of the &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2378&amp;amp;entry_id=91&quot; title=&quot;http://apache.org&quot;  onmouseover=&quot;window.status=&#039;http://apache.org&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Apache Software Foundation&lt;/a&gt;, which guarantees a free use of the components, ensured by a stable legal basis.
&lt;/p&gt;
&lt;p&gt;
  So if you would like to use the &lt;em&gt;Zeta Components&lt;/em&gt; for your projects or you are interested in a custom training, send us a mail to &lt;a href=&quot;mailto:contact@qafoo.com&quot;&gt;contact&amp;#64;qafoo.com&lt;/a&gt;.
&lt;/p&gt; 
    </content:encoded>

    <pubDate>Thu, 27 May 2010 10:56:00 +0200</pubDate>
    <guid isPermaLink="false">http://www.manuel-pichler.de/archives/91-guid.html</guid>
    <category>apache software foundation</category>
<category>consulting</category>
<category>ezcomponents</category>
<category>kore</category>
<category>qafoo</category>
<category>toby</category>
<category>zeta components</category>

</item>
<item>
    <title>Goodbye Cologne</title>
    <link>http://www.manuel-pichler.de/archives/86-Goodbye-Cologne.html</link>
            <category>php</category>
            <category>php_depend</category>
            <category>phpmd</category>
            <category>phpugdo</category>
            <category>phpundercontrol</category>
            <category>planet-php</category>
    
    <comments>http://www.manuel-pichler.de/archives/86-Goodbye-Cologne.html#comments</comments>
    <wfw:comment>http://www.manuel-pichler.de/wfwcomment.php?cid=86</wfw:comment>

    <slash:comments>3</slash:comments>
    <wfw:commentRss>http://www.manuel-pichler.de/rss.php?version=2.0&amp;type=comments&amp;cid=86</wfw:commentRss>
    

    <author>nospam@example.com (Manuel Pichler)</author>
    <content:encoded>
    &lt;p&gt;As many of you may already have noticed, there will be a big change in my
career as a professional software engineer and architect this summer. Together
with &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2346&amp;amp;entry_id=86&quot; title=&quot;http://kore-nordmann.de/blog/0095_ez_components_new_ways.txt&quot;  onmouseover=&quot;window.status=&#039;http://kore-nordmann.de/blog/0095_ez_components_new_ways.txt&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Kore&lt;/a&gt; and &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2347&amp;amp;entry_id=86&quot; title=&quot;http://schlitt.info/opensource/blog/0725_goodbye_ez_systems_hello_world.html&quot;  onmouseover=&quot;window.status=&#039;http://schlitt.info/opensource/blog/0725_goodbye_ez_systems_hello_world.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Toby&lt;/a&gt; I am in the process of founding a company. The focus
of this company will be on services all around the whole quality life cycle in
PHP projects.&lt;/p&gt;

&lt;p&gt;Under the hood of our company we will also offer support, trainings and
consulting for several quality assurance tools, like &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2348&amp;amp;entry_id=86&quot; title=&quot;http://pdepend.org&quot;  onmouseover=&quot;window.status=&#039;http://pdepend.org&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;pdepend&lt;/a&gt;, &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2349&amp;amp;entry_id=86&quot; title=&quot;http://phpmd.org&quot;  onmouseover=&quot;window.status=&#039;http://phpmd.org&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;phpmd&lt;/a&gt; and
&lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2350&amp;amp;entry_id=86&quot; title=&quot;http://phpundercontrol.org&quot;  onmouseover=&quot;window.status=&#039;http://phpundercontrol.org&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;phpUnderControl&lt;/a&gt;. For you, this opens a great opportunity. You can use the
tools and the documentation, as well as participate in the community, as
usual. But from now on you can also purchase professional support, if you get
stuck or need general assitance.  And when you miss a feature or need an
individual extension for one of these tools, don&#039;t hesitate to contact us.&lt;/p&gt;

&lt;p&gt;I am really excited what cool things will happen in the next couple of years
and I am looking forward to cowork with professionals like &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2351&amp;amp;entry_id=86&quot; title=&quot;http://schlitt.info/opensource/&quot;  onmouseover=&quot;window.status=&#039;http://schlitt.info/opensource/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Toby&lt;/a&gt; and
&lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2352&amp;amp;entry_id=86&quot; title=&quot;http://kore-nordmann.de&quot;  onmouseover=&quot;window.status=&#039;http://kore-nordmann.de&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Kore&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To finalize the little marketing for the company and its services &lt;img src=&quot;http://www.manuel-pichler.de/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt; I would
appreciate to meet you, your colleagues and your compmany, to give
presentations or into-depth trainings on one of the tools or on quality
assurance in general.&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Thu, 29 Apr 2010 13:20:00 +0200</pubDate>
    <guid isPermaLink="false">http://www.manuel-pichler.de/archives/86-guid.html</guid>
    <category>changes</category>
<category>company</category>
<category>consulting</category>
<category>php</category>
<category>phpmd</category>
<category>phpundercontrol</category>
<category>php_depend</category>
<category>quality</category>
<category>support</category>
<category>training</category>

</item>
<item>
    <title>Howto create custom rule sets for PHPMD</title>
    <link>http://www.manuel-pichler.de/archives/84-Howto-create-custom-rule-sets-for-PHPMD.html</link>
            <category>php</category>
            <category>phpmd</category>
            <category>phpugdo</category>
            <category>planet-php</category>
            <category>projects</category>
    
    <comments>http://www.manuel-pichler.de/archives/84-Howto-create-custom-rule-sets-for-PHPMD.html#comments</comments>
    <wfw:comment>http://www.manuel-pichler.de/wfwcomment.php?cid=84</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.manuel-pichler.de/rss.php?version=2.0&amp;type=comments&amp;cid=84</wfw:commentRss>
    

    <author>nospam@example.com (Manuel Pichler)</author>
    <content:encoded>
    &lt;p&gt;
  In this blog post I will describe a useful feature in &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2316&amp;amp;entry_id=84&quot; title=&quot;http://phpmd.org&quot;  onmouseover=&quot;window.status=&#039;http://phpmd.org&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;PHPMD&lt;/a&gt; that will simplify your life when it comes to create custom rule sets for PHPMD. PHPMD can be seen as an &lt;em&gt;one level down/low level&lt;/em&gt; equivalent to &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2317&amp;amp;entry_id=84&quot; title=&quot;http://pear.php.net/package/PHP_CodeSniffer&quot;  onmouseover=&quot;window.status=&#039;http://pear.php.net/package/PHP_CodeSniffer&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;PHP_CodeSniffer&lt;/a&gt;. It is a simple command line tool that can be used to check your application&#039;s source code for possible bugs, suboptimal or overcomplicated code. The current release of &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2318&amp;amp;entry_id=84&quot; title=&quot;http://phpmd.org/download/releases/index.html&quot;  onmouseover=&quot;window.status=&#039;http://phpmd.org/download/releases/index.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;PHPMD&lt;/a&gt; ships with three default rule sets. The first set of rules tests the &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2319&amp;amp;entry_id=84&quot;  onmouseover=&quot;window.status=&#039;http://phpmd.org/rules/codesize.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; title=&quot;Code Size Rules&quot;&gt;codesize&lt;/a&gt; of class, methods and functions. The second rule set contains rules that check your code for &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2320&amp;amp;entry_id=84&quot;  onmouseover=&quot;window.status=&#039;http://phpmd.org/rules/unusedcode.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; title=&quot;Unused Code Rules&quot;&gt;unused&lt;/a&gt; variables, methods etc. and finally there is a rule set that tests the code against some &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2321&amp;amp;entry_id=84&quot;  onmouseover=&quot;window.status=&#039;http://phpmd.org/rules/naming.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; title=&quot;Naming Rules &quot;&gt;naming&lt;/a&gt; conventions.
&lt;/p&gt;

&lt;p&gt;
  Normally when you start using a quality assurance tool, you will not want to use it&#039;s default configuration. Sometimes you would like to use only a subset, because the full stack will produce too much noise, or you would like to customize some thresholds, because the factory defaults do not fit to your environment. In this blog post I give a short introduction into PHPMD&#039;s rule set syntax and howto to create your own rule set, by reusing parts of the existing default configuration.
&lt;/p&gt;

&lt;p&gt;If you would like to only pick some of the rules that come with PHPMD and
you want to customize some of the predefined thresholds, you can do this
by creating your own rule set file that references a custom collection of
rules with an individual configuration.&lt;/p&gt;

&lt;h5&gt;Starting with an empty ruleset.xml file&lt;/h5&gt;
&lt;p&gt;The simpliest way to start with a new rule set is to copy one of the
existing files and remove all the rule-tags from the document body.
Otherwise you can use the following example as a template for your own
rule set file. You should change the content of the &lt;code&gt;&amp;#64;name&lt;/code&gt; attribute
and &lt;code&gt;&amp;lt;description /&amp;gt;&lt;/code&gt; element to something that describes the purpose
of this set.&lt;/p&gt;
&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;
&amp;lt;ruleset name=&amp;quot;My first PHPMD rule set&amp;quot;
         xmlns=&amp;quot;http://pmd.sf.net/ruleset/1.0.0&amp;quot;
         xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;
         xsi:schemaLocation=&amp;quot;http://pmd.sf.net/ruleset/1.0.0
                     http://pmd.sf.net/ruleset_xml_schema.xsd&amp;quot;
         xsi:noNamespaceSchemaLocation=&amp;quot;
                     http://pmd.sf.net/ruleset_xml_schema.xsd&amp;quot;&amp;gt;
    &amp;lt;description&amp;gt;
        My custom rule set that checks my code...
    &amp;lt;/description&amp;gt;
&amp;lt;/ruleset&amp;gt;
&lt;/pre&gt;

&lt;h5&gt;Adding rule references to the new ruleset.xml file&lt;/h5&gt;
&lt;p&gt;The first thing we would like to do is to add all &lt;a href=&quot;http://www.manuel-pichler.de//phpmd.org/rules/unusedcode.html&quot;&gt;unused code&lt;/a&gt; rules
to the new rule set file. This can simply be done with a &lt;code&gt;&amp;lt;rule /&amp;gt;&lt;/code&gt;
element that references the entire &lt;a href=&quot;http://www.manuel-pichler.de//phpmd.org/rules/unusedcode.html&quot;&gt;unused code&lt;/a&gt; rule set that comes
with PHPMD.&lt;/p&gt;
&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;
&amp;lt;ruleset name=&amp;quot;My first PHPMD rule set&amp;quot;
         xmlns=&amp;quot;http://pmd.sf.net/ruleset/1.0.0&amp;quot;
         xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;
         xsi:schemaLocation=&amp;quot;http://pmd.sf.net/ruleset/1.0.0
                     http://pmd.sf.net/ruleset_xml_schema.xsd&amp;quot;
         xsi:noNamespaceSchemaLocation=&amp;quot;
                     http://pmd.sf.net/ruleset_xml_schema.xsd&amp;quot;&amp;gt;
    &amp;lt;description&amp;gt;
        My custom rule set that checks my code...
    &amp;lt;/description&amp;gt;

    &amp;lt;!-- Import the entire unused code rule set --&amp;gt;
    &amp;lt;rule ref=&amp;quot;rulesets/unusedcode.xml&amp;quot; /&amp;gt;
&amp;lt;/ruleset&amp;gt;
&lt;/pre&gt;
&lt;p&gt;That&#039;s it. Now the custom rule set applies all &lt;a href=&quot;http://www.manuel-pichler.de//phpmd.org/rules/unusedcode.html&quot;&gt;unused code&lt;/a&gt; rules
against the analyzed source code.&lt;/p&gt;
&lt;p&gt;We would also like to use the &lt;a href=&quot;http://www.manuel-pichler.de//phpmd.org/rules/codesize.html#cyclomaticcomplexity&quot;&gt;cyclomatic complexity&lt;/a&gt; rule from the
existing &lt;a href=&quot;http://www.manuel-pichler.de//phpmd.org/rules/codesize.html&quot;&gt;codesize&lt;/a&gt; set in our custom rule set. To achieve this we can
reuse the same syntax with a &lt;code&gt;&amp;lt;rule /&amp;gt;&lt;/code&gt; element and a &lt;code&gt;&amp;#64;ref&lt;/code&gt; attribute.&lt;/p&gt;
&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;
&amp;lt;ruleset name=&amp;quot;My first PHPMD rule set&amp;quot;
         xmlns=&amp;quot;http://pmd.sf.net/ruleset/1.0.0&amp;quot;
         xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;
         xsi:schemaLocation=&amp;quot;http://pmd.sf.net/ruleset/1.0.0
                     http://pmd.sf.net/ruleset_xml_schema.xsd&amp;quot;
         xsi:noNamespaceSchemaLocation=&amp;quot;
                     http://pmd.sf.net/ruleset_xml_schema.xsd&amp;quot;&amp;gt;
    &amp;lt;description&amp;gt;
        My custom rule set that checks my code...
    &amp;lt;/description&amp;gt;

    &amp;lt;!-- Import the entire unused code rule set --&amp;gt;
    &amp;lt;rule ref=&amp;quot;rulesets/unusedcode.xml&amp;quot; /&amp;gt;

    &amp;lt;!-- Import the entire cyclomatic complexity rule --&amp;gt;
    &amp;lt;rule ref=&amp;quot;rulesets/codesize.xml/CyclomaticComplexity&amp;quot; /&amp;gt;
&amp;lt;/ruleset&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Now that the new rule set uses the &lt;a href=&quot;http://www.manuel-pichler.de//phpmd.org/rules/codesize.html#cyclomaticcomplexity&quot;&gt;cyclomatic complexity&lt;/a&gt; rule we would
also like to customize some of the rule&#039;s properties. First we will
increase the rule&#039;s priority to the highest possible priority value &lt;code&gt;1&lt;/code&gt;
and we also decrease the threshold when the rule reports a violation. This
customization can be done with same xml elements that are used to configure
the original rule, so that you can take a look at one of the original rule
set file.&lt;/p&gt;
&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;
&amp;lt;ruleset name=&amp;quot;My first PHPMD rule set&amp;quot;
         xmlns=&amp;quot;http://pmd.sf.net/ruleset/1.0.0&amp;quot;
         xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;
         xsi:schemaLocation=&amp;quot;http://pmd.sf.net/ruleset/1.0.0
                     http://pmd.sf.net/ruleset_xml_schema.xsd&amp;quot;
         xsi:noNamespaceSchemaLocation=&amp;quot;
                     http://pmd.sf.net/ruleset_xml_schema.xsd&amp;quot;&amp;gt;
    &amp;lt;description&amp;gt;
        My custom rule set that checks my code...
    &amp;lt;/description&amp;gt;

    &amp;lt;!-- Import the entire unused code rule set --&amp;gt;
    &amp;lt;rule ref=&amp;quot;rulesets/unusedcode.xml&amp;quot; /&amp;gt;

    &amp;lt;!--
        Import the entire cyclomatic complexity rule and
        customize the rule configuration.
    --&amp;gt;
    &amp;lt;rule ref=&amp;quot;rulesets/codesize.xml/CyclomaticComplexity&amp;quot;&amp;gt;
        &amp;lt;priority&amp;gt;1&amp;lt;/priority&amp;gt;
        &amp;lt;properties&amp;gt;
            &amp;lt;property name=&amp;quot;reportLevel&amp;quot; value=&amp;quot;5&amp;quot; /&amp;gt;
        &amp;lt;/properties&amp;gt;
    &amp;lt;/rule&amp;gt;
&amp;lt;/ruleset&amp;gt;
&lt;/pre&gt;
&lt;p&gt;You should know that PHPMD handles all custom settings additive. This
means that PHPMD keeps the original configuration for every setting that
isn&#039;t customized in a rule reference.&lt;/p&gt;

&lt;h5&gt;Excluding rules from a rule set&lt;/h5&gt;
&lt;p&gt;Finally we would like to reuse the &lt;a href=&quot;http://www.manuel-pichler.de//phpmd.org/rules/naming.html&quot;&gt;naming&lt;/a&gt; rule set of PHPMD. But we
don&#039;t like the two variable naming rules, so that we must exclude them
from out rule set file. This exclusion can be achieved by declaring an
&lt;code&gt;&amp;lt;exclude /&amp;gt;&lt;/code&gt; element within the rule reference. This element has an
attribute &lt;code&gt;&amp;#64;name&lt;/code&gt; which specifies the name of the excluded rule.&lt;/p&gt;
&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;
&amp;lt;ruleset name=&amp;quot;My first PHPMD rule set&amp;quot;
         xmlns=&amp;quot;http://pmd.sf.net/ruleset/1.0.0&amp;quot;
         xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;
         xsi:schemaLocation=&amp;quot;http://pmd.sf.net/ruleset/1.0.0
                     http://pmd.sf.net/ruleset_xml_schema.xsd&amp;quot;
         xsi:noNamespaceSchemaLocation=&amp;quot;
                     http://pmd.sf.net/ruleset_xml_schema.xsd&amp;quot;&amp;gt;
    &amp;lt;description&amp;gt;
        My custom rule set that checks my code...
    &amp;lt;/description&amp;gt;

    &amp;lt;!-- Import the entire unused code rule set --&amp;gt;
    &amp;lt;rule ref=&amp;quot;rulesets/unusedcode.xml&amp;quot; /&amp;gt;

    &amp;lt;!--
        Import the entire cyclomatic complexity rule and
        customize the rule configuration.
    --&amp;gt;
    &amp;lt;rule ref=&amp;quot;rulesets/codesize.xml/CyclomaticComplexity&amp;quot;&amp;gt;
        &amp;lt;priority&amp;gt;1&amp;lt;/priority&amp;gt;
        &amp;lt;properties&amp;gt;
            &amp;lt;property name=&amp;quot;reportLevel&amp;quot; value=&amp;quot;5&amp;quot; /&amp;gt;
        &amp;lt;/properties&amp;gt;
    &amp;lt;/rule&amp;gt;

    &amp;lt;!-- Import entire naming rule set and exclude rules --&amp;gt;
    &amp;lt;rule ref=&amp;quot;rulesets/naming.xml&amp;quot;&amp;gt;
        &amp;lt;exclude name=&amp;quot;ShortVariable&amp;quot; /&amp;gt;
        &amp;lt;exclude name=&amp;quot;LongVariable&amp;quot; /&amp;gt;
    &amp;lt;/rule&amp;gt;
&amp;lt;/ruleset&amp;gt;
&lt;/pre&gt;

&lt;h5&gt;Conclusion&lt;/h5&gt;
&lt;p&gt;With PHPMD&#039;s rule set syntax it is possible to customize all aspects of
rules for your own needs and you can reuse every existing rule set xml file
in your own set. You should take a look at PHPMD&#039;s rule &lt;a href=&quot;http://www.manuel-pichler.de//phpmd.org/rules/&quot;&gt;documentation&lt;/a&gt;
if it happens that you don&#039;t know what rules exist or you don&#039;t know
exactly, which settings are available for one rule, while you create your
own set of rules. Another good source of information are the rule set
&lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2327&amp;amp;entry_id=84&quot; title=&quot;http://tracker.phpmd.org/php_mess_detector/browse_code/view/rulesets/&quot;  onmouseover=&quot;window.status=&#039;http://tracker.phpmd.org/php_mess_detector/browse_code/view/rulesets/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;files&lt;/a&gt; that are shipped with PHPMD.&lt;/p&gt;

&lt;p&gt;
  You can get the latest PHPMD version from its PEAR channel: &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2328&amp;amp;entry_id=84&quot; title=&quot;http://pear.phpmd.org&quot;  onmouseover=&quot;window.status=&#039;http://pear.phpmd.org&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;pear.phpmd.org&lt;/a&gt; 
&lt;/p&gt;

&lt;pre&gt;
mapi@arwen ~ $ pear channel-discover pear.pdepend.org
mapi@arwen ~ $ pear channel-discover pear.phpmd.org
mapi@arwen ~ $ pear install --alldeps phpmd/PHP_PMD-alpha
&lt;/pre&gt;

&lt;p&gt;
  Or from our &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2329&amp;amp;entry_id=84&quot; title=&quot;http://github.com/manuelpichler/phpmd&quot;  onmouseover=&quot;window.status=&#039;http://github.com/manuelpichler/phpmd&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;github repository&lt;/a&gt;:
&lt;/p&gt;

&lt;pre&gt;
mapi@arwen ~ $ git clone git://github.com/manuelpichler/phpmd.git
&lt;/pre&gt;

&lt;p&gt;
  I would be glad if you file a ticket in PHPMD&#039;s &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2330&amp;amp;entry_id=84&quot; title=&quot;http://tracker.phpmd.org/php_mess_detector/&quot;  onmouseover=&quot;window.status=&#039;http://tracker.phpmd.org/php_mess_detector/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;issue tracker&lt;/a&gt;
  for all issues and/or enhancements you encounter while testing PHPMD.
&lt;/p&gt; 
    </content:encoded>

    <pubDate>Thu, 08 Apr 2010 14:25:00 +0200</pubDate>
    <guid isPermaLink="false">http://www.manuel-pichler.de/archives/84-guid.html</guid>
    <category>annotations</category>
<category>customization</category>
<category>phpmd</category>
<category>quality assurance</category>
<category>rule set</category>
<category>static code analysis</category>

</item>
<item>
    <title>PHP_Depend-0.9.10 released</title>
    <link>http://www.manuel-pichler.de/archives/81-PHP_Depend-0.9.10-released.html</link>
            <category>php</category>
            <category>php_depend</category>
            <category>phpugdo</category>
            <category>planet-php</category>
            <category>projects</category>
    
    <comments>http://www.manuel-pichler.de/archives/81-PHP_Depend-0.9.10-released.html#comments</comments>
    <wfw:comment>http://www.manuel-pichler.de/wfwcomment.php?cid=81</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.manuel-pichler.de/rss.php?version=2.0&amp;type=comments&amp;cid=81</wfw:commentRss>
    

    <author>nospam@example.com (Manuel Pichler)</author>
    <content:encoded>
    &lt;p&gt;
I have just released the bug fix version 0.9.10 of PHP_Depend. This
release contains several bug fixes and improvements for PHP_Depend.
&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Implemented &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2272&amp;amp;entry_id=81&quot; title=&quot;http://tracker.pdepend.org/pdepend/issue_tracker/issue/72&quot;  onmouseover=&quot;window.status=&#039;http://tracker.pdepend.org/pdepend/issue_tracker/issue/72&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#72&lt;/a&gt;__: Add NOAM, NOOM and NOCC metrics. Implemented in svn revision &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2273&amp;amp;entry_id=81&quot; title=&quot;http://tracker.pdepend.org/pdepend/browse_code/revision/1084&quot;  onmouseover=&quot;window.status=&#039;http://tracker.pdepend.org/pdepend/browse_code/revision/1084&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#1084&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Implemented &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2274&amp;amp;entry_id=81&quot; title=&quot;http://tracker.pdepend.org/pdepend/issue_tracker/issue/74&quot;  onmouseover=&quot;window.status=&#039;http://tracker.pdepend.org/pdepend/issue_tracker/issue/74&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#74&lt;/a&gt;: Make CRAP-index available. Implemented in svn revision &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2275&amp;amp;entry_id=81&quot; title=&quot;http://tracker.pdepend.org/pdepend/browse_code/revision/1063&quot;  onmouseover=&quot;window.status=&#039;http://tracker.pdepend.org/pdepend/browse_code/revision/1063&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#1063&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Implemented &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2276&amp;amp;entry_id=81&quot; title=&quot;http://tracker.pdepend.org/pdepend/issue_tracker/issue/105&quot;  onmouseover=&quot;window.status=&#039;http://tracker.pdepend.org/pdepend/issue_tracker/issue/105&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#105&lt;/a&gt;: Support for deep search implement. Implemented in svn revision &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2277&amp;amp;entry_id=81&quot; title=&quot;http://tracker.pdepend.org/pdepend/browse_code/revision/1078&quot;  onmouseover=&quot;window.status=&#039;http://tracker.pdepend.org/pdepend/browse_code/revision/1078&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#1078&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Fixed &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2278&amp;amp;entry_id=81&quot; title=&quot;http://tracker.pdepend.org/pdepend/issue_tracker/issue/106&quot;  onmouseover=&quot;window.status=&#039;http://tracker.pdepend.org/pdepend/issue_tracker/issue/106&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#106&lt;/a&gt;: Filter algorithm is broken for namespaced internal classes. Fixed in svn revision &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2279&amp;amp;entry_id=81&quot; title=&quot;http://tracker.pdepend.org/pdepend/browse_code/revision/1039&quot;  onmouseover=&quot;window.status=&#039;http://tracker.pdepend.org/pdepend/browse_code/revision/1039&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#1039&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Fixed &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2280&amp;amp;entry_id=81&quot; title=&quot;http://tracker.pdepend.org/pdepend/issue_tracker/issue/110&quot;  onmouseover=&quot;window.status=&#039;http://tracker.pdepend.org/pdepend/issue_tracker/issue/110&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#110&lt;/a&gt;: Duplicate &quot;coupling&quot; directory in test code. Fixed in svn revision &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2281&amp;amp;entry_id=81&quot; title=&quot;http://tracker.pdepend.org/pdepend/browse_code/revision/1032&quot;  onmouseover=&quot;window.status=&#039;http://tracker.pdepend.org/pdepend/browse_code/revision/1032&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#1032&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Fixed &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2282&amp;amp;entry_id=81&quot; title=&quot;http://tracker.pdepend.org/pdepend/issue_tracker/issue/111&quot;  onmouseover=&quot;window.status=&#039;http://tracker.pdepend.org/pdepend/issue_tracker/issue/111&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#111&lt;/a&gt;: Dynamic Strings are treated as literal strings. Fixed in svn revision &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2283&amp;amp;entry_id=81&quot; title=&quot;http://tracker.pdepend.org/pdepend/browse_code/revision/1037&quot;  onmouseover=&quot;window.status=&#039;http://tracker.pdepend.org/pdepend/browse_code/revision/1037&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#1037&lt;/a&gt;. &lt;/li&gt;
  &lt;li&gt;Fixed &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2284&amp;amp;entry_id=81&quot; title=&quot;http://tracker.pdepend.org/pdepend/issue_tracker/issue/114&quot;  onmouseover=&quot;window.status=&#039;http://tracker.pdepend.org/pdepend/issue_tracker/issue/114&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#114&lt;/a&gt;: Parsing error caused by complex string expressions fixed. Fixed in svn revision &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2285&amp;amp;entry_id=81&quot; title=&quot;http://tracker.pdepend.org/pdepend/browse_code/revision/1068&quot;  onmouseover=&quot;window.status=&#039;http://tracker.pdepend.org/pdepend/browse_code/revision/1068&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#1068&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Fixed &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2286&amp;amp;entry_id=81&quot; title=&quot;http://tracker.pdepend.org/pdepend/issue_tracker/issue/115&quot;  onmouseover=&quot;window.status=&#039;http://tracker.pdepend.org/pdepend/issue_tracker/issue/115&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#115&lt;/a&gt;: Summary and PHPUnit Report lists unknown classes. Fixed in svn revision &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2287&amp;amp;entry_id=81&quot; title=&quot;http://tracker.pdepend.org/pdepend/browse_code/revision/1101&quot;  onmouseover=&quot;window.status=&#039;http://tracker.pdepend.org/pdepend/browse_code/revision/1101&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#1101&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Fixed &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2288&amp;amp;entry_id=81&quot; title=&quot;http://tracker.pdepend.org/pdepend/issue_tracker/issue/116&quot;  onmouseover=&quot;window.status=&#039;http://tracker.pdepend.org/pdepend/issue_tracker/issue/116&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#116&lt;/a&gt;: Returns reference results in parsing error. Fixed in svn revision &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2289&amp;amp;entry_id=81&quot; title=&quot;http://tracker.pdepend.org/pdepend/browse_code/revision/1090&quot;  onmouseover=&quot;window.status=&#039;http://tracker.pdepend.org/pdepend/browse_code/revision/1090&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#1090&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Performance intensive calculation result cached.&lt;/li&gt;
  &lt;li&gt;Test code restructured and improved.&lt;/li&gt;
  &lt;li&gt;Concurrency issue for parallel running pdepend instances fixed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
As always, you can get the latest PHP_Depend version from its PEAR channel: &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2290&amp;amp;entry_id=81&quot; title=&quot;http://pear.pdepend.org&quot;  onmouseover=&quot;window.status=&#039;http://pear.pdepend.org&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;pear.pdepend.org&lt;/a&gt;:
&lt;/p&gt;
&lt;pre&gt;
  mapi@arwen ~ $ pear channel-discover pear.pdepend.org
  mapi@arwen ~ $ pear install pdepend/PHP_Depend-beta
&lt;/pre&gt;
&lt;p&gt;
Or you can fetch the sources from the subversion reposition:
&lt;/p&gt;
&lt;pre&gt;
  mapi@arwen ~ $ svn co http://svn.pdepend.org/branches/0.9.0/
&lt;/pre&gt;
&lt;p&gt;
And additionally you can find a repository mirror on github:
&lt;/p&gt;
&lt;pre&gt;
  mapi@arwen ~ $ git clone git://github.com/manuelpichler/pdepend.git
&lt;/pre&gt; 
    </content:encoded>

    <pubDate>Tue, 23 Feb 2010 20:36:01 +0100</pubDate>
    <guid isPermaLink="false">http://www.manuel-pichler.de/archives/81-guid.html</guid>
    <category>php</category>
<category>php5</category>
<category>php_depend</category>
<category>quality assurance</category>
<category>release announcement</category>
<category>software metrics</category>
<category>static code analysis</category>

</item>
<item>
    <title>phpUnderControl 0.5.1 released</title>
    <link>http://www.manuel-pichler.de/archives/79-phpUnderControl-0.5.1-released.html</link>
            <category>php</category>
            <category>phpugdo</category>
            <category>phpundercontrol</category>
            <category>planet-php</category>
            <category>projects</category>
    
    <comments>http://www.manuel-pichler.de/archives/79-phpUnderControl-0.5.1-released.html#comments</comments>
    <wfw:comment>http://www.manuel-pichler.de/wfwcomment.php?cid=79</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.manuel-pichler.de/rss.php?version=2.0&amp;type=comments&amp;cid=79</wfw:commentRss>
    

    <author>nospam@example.com (Manuel Pichler)</author>
    <content:encoded>
    &lt;p&gt;
  Today I have released &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2246&amp;amp;entry_id=79&quot; title=&quot;http://phpundercontrol.org&quot;  onmouseover=&quot;window.status=&#039;http://phpundercontrol.org&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;phpUnderControl&lt;/a&gt; version &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2247&amp;amp;entry_id=79&quot; title=&quot;http://github.com/manuelpichler/phpUnderControl/tree/0.5.1&quot;  onmouseover=&quot;window.status=&#039;http://github.com/manuelpichler/phpUnderControl/tree/0.5.1&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;0.5.1&lt;/a&gt;. It&#039;s a bug fix release that closes several issues open since a long time. First of all I would like to thank &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2248&amp;amp;entry_id=79&quot; title=&quot;http://twitter.com/proofek&quot;  onmouseover=&quot;window.status=&#039;http://twitter.com/proofek&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Sebastian Marek&lt;/a&gt; who was the main contributor to this releases, so a big thankyou to you.
&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Now phpUnderControl should work with &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2265&amp;amp;entry_id=79&quot; title=&quot;http://cruisecontrol.sourceforge.net&quot;  onmouseover=&quot;window.status=&#039;http://cruisecontrol.sourceforge.net&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;CruiseControl 2.8.3&lt;/a&gt;. Thanks to Mike van Riel who provided some hints on this issue in a &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2249&amp;amp;entry_id=79&quot; title=&quot;http://manuel-pichler.de/archives/69-phpUnderControl-0.5.0-released.html#c350&quot;  onmouseover=&quot;window.status=&#039;http://manuel-pichler.de/archives/69-phpUnderControl-0.5.0-released.html#c350&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;blog comment&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Fixed &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2250&amp;amp;entry_id=79&quot; title=&quot;http://www.phpunit.de/ticket/983&quot;  onmouseover=&quot;window.status=&#039;http://www.phpunit.de/ticket/983&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#983&lt;/a&gt;: Graph unitests throw fatal error when ezComponents not available.&lt;/li&gt;
  &lt;li&gt;Fixed &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2251&amp;amp;entry_id=79&quot; title=&quot;http://www.phpunit.de/ticket/966&quot;  onmouseover=&quot;window.status=&#039;http://www.phpunit.de/ticket/966&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#966&lt;/a&gt;: phpcs-details.xsl not showing file name.&lt;/li&gt;
  &lt;li&gt;Closed &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2252&amp;amp;entry_id=79&quot; title=&quot;http://www.phpunit.de/ticket/863&quot;  onmouseover=&quot;window.status=&#039;http://www.phpunit.de/ticket/863&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#863&lt;/a&gt;: Destination option is now deprecated.&lt;/li&gt;
  &lt;li&gt;Fixed &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2253&amp;amp;entry_id=79&quot; title=&quot;http://www.phpunit.de/ticket/862&quot;  onmouseover=&quot;window.status=&#039;http://www.phpunit.de/ticket/862&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#862&lt;/a&gt;: Command line switches without parameter don&#039;t work.&lt;/li&gt;
  &lt;li&gt;Fixed &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2254&amp;amp;entry_id=79&quot; title=&quot;http://www.phpunit.de/ticket/861&quot;  onmouseover=&quot;window.status=&#039;http://www.phpunit.de/ticket/861&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#861&lt;/a&gt;: Password is used as username in check outs. This patch was supplied by Thorsten Daners via e-mail.&lt;/li&gt;
  &lt;li&gt;Fixed &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2255&amp;amp;entry_id=79&quot; title=&quot;http://www.phpunit.de/ticket/734&quot;  onmouseover=&quot;window.status=&#039;http://www.phpunit.de/ticket/734&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#734&lt;/a&gt;: Now the build dropdown redirects to the correct build uri.&lt;/li&gt;
  &lt;li&gt;Implemented &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2256&amp;amp;entry_id=79&quot; title=&quot;http://www.phpunit.de/ticket/703&quot;  onmouseover=&quot;window.status=&#039;http://www.phpunit.de/ticket/703&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#703&lt;/a&gt;: PHPUnit test results are now the first entry on the project overview page.&lt;/li&gt;
  &lt;li&gt;Fixed &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2257&amp;amp;entry_id=79&quot; title=&quot;http://www.phpunit.de/ticket/700&quot;  onmouseover=&quot;window.status=&#039;http://www.phpunit.de/ticket/700&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#700&lt;/a&gt;: Throw an exception when the specified project does not exist.&lt;/li&gt;
  &lt;li&gt;Implemented &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2258&amp;amp;entry_id=79&quot; title=&quot;http://www.phpunit.de/ticket/675&quot;  onmouseover=&quot;window.status=&#039;http://www.phpunit.de/ticket/675&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#675&lt;/a&gt;: Use &quot;php -l&quot; for lint checking and not PHPUnit.&lt;/li&gt;
  &lt;li&gt;Implemented &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2259&amp;amp;entry_id=79&quot; title=&quot;http://www.phpunit.de/ticket/625&quot;  onmouseover=&quot;window.status=&#039;http://www.phpunit.de/ticket/625&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#625&lt;/a&gt;: Integrate PHP_Depend results.&lt;/li&gt;
&lt;/ul&gt;

&lt;br /&gt;
&lt;p&gt;
  Beside the new release some more things have changed. From now on the phpUnderControl development is hosted on &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2260&amp;amp;entry_id=79&quot; title=&quot;http://github.com&quot;  onmouseover=&quot;window.status=&#039;http://github.com&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;github&lt;/a&gt;. This means that from now on the latest version of phpUnderControl can be obtained with the following command:
&lt;/p&gt;

&lt;pre&gt;
mapi@arwen ~ $ git clone \
               git://github.com/manuelpichler/phpUnderControl.git
&lt;/pre&gt;

&lt;p&gt;
Additionally we have moved the phpUnderControl&#039;s PEAR Channel Server from &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2261&amp;amp;entry_id=79&quot; title=&quot;http://pear.phpunit.de&quot;  onmouseover=&quot;window.status=&#039;http://pear.phpunit.de&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;pear.phpunit.de&lt;/a&gt; to its own server &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2262&amp;amp;entry_id=79&quot; title=&quot;http://pear.phpundercontrol.org&quot;  onmouseover=&quot;window.status=&#039;http://pear.phpundercontrol.org&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;pear.phpundercontrol.org&lt;/a&gt;. At this point I would like to thank &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2263&amp;amp;entry_id=79&quot; title=&quot;http://sebastian-bergmann.de/&quot;  onmouseover=&quot;window.status=&#039;http://sebastian-bergmann.de/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Sebastian&lt;/a&gt; for providing phpUnderControl&#039;s infrastructure under the &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2264&amp;amp;entry_id=79&quot; title=&quot;http://phpun.it&quot;  onmouseover=&quot;window.status=&#039;http://phpun.it&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;PHPUnit umbrella&lt;/a&gt; for the last three years.
&lt;/p&gt;

&lt;pre&gt;
mapi@arwen ~ $ pear uninstall phpunit/phpUnderControl
mapi@arwen ~ $ pear channel-discover pear.phpundercontrol.org
mapi@arwen ~ $ pear install --alldeps phpuc/phpUnderControl-beta
Starting to download phpUnderControl-0.5.1.tgz (539,717 bytes)
..........................................done: 539,717 bytes
install ok: channel://pear.phpundercontrol.org/phpUnderControl-0.5.1
&lt;/pre&gt; 
    </content:encoded>

    <pubDate>Sun, 31 Jan 2010 21:16:35 +0100</pubDate>
    <guid isPermaLink="false">http://www.manuel-pichler.de/archives/79-guid.html</guid>
    <category>ant</category>
<category>bug fix</category>
<category>continuous integration</category>
<category>phpundercontrol</category>
<category>release announcement</category>
<category>sebastian marek</category>

</item>
<item>
    <title>PHP Mess Detector 0.2 released.</title>
    <link>http://www.manuel-pichler.de/archives/73-PHP-Mess-Detector-0.2-released..html</link>
            <category>php</category>
            <category>php_depend</category>
            <category>phpmd</category>
            <category>phpugdo</category>
            <category>planet-php</category>
            <category>projects</category>
    
    <comments>http://www.manuel-pichler.de/archives/73-PHP-Mess-Detector-0.2-released..html#comments</comments>
    <wfw:comment>http://www.manuel-pichler.de/wfwcomment.php?cid=73</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://www.manuel-pichler.de/rss.php?version=2.0&amp;type=comments&amp;cid=73</wfw:commentRss>
    

    <author>nospam@example.com (Manuel Pichler)</author>
    <content:encoded>
    &lt;p&gt;
  Today I have released version 0.2.0 of the &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2211&amp;amp;entry_id=73&quot; title=&quot;http://phpmd.org&quot;  onmouseover=&quot;window.status=&#039;http://phpmd.org&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;PHP Mess Detector&lt;/a&gt; or short &lt;em&gt;PHPMD&lt;/em&gt;. PHPMD is a simple, customizable and user friendly frontend application for &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2212&amp;amp;entry_id=73&quot; title=&quot;http://pdepend.org&quot;  onmouseover=&quot;window.status=&#039;http://pdepend.org&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;PHP_Depend&lt;/a&gt;. It takes the raw metrics measured by PHP_Depend, compares them with appropriate thresholds and generates a report that lists those software artifacts with potential problems. Such a report can be taken as a basis for human code audits or you can use it as input for an automated build/reporting tool.
&lt;/p&gt;

&lt;p&gt;
  Most concepts behind PHPMD are based on those of the well known Java Tool &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2213&amp;amp;entry_id=73&quot; title=&quot;http://pmd.sourceforge.net&quot;  onmouseover=&quot;window.status=&#039;http://pmd.sourceforge.net&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;PMD&lt;/a&gt;. It uses so called rule set files to organize different sets of rules. There are two purposes that are accomplished by these xml files. The first is to create custom sets of rules which fulfills the projects requirements. The second purpose is the configuration of each rule with thresholds, warning messages and other things. The format of these files is totally borrowed from PMD, so that the reuse existing rule sets in multi language environments should be easy. At the moment PHPMD has two build-in rule sets. One that detects software artifacts with high code size, and the second one detects unused code in your software.
&lt;/p&gt;

&lt;p&gt;
  Now lets start with a small &lt;em&gt;How to use it&lt;/em&gt;. PHPMD can be called from the command line by typing &lt;code&gt;phpmd&lt;/code&gt;, which prints a general help text.
&lt;/p&gt;

&lt;pre&gt;
mapi@arwen ~ $ phpmd 
Mandatory arguments:
1) A php source code filename or directory
2) A report format
3) A ruleset filename or a comma-separated string of ...

Optional arguments that may be put after the mandato...
--minimumpriority: rule priority threshold; rules with ...
--reportfile: send report output to a file; default to ...
--extensions: comma-separated string of valid source ...
--ignore: comma-separated string of patterns that are ...
&lt;/pre&gt;

&lt;p&gt;
  Now let&#039;s call PHPMD on its own source, with a simple text report on STDOUT and the &lt;code&gt;codesize&lt;/code&gt; ruleset:
&lt;/p&gt;

&lt;pre&gt;
mapi@arwen ~ $ phpmd ~/phpmd/source text codesize

/home/mapi/phpmd/source/PHP/PMD/RuleSetFactory.php:66 \
  This class has too many methods, consider refactoring it.
/home/mapi/phpmd/source/PHP/PMD/RuleSetFactory.php:267 \
  The method _parseSingleRuleNode() has a Cyclomatic \
  Complexity of 11.
/home/mapi/phpmd/source/PHP/PMD/RuleSetFactory.php:326 \
  The method _parseRuleReferenceNode() has a Cyclomatic \
  Complexity of 10.
&lt;/pre&gt;

&lt;p&gt;
  The &lt;code&gt;--reportfile&lt;/code&gt; option can be used, to redirect the report output into a file. So let us repeat the previous example that writes the report into a file, additionally uses the &lt;code&gt;unusedcode&lt;/code&gt; rule and changes the format from text to xml.
&lt;/p&gt;

&lt;pre&gt;
mapi@arwen ~ $ phpmd ~/phpmd/source xml codesize,unusedcode \
  --reportfile ~/pmd.xml
mapi@arwen ~ $ cat ~/pmd.xml 
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&amp;gt;
&amp;lt;pmd version=&quot;@package_version@&quot; timestamp=&quot;...&quot;&amp;gt;
  &amp;lt;file name=&quot;.../source/PHP/PMD/RuleSetFactory.php&quot;&amp;gt;
    &amp;lt;violation beginline=&quot;66&quot; endline=&quot;417&quot; rule=&quot;TooManyMet ...&amp;gt;
      This class has too many methods, consider refactoring it.
    &amp;lt;/violation&amp;gt;
    &amp;lt;violation beginline=&quot;267&quot; endline=&quot;315&quot; rule=&quot;Cyclomati ...&amp;gt;
      Method _parseSingleRule() has a Cyclomatic Complexity of 11.
    &amp;lt;/violation&amp;gt;
    &amp;lt;violation beginline=&quot;326&quot; endline=&quot;367&quot; rule=&quot;Cyclomati ...&amp;gt;
      Method _parseRuleReference() has a Cyclomatic Complexity of 10.
    &amp;lt;/violation&amp;gt;
  &amp;lt;/file&amp;gt;
&amp;lt;/pmd&amp;gt;
&lt;/pre&gt;

&lt;p&gt;
  This xml file is compatible with those files generated by &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2213&amp;amp;entry_id=73&quot; title=&quot;http://pmd.sourceforge.net&quot;  onmouseover=&quot;window.status=&#039;http://pmd.sourceforge.net&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;PMD&lt;/a&gt; and &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2219&amp;amp;entry_id=73&quot; title=&quot;http://phpunit.de&quot;  onmouseover=&quot;window.status=&#039;http://phpunit.de&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;PHPUnit&#039;s&lt;/a&gt; deprecated &lt;code&gt;--log-pmd&lt;/code&gt; option. So that it should be no problem to use this files in existing environments like &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2215&amp;amp;entry_id=73&quot; title=&quot;https://hudson.dev.java.net/&quot;  onmouseover=&quot;window.status=&#039;https://hudson.dev.java.net/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Hudson&lt;/a&gt;, &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2216&amp;amp;entry_id=73&quot; title=&quot;http://cruisecontrol.sourceforge.net/&quot;  onmouseover=&quot;window.status=&#039;http://cruisecontrol.sourceforge.net/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;CruiseControl&lt;/a&gt; or &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2217&amp;amp;entry_id=73&quot; title=&quot;http://sonar.codehaus.org/&quot;  onmouseover=&quot;window.status=&#039;http://sonar.codehaus.org/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Sonar&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
  Currently PHPMD supports the following three different report formats: Text, HTML and XML. And it has the build-in rule sets: &lt;code&gt;codesize&lt;/code&gt; and &lt;code&gt;unusedcode&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
  You can get the latest PHPMD version from its PEAR channel: &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2218&amp;amp;entry_id=73&quot; title=&quot;http://pear.phpmd.org&quot;  onmouseover=&quot;window.status=&#039;http://pear.phpmd.org&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;pear.phpmd.org&lt;/a&gt; 
&lt;/p&gt;

&lt;pre&gt;
mapi@arwen ~ $ pear channel-discover pear.pdepend.org
mapi@arwen ~ $ pear channel-discover pear.phpmd.org
mapi@arwen ~ $ pear install --alldeps phpmd/PHP_PMD-alpha
&lt;/pre&gt; 
    </content:encoded>

    <pubDate>Tue, 29 Dec 2009 23:40:00 +0100</pubDate>
    <guid isPermaLink="false">http://www.manuel-pichler.de/archives/73-guid.html</guid>
    <category>phpmd</category>
<category>php_depend</category>
<category>pmd</category>
<category>quality assurance</category>
<category>static code analysis</category>

</item>
<item>
    <title>phpUnderControl 0.5.0 released</title>
    <link>http://www.manuel-pichler.de/archives/69-phpUnderControl-0.5.0-released.html</link>
            <category>php</category>
            <category>phpugdo</category>
            <category>phpundercontrol</category>
            <category>planet-php</category>
            <category>projects</category>
    
    <comments>http://www.manuel-pichler.de/archives/69-phpUnderControl-0.5.0-released.html#comments</comments>
    <wfw:comment>http://www.manuel-pichler.de/wfwcomment.php?cid=69</wfw:comment>

    <slash:comments>25</slash:comments>
    <wfw:commentRss>http://www.manuel-pichler.de/rss.php?version=2.0&amp;type=comments&amp;cid=69</wfw:commentRss>
    

    <author>nospam@example.com (Manuel Pichler)</author>
    <content:encoded>
    &lt;p&gt;
  After quite some time of silence around &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2194&amp;amp;entry_id=69&quot; title=&quot;http://php-under-control.org&quot;  onmouseover=&quot;window.status=&#039;http://php-under-control.org&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;phpUnderControl&lt;/a&gt; I have bundled the 0.5.0 release today. Beside minor changes, bugfixes and enhancements this release contains one new major feature, the &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2182&amp;amp;entry_id=69&quot; title=&quot;http://www.phpunit.de/browser/phpcb/trunk&quot;  onmouseover=&quot;window.status=&#039;http://www.phpunit.de/browser/phpcb/trunk&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;PHP_CodeBrowser&lt;/a&gt;.
&lt;/p&gt;

&lt;div class=&quot;serendipity_imageComment_center&quot; style=&quot;width: 400px&quot;&gt;&lt;div class=&quot;serendipity_imageComment_img&quot;&gt;&lt;a class=&#039;serendipity_image_link&#039; href=&#039;http://www.manuel-pichler.de/uploads/phpUnderControl/php-under-contro-and-php-code-browser.png&#039;&gt;&lt;!-- s9ymdb:60 --&gt;&lt;img class=&quot;serendipity_image_center&quot; width=&quot;400&quot; src=&quot;http://www.manuel-pichler.de/uploads/phpUnderControl/php-under-contro-and-php-code-browser.png&quot; alt=&quot;&quot;  /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;serendipity_imageComment_txt&quot;&gt;phpUnderControl integrating PHP_CodeBrowser&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;
  The &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2182&amp;amp;entry_id=69&quot; title=&quot;http://www.phpunit.de/browser/phpcb/trunk&quot;  onmouseover=&quot;window.status=&#039;http://www.phpunit.de/browser/phpcb/trunk&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;PHP_CodeBrowser&lt;/a&gt; is a separate application that collects various XML log files with different project metrics/violations and presents them in a browseable source view with syntax highligting. This tool is a contribution by the &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2184&amp;amp;entry_id=69&quot; title=&quot;http://www.mayflower.de/&quot;  onmouseover=&quot;window.status=&#039;http://www.mayflower.de/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Mayflower GmbH&lt;/a&gt;, where it was developed and now shared with the Open Source Community. At this point I would like to thank Mayflower as a whole and in particular at &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2185&amp;amp;entry_id=69&quot; title=&quot;http://blog.thinkphp.de/archives/464-PHP_CodeBrowser-Release-version-0.1.0.html&quot;  onmouseover=&quot;window.status=&#039;http://blog.thinkphp.de/archives/464-PHP_CodeBrowser-Release-version-0.1.0.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Elger&lt;/a&gt; and &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2186&amp;amp;entry_id=69&quot; title=&quot;http://phpmyfaq.de/&quot;  onmouseover=&quot;window.status=&#039;http://phpmyfaq.de/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Thorsten&lt;/a&gt;, which were responsible for all technical aspects of this contribution.
&lt;/p&gt;

&lt;p&gt;
  To use the PHP_CodeBrowser you must add an additional &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2187&amp;amp;entry_id=69&quot; title=&quot;http://cruisecontrol.sourceforge.net/main/configxml.html#execute&quot;  onmouseover=&quot;window.status=&#039;http://cruisecontrol.sourceforge.net/main/configxml.html#execute&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;execute publisher&lt;/a&gt; to your &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2188&amp;amp;entry_id=69&quot; title=&quot;http://cruisecontrol.sourceforge.net&quot;  onmouseover=&quot;window.status=&#039;http://cruisecontrol.sourceforge.net&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;CruiseControl&lt;/a&gt; &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2189&amp;amp;entry_id=69&quot; title=&quot;http://cruisecontrol.sourceforge.net/main/configxml.html&quot;  onmouseover=&quot;window.status=&#039;http://cruisecontrol.sourceforge.net/main/configxml.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;config.xml&lt;/a&gt; file that generates the PHP_CodeBrowser html report and an additional &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2190&amp;amp;entry_id=69&quot; title=&quot;http://cruisecontrol.sourceforge.net/main/configxml.html#artifactspublisher&quot;  onmouseover=&quot;window.status=&#039;http://cruisecontrol.sourceforge.net/main/configxml.html#artifactspublisher&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;artifacts publisher&lt;/a&gt; to move the generated PHP_CodeBrowser report into the projects artifacts directory. 
&lt;/p&gt;

&lt;pre&gt;
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&amp;gt;
&amp;lt;cruisecontrol&amp;gt;
  &amp;lt;!-- ... --&amp;gt;
  &amp;lt;project name=&quot;PHP_Depend&quot; buildafterfailed=&quot;false&quot;&amp;gt;
    &amp;lt;!-- ... --&amp;gt;
    &amp;lt;publishers&amp;gt;
      &amp;lt;!-- ... --&amp;gt;
      &amp;lt;execute command=&quot;phpcb 
        --log projects/${project.name}/build/logs 
        --source projects/${project.name}/source/PHP 
        --output projects/${project.name}/build/php-code-browser&quot;/&amp;gt;
      &amp;lt;artifactspublisher 
        dir=&quot;projects/${project.name}/build/php-code-browser&quot; 
        dest=&quot;artifacts/${project.name}&quot; 
        subdirectory=&quot;php-code-browser&quot;/&amp;gt;
      &amp;lt;!-- ... --&amp;gt;
    &amp;lt;/publishers&amp;gt;
  &amp;lt;/project&amp;gt;
&amp;lt;/cruisecontrol&amp;gt;
&lt;/pre&gt;

&lt;p&gt;
  But why do we use a CruiseControl &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2191&amp;amp;entry_id=69&quot; title=&quot;http://cruisecontrol.sourceforge.net/main/configxml.html#publishers&quot;  onmouseover=&quot;window.status=&#039;http://cruisecontrol.sourceforge.net/main/configxml.html#publishers&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;publishers&lt;/a&gt; instead of a regular ant &lt;em&gt;(Your build tool here)&lt;/em&gt; &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2192&amp;amp;entry_id=69&quot; title=&quot;http://ant.apache.org/manual/using.html#targets&quot;  onmouseover=&quot;window.status=&#039;http://ant.apache.org/manual/using.html#targets&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;target&lt;/a&gt;? The answer is really simple. The PHP_CodeBrowser must be the very last artifact generated for a project, which means it must also run after PHPUnit, to collect the test result logs. But in most setups PHPUnit is configured with &lt;code&gt;failonerror=&quot;on&quot;&lt;/code&gt; to mark a build as failed, when an error occured during the test execution. But with this configuration a following PHP_CodeBrowser target would never be executed by &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2193&amp;amp;entry_id=69&quot; title=&quot;http://ant.apache.org/&quot;  onmouseover=&quot;window.status=&#039;http://ant.apache.org/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;ant&lt;/a&gt;, because the build failed already. This cannot happen with a CruiseControl publisher which is always executed in a separated process.
&lt;/p&gt;

&lt;p&gt;
  If you create a new project with phpUnderControl&#039;s &lt;code&gt;project&lt;/code&gt; command, phpUnderControl will automatically search for an installed PHP_CodeBrowser and add the required publishers to your &lt;code&gt;config.xml&lt;/code&gt; file when it is present.
&lt;/p&gt;

&lt;pre&gt;
mapi@arwen ~ $ phpuc project \
       --project-name PHP_Depend \
       --source-dir PHP \
       --test-case PHP_Depend_AllTests \
       --test-dir tests \
       --test-file PHP/Depend/AllTests.php \
       --version-control svn \
       --version-control-url http://svn.pdepend.org/branches/0.9.0 \
       /opt/cruisecontrol/cruisecontrol-bin-2.8.2
&lt;/pre&gt;

&lt;p&gt;
  To get the latest version of phpUnderControl, you can use the PEAR-Channel-Server:
&lt;/p&gt;

&lt;pre&gt;
mapi@arwen ~ $ pear channel-discover pear.phpunit.de
mapi@arwen ~ $ pear install phpunit/phpUnderControl-beta
&lt;/pre&gt;

&lt;p&gt;
  or you can check it out from the subversion repository:
&lt;/p&gt;

&lt;pre&gt;
mapi@arwen ~ $ svn co svn://phpunit.de/phpunit/phpUnderControl/trunk
&lt;/pre&gt; 
    </content:encoded>

    <pubDate>Sun, 06 Dec 2009 15:16:00 +0100</pubDate>
    <guid isPermaLink="false">http://www.manuel-pichler.de/archives/69-guid.html</guid>
    <category>elger</category>
<category>mayflower</category>
<category>phpundercontrol</category>
<category>php_codebrowser</category>
<category>release announcement</category>
<category>thorsten</category>

</item>
<item>
    <title>First release of the staticReflection component.</title>
    <link>http://www.manuel-pichler.de/archives/68-First-release-of-the-staticReflection-component..html</link>
            <category>php</category>
            <category>phpugdo</category>
            <category>planet-php</category>
            <category>projects</category>
            <category>staticReflection</category>
    
    <comments>http://www.manuel-pichler.de/archives/68-First-release-of-the-staticReflection-component..html#comments</comments>
    <wfw:comment>http://www.manuel-pichler.de/wfwcomment.php?cid=68</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://www.manuel-pichler.de/rss.php?version=2.0&amp;type=comments&amp;cid=68</wfw:commentRss>
    

    <author>nospam@example.com (Manuel Pichler)</author>
    <content:encoded>
    &lt;p&gt;
  Today I have released the first version of the staticReflection component. This component parses the source files of a project to provide reflection information identical to that provided by &lt;a href=&quot;http://php.net&quot;&gt;PHP&#039;s&lt;/a&gt; build in &lt;a href=&quot;http://php.net/reflection&quot;&gt;API&lt;/a&gt;, without loading the class declaration into the PHP runtime context. Due to the API compatibility the staticReflection component can simply be used as a drop-in replacement for the reflection extension.
&lt;/p&gt;

&lt;p&gt;
  A few weeks ago I started just another script that utilized the &lt;a href=&quot;http://&quot;&gt;tokenizer&lt;/a&gt; extension to extract some information from source code files. At that point I thought that the time had come to realize a project that was on my todo for a very long time. And here is the result of the first iteration, a userland reflection implementation that is api compatible with PHP&#039;s internal reflection extension. Beside the source parser and the reflection ast this component provides a unified interface to both reflection versions, which makes it easy to switch between different implementations.
&lt;/p&gt;

&lt;p&gt;
  As a first use case for this component I have choosen autoload files, as they are used by the &lt;a href=&quot;http://ezcomponents.org&quot;&gt;eZ Components&lt;/a&gt;. The generation of those files is really easy, simply parse a directory with source files and dump the result into a file.
&lt;/p&gt;

&lt;pre&gt;
&amp;lt;?php
use org\pdepend\reflection\Autoloader;
use org\pdepend\reflection\ReflectionSession;

// Include the bundled autoloader
include_once &#039;staticReflection/Autoloader.php&#039;;

// Register the autoload function
spl_autoload_register( array( new Autoloader(), &#039;autoload&#039; ) );

// Create a new session
$session = new ReflectionSession();

// Create a directory query
$query = $session-&amp;gt;createDirectoryQuery(  );

$autoload = array();
foreach ( $query-&amp;gt;find( __DIR__ . &#039;/../../source/&#039; ) as $class )
{
    $autoload[$class-&amp;gt;getName()] = $class-&amp;gt;getFileName();
}

var_export( $autoload ); 
&lt;/pre&gt;

&lt;p&gt;
  You can also use the static reflection implementation to analyze different versions of the same class in the same process, which is not possible with the build-in reflection API, because you cannot load multiple classes with the same name into the current runtime context. 
&lt;/p&gt;

&lt;p&gt;
  Beside parsing of a given directory or file the staticReflection component also supports direct access to a concrete class or interface through the name. Therefor it uses so called &lt;a href=&quot;http://tracker.pdepend.org/static_reflection/browse_code/view/source/interfaces/SourceResolver.php&quot;&gt;source resolvers&lt;/a&gt;, that perform a mapping between class names and the associated source files. The current release has two build-in resolvers, one using autoload arrays as they are used by the &lt;a href=&quot;http://ezcomponents.org&quot;&gt;eZ Components&lt;/a&gt; and the other one uses the &lt;a href=&quot;http://pear.php.net/manual/en/standards.naming.php&quot;&gt;PEAR naming conventions&lt;/a&gt; and the configured include_paths to determine the source file for a given class name. The following example illustrates the usage of the &lt;a href=&quot;http://tracker.pdepend.org/static_reflection/browse_code/view/source/resolvers/PearNamingResolver.php&quot;&gt;PEAR source resolver&lt;/a&gt;.
&lt;/p&gt;

&lt;pre&gt;
&amp;lt;?php
use org\pdepend\reflection\Autoloader;
use org\pdepend\reflection\ReflectionSession;
use org\pdepend\reflection\factories\StaticReflectionClassFactory;
use org\pdepend\reflection\resolvers\PearNamingResolver;

include_once &#039;staticReflection/Autoloader.php&#039;;

spl_autoload_register( array( new Autoloader(), &#039;autoload&#039; ) );

$session = ReflectionSession::createStaticSession(
    new PearNamingResolver()
);

$class = $session-&amp;gt;getClass( &#039;PEAR_Frontend&#039; );
echo &#039;- &#039;, $class-&amp;gt;getName(), PHP_EOL,
     &#039;    &#039;, $class-&amp;gt;getFileName(), PHP_EOL;
&lt;/pre&gt;

&lt;p&gt;
  This concept makes the component extremly flexible, because you can write your own source resolver that fulfills the requirements for your application.
&lt;/p&gt;

&lt;p&gt;
  Beside the source resolver concept the &lt;a href=&quot;http://tracker.pdepend.org/static_reflection/browse_code/view/source/ReflectionSession.php&quot;&gt;ReflectionSession&lt;/a&gt; can also be configured with a custom stack of &lt;a href=&quot;http://tracker.pdepend.org/static_reflection/browse_code/view/source/interfaces/ReflectionClassFactory.php&quot;&gt;ReflectionClassFactory&lt;/a&gt; objects that are used to retrieve a reflection class instance for a given class/interface name. To minimize the configuration overhead for common use cases the &lt;code&gt;ReflectionSession&lt;/code&gt; class provides three build-in factory methods that create default session configurations for you:
&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;code&gt;ReflectionSession::createDefaultSession( SourceResolver )&lt;/code&gt;: This session configuration uses three different backends. First it asks the native backend for a reflection class. When this backend cannot handle the request the static reflection factory is asked for a matching class. Finally this configuration uses the &lt;a href=&quot;http://tracker.pdepend.org/static_reflection/browse_code/view/source/factories/NullReflectionClassFactory.php&quot;&gt;null backend&lt;/a&gt;, which always returns an empty placeholder reflection class.&lt;br /&gt;&lt;br /&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;code&gt;ReflectionSession::createStaticSession( SourceResolver )&lt;/code&gt;: This session setup first asks the static reflection implementation for a matching reflection class and falls back to the null backend when no matching class exists.&lt;br /&gt;&lt;br /&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;code&gt;ReflectionSession::createInternalSession()&lt;/code&gt;: This factory method creates a session setup that is a simple wrapper around PHP&#039;s internal reflection api.&lt;br /&gt;&lt;br /&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;p&gt;
  But you can always build your own session configuration with a custom factory stack, by calling the &lt;code&gt;&lt;a href=&quot;http://tracker.pdepend.org/static_reflection/browse_code/view/source/ReflectionSession.php#line160&quot;&gt;ReflectionSession::addClassFactory()&lt;/a&gt;&lt;/code&gt; method on the session instance.
&lt;/p&gt;

&lt;pre&gt;
&amp;lt;?php
use org\pdepend\reflection\Autoloader;
use org\pdepend\reflection\ReflectionSession;

include_once &#039;staticReflection/Autoloader.php&#039;;

spl_autoload_register( array( new Autoloader(), &#039;autoload&#039; ) );

$session = new ReflectionSession();
$session-&amp;gt;addClassFactory( new MyFooFactory() );
$session-&amp;gt;addClassFactory( new MyBarFactory() );
&lt;/pre&gt;

&lt;p&gt;
  So how can you use this cool component in your application? This is really simple, just replace all &lt;code&gt;ReflectionClass&lt;/code&gt; instantiations with the following code:
&lt;/p&gt;

&lt;pre&gt;
&amp;lt;?php
// ...
// Previous instantiation
// $ref = new ReflectionClass( &#039;Foo_Bar_Baz&#039; );

// New cool solution
$ref = ReflectionSessionInstance::get()-&amp;gt;getClass( &#039;Foo_Bar_Baz&#039; );
&lt;/pre&gt;

&lt;p&gt;
  And add the following code to your bootstrap file:
&lt;/p&gt;

&lt;pre&gt;
&amp;lt;?php
// ...
ReflectionSessionInstance::set(
    ReflectionSession::createInternalSession()
);
&lt;/pre&gt;

&lt;p&gt;
  Finally some words to the requirements and the installation of this component. This component requires PHP in a version greater or equal 5.3.0. For installation you can use &lt;a href=&quot;http://pdepend.org&quot;&gt;PHP_Depend&#039;s&lt;/a&gt; PEAR channel:
&lt;/p&gt;

&lt;pre&gt;
mapi@arwen ~ $ pear channel-discover pear.pdepend.org
mapi@arwen ~ $ pear install pdepend/staticReflection-alpha
&lt;/pre&gt;

&lt;p&gt;
  or you can download the latest version from the staticReflection svn respository:
&lt;/p&gt;

&lt;pre&gt;
mapi@arwen ~ $ svn co http://svn.reflection.pdepend.org/trunk \
                      staticReflection
&lt;/pre&gt;

&lt;p&gt;
  Feel free to test this component and file bug-reports and/or feature-requests in the &lt;a href=&quot;http://tracker.pdepend.org/static_reflection/&quot;&gt;project issue tracker&lt;/a&gt;. 
&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sun, 29 Nov 2009 21:45:00 +0100</pubDate>
    <guid isPermaLink="false">http://www.manuel-pichler.de/archives/68-guid.html</guid>
    <category>php</category>
<category>static code analysis</category>
<category>static_reflection</category>
<category>tools</category>

</item>
<item>
    <title>PHP_Depend PEAR Channel switched to Pirum</title>
    <link>http://www.manuel-pichler.de/archives/67-PHP_Depend-PEAR-Channel-switched-to-Pirum.html</link>
            <category>php</category>
            <category>php_depend</category>
            <category>phpugdo</category>
            <category>planet-php</category>
    
    <comments>http://www.manuel-pichler.de/archives/67-PHP_Depend-PEAR-Channel-switched-to-Pirum.html#comments</comments>
    <wfw:comment>http://www.manuel-pichler.de/wfwcomment.php?cid=67</wfw:comment>

    <slash:comments>3</slash:comments>
    <wfw:commentRss>http://www.manuel-pichler.de/rss.php?version=2.0&amp;type=comments&amp;cid=67</wfw:commentRss>
    

    <author>nospam@example.com (Manuel Pichler)</author>
    <content:encoded>
    &lt;p&gt;
  Today &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2160&amp;amp;entry_id=67&quot; title=&quot;http://fabien.potencier.org/&quot;  onmouseover=&quot;window.status=&#039;http://fabien.potencier.org/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Fabien Potencier&lt;/a&gt; &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2165&amp;amp;entry_id=67&quot; title=&quot;http://fabien.potencier.org/article/38/pirum-the-simple-pear-channel-server-manager&quot;  onmouseover=&quot;window.status=&#039;http://fabien.potencier.org/article/38/pirum-the-simple-pear-channel-server-manager&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;announced&lt;/a&gt; the first relase of the &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2161&amp;amp;entry_id=67&quot; title=&quot;http://pear.php.net&quot;  onmouseover=&quot;window.status=&#039;http://pear.php.net&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;PEAR&lt;/a&gt; Channel server &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2162&amp;amp;entry_id=67&quot; title=&quot;http://pirum-project.org/&quot;  onmouseover=&quot;window.status=&#039;http://pirum-project.org/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Pirum&lt;/a&gt;. The great benefit of this Channel server is that it provides a simple shell script to publish new PEAR package releases, a feature that I missed in the previously used &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2163&amp;amp;entry_id=67&quot; title=&quot;http://pear.chiaraquartet.net/&quot;  onmouseover=&quot;window.status=&#039;http://pear.chiaraquartet.net/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Chiara PEAR Server&lt;/a&gt;. Pirum will make it really easy to publish new package versions through a simple build script &lt;img src=&quot;http://www.manuel-pichler.de/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;
&lt;/p&gt;

&lt;p&gt;
  The setup was quick done, following the &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2162&amp;amp;entry_id=67&quot; title=&quot;http://pirum-project.org/&quot;  onmouseover=&quot;window.status=&#039;http://pirum-project.org/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;instructions&lt;/a&gt; on the pirum website, and importing the existing package files worked like a charm. The only problem I encountered was that both channel server implementations use a different directory structure. Pirum stores all the XML descriptors under a directory named &lt;i&gt;/rest&lt;/i&gt;, while my Chiara Server installation has used &lt;i&gt;/Chiara_PEAR_Server_REST&lt;/i&gt;, so that a first call to &lt;code&gt;pear upgrade&lt;/code&gt; resulted in the following error:
&lt;/p&gt;

&lt;pre&gt;
manu@arwen ~ $ pear upgrade
Error getting channel info from pear.pdepend.org: \
File http://pear.pdepend.org:80/Chiara_PEAR_Server_REST/p/packages.xml \
not valid (received: HTTP/1.1 404 Not Found)
&lt;/pre&gt;

&lt;p&gt;
  But a simple 301 redirect makes this software transition transparent for the &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2166&amp;amp;entry_id=67&quot; title=&quot;http://pdepend.org&quot;  onmouseover=&quot;window.status=&#039;http://pdepend.org&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;PHP_Depend&lt;/a&gt; users. So when you will also switch to Pirum you should keep this in mind and test your channel server with an existing/configured local pear installation.
&lt;/p&gt;

&lt;p&gt;
  Finally, thanks to Fabien for this nitty-gritty tool, which will speed up the deployment process of PEAR packages, at least for me.
&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sat, 28 Nov 2009 14:00:23 +0100</pubDate>
    <guid isPermaLink="false">http://www.manuel-pichler.de/archives/67-guid.html</guid>
    <category>fabien potencier</category>
<category>php</category>
<category>php_depend</category>
<category>pirum</category>

</item>
<item>
    <title>PHP_Depend jumps on the D-BUS</title>
    <link>http://www.manuel-pichler.de/archives/66-PHP_Depend-jumps-on-the-D-BUS.html</link>
            <category>php</category>
            <category>php_depend</category>
            <category>phpugdo</category>
            <category>planet-php</category>
    
    <comments>http://www.manuel-pichler.de/archives/66-PHP_Depend-jumps-on-the-D-BUS.html#comments</comments>
    <wfw:comment>http://www.manuel-pichler.de/wfwcomment.php?cid=66</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://www.manuel-pichler.de/rss.php?version=2.0&amp;type=comments&amp;cid=66</wfw:commentRss>
    

    <author>nospam@example.com (Manuel Pichler)</author>
    <content:encoded>
    &lt;p&gt;
  Today I had the chance to visit &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2158&amp;amp;entry_id=66&quot; title=&quot;http://derickrethans.nl/&quot;  onmouseover=&quot;window.status=&#039;http://derickrethans.nl/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Derick&#039;s&lt;/a&gt; IPC talk &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2154&amp;amp;entry_id=66&quot; title=&quot;http://it-republik.de/konferenzen/ext_scripts/v2/php/sessions-popup.php?module=ipc09&amp;amp;amp;id=11621&quot;  onmouseover=&quot;window.status=&#039;http://it-republik.de/konferenzen/ext_scripts/v2/php/sessions-popup.php?module=ipc09&amp;amp;amp;id=11621&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;PHP on the D-BUS&lt;/a&gt;. Beside the fact that it was an exciting talk, it inspired me to implement a small, but nice feature for &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2155&amp;amp;entry_id=66&quot; title=&quot;http://pdepend.org&quot;  onmouseover=&quot;window.status=&#039;http://pdepend.org&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;PHP_Depend&lt;/a&gt; using the &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2156&amp;amp;entry_id=66&quot; title=&quot;http://pecl.php.net/package/DBus&quot;  onmouseover=&quot;window.status=&#039;http://pecl.php.net/package/DBus&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;pecl/dbus&lt;/a&gt; extension.
&lt;/p&gt;

&lt;div class=&quot;serendipity_imageComment_center&quot; style=&quot;width: 400px&quot;&gt;&lt;div class=&quot;serendipity_imageComment_img&quot;&gt;&lt;!-- s9ymdb:59 --&gt;&lt;img class=&quot;serendipity_image_center&quot; width=&quot;400&quot; height=&quot;200&quot; src=&quot;http://www.manuel-pichler.de/uploads/php_depend/pdepend-jumps-on-the-dbus.png&quot; alt=&quot;&quot;  /&gt;&lt;/div&gt;&lt;div class=&quot;serendipity_imageComment_txt&quot;&gt;PHP_Depend jumps on the D-BUS&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;
  Sometimes the parsing and analysis process of PHP_Depend can consume a lot of time to finish, so I always put the shell aside and do something different. Normally I take a look at the shell every few minutes to check if the process has finished, but it also happens that I totally forget that I have started a PHP_Depend process on my system. So I need something that says to me, &lt;em&gt;&quot;Hey, mapi PHP_Depend has finished its job...&quot;&lt;/em&gt;, and here comes D-BUS in the game.
&lt;/p&gt;
&lt;p&gt;
  With D-BUS it is really simple to send a message to a desktop notification panel, as it is available for desktop environments like Gnome or KDE. To use D-BUS in your php applications you must checkout the source code of &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2156&amp;amp;entry_id=66&quot; title=&quot;http://pecl.php.net/package/DBus&quot;  onmouseover=&quot;window.status=&#039;http://pecl.php.net/package/DBus&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;pecl/dbus&lt;/a&gt; from the &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2159&amp;amp;entry_id=66&quot; title=&quot;http://svn.php.net/repository/pecl/dbus/trunk&quot;  onmouseover=&quot;window.status=&#039;http://svn.php.net/repository/pecl/dbus/trunk&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;svn repository&lt;/a&gt; and compile it for your php installation.
&lt;/p&gt;

&lt;pre&gt;
mapi@arwen ~ $ svn co http://svn.php.net/repository/pecl/dbus/trunk \
               pecl-dbus
mapi@arwen ~ $ cd pecl-dbus
mapi@arwen pecl-dbus $ phpize
mapi@arwen pecl-dbus $ ./configure
mapi@arwen pecl-dbus $ make
mapi@arwen pecl-dbus $ sudo make install
&lt;/pre&gt;

&lt;p&gt;
That&#039;s it. Now you should see the &lt;em&gt;--notify-me&lt;/em&gt; option when you open PHP_Depend&#039;s help screen.
&lt;/p&gt;

&lt;pre&gt;
mapi@arwen ~ $ ~/pdepend/pdepend.php --help
PHP_Depend @package_version@ by Manuel Pichler

// ... snipp ...

  --debug                   Prints debugging information.
  --help                    Print this help text.
  --version                 Print the current version.
  --notify-me               Show a notification after analysis.
  -d key[=value]            Sets a php.ini value.
&lt;/pre&gt;

&lt;p&gt;
  Now you can add this option to your normal PHP_Depend command and it will show a notification window with the number of analyzed files and the time the process took.
&lt;/p&gt;

&lt;pre&gt;
mapi@arwen ~ $ ~/pdepend/pdepend.php --summary-xml=/tmp/summary.xml \
                                       --notify-me \
                                       ~/pdepend/PHP
&lt;/pre&gt;

&lt;p&gt;
  For the moment this feature is only available through the &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2157&amp;amp;entry_id=66&quot; title=&quot;http://svn.pdepend.org/branches/0.9.0&quot;  onmouseover=&quot;window.status=&#039;http://svn.pdepend.org/branches/0.9.0&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;0.9.0 branch&lt;/a&gt; of PHP_Depend and not as a PEAR package.
&lt;/p&gt; 
    </content:encoded>

    <pubDate>Wed, 18 Nov 2009 18:47:00 +0100</pubDate>
    <guid isPermaLink="false">http://www.manuel-pichler.de/archives/66-guid.html</guid>
    <category>dbus</category>
<category>derick</category>
<category>fun</category>
<category>php_depend</category>

</item>
<item>
    <title>PHP_Depend-0.9.6 released</title>
    <link>http://www.manuel-pichler.de/archives/61-PHP_Depend-0.9.6-released.html</link>
            <category>php</category>
            <category>php_depend</category>
            <category>phpugdo</category>
            <category>planet-php</category>
            <category>projects</category>
    
    <comments>http://www.manuel-pichler.de/archives/61-PHP_Depend-0.9.6-released.html#comments</comments>
    <wfw:comment>http://www.manuel-pichler.de/wfwcomment.php?cid=61</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://www.manuel-pichler.de/rss.php?version=2.0&amp;type=comments&amp;cid=61</wfw:commentRss>
    

    <author>nospam@example.com (Manuel Pichler)</author>
    <content:encoded>
    &lt;p&gt;
Today I released PHP_Depend 0.9.6, which contains many bug fixes and improvements, but the main feature of this release is behind the scene, I have started to migrate PHP_Depend&#039;s internal system from plain &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2143&amp;amp;entry_id=61&quot;  onmouseover=&quot;window.status=&#039;http://svn.pdepend.org/branches/0.9.0/PHP/Depend/Token.php&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; title=&quot;PHP_Depend_Token&quot;&gt;Token&lt;/a&gt; object to an &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2144&amp;amp;entry_id=61&quot;  onmouseover=&quot;window.status=&#039;http://svn.pdepend.org/branches/0.9.0/PHP/Depend/Code/ASTNode.php&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; title=&quot;PHP_Depend_Code_ASTNode&quot;&gt;Abstract Syntax Tree&lt;/a&gt;.
&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Closed &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2133&amp;amp;entry_id=61&quot; title=&quot;http://tracker.pdepend.org/pdepend/issue_tracker/issue/57&quot;  onmouseover=&quot;window.status=&#039;http://tracker.pdepend.org/pdepend/issue_tracker/issue/57&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#57&lt;/a&gt;: Display caption for abbreviations in overview pyramid, implemented in svn revision #947.&lt;/li&gt;
  &lt;li&gt;Closed &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2134&amp;amp;entry_id=61&quot; title=&quot;http://tracker.pdepend.org/pdepend/issue_tracker/issue/80&quot;  onmouseover=&quot;window.status=&#039;http://tracker.pdepend.org/pdepend/issue_tracker/issue/80&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#80&lt;/a&gt;: Store default value for class properties.&lt;/li&gt;
  &lt;li&gt;Fixed &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2135&amp;amp;entry_id=61&quot; title=&quot;http://tracker.pdepend.org/pdepend/issue_tracker/issue/81&quot;  onmouseover=&quot;window.status=&#039;http://tracker.pdepend.org/pdepend/issue_tracker/issue/81&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#81&lt;/a&gt;: PHP_Depend does not support comma separated property declarations, fixed in svn revision #916.&lt;/li&gt;
  &lt;li&gt;Fixed &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2136&amp;amp;entry_id=61&quot; title=&quot;http://tracker.pdepend.org/pdepend/issue_tracker/issue/82&quot;  onmouseover=&quot;window.status=&#039;http://tracker.pdepend.org/pdepend/issue_tracker/issue/82&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#82&lt;/a&gt;: PHP_Depend does not support comma separated constant definitions, fixed in svn revision #931.&lt;/li&gt;
  &lt;li&gt;Closed &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2137&amp;amp;entry_id=61&quot; title=&quot;http://tracker.pdepend.org/pdepend/issue_tracker/issue/83&quot;  onmouseover=&quot;window.status=&#039;http://tracker.pdepend.org/pdepend/issue_tracker/issue/83&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#83&lt;/a&gt;: Make ClassOrInterfaceReference an ASTNode, implemented in svn revision #917.&lt;/li&gt;
  &lt;li&gt;Fixed &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2138&amp;amp;entry_id=61&quot; title=&quot;http://tracker.pdepend.org/pdepend/issue_tracker/issue/87&quot;  onmouseover=&quot;window.status=&#039;http://tracker.pdepend.org/pdepend/issue_tracker/issue/87&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#87&lt;/a&gt;: The parent keyword is not accepted as parameter type hint, fixed in svn revision #925.&lt;/li&gt;
  &lt;li&gt;Fixed &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2139&amp;amp;entry_id=61&quot; title=&quot;http://tracker.pdepend.org/pdepend/issue_tracker/issue/89&quot;  onmouseover=&quot;window.status=&#039;http://tracker.pdepend.org/pdepend/issue_tracker/issue/89&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#89&lt;/a&gt;: Coupling analyzer reports wrong results, fixed in svn revision #939&lt;/li&gt;
  &lt;li&gt;Fixed &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2140&amp;amp;entry_id=61&quot; title=&quot;http://tracker.pdepend.org/pdepend/issue_tracker/issue/90&quot;  onmouseover=&quot;window.status=&#039;http://tracker.pdepend.org/pdepend/issue_tracker/issue/90&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#90&lt;/a&gt;: Coupling analyzer does not handle PHP 5.3 function chains, fixed in svn revision #943.&lt;/li&gt;
  &lt;li&gt;Fixed &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2141&amp;amp;entry_id=61&quot; title=&quot;http://tracker.pdepend.org/pdepend/issue_tracker/issue/91&quot;  onmouseover=&quot;window.status=&#039;http://tracker.pdepend.org/pdepend/issue_tracker/issue/91&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#91&lt;/a&gt;: Parser throws an exception when __CLASS__ as default value of an array property, fixed in svn revision #944.&lt;/li&gt;
  &lt;li&gt;Closes &lt;a href=&quot;http://www.manuel-pichler.de/exit.php?url_id=2142&amp;amp;entry_id=61&quot; title=&quot;http://tracker.pdepend.org/pdepend/issue_tracker/issue/92&quot;  onmouseover=&quot;window.status=&#039;http://tracker.pdepend.org/pdepend/issue_tracker/issue/92&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;#92&lt;/a&gt;: Use class constants as analyzer identifiers, implemented in svn revision #950.&lt;/li&gt;
&lt;/ul&gt;

&lt;br /&gt;
&lt;p&gt;
   You can get the latest PHP_Depend version from its PEAR channel: pear.pdepend.org 
&lt;/p&gt;

&lt;pre&gt;
mapi@arwen ~ $ pear channel-discover pear.pdepend.org
mapi@arwen ~ $ pear install pdepend/PHP_Depend-beta
&lt;/pre&gt;

 
    </content:encoded>

    <pubDate>Sun, 02 Aug 2009 21:32:00 +0200</pubDate>
    <guid isPermaLink="false">http://www.manuel-pichler.de/archives/61-guid.html</guid>
    <category>php5</category>
<category>php_depend</category>
<category>quality assurance</category>
<category>release announcement</category>

</item>

</channel>
</rss>
