<?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>John Kleijn - PHP</title>
    <link>http://www.johnkleijn.nl/</link>
    <description>Cogito ergo sum, baby</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.5.2 - http://www.s9y.org/</generator>
    <pubDate>Thu, 30 Dec 2010 01:44:19 GMT</pubDate>

    <image>
        <url>http://www.johnkleijn.nl/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: John Kleijn - PHP - Cogito ergo sum, baby</title>
        <link>http://www.johnkleijn.nl/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>Topological sorting of JavaScript files</title>
    <link>http://www.johnkleijn.nl/2010/Topological-sorting-of-JavaScript-files</link>
            <category>PHP</category>
    
    <comments>http://www.johnkleijn.nl/2010/Topological-sorting-of-JavaScript-files#comments</comments>
    <wfw:comment>http://www.johnkleijn.nl/wfwcomment.php?cid=41</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://www.johnkleijn.nl/rss.php?version=2.0&amp;type=comments&amp;cid=41</wfw:commentRss>
    

    <author>nospam@example.com (John Kleijn)</author>
    <content:encoded>
    &lt;p class=&quot;whiteline&quot;&gt;Recently I&#039;m doing a lot of ExtJS work. In complex JS app developement you&#039;ll quickly have a LOT of files to link to your HTML document. You&#039;ll want to combine and compress these files for production and link them sperate and uncompressed for testing.
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;The simplest solution is just listing the files in a configuration file. But managing this list is a PITA. We&#039;re developers, not clerks. So I decided this list should be auto-generated and properly sorted. Scanning the filesystem for javascript files is trivial, and I quickly decided the sort order should be determined by examining the contents, looking for class names. All files contain classes, with a JSDoc declaration of @class app.module.ClassName, so it&#039;s not hard to establish which file depends on which.
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;The real issue is sorting. Before long I came to the conclusion that there&#039;s no out of the box solution for the type of sorting I needed, all sort functions use QuickSort, even the ones using UDFs. On WikiPedia, I found that what I needed &quot;resolving dependencies into an ordered list&quot; could be accomplished using a different algorithm called &quot;Topological sorting&quot;.
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;WikiPedia describes one implementation in pseudo code:
&lt;/p&gt;&lt;blockquote&gt;&lt;p class=&quot;break&quot;&gt;L ← Empty list that will contain the sorted elements&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;S ← Set of all nodes with no incoming edges&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;while S is non-empty do&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;    remove a node n from S&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;    insert n into L&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;    for each node m with an edge e from n to m do&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;        remove edge e from the graph&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;        if m has no other incoming edges then&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;            insert m into S&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;if graph has edges then&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;    output error message (graph has at least one cycle)&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;else &lt;/p&gt;&lt;p class=&quot;break&quot;&gt;    output message (proposed topologically sorted order: L)&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;
&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;I decided to create a PHP implementation of this algorithm. &lt;/p&gt; &lt;br /&gt;&lt;a href=&quot;http://www.johnkleijn.nl/2010/Topological-sorting-of-JavaScript-files#extended&quot;&gt;Continue reading &quot;Topological sorting of JavaScript files&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Wed, 29 Dec 2010 09:46:34 +0100</pubDate>
    <guid isPermaLink="false">http://www.johnkleijn.nl/2010/41</guid>
    <category>dependencies</category>
<category>php</category>
<category>sorting</category>
<category>topological sort</category>

</item>
<item>
    <title>Story: Doctrine 2 lead up</title>
    <link>http://www.johnkleijn.nl/2010/Story-Doctrine-2-lead-up</link>
            <category>PHP</category>
    
    <comments>http://www.johnkleijn.nl/2010/Story-Doctrine-2-lead-up#comments</comments>
    <wfw:comment>http://www.johnkleijn.nl/wfwcomment.php?cid=38</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://www.johnkleijn.nl/rss.php?version=2.0&amp;type=comments&amp;cid=38</wfw:commentRss>
    

    <author>nospam@example.com (John Kleijn)</author>
    <content:encoded>
    &lt;p class=&quot;whiteline&quot;&gt;I had been waiting for PHP 5.3 for a long time, and looking at the progress for Zend Framework 2.0, I got very frustrated. But it made me keep a closer eye on the ZF Wiki, and when I encountered a proposal for Zend_Db_Mapper, I recognized many of the PoEAA patterns I had abandoned for reasons of practicality, but longed for so much. But the work was far from done, so I emailed the proposer, Benjamin Eberlei, on 19 December last year, offering my assistance. He responded..
&lt;/p&gt;&lt;blockquote&gt;&lt;p class=&quot;whiteline&quot;&gt;Hello John,
&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;I stopped to work on Zend Entity (and Db Mapper) when we realized that&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;it actually would end up being sort of a clone of the Doctrine 2 project,&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;so we joined forces and we will see some pretty neat ZF and Doctrine 1 /2&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;integration very soon.
&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;you are always welcome to contribute to doctrine 2, its quite advanced&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;already.
&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;greetings,&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;Benjamin&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;I was very disappointed. Zend Framework has a certain robustness, a defensiveness, that I&#039;ve come to expect (although around this same time ZF started to disappoint in this regard). Doctrine, to me, was superior in functionality to Zend_Db_Table, but it definitely lacked defensiveness. It was messy. And &quot;you can&#039;t build a palace on a pile of shit&quot;, the lesson I extracted from my experience with the SilverStripe CMS.
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;I responded to Benjamin expressing my disappointment and lack of faith in the quality of Doctrine. And even though he responded with assurances that Doctrine 2 was very different from Doctrine 1, I remained skeptical and disappointed.
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;Some months passed, and eventually I did have another look at D2, which had reached the last Alpha stage. I didn&#039;t really look at the docs, I assumed that it would be better than D1, but remained skeptical. Regardless, a bleak hope of &quot;a better Doctrine&quot; started to glimmer, and I started to investigate. I quickly came across &lt;a href=&quot;http://www.slideshare.net/jwage/doctrine-2-not-the-same-old-php-orm&quot;&gt;this presentation&lt;/a&gt; by Jonathan Wage. He had me at &quot;completely rewritten&quot;, but going on to &quot;kill the magic&quot;, it really caught my attention. The &quot;magic&quot; had annoyed me greatly, as it is very inflexible, a source of unclear execution flow, and perhaps the primary source of the lack of defensiveness in D1. Going on to replace the magic with proper OO principles, I was sold. This Doctrine was indeed better, &lt;strong&gt;fundamentally&lt;/strong&gt; better. There was more to the presentation, but it was just icing on the cake. The realization that it was still in alpha, tempered my enthusiasm enough to let it be.
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;Then I came across a project, that had the need for composite objects in a hierarchal structure, that needed to be persistent. Given the possible nesting level of these structures, I needed something that doesn&#039;t require many round trips to the database. Enter Nested Set (aka &quot;Modified Preorder Tree Traversal&quot;). Doctrine 1 does support that, but as it turned out, the combination of inheritance using &quot;column aggregation&quot; and nested set, was asking too much. This was mostly due to the poor inheritance mapping in D1. In desperation (and remembering a promise of &quot;better support for inheritance&quot;), I looked at the latest release of Doctrine, which turned out to be 2.0 BETA1. I was pleased the project had finally reached beta status, and started looking at the docs. I became more and more convinced that it was doable to rip out the guts of the application and replace it with D2.
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;This was a daunting task though, and I did underestimate it. I ended up namespacing the whole application, creating my own Nested Set implementation for use with D2, and overall just making mayor changes to the application. It put mayor stress on the deadline and myself, especially halfway through. But, the end result seemed worth it, and I am truly impressed with Doctrine 2. 
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;Another thing I am anticipation of is Symfony 2. I never cared much for S1, but I had a look at S2 and it looks pretty good. It relies pretty heavily on DI, another prerequisite for effective Domain Driven Development. Regrettably it won&#039;t reach beta until next year. Fabien Potencier apparently coined the expression &quot;kill the magic&quot;, and &lt;a href=&quot;http://www.symfony-project.org/blog/2009/10/27/why-will-symfony-2-0-finally-use-php-5-3&quot;&gt;seems as impressed&lt;/a&gt; with D2 as I am:
&lt;/p&gt;&lt;blockquote&gt;&lt;p class=&quot;break&quot;&gt;And man, Doctrine 2.0 is gorgeous. Doctrine 2.0 is one of best things that&#039;s happened to PHP in a long time.&lt;/p&gt;&lt;/blockquote&gt; 
    </content:encoded>

    <pubDate>Fri, 23 Jul 2010 10:33:21 +0200</pubDate>
    <guid isPermaLink="false">http://www.johnkleijn.nl/2010/38</guid>
    
</item>
<item>
    <title>Notes about closures in PHP</title>
    <link>http://www.johnkleijn.nl/2010/Notes-about-closures-in-PHP</link>
            <category>PHP</category>
    
    <comments>http://www.johnkleijn.nl/2010/Notes-about-closures-in-PHP#comments</comments>
    <wfw:comment>http://www.johnkleijn.nl/wfwcomment.php?cid=29</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.johnkleijn.nl/rss.php?version=2.0&amp;type=comments&amp;cid=29</wfw:commentRss>
    

    <author>nospam@example.com (John Kleijn)</author>
    <content:encoded>
    &lt;p class=&quot;break&quot;&gt;When PHP 5.3 came out, I was ecstatic. Namespaces, finally! Actually some parts of the implementation were a bit disappointing, but we&#039;ll leave that for another time. In that same enthousiasm, I jumped on closures like a hungry dog on a steak. Only to find the steak to be an old shoe.&lt;/p&gt; &lt;br /&gt;&lt;a href=&quot;http://www.johnkleijn.nl/2010/Notes-about-closures-in-PHP#extended&quot;&gt;Continue reading &quot;Notes about closures in PHP&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Sat, 27 Mar 2010 17:47:08 +0100</pubDate>
    <guid isPermaLink="false">http://www.johnkleijn.nl/2010/29</guid>
    <category>closures</category>
<category>php 5.3</category>
<category>typing</category>
<category>view helpers</category>

</item>
<item>
    <title>Virtual Proxies revisited</title>
    <link>http://www.johnkleijn.nl/2010/Virtual-Proxies-revisited</link>
            <category>PHP</category>
    
    <comments>http://www.johnkleijn.nl/2010/Virtual-Proxies-revisited#comments</comments>
    <wfw:comment>http://www.johnkleijn.nl/wfwcomment.php?cid=28</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.johnkleijn.nl/rss.php?version=2.0&amp;type=comments&amp;cid=28</wfw:commentRss>
    

    <author>nospam@example.com (John Kleijn)</author>
    <content:encoded>
    &lt;p class=&quot;whiteline&quot;&gt;Of all the well known design patterns related to ORM, the Proxy pattern (or more specifically, Virtual Proxy) is perhaps the most under-appreciated (with Unit of Work Controller and Value List Handler coming in second). This may be because it&#039;s not strictly a data source pattern, and you won&#039;t find in PoEAA chapter or Core J2EE Patterns. It is actually in the GoF, which doesn&#039;t contain any data source patterns. For me personally, Virtual Proxy will always be directly associated with data loading, as that is what I first used it for in 2006, although since then I have used for other occasions where object initialization was abnormally expensive. It is a pretty versatile pattern.
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;In a nutshell, a Virtual Proxy is a &quot;lazy loading&quot; pattern that defers initialization of an object until it needed. The proxy does not contain the actual resource, but &quot;knows how to get it&quot;. It does this by extending a subjects class while delegating to an instance of that same class, the subject. Basically this is what a Decorator does. But instead of overriding methods to add behaviour to a decorated object, it overrides them to trigger initialization of the subject (loading from the database in the case of an ORM), before delegating to the subject. Like with a decorator you&#039;ll have to override every method so that it is delegated to the subject. This makes manually writing proxies a pain.




&lt;/p&gt; &lt;br /&gt;&lt;a href=&quot;http://www.johnkleijn.nl/2010/Virtual-Proxies-revisited#extended&quot;&gt;Continue reading &quot;Virtual Proxies revisited&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Thu, 25 Mar 2010 16:13:00 +0100</pubDate>
    <guid isPermaLink="false">http://www.johnkleijn.nl/2010/28</guid>
    <category>design patterns</category>
<category>lazy loading</category>
<category>orm</category>

</item>
<item>
    <title>Started on a new framework</title>
    <link>http://www.johnkleijn.nl/2010/Started-on-a-new-framework</link>
            <category>PHP</category>
    
    <comments>http://www.johnkleijn.nl/2010/Started-on-a-new-framework#comments</comments>
    <wfw:comment>http://www.johnkleijn.nl/wfwcomment.php?cid=8</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://www.johnkleijn.nl/rss.php?version=2.0&amp;type=comments&amp;cid=8</wfw:commentRss>
    

    <author>nospam@example.com (John Kleijn)</author>
    <content:encoded>
    &lt;p class=&quot;whiteline&quot;&gt;Yet again.
&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;Actually, using bits and pieces from previous works of art and a lot of red bars that turned green eventually, it is actually already a usable framework. Which allows me to focus on the more interesting stuff that are going to set this framework apart. Starting with the data layer.&lt;/p&gt; &lt;br /&gt;&lt;a href=&quot;http://www.johnkleijn.nl/2010/Started-on-a-new-framework#extended&quot;&gt;Continue reading &quot;Started on a new framework&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Wed, 24 Mar 2010 13:03:38 +0100</pubDate>
    <guid isPermaLink="false">http://www.johnkleijn.nl/2010/8</guid>
    <category>framework</category>
<category>orm</category>
<category>php 5.3</category>

</item>
<item>
    <title>Nuff Said.</title>
    <link>http://www.johnkleijn.nl/2009/Nuff-Said.</link>
            <category>PHP</category>
    
    <comments>http://www.johnkleijn.nl/2009/Nuff-Said.#comments</comments>
    <wfw:comment>http://www.johnkleijn.nl/wfwcomment.php?cid=26</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.johnkleijn.nl/rss.php?version=2.0&amp;type=comments&amp;cid=26</wfw:commentRss>
    

    <author>nospam@example.com (John Kleijn)</author>
    <content:encoded>
    &lt;p class=&quot;whiteline&quot;&gt;&lt;div class=&quot;php geshi&quot; style=&quot;text-align: left&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; extraStatics&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;#160; &amp;#160; &lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #004000;&quot;&gt;extraDBFields&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #009933; font-style: italic;&quot;&gt;/**&lt;br /&gt;* @deprecated 2.3 Use extraStatics()&lt;br /&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; extraDBFields&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;#160; &amp;#160; &lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&amp;#160;&lt;/div&gt;
&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;(This gem was taken from SilverStripe)&lt;/p&gt; 
    </content:encoded>

    <pubDate>Mon, 13 Apr 2009 12:41:00 +0200</pubDate>
    <guid isPermaLink="false">http://www.johnkleijn.nl/2009/26</guid>
    <category>silverstripe</category>
<category>wtf</category>

</item>
<item>
    <title>&quot;Don't blame us, blame PHP&quot;</title>
    <link>http://www.johnkleijn.nl/2009/Dont-blame-us,-blame-PHP</link>
            <category>PHP</category>
    
    <comments>http://www.johnkleijn.nl/2009/Dont-blame-us,-blame-PHP#comments</comments>
    <wfw:comment>http://www.johnkleijn.nl/wfwcomment.php?cid=17</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.johnkleijn.nl/rss.php?version=2.0&amp;type=comments&amp;cid=17</wfw:commentRss>
    

    <author>nospam@example.com (John Kleijn)</author>
    <content:encoded>
    &lt;p class=&quot;whiteline&quot;&gt;At SilverStripe, they&#039;ve gone through great lengths to rape the OO model (seriously, stay clear). But according to SS, their way is the right way, and PHP has it ALL WRONG. The fact that SilverStripe&#039;s codebase looks like my kitchen when the gf is out of town, is as defensive as an 80 year old Amish women in a coma, and about as structurally sound as house of cards, is ALL PHP&#039;s fault! Obviously is has nothing to with the way they are trying to use static properties. Right.
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;&lt;div class=&quot;php geshi&quot; style=&quot;text-align: left&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #009933; font-style: italic;&quot;&gt;/**&lt;br /&gt;* ...&lt;br /&gt;*&lt;br /&gt;* Note: please ensure that the static variable that you are overloading is explicitly defined on the class that&lt;br /&gt;* you are extending. &amp;#160;For example, we have added static $has_one = array() to the Member definition, &lt;br /&gt;* so that we can add has_one relationships to Member with decorators.&lt;br /&gt;*&lt;br /&gt;* If you forget to do this, db/build won&#039;t create the new relation.&lt;br /&gt;* Don&#039;t blame us, blame PHP! &lt;img src=&quot;http://www.johnkleijn.nl/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;*/&lt;/span&gt;&lt;br /&gt;&amp;#160;&lt;/div&gt;
&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;Adding a winky does not make it funny or right, sorry. Actually, double fail for smilies in code. Triple fail for writing the biggest piece of crap in PHP history (and that&#039;s saying a lot, MediaWiki anyone?)&lt;/p&gt; 
    </content:encoded>

    <pubDate>Mon, 13 Apr 2009 12:11:00 +0200</pubDate>
    <guid isPermaLink="false">http://www.johnkleijn.nl/2009/17</guid>
    
</item>
<item>
    <title>SOAP server in 30 seconds</title>
    <link>http://www.johnkleijn.nl/2009/SOAP-server-in-30-seconds</link>
            <category>PHP</category>
    
    <comments>http://www.johnkleijn.nl/2009/SOAP-server-in-30-seconds#comments</comments>
    <wfw:comment>http://www.johnkleijn.nl/wfwcomment.php?cid=25</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.johnkleijn.nl/rss.php?version=2.0&amp;type=comments&amp;cid=25</wfw:commentRss>
    

    <author>nospam@example.com (John Kleijn)</author>
    <content:encoded>
    &lt;p class=&quot;break&quot;&gt;I sometimes get the feeling that some PHP developers think SOAP is hard to use. When in most cases, nothing could be further from the truth.&lt;/p&gt; &lt;br /&gt;&lt;a href=&quot;http://www.johnkleijn.nl/2009/SOAP-server-in-30-seconds#extended&quot;&gt;Continue reading &quot;SOAP server in 30 seconds&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Fri, 02 Jan 2009 06:01:00 +0100</pubDate>
    <guid isPermaLink="false">http://www.johnkleijn.nl/2009/25</guid>
    <category>soap</category>

</item>
<item>
    <title>Unserialize vs Include, with APC or php://memory</title>
    <link>http://www.johnkleijn.nl/2008/Unserialize-vs-Include,-with-APC-or-phpmemory</link>
            <category>PHP</category>
    
    <comments>http://www.johnkleijn.nl/2008/Unserialize-vs-Include,-with-APC-or-phpmemory#comments</comments>
    <wfw:comment>http://www.johnkleijn.nl/wfwcomment.php?cid=24</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.johnkleijn.nl/rss.php?version=2.0&amp;type=comments&amp;cid=24</wfw:commentRss>
    

    <author>nospam@example.com (John Kleijn)</author>
    <content:encoded>
    &lt;p class=&quot;break&quot;&gt;As a follow up on my previous post, I decided it would be interesting to see what effect using the php://memory wrapper or APC would have on the results.&lt;/p&gt; &lt;br /&gt;&lt;a href=&quot;http://www.johnkleijn.nl/2008/Unserialize-vs-Include,-with-APC-or-phpmemory#extended&quot;&gt;Continue reading &quot;Unserialize vs Include, with APC or php://memory&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Sun, 07 Dec 2008 04:40:00 +0100</pubDate>
    <guid isPermaLink="false">http://www.johnkleijn.nl/2008/24</guid>
    <category>benchmarks</category>

</item>
<item>
    <title>Unserialize vs Include</title>
    <link>http://www.johnkleijn.nl/2008/Unserialize-vs-Include</link>
            <category>PHP</category>
    
    <comments>http://www.johnkleijn.nl/2008/Unserialize-vs-Include#comments</comments>
    <wfw:comment>http://www.johnkleijn.nl/wfwcomment.php?cid=23</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.johnkleijn.nl/rss.php?version=2.0&amp;type=comments&amp;cid=23</wfw:commentRss>
    

    <author>nospam@example.com (John Kleijn)</author>
    <content:encoded>
    &lt;p class=&quot;whiteline&quot;&gt;Cutting straight to chase, the results:

&lt;/p&gt;&lt;blockquote&gt;&lt;p class=&quot;break&quot;&gt; r448191@goliath:~/bench$ php bench.php 10&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;Total include: 0.000389575958252&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;Total unserialize: 0.000274181365967&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;r448191@goliath:~/bench$ php bench.php 100&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;Total include: 0.0033860206604&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;Total unserialize: 0.00247645378113&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;r448191@goliath:~/bench$ php bench.php 1000&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;Total include: 0.0342044830322&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;Total unserialize: 0.0263719558716&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;r448191@goliath:~/bench$ php bench.php 10000&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;Total include: 0.32866358757&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;Total unserialize: 0.25150680542&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;r448191@goliath:~/bench$ php bench.php 100000&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;Total include: 3.23683238029&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;Total unserialize: 2.56990027428&lt;/p&gt;&lt;/blockquote&gt; &lt;br /&gt;&lt;a href=&quot;http://www.johnkleijn.nl/2008/Unserialize-vs-Include#extended&quot;&gt;Continue reading &quot;Unserialize vs Include&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Sun, 07 Dec 2008 02:55:00 +0100</pubDate>
    <guid isPermaLink="false">http://www.johnkleijn.nl/2008/23</guid>
    <category>benchmarks</category>

</item>
<item>
    <title>Zend Framework 1.7: Zend_Db_Table still sucks</title>
    <link>http://www.johnkleijn.nl/2008/Zend-Framework-1.7-Zend_Db_Table-still-sucks</link>
            <category>Zend Framework</category>
    
    <comments>http://www.johnkleijn.nl/2008/Zend-Framework-1.7-Zend_Db_Table-still-sucks#comments</comments>
    <wfw:comment>http://www.johnkleijn.nl/wfwcomment.php?cid=22</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://www.johnkleijn.nl/rss.php?version=2.0&amp;type=comments&amp;cid=22</wfw:commentRss>
    

    <author>nospam@example.com (John Kleijn)</author>
    <content:encoded>
    &lt;p class=&quot;break&quot;&gt;Zend Framework is now at version 1.7, adding better internationalization support, and supporting the Dijit Editor Widget. Ok, better internationalization support can only be good (since it was already more than decent), but the Editor Dijit should have been in 1.6. I gave the Dojo support in 1.6 a test drive when it was first released, only to find that it was mostly useless. Hopefully that has changed, I haven&#039;t tried it yet.&lt;/p&gt; &lt;br /&gt;&lt;a href=&quot;http://www.johnkleijn.nl/2008/Zend-Framework-1.7-Zend_Db_Table-still-sucks#extended&quot;&gt;Continue reading &quot;Zend Framework 1.7: Zend_Db_Table still sucks&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Sun, 30 Nov 2008 14:18:00 +0100</pubDate>
    <guid isPermaLink="false">http://www.johnkleijn.nl/2008/22</guid>
    <category>orm</category>
<category>zend framework</category>
<category>zend_db_table</category>

</item>
<item>
    <title>Design Patterns on PHPFreaks.com</title>
    <link>http://www.johnkleijn.nl/2008/Design-Patterns-on-PHPFreaks.com</link>
            <category>PHP</category>
    
    <comments>http://www.johnkleijn.nl/2008/Design-Patterns-on-PHPFreaks.com#comments</comments>
    <wfw:comment>http://www.johnkleijn.nl/wfwcomment.php?cid=21</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.johnkleijn.nl/rss.php?version=2.0&amp;type=comments&amp;cid=21</wfw:commentRss>
    

    <author>nospam@example.com (John Kleijn)</author>
    <content:encoded>
    &lt;p class=&quot;whiteline&quot;&gt;Putting it off for forever, I have finally &lt;a href=&quot;http://www.phpfreaks.com/profile/448191&quot;&gt;started writing&lt;/a&gt; about Design Patterns on the PHPFreaks.com site. Originally, I was planing on creating a single tutorial on all common patterns. The magnitude of task is why I kept putting it off.
&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;Instead, I am now covering one or two patterns at the time, making for byte sized chucks for reader and writer.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Thu, 09 Oct 2008 16:07:00 +0200</pubDate>
    <guid isPermaLink="false">http://www.johnkleijn.nl/2008/21</guid>
    <category>design patterns</category>
<category>phpfreaks</category>

</item>
<item>
    <title>Zend Framework Transform View</title>
    <link>http://www.johnkleijn.nl/2008/Zend-Framework-Transform-View</link>
            <category>Zend Framework</category>
    
    <comments>http://www.johnkleijn.nl/2008/Zend-Framework-Transform-View#comments</comments>
    <wfw:comment>http://www.johnkleijn.nl/wfwcomment.php?cid=15</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.johnkleijn.nl/rss.php?version=2.0&amp;type=comments&amp;cid=15</wfw:commentRss>
    

    <author>nospam@example.com (John Kleijn)</author>
    <content:encoded>
    &lt;p class=&quot;break&quot;&gt;I implemented Transform View (XSLT) for Zend Framework. It&#039;s a relatively basic class that allows layout templates and calling Zend Framework View Helpers from XSL templates. Read on to view the class and some basic explanation.&lt;/p&gt; &lt;br /&gt;&lt;a href=&quot;http://www.johnkleijn.nl/2008/Zend-Framework-Transform-View#extended&quot;&gt;Continue reading &quot;Zend Framework Transform View&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Wed, 30 Jul 2008 15:43:00 +0200</pubDate>
    <guid isPermaLink="false">http://www.johnkleijn.nl/2008/15</guid>
    
</item>
<item>
    <title>OO PHP Tutorials</title>
    <link>http://www.johnkleijn.nl/2008/OO-PHP-Tutorials</link>
            <category>PHP</category>
    
    <comments>http://www.johnkleijn.nl/2008/OO-PHP-Tutorials#comments</comments>
    <wfw:comment>http://www.johnkleijn.nl/wfwcomment.php?cid=19</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.johnkleijn.nl/rss.php?version=2.0&amp;type=comments&amp;cid=19</wfw:commentRss>
    

    <author>nospam@example.com (John Kleijn)</author>
    <content:encoded>
    &lt;p class=&quot;whiteline&quot;&gt;On my blog I assume the reader to be eloquent in OO PHP. Knowing very well this isn&#039;t the case for 70%+ of the PHP developers out there, I&#039;ve started a series of tutorials on PHPFreaks.com that will give you the grand tour of OO in PHP.
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;Part 1 is an overview of what features PHP has to offer in respect to OOP.
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;&lt;a href=&quot;http://www.phpfreaks.com/tutorial/oo-php-part-1-oop-in-full-effect&quot;&gt;http://www.phpfreaks.com/tutorial/oo-php-part-1-oop-in-full-effect&lt;/a&gt;
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;Part 2 is an introduction to some OO principles and practices.
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;&lt;a href=&quot;http://www.phpfreaks.com/tutorial/oo-php-part-2-boring-oo-principles&quot;&gt;http://www.phpfreaks.com/tutorial/oo-php-part-2-boring-oo-principles&lt;/a&gt;
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;Part 3 is an introduction to UML Class Diagrams and class relations
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;&lt;a href=&quot;http://www.phpfreaks.com/tutorial/oo-php-part-3-uml-classes-and-relations&quot;&gt;http://www.phpfreaks.com/tutorial/oo-php-part-3-uml-classes-and-relations&lt;/a&gt;
&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;More parts to come.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sat, 07 Jun 2008 08:21:00 +0200</pubDate>
    <guid isPermaLink="false">http://www.johnkleijn.nl/2008/19</guid>
    
</item>
<item>
    <title>A Composite Command Chain</title>
    <link>http://www.johnkleijn.nl/2008/A-Composite-Command-Chain</link>
            <category>PHP</category>
    
    <comments>http://www.johnkleijn.nl/2008/A-Composite-Command-Chain#comments</comments>
    <wfw:comment>http://www.johnkleijn.nl/wfwcomment.php?cid=18</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.johnkleijn.nl/rss.php?version=2.0&amp;type=comments&amp;cid=18</wfw:commentRss>
    

    <author>nospam@example.com (John Kleijn)</author>
    <content:encoded>
    &lt;p class=&quot;whiteline&quot;&gt;My idea of fun is to combine existing patterns, producing a solution to more specialized problem than the original pattern specifications individually. I should probably get out more.
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;In this case, I was faced with the following problem: how to create a flexible, complex and multi-dimensional chain of Command Objects (a chain of commands and subcommands), that was executable top down over and over, without re-executing the same command twice for that chain. Operations should block the execution of their children on failure to complete. Children should be executed serial, and isolated from each others potential failure.
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;When faced with creating complex relations between objects of the same type, with operations to be executed on the underlying structure transparently, the Composite pattern can usually save the day. I created a mechanism to create a composite structure of any implementation of an abstract Command Object class.
&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;Because I implemented Composite, I already had a mechanism to execute a Command and it&#039;s descendants in the order required.&lt;/p&gt; &lt;br /&gt;&lt;a href=&quot;http://www.johnkleijn.nl/2008/A-Composite-Command-Chain#extended&quot;&gt;Continue reading &quot;A Composite Command Chain&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Tue, 27 May 2008 18:36:37 +0200</pubDate>
    <guid isPermaLink="false">http://www.johnkleijn.nl/2008/18</guid>
    
</item>

</channel>
</rss>
