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

<channel>
	<title>Jansch.nl &#187; PHP</title>
	<atom:link href="http://www.jansch.nl/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jansch.nl</link>
	<description>Just another WordPress site</description>
	<lastBuildDate>Sun, 31 Jul 2011 14:58:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Saying goodbye to Ibuildings to found Egeniq</title>
		<link>http://www.jansch.nl/2010/08/12/saying-goodbye-to-ibuildings-to-found-egeniq/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=saying-goodbye-to-ibuildings-to-found-egeniq</link>
		<comments>http://www.jansch.nl/2010/08/12/saying-goodbye-to-ibuildings-to-found-egeniq/#comments</comments>
		<pubDate>Thu, 12 Aug 2010 13:31:29 +0000</pubDate>
		<dc:creator>Ivo</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[career]]></category>
		<category><![CDATA[egeniq]]></category>
		<category><![CDATA[ibuildings]]></category>
		<category><![CDATA[job]]></category>

		<guid isPermaLink="false">http://www.jansch.nl/?p=3463</guid>
		<description><![CDATA[I've moved on from my CTO position at Ibuildings to found Egeniq. This post contains the details.]]></description>
			<content:encoded><![CDATA[<p>Those who pay attention to my occasional seemingly random tweets may have noticed <a href="http://twitter.com/ijansch/statuses/10574686656">this tweet</a>, back in March. It's the first line of the Bob Dylan song <i>"Times they are a'changin"</i>, and it marked the start of a long thought process. I had a '10 year itch': I was at <a href="http://ibuildings.com">Ibuildings</a> since january 2000, back then a 5 person web development shop in the south of the Netherlands, and over the years I had helped Ibuildings grow into a 110+ people PHP service company with 5 offices in 3 countries. Very proud of what Ibuildings had become and my own role in the company, I had a growing feeling of 'what next?'.</p>
<p>In my enterprise PHP book I mentioned 5 major goals I wanted to accomplish in life: one of them is to found and build a company of my own. And although Ibuildings has always felt a bit mine, that's not the same. So I slowly started thinking about starting from scratch and building a new awesome company. Over the course of the next few months I searched for reasons to leave and reasons to stay, but eventually I knew that in my heart I had already made the decision in March, and all I was doing was finding reasons to validate that choice. There's a saying that in the end, you'll only regret the things you DIDN'T do, so finally I made the decision to go for it.<br />
<span id="more-3463"></span><br />
What am I going to do? I'm going to found <a href="http://egeniq.com">Egeniq</a>, a company centered around a number of mobile products, concepts and related services. Over the course of the next few weeks it will become more clear what exactly we will be doing, but in short it's doing cool stuff with iphones, ipads and android devices (and whatever device makes sense). I've found partners in crime: <a href="http://twitter.com/basthoen">Bas</a> is going to look after the commercial side of the business, and I'm going to look after the technical side together with a person that I've known and trusted for years (but it will take a couple more weeks before this person's able to announce it).</p>
<p>So far I've been a member of the PHP community; will this change when I am working with mobile devices? No, on the contrary! I'm both proud and happy to be part of this community, and you can bet that the products we will be developing will have loads of PHP in them (for backends, apis, webservices and the occasional web frontend). I'm still speaking at Zendcon in November, have a new book coming out soon and I hope that Egeniq will be able to contribute to a couple of open source projects. </p>
<p>I'm very thrilled to finally have this out in the open. I have very supportive friends and family, but I'm still both excited and scared at the same time; I'm giving up a great career for a lot of unknowns, and this may very well be one of the most important decisions I've made in my life so far. So any words of wisdom, encouragement or just plain 'you are stupid for doing this' feedback is more than welcome!</p>
<p>And to start plugging my new company right away: send all your ideas, project requests and CVs to ivo at egeniq dot com. <img src='http://www.jansch.nl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>I will be with Ibuildings until the end of September, mainly to hand over my responsibilities and make sure that we part ways smoothly. My job at Ibuildings has been amazing and I'd like to thank everybody I worked with, every client I worked for and everybody at Ibuildings for a great time. This is not the end, it's a new beginning. A beginning I'm very much looking forward to!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jansch.nl/2010/08/12/saying-goodbye-to-ibuildings-to-found-egeniq/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>Good use of public, private and protected in OO class design</title>
		<link>http://www.jansch.nl/2010/07/19/good-use-of-public-private-and-protected-in-oo-class-design/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=good-use-of-public-private-and-protected-in-oo-class-design</link>
		<comments>http://www.jansch.nl/2010/07/19/good-use-of-public-private-and-protected-in-oo-class-design/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 07:21:12 +0000</pubDate>
		<dc:creator>Ivo</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[class design]]></category>
		<category><![CDATA[oo]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://www.jansch.nl/?p=3261</guid>
		<description><![CDATA[It's been a while since my last post. My blog pattern these days is that I write a blog post when I have an opinion that doesn't fit in a tweet. There's been a debate in the PHP community about the use of public, private and protected. Apparently the Symfony project has decided that private [...]]]></description>
			<content:encoded><![CDATA[<p>It's been a while since my last post. My blog pattern these days is that I write a blog post when I have an opinion that doesn't fit in a tweet. <img src='http://www.jansch.nl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>There's been a debate in the PHP community about the use of public, private and protected. Apparently the Symfony project has decided that private is Evil, and should not be used. I don't care much about Symfony as I'm not a user, but it turned to a discussion on OO theory when Stefan <a href="http://www.leftontheweb.com/message/My_privates_are_not_public_they_are_protected">defended the position</a> by claiming that you 'should have the right to extend a class's methods if it doesn't support the use case you have'.</p>
<p>On Twitter, things got worse. Marco Tabini <a href="http://twitter.com/mtabini/status/18867470296">mentioned private has no role in open source code</a> insinuating that it's about who can read the code and Travis Swicegood mentioned that <a href="http://twitter.com/tswicegood/status/18864493405">protected code indicates code that is in the wrong place</a> and later <a href="http://twitter.com/tswicegood/status/18867087606">that it prevents unit testing because it creates un-testable units of code</a>.<br />
<span id="more-3261"></span><br />
Before I answer to those claims, let me give you an example of a class that uses public, private and protected in the way they were intended.</p>
<h3>The Account class</h3>
<pre class="php">&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Account
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> depositFunds<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$amount</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        <span style="color: #0000ff;">$this</span>-&gt;_updateBalance<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$this</span>-&gt;<span style="color: #006600;">currentBalance</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>+<span style="color: #0000ff;">$amount</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    protected <span style="color: #000000; font-weight: bold;">function</span> _updateBalance<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$newbalance</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
&nbsp;
        <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$this</span>-&gt;<span style="color: #006600;">validate</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$newbalance</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
&nbsp;
            <span style="color: #0000ff;">$this</span>-&gt;__updateRecord<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$newbalance</span><span style="color: #66cc66;">&#41;</span>;
            <span style="color: #0000ff;">$this</span>-&gt;__publishAccountUpdatedEvent<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #66cc66;">&#125;</span>
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> __updateRecord<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$newbalance</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        <span style="color: #0000ff;">$this</span>-&gt;<span style="color: #006600;">getModel</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>-&gt;<span style="color: #006600;">store</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$newbalance</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    ....
<span style="color: #66cc66;">&#125;</span>
&nbsp;</pre>
<p>As the designer of this class, I have the following considerations:</p>
<ul>
<li>Somebody that uses my class in an application will need to be able to withdraw and deposit funds. This is the only feature I offer to my class users; it is my class's responsibility to take care of handling the withdrawal and deposits.</p>
<li>Derived Account classes (which will follow the 'is a' scenario of inheritance and thus will probably be special types of accounts, such as savings accounts) should be able to withdraw and deposit, but can also call _updateBalance to update the balance directly. This is something I trust derived classes with.
<li>The actual act of updating the underlying model is my responsibility and my responsibility alone. This method is private because I do not want other classes to call this function directly. The only way to call __updateRecord is through the protected _updateBalance call. This way I ensure that there's always validation and that notifications get send out. This makes my application more robust because the things that need to happen, will happen. I trust derived classes to update the balance, but the trust goes only so far; the actual act of updating the underlying model is my responsibility.
</ul>
<p>This process is called 'encapsulation'.</p>
<h3>Looking back at the arguments</h3>
<p>Now let's look again at the arguments.</p>
<ul>
<li>Stefan says that he needs to be able to override things if they don't support his use case. The above class is designed to support a variety of use cases, through the interface it offers to users and inheritors. Generally a use case is defined by the public methods a class offers, and that should be sufficient. If not, the class may have been designed poorly. Inheritors can change the use case slightly, but only to the extent that they do not endanger the overall robustness of the application.</p>
<li>Marco says that private has no use in open source projects. The above example could be part of an open source project. The decision to make a method private had nothing to do with the fact that others could read the code, nor did it have anything to do with the fact that the code cannot be changed. If this is an open source package and you want to change it because in your world you do want unvalidated account updates, you can simply download the code, change the code and be happy.
<li>Travis claims that 'protected' signifies code that is in the wrong place. On the contrary, in my example I've used protected and private deliberately to design class responsibility.
<li>Travis also says that it is a problem for unit testing because it creates an untestable unit. I would argue that in this case, the 'unit' is the account and its public interface. A unit test should use only the public interface which is sufficient to verify whether or not the class is doing the right things, and whether it's doing those things right. If the class contains so much code that you need unit tests that test the smaller internal functions of the class, you may be looking at a class that has too much responsibilities and that should be split up.</ul>
<p>The arguments seem to be mostly about what you can <em>derive</em> but the number 1 use case of access specifiers is defining what you can <em>call</em>. In my opinion, preventing people from using private to make deriving easier at the expense of no longer being able to specify who can call what and define class responsibilities, is wrong. In most cases where this is a problem, the actual problem is poor class design.</p>
<p>There are of course numerous situations where the designer of a class has made the wrong decision and made a method private that should've been protected. In such scenario's, changing it and contributing a patch seems the right thing to do. However removing the use of private from a project entirely because some can't handle the difference, seems very wrong.</p>
<h3>Other languages</h3>
<p>PHP is not the first language to support private, public and protected. Other languages have seen similar debates, with more or less the same underlying principles. Ruby has built in ways to circumvent private/protected/public so functions can be unit tested. C++ is the most advanced when it comes to OO design. It supports 'private inheritance' and 'protected inheritance'. See <a href="http://www.parashift.com/c++-faq-lite/private-inheritance.html#faq-24.1">here for examples</a>. Also it supports a 'friend' feature that allows a class to define 'friends' that can access their private members. If classes befriend their unit tests, then unit tests can access private functions.</p>
<p>PHP doesn't have a 'friends' feature (I nearly said 'PHP doesn't have friends' which does sound funnier but is not what I meant <img src='http://www.jansch.nl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ) nor does it have ways to circumvent the access specifiers for unit tests. That doesn't make the concept of private and protected any less useful though.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jansch.nl/2010/07/19/good-use-of-public-private-and-protected-in-oo-class-design/feed/</wfw:commentRss>
		<slash:comments>34</slash:comments>
		</item>
		<item>
		<title>PHP as a template language</title>
		<link>http://www.jansch.nl/2010/02/11/php-as-a-template-language/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=php-as-a-template-language</link>
		<comments>http://www.jansch.nl/2010/02/11/php-as-a-template-language/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 16:38:36 +0000</pubDate>
		<dc:creator>Ivo</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[smarty]]></category>
		<category><![CDATA[templates]]></category>
		<category><![CDATA[templating]]></category>

		<guid isPermaLink="false">http://www.jansch.nl/?p=2441</guid>
		<description><![CDATA[It's been a while since I blogged, but I just ran into another zealot pointing me to NoSmarty.net when I mentioned templating. I think I've said it before. The tool you use should depend on the job you're trying to do. So to say that Smarty is wrong just because it is, does not feel [...]]]></description>
			<content:encoded><![CDATA[<p>It's been a while since I blogged, but I just ran into another zealot pointing me to <a href="http://nosmarty.net">NoSmarty.net</a> when I mentioned templating.</p>
<p>I think I've said it before. The tool you use should depend on the job you're trying to do. So to say that Smarty is wrong just because it is, does not feel right.</p>
<p>I agree that in many cases PHP can be used as a template language just fine, but there are situations where a Smarty template (or any other templating engine) is just that more pleasant.</p>
<p>Here's a bit of template code that I encountered yesterday. Its use of php as a template language is hideous. Because it's a template for an xml message and because it needs to cope with systems with short open tags on and off, it looks like this:<br />
<span id="more-2441"></span></p>
<pre class="php">&nbsp;
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <a href="http://www.php.net/echo"><span style="color: #000066;">echo</span></a> <span style="color: #ff0000;">'&lt;'</span>; <span style="color: #000000; font-weight: bold;">?&gt;</span>?xml version=<span style="color: #ff0000;">&quot;1.0&quot;</span> encoding=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span>
&lt;result processed=<span style="color: #ff0000;">&quot;&lt;?php echo $data[&quot;</span>processed<span style="color: #ff0000;">&quot;]?&quot;</span>yes<span style="color: #ff0000;">&quot;:&quot;</span>no<span style="color: #ff0000;">&quot;; ?&gt;&quot;</span>
       <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><a href="http://www.php.net/isset"><span style="color: #000066;">isset</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$data</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;orderid&quot;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span> ?&gt;orderId=<span style="color: #ff0000;">&quot;&lt;?php echo $data[&quot;</span>orderid<span style="color: #ff0000;">&quot;]; ?&gt;&quot;</span><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #66cc66;">&#125;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span> &gt;
       <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><a href="http://www.php.net/isset"><span style="color: #000066;">isset</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$data</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;error&quot;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span> ?&gt;&lt;error message=<span style="color: #ff0000;">&quot;&lt;?php echo $data[&quot;</span>error<span style="color: #ff0000;">&quot;]; ?&gt;&quot;</span> /&gt;&lt;?php <span style="color: #66cc66;">&#125;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
&lt;/result&gt;
&nbsp;</pre>
<p>Hideous!</p>
<p>Here's what it would look like in Smarty:</p>
<pre class="php">&nbsp;
&lt;?xml version=<span style="color: #ff0000;">&quot;1.0&quot;</span> encoding=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span>
&lt;result processed=<span style="color: #ff0000;">&quot;{if $data.processed}yes{else}no{/if}&quot;</span>
       <span style="color: #66cc66;">&#123;</span><span style="color: #b1b100;">if</span> <span style="color: #0000ff;">$data</span>.orderid<span style="color: #66cc66;">&#125;</span> orderId=<span style="color: #ff0000;">&quot;{$data.orderid}&quot;</span><span style="color: #66cc66;">&#123;</span>/<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#125;</span>&gt;
       <span style="color: #66cc66;">&#123;</span><span style="color: #b1b100;">if</span> <span style="color: #0000ff;">$data</span>.error<span style="color: #66cc66;">&#125;</span> &lt;error message=<span style="color: #ff0000;">&quot;{$data.error}&quot;</span> /&gt;<span style="color: #66cc66;">&#123;</span>/<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#125;</span>
&lt;/result&gt;
&nbsp;</pre>
<p>Yes, the first one is slightly more efficient, but the second one is actually readable for the average person.</p>
<p>Anybody claiming that &lt;?php } ?&gt; is 'just as convenient' as {/if} does not think clearly.</p>
<p>In my humble opinion, of course.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jansch.nl/2010/02/11/php-as-a-template-language/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</item>
		<item>
		<title>ZendCon 09 &#8211; Update and Slides</title>
		<link>http://www.jansch.nl/2009/10/22/zendcon-09-update-and-slides/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=zendcon-09-update-and-slides</link>
		<comments>http://www.jansch.nl/2009/10/22/zendcon-09-update-and-slides/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 00:11:49 +0000</pubDate>
		<dc:creator>Ivo</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[job queues]]></category>
		<category><![CDATA[keynote]]></category>
		<category><![CDATA[slides]]></category>
		<category><![CDATA[zend server]]></category>
		<category><![CDATA[zendcon]]></category>
		<category><![CDATA[zendcon09]]></category>

		<guid isPermaLink="false">http://www.jansch.nl/?p=2311</guid>
		<description><![CDATA[In my previous post I collected rumours about the opening keynote. Turns out none of them were right. The announcements were a beta of Zend Studio 7.1 and the beta release of Zend Server 5.0. The latter does get a step further in the enterprise direction with the addition of a Job Queue feature. I [...]]]></description>
			<content:encoded><![CDATA[<p>In my <a href="http://www.jansch.nl/2009/10/20/zendcon-09-the-rumours/">previous post</a> I collected rumours about the opening keynote. Turns out none of them were right. The announcements were a beta of Zend Studio 7.1 and the beta release of <a href="http://www.zend.com/en/products/server/zend-server-5-new">Zend Server 5.0</a>. The latter does get a step further in the enterprise direction with the addition of a Job Queue feature. I personally wasn't too impressed, Job Queues were already available in Zend Platform a year ago, and has since been overtaken by <a href="http://gearman.org/">Gearman</a> adoption. The new 'code trace' feature, which adds a kind of 'flight recorder' to PHP apps, looks very promising. Where past versions were already able to pinpoint where the problems were, this version will also give you a complete trace of every function call and parameter up to the problem. According to Andi Gutmans it performs fast enough to do that even on a production environment. I'm definitely going to check that out.</p>
<p>Today I had my own talk, "PHP and the Cloud". I had a godo 45 people in my session, which means that I owe the PHPBenelux usergroup a beer, since they showed up with 63 people for my Try-out last week. <img src='http://www.jansch.nl/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
<span id="more-2311"></span><br />
The slides for my session are <a href="http://www.slideshare.net/ijansch/php-and-the-cloud">on slideshare</a>, or you can browse them directly here:</p>
<div style="width:425px;text-align:left" id="__ss_2314588"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/ijansch/php-and-the-cloud" title="PHP and the Cloud">PHP and the Cloud</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=phpandthecloud-091021185402-phpapp01&stripped_title=php-and-the-cloud" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=phpandthecloud-091021185402-phpapp01&stripped_title=php-and-the-cloud" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">documents</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/ijansch">Ivo Jansch</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.jansch.nl/2009/10/22/zendcon-09-update-and-slides/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ZendCon 09 &#8211; The Rumours</title>
		<link>http://www.jansch.nl/2009/10/20/zendcon-09-the-rumours/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=zendcon-09-the-rumours</link>
		<comments>http://www.jansch.nl/2009/10/20/zendcon-09-the-rumours/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 15:20:31 +0000</pubDate>
		<dc:creator>Ivo</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[announcements]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[zendcon]]></category>
		<category><![CDATA[zendcon09]]></category>

		<guid isPermaLink="false">http://www.jansch.nl/?p=2271</guid>
		<description><![CDATA[In about 15 minutes, Andi Gutmans is about to kick off ZendCon 09 with his opening keynote. Yesterday during the tutorial day and this morning over breakfast, I've been polling people to see what big announcements they expect this year. "Microsoft buys Zend" and other fun but improbable announcements aside, here's a selection of what [...]]]></description>
			<content:encoded><![CDATA[<p>In about 15 minutes, Andi Gutmans is about to kick off <a href="http://zendcon.com">ZendCon 09</a> with his opening keynote. Yesterday during the tutorial day and this morning over breakfast, I've been polling people to see what big announcements they expect this year. "Microsoft buys Zend" and other fun but improbable announcements aside, here's a selection of what people think might be announced today:</p>
<ul>
<li>Zend Certification for PHP 5.3</li>
<li>Zend Framework 2.0</li>
<li>a Google AppEngine for PHP</li>
<li>Zend Studio Certification</li>
<li>Zend Server for OSX</li>
<li>Zend Server Enterprise Edition</li>
</ul>
<p>If you follow me on <a href="http://www.twitter.com/ijansch">Twitter</a>, I'll probably mention any specific announcements there realtime.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jansch.nl/2009/10/20/zendcon-09-the-rumours/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Long time no blog</title>
		<link>http://www.jansch.nl/2009/08/19/long-time-no-blog/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=long-time-no-blog</link>
		<comments>http://www.jansch.nl/2009/08/19/long-time-no-blog/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 13:02:52 +0000</pubDate>
		<dc:creator>Ivo</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[ibuildings]]></category>
		<category><![CDATA[move]]></category>

		<guid isPermaLink="false">http://www.jansch.nl/?p=2021</guid>
		<description><![CDATA[Somebody just kindly reminded me that it's been over 3 months since I last posted on my blog. Oh my. What kept me busy mostly the past months is my new home. I moved to Utrecht (which is more in the center of The Netherlands, so I can get around more easily) with Leoni, and [...]]]></description>
			<content:encoded><![CDATA[<p>Somebody just kindly reminded me that it's been over 3 months since I last posted on my blog. Oh my. </p>
<p>What kept me busy mostly the past months is my new home. I moved to Utrecht (which is more in the center of The Netherlands, so I can get around more easily) with Leoni, and as developers say, the house is "90% done". So it'll keep us busy for a few months. <img src='http://www.jansch.nl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Things at Ibuildings are hectic as always. Our UK office is growing like crazy and is nearly half the size of our NL operation already. And we're working hard to get our Italian office up and running. Behind the scenes we're already working on things there, so if you're looking for a cool PHP job in Italy, drop me an email (ivo at ibuildings dot com). (Actually Ibuildings NL and UK are looking for senior developers too, if you're interested). After a succesful <a href="http://www.phpconference.nl">DPC</a> back in June, we're planning a few more events so keep an eye on the <a href="http://www.ibuildings.com">Ibuildings</a> website for news on those. </p>
<p>Another thing that has kept me busy is one of my personal pet projects, <a href="http://flackr.net">Flackr</a>, a twitter based breaking news aggregation site. It has fairly basic functionality at this point (we've been mainly working on the news aggregation and event detection algorithms), but will eventually grow into a 'newsroom 2.0' type application with pro features for journalists. Here's an example of how it tracks tweets <a href="http://flackr.net/s/hscn">related to the Hurricane Bill</a> including pictures. Contrary to many twitter aggregators, it doesn't follow the masses, but trusted sources only.</p>
<p>Finally, I'm happy to announce that I've started work on a new book. <a href="http://phparch.com/books/isbn/9780973862188">Enterprise PHP</a> sold very well and it's not outdated yet, but writing it was addictive and now I just feel like writing another one. The book will be about PHP and Cloud Computing. This time around I'm not working on it alone, I'm co-authoring it with <a href="http://vitochin.blogspot.com/">Vito Chin</a>, author of the <a href="http://pecl.php.net/package/gmagick">GMagick</a> PHP extension, among many other things. The expected publication date is early 2010.</p>
<p>That's it for now; I hope to pick up blogging with more actual content after summer.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jansch.nl/2009/08/19/long-time-no-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debugging parameters for CLI apps using Eclipse PDT</title>
		<link>http://www.jansch.nl/2009/05/03/debugging-parameters-for-cli-apps-using-eclipse-pdt/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=debugging-parameters-for-cli-apps-using-eclipse-pdt</link>
		<comments>http://www.jansch.nl/2009/05/03/debugging-parameters-for-cli-apps-using-eclipse-pdt/#comments</comments>
		<pubDate>Sun, 03 May 2009 08:55:39 +0000</pubDate>
		<dc:creator>Ivo</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[cli]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[pdt]]></category>

		<guid isPermaLink="false">http://www.jansch.nl/?p=1801</guid>
		<description><![CDATA[I write quite a lot of command line utilities in PHP and luckily PDT makes it easy to debug command line scripts. The thing with command line scripts is that often they require parameters passed on the command line, and PDT offers an easy way to pass them when you debug a script. Assuming you [...]]]></description>
			<content:encoded><![CDATA[<p>I write quite a lot of command line utilities in PHP and luckily PDT makes it easy to debug command line scripts.</p>
<p>The thing with command line scripts is that often they require parameters passed on the command line, and PDT offers an easy way to pass them when you debug a script. </p>
<p>Assuming you already have debugging in Eclipse working (using either XDebug or Zend Debugger, both will work with this feature), here are the steps to debug a command line script using command line parameters:</p>
<ol>
<li>Right-click the script you want to debug and select 'Debug As...' and from the context menu that appears, select 'Debug Configurations...', like this:<br/><br />
<img src="http://new.jansch.nl/wp-content/uploads/2009/05/picture-28.png" alt="PDT context menu" title="PDT context menu" width="471" height="110" class="size-full wp-image-1791" /></p>
<li>In the debug configurations screen that appears, select the 'PHP Script Arguements' tab. In the text box that appears, you can add fixed parameters (e.g. --key=value), but it's much more useful to use Eclipse's dynamic parameters, like this:<br/><br />
<img src="http://new.jansch.nl/wp-content/uploads/2009/05/picture-29.png" alt="picture-29" title="picture-29" width="400" height="255" class="alignnone size-full wp-image-1781" /><br />
<br/>In this case I entered --visitor=${string_prompt:Visitor} which means: pass --visitor= to the script when debugging, but ask me to enter a value named 'Visitor'. </p>
<li>You can use the 'Variables' button to enter variables like this using a more visual wizard. There are many different prompts, string_prompt is just one example; you can prompt for folders and passwords as well, and you can inject certain system variables as a parameter using this wizard)
<li>After you've saved the Debug Configurations, again right-click the script you want to debug, and select 'Debug As...' and then 'PHP Script'.
<li>Eclipse now pops up the prompt, like this:<br/><br />
<img src="http://new.jansch.nl/wp-content/uploads/2009/05/picture-30.png" alt="picture-30" title="picture-30" width="485" height="193" class="alignnone size-full wp-image-1771" />
</ol>
<p>Voila, you can now debug your command line script by passing in dynamic parameters whenever you start the debug session.</p>
<p>P.S. This not only works in Eclipse PDT but also in Zend Studio for Eclipse and Aptana (in theory, haven't tried either yet).</p>
<p>P.P.S. No, I didn't create a script that allows me to track individual visitors, it's an archive processor for <a href="http://flackr.net">Flackr</a> that uses the Visitor design pattern to make it easier to write multiple processors. I love Design Patterns.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jansch.nl/2009/05/03/debugging-parameters-for-cli-apps-using-eclipse-pdt/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Counting down to the Dutch PHP Conference</title>
		<link>http://www.jansch.nl/2009/04/09/counting-down-to-the-dutch-php-conference/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=counting-down-to-the-dutch-php-conference</link>
		<comments>http://www.jansch.nl/2009/04/09/counting-down-to-the-dutch-php-conference/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 07:50:40 +0000</pubDate>
		<dc:creator>Ivo</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[dpc]]></category>
		<category><![CDATA[dpc09]]></category>
		<category><![CDATA[lineup]]></category>
		<category><![CDATA[schedule]]></category>

		<guid isPermaLink="false">http://www.jansch.nl/?p=1681</guid>
		<description><![CDATA[It's about 2 months until the next Dutch PHP Conference in the Amsterdam RAI. It's a step up from last year, with one additional conference day. The speaker lineup is awesome: people such as PHP core developer Scott MacVicar, Andrei 'Unicode' Zmievski, php&#124;architect's Marco Tabini, Xdebug's Derick Rethans, Zend Framework architect Matthew Weier O'Phinney, security [...]]]></description>
			<content:encoded><![CDATA[<p>It's about 2 months until the next <a href="http://www.phpconference.nl">Dutch PHP Conference</a> in the Amsterdam RAI.</p>
<p><a href="http://phpconference.nl"><img src="http://dpc.09.s3.amazonaws.com/dpc09_banner.jpg" /></a></p>
<p>It's a step up from last year, with one additional conference day. The speaker lineup is awesome: people such as PHP core developer Scott MacVicar, Andrei 'Unicode' Zmievski, php|architect's Marco Tabini, Xdebug's Derick Rethans, Zend Framework architect Matthew Weier O'Phinney, security guru Stefan Esser, Restful Ben Ramsey, Paul 'KISS' Reinheimer and many, many others. See the <a href="http://www.phpconference.nl/schedule">full schedule here</a>. It will all be hosted by our own Cal Evans.</p>
<p>I don't have to speak this year, I just get to do the closing keynote together with Cal and Marco. That'll be fun!</p>
<p>From all the DPC's I've visited before, this is the one I most look forward to. It's also nice to see industry adoption of the conference, with big names such as Microsoft and Oracle sponsoring the event. (Microsoft has xboxes and tickets to Las Vegas to give away, see their <a href="http://wiki.phpconference.nl/2009_WinPHP_Challenge">WinPHP Challenge</a>.)</p>
<p>Oh, and if you order your tickets before April 30, there's a significant Early Bird discount. <a href="http://www.phpconference.nl/register">Register here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jansch.nl/2009/04/09/counting-down-to-the-dutch-php-conference/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Slides from 4Developers conference</title>
		<link>http://www.jansch.nl/2009/03/10/slides-from-4developers-conference/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=slides-from-4developers-conference</link>
		<comments>http://www.jansch.nl/2009/03/10/slides-from-4developers-conference/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 21:54:37 +0000</pubDate>
		<dc:creator>Ivo</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[4developers]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[poland]]></category>
		<category><![CDATA[presentation]]></category>
		<category><![CDATA[scripting languages]]></category>

		<guid isPermaLink="false">http://www.jansch.nl/?p=1621</guid>
		<description><![CDATA[Last Saturday I was at the 4Developers Conference in Poland, as I mentioned before. There weren't many PHP developers at the conference, and I could really feel the language barrier was a problem (many of the English speaking speakers drew much smaller audiences than the Polish ones), but I met some nice people (such as [...]]]></description>
			<content:encoded><![CDATA[<p>Last Saturday I was at the 4Developers Conference in Poland, as <a href="http://www.jansch.nl/2009/03/05/speaking-at-4-developers-conference-poland/">I mentioned before</a>. </p>
<p>There weren't many PHP developers at the conference, and I could really feel the language barrier was a problem (many of the English speaking speakers drew much smaller audiences than the Polish ones), but I met some nice people (such as <a href="http://www.nealford.com/">Neal Ford</a>, <a href="http://blogs.tedneward.com/">Ted Neward</a> and <a href="http://codebetter.com/blogs/raymond.lewallen/">Raymond Lewallen</a>), and in terms of speaker treatment this was by far one of the best conferences I've been to. If you get a chance to speak at one of the conferences that <a href="http://proidea.org.pl/">ProIdea</a> organizes, don't hesitate and go!</p>
<p>The amount of speaker dinners/lunches, and long nights in bars with countless Vodka (in the form of so-called 'Polish Mad Dogs') and other alcoholic beverages, and in general the way speakers were supported was amazing! Andrzej, Anna and Magda: thanks for making this a great experience for us, and if you ever do a PHP conference, ping me <img src='http://www.jansch.nl/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Here are the slides from my presentation:</p>
<div style="width:425px;text-align:left" id="__ss_1115719"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/ijansch/dynamic-languages-in-the-enterprise-4developers-march-2009?type=powerpoint" title="Dynamic Languages In The Enterprise (4developers march 2009)">Dynamic Languages In The Enterprise (4developers march 2009)</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=dynamiclanguagesintheenterprise-090307183017-phpapp02&stripped_title=dynamic-languages-in-the-enterprise-4developers-march-2009" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=dynamiclanguagesintheenterprise-090307183017-phpapp02&stripped_title=dynamic-languages-in-the-enterprise-4developers-march-2009" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/ijansch">Ivo Jansch</a>.</div>
</div>
<p>Those who have seen me speak before will notice that this is a more generic version of my "Enterprise PHP" talk, catered to a mixed audience. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.jansch.nl/2009/03/10/slides-from-4developers-conference/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Speaking at 4 Developers Conference (Poland)</title>
		<link>http://www.jansch.nl/2009/03/05/speaking-at-4-developers-conference-poland/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=speaking-at-4-developers-conference-poland</link>
		<comments>http://www.jansch.nl/2009/03/05/speaking-at-4-developers-conference-poland/#comments</comments>
		<pubDate>Thu, 05 Mar 2009 21:15:23 +0000</pubDate>
		<dc:creator>Ivo</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[4developers]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[speaking]]></category>

		<guid isPermaLink="false">http://www.jansch.nl/?p=1601</guid>
		<description><![CDATA[This weekend I will be speaking at the 4 Developers Conference in Krakow, Poland. Since I'll be opening the 'dedicated languages' track, which has a mixed audience of PHP, Ruby and Python developers, I revamped my 2008 Enterprise PHP talk into "Dynamic Languages in the Enterprise" and extended the scope to include Ruby, Python and [...]]]></description>
			<content:encoded><![CDATA[<p>This weekend I will be speaking at the <a href="http://4developers.org.pl">4 Developers Conference</a> in Krakow, Poland. </p>
<p>Since I'll be opening the 'dedicated languages' track, which has a mixed audience of PHP, Ruby and Python developers, I revamped my 2008 Enterprise PHP talk into "Dynamic Languages in the Enterprise" and extended the scope to include Ruby, Python and Perl. Let's see how that works out.</p>
<p>I have never been to Poland before (despite having some Polish roots several generations before me), so I'm excited to be there.</p>
<p>Ibuildings colleague and friend <a href="http://www.leftontheweb.com">Stefan Koopmanschap</a> will also present, he's doing his 'The Power of Refactoring' talk. Other speakers in the same track are ThoughtWorks's <a href="http://www.nealford.com/">Neal Ford</a> and Ted Neward.</p>
<p>If you are from Poland and know me from the PHP community, come and say hi! <img src='http://www.jansch.nl/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.jansch.nl/2009/03/05/speaking-at-4-developers-conference-poland/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

