<?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</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>Mon, 21 Mar 2011 23:44:24 GMT</pubDate>

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

<item>
    <title>Back from Calgary</title>
    <link>http://www.johnkleijn.nl/2011/Back-from-Calgary</link>
            <category>Personal</category>
    
    <comments>http://www.johnkleijn.nl/2011/Back-from-Calgary#comments</comments>
    <wfw:comment>http://www.johnkleijn.nl/wfwcomment.php?cid=43</wfw:comment>

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

    <author>nospam@example.com (John Kleijn)</author>
    <content:encoded>
    &lt;p class=&quot;whiteline&quot;&gt;Last week I was in Calgary (Canada) for a few days to meet some of the people I have been doing business with remotely for a few years now. Despite my throat infection and horrible cough, I had a great time.
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;Many thanks to Mark Lall and his wife, Christopher Staley and David Nagy &lt;img src=&quot;http://www.johnkleijn.nl/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 class=&quot;break&quot;&gt;&lt;img src=&quot;http://www.johnkleijn.nl/images/bannf.JPG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt; 
    </content:encoded>

    <pubDate>Tue, 22 Mar 2011 00:44:24 +0100</pubDate>
    <guid isPermaLink="false">http://www.johnkleijn.nl/2011/43</guid>
    
</item>
<item>
    <title>ExtJS RecordFormPanel</title>
    <link>http://www.johnkleijn.nl/2010/ExtJS-RecordFormPanel</link>
            <category>JavaScript</category>
    
    <comments>http://www.johnkleijn.nl/2010/ExtJS-RecordFormPanel#comments</comments>
    <wfw:comment>http://www.johnkleijn.nl/wfwcomment.php?cid=42</wfw:comment>

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

    <author>nospam@example.com (John Kleijn)</author>
    <content:encoded>
    &lt;p class=&quot;whiteline&quot;&gt;Say you have a an overview component, like a grid, and you need to edit that. The best approach would be to load the record into the form and invoke BasicForm&#039;s &quot;loadRecord&quot;. This means you&#039;ll be using the Store for persistence though, and BasicForm.submit() no longer does the trick. Especially when creating new records, directly inserting that into the store a grid uses is extra useful. It means the grid wont have to reload it&#039;s data from the server and immediately shows the inserted record.
&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;The solution is creating a form type that loads records and uses a store for persistence. This is relatively simple and seems like this functionality should be available in the Ext library. In any case, below is my implementation.&lt;/p&gt; &lt;br /&gt;&lt;a href=&quot;http://www.johnkleijn.nl/2010/ExtJS-RecordFormPanel#extended&quot;&gt;Continue reading &quot;ExtJS RecordFormPanel&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Wed, 29 Dec 2010 12:39:50 +0100</pubDate>
    <guid isPermaLink="false">http://www.johnkleijn.nl/2010/42</guid>
    <category>extjs</category>
<category>javascript</category>

</item>
<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>Where's all the good HipHop?</title>
    <link>http://www.johnkleijn.nl/2010/Wheres-all-the-good-HipHop</link>
            <category>Personal</category>
    
    <comments>http://www.johnkleijn.nl/2010/Wheres-all-the-good-HipHop#comments</comments>
    <wfw:comment>http://www.johnkleijn.nl/wfwcomment.php?cid=40</wfw:comment>

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

    <author>nospam@example.com (John Kleijn)</author>
    <content:encoded>
    &lt;p class=&quot;whiteline&quot;&gt;Working late, yet again, I often have a news/current events program running on one of my 3 monitors. Today I had to listen to some elitist guys praise the last Kanye West album as &quot;one of the best Hip Hop albums ever made&quot;.
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;Please. Kanye West is of Puff Daddy/Diddy whatever caliber: he sucks. I&#039;d even go as far as saying that kind of stuff is not even Hip Hop.
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;A few months ago (better late than never) though I discovered a new combination that is stepping up to represent the real hardcore Hip Hop, Hip Hop as it&#039;s meant to be: La Coka Nostra. From the Soul Assassins network, you can expect little less than excellence. And La Coka delivers.

&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;&lt;object width=&quot;640&quot; height=&quot;385&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/53GrVNFArHQ?fs=1&amp;amp;hl=en_US&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/53GrVNFArHQ?fs=1&amp;amp;hl=en_US&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;640&quot; height=&quot;385&quot;&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;La Coka, of course, isn&#039;t perfect. It&#039;s lyricists consist of Slaine, Ill Bill and Everlast. Slaine&#039;s an excellent lyricist, though he seems a bit off sometimes. Everlast at times seems out of time: the style that suited him well in the House of Pain seems out of place at times. But other times he shows the type of skill that validate his position as an all time classic. And then there&#039;s Ill Bill. Well, I have no comment on Ill Bill, that guy is just plain awesome. In the above clip you&#039;ll also see B-Real, Cypress Hill front man and Soul Assassins catalyst, it would be ridiculous to review his skills.
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;&lt;em&gt;On a serious note:&lt;/em&gt;
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;Someone on that program explicitly praised the accessibility of Kanye West&#039;s work. That&#039;s not the right reason to praise an album. I don&#039;t like classical music, if I praise someone for making classical more accessible all I&#039;m really saying is &quot;this didn&#039;t suck as much&quot;. Or is Beethoven praised for the accessibility of classical music that his familiar tunes provide? 
&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;Where&#039;s all the good Hip Hop?&lt;/p&gt; 
    </content:encoded>

    <pubDate>Fri, 26 Nov 2010 22:21:12 +0100</pubDate>
    <guid isPermaLink="false">http://www.johnkleijn.nl/2010/40</guid>
    
</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>Why you can't (or shouldn't) unserialize exceptions</title>
    <link>http://www.johnkleijn.nl/2010/Why-you-cant-or-shouldnt-unserialize-exceptions</link>
            <category>TDD</category>
    
    <comments>http://www.johnkleijn.nl/2010/Why-you-cant-or-shouldnt-unserialize-exceptions#comments</comments>
    <wfw:comment>http://www.johnkleijn.nl/wfwcomment.php?cid=32</wfw:comment>

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

    <author>nospam@example.com (John Kleijn)</author>
    <content:encoded>
    &lt;p class=&quot;whiteline&quot;&gt;Sorry for not posting much, I&#039;m insanely busy, but I can squeeze in a quick post. I already lost lots of time on the topic of this post, so I might as well take 10 minutes more and explain.
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;I develop using TDD, using PHPUnit. I (usually) use Zend Framework in combination with Doctrine. To be a 100% sure tests are completely isolated, PHPUnit has a nice feature called &quot;Process Isolation&quot;, which means as much as that every test is run in its own environment. To get the result of the test into the main environment, PHPUnit serializes and unserializes the &quot;test result&quot; object. Which is fine, I couldn&#039;t think of another way to do it.
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;But, this test result object may include failures, in which case the exception(s) are attached. Which is a problem. A few lines of code is worth a thousand words, so here you go:
&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;jkleijn@goliath:~$ php -a&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;Interactive shell
&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;php &gt; class Argument { function __wakeup() { throw new LogicException; }}&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;php &gt; class Subject { function fail($argument){ throw new InvalidArgumentException; }}&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;php &gt; try { $s = new Subject; $s-&gt;fail(new Argument); } catch(Exception $e) { unserialize(serialize($e)); }&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;PHP Warning:  Uncaught exception &#039;LogicException&#039; in php shell code:1&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;Stack trace:&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;#0 [internal function]: Argument-&gt;__wakeup()&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;#1 php shell code(1): unserialize(&#039;O:24:&quot;InvalidAr...&#039;)&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;#2 {main}&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;  thrown in php shell code on line 1&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;php &gt; 
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;As you can see, unserializing the exception triggers the __wakeup() method in the argument that was passed to the failing method. The problem with that is that an Exception object in PHP includes a full backtrace, which, amongst other things, includes arguments to function or method calls. No issue if the arguments are scalar values or a simple array, but an object may not like being serialized, per se.
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;Such is the case with Doctrine_Record and Doctrine_Collection objects. They can be unserialized, but require that a database connection has been made first, or they will throw: Uncaught exception &#039;Doctrine_Connection_Exception&#039; with message &#039;There is no open connection&#039;. Which obviously is not a precondition one would want to have for running test cases. It kinda defeats having test isolation in the first place.
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;The good news is that this is only an issue if a test fails, so as long as your test passes, you&#039;re fine. The bad news is that in order to find out WHY your test failed, you have to hack a file dump of the serialized test result, to find the exception message and origin. Which is a nuisance at best.
&lt;/p&gt; 
    </content:encoded>

    <pubDate>Fri, 07 May 2010 12:52:07 +0200</pubDate>
    <guid isPermaLink="false">http://www.johnkleijn.nl/2010/32</guid>
    <category>exceptions</category>
<category>phpunit</category>
<category>test isolation</category>

</item>
<item>
    <title>Google not indexing my blog</title>
    <link>http://www.johnkleijn.nl/2010/Google-not-indexing-my-blog</link>
            <category>Personal</category>
    
    <comments>http://www.johnkleijn.nl/2010/Google-not-indexing-my-blog#comments</comments>
    <wfw:comment>http://www.johnkleijn.nl/wfwcomment.php?cid=31</wfw:comment>

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

    <author>nospam@example.com (John Kleijn)</author>
    <content:encoded>
    &lt;p class=&quot;break&quot;&gt;If you are reading this, you probably kept my old feed in your RSS reader. Using Google Webmaster Tools, I got reminded that people actually subscribed to that. Right now, you lucky (ha!) few are the only ones reading my blog, the greater Internet is being deprived of the privilege because Google is not indexing it. For example search &quot;john kleijn closures&quot;, you&#039;ll get Eli White&#039;s blog because Serendipity created a trackback for it, instead of my own post about closures. Search simply &quot;John Kleijn&quot; and you&#039;ll get my company website, some other links such as my PHPFreaks.com profile, and also some other guy called John Kleijn twice my age (okay, 1.5 times -- I&#039;m getting old).&lt;/p&gt; &lt;br /&gt;&lt;a href=&quot;http://www.johnkleijn.nl/2010/Google-not-indexing-my-blog#extended&quot;&gt;Continue reading &quot;Google not indexing my blog&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Mon, 29 Mar 2010 15:45:04 +0200</pubDate>
    <guid isPermaLink="false">http://www.johnkleijn.nl/2010/31</guid>
    <category>blog</category>
<category>google</category>
<category>monopoly</category>

</item>
<item>
    <title>NetBeans is TDD unfriendly!</title>
    <link>http://www.johnkleijn.nl/2010/NetBeans-is-TDD-unfriendly!</link>
            <category>TDD</category>
    
    <comments>http://www.johnkleijn.nl/2010/NetBeans-is-TDD-unfriendly!#comments</comments>
    <wfw:comment>http://www.johnkleijn.nl/wfwcomment.php?cid=30</wfw:comment>

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

    <author>nospam@example.com (John Kleijn)</author>
    <content:encoded>
    &lt;p class=&quot;break&quot;&gt;I am getting soo tired of Zend Studio for Eclipse. On large projects, or rather projects with large libs (e.g. Zend Framework and Doctrine) code suggest and &quot;building&quot; is just too slow. It is since about a month impossible to blame hardware imitations either. &lt;/p&gt; &lt;br /&gt;&lt;a href=&quot;http://www.johnkleijn.nl/2010/NetBeans-is-TDD-unfriendly!#extended&quot;&gt;Continue reading &quot;NetBeans is TDD unfriendly!&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Mon, 29 Mar 2010 12:18:16 +0200</pubDate>
    <guid isPermaLink="false">http://www.johnkleijn.nl/2010/30</guid>
    <category>ide</category>
<category>netbeans</category>
<category>phpunit</category>
<category>tdd</category>
<category>zend studio</category>

</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>Bad poetry</title>
    <link>http://www.johnkleijn.nl/2010/Bad-poetry</link>
            <category>Personal</category>
    
    <comments>http://www.johnkleijn.nl/2010/Bad-poetry#comments</comments>
    <wfw:comment>http://www.johnkleijn.nl/wfwcomment.php?cid=1</wfw:comment>

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

    <author>nospam@example.com (John Kleijn)</author>
    <content:encoded>
    &lt;p class=&quot;break&quot;&gt;I tried my hand at poetry. It&#039;s deep, philosophical, it is the best poetry ever. Actually it is probably as good as my skills on the guitar.&lt;/p&gt; &lt;br /&gt;&lt;a href=&quot;http://www.johnkleijn.nl/2010/Bad-poetry#extended&quot;&gt;Continue reading &quot;Bad poetry&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Wed, 24 Mar 2010 12:39:00 +0100</pubDate>
    <guid isPermaLink="false">http://www.johnkleijn.nl/2010/1</guid>
    <category>poetry</category>

</item>
<item>
    <title>Simple htpasswd for Hudson CI using PHP</title>
    <link>http://www.johnkleijn.nl/2010/Simple-htpasswd-for-Hudson-CI-using-PHP</link>
            <category>CI</category>
    
    <comments>http://www.johnkleijn.nl/2010/Simple-htpasswd-for-Hudson-CI-using-PHP#comments</comments>
    <wfw:comment>http://www.johnkleijn.nl/wfwcomment.php?cid=7</wfw:comment>

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

    <author>nospam@example.com (John Kleijn)</author>
    <content:encoded>
    &lt;p class=&quot;whiteline&quot;&gt;My development server hosts Trac instances, SVN repos, and private testing/staging websites/applications. All of these use one htpasswd file with users and passwords in it.
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;But the build server, using Hudson, doesn&#039;t natively support that. Here&#039;s how you can have Hudson check a standard htpasswd file, and have project based security so one client or subcontractor wont mess with the builds of a project they are not involved in.
&lt;/p&gt; &lt;br /&gt;&lt;a href=&quot;http://www.johnkleijn.nl/2010/Simple-htpasswd-for-Hudson-CI-using-PHP#extended&quot;&gt;Continue reading &quot;Simple htpasswd for Hudson CI using PHP&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Wed, 24 Mar 2010 11:27:59 +0100</pubDate>
    <guid isPermaLink="false">http://www.johnkleijn.nl/2010/7</guid>
    <category>continuous integration</category>
<category>hudson</category>
<category>project management</category>

</item>
<item>
    <title>Learning to play the guitar</title>
    <link>http://www.johnkleijn.nl/2010/Learning-to-play-the-guitar</link>
            <category>Personal</category>
    
    <comments>http://www.johnkleijn.nl/2010/Learning-to-play-the-guitar#comments</comments>
    <wfw:comment>http://www.johnkleijn.nl/wfwcomment.php?cid=6</wfw:comment>

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

    <author>nospam@example.com (John Kleijn)</author>
    <content:encoded>
    &lt;p class=&quot;whiteline&quot;&gt;&lt;img src=&quot;http://www.johnkleijn.nl/images/guitar_hero_pocket.jpg&quot; alt=&quot;&quot; /&gt;
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;That&#039;s right, I decided to join Jimmy Hendrix and.. Some other guys who were pretty good? As soon as I can play anything with more than an E and A minor, maybe I can play some Staind or System of a Down at your wedding (or funeral, same game). But seriously, I&#039;ll record something sometime so the Internet can have a little fun at my expense.
&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;(The Stratocaster was &quot;borrowed&quot; from http://technabob.com/ btw).&lt;/p&gt; 
    </content:encoded>

    <pubDate>Wed, 24 Mar 2010 11:12:24 +0100</pubDate>
    <guid isPermaLink="false">http://www.johnkleijn.nl/2010/6</guid>
    <category>guitar</category>

</item>
<item>
    <title>Mandatory Hello World </title>
    <link>http://www.johnkleijn.nl/2010/Mandatory-Hello-World</link>
            <category>Personal</category>
    
    <comments>http://www.johnkleijn.nl/2010/Mandatory-Hello-World#comments</comments>
    <wfw:comment>http://www.johnkleijn.nl/wfwcomment.php?cid=5</wfw:comment>

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

    <author>nospam@example.com (John Kleijn)</author>
    <content:encoded>
    &lt;p class=&quot;whiteline&quot;&gt;Hello World,
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;After I stopped blogging at johnkleijn.nl about a year ago, I recently decided I wanted to start again. While johnkleijn.nl was purely about Web Development, this time I want to get other thoughts off my mind as well. I&#039;m also going to try to write a little more often than once a month, it&#039;s not like I don&#039;t have a ton of incredibly interesting things to say, even if no one really cares about half of it.
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;When I write something that makes you want to hire me for PHP or JS development, go over to my &lt;a href=&quot;http://www.kleijnweb.nl&quot; title=&quot;Kleijn Web Development&quot;&gt;company website&lt;/a&gt;. But this is also a personal blog, with opinions, bad and poor humor and stuff. When I write something that makes you want to pull my head through your monitor by my (fairly large) ears, troll about it in the comments.
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;I&#039;ll import some of the old posts, not sure if it&#039;s worth the trouble. If you visited my old blog and want a specific old post back, comment below.
&lt;/p&gt;&lt;p class=&quot;whiteline&quot;&gt;I may also become active on Twitter, Facebook and LinkedIn, who knows. Before long, you could find yourself reading more John Kleijn than you can stomach.
&lt;/p&gt;&lt;p class=&quot;break&quot;&gt;John Kleijn.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Wed, 24 Mar 2010 10:40:33 +0100</pubDate>
    <guid isPermaLink="false">http://www.johnkleijn.nl/2010/5</guid>
    
</item>

</channel>
</rss>
