<?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>felixdv blog &#187; PHP</title>
	<atom:link href="http://blog.felixdv.com/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.felixdv.com</link>
	<description>PHP om nom nom</description>
	<lastBuildDate>Fri, 09 Jul 2010 20:11:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Using git-svn: making the switch</title>
		<link>http://blog.felixdv.com/2010/06/15/using-git-svn-making-the-switch/</link>
		<comments>http://blog.felixdv.com/2010/06/15/using-git-svn-making-the-switch/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 21:09:43 +0000</pubDate>
		<dc:creator>felixdv</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[branch]]></category>
		<category><![CDATA[dcommit]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[git-svn]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[vcs]]></category>

		<guid isPermaLink="false">http://blog.felixdv.com/?p=163</guid>
		<description><![CDATA[A lot of people are already convinced that Git has a good chance of replacing Subversion as the version control system of your choice in the long run. Git is in most ways far superior to SVN (If you want to know why, have a look at this comparison). The feeling that Git is the way to [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-thumbnail wp-image-185" title="Git logo" src="http://blog.felixdv.com/wp-content/uploads/2010/06/git-logo-150x150.png" alt="" width="150" height="150" />A lot of people are already convinced that <a href="http://git-scm.com/" target="_blank">Git</a> has a good chance of replacing <a href="http://subversion.tigris.org/" target="_blank">Subversion</a> as the version control system of your choice in the long run. Git is in most ways far superior to SVN (If you want to know why, have a look at <a href="https://git.wiki.kernel.org/index.php/GitSvnComparison" target="_blank">this comparison</a>). The feeling that Git is the way to go is only strengthened by the fact that major (PHP) projects are switching or planning to switch to the decentralized version control system: <a href="http://github.com/zendframework/zf2" target="_blank">Zend Framework</a>, <a href="http://github.com/phpbb/phpbb3" target="_blank">phpBB</a>, <a href="http://github.com/symfony/" target="_blank">Symfony</a> and <a href="http://git.drupal.org/" target="_blank">Drupal</a>, to name a few.</p>
<p>Lots of projects are still stored in SVN repositories though. It&#8217;s not always easy to switch from one VCS to another, often projects have SVN-specific build scripts or infrastructure in place. If you&#8217;re interested in using Git but you&#8217;re still tied to Subversion as your main version control system, you can do so with the git-svn bridge.</p>
<p><strong>Note</strong>: this is not a git tutorial, I&#8217;m kind of assuming you&#8217;re already familiar with git and how to create, add, modify, delete, commit, diff and more. If you&#8217;re a bit unfamiliar with the git commands but know the svn toolset, have a look at this <a href="http://git.or.cz/course/svn.html" target="_blank">excellent svn to git crash course</a>.</p>
<h3>Git svn magic</h3>
<p><em><a href="http://www.kernel.org/pub/software/scm/git/docs/git-svn.html" target="_blank">git-svn</a> &#8211; Bidirectional operation between a Subversion repository and git.</em> The basic idea is that you keep your SVN respository in place (for as long as it will last), but still use git for all your day to day version control operations. When you feel like, you can then issue a command which will synchronise your git commits with the central Subversion repository. Let&#8217;s get started on the setup.</p>
<p>I&#8217;m assuming you have a traditional SVN repository layout with trunk in <code>project/trunk</code>, branches in <code>project/branches/*</code> and tags in <code>project/tags/*</code>. The <code>-s</code> switch indicated you want git svn to assume this layout is in place, so it can transform the repository paths to remote git repositories. The parameter <code>--no-minimize-url</code> is sometimes needed when you don&#8217;t have read permissions on the full repository, since git will try to connect to the root of the repository because sometimes, this provides better tracking of history when you&#8217;re importing the project. This step will initialize a git repository in the current directory with the needed metadata information to fetch the svn repositories later on:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ git <span style="color: #c20cb9; font-weight: bold;">svn</span> init <span style="color: #660033;">-s</span> http:<span style="color: #000000; font-weight: bold;">//</span>svn.example.com<span style="color: #000000; font-weight: bold;">/</span>project</pre></div></div>

<p>Next up, we&#8217;ll fetch the history from the svn repository and store it inside our git repository. An optional revision parameter (<code>-r</code>) can be added to only fetch history from that revision and up:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ git <span style="color: #c20cb9; font-weight: bold;">svn</span> fetch <span style="color: #660033;">-r</span> XXX</pre></div></div>

<p>You can also replace the previous 2 commands with the command below. The only difference is that the <code>git svn clone</code> command creates a new git repository directory for you instead of using the current directory, hence the last parameter which indicates the directory name:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ git <span style="color: #c20cb9; font-weight: bold;">svn</span> clone <span style="color: #660033;">-s</span> http:<span style="color: #000000; font-weight: bold;">//</span>svn.example.com<span style="color: #000000; font-weight: bold;">/</span>project project_dir</pre></div></div>

<h3>Updating from and committing to svn</h3>
<p>When you do a <code>git commit</code>, these commits won&#8217;t be pushed directly to the svn repository. Interacting with the svn repository is done separately, so two additional commands are useful.<br />
Updating your repo with the latest changes from SVN (similar to <code>svn update</code>):</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ git <span style="color: #c20cb9; font-weight: bold;">svn</span> rebase</pre></div></div>

<p>Pushing your commits to the SVN repository (somewhat similar to <code>svn commit</code>):</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ git <span style="color: #c20cb9; font-weight: bold;">svn</span> dcommit</pre></div></div>

<p>Basically, right now you&#8217;re set to go and you can start working on your git repository like you would normally do. In my case, I wanted to know how to do some additional things. They might not be needed in your case, but I found them useful to set up my working environment.</p>
<h3><strong>Working with branches</strong></h3>
<p>Since you have imported the git repository using a standard layout (remember the <code>-s</code> from the <code>git svn init</code>), you have all branches and tags available as you normally would with an svn checkout. Have a look at those remote branches:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ git branch <span style="color: #660033;">-r</span></pre></div></div>

<p>Of course, you can start working on these branches too. To create a local branch which tracks one of the remote branches, do:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ git checkout <span style="color: #660033;">-b</span> new_branch remote_branch
<span style="color: #666666; font-style: italic;"># so, for example to create a branch 'release_1.5' which tracks remote 'release_1_5':</span>
$ git checkout <span style="color: #660033;">-b</span> release_1.5 release_1_5</pre></div></div>

<p>When you fetched the SVN repository into your git repository, it automatically set your local master repo to follow the remote trunk repository. If you want to change that (for example, to have a branch as default master repo), you can change it like this:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ git reset <span style="color: #660033;">--hard</span> remote_branch
$ git reset <span style="color: #660033;">--hard</span> release_1_5 <span style="color: #666666; font-style: italic;"># example</span></pre></div></div>

<h3><strong>Fixing svn ignore</strong></h3>
<p>Svn ignores aren&#8217;t automagically transfered to your newly created git project, but git does have a similar way of ignoring files or directories inside a project. Better yet, git svn provides a built-in command which looks for svn ignores. If you then add those to <code>.git/info/exclude</code> (locally) or <code>.gitignore</code> (project-wide), you have exactly the same setup as you would have with svn.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ git <span style="color: #c20cb9; font-weight: bold;">svn</span> show-ignore <span style="color: #000000; font-weight: bold;">&gt;</span> .git<span style="color: #000000; font-weight: bold;">/</span>info<span style="color: #000000; font-weight: bold;">/</span>exclude</pre></div></div>

<h3><strong>Fixing svn externals</strong></h3>
<p>If you&#8217;re using svn externals, you might have to jump to some additional loops to set everything up. There&#8217;s no real replacement for svn externals, but one way Git manages to simulate this is by using submodules. Submodules are a bit cumbersome to set up, but luckily for us, there&#8217;s a script which searches your project for svn externals and checks them out as git submodules. Of course, it&#8217;s not guaranteed to work, but might make it easier to set it up. Get it here: <a href="http://github.com/andrep/git-svn-clone-externals" target="_blank">http://github.com/andrep/git-svn-clone-externals</a></p>
<p>I&#8217;m hoping this is enough to get you started on using Git, an awesome version control system with too much cool features to name. If I&#8217;m missing something, please let me know in the comments and I&#8217;ll be glad to update the post.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felixdv.com/2010/06/15/using-git-svn-making-the-switch/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>phpDay Italia 2010</title>
		<link>http://blog.felixdv.com/2010/05/29/phpday-italia-2010/</link>
		<comments>http://blog.felixdv.com/2010/05/29/phpday-italia-2010/#comments</comments>
		<pubDate>Sat, 29 May 2010 20:58:40 +0000</pubDate>
		<dc:creator>felixdv</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[italy]]></category>
		<category><![CDATA[phpday]]></category>
		<category><![CDATA[phpday2010]]></category>
		<category><![CDATA[speaking]]></category>

		<guid isPermaLink="false">http://blog.felixdv.com/?p=147</guid>
		<description><![CDATA[First things first: looking at the post date, it&#8217;s been more than a year since my last post. No excuses here, it&#8217;s just how it is. I&#8217;ll try to post a bit more often, but can&#8217;t promise anything :)
A while ago, I was invited to phpDay 2010 to speak about a subject I like a [...]]]></description>
			<content:encoded><![CDATA[<p>First things first: looking at the post date, it&#8217;s been more than a year since my last post. No excuses here, it&#8217;s just how it is. I&#8217;ll try to post a bit more often, but can&#8217;t promise anything :)</p>
<p><img class="alignright size-full wp-image-148" title="phpDay" src="http://blog.felixdv.com/wp-content/uploads/2010/05/phpDay.jpeg" alt="" width="200" height="118" />A while ago, I was invited to <a title="phpDay 2010" href="http://www.phpday.it/" target="_blank">phpDay 2010</a> to speak about a subject I like a lot: <a title="Gearman" href="http://gearman.org/" target="_blank">Gearman</a>. A PHP conference in Italy sounds pretty cool to me, <a title="Ibuildings - The PHP Professionals" href="http://www.ibuildings.com">my employer</a> was sponsoring the conference and I&#8217;m always glad to give a presentation about topics I&#8217;m passionate about. Not surprisingly, I looked forward to phpDay 2010 quite a lot.</p>
<p><span id="more-147"></span>Even though the Milan airport was still closed 3 days before the conference started (thanks <a href="http://en.wikipedia.org/wiki/Eyjafjallaj%C3%B6kull" target="_blank">Eyjafjallajökull</a>), I still managed to take a flight from Brussels through Milan to Pescara airport. The conference venue still was a 50 minute drive away from the airport, but luckily <a title="Cesare D'Amico" href="http://twitter.com/__ce" target="_blank">Cesare</a> and <a href="http://twitter.com/fullo" target="_blank">Fullo</a> were incredibly kind to pick me up at 23pm and even took me to a very late dinner at a local restaurant. After a nice dinner, I checked into the hotel which was 50 meters from the <a title="Alba Adriatica" href="http://en.wikipedia.org/wiki/Alba_Adriatica" target="_blank">Alba Adriatica</a> beach, how sweet is that!</p>
<p>The conference venue itself was located a bit further inland, but only a 5 minute drive from the hotel. The venue actually was a former university building which wasn&#8217;t used anymore. It made a good conference venue, with room for different tracks and a main hall/lobby. I was quite glad to see that there was a separate english-spoken track aside from the Italian talks who still were in the majority, but the conference organizers told me they are in the process of migrating to a more internationally-focussed (and thus english-spoken) conference, which of course is a good thing.</p>
<p>I did manage to catch a few sessions besides working and attending the &#8216;hallway&#8217; track. I specifically looked forward to <a href="http://kore-nordmann.de" target="_blank">Kore&#8217;s</a> talk on <a title="Arbitracker" href="http://arbitracker.org" target="_blank">Arbit</a>, which is the project tracker you&#8217;ve wanted all along. Very interesting to see the motivations, architectural descisions and future roadmap of the project. I also went to see <a title="Dustin Whittle" href="http://dustinwhittle.com/" target="_blank">Dustin&#8217;s</a> talk on <a title="Yahoo Query Language" href="http://developer.yahoo.com/yql/" target="_blank">YQL</a>, which I&#8217;ve heard of before but never really used. It was a clear talk which described the possibilities of YQL, and even though I still have my doubts, I can definitely see where it could be useful too. One of the last sessions of the day was mine, and it really surprised me how much people were interested in Gearman and attended my talk. Overall the talk went <a title="Joind.in feedback" href="http://joind.in/talk/view/1470" target="_blank">good</a> I think, I hope all attendees got something out of it.</p>
<p>After the first day, all speakers were taken to an Italian fish restaurant, with an amazing amount of food served for each person, so I was really stuffed, but the food was really good so I didn&#8217;t mind a thing. On the evening of the second conference day, all speakers were again taken to a restaurant, probably even nicer than the night before. Amazing food, good company, what more can you want :)</p>
<p>On saturday, I had to leave early because of previously planned appointments and again, the commitment of the phpDay organisation shone again. Cesare drove me to the airport at 6:30 am (thanks again for that!) so I could catch my flight back to Belgium. Even though it&#8217;s the first time I attended phpDay, it completely surprised me (in the good way!) in terms of organization and taking care of their speakers. There&#8217;s definitely growth in the Italian PHP market and it&#8217;s good to see some Italian PHP conferences too. Definitely one to put on the PHP conference calendar next year!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felixdv.com/2010/05/29/phpday-italia-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP UK Conference review</title>
		<link>http://blog.felixdv.com/2009/03/02/php-uk-conference-review/</link>
		<comments>http://blog.felixdv.com/2009/03/02/php-uk-conference-review/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 23:26:42 +0000</pubDate>
		<dc:creator>felixdv</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[phpuk]]></category>
		<category><![CDATA[phpuk2009]]></category>

		<guid isPermaLink="false">http://felix.phpbelgium.be/blog/?p=143</guid>
		<description><![CDATA[The past days I&#8217;ve been in London to attend the PHP UK Conference 2009. I&#8217;ve been to the previous edition which I liked very much and thanks to my employer, I was able to go to this year&#8217;s conference too.
No conference is a real PHP conference without the pre- and post-conference socials, and luckily we [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-medium wp-image-144 alignleft" style="float: left;" title="phpukconference2009" src="http://felix.phpbelgium.be/blog/wp-content/uploads/2009/03/phpukconference2009-300x74.png" alt="" width="300" height="74" />The past days I&#8217;ve been in London to attend the <a href="http://phpconference.co.uk">PHP UK Conference 2009</a>. I&#8217;ve been to the previous edition which I liked very much and thanks to my <a href="http://www.ibuildings.com">employer</a>, I was able to go to this year&#8217;s conference too.</p>
<p>No conference is a real PHP conference without the pre- and post-conference socials, and luckily we were spoiled in that part. Thursday evening, there was a pre-conference social in the <a href="http://www.brookgreenhotel.co.uk">Brook Green Hotel</a> Bar. Already running in a bit late, we were just in time to see <a href="http://www.derickrethans.nl">Derick</a> be done with talking about <a href="http://pecl.php.net/package/dbus">dbus</a> which was a shame, because I looked forward to that talk. Nevertheless, I got to see old friends and meet new friends, which made the social a success.</p>
<p>The conference day started with collecting our badge, which went pretty smooth. I went to check out the <a href="http://www.ibuildings.com">Ibuildings</a> stand and got myself an Ibuildings shirt to wear. The opening speech by <a href="http://www.lastcraft.com">Marcus Baker</a> had an original take to it, and made it clear that a reasonable amount of the conference visitors was from a foreign country. Some pictures were taken and promised to put online, but I&#8217;ve not heard from those since. If anyone knows where they are, please let me know!</p>
<p>Next up on stage was<a href="http://aralbalkan.com/"> Aral Balkan</a> with &#8220;The future&#8217;s so bright, I gotta wear shades&#8221;, a refreshing view on new trends and tools for developers. He&#8217;s got an energetic and playful way of presenting, which was received well by the audience. Through the talk, he definitely made his points across. Differentiation in development work is largely based on having fun in what you do and working on things you really get inspired from.</p>
<p>The next talk was David Sorria Parra on Sharding Architectures. This was one of the more advanced talks but at the same time one of the talks I looked forward to the most. David talked about different sharding techniques, describing the advantages and pitfalls of each. He concluded that <a href="http://en.wikipedia.org/wiki/Consistent_hashing">consistent hashing</a> is the best (and most scalable) approach to sharding, something I&#8217;m definitely going to look into a bit more.</p>
<p>David Axmark, one of the co-founders of <a href="http://www.mysql.com">MySQL</a>, talked a bit about <a href="https://launchpad.net/drizzle">Drizzle</a>. Drizzle is a database server optimized for cloud and internet applications. By focussing on for example scaling, multi-core support and high concurrency, Drizzle is on its way to become quite an interesting alternative to MySQL. David mentioned where the Drizzle project is today, explained some of the features and where Drizzle is heading. Although clearly far from usable for production, I&#8217;m very much looking forward to at least try it out. It also opens up a lot of possibilities for writing plugins, which is a cumbersome task in the current MySQL distribution and made a lot easier with Drizzle.</p>
<p>After skipping a track (well not really, the hallway track is quite interesting too :) ), my collegue <a href="http://www.leftontheweb.com">Stefan Koopmanschap</a> was ready to deliver a talk on symfony. With &#8220;MyPHP-busters&#8221;, Stefan busted some of the myths that the Symfony framework has been suffering from. All of his points were certainly valid, and the presentation as a whole looked very nice. Kudos to Stefan for this one.</p>
<p>To close the day off, I saw <a href="http://shiflett.org/">Chris Shiflett</a> talk on Security Centered Design. This must have been the one presentation I was underestimating the most. By regularly applying psychology patterns to security and user interface design, Chris emphasized there&#8217;s much more to developing an application than only functionality. This is certainly a topic that appeals to me, maybe even enough to have a look at the book recommended by Jon Gibbins: <a href="http://www.amazon.com/dp/073571410X">Defensive design for the web</a>.</p>
<p>After the open bar provided by MySQL/Sun, we went off to the bar again to have the post-conference social, to conclude a nice conference. Congrats to the PHP UK organizers, you succeeded in having a great and enjoyable conference with lots of interesting talks. You can expect me again next year.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felixdv.com/2009/03/02/php-uk-conference-review/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Speaking at IPC Spring edition 2009</title>
		<link>http://blog.felixdv.com/2009/03/02/speaking-at-ipc-spring-edition-2009/</link>
		<comments>http://blog.felixdv.com/2009/03/02/speaking-at-ipc-spring-edition-2009/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 16:55:51 +0000</pubDate>
		<dc:creator>felixdv</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[ipc]]></category>
		<category><![CDATA[speaking]]></category>

		<guid isPermaLink="false">http://felix.phpbelgium.be/blog/?p=142</guid>
		<description><![CDATA[My upcoming conference schedule:

IPC Spring edition &#8211; 25 to 27th of may 2009 &#8211; Berlin, Germany

I&#8217;ll be doing a talk there titled: &#8220;PHPT: Lessons learned from PHP TestFest&#8221;. If you want to know the ins and outs of PHPT and testing PHP Core, this might be of interest to you.
See you in Berlin!
]]></description>
			<content:encoded><![CDATA[<p>My upcoming conference schedule:</p>
<ul>
<li><a title="IPC Spring edition" href="http://it-republik.de/php/phpconference/">IPC Spring edition</a> &#8211; 25 to 27th of may 2009 &#8211; Berlin, Germany</li>
</ul>
<p>I&#8217;ll be doing a talk there titled: &#8220;PHPT: Lessons learned from PHP TestFest&#8221;. If you want to know the ins and outs of <a title="PHPT" href="http://phpt.info/">PHPT</a> and <a href="http://qa.php.net/write-test.php">testing PHP Core</a>, this might be of interest to you.</p>
<p>See you in Berlin!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felixdv.com/2009/03/02/speaking-at-ipc-spring-edition-2009/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Setting up phpUnderControl</title>
		<link>http://blog.felixdv.com/2009/02/07/setting-up-phpundercontrol/</link>
		<comments>http://blog.felixdv.com/2009/02/07/setting-up-phpundercontrol/#comments</comments>
		<pubDate>Sat, 07 Feb 2009 00:20:45 +0000</pubDate>
		<dc:creator>felixdv</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[ci]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[cruisecontrol]]></category>
		<category><![CDATA[phpuc]]></category>
		<category><![CDATA[phpundercontrol]]></category>

		<guid isPermaLink="false">http://felix.phpbelgium.be/blog/?p=139</guid>
		<description><![CDATA[On a regular basis, I get contacted by people who want to install phpUnderControl but don&#8217;t really know how to set up their projects and use the features provided by phpUnderControl completely. So, aside from providing a quick-and-easy setup guide for cruisecontrol and phpUnderControl, I&#8217;ll share the setup scripts I have here and hope it&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-141" title="phpUnderControl dashboard" src="http://felix.phpbelgium.be/blog/wp-content/uploads/2009/02/afbeelding-31-300x200.png" alt="" width="300" height="200" />On a regular basis, I get contacted by people who want to install <a href="http://phpundercontrol.org">phpUnderControl</a> but don&#8217;t really know how to set up their projects and use the features provided by phpUnderControl completely. So, aside from providing a quick-and-easy setup guide for cruisecontrol and phpUnderControl, I&#8217;ll share the setup scripts I have here and hope it&#8217;s useful for someone. This guide is mostly focussed on getting phpUnderControl to work on a Debian system, but there&#8217;s not that much OS specific to it.</p>
<h3>Getting it installed</h3>
<p>You probably will need some tools that are related to the PHP project you want to deploy on the phpUnderControl installation and for the sake of briefness I&#8217;m not going to cover how to install them, but instead just list what might come in handy for the continuous integration system to set up:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> subversion subversion-tools sun-java6-jre sun-java6-jdk</pre></div></div>

<p>Also, install <a href="http://php.net">php</a>, <a href="http://www.phpdoc.org">phpdoc</a>, <a href="http://pear.php.net/package/PHP_CodeSniffer">phpcs</a>, <a href="http://www.phpunit.de">phpunit</a> and <a href="http://www.xdebug.org">xdebug</a>, you&#8217;ll need it later on for unit testing, generating reports and analyzing your code. Next up, you can install cruisecontrol. Just get the cruisecontrol archive and unpack it somewhere. (I chose <code>/opt</code>):</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span>
$ <span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>heanet.dl.sourceforge.net<span style="color: #000000; font-weight: bold;">/</span>sourceforge<span style="color: #000000; font-weight: bold;">/</span>cruisecontrol<span style="color: #000000; font-weight: bold;">/</span>cruisecontrol-bin-2.8.2.zip
$ <span style="color: #c20cb9; font-weight: bold;">unzip</span> <span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span>cruisecontrol-bin-2.8.2.zip
$ <span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #660033;">-f</span> cruisecontrol-bin-2.8.2 cruisecontrol</pre></div></div>

<p>By default, cruisecontrol doesn&#8217;t have a start-up script. That&#8217;s not very easy when you want to start, stop or restart the server, so let&#8217;s make it (in <code>/etc/init.d/cruisecontrol</code>):</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span>
<span style="color: #007800;">PATH</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>sbin:<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>bin:<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin:<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin:<span style="color: #000000; font-weight: bold;">/</span>sbin:<span style="color: #000000; font-weight: bold;">/</span>bin:
. <span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>lsb<span style="color: #000000; font-weight: bold;">/</span>init-functions
<span style="color: #007800;">JAVA_HOME</span>=<span style="color: #000000; font-weight: bold;">/</span>usr
<span style="color: #007800;">NAME</span>=cruisecontrol
<span style="color: #007800;">DAEMON</span>=<span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span>cruisecontrol<span style="color: #000000; font-weight: bold;">/</span>cruisecontrol.sh
<span style="color: #007800;">PIDFILE</span>=<span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span>cruisecontrol<span style="color: #000000; font-weight: bold;">/</span>cc.pid
&nbsp;
<span style="color: #7a0874; font-weight: bold;">test</span> <span style="color: #660033;">-x</span> <span style="color: #007800;">$DAEMON</span> <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">5</span>
&nbsp;
<span style="color: #007800;">RUNASUSER</span>=cruisecontrol
<span style="color: #007800;">UGID</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">getent</span> <span style="color: #c20cb9; font-weight: bold;">passwd</span> <span style="color: #007800;">$RUNASUSER</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-f</span> <span style="color: #000000;">3</span>,<span style="color: #000000;">4</span> -d:<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #c20cb9; font-weight: bold;">true</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">case</span> $<span style="color: #000000;">1</span> <span style="color: #000000; font-weight: bold;">in</span>
start<span style="color: #7a0874; font-weight: bold;">&#41;</span>
log_daemon_msg <span style="color: #ff0000;">&quot;Starting Cruisecontrol server&quot;</span> <span style="color: #ff0000;">&quot;cc&quot;</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-z</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$UGID</span>&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
log_failure_msg <span style="color: #ff0000;">&quot;user <span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #007800;">$RUNASUSER</span><span style="color: #000099; font-weight: bold;">\&quot;</span> does not exist&quot;</span>
<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">1</span>
<span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span>cruisecontrol<span style="color: #000000; font-weight: bold;">/</span>
.<span style="color: #000000; font-weight: bold;">/</span>cruisecontrol.sh <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null <span style="color: #000000;">2</span><span style="color: #000000; font-weight: bold;">&gt;&amp;</span><span style="color: #000000;">1</span>
log_end_msg <span style="color: #007800;">$?</span>
<span style="color: #000000; font-weight: bold;">;;</span>
stop<span style="color: #7a0874; font-weight: bold;">&#41;</span>
log_daemon_msg <span style="color: #ff0000;">&quot;Stopping Cruisecontrol server&quot;</span> <span style="color: #ff0000;">&quot;cc&quot;</span>
start-stop-daemon <span style="color: #660033;">--stop</span> <span style="color: #660033;">--quiet</span> <span style="color: #660033;">--oknodo</span> <span style="color: #660033;">--pidfile</span> <span style="color: #007800;">$PIDFILE</span>
log_end_msg <span style="color: #007800;">$?</span>
<span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-f</span> <span style="color: #007800;">$PIDFILE</span>
<span style="color: #000000; font-weight: bold;">;;</span>
restart<span style="color: #000000; font-weight: bold;">|</span>force-reload<span style="color: #7a0874; font-weight: bold;">&#41;</span>
$<span style="color: #000000;">0</span> stop <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #c20cb9; font-weight: bold;">sleep</span> <span style="color: #000000;">2</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> $<span style="color: #000000;">0</span> start
<span style="color: #000000; font-weight: bold;">;;</span>
status<span style="color: #7a0874; font-weight: bold;">&#41;</span>
pidofproc <span style="color: #660033;">-p</span> <span style="color: #007800;">$PIDFILE</span> <span style="color: #007800;">$DAEMON</span> <span style="color: #000000; font-weight: bold;">&gt;/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null
<span style="color: #007800;">status</span>=<span style="color: #007800;">$?</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$status</span> <span style="color: #660033;">-eq</span> <span style="color: #000000;">0</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
log_success_msg <span style="color: #ff0000;">&quot;Cruisecontrol server is running.&quot;</span>
<span style="color: #000000; font-weight: bold;">else</span>
log_failure_msg <span style="color: #ff0000;">&quot;Cruisecontrol server is not running.&quot;</span>
<span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #007800;">$status</span>
<span style="color: #000000; font-weight: bold;">;;</span>
<span style="color: #000000; font-weight: bold;">*</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Usage: $0 {start|stop|restart|force-reload|status}&quot;</span>
<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">2</span>
<span style="color: #000000; font-weight: bold;">;;</span>
<span style="color: #000000; font-weight: bold;">esac</span></pre></div></div>

<p>Set the file to have executable rights, and start the cruisecontrol server:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">chmod</span> +x <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>cruisecontrol
$ <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>cruisecontrol start</pre></div></div>

<p>Right now, if you go to <code>http://yourhost:8080/dashboard/</code>, you should see a working cruisecontrol server page. If you don&#8217;t, please have a look at the previous steps and try again. A quick look at the cruisecontrol logs in <code>/opt/cruisecontrol/cruisecontrol.log</code> to find out what might be the problem.<br />
For now, you can stop the cruisecontrol server:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>cruisecontrol stop</pre></div></div>

<h3>phpUnderControl</h3>
<p>This is even easier to install. We&#8217;ll just take the bleeding edge SVN sources so we can enjoy the latest goodies that phpUnderControl has to offer :) :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span>
$ <span style="color: #c20cb9; font-weight: bold;">svn</span> <span style="color: #c20cb9; font-weight: bold;">co</span> <span style="color: #c20cb9; font-weight: bold;">svn</span>:<span style="color: #000000; font-weight: bold;">//</span>svn.phpunit.de<span style="color: #000000; font-weight: bold;">/</span>phpunit<span style="color: #000000; font-weight: bold;">/</span>phpUnderControl<span style="color: #000000; font-weight: bold;">/</span>trunk phpuc
$ <span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span>phpuc<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>phpuc.php <span style="color: #c20cb9; font-weight: bold;">install</span> <span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span>cruisecontrol
$ <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>cruisecontrol start</pre></div></div>

<p>That&#8217;s it! phpUnderControl should be installed by now, which you can verify by going to <code>http://:8080/cruisecontrol/</code> and see the new phpUnderControl interface. Of course, there&#8217;s not much information available at this time, let alone a useful project. But we&#8217;ll get to that in a minute :)</p>
<h3>Configuration</h3>
<p>All phpUnderControl projects are configured in a single <code>config.xml</code> file, located in the cruisecontrol install directory, in our case <code>/opt/cruisecontrol/config.xml</code>. To give you an idea on how this looks for most of my PHP projects, here&#8217;s an example:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;cruisecontrol<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;project</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;phpfoo&quot;</span> <span style="color: #000066;">buildafterfailed</span>=<span style="color: #ff0000;">&quot;false&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;plugin</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;svnbootstrapper&quot;</span> <span style="color: #000066;">classname</span>=<span style="color: #ff0000;">&quot;net.sourceforge.cruisecontrol.bootstrappers.SVNBootstrapper&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;plugin</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;svn&quot;</span> <span style="color: #000066;">classname</span>=<span style="color: #ff0000;">&quot;net.sourceforge.cruisecontrol.sourcecontrols.SVN&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;listeners<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;currentbuildstatuslistener</span> <span style="color: #000066;">file</span>=<span style="color: #ff0000;">&quot;logs/${project.name}/status.txt&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/listeners<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bootstrappers<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;svnbootstrapper</span> <span style="color: #000066;">localWorkingCopy</span>=<span style="color: #ff0000;">&quot;projects/${project.name}/source/&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bootstrappers<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;modificationset</span> <span style="color: #000066;">quietperiod</span>=<span style="color: #ff0000;">&quot;0&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;svn</span> <span style="color: #000066;">localWorkingCopy</span>=<span style="color: #ff0000;">&quot;projects/${project.name}/source/&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/modificationset<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;schedule</span> <span style="color: #000066;">interval</span>=<span style="color: #ff0000;">&quot;60&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;ant</span> <span style="color: #000066;">anthome</span>=<span style="color: #ff0000;">&quot;apache-ant-1.7.0&quot;</span> <span style="color: #000066;">buildfile</span>=<span style="color: #ff0000;">&quot;projects/${project.name}/source/build.xml&quot;</span></span>
<span style="color: #009900;"><span style="color: #000066;">target</span>=<span style="color: #ff0000;">&quot;build&quot;</span> <span style="color: #000066;">uselogger</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000066;">usedebug</span>=<span style="color: #ff0000;">&quot;false&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/schedule<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;log</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;logs/${project.name}&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;merge</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;projects/${project.name}/build/logs/&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/log<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;publishers<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;currentbuildstatuspublisher</span> <span style="color: #000066;">file</span>=<span style="color: #ff0000;">&quot;logs/${project.name}/buildstatus.txt&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactspublisher</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;projects/${project.name}/build/coverage&quot;</span> <span style="color: #000066;">dest</span>=<span style="color: #ff0000;">&quot;logs/${project.name}&quot;</span> <span style="color: #000066;">subdirectory</span>=<span style="color: #ff0000;">&quot;coverage&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactspublisher</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;projects/${project.name}/build/api&quot;</span> <span style="color: #000066;">dest</span>=<span style="color: #ff0000;">&quot;logs/${project.name}&quot;</span> <span style="color: #000066;">subdirectory</span>=<span style="color: #ff0000;">&quot;api&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;execute</span> <span style="color: #000066;">command</span>=<span style="color: #ff0000;">&quot;/opt/phpuc/bin/phpuc.php graph logs/${project.name}&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;htmlemail</span> <span style="color: #000066;">mailhost</span>=<span style="color: #ff0000;">&quot;xx.xx.xx.xx&quot;</span> <span style="color: #000066;">returnaddress</span>=<span style="color: #ff0000;">&quot;foo@example.com&quot;</span></span>
<span style="color: #009900;"><span style="color: #000066;">buildresultsurl</span>=<span style="color: #ff0000;">&quot;http://yourhost:8080/buildresults/${project.name}&quot;</span></span>
<span style="color: #009900;"><span style="color: #000066;">returnname</span>=<span style="color: #ff0000;">&quot;phpUnderControl server&quot;</span> <span style="color: #000066;">logdir</span>=<span style="color: #ff0000;">&quot;logs/${project.name}&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;failure</span> <span style="color: #000066;">address</span>=<span style="color: #ff0000;">&quot;fail@example.com&quot;</span> <span style="color: #000066;">reportWhenFixed</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/htmlemail<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/publishers<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/project<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/cruisecontrol<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>As you can see, this file actually just looks out for changed subversion modificationsets, updates the source and then fires off the <code>build.xml</code> inside the project source directory. That one is actually the most interesting one, so I&#8217;ll list it here too:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;project</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;phpfoo&quot;</span> <span style="color: #000066;">default</span>=<span style="color: #ff0000;">&quot;build&quot;</span> <span style="color: #000066;">basedir</span>=<span style="color: #ff0000;">&quot;../&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;php-documentor&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;exec</span> <span style="color: #000066;">executable</span>=<span style="color: #ff0000;">&quot;phpdoc&quot;</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${basedir}/source&quot;</span> <span style="color: #000066;">logerror</span>=<span style="color: #ff0000;">&quot;on&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">line</span>=<span style="color: #ff0000;">&quot;-o HTML:frames:DOM/earthli -ti '${ant.project.name} documentation' -dn default -i tests/</span>
<span style="color: #009900;">-s on -ue on -t ${basedir}/build/api -d .&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/exec<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;phpcs&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;exec</span> <span style="color: #000066;">executable</span>=<span style="color: #ff0000;">&quot;phpcs&quot;</span></span>
<span style="color: #009900;"><span style="color: #000066;">output</span>=<span style="color: #ff0000;">&quot;${basedir}/build/logs/checkstyle.xml&quot;</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${basedir}&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span></span>
<span style="color: #009900;"><span style="color: #000066;">line</span>=<span style="color: #ff0000;">&quot;--ignore=*/tests/* --report=checkstyle</span>
<span style="color: #009900;">--standard=PEAR source&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/exec<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;phpunit&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;exec</span> <span style="color: #000066;">executable</span>=<span style="color: #ff0000;">&quot;phpunit&quot;</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${basedir}/source/tests&quot;</span> <span style="color: #000066;">failonerror</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span></span>
<span style="color: #009900;"><span style="color: #000066;">line</span>=<span style="color: #ff0000;">&quot;--log-xml ${basedir}/build/logs/phpunit.xml</span>
<span style="color: #009900;">--log-pmd ${basedir}/build/logs/phpunit.pmd.xml</span>
<span style="color: #009900;">--log-metrics ${basedir}/build/logs/phpunit.metrics.xml</span>
<span style="color: #009900;">--coverage-xml  ${basedir}/build/logs/phpunit.coverage.xml</span>
<span style="color: #009900;">--coverage-html ${basedir}/build/coverage</span>
<span style="color: #009900;">AllTests&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/exec<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;build&quot;</span> <span style="color: #000066;">depends</span>=<span style="color: #ff0000;">&quot;php-documentor,phpcs,phpunit&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/project<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>This builds API documentation, runs the PHP Codesniffer and runs the unit tests, which in turn provides the code coverage, metrics, PMD and other statistics. That&#8217;s all there is to it!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felixdv.com/2009/02/07/setting-up-phpundercontrol/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Dutch PHP Conference 2009 dates!</title>
		<link>http://blog.felixdv.com/2009/01/08/dutch-php-conference-2009-dates/</link>
		<comments>http://blog.felixdv.com/2009/01/08/dutch-php-conference-2009-dates/#comments</comments>
		<pubDate>Thu, 08 Jan 2009 16:20:28 +0000</pubDate>
		<dc:creator>felixdv</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[2009]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[dpc]]></category>
		<category><![CDATA[dpc2009]]></category>
		<category><![CDATA[Dutch PHP Conference]]></category>

		<guid isPermaLink="false">http://felix.phpbelgium.be/blog/?p=138</guid>
		<description><![CDATA[As ever, I&#8217;m excited for a new year, and with that comes a new year of PHP conferences. Last year, the Dutch PHP Conference really amazed me with their speakers, talks, organization and location. I got to know exciting new technologies, met a lot of new friends and got to see old friends again. Add [...]]]></description>
			<content:encoded><![CDATA[<p>As ever, I&#8217;m excited for a new year, and with that comes a new year of PHP conferences. Last year, the <a title="Dutch PHP Conference" href="http://www.phpconference.nl">Dutch PHP Conference</a> really amazed me with their speakers, talks, organization and location<a title="Dutch PHP Conference" href="http://www.phpconference.nl"></a>. I got to know exciting new technologies, met a lot of new friends and got to see old friends again. Add the amazing social events (that was a memorable football match, france vs the netherlands!) to the mix and you get the recipe for a superb PHP conference.</p>
<p>Of course the good folks at <a title="Ibuildings - The PHP Professionals" href="http://www.ibuildings.nl">Ibuildings</a> will be organising the Dutch PHP Conference (DPC) again in 2009, and the dates are known! So grab your agendas and put a big mark on <strong>June 11-13 2009</strong> (that&#8217;s right, 3 days of conference goodness!). That&#8217;s all there is for now, but more details will undoubtly follow.</p>
<p>One thing that I&#8217;m particularly proud of: last year I could only admire a <a title="Ibuildings - The PHP Professionals" href="http://www.ibuildings.nl">company</a> that provides professional PHP services, is very active in the PHP community and delivers a top-notch PHP conference. This year however, I can say that since recently, I&#8217;ve joined Ibuildings. Seeing how they are engaged in enterprise PHP and everything around it makes me feel glad about the choice I&#8217;ve made to join &#8216;em.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felixdv.com/2009/01/08/dutch-php-conference-2009-dates/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Seven Things &#8211; Tagged by Ivo</title>
		<link>http://blog.felixdv.com/2009/01/04/seven-things-tagged-by-ivo/</link>
		<comments>http://blog.felixdv.com/2009/01/04/seven-things-tagged-by-ivo/#comments</comments>
		<pubDate>Sun, 04 Jan 2009 10:48:46 +0000</pubDate>
		<dc:creator>felixdv</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[about me]]></category>
		<category><![CDATA[seven things]]></category>
		<category><![CDATA[tagged]]></category>

		<guid isPermaLink="false">http://felix.phpbelgium.be/blog/?p=137</guid>
		<description><![CDATA[To my surprise I got tagged by Ivo and while it is the cool thing to say that you don&#8217;t like these tagging memes, I&#8217;m going to accept this one with pleasure! Here are seven things you may not know about me:

I actually started out as a linux system engineer after high school, but decided [...]]]></description>
			<content:encoded><![CDATA[<p class="excerpt">To my surprise I got <a title="Seven Things - Tagged by Matthew" href="http://www.jansch.nl/2009/01/03/seven-things-tagged-by-matthew/">tagged by Ivo</a> and while it is the cool thing to say that you don&#8217;t like these tagging memes, I&#8217;m going to accept this one with pleasure! Here are seven things you may not know about me:</p>
<ul>
<li>I actually started out as a linux system engineer after high school, but decided to start an education in graphical digital design. Within one year I knew for sure that I didn&#8217;t want to design all my life, but still continued to get my degree. The second I finished school, I returned back to linux stuff and (PHP) development.</li>
<li>I love to cook and enjoy a good glass of wine. For this, I&#8217;m still concidering some sort of cooking class.</li>
<li>For about 8 years, I played the piano (starting when I was 5 year old), violin and saxophone. Unfortunately, I didn&#8217;t find the time to continue this, but I&#8217;d love to pick up playing piano at some point.</li>
<li>When I was younger, I was sure I was going to be a paleontologist, and I collected and read about anything I could put my hands on about paleontology and dinos.</li>
<li>My first experience with PHP was on a summer job, where they needed a site + CMS. I figured I&#8217;d learn PHP on the way and somehow PHP was flexible enough for me to pull it off and deliver a working site.</li>
<li>I&#8217;m quite a fan of jazz music, this is mainly influenced by my dad, who enjoys playing jazz piano. <a href="http://en.wikipedia.org/wiki/Thelonious_Monk">Thelonious Monk</a> is one of my favorite jazz artists.</li>
<li>I always thought breaking something would be a very cool experience (because of the adrenaline boost and such), but I did come back on that opinion when I broke my arm 2 times in 4 months time.</li>
</ul>
<p>Right now about anyone in the PHP is already tagged so I&#8217;m going to go with people that didn&#8217;t yet write their seven things and hope this blog post gets published before they do. And besides, they&#8217;re just all nice guys too :-)</p>
<ul>
<li><a href="http://www.helgi.ws/">Helgi Þormar Þorbjörnsson</a> &#8211; because he likes to say meow (and also because he likes PEARs)</li>
<li><a href="http://blog.somabo.de/">Marcus Boerger</a> &#8211; For his work on SPL, and enjoyed meeting him at ZendCon &#8216;08</li>
<li><a href="http://ralphschindler.com/">Ralph Schindler</a> &#8211; For getting up at around 5am for helping out on our <a href="http://bughuntday.org/">Bughuntday</a></li>
<li><a href="http://blog.thepimp.net/">Pierre-Alain Joye</a> &#8211; For helping me out with starting to write PHPT tests</li>
<li><a href="http://www.nexdot.net/blog/">Christian Flickinger</a> &#8211; For letting me meet the Double double animal style burger at ZendCon &#8216;08</li>
<li><a href="http://schlueters.de/blog/">Johannes Schlüter</a> &#8211; Because I want to see if he&#8217;ll actually do this :)</li>
<li>Thijs Feryn &#8211; Because I hope he will again start a blog and share his ideas with the rest of us</li>
</ul>
<p>And here&#8217;s the rules I&#8217;m supposed to pass on to them:</p>
<ul>
<li>Link your original tagger(s), and list these rules on your blog.</li>
<li>Share seven facts about yourself in the post &#8211; some random, some wierd.</li>
<li>Tag seven people at the end of your post by leaving their names and the     links to their blogs.</li>
<li>Let them know they&#8217;ve been tagged by leaving a comment on their blogs     and/or Twitter.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.felixdv.com/2009/01/04/seven-things-tagged-by-ivo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ibuildings announces &#8216;PHP Center of Expertise&#8217;</title>
		<link>http://blog.felixdv.com/2008/09/10/ibuildings-announces-php-center-of-expertise/</link>
		<comments>http://blog.felixdv.com/2008/09/10/ibuildings-announces-php-center-of-expertise/#comments</comments>
		<pubDate>Wed, 10 Sep 2008 22:47:10 +0000</pubDate>
		<dc:creator>felixdv</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[ibuildings]]></category>

		<guid isPermaLink="false">http://felix.phpbelgium.be/blog/?p=134</guid>
		<description><![CDATA[Ibuildings, the PHP professionals, had another great announcement to make today. Being the innovative company they are, they announced the &#8216;PHP Center of Expertise&#8217;. Ibuildings has a lot of very talented, community-involved people working over there and they have a great way of interacting with that PHP community through support for user groups and organizing [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Ibuildings" href="http://www.ibuildings.com"><img class="alignleft size-full wp-image-135" title="Ibuildings icon" src="http://felix.phpbelgium.be/blog/wp-content/uploads/2008/09/ibs_icon.jpg" alt="" width="56" height="67" /></a><a title="Ibuildings" href="http://www.ibuildings.com">Ibuildings</a>, the PHP professionals, had another <a title="Ibuildings blogs" href="http://www.ibuildings.com/blog/archives/1301-Building-a-PHP-Center-of-Expertise.html">great announcement</a> to make today. Being the innovative company they are, they announced the <em>&#8216;PHP Center of Expertise&#8217;</em>. Ibuildings has a lot of very talented, community-involved people working over there and they have a great way of interacting with that PHP community through support for user groups and organizing conferences or seminars. And that&#8217;s where the PHP Center of Expertise kicks in to bring those activities to the next level.</p>
<p>The PHP Center of Expertise (which isn&#8217;t a definitive name) will deal with all activities that involve PHP expertise, knowledge or community interaction. For example (from the <a title="Ibuildings blogs" href="http://www.ibuildings.com/blog/archives/1301-Building-a-PHP-Center-of-Expertise.html">Ibuildings blog</a>):</p>
<ul>
<li>Contributing to/supporting open source projects</li>
<li>Supporting user groups/communities</li>
<li>Organizing conferences/seminars</li>
<li>Developing training material</li>
<li>Forming and maintaining partnerships</li>
<li>Developing professional services</li>
</ul>
<p>About every point on the list is already something I&#8217;m loving to do in my spare time, and to see that Ibuildings is actually serious enough about those subjects to start a whole new department for it is great. I see fun initiatives where community members could actually cooperate to produce a knowledge platform that helps everyone in the PHP community forward. <a title="DragonBe" href="http://www.dragonbe.com">Michelangelo van Dam</a> already suggested doing podcasts, to give an example.</p>
<p>They already rock in being the number one PHP development and services company, and it&#8217;s just refreshing to see that they give back to the community in such a way. It&#8217;s a kind of mindset that you don&#8217;t encounter much with similar companies, but Ibuildings does it and is pretty successful in it. I&#8217;m curious to see the new expertise center initiative grow in the coming months!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felixdv.com/2008/09/10/ibuildings-announces-php-center-of-expertise/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile development with the Agilo for Scrum Trac plugin</title>
		<link>http://blog.felixdv.com/2008/08/23/agile-development-with-the-agilo-for-scrum-trac-plugin/</link>
		<comments>http://blog.felixdv.com/2008/08/23/agile-development-with-the-agilo-for-scrum-trac-plugin/#comments</comments>
		<pubDate>Sat, 23 Aug 2008 22:38:48 +0000</pubDate>
		<dc:creator>felixdv</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[trac]]></category>
		<category><![CDATA[workflow]]></category>

		<guid isPermaLink="false">http://felix.phpbelgium.be/blog/?p=132</guid>
		<description><![CDATA[Trac is a well known issue tracking system with an integrated wiki, version control browser and more. It allows for a more streamlined development process with software tickets, changeset views and roadmaps. An excellent fit for helping with PHP application development, for example.
Now, agile development has certainly proven its use in the PHP world, but [...]]]></description>
			<content:encoded><![CDATA[<p><a title="The Trac Project" href="http://trac.edgewall.org/">Trac</a> is a well known issue tracking system with an integrated wiki, version control browser and more. It allows for a more streamlined development process with software tickets, changeset views and roadmaps. An excellent fit for helping with PHP application development, for example.</p>
<p>Now, <a title="Agile development - wikipedia" href="http://en.wikipedia.org/wiki/Agile_software_development">agile development</a> has certainly proven its use in the <a title="PHP.net" href="http://www.php.net">PHP</a> world, but imho lacks a good tool to track everything that surrounds it. We&#8217;re talking about a way to manage user stories, requirements, tasks, time tracking, sprints, product and sprint backlogs, all in a preferably web-accessible way. The only ways I know of before are using Excell or the <a title="Phprojekt Scrum addon" href="https://thinkforge.org/gf/project/scrum/">Phprojekt Scrum addon</a> (which I honestly didn&#8217;t try yet, I&#8217;m not (yet) familiar with Phprojekt). Some weeks ago though, I stumbled on <a title="Agilo for Scrum" href="http://www.agile42.com/cms/pages/products/">Agilo for scrum</a>.</p>
<p>Agilo for scrum is a Trac plugin that uses the issue tracking system and extends it with features that enable you to follow a more agile development process. It&#8217;s still in early beta, but looks very promising already. It&#8217;s got an <a href="http://www.apache.org/licenses/LICENSE-2.0.html" target="new">Apache Software License 2.0</a> so you can always have a look under the open-source hood ;-) Installation is possible with a python egg, so you can <code>easy_install</code> the whole thing, provided you have the needed dependencies (matplotlib and the python imaging library, to name a few). After setup, Trac is modified quite substantially so let&#8217;s have an overview.</p>
<p>The main change is the new dashboard link, which hosts some nice graphs on the sprint burndown and displays resolved or open tickets.<br />
This is an example of such a burndown graph:<br />
<img class="aligncenter" src="http://media.agile42.com/content/Burndown_Chart_of_Agilo_for_Scrum.png" alt="Dashboard chart" width="485" height="350" /></p>
<p>Below the charts, the available actions and reports are displayed. Actions include creating requirements, tasks, user stories or bugs. Reports are for example the product backlog and sprint backlog. The great thing about the changed issue tracking is that it&#8217;s now possible to build relations between different registered issues. This way it&#8217;s possible to have a user story with different tasks linked to it.<br />
Every task now can be assigned to be fixed for a certain sprint:</p>
<p><img class="aligncenter size-full wp-image-133" title="User story" src="http://felix.phpbelgium.be/blog/wp-content/uploads/2008/08/afbeelding-3.png" alt="User story" width="500" height="188" /></p>
<p>Different Trac users can be assigned to development groups and the amount of possible spendable hours can be set on a per-day basis for each developer. This way it&#8217;s possible to see how much time something should need and how much developer time there&#8217;s still available to implement a feature. </p>
<p>It&#8217;s a pretty sweet enhancement to Trac, and although it isn&#8217;t totally ready for production use (yet), it&#8217;s worth to have a look and test it out, you might like it! More information can be found on the <a href="http://www.agile42.com">agile42</a> website.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felixdv.com/2008/08/23/agile-development-with-the-agilo-for-scrum-trac-plugin/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHPBelgium meeting 20/08/&#8217;08 review</title>
		<link>http://blog.felixdv.com/2008/08/21/phpbelgium-meeting-200808-review/</link>
		<comments>http://blog.felixdv.com/2008/08/21/phpbelgium-meeting-200808-review/#comments</comments>
		<pubDate>Thu, 21 Aug 2008 13:02:34 +0000</pubDate>
		<dc:creator>felixdv</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[august]]></category>
		<category><![CDATA[meeting]]></category>
		<category><![CDATA[phpbelgium]]></category>

		<guid isPermaLink="false">http://felix.phpbelgium.be/blog/?p=131</guid>
		<description><![CDATA[Last night PHPBelgium organized the second meeting since it was founded. It was located at the auditorium of the Artevelde college in Ghent, which seemed to be a very good but unfortunately hard-to-find venue. The meeting schedule was packed, but we had a lot of fun stuff to announce so we tried our best to [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://www.phpbelgium.be/images/phpbelgium_logo.png" alt="PHPBelgium logo" />Last night <a title="PHPBelgium" href="http://www.phpbelgium.be/">PHPBelgium</a> organized the second meeting since it was founded. It was located at the auditorium of the <a title="Artevelde college, google maps" href="http://maps.google.com/maps?f=q&amp;hl=en&amp;geocode=&amp;q=Arteveldehogeschool,+Mariakerke,+Oost-Vlaanderen+9030&amp;sll=51.086758,3.669949&amp;sspn=0.012077,0.038624&amp;ie=UTF8&amp;ll=51.088429,3.669949&amp;spn=0.012076,0.038624&amp;z=15&amp;iwloc=addr">Artevelde college in Ghent</a>, which seemed to be a very good but unfortunately hard-to-find venue. The meeting schedule was packed, but we had a lot of fun stuff to announce so we tried our best to fit it all in a 2 hour timescheme. We had about 31 attendees, which is a success given the fact that our last meeting only had 4 people!</p>
<p>First off, we could announce some of the things we have accomplished, such as organizing a <a title="PHP TestFest 2008" href="http://felix.phpbelgium.be/blog/2008/08/01/php-testfest-2008/">PHP TestFest</a> together with the <a title="phpGG" href="http://www.phpgg.nl">phpGG</a>. Then, <a title="Ivo Jansch" href="http://www.jansch.nl">Ivo Jansch</a> (one of our attendees!) was kind enough to raffle off a signed copy of his new book (&#8220;<a title="Guide to Enterprise PHP Development" href="http://phparch.com/c/books/id/9780973862188">Guide to Enterprise PHP Development</a>&#8220;) to one lucky person in the audience. A good way to start off the talks :-)</p>
<p>The first talk was given by me, and was called &#8220;<a title="Improved PHP development" href="http://www.slideshare.net/felixdv/improved-php-development-presentation">Improved PHP development</a>&#8220;. It takes a look at the different ways, methods and tools to improve your PHP development and take PHP development to a new level. Even though the talk was actually too long, the subject was very broad and could very well have taken a whole day to talk about. My intent was actually not to do this but have an overview of what can be done. I&#8217;m definitely planning more in-depth tutorials and talks for any of the subjects that were presented.</p>
<p>After a coffee break, we continued with <a title="DragonBe" href="http://www.dragonbe.com">Michelangelo van dam</a>&#8217;s talk on <a title="Extending Zend Framework" href="http://www.slideshare.net/PHPBelgium/extending-zend-framework-presentation/">Extending Zend Framework</a>. This presentation explained how you can extend <a title="Zend Framework" href="http://framework.zend.com">Zend Framework</a> classes to adapt them to your own needs. An example of this was the <a title="Zend_Translate" href="http://framework.zend.com/manual/en/zend.translate.html">Zend_Translate</a> adapter for storing translations in a database. A translation view helper was made to have this new translating functionality available in the view. It was an insightful and practical talk on what is possible with Zend Framework.</p>
<p>Next up, we raffled off an <a title="elePHPant" href="http://flickr.com/photos/felixdv/2580370654/">elePHPant</a> using a random number generating php script. One elePHPant now has a home with a happy new owner ;-)</p>
<p>To close the evening, we had one last special announcement to make: we were able to give away a free <a title="ZendCon" href="http://www.zendcon.com">ZendCon</a> ticket to one of the attendees! Of all the people that attended the meeting, some were interested (and could actually make the nessecary arrangements in such short notice!), so we had a question about one of our talks, with an extra question to make up the winner in case there was more than one correct answer. We&#8217;re happy to announce that Juliette Reinders Folmer has the opportunity to meet up with her fellow phpwomen collegues next month in Santa Clara, CA!</p>
<p>We all had a drink afterwards, lots of people got to meet eachother and there was a really happy mood. All things considered, we&#8217;ve done pretty good for a second event, and we can&#8217;t wait to organise more events, workshops and meetings like this in the near future! Thanks to everyone that could attend, and help spread the word to make PHP gain in the popularity it deserves! See you next time!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felixdv.com/2008/08/21/phpbelgium-meeting-200808-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
