<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:georss="http://www.georss.org/georss" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"><id>tag:blogger.com,1999:blog-28215292</id><updated>2010-03-01T21:53:12.610+01:00</updated><title type="text">DragonBe's PHP blog</title><subtitle type="html">Blogging about PHP and related technologies</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.dragonbe.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.dragonbe.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default?start-index=26&amp;max-results=25" /><author><name>DragonBe</name><uri>http://www.blogger.com/profile/12610668749799675317</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>160</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/dragonbe" /><feedburner:info uri="dragonbe" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/3.0/" /><logo>http://creativecommons.org/images/public/somerights20.gif</logo><entry><id>tag:blogger.com,1999:blog-28215292.post-289261723287086425</id><published>2010-02-03T19:11:00.002+01:00</published><updated>2010-02-04T22:15:29.456+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="phpbenelux" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="phpbnl10" /><title type="text">PHPBenelux conference 2010 wrapup</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_HhRzjL1_W1c/S2mx6u7RQoI/AAAAAAAACog/JziIvZyXyWc/s1600-h/phpbenelux_logo.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="77" src="http://3.bp.blogspot.com/_HhRzjL1_W1c/S2mx6u7RQoI/AAAAAAAACog/JziIvZyXyWc/s200/phpbenelux_logo.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="p1"&gt;This past weekend, Belgium was buzzing &lt;a href="http://www.php.net/"&gt;PHP&lt;/a&gt; all the way. &lt;a href="http://www.phpbenelux.eu/"&gt;PHPBenelux&lt;/a&gt; organized the first &lt;a href="http://conference.phpbenelux.eu/"&gt;annual international PHP conference&lt;/a&gt; in Belgium and it can be called a true success. Attendees and speakers coming from all parts of the world made this event a true international conference and I was truly happy to be a part of it, this time as member of the organization.&lt;/div&gt;&lt;div class="p1"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;b&gt;Preparation&lt;/b&gt;&lt;/div&gt;&lt;div class="p1"&gt;The months, weeks and certainly the days prior to the conference were hectic, stressful and sometimes energy draining. With lots of things that still needed to be done last minute, we have learned that we still have lots of room to improve ourselves for future events. But, as it is common to PHP development, we met our deadlines and saw everything was running smoothly.&lt;/div&gt;&lt;br /&gt;&lt;div class="p1"&gt;&lt;b&gt;Airport and train station runs&lt;/b&gt;&lt;/div&gt;&lt;div class="p1"&gt;The conference had a few international speakers on the list, for who we had to ensure a smooth ride to the conference hotel. &lt;a href="http://www.leftontheweb.com/"&gt;Stefan Koopmanschap&lt;/a&gt; picked up &lt;a href="http://blog.calevans.com/"&gt;Cal Evans&lt;/a&gt; at Schiphol. &lt;a href="http://blog.feryn.eu/"&gt;Thijs Feryn&lt;/a&gt; went down to Antwerp Central Station to pick up &lt;a href="http://fabien.potencier.org/"&gt;Fabien Potencier&lt;/a&gt;, and had to do this 3 times returning each time without Fabien (&lt;a href="http://blog.feryn.eu/2010/01/phpbenelux-conference-2010-in-retrospect"&gt;read his blog article about what happend&lt;/a&gt;). I myself went to Brussels International Airport to pick up &lt;a href="http://blog.wombert.de/"&gt;David Zülke&lt;/a&gt; and &lt;a href="http://merewood.org/"&gt;Rowan Merewood&lt;/a&gt; traveling together with &lt;a href="http://www.ben-waine.co.uk/blog/"&gt;Ben Waine&lt;/a&gt;.&lt;/div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;div class="p1"&gt;&lt;b&gt;Speaker's dinner and pre-conference social&lt;/b&gt;&lt;/div&gt;&lt;div class="p1"&gt;As is custom to events like this, we organized as speaker's dinner where we invited our speakers and sponsors to participate in this socializing event where everyone has the opportunity to get to know each other, discuss topics and exchange ideas. We headed out to &lt;a href="http://www.dagiovanni.be/"&gt;Da Giovanni&lt;/a&gt;, an Italian restaurant in the center of Antwerp that is known for it's overwhelming tacky design. Red-white blocked cloths everywhere: the shirts of the waiters, the tables and lamps. We had a decent meal and a very good laugh.&lt;/div&gt;&lt;div class="p1"&gt;Following the dinner we also organized a pre-conference social in &lt;a href="http://www.devagant.be/"&gt;De Vagant&lt;/a&gt;, one of Antwerp's most known Jenever locations. This was open for everyone that was in the area and could make it to the place. But tiredness and pre-conference jitters had this social ended well before midnight.&lt;/div&gt;&lt;div class="p1"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;b&gt;The conference&lt;/b&gt;&lt;/div&gt;&lt;div class="p1"&gt;Saturday was the big day, and what a day it was ! Sponsors arrived well in time to set up their booths and at about 8:30am the first attendees were coming in. Since it had snowed during the night, most attendees were a bit late so we started the sessions with a delay of 30 minutes (by lunch time we were already back on schedule).&lt;/div&gt;&lt;div class="p1"&gt;After a short introduction by &lt;a href="http://www.leftontheweb.com/"&gt;Stefan Koopmanschap&lt;/a&gt;, &lt;a href="http://derickrethans.nl/"&gt;Derick Rethans&lt;/a&gt; officially opened the conference with his keynote talk "The PHP Universe", which was well accepted by the audience (See reviews on &lt;a href="http://joind.in/1240"&gt;http://joind.in/1240&lt;/a&gt;). The following talks followed right after and filled the most of the conference.&lt;/div&gt;&lt;br /&gt;&lt;ul class="ul1"&gt;&lt;li class="li1"&gt;&lt;a href="http://fabien.potencier.org/"&gt;Fabien Potencier&lt;/a&gt; presented "&lt;a href="http://www.slideshare.net/fabpot/dependency-injection-with-php-53"&gt;Dependency Injection in PHP 5.2 and 5.3&lt;/a&gt;" (&lt;a href="http://joind.in/1241"&gt;http://joind.in/1241&lt;/a&gt;) in track 1 while &lt;a href="http://merewood.org/"&gt;Rowan Merewood&lt;/a&gt; talked about "&lt;a href="http://www.slideshare.net/rowan_m/living-with-legacy-code"&gt;Living with Legacy Code&lt;/a&gt;" (&lt;a href="http://joind.in/1242"&gt;http://joind.in/1242&lt;/a&gt;) in track 2&lt;/li&gt;&lt;li class="li1"&gt;&lt;a href="http://blog.wombert.de/"&gt;David Zülke&lt;/a&gt; presented "&lt;a href="http://www.slideshare.net/Wombert/the-state-of-soap-in-php-3029206"&gt;The State of SOAP in PHP&lt;/a&gt;" (&lt;a href="http://joind.in/1243"&gt;http://joind.in/1243&lt;/a&gt;) in track 1 while &lt;a href="http://walhalla.wordpress.com/"&gt;Paul Borgermans&lt;/a&gt; talked about "&lt;a href="http://www.slideshare.net/paulborgermans/get-the-most-out-of-solr-search-with-php"&gt;Get the most out of Solr search with PHP&lt;/a&gt;" (&lt;a href="http://joind.in/1244"&gt;http://joind.in/1244&lt;/a&gt;) in track 2&lt;/li&gt;&lt;li class="li1"&gt;&lt;a href="http://adviesenzo.nl/"&gt;Juliette Reinders Folmer&lt;/a&gt; presented "&lt;a href="http://adviesenzo.nl/examples/regex_roundup/"&gt;Reg-Ex Fu&lt;/a&gt;" (&lt;a href="http://joind.in/1245"&gt;http://joind.in/1245&lt;/a&gt;) in track 1 while &lt;a href="http://patrickallaert.blogspot.com/"&gt;Patrick Allaert&lt;/a&gt; and &lt;a href="http://davidemendolia.blogspot.com/"&gt;Davide Mendolia&lt;/a&gt; talked about "&lt;a href="http://www.slideshare.net/patrick.allaert/php-applicationsenvironments-monitoring-apm-pinba"&gt;PHP applications/environments monitoring: APM &amp;amp; Pinba&lt;/a&gt;" (&lt;a href="http://joind.in/1246"&gt;http://joind.in/1246&lt;/a&gt;) in track 2&lt;/li&gt;&lt;li class="li1"&gt;&lt;a href="http://blog.maartenballiauw.be/"&gt;Maarten Balliauw&lt;/a&gt; presented "&lt;a href="http://www.slideshare.net/maartenba/just-another-word-press-weblog-but-more-cloudy"&gt;Just another WordPress weblog, but more cloudy&lt;/a&gt;" (&lt;a href="http://joind.in/1247"&gt;http://joind.in/1247&lt;/a&gt;) in track 1 while &lt;a href="http://kore-nordmann.de/blog.html"&gt;Kore Nordmann&lt;/a&gt; talked about "PHPillow &amp;amp; CouchDB &amp;amp; PHP" (&lt;a href="http://joind.in/1248"&gt;http://joind.in/1248&lt;/a&gt;) in track 2&lt;/li&gt;&lt;li class="li1"&gt;&lt;a href="http://www.lornajane.net/"&gt;Lorna Mitchell&lt;/a&gt; presented "&lt;a href="http://www.slideshare.net/lornajane/passing-the-joel-test-in-the-php-world-phpbnl10"&gt;Passing the Joel Test in the PHP World&lt;/a&gt;" (&lt;a href="http://joind.in/1249"&gt;http://joind.in/1249&lt;/a&gt;) in track 1 while&lt;span class="Apple-converted-space"&gt;  &lt;/span&gt;&lt;a href="http://www.jansch.nl/"&gt;Ivo Jansch&lt;/a&gt; talked about "&lt;a href="http://www.slideshare.net/ijansch/php-and-the-cloud-phpbenelux-conference"&gt;PHP and the Cloud&lt;/a&gt;" (&lt;a href="http://joind.in/1250"&gt;http://joind.in/1250&lt;/a&gt;) in track 2&lt;/li&gt;&lt;/ul&gt;&lt;div class="p1"&gt;&lt;b&gt;Remote presentation&lt;/b&gt;&lt;/div&gt;&lt;div class="p1"&gt;Due to bad weather, &lt;a href="http://www.zend.com/"&gt;Zend&lt;/a&gt;'s speaker &lt;a href="http://www.zend.com/en/store/education/certification/yellow-pages.php/show/search#show-ClientCandidateID=ZEND002487"&gt;Eric Ritchie&lt;/a&gt; couldn't make it to the conference, but by using &lt;a href="http://webex.com/"&gt;WebEx&lt;/a&gt; we were able to have him present his talk "&lt;a href="http://www.slideshare.net/touringhaggis/dynamic-pdfs-with-zend-framework-and-java-bridge"&gt;Generating dynamic PDFs using Zend Framework and JavaBridge&lt;/a&gt;" (&lt;a href="http://joind.in/1268"&gt;http://joind.in/1268&lt;/a&gt;) from his office as though he was standing in the room. Although it was a bit tough to set up, I have to say it was successful fix for &lt;a href="http://www.zend.com/"&gt;Zend&lt;/a&gt;, &lt;a href="http://webex.com/"&gt;WebEx&lt;/a&gt; and &lt;a href="http://www.phpbenelux.eu/"&gt;us&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;&lt;div class="p1"&gt;One downside of this approach is that &lt;a href="http://www.zend.com/en/store/education/certification/yellow-pages.php/show/search#show-ClientCandidateID=ZEND002487"&gt;Eric&lt;/a&gt; didn't had the chance to interact with the attendees himself during or after his keynote and as shown in the comments on &lt;a href="http://joind.in/"&gt;joind.in&lt;/a&gt; there were still a few questions that the attendees wanted to clarify with &lt;a href="http://www.zend.com/en/store/education/certification/yellow-pages.php/show/search#show-ClientCandidateID=ZEND002487"&gt;Eric&lt;/a&gt;. So, in a technical perspective it can be called a success, but for the conference spirit it has a downside.&lt;/div&gt;&lt;div class="p1"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;b&gt;Closing Keynote&lt;/b&gt;&lt;/div&gt;&lt;div class="p1"&gt;My personal mentor and dear friend &lt;a href="http://blog.calevans.com/"&gt;Cal Evans&lt;/a&gt; was given the floor to present his closing keynote "&lt;a href="http://blog.calevans.com/2010/02/03/open-teams/"&gt;Open Teams&lt;/a&gt;" (&lt;a href="http://joind.in/1251"&gt;http://joind.in/1251&lt;/a&gt;) which was unlike the other talks not a technical subject, but non-the-less a very valuable view on how managers and developers can improve the way they operate. Unfortunately I missed this talk, but I'm looking forward seeing it on an other occasion. You can contact &lt;a href="http://blog.calevans.com/"&gt;Cal&lt;/a&gt; and invite him to give this talk for the managers in your company, so your company can become "Company Awesome" everyone wants to work for.&lt;/div&gt;&lt;br /&gt;&lt;div class="p1"&gt;&lt;b&gt;Ibuildings Conference Social&lt;/b&gt;&lt;/div&gt;&lt;div class="p1"&gt;The people of &lt;a href="http://www.ibuildings.com/"&gt;Ibuildings&lt;/a&gt; were really kind to sponsor the after-social event, held in the exhibition hall. Besides drinks and very delicious food, our other sponsors had some goodies to give away and so people walked away with an iPhone and &lt;a href="http://www.zend.com/en/products/studio/"&gt;Zend Studio&lt;/a&gt; licenses, a ticket for &lt;a href="http://conference.phpbenelux.eu/"&gt;PHPBenelux Conference 2011&lt;/a&gt;, a ticket for &lt;a href="http://phpconference.co.uk/"&gt;PHPUK 2010&lt;/a&gt;, Windows 7 licenses, a netbook (provided by &lt;a href="http://www.nocus.eu/"&gt;Nocus&lt;/a&gt;) and of course elePHPants. So a big applause to the winners and of course our sponsors for providing these awesome prizes.&lt;/div&gt;&lt;div class="p1"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;b&gt;Sponsors&lt;/b&gt;&lt;/div&gt;&lt;div class="p1"&gt;This great conference wasn't possible without the help of our sponsors, and we all thank them for making this first conference the best start of 2010. Thank you !!!&lt;/div&gt;&lt;div class="p1"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;Our sponsors: &lt;a href="http://www.zend.com/"&gt;Zend&lt;/a&gt; / &lt;a href="http://www.dataflow.be/"&gt;Dataflow&lt;/a&gt;, &lt;a href="http://www.microsoft.com/"&gt;Microsoft&lt;/a&gt;, &lt;a href="http://www.ibuildings.com/"&gt;Ibuildings&lt;/a&gt;, &lt;a href="http://www.combell.com/"&gt;Combell&lt;/a&gt;, &lt;a href="http://www.telenet.be/"&gt;Telenet&lt;/a&gt;, &lt;a href="http://cu.be/"&gt;Cu.Be&lt;/a&gt;, &lt;a href="http://www.servergrove.com/"&gt;ServerGrove&lt;/a&gt; and &lt;a href="http://www.webclusive.com/"&gt;WEBclusive&lt;/a&gt;.&lt;/div&gt;&lt;div class="p1"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_HhRzjL1_W1c/S2m2bhuejHI/AAAAAAAACok/7qbWL1HdDAU/s1600-h/phpbenelux2010_sponsors_small.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_HhRzjL1_W1c/S2m2bhuejHI/AAAAAAAACok/7qbWL1HdDAU/s1600/phpbenelux2010_sponsors_small.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;b&gt;PHP is hot !&lt;/b&gt;&lt;/div&gt;&lt;div class="p1"&gt;Apparently PHP is hot, hotter then ever. At the conference, a lot of people not only attended the great sessions, but they were also looking for new PHP developers to join their teams. And they were not just giving you a great job, they even offered some real nice goodies when you signed up:&lt;/div&gt;&lt;ul class="ul1"&gt;&lt;li class="li1"&gt;&lt;a href="http://www.telenet.be/"&gt;Telenet&lt;/a&gt;: HTC Hero (till Friday, February 5 2010) - &lt;a href="mailto:info@eservices.be"&gt;Apply here&lt;/a&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;a href="http://www.ibuildings.com/"&gt;Ibuildings&lt;/a&gt;: Apple iPad (till Friday, March 15 2010) - &lt;a href="http://www.ibuildings.com/challenge"&gt;Apply here&lt;/a&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;a href="http://www.dataflow.be/"&gt;DataFlow&lt;/a&gt;: Apple iPhone and 3 Zend Studio Licenses (only on the conference day) - &lt;a href="mailto:jobs@dataflow.be"&gt;Apply here&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="p1"&gt;If you're a company and you're looking for PHP Rock stars, see how you can persuade them to at least talk to you. Make sure you have seen the slides of &lt;a href="http://blog.calevans.com/"&gt;Cal Evans&lt;/a&gt;'s talk about "&lt;a href="http://blog.calevans.com/2010/02/03/open-teams/"&gt;Open Teams&lt;/a&gt;", cause if you can offer this, you do have the advantage !&lt;/div&gt;&lt;div class="p1"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;b&gt;PHPBenelux Team&lt;/b&gt;&lt;/div&gt;&lt;div class="p1"&gt;This conference succeeded because of the never-failing, passionate help and support by the whole PHPBenelux team. I have worked in many teams already, but I have to say that working with these guys on a remote basis (all using Skype, Google docs and e-mail as main communication and collaboration tools) worked very well (as to emphasize what &lt;a href="http://blog.calevans.com/"&gt;Cal Evans&lt;/a&gt; stated in his "&lt;a href="http://blog.calevans.com/2010/02/03/open-teams/"&gt;Open Teams&lt;/a&gt;" talk) and everyone was there to see the result.&lt;/div&gt;&lt;div class="p1"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;Teamies, thanks a lot for this wonderful experience and I'm looking forward doing the things we do best: community relations, meetings and events ! You guys rock !!!&lt;/div&gt;&lt;div class="p1"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://farm5.static.flickr.com/4027/4322852781_5dc2deeeff.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://farm5.static.flickr.com/4027/4322852781_5dc2deeeff.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;PHPBenelux team by &lt;a href="http://www.twitter.com/phpcodemonkey"&gt;@phpcodemonkey&lt;/a&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;/div&gt;&lt;div class="p1"&gt;This was the first conference that I not only attended, but was actually involved behind the scenes. It was a great experience and I have now more respect to organizers of bigger conferences now that we know what kind of challenges they have to overcome.&lt;/div&gt;&lt;div class="p1"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;Read what others had to say about our conference:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://joind.in/event/110"&gt;Joind.in comments&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://search.twitter.com/search?q=phpbnl10"&gt;What people twittered&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.flickr.com/photos/tags/phpbnl10"&gt;Flickr images&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.google.com/search?hl=en&amp;amp;q=phpbenelux+conference+2010"&gt;What google has found about ths conference&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="p1"&gt;I had a blast and I hope you all enjoyed it. See you all next year at the &lt;a href="http://conference.phpbenelux.eu/"&gt;PHPBenelux Conference 2011&lt;/a&gt;, and let us know how to improve ourselves for next years' conference at &lt;a href="http://joind.in/event/phpbnl10"&gt;joind.in&lt;/a&gt; !!!&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28215292-289261723287086425?l=www.dragonbe.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dragonbe/~4/FqRo2cUxuY4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dragonbe.com/feeds/289261723287086425/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.dragonbe.com/2010/02/phpbenelux-conference-2010-wrapup.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/289261723287086425" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/289261723287086425" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dragonbe/~3/FqRo2cUxuY4/phpbenelux-conference-2010-wrapup.html" title="PHPBenelux conference 2010 wrapup" /><author><name>DragonBe</name><uri>http://www.blogger.com/profile/12610668749799675317</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16969274511863708634" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_HhRzjL1_W1c/S2mx6u7RQoI/AAAAAAAACog/JziIvZyXyWc/s72-c/phpbenelux_logo.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><georss:point>51.1516947 4.4339268</georss:point><feedburner:origLink>http://www.dragonbe.com/2010/02/phpbenelux-conference-2010-wrapup.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-28215292.post-4378194101663043297</id><published>2010-01-07T17:22:00.000+01:00</published><updated>2010-01-07T17:22:01.518+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="tutorial" /><category scheme="http://www.blogger.com/atom/ns#" term="data model" /><category scheme="http://www.blogger.com/atom/ns#" term="zend framework" /><title type="text">Zend Framework data models</title><content type="html">I was struggling getting my data models (as described in the &lt;a href="http://framework.zend.com/docs/quickstart"&gt;Zend Framework Quickstart&lt;/a&gt;) to work with relations. My first solution was to create a database view that merged that data using joins to collect this data in a format that I could use in my data models. This was going great until I looked at my database where it contained over 20 views (along with 20 data models, mappers and db table gateways) ! So I said to myself there had to be another way.&lt;br /&gt;&lt;br /&gt;Fortunately there was a solution, hinted by &lt;a href="http://felix.phpbelgium.be/blog/"&gt;Felix De Vliegher&lt;/a&gt; on &lt;a href="http://irc.freenode.net/"&gt;IRC&lt;/a&gt;. He pointed me to the &lt;a href="http://framework.zend.com/"&gt;Zend Framework&lt;/a&gt; &lt;a href="http://framework.zend.com/manual/en/zend.db.table.relationships.html"&gt;Zend_Db_Table Relationships page&lt;/a&gt; on the &lt;a href="http://framework.zend.com/manual/en/"&gt;Zend Framework online manual&lt;/a&gt;. And although it's clearly specified how things work, I struggled a bit to see how each component was linked to the other and when I should use what.&lt;br /&gt;&lt;br /&gt;So, I decided to work out a small application to test and support this relationship modeling.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Step 1: Preparation&lt;/b&gt;&lt;/span&gt; &lt;br /&gt;Let's start with creating a new &lt;a href="http://framework.zend.com/"&gt;Zend Framework&lt;/a&gt; project that we call "datamodels".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;zf create project datamodels&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This creates a new Zend Framework project that we can use to showcase these examples. We add a few directories to the application structure to store our documentation, our database and our schemas.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_HhRzjL1_W1c/S0XE7gO0rGI/AAAAAAAACoM/X5og_Jg3G0E/s1600-h/application_structure.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://1.bp.blogspot.com/_HhRzjL1_W1c/S0XE7gO0rGI/AAAAAAAACoM/X5og_Jg3G0E/s400/application_structure.png" width="162" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;These are four tables all related to each other that we use to base our tutorial and test upon.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_HhRzjL1_W1c/S0W8QHZqYUI/AAAAAAAACoE/MBobDBrzGM8/s1600-h/sample_diagram.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="155" src="http://1.bp.blogspot.com/_HhRzjL1_W1c/S0W8QHZqYUI/AAAAAAAACoE/MBobDBrzGM8/s400/sample_diagram.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Translated into SQLite3 this looks like this:&lt;br /&gt;&lt;pre class="prettyprint"&gt;-- filename: schema.sqlite.sql -- &lt;br /&gt;&lt;/pre&gt;&lt;pre class="prettyprint"&gt;create table `user` (&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; `id` integer primary key autoincrement,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; `username` text not null,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; `password` text not null&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;create table `contact` (&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; `id` integer primary key autoincrement,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; `user_id` integer not null,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; `email` text not null,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; `phone` text null,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; `fax` text null&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;create table `address` (&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; `id` integer primary key autoincrement,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; `type_id` integer not null default 1,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; `user_id` integer not null,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; `address1` text not null,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; `address2` text null,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; `city` text not null,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; `state` text null,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; `zip` text not null,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; `country` text not null&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;create table `address_type` (&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; `id` integer primary key autoincrement,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; `type` text not null&lt;br /&gt;);&lt;br /&gt;&lt;/pre&gt;Creating the SQLite3 database is now easy as 1,2,3. Just from command line execute &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sqlite3 ./data/db/datamodels.db &amp;amp;lt; schema.sqlite.sql&lt;/span&gt; and see the magic happen. Our database is set and ready to use.&lt;br /&gt;&lt;br /&gt;Our test data is also stored in a file, it's contents can be found here:&lt;br /&gt;&lt;pre class="prettyprint"&gt;-- filename: data.sqlite.sql --&lt;br /&gt;&lt;br /&gt;-- Data for user table --&lt;br /&gt;INSERT INTO `user` &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; VALUES (1, 'testuser1', 'test123');&lt;br /&gt;INSERT INTO `user` &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; VALUES (2, 'testuser2', 'test234');&lt;br /&gt;&lt;br /&gt;-- Data for contact table --&lt;br /&gt;INSERT INTO `contact` &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; VALUES (1, 1, 'test1@example.com', '1-800-555-1234', '1-800-555-1230');&lt;br /&gt;INSERT INTO `contact` &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; VALUES (2, 2, 'test2@example.com', '1-800-555-2234', '1-800-555-2230');&lt;br /&gt;&lt;br /&gt;-- Data for address table --&lt;br /&gt;INSERT INTO `address`&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; VALUES (1, 1, 1, '1 Test Home', '', 'Testtown', 'ZF', '1234', 'PHP');&lt;br /&gt;INSERT INTO `address`&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; VALUES (2, 1, 2, '2 Test Home', '', 'Testtown', 'ZF', '1234', 'PHP');&lt;br /&gt;INSERT INTO `address`&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; VALUES (3, 2, 2, 'Test Corp, LTD', '4 Test Ave', 'Testtown', 'ZF', '1234', 'PHP');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;-- Data for address_type table --&lt;br /&gt;INSERT INTO `address_type`&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; VALUES (1, 'Home address');&lt;br /&gt;INSERT INTO `address_type`&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; VALUES (2, 'Billing address');&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In application/configs/application.ini we need to add the following lines in order to use our newly generated database:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;[production]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;resources.db.adapter = "Pdo_SQLite"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;resources.db.params.dbname = APPLICATION_PATH "/../data/db/datamodels.db"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You also need to define our "Default" namespace in the application bootstrap file Bootstrap.php. This is done by adding the following lines there.&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;protected function _initAutoload()&lt;br /&gt;    {&lt;br /&gt;        $autoloader = new Zend_Application_Module_Autoloader(array (&lt;br /&gt;            'namespace' =&amp;gt; 'Default',&lt;br /&gt;            'basePath' =&amp;gt; APPLICATION_PATH,&lt;br /&gt;        ));&lt;br /&gt;        return $autoloader;&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Creating the four data models along with their mappers and table gateways is a bit of work so I've provided the application as-is on a public SVN repository (&lt;a href="https://svn2.hosted-projects.com/in2it/datamodels/tags/step_1"&gt;https://svn2.hosted-projects.com/in2it/datamodels/tags/step_1&lt;/a&gt;). You can export it and start from there.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Step 2: Displaying a user listing&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;We want to display a listing of users with their contact details and the number of addresses they have, more or less like the following table:&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;             &lt;th&gt;Username&lt;br /&gt;&lt;/th&gt;             &lt;th&gt;E-mail&lt;br /&gt;&lt;/th&gt;             &lt;th&gt;Phone&lt;br /&gt;&lt;/th&gt;             &lt;th&gt;Fax&lt;br /&gt;&lt;/th&gt;             &lt;th&gt;# addresses&lt;br /&gt;&lt;/th&gt;         &lt;/tr&gt;&lt;tr&gt;             &lt;td&gt;testuser1&lt;br /&gt;&lt;/td&gt;             &lt;td&gt;test1@example.com&lt;br /&gt;&lt;/td&gt;             &lt;td&gt;1-800-555-1234&lt;br /&gt;&lt;/td&gt;             &lt;td&gt;1-800-555-1230&lt;br /&gt;&lt;/td&gt;             &lt;td&gt;1&lt;br /&gt;&lt;/td&gt;         &lt;/tr&gt;&lt;tr&gt;             &lt;td&gt;testuser2&lt;br /&gt;&lt;/td&gt;             &lt;td&gt;test2@example.com&lt;br /&gt;&lt;/td&gt;             &lt;td&gt;1-800-555-2234&lt;br /&gt;&lt;/td&gt;             &lt;td&gt;1-800-555-2230&lt;br /&gt;&lt;/td&gt;             &lt;td&gt;2&lt;br /&gt;&lt;/td&gt;         &lt;/tr&gt;&lt;/tbody&gt; &lt;/table&gt;&lt;br /&gt;As you can see now, with this listing we have 3 tables combined and without some relational information between the models it's hard to get this kind of listing.&lt;br /&gt;&lt;br /&gt;Let's set up our dbTable classes to work with relationships.&lt;br /&gt;&lt;pre class="prettyprint"&gt;class Default_Model_DbTable_User extends Zend_Db_Table_Abstract&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected $_name = 'user'; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected $_dependentTables = array (&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'Default_Model_DbTable_Contact',&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'Default_Model_DbTable_Address',&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class Default_Model_DbTable_AddressType extends Zend_Db_Table_Abstract&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected $_name = 'address_type'; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected $_dependentTables = array ('Default_Model_DbTable_Address');&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class Default_Model_DbTable_Contact extends Zend_Db_Table_Abstract&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected $_name = 'contact';&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected $_referenceMap = array (&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'User' =&amp;gt; array (&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'columns' =&amp;gt; array ('user_id'),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'refTableClass' =&amp;gt; 'Default_Model_DbTable_User',&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'refColumns' =&amp;gt; array ('id'),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class Default_Model_DbTable_Address extends Zend_Db_Table_Abstract&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected $_name = 'address'; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected $_referenceMap = array (&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'User' =&amp;gt; array (&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'columns' =&amp;gt; array ('user_id'),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'refTableClass' =&amp;gt; 'Default_Model_DbTable_User',&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'refColumns' =&amp;gt; array ('id'),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'Type' =&amp;gt; array (&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'columns' =&amp;gt; array ('type_id'),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'refTableClass' =&amp;gt; 'Default_Model_DbTable_AddressType',&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'refColumns' =&amp;gt; array ('id'),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In order to use these relations, we create a new model and mapper for listing these accounts.&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;class Default_Model_Accounts extends Default_Model_Abstract&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected $_username;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected $_email;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected $_phone;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected $_fax;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected $_addressCount;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function getUsername ()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $this-&amp;gt;_username;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function setUsername ($username)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $this-&amp;gt;_username = (string) $username;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $this;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function getEmail ()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $this-&amp;gt;_email;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function setEmail ($email)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $this-&amp;gt;_email = (string) $email;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $this;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function getPhone ()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $this-&amp;gt;_phone;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function setPhone ($phone)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $this-&amp;gt;_phone = (string) $phone;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $this;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function getFax ()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $this-&amp;gt;_fax;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function setFax ($fax)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $this-&amp;gt;_fax = (string) $fax;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $this;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function getAddressCount ()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $this-&amp;gt;_addressCount;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function setAddressCount ($addressCount)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $this-&amp;gt;_addressCount = (int) $addressCount;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $this;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function getMapper()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (null === $this-&amp;gt;_mapper) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $this-&amp;gt;setMapper('Default_Model_Mapper_Accounts');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $this-&amp;gt;_mapper;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function populate($row)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (is_array($row)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $row = new ArrayObject($row, ArrayObject::ARRAY_AS_PROPS);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (isset ($row-&amp;gt;id)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $this-&amp;gt;setId($row-&amp;gt;id);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (isset ($row-&amp;gt;username)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $this-&amp;gt;setUsername($row-&amp;gt;username);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (isset ($row-&amp;gt;email)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $this-&amp;gt;setEmail($row-&amp;gt;email);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (isset ($row-&amp;gt;phone)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $this-&amp;gt;setPhone($row-&amp;gt;phone);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (isset ($row-&amp;gt;fax)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $this-&amp;gt;setFax($row-&amp;gt;fax);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function toArray()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return array (&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'id' =&amp;gt; $this-&amp;gt;getId(),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'username' =&amp;gt; $this-&amp;gt;getUsername(),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'email' =&amp;gt; $this-&amp;gt;getEmail(),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'phone' =&amp;gt; $this-&amp;gt;getPhone(),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'fax' =&amp;gt; $this-&amp;gt;getFax(),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'address_count' =&amp;gt; $this-&amp;gt;getAddressCount(),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class Default_Model_Mapper_Accounts extends Default_Model_Mapper_Abstract&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function getDbTable()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (null === $this-&amp;gt;_dbTable) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $this-&amp;gt;setDbTable('Default_Model_DbTable_User');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $this-&amp;gt;_dbTable;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function fetchAll($className, $where = null, $order = null, $count = null, $offset = null)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $entries = array ();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $model = null;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!is_string($className)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; require_once 'Zend/Exception.php';&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new Zend_Exception('Model class name should be a string');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (is_string($className)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!class_exists($className)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; require_once 'Zend/Exception.php';&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new Zend_Exception('Non-existing model class name provided');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (null !== ($resultSet = $this-&amp;gt;getDbTable()-&amp;gt;fetchAll($where, $order, $count, $offset))) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach ($resultSet as $row) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $model = new $className;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!$model instanceof Default_Model_Abstract) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; require_once 'Zend/Exception.php';&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new Zend_Exception('Invalid model class provided');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // let's get contact details first&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $contacts = $row-&amp;gt;findDependentRowset(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'Default_Model_DbTable_Contact',&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'User'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $contact = $contacts-&amp;gt;current();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $model-&amp;gt;populate($contact);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unset ($contacts, $contact);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // let's see how many addresses this contact has&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $addresses = $row-&amp;gt;findDependentRowset(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'Default_Model_DbTable_Address',&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'User'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $addressCount = count($addresses);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $model-&amp;gt;setAddressCount($addressCount);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unset ($addresses, $addressCount);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // now it's time to add our user details to the model&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $model-&amp;gt;populate($row);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $entries[] = $model;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unset ($model);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $entries;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And to view our completed table, we need to modify our view partial userlisting.phtml:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;td&amp;gt;&amp;lt;?php echo $this-&amp;gt;escape($this-&amp;gt;username) ?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;td&amp;gt;&amp;lt;?php echo $this-&amp;gt;escape($this-&amp;gt;email) ?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;td&amp;gt;&amp;lt;?php echo $this-&amp;gt;escape($this-&amp;gt;phone) ?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;td&amp;gt;&amp;lt;?php echo $this-&amp;gt;escape($this-&amp;gt;fax) ?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;td&amp;gt;&amp;lt;?php echo $this-&amp;gt;escape($this-&amp;gt;address_count) ?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now we have our table set as we want it:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_HhRzjL1_W1c/S0YJPiEqHwI/AAAAAAAACoU/g43_1zWhrg8/s1600-h/user_listing_result.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="116" src="http://4.bp.blogspot.com/_HhRzjL1_W1c/S0YJPiEqHwI/AAAAAAAACoU/g43_1zWhrg8/s400/user_listing_result.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;You can download this step from the repo to see the changes yourself: &lt;a href="https://svn2.hosted-projects.com/in2it/datamodels/tags/step_2"&gt;https://svn2.hosted-projects.com/in2it/datamodels/tags/step_2&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Once you have figured out how these relationships work, you can extends your model capabilities without resorting to other solutions (like using database views) or maintaining crappy code.&lt;br /&gt;&lt;br /&gt;On the other hand, It would be nice if I could use my already created models with their functionality in one go, so I can link my datamodels instead of my data sources. Need to figure this one out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28215292-4378194101663043297?l=www.dragonbe.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dragonbe/~4/blp5dOVEmSw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dragonbe.com/feeds/4378194101663043297/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.dragonbe.com/2010/01/zend-framework-data-models.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/4378194101663043297" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/4378194101663043297" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dragonbe/~3/blp5dOVEmSw/zend-framework-data-models.html" title="Zend Framework data models" /><author><name>DragonBe</name><uri>http://www.blogger.com/profile/12610668749799675317</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16969274511863708634" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_HhRzjL1_W1c/S0XE7gO0rGI/AAAAAAAACoM/X5og_Jg3G0E/s72-c/application_structure.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://www.dragonbe.com/2010/01/zend-framework-data-models.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-28215292.post-8687778627591665893</id><published>2009-12-29T12:01:00.000+01:00</published><updated>2009-12-29T12:01:38.174+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cal evans" /><category scheme="http://www.blogger.com/atom/ns#" term="keith casey" /><category scheme="http://www.blogger.com/atom/ns#" term="matthew weier o phinney" /><category scheme="http://www.blogger.com/atom/ns#" term="chris cornut" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="zend framework" /><category scheme="http://www.blogger.com/atom/ns#" term="stefan koopmanschap" /><category scheme="http://www.blogger.com/atom/ns#" term="joind.in" /><title type="text">A great 2009 !</title><content type="html">It's that time of year again where one looks back to all the things that have happened in the past 12 months. 2009 has to be the most thrilling, fastest ride ever and I'm really surprised to see it's nearly the end of this year.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;PHP&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;The most thrilling part of 2009 was the release of &lt;a href="http://php.net/archive/2009.php#id2009-06-30-1"&gt;PHP 5.3 on June 30&lt;/a&gt;. With this release, &lt;a href="http://php.net/"&gt;PHP&lt;/a&gt; has risen to a new level of development implementing some long awaited features like &lt;a href="http://php.net/DateTime"&gt;DateTime&lt;/a&gt;, &lt;a href="http://php.net/namespaces"&gt;namespaces&lt;/a&gt;, &lt;a href="http://php.net/closures"&gt;closures&lt;/a&gt;, &lt;a href="http://php.net/goto"&gt;gotos&lt;/a&gt; (who wants to use that ?!?), &lt;a href="http://php.net/lsb"&gt;late static binding&lt;/a&gt; and an improved &lt;a href="http://php.net/gc_enable"&gt;garbage collection&lt;/a&gt;. Also new extensions were added to this release like &lt;a href="http://php.net/phar"&gt;ext/phar&lt;/a&gt;, &lt;a href="http://php.net/fileinfo"&gt;ext/fileinfo&lt;/a&gt; and &lt;a href="http://php.net/intl"&gt;ext/intl&lt;/a&gt;.&lt;br /&gt;I want to express my gratitude to all those developers who have made this release possible and to all the participants of &lt;a href="http://qa.php.net/testfest.php"&gt;PHP Test Fest&lt;/a&gt; for making their contributions worth the while.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Zend Framework&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;It's also worth mentioning that Supreme Allied Commander &lt;a href="http://weierophinney.net/matthew/"&gt;Matthew Weier O' Phinney&lt;/a&gt;, his team and all developers around the world have done a great job improving &lt;a href="http://framework.zend.com/"&gt;Zend Framework&lt;/a&gt;. With the release of &lt;a href="http://framework.zend.com/"&gt;Zend Framework&lt;/a&gt; 1.8, lot's of things changed within the way applications are being bootstrapped and provided a more flexible way to deploy feature rich applications with a very modular structure.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;PHP Conferences&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;For me personal it was a very exciting year where I was speaking at some great conferences on stage and in uncon sessions (thank you &lt;a href="http://caseysoftware.com/"&gt;Keith&lt;/a&gt;!). If budget allows it, I'll be attending these conferences again in 2010.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://phpconference.co.uk/"&gt;PHP UK&lt;/a&gt; (attendee)&lt;/li&gt;&lt;li&gt;&lt;a href="http://tek.phparch.com/"&gt;PHP|Tek&lt;/a&gt; (uncon speaker)&lt;/li&gt;&lt;li&gt;&lt;a href="http://phpconference.nl/"&gt;DPC&lt;/a&gt; (speaker)&lt;/li&gt;&lt;li&gt;&lt;a href="http://conference.phpnw.org.uk/phpnw09"&gt;PHP NW&lt;/a&gt; (speaker)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.zendcon.com/"&gt;ZendCon&lt;/a&gt; (uncon speaker)&lt;/li&gt;&lt;/ul&gt;One conference will be added to this list in 2010 since I'll be co-organizing it: &lt;a href="http://conference.phpbenelux.eu/"&gt;PHPBenelux Conference&lt;/a&gt;.&lt;br /&gt;If you ever want to catch up on the hottest game in PHP, be sure to check out these and other great PHP conferences on the &lt;a href="http://www.php.net/conferences"&gt;PHP website&lt;/a&gt;. You'll learn so much from the conference itself, the speakers and the audience itself, it's really worth the money.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Macq Electronique&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Since March of this year I've been working as a &lt;a href="http://php.net/"&gt;PHP&lt;/a&gt;/&lt;a href="http://framework.zend.com/"&gt;Zend Framework&lt;/a&gt; consultant for &lt;a href="http://www.macqel.eu/"&gt;Macq Electronique&lt;/a&gt;, a hardware manufacturer in Brussels that provides hardware solutions for governments (like automated traffic panels, speed enforcement cameras, tunnel control and pump installation monitors). I would like to thank the company for giving me inside view of these infrastructures and I'm excited to work with them again in 2010.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Thank you !&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;I would like to express my gratitude to the following people who have thought me a few valuable lessons that I can use in my personal and professional life:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.calevans.com/"&gt;&lt;b&gt;Cal Evans&lt;/b&gt;&lt;/a&gt;:&lt;br /&gt;Cal, to you we now have our own PHP conference in January. Without your support, advise and never ending belief in us, we weren't able to pull it off. Thank you !&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://weierophinney.net/matthew"&gt;Matthew Weier O'Phinney&lt;/a&gt;&lt;/b&gt;:&lt;br /&gt;Matthew, although we never had the chance to sit down and discuss things I do want to thank you for all the good work you have done for &lt;a href="http://framework.zend.com/"&gt;Zend Framework&lt;/a&gt; and the &lt;a href="http://phpc.org/"&gt;PHP Community&lt;/a&gt;. If it wasn't for you, I'd still be stuck writing crappy code with code replication and re-inventing the wheel all over again. Thank you !&lt;/li&gt;&lt;li&gt;&lt;a href="http://caseysoftware.com/"&gt;&lt;b&gt;Keith Casey&lt;/b&gt;&lt;/a&gt;:&lt;br /&gt;Keith, thanks to you I was able to talk about stuff that matters to me and being able to inspire people to become interested in things like &lt;a href="http://php.net/spl"&gt;SPL&lt;/a&gt; and &lt;a href="http://phpunit.de/"&gt;Unit Testing&lt;/a&gt;. Thank you !&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://leftontheweb.com/"&gt;Stefan Koopmanschap&lt;/a&gt;&lt;/b&gt;:&lt;br /&gt;Stefan, although it seems I've been giving you lots of advice this year, you have shown me what a true spirit means. With your enormous passion for PHP and your ideas to promote PHP in ways that I never could think possible, I owe you so much. Thank you my friend !&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.phpdeveloper.org/"&gt;&lt;b&gt;Chris Cornut&lt;/b&gt;&lt;/a&gt;:&lt;br /&gt;Chris, I would like to thank you for giving us &lt;a href="http://joind.in/"&gt;Joind.in&lt;/a&gt;. With it's simple interface and it's purpose it has given me so much feedback on how to improve my skills as a speaker. Without it, I would never known what areas I could improve myself. So thank you very much for your efforts !&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Conclusion&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;2009 was a great year and I'm sorry to see it end. But a new year is around the corner and who knows, it might bring even more excitement and fulfillment. Anyways, I wish you all a very happy new year and I hope to see you again at a conference somewhere in the world.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28215292-8687778627591665893?l=www.dragonbe.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dragonbe/~4/CM3swVkgX0w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dragonbe.com/feeds/8687778627591665893/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.dragonbe.com/2009/12/great-2009.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/8687778627591665893" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/8687778627591665893" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dragonbe/~3/CM3swVkgX0w/great-2009.html" title="A great 2009 !" /><author><name>DragonBe</name><uri>http://www.blogger.com/profile/12610668749799675317</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16969274511863708634" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://www.dragonbe.com/2009/12/great-2009.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-28215292.post-7199907516903669401</id><published>2009-11-01T22:36:00.000+01:00</published><updated>2009-11-01T22:36:14.320+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="zend framework" /><category scheme="http://www.blogger.com/atom/ns#" term="phpunit" /><title type="text">Unit testing with Zend Framework 1.8+</title><content type="html">I recently gave a presentation at &lt;a href="http://zendcon.com/uncon"&gt;ZendCon 2009 Uncon&lt;/a&gt; about "&lt;a href="http://www.slideshare.net/DragonBe/php-unit-with-zend-framework-zendcon09"&gt;php unit with Zend Framework&lt;/a&gt;", which many people liked a lot (see comments on &lt;a href="http://joind.in/638"&gt;http://joind.in/638&lt;/a&gt;). But since then I got a lot of questions how to set up a testing environment for&amp;nbsp;&lt;a href="http://framework.zend.com/"&gt;Zend Framework&lt;/a&gt;&amp;nbsp;applications that uses version&amp;nbsp;&lt;a href="http://framework.zend.com/"&gt;Zend Framework&lt;/a&gt;&amp;nbsp;1.8 or newer.&lt;br /&gt;&lt;br /&gt;We start off by setting our environment best fitted for our unit testing. I use a virtual linux system for this, using &lt;a href="http://www.vmware.com/"&gt;VMWare&lt;/a&gt;, but with some extra background research these global settings can be applied for your own (test) environment as well.&lt;br /&gt;&lt;br /&gt;I'm not going to explain how to install &lt;a href="http://www.php.net/"&gt;PHP&lt;/a&gt; here, but I can tell you I'm using PHP 5.3.0 (build from source). With this build, I've installed &lt;a href="http://www.phpunit.de/"&gt;PHPUnit&lt;/a&gt; 3.4.2 and &lt;a href="http://www.xdebug.org/"&gt;Xdebug&lt;/a&gt; 2.0.5. The example application was made using&amp;nbsp;&lt;a href="http://framework.zend.com/"&gt;Zend Framework&lt;/a&gt;&amp;nbsp;1.9.5.&lt;br /&gt;&lt;br /&gt;First we're creating a new&amp;nbsp;&lt;a href="http://framework.zend.com/"&gt;Zend Framework&lt;/a&gt;&amp;nbsp;project using Zend_Tool on command line, by issuing the command &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;zf create project zfunit&lt;/b&gt;&lt;/span&gt; in the workspace directory I use to share my &lt;a href="http://www.vmware.com/"&gt;VMWare&lt;/a&gt; instance with my workstation.&lt;br /&gt;&lt;br /&gt;Ok, we now have a default Zend Framework application running.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_HhRzjL1_W1c/Su310NzIJkI/AAAAAAAACnA/3ZHKP3Vzz2w/s1600-h/start_zfproject.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_HhRzjL1_W1c/Su310NzIJkI/AAAAAAAACnA/3ZHKP3Vzz2w/s400/start_zfproject.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;We're not going to build a complete application here, but just showing how you can start unit testing your&amp;nbsp;&lt;a href="http://framework.zend.com/"&gt;Zend Framework&lt;/a&gt;&amp;nbsp;project, so you can implement unit tests on your own applications.&lt;br /&gt;&lt;br /&gt;First we need to modify the phpunit.xml file so we can use it as our unit testing configuration.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #6300ff; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #369393;"&gt;phpunit&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #a40095;"&gt;bootstrap&lt;/span&gt;&lt;span style="color: black;"&gt;=&lt;/span&gt;"./TestHelper.php"&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #a40095;"&gt;colors&lt;/span&gt;&lt;span style="color: black;"&gt;=&lt;/span&gt;"true"&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #6300ff; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #369393;"&gt;testsuite&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #a40095;"&gt;name&lt;/span&gt;&lt;span style="color: black;"&gt;=&lt;/span&gt;"Zend Framework Unit Testing"&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #369393; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;directory&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;./&lt;/span&gt;&lt;span style="color: #009594;"&gt;&lt;/span&gt;directory&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #369393; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: #009594;"&gt;&lt;/span&gt;testsuite&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 15.0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #369393; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;filter&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #369393; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;whitelist&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #369393;"&gt;directory&lt;/span&gt; &lt;span style="color: #a40095;"&gt;suffix&lt;/span&gt;=&lt;span style="color: #6300ff;"&gt;".php"&lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;../library/&lt;span style="color: #009594;"&gt;&lt;/span&gt;&lt;span style="color: #369393;"&gt;directory&lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #369393;"&gt;directory&lt;/span&gt; &lt;span style="color: #a40095;"&gt;suffix&lt;/span&gt;=&lt;span style="color: #6300ff;"&gt;".php"&lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;../application/&lt;span style="color: #009594;"&gt;&lt;/span&gt;&lt;span style="color: #369393;"&gt;directory&lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #369393;"&gt;exclude&lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #369393;"&gt;directory&lt;/span&gt; &lt;span style="color: #a40095;"&gt;suffix&lt;/span&gt;=&lt;span style="color: #6300ff;"&gt;".phtml"&lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;../application/&lt;span style="color: #009594;"&gt;&lt;/span&gt;&lt;span style="color: #369393;"&gt;directory&lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #009594;"&gt;&lt;/span&gt;&lt;span style="color: #369393;"&gt;exclude&lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #369393; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: #009594;"&gt;&lt;/span&gt;whitelist&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #369393; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: #009594;"&gt;&lt;/span&gt;filter&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 15.0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #369393; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;logging&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #6300ff; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #369393;"&gt;log&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #a40095;"&gt;type&lt;/span&gt;&lt;span style="color: black;"&gt;=&lt;/span&gt;"coverage-html"&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #a40095;"&gt;target&lt;/span&gt;&lt;span style="color: black;"&gt;=&lt;/span&gt;"./log/report"&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #a40095;"&gt;charset&lt;/span&gt;&lt;span style="color: black;"&gt;=&lt;/span&gt;"UTF-8"&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #a40095;"&gt;yui&lt;/span&gt;&lt;span style="color: black;"&gt;=&lt;/span&gt;"true"&lt;span style="color: black;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #a40095; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;highlight&lt;span style="color: black;"&gt;=&lt;/span&gt;&lt;span style="color: #6300ff;"&gt;"true"&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;lowUpperBound&lt;span style="color: black;"&gt;=&lt;/span&gt;&lt;span style="color: #6300ff;"&gt;"50"&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;highLowerBound&lt;span style="color: black;"&gt;=&lt;/span&gt;&lt;span style="color: #6300ff;"&gt;"80"&lt;/span&gt;&lt;span style="color: #009594;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #6300ff; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #369393;"&gt;log&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #a40095;"&gt;type&lt;/span&gt;&lt;span style="color: black;"&gt;=&lt;/span&gt;"testdox-html"&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #a40095;"&gt;target&lt;/span&gt;&lt;span style="color: black;"&gt;=&lt;/span&gt;"./log/testdox.html"&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #009594;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #369393; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: #009594;"&gt;&lt;/span&gt;logging&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #369393; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: #009594;"&gt;&lt;/span&gt;phpunit&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;As you see in the root node of our phpunit.xml file, we include the TestHelper script to aid us setting up the right testing environment. Of course, you can modify this file to fit your own application setup. This is my TestHelper script to set up my test environment, include paths and setting timezones.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: red; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #929292; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;// start output buffering&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;ob_start();&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 15.0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #929292; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;// set our app paths and environments&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;define(&lt;span style="color: #009c00;"&gt;'BASE_PATH'&lt;/span&gt;, realpath(dirname(__FILE__) . &lt;span style="color: #009c00;"&gt;'/../'&lt;/span&gt;));&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #009c00; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;define(&lt;/span&gt;'APPLICATION_PATH'&lt;span style="color: black;"&gt;, BASE_PATH . &lt;/span&gt;'/application'&lt;span style="color: black;"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #009c00; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;define(&lt;/span&gt;'APPLICATION_ENV'&lt;span style="color: black;"&gt;, &lt;/span&gt;'testing'&lt;span style="color: black;"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 15.0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #929292; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;// Include path&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;set_include_path(&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #009c00;"&gt;'.'&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: #009c00;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;. PATH_SEPARATOR . BASE_PATH . &lt;span style="color: #009c00;"&gt;'/library'&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: #009c00;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;. PATH_SEPARATOR . get_include_path()&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;);&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 15.0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #929292; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;// Set the default timezone !!!&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;date_default_timezone_set(&lt;span style="color: #009c00;"&gt;'Europe/Brussels'&lt;/span&gt;);&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 15.0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #929292; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;// We wanna catch all errors en strict warnings&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;error_reporting(E_ALL|E_STRICT);&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 15.0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #009c00; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: #4e00ff;"&gt;require_once &lt;/span&gt;'ControllerTestCase.php'&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Monaco; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;We create a custom ControllerTestCase that we can extend in all our controller test cases. This proves to be the most convenient way to handle the setup and teardown of the Zend Framework architecture.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: red; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #009c00; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: #4e00ff;"&gt;require_once &lt;/span&gt;'Zend/Application.php'&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #009c00; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: #4e00ff;"&gt;require_once &lt;/span&gt;'Zend/Test/PHPUnit/ControllerTestCase.php'&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 15.0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: #4e00ff;"&gt;abstract class &lt;/span&gt;ControllerTestCase &lt;span style="color: #4e00ff;"&gt;extends &lt;/span&gt;Zend_Test_PHPUnit_ControllerTestCase&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;{&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #850000; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: #4e00ff;"&gt;public &lt;/span&gt;$application&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 15.0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #4e00ff; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;public function &lt;span style="color: black;"&gt;setUp()&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #850000;"&gt;$this&lt;/span&gt;-&amp;gt;application = &lt;span style="color: #4e00ff;"&gt;new &lt;/span&gt;Zend_Application(&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; APPLICATION_ENV,&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; APPLICATION_PATH . &lt;span style="color: #009c00;"&gt;'/configs/application.ini'&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #009c00; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: black;"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 15.0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #850000;"&gt;$this&lt;/span&gt;-&amp;gt;bootstrap = &lt;span style="color: #4e00ff;"&gt;array&lt;/span&gt;(&lt;span style="color: #850000;"&gt;$this&lt;/span&gt;, &lt;span style="color: #009c00;"&gt;'appBootstrap'&lt;/span&gt;);&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #4e00ff;"&gt;parent&lt;/span&gt;::setUp();&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 15.0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #4e00ff;"&gt;public function &lt;/span&gt;appBootstrap()&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #850000;"&gt;$this&lt;/span&gt;-&amp;gt;application-&amp;gt;bootstrap();&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;}&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Monaco; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;And finally we create our first test on the default IndexController.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: red; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: #4e00ff;"&gt;require_once &lt;/span&gt;realpath(dirname(__FILE__) . &lt;span style="color: #009c00;"&gt;'/../../ControllerTestCase.php'&lt;/span&gt;);&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 15.0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: #4e00ff;"&gt;class &lt;/span&gt;IndexControllerTest &lt;span style="color: #4e00ff;"&gt;extends &lt;/span&gt;ControllerTestCase&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;{&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #4e00ff;"&gt;public function &lt;/span&gt;testCallingRootTriggersIndex()&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #850000;"&gt;$this&lt;/span&gt;-&amp;gt;dispatch(&lt;span style="color: #009c00;"&gt;'/'&lt;/span&gt;);&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #850000;"&gt;$this&lt;/span&gt;-&amp;gt;assertController(&lt;span style="color: #009c00;"&gt;'index'&lt;/span&gt;);&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #850000;"&gt;$this&lt;/span&gt;-&amp;gt;assertAction(&lt;span style="color: #009c00;"&gt;'index'&lt;/span&gt;);&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 15.0px;"&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #4e00ff;"&gt;public function &lt;/span&gt;testCallingBogusTriggersError()&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #850000;"&gt;$this&lt;/span&gt;-&amp;gt;dispatch(&lt;span style="color: #009c00;"&gt;'/bogus'&lt;/span&gt;);&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #850000;"&gt;$this&lt;/span&gt;-&amp;gt;assertController(&lt;span style="color: #009c00;"&gt;'error'&lt;/span&gt;);&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #850000;"&gt;$this&lt;/span&gt;-&amp;gt;assertAction(&lt;span style="color: #009c00;"&gt;'error'&lt;/span&gt;);&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #850000;"&gt;$this&lt;/span&gt;-&amp;gt;assertResponseCode(&lt;span style="color: red;"&gt;404&lt;/span&gt;);&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;}&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 15.0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Running phpunit from commandline will tell you that your assertions succeeded and all is a go.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_HhRzjL1_W1c/Su38oE1yD6I/AAAAAAAACnI/_wzfg4wzSSI/s1600-h/phpunit_output.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_HhRzjL1_W1c/Su38oE1yD6I/AAAAAAAACnI/_wzfg4wzSSI/s640/phpunit_output.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;All green, assertions succeeded and report is generated.&lt;br /&gt;&lt;br /&gt;I've setup my test environment that directory log/report is aliased by /report, so I can view the code coverage reports (requires &lt;a href="http://www.xdebug.org/"&gt;XDebug&lt;/a&gt;).&lt;br /&gt;The following code coverage report is the result.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_HhRzjL1_W1c/Su39RyCeisI/AAAAAAAACnQ/Y4_dcQ6Pi0M/s1600-h/phpunit_code_coverage.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_HhRzjL1_W1c/Su39RyCeisI/AAAAAAAACnQ/Y4_dcQ6Pi0M/s640/phpunit_code_coverage.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;As you can see, with just a minimal effort you've set up your&amp;nbsp;&lt;a href="http://framework.zend.com/"&gt;Zend Framework&lt;/a&gt;&amp;nbsp;application to be unit tested. So now you don't have any more excuses to leave your applications untested.&lt;br /&gt;&lt;br /&gt;Since I don't have all the knowledge, I would like to thank &lt;a href="http://weierophinney.net/matthew/archives/190-Setting-up-your-Zend_Test-test-suites.html"&gt;Matthew Weier O' Phinney&lt;/a&gt; and&amp;nbsp;&lt;a href="http://draft.blogger.com/goog_1257106282310"&gt;Mathias Geat&lt;/a&gt;&amp;nbsp;for sharing their knowledge on the subject. Thanks guys !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28215292-7199907516903669401?l=www.dragonbe.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dragonbe/~4/Yeh-Vrq5JzQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dragonbe.com/feeds/7199907516903669401/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.dragonbe.com/2009/11/unit-testing-with-zend-framework-18.html#comment-form" title="13 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/7199907516903669401" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/7199907516903669401" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dragonbe/~3/Yeh-Vrq5JzQ/unit-testing-with-zend-framework-18.html" title="Unit testing with Zend Framework 1.8+" /><author><name>DragonBe</name><uri>http://www.blogger.com/profile/12610668749799675317</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16969274511863708634" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_HhRzjL1_W1c/Su310NzIJkI/AAAAAAAACnA/3ZHKP3Vzz2w/s72-c/start_zfproject.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">13</thr:total><feedburner:origLink>http://www.dragonbe.com/2009/11/unit-testing-with-zend-framework-18.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-28215292.post-4323234488262927953</id><published>2009-10-25T07:51:00.000+01:00</published><updated>2009-10-25T07:51:50.683+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="zendcon09" /><category scheme="http://www.blogger.com/atom/ns#" term="zendcon" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title type="text">ZendCon 2009 Review</title><content type="html">If you're involved with &lt;a href="http://php.net/"&gt;PHP&lt;/a&gt; and you haven't heard of &lt;a href="http://zendcon.com/"&gt;ZendCon&lt;/a&gt; before, you have been around the wrong croud!&lt;br /&gt;&lt;br /&gt;The past week was reserved for the biggest &lt;a href="http://php.net/"&gt;PHP&lt;/a&gt; event of the year bringing you the best of the best the open-source and commercial world have to offer developers and businesses. And it rocked, big time!&lt;br /&gt;&lt;br /&gt;With a full day of tutorials and three days of top-notch presentations given by people that make things happen in the &lt;a href="http://php.net/"&gt;PHP&lt;/a&gt; ecosystem, you got a real bargain for your money.&lt;br /&gt;&lt;br /&gt;Besides these brain overloading sessions, &lt;a href="http://caseysoftware.com/blog"&gt;Keith Casey&lt;/a&gt;, king of the uncon sessions, hand-picked the best sessions rated and presented by the audience itself. And even though the main conference was mindblowing, Keith made sure that people had a hard time choosing between main tracks and uncon sessions. Job well done Keith !!!&lt;br /&gt;&lt;br /&gt;I was scheduled for three uncon sessions myself.&lt;br /&gt;&lt;br /&gt;On Monday I talked about unit testing with &lt;a href="http://phpunit.de/"&gt;PHPUnit&lt;/a&gt; and &lt;a framework.zend.com="" href:="" href="http://framework.zend.com/"&gt;Zend Framework&lt;/a&gt;.&lt;br /&gt;&lt;div id="__ss_2310407" style="text-align: left; width: 425px;"&gt;&lt;a href="http://www.slideshare.net/DragonBe/php-unit-with-zend-framework-zendcon09" style="display: block; font-family: Helvetica,Arial,Sans-serif; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; margin: 12px 0pt 3px; text-decoration: underline;" title="Php Unit With Zend Framework   Zendcon09"&gt;Php Unit With Zend Framework   Zendcon09&lt;/a&gt;&lt;object height="355" style="margin: 0px;" width="425"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=phpunitwithzendframework-zendcon09-091021111543-phpapp02&amp;stripped_title=php-unit-with-zend-framework-zendcon09" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=phpunitwithzendframework-zendcon09-091021111543-phpapp02&amp;stripped_title=php-unit-with-zend-framework-zendcon09" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;div style="font-family: tahoma,arial; font-size: 11px; height: 26px; padding-top: 2px;"&gt;View more &lt;a href="http://www.slideshare.net/" style="text-decoration: underline;"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/DragonBe" style="text-decoration: underline;"&gt;Michelangelo van Dam&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/andriesss/4032701077/" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://farm4.static.flickr.com/3471/4032701077_b2c1dc009f_m.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;On Tuesday &lt;a href="http://annafilina.com/blog/"&gt;Anna Filina&lt;/a&gt;, &lt;a href="http://bradley-holt.blogspot.com/"&gt;Bradley Holt&lt;/a&gt; and I talked about the role of &lt;a href="http://php.net/"&gt;PHP&lt;/a&gt; user groups and provided tips on (re)starting a user group, how to get involved with open-sourse projects and how to get sponsorships from local businesses and big enterprises. I made a recording of the session, but sound quality is poor, so I need more work on it to improve it. Stay tuned for more.&lt;br /&gt;&lt;br /&gt;On the third day I was scheduled for my "&lt;a href="http://www.slideshare.net/DragonBe/spl-not-a-bridge-too-far-php-nw09"&gt;SPL, not a bridge too far&lt;/a&gt;" session but I (and others) were a bit too late for such an early schedule due to the fact that &lt;a href="http://www.microsoft.com/"&gt;Microsoft&lt;/a&gt; was giving an awesome party downtown San Francisco to celebrate the release of &lt;a href="http://twitpic.com/mg7pt"&gt;Windows 7&lt;/a&gt;.&lt;br /&gt;Because we parked our rental car in a car park that closed around midnight, we were happy we could join other conference attendees and speakers on a party bus bringing us back to the hotel where we arrived at about 4am.&lt;br /&gt;&lt;br /&gt;Conversations on community stuff with &lt;a href="http://caseysoftware.com/blog"&gt;Keith Casey&lt;/a&gt; and &lt;a href="http://annafilina.com/blog/"&gt;Anna Filina&lt;/a&gt; kept us out of bed until way passed 5am leading up to the fact that I arrived late at my own session scheduled for 8am.&lt;br /&gt;Luckily no one was there to miss me, but still… ariving late at your own gig is so 80's.&lt;br /&gt;&lt;br /&gt;For those that couldn't make it to San Jose, you could follow along on IRC channel &lt;a href="http://irc.freenode.net/"&gt;#zendcon&lt;/a&gt;, &lt;a href="http://search.twitter.com/search?q=zendcon"&gt;Twitter&lt;/a&gt; and &lt;a href="http://www.flickr.com/photos/tags/zendcon09"&gt;Flickr&lt;/a&gt;. Even some &lt;a href="https://wave.google.com/wave"&gt;Google Waves&lt;/a&gt; and &lt;a href="http://www.youtube.com/results?search_query=zendcon09"&gt;Youtube movies&lt;/a&gt; were spotted here and there.&lt;br /&gt;&lt;br /&gt;A few good things were braught to the attention of all attendees.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;people and businesses should get more involved in contributing back to the open source projects they use themselves&lt;/li&gt;&lt;li&gt;there is no best framework out there so look for the one that best fit your needs&lt;/li&gt;&lt;li&gt;there's a lot of talent out there that's not supported enough by the company they work for to become educated on advanced topics or even get certified&lt;/li&gt;&lt;li&gt;&lt;a href="http://twitpic.com/mhwf0"&gt;beware of the weierophinney !!! &lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Conclusion&lt;/h2&gt;&lt;a href="http://zendcon.com/"&gt;ZendCon&lt;/a&gt; proved to be the top-notch &lt;a href="http://php.net/"&gt;PHP&lt;/a&gt; conference of this year, seeing lots of old and new friends giving the best of themselves. Like the German &lt;a href="http://php.cc/"&gt;PHPcc&lt;/a&gt; who gave an awesome amount of tutorial, main and uncon sessions, my dear friend and genius &lt;a href="http://weierophinney.net/matthew/"&gt;Matthew Weier O' Phinney&lt;/a&gt; who was more on stage then amongst the audience and of course &lt;a href="http://caseysoftware.com/blog"&gt;Keith Casey&lt;/a&gt;, who ruled the uncon sessions in a magnificent way.&lt;br /&gt;But to be honnest, &lt;a href="http://zendcon.com/"&gt;ZendCon&lt;/a&gt; would not exist without the community that gave us &lt;a href="http://php.net/"&gt;PHP&lt;/a&gt;, &lt;a href="http://zend.com/"&gt;Zend&lt;/a&gt; along with &lt;a href="http://software-support.biz/zonen/sus/psecom,id,1,nodeid,1,p,0,_language,en.html"&gt;S&amp;amp;S&lt;/a&gt; for organizing this event and the sponors that pushed the ticket prizes down to an affordable level. Thank you all and see you next year at &lt;a href="http://zendcon.com/"&gt;ZendCon10&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28215292-4323234488262927953?l=www.dragonbe.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dragonbe/~4/7Yz5PV165j4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dragonbe.com/feeds/4323234488262927953/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.dragonbe.com/2009/10/zendcon-2009-review.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/4323234488262927953" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/4323234488262927953" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dragonbe/~3/7Yz5PV165j4/zendcon-2009-review.html" title="ZendCon 2009 Review" /><author><name>DragonBe</name><uri>http://www.blogger.com/profile/12610668749799675317</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16969274511863708634" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dragonbe.com/2009/10/zendcon-2009-review.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-28215292.post-7373298097936390750</id><published>2009-10-10T15:22:00.002+02:00</published><updated>2009-10-10T15:25:41.412+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="spl" /><category scheme="http://www.blogger.com/atom/ns#" term="phpnw09" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title type="text">Spl Not A Bridge Too Far phpNW09</title><content type="html">This morning I had the honor to speak at the &lt;a href="http://conference.phpnw.org.uk/phpnw09"&gt;PHP North Wes&lt;/a&gt;t (&lt;a href="http://conference.phpnw.org.uk/phpnw09"&gt;phpNW09&lt;/a&gt;) conference in Manchester (UK) about &lt;a href="http://php.net/spl"&gt;SPL&lt;/a&gt;. It was almost a full room and it was wonderful to see and hear people being impressed what SPL can mean for them, so I believe it was a good session.&lt;br /&gt;&lt;br /&gt;For those who attended my talk, you can leave your comments and feedback at &lt;a href="http://joind.in/613"&gt;http://joind.in/613&lt;/a&gt; and be sure to rate the conference itself at &lt;a href="http://joind.in/event/view/70"&gt;http://joind.in/event/view/70&lt;/a&gt;.&lt;br /&gt;&lt;div id="__ss_2182885" style="text-align: left; width: 425px;"&gt;&lt;a href="http://www.slideshare.net/DragonBe/spl-not-a-bridge-too-far-php-nw09" style="display: block; font: 14px Helvetica,Arial,Sans-serif; margin: 12px 0 3px 0; text-decoration: underline;" title="Spl Not A Bridge Too Far phpNW09"&gt;Spl Not A Bridge Too Far phpNW09&lt;/a&gt;&lt;object height="355" style="margin: 0px;" width="425"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=splnotabridgetoofarphpnw09-091010063456-phpapp02&amp;stripped_title=spl-not-a-bridge-too-far-php-nw09" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=splnotabridgetoofarphpnw09-091010063456-phpapp02&amp;stripped_title=spl-not-a-bridge-too-far-php-nw09" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;div style="font-family: tahoma,arial; font-size: 11px; height: 26px; padding-top: 2px;"&gt;View more &lt;a href="http://www.slideshare.net/" style="text-decoration: underline;"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/DragonBe" style="text-decoration: underline;"&gt;Michelangelo van Dam&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28215292-7373298097936390750?l=www.dragonbe.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dragonbe/~4/gjgbzGLeO6c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dragonbe.com/feeds/7373298097936390750/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.dragonbe.com/2009/10/spl-not-bridge-too-far-phpnw09.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/7373298097936390750" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/7373298097936390750" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dragonbe/~3/gjgbzGLeO6c/spl-not-bridge-too-far-phpnw09.html" title="Spl Not A Bridge Too Far phpNW09" /><author><name>DragonBe</name><uri>http://www.blogger.com/profile/12610668749799675317</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16969274511863708634" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://www.dragonbe.com/2009/10/spl-not-bridge-too-far-phpnw09.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-28215292.post-1458134463974866881</id><published>2009-09-24T08:07:00.004+02:00</published><updated>2009-09-24T08:16:09.566+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bughuntday" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="zend framework" /><title type="text">Bughuntday: yes, you can!</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_HhRzjL1_W1c/SrsOHJXxV-I/AAAAAAAACm4/VMaVD83PSfI/s1600-h/zf_logo.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_HhRzjL1_W1c/SrsOHJXxV-I/AAAAAAAACm4/VMaVD83PSfI/s200/zf_logo.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Last week Thursday the start was given to &lt;a href="http://framework.zend.com/"&gt;Zend Framework&lt;/a&gt;'s Bughuntday and it turned out to be a huge success, as mentioned by Chief Architect &lt;a href="http://weierophinney.net/matthew/"&gt;Matthew Weier O' Phinney&lt;/a&gt; on &lt;a href="http://devzone.zend.com/article/10049-Announcing-Zend-Frameworks-Monthly-Bug-Hunt-Days"&gt;Zend's DevZone website&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Over a hunderd bugs were squashed leading up to the release of &lt;a href="http://framework.zend.com/"&gt;Zend Framework&lt;/a&gt; 1.9.3.&lt;br /&gt;&lt;br /&gt;What is Bughuntday ?&lt;br /&gt;Bughuntday is actually a term to indicate that on a specific day (or days), lots of developers are focussing their attention to fix bugs, often reported by users in a bug tracking tool (like &lt;a href="http://www.atlassian.com/software/jira/"&gt;Jira&lt;/a&gt;, &lt;a href="http://www.mantisbt.org/"&gt;Mantis&lt;/a&gt; or &lt;a href="http://www.bugzilla.org/"&gt;Bugzilla&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Since lots of users have submitted issues and only a few developers have time to investigate them, extra help is always welcome to clear a backlog of reported issues. &lt;br /&gt;&lt;br /&gt;So, each year a "Bughuntday" is scheduled to have many developers fix issues in a relative short timeframe. &lt;br /&gt;&lt;br /&gt;You can help !&lt;br /&gt;Fixing bugs for &lt;a href="http://framework.zend.com/"&gt;Zend Framework&lt;/a&gt; is a very good way to learn best coding practices or parts of the framework you're not familiar with.&lt;br /&gt;&lt;br /&gt;Go over to the &lt;a href="http://framework.zend.com/issues"&gt;Zend Framework Issue Tracker&lt;/a&gt; and look for bugs that are still open. &lt;br /&gt;&lt;br /&gt;If you already signed the Zend CLA, you're good to go. If you haven't done this, now is a good time to do so. &lt;br /&gt;&lt;br /&gt;Get the latest revision from &lt;a href="http://framework.zend.com/svn/framework/standard/trunk/"&gt;http://framework.zend.com/svn/framework/standard/trunk/&lt;/a&gt;, which includes the library, unit tests, external libraries and documentation.&lt;br /&gt;&lt;br /&gt;In case of emergency&lt;br /&gt;If you're stuck, or you have created a patch to fix an issue, head over to #zftalk.dev on IRC (freenode) where you can ask for help.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://framework.zend.com/"&gt;Zend Framework&lt;/a&gt; Bughuntday is held each third Thursday and Friday of the month and each month prizes are given to the top 3 fixers.&lt;br /&gt;&lt;br /&gt;If your company uses &lt;a href="http://framework.zend.com/"&gt;Zend Framework&lt;/a&gt;, see if you cannot make it a company thing. The quality improvement of &lt;a href="http://framework.zend.com/"&gt;Zend Framework&lt;/a&gt; will be a great benefit for your company as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28215292-1458134463974866881?l=www.dragonbe.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dragonbe/~4/COelmJRdTRU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dragonbe.com/feeds/1458134463974866881/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.dragonbe.com/2009/09/bughuntday-yes-you-can.html#comment-form" title="9 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/1458134463974866881" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/1458134463974866881" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dragonbe/~3/COelmJRdTRU/bughuntday-yes-you-can.html" title="Bughuntday: yes, you can!" /><author><name>DragonBe</name><uri>http://www.blogger.com/profile/12610668749799675317</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16969274511863708634" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_HhRzjL1_W1c/SrsOHJXxV-I/AAAAAAAACm4/VMaVD83PSfI/s72-c/zf_logo.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">9</thr:total><feedburner:origLink>http://www.dragonbe.com/2009/09/bughuntday-yes-you-can.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-28215292.post-3491967701142845115</id><published>2009-09-05T01:27:00.000+02:00</published><updated>2009-09-05T01:27:12.658+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="conference" /><category scheme="http://www.blogger.com/atom/ns#" term="phpnw09" /><category scheme="http://www.blogger.com/atom/ns#" term="phpnw" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title type="text">Speaking at PHPNW09</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://conference.phpnw.org.uk/phpnw09/wp-content/uploads/2009/07/phpnw09_blk_175x64.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://conference.phpnw.org.uk/phpnw09/wp-content/uploads/2009/07/phpnw09_blk_175x64.png" /&gt;&lt;/a&gt;&lt;/div&gt;It's almost fall again and it's amazing to see how many great conferences are scheduled. Seems impossible to choose between great talks given by the best developers worldwide.&lt;br /&gt;&lt;br /&gt;One of those great conferences is held in &lt;a href="http://en.wikipedia.org/wiki/Manchester"&gt;Manchester, UK&lt;/a&gt;. It's &lt;a href="http://conference.phpnw.org.uk/"&gt;PHPNW09&lt;/a&gt; with an awesome &lt;a href="http://conference.phpnw.org.uk/phpnw09/?page_id=7"&gt;schedule&lt;/a&gt; listing well known and lesser known people from the &lt;a href="http://phpc.org/"&gt;international PHP community&lt;/a&gt; (like &lt;a href="http://leftontheweb.com/"&gt;Stefan Koopmanschap&lt;/a&gt;, &lt;a href="http://derickrethans.nl/"&gt;Derick Rethans&lt;/a&gt;, &lt;a href="http://lornajane.net/"&gt;Lorna Mitchel&lt;/a&gt;, &lt;a href="http://akrabat.com/"&gt;Rob Allen&lt;/a&gt; and many more). This year I'm on stage too talking about the &lt;a href="http://php.net/spl"&gt;Standard PHP Library or SPL&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Something that I really like about the &lt;a href="http://phpc.org/"&gt;PHP community&lt;/a&gt; is that we all help each other getting better at the things we do. After I gave my &lt;a href="http://www.slideshare.net/DragonBe/spl-not-a-bridge-too-far"&gt;SPL talk&lt;/a&gt; at &lt;a href="http://phpconference.nl/"&gt;DPC 09&lt;/a&gt; earlier this year, I got &lt;a href="http://joind.in/586"&gt;so many responses and pointers&lt;/a&gt; on the presenter rating site &lt;a href="http://joind.in/"&gt;Joind.in&lt;/a&gt; which were very helpful improving this presentation.&lt;br /&gt;&lt;br /&gt;So, if you have a day to spend on &lt;a href="http://php.net/"&gt;PHP&lt;/a&gt;, come and join us at &lt;a href="http://conference.phpnw.org.uk/"&gt;PHP North West conference 2009&lt;/a&gt;. Prices are reasonable and flights are fairly cheap compared to the massive information overload you're about to absorb there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28215292-3491967701142845115?l=www.dragonbe.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dragonbe/~4/2gZJLA5GvnU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dragonbe.com/feeds/3491967701142845115/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.dragonbe.com/2009/09/speaking-at-phpnw09.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/3491967701142845115" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/3491967701142845115" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dragonbe/~3/2gZJLA5GvnU/speaking-at-phpnw09.html" title="Speaking at PHPNW09" /><author><name>DragonBe</name><uri>http://www.blogger.com/profile/12610668749799675317</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16969274511863708634" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://www.dragonbe.com/2009/09/speaking-at-phpnw09.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-28215292.post-6256793965787307552</id><published>2009-08-15T12:54:00.000+02:00</published><updated>2009-08-15T12:54:57.591+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="marc delisle" /><category scheme="http://www.blogger.com/atom/ns#" term="packt publishing" /><category scheme="http://www.blogger.com/atom/ns#" term="phpmyadmin" /><category scheme="http://www.blogger.com/atom/ns#" term="bookreview" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title type="text">Book review: Mastering phpMyAdmin 3.1</title><content type="html">&lt;div style="float: left; text-align: left;"&gt;&lt;a href="https://www.packtpub.com/mastering-phpmyadmin-3-1-fourth-edition/book/mid/2905093aqrdn" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://images.packtpub.com/images/full/1847197868.jpg" width="162" /&gt;&lt;/a&gt;&lt;/div&gt;A couple of weeks ago I received a book from &lt;a href="http://www.packtpub.com/"&gt;PACKT Publishing&lt;/a&gt; titled "&lt;a href="https://www.packtpub.com/mastering-phpmyadmin-3-1-fourth-edition/book/mid/2905093aqrdn"&gt;Mastering phpMyAdmin 3.1 for Effective MySQL Management&lt;/a&gt;&lt;a href="http://draft.blogger.com/"&gt;&lt;/a&gt;" written by &lt;a href="http://www.packtpub.com/author_view_profile/id/3"&gt;Marc Delisle&lt;/a&gt;, with the request if I could read it and write a review about it. Why not ? I haven't used &lt;a href="http://www.phpmyadmin.net/"&gt;phpMyAdmin&lt;/a&gt; in whole my career so I might as well read about the tool everyone around me is using. And since &lt;a href="http://www.phpmyadmin.net/"&gt;phpMyAdmin&lt;/a&gt; is also bundled with &lt;a href="http://www.zend.com/en/products/server"&gt;Zend Server&lt;/a&gt;, it can only benefit my day-to-day job.&lt;br /&gt;&lt;br /&gt;On the front cover it states "Increase your &lt;a href="http://www.mysql.com/"&gt;MySQL&lt;/a&gt; productivity and control by discovering the real power of &lt;a href="http://www.phpmyadmin.net/"&gt;phpMyAdmin&lt;/a&gt; 3.1", so the book challenged me from the start. I have been using the MySQL command-line tool since forever so I was really curious about how this book could convince me to use &lt;a href="http://www.phpmyadmin.net/"&gt;phpMyAdmin&lt;/a&gt; from now on.&lt;br /&gt;&lt;br /&gt;The first two chapters of this book are explaining what &lt;a href="http://www.phpmyadmin.net/"&gt;phpMyAdmin&lt;/a&gt; is all about and how you should install it, along with a very detailed security configuration part. A remarkable feature is that you can install it for multi-user hosting purposes, giving each user it's own &lt;a href="http://www.mysql.com/"&gt;MySQL&lt;/a&gt; toolset using just one installation.&lt;br /&gt;&lt;br /&gt;Chapter 3 covers a very detailed explanation of each panel you see in the &lt;a href="http://www.phpmyadmin.net/"&gt;phpMyAdmin&lt;/a&gt; interface. Not only a mere statement that explains what each panel is used for, but also how you can modify this panel's behavior by modifying the configuration settings.&lt;br /&gt;&lt;br /&gt;A hands-on example is covered in chapters 4, 5 and 6, where Marc takes you on a journey through all the steps of creating, inserting, browsing, modifying and removing tables and data. Although I was already familiar with &lt;a href="http://www.mysql.com/"&gt;MySQL&lt;/a&gt;'s capabilities, I have to admit that by using a tool like &lt;a href="http://www.phpmyadmin.net/"&gt;phpMyAdmin&lt;/a&gt; your whole data management becomes more visible and gives you a certain amount of joy browsing through your data.&lt;br /&gt;&lt;br /&gt;With &lt;a href="http://www.mysql.com/"&gt;MySQL&lt;/a&gt; on command line I could import/export my data and table structures in native SQL and XML, but with &lt;a href="http://www.phpmyadmin.net/"&gt;phpMyAdmin&lt;/a&gt; you can choose between 14 different export types. Although I believe that SQL will remain the main type used by many, it's good to know you have a tool available that can export data anyway you want.&lt;br /&gt;&lt;br /&gt;Another cool feature I discovered by reading this book is that &lt;a href="http://www.phpmyadmin.net/"&gt;phpMyAdmin&lt;/a&gt; offers you the ability to manage relations between tables easily using the interface, but you can also create graphical relation diagrams that you can export into PDF.&lt;br /&gt;&lt;br /&gt;With it's MySQL 5.0 and MySQL 5.1 support you also have the ability to manage the advanced &lt;a href="http://www.mysql.com/"&gt;MySQL&lt;/a&gt; toolset like triggers, stored procedures, functions and views. Having the ability to use these advanced &lt;a href="http://www.mysql.com/"&gt;MySQL&lt;/a&gt; capabilities in a graphical interface can only benefit it's usage amongst many developers.&lt;br /&gt;&lt;br /&gt;But the best feature of &lt;a href="http://www.phpmyadmin.net/"&gt;phpMyAdmin&lt;/a&gt; is that you could have in-table MIME-type based transformations. So if you work often with BLOB data, you can now have it appear right in your interface as a download link or as a clickable thumbnail.&lt;br /&gt;&lt;br /&gt;If you're new to &lt;a href="http://www.phpmyadmin.net/"&gt;phpMyAdmin&lt;/a&gt; or you just start using &lt;a href="http://www.mysql.com/"&gt;MySQL&lt;/a&gt; databases, this book gives you step-by-step instructions on how to use the interface to manage your data. But I think this book has even more value to the professional where this book is the perfect reference guide for all those advanced &lt;a href="http://www.mysql.com/"&gt;MySQL&lt;/a&gt; capabilities. I will certainly use &lt;a href="http://www.phpmyadmin.net/"&gt;phpMyAdmin&lt;/a&gt; more, having this book besides me to guide me the way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28215292-6256793965787307552?l=www.dragonbe.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dragonbe/~4/qhegAwXK4H8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dragonbe.com/feeds/6256793965787307552/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.dragonbe.com/2009/08/book-review-mastering-phpmyadmin-31.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/6256793965787307552" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/6256793965787307552" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dragonbe/~3/qhegAwXK4H8/book-review-mastering-phpmyadmin-31.html" title="Book review: Mastering phpMyAdmin 3.1" /><author><name>DragonBe</name><uri>http://www.blogger.com/profile/12610668749799675317</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16969274511863708634" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://www.dragonbe.com/2009/08/book-review-mastering-phpmyadmin-31.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-28215292.post-4466169353154660678</id><published>2009-06-17T17:11:00.000+02:00</published><updated>2009-06-17T17:11:50.386+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ibuildings" /><category scheme="http://www.blogger.com/atom/ns#" term="dpc09" /><category scheme="http://www.blogger.com/atom/ns#" term="zend_framework" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title type="text">Dutch PHP Conference 2009 wrapup</title><content type="html">&lt;p&gt;A couple of days ago I came home from one of the best &lt;a href="http://php.net" title="The Hypertext Preprocessor"&gt;PHP&lt;/a&gt; conferences in the world, &lt;strong&gt;&lt;a href="http://www.phpconference.nl" title="Dutch PHP Conference 2009"&gt;Dutch PHP Conference 2009&lt;/a&gt;&lt;/strong&gt; with again a very elite list of speakers.&lt;/p&gt;&lt;br /&gt;&lt;h2&gt;Day 0: Tutorial Day&lt;/h2&gt;&lt;p&gt;Thursday, June 11 was tutorial day. A whole day dedicated at learning new things by the greatest &lt;a href="http://php.net" title="The Hypertext Preprocessor"&gt;PHP&lt;/a&gt; minds in the world.&lt;/p&gt;&lt;p&gt;I attended the &lt;strong&gt;&amp;quot;&lt;a href="http://www.slideshare.net/weierophinney/zend-framework-workshop-dpc09" title="Zend Framework Workshop"&gt;Zend Framework Workshop&lt;/a&gt;&amp;quot;&lt;/strong&gt; by &lt;strong&gt;&lt;a href="http://weierophinney.net/matthew" title="Matthew Weier O' Phinney's blog"&gt;Matthew Weier O' Phinney&lt;/a&gt;&lt;/strong&gt;, Chief Architect at &lt;a href="http://framework.zend.com" title="Zend Framework"&gt;Zend Framework&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I went to see this tutorial session to see all the goodies that are put in &lt;a href="http://framework.zend.com" title="Zend Framework"&gt;Zend Framework&lt;/a&gt; 1.8 and to learn how to do stuff better. Great stuff like Zend_Tool, Zend_Application and other &lt;a href="http://framework.zend.com" title="Zend Framework"&gt;Zend Framework&lt;/a&gt; components are worth checking out.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;As it appears, I have to look into the Zend_Acl adapter using a configuration file or an external source and contribute my solutions to the &lt;a href="http://framework.zend.com" title="Zend Framework"&gt;Zend Framework&lt;/a&gt; wiki.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Afterwards a Belgian delegation went down-town Amsterdam to have dinner at an Italian place and a drink afterwards at &amp;quot;Leidse Plein&amp;quot;.&lt;/p&gt;&lt;br /&gt;&lt;h2&gt;Day 1&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;Day one was a very hectic day for me since I was scheduled to speak at 10:30am. But we'll get there in a minute.&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;Opening keynotes&lt;/h3&gt;&lt;p&gt;Before the opening keynote of &lt;strong&gt;&lt;a href="http://blog.calevans.com" title="Cal Evans' blog"&gt;Cal Evans&lt;/a&gt;&lt;/strong&gt;, Director of PCE at &lt;a href="http://ibuildings.com" title="The PHP Professionals"&gt;Ibuildings&lt;/a&gt;, an awesome &lt;a href="http://vimeo.com/5165858" title="The intro movie for Dutch PHP Conference 2009"&gt;animated movie&lt;/a&gt; was shown to the public.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://blog.calevans.com" title="Cal Evans' blog"&gt;Cal Evans&lt;/a&gt;&lt;/strong&gt; talked about what everyone could expect at the conference, what the rules of engagement were and what tags to use during the conference (a very important note).&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://gravitonic.com" title="Andrei Zmievski's Blog"&gt;Andrei Zmievski&lt;/a&gt;&lt;/strong&gt; opened the conference officially talking about &lt;strong&gt;&amp;quot;PHP: people, code and ideas&amp;quot;&lt;/strong&gt;. Too bad I had to flee the scene half way the presentation to set up my gear for my own talk about &lt;a href="http://php.net/spl" title="The Standard PHP Library"&gt;SPL&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;Morning Sessions&lt;/h3&gt;&lt;p&gt;I hosted a talk called &lt;strong&gt;&amp;quot;&lt;a href="http://www.slideshare.net/DragonBe/spl-not-a-bridge-too-far" title="SPL, not a bridge too far"&gt;SPL, not a bridge too far&lt;/a&gt;&amp;quot;&lt;/strong&gt; where I discussed on a low level (according to some, a bit too low) the funky features &lt;a href="http://php.net/spl" title="The Standard PHP Library"&gt;SPL&lt;/a&gt; brings to the table. And looking at the comments left on &lt;a href="http://joind.in/586" title="Rate my talk on joind.in"&gt;joind.in&lt;/a&gt; I actually got people interested in using &lt;a href="http://php.net/spl" title="The Standard PHP Library"&gt;SPL&lt;/a&gt; in their future development projects.&lt;br/&gt;Too bad I cut it short, like most people mentioned, because there's a whole lot to tell about &lt;a href="http://php.net/spl" title="The Standard PHP Library"&gt;SPL&lt;/a&gt;. Thanks everyone for you feedback, I will definitely keep it mind to make my presentation better.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://benramsey.com" title="Ben Ramsey's blog"&gt;Ben Ramsey&lt;/a&gt;&lt;/strong&gt; showed us that &lt;strong&gt;&amp;quot;&lt;a href="http://www.slideshare.net/benramsey/grokking-the-rest-architectural-style" title="Grokking the REST architectural style"&gt;Grokking the REST architectural style&lt;/a&gt;&amp;quot;&lt;/strong&gt; is worth thinking about when dealing with REST web services. He also talked about ATOM as a protocol, and he really got me interested in it to find out more. Thanks Ben, it was awesome.&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;Afternoon Sessions&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://weierophinney.net/matthew" title="Matthew Weier O' Phinney's blog"&gt;Matthew Weier O' Phinney&lt;/a&gt;&lt;/strong&gt; impressed us all again with another talk about &lt;strong&gt;&amp;quot;Contribute&amp;quot;&lt;/strong&gt; and what we developers could do to make a difference.&lt;br/&gt;For everyone involved in open-source projects, a must see presentation and again lots of kudos to Matthew for bringing this point to the attention of the masses.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Unfortunately I missed &lt;strong&gt;&lt;a href="http://www.suspekt.org" title="Stefan Esser's Blog"&gt;Stefan Esser&lt;/a&gt;'s&lt;/strong&gt; talk about &lt;strong&gt;&amp;quot;Secure Programming with the Zend Framework&amp;quot;&lt;/strong&gt; and I'm now waiting for the slides to appear online.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Closing talk of the day was &lt;strong&gt;&lt;a href="http://www.hauser-wenz.de" title="Christian Wenz's Blog"&gt;Christian Wenz&lt;/a&gt;&lt;/strong&gt; with &lt;strong&gt;&amp;quot;Web Accessibility - A Primer&amp;quot;&lt;/strong&gt; about the directives to make your web applications more accessible. Although I do appreciate the topic, Christian listed many items straight from the &lt;a href="http://www.w3.org" title="World Wide Web Consortium"&gt;W3C Website&lt;/a&gt; and read them out to the public.&lt;br/&gt;A good topic but not much new stuff in it, if you've checked out the &lt;a href="http://www.w3.org" title="World Wide Web Consortium"&gt;W3C Website&lt;/a&gt; already.&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;Speakers Dinner&lt;/h3&gt;&lt;p&gt;In the evening the &lt;a href="http://phpconference.nl" title="Dutch PHP Conference"&gt;DPC&lt;/a&gt; crew had organized a speakers dinner, where all the great minds joined together enjoying talking with each other about &lt;a href="http://php.net" title="The Hypertext Preprocessor"&gt;PHP&lt;/a&gt; and other non-PHP related things.&lt;/p&gt;&lt;p&gt;After the dinner, a social event was held at the tiki bar &lt;a href="http://www.strand-zuid.nl" title="Strand Zuid"&gt;Strand Zuid&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Back at the hotel I was engaged in a few conversations about &lt;a href="http://framework.zend.com" title="Zend Framework"&gt;Zend Framework&lt;/a&gt; and &lt;a href="http://php.net" title="The Hypertext Preprocessor"&gt;PHP&lt;/a&gt; in general. Although I enjoyed those conversations, ending up in bed at around 3:30am was certainly not good for getting up in time the following day.&lt;/p&gt;&lt;br /&gt;&lt;h2&gt;Day 2&lt;/h2&gt;&lt;p&gt;Still in a sleepy state of mind, I headed out to the conference for day 2 missing the opening keynote by &lt;strong&gt;Owen Byrne&lt;/strong&gt; on &lt;strong&gt;&amp;quot;Digg: The first two years&amp;quot;&lt;/strong&gt;. But the coffee break afterwards I certainly attended.&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;Morning Sessions&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://eliw.com" title="Eli White's blog"&gt;Eli White&lt;/a&gt;&lt;/strong&gt; introduced us to the wonderful world of scalable websites with his presentation &lt;strong&gt;&amp;quot;&lt;a href="http://www.eliw.com/presentations/dpc-2009-scalable.pdf" title="Slides of Habits of Highly Scalable Web Applications"&gt;Habits of Highly Scalable Web Applications&lt;/a&gt;&amp;quot;&lt;/strong&gt; and believe me, there are a few things that you might want to investigate further !&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Then our dear friend, icon of the Dutch and Belgian &lt;a href="http://phpwomen.org" title="PHP Women"&gt;PHPWomen&lt;/a&gt; and most definitely a great host &lt;strong&gt;Juliette Reinders Folmer&lt;/strong&gt; (&lt;a href="http://twitter.com/jrf_nl" title="A must follow on Twitter.com"&gt;@jrf_nl&lt;/a&gt;) gave by far the best presentation at &lt;a href="http://phpconference.nl" title="Dutch PHP Conference"&gt;DPC&lt;/a&gt; titled &lt;strong&gt;&amp;quot;Everything you always wanted to know about UTF-8 (but never dared to ask)&amp;quot;&lt;/strong&gt; where she takes you down the road of UTF-8 encoding issues and looks ahead of the nifty features PHP 6 brings to the table with it's Unicode support.&lt;br/&gt;&lt;br /&gt;Since everyone rated this talk as &lt;strong&gt;&amp;quot;best talk ever&amp;quot;&lt;/strong&gt;, I won't be surprised to see it on the &lt;a href="http://www.zendcon.com" title="ZendCon PHP Conference"&gt;ZendCon 09&lt;/a&gt; scedule (hint for &lt;a href="http://twitter.com/eliw" title="Follow Eli White on Twitter.com"&gt;@EliW&lt;/a&gt;) or on other major PHP conferences worldwide.&lt;/p&gt;&lt;br /&gt;&lt;h2&gt;Afternoon sessions&lt;/h2&gt;&lt;p&gt;After lunch I went to see &lt;strong&gt;&lt;a href="http://akrabat.com" title="Rob Allen's blog"&gt;Rob Allen&lt;/a&gt;&lt;/strong&gt; to learn more about &lt;strong&gt;&amp;quot;Caching for Performance&amp;quot;&lt;/strong&gt;, but right in the middle of this very interesting session I had to bail because a mix-up with the hotel had taken place. Believing my room was booked until the 14&lt;sup&gt;th&lt;/sup&gt;, I was surprised to hear I had to clean up my room. So I was rushing back to the hotel to get all my stuff.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;When I returned, &lt;strong&gt;Lorenzo Alberton&lt;/strong&gt; was already rounding up his talk about &lt;strong&gt;&amp;quot;Trees in the Database: Advanced Data Structures&amp;quot;&lt;/strong&gt;. Too bad, since I believe it was also a very good and interesting session.&lt;/p&gt;&lt;br /&gt;&lt;h2&gt;Closing Keynote: The Cal &amp;amp; Ivo Show&lt;/h2&gt;&lt;p&gt;Rounding up the conference, &lt;strong&gt;&lt;a href="http://blog.calevans.com" title="Cal Evans' blog"&gt;Cal Evans&lt;/a&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;a href="http://jansch.nl" title="Ivo Jansch's blog"&gt;Ivo Jansch&lt;/a&gt;&lt;/strong&gt; were giving sit-in session where they invited 3 guests on stage to talk about PHP: &lt;strong&gt;&lt;a href="http://gravitonic.com" title="Andrei Zmievski's Blog"&gt;Andrei Zmievski&lt;/a&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;a href="http://www.lornajane.net" title="Lorna Jane Mitchel's blog"&gt;Lorna Mitchel&lt;/a&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;a href="http://blog.preinheimer.com" title="Paul Reinheimer's blog"&gt;Paul Reinheimer&lt;/a&gt;&lt;/strong&gt;.&lt;br/&gt;&lt;br /&gt;Although the discussions were very interesting, most of the attention was drawn to the big screen behind them where tweets and photos were shown that were taken, uploaded and tagged during the conference.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Afterwards drinks were served for attendees, but I had to catch my train ride back home so I couldn't stay to enjoy the good vibes &lt;a href="http://phpconference.nl" title="Dutch PHP Conference"&gt;DPC&lt;/a&gt; audience was generating, but even in my train I could feel the air buzzing &lt;a href="http://php.net" title="The Hypertext Preprocessor"&gt;PHP&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;h2&gt;Conclusion&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.ibuildings.com" title="The PHP Professionals"&gt;Ibuildings&lt;/a&gt;&lt;/strong&gt; has done it again, &lt;a href="http://phpconference.nl" title="Dutch PHP Conference"&gt;DPC 2009&lt;/a&gt; will certainly go in the history books as being the best conference ever&amp;nbsp;!&lt;br/&gt;&lt;br /&gt;Many thanks to the Cal, Ivo and all organizers, the &lt;a href="http://www.ibuildings.com" title="The PHP Professionals"&gt;Ibuildings Design team&lt;/a&gt; (for making an awesome video and creating very cool speaker avatars) and to the sponsors of the event (&lt;a href="http://www.zend.com" title="The PHP Company"&gt;Zend Technologies, Inc.&lt;/a&gt;, &lt;a href="http://www.oracle.com" title="Oracle"&gt;Oracle&lt;/a&gt;, &lt;a href="http://www.ibm.com" title="IBM"&gt;IBM&lt;/a&gt; and &lt;a href="http://www.microsoft.com" title="Microsoft"&gt;Microsoft&lt;/a&gt;) for their participation in this event and lowering the price of the tickets.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;If you missed the event, or you want to catch up on great talks and tweets about the talks, I've provided here a small list of important sources where you can find more about &lt;a href="http://phpconference.nl" title="Dutch PHP Conference"&gt;DPC 2009&lt;/a&gt;:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://search.twitter.com/search?q=dpc" title="Search #dpc on twitter.com"&gt;Twitter (tag #dpc)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://hashtags.org/tag/dpc" title="See trends about #dpc on hashtag"&gt;Hashtag (tag #dpc)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twitter.bivings.com/dpc/" title="Twitterslurp provided by Bivings"&gt;Twitterslurp by Bivings (tag #dpc)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.flickr.com/photos/tags/dpc09" title="Find pictures taken at DPC09"&gt;Flickr photos (tag dpc09)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.slideshare.net/search/slideshow?q=dpc09" title="Slides of DPC09 on Slideshare.net"&gt;Slideshare slides (tag dpc09)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://joind.in/event/view/21" title="Votes for DPC09 on JoindIn"&gt;Voting on joind.in&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://techportal.ibuildings.com/2009/06/15/dpc-sessions-and-slides/" title="View the official listing on Techportal"&gt;TechPortal Official Listing&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28215292-4466169353154660678?l=www.dragonbe.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dragonbe/~4/FB8ahtFLyoM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dragonbe.com/feeds/4466169353154660678/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.dragonbe.com/2009/06/dutch-php-conference-2009-wrapup.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/4466169353154660678" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/4466169353154660678" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dragonbe/~3/FB8ahtFLyoM/dutch-php-conference-2009-wrapup.html" title="Dutch PHP Conference 2009 wrapup" /><author><name>DragonBe</name><uri>http://www.blogger.com/profile/12610668749799675317</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16969274511863708634" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://www.dragonbe.com/2009/06/dutch-php-conference-2009-wrapup.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-28215292.post-2991988782241000727</id><published>2009-05-28T12:03:00.003+02:00</published><updated>2009-05-28T12:06:19.741+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="phptek" /><category scheme="http://www.blogger.com/atom/ns#" term="tek09" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title type="text">php|tek 09 - Overview of an awesome conference</title><content type="html">&lt;a href="http://tek.mtacon.com" imageanchor="1" style="margin-left: 1em; margin-right: 1em; float: left;"&gt;&lt;img border="0" src="http://joind.in/inc/img/event_icons/phptek09.gif" /&gt;&lt;/a&gt;&lt;br /&gt;For those who just returned from outer-space, last week was &lt;a href="http://tek.mtacon.com/"&gt;PHP|Tek 09&lt;/a&gt; in Chicago, IL, USA. By far the most intensive &lt;a href="http://php.net/"&gt;PHP&lt;/a&gt; conference ever, organized by &lt;a href="http://phparch.com/"&gt;PHP|Architect&lt;/a&gt;, the true PHP magazine. I give here my experiences as I have recorded them during these very intense days.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Tuesday, May 19&lt;/b&gt;&lt;br /&gt;As it is common with many (&lt;a href="http://php.net/"&gt;PHP&lt;/a&gt;) conferences, the first day is often a tutorial day, where you get 3 hours of high quality tutorials given by the great minds within the PHP community.&lt;br /&gt;&lt;br /&gt;I attended &lt;a href="http://funkatron.com/"&gt;Ed Finkler&lt;/a&gt;'s session on &lt;a href="http://www.slideshare.net/funkatron/intro-to-mvc-development-in-php"&gt;MVC development&lt;/a&gt; in PHP where he talked about the best practices on implementing MVC and what the differences were between several frameworks.&lt;br /&gt;&lt;br /&gt;After lunch I headed out to &lt;a href="http://www.slideshare.net/sebastian_bergmann/php-code-review-1464932"&gt;PHP Code Review&lt;/a&gt; given by &lt;a href="http://www.priebsch.de/"&gt;Stefan Priebsch&lt;/a&gt;, &lt;a href="http://sebastian-bergmann.de/"&gt;Sebastian Bergmann&lt;/a&gt; and &lt;a href="http://twitter.com/arneblankerts"&gt;Arne Blankerts&lt;/a&gt;, all three co-founders of the &lt;a href="http://thephp.cc/"&gt;PHP Consulting Company&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Wednesday, May 20&lt;/b&gt;&lt;br /&gt;&lt;a href="http://gravitonic.com/"&gt;Andrei Zmievski&lt;/a&gt; opened the conference with a very impressive key note about PHP 6 (after he could free himself being tied up in a dark room by &lt;a href="http://mtabini.blogspot.com/"&gt;Marco Tabini&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.calevans.com/"&gt;Cal Evans&lt;/a&gt; impressed us about using Zend Framework for CLI development explaining clearly how you can use the power of &lt;a href="http://framework.zend.com/"&gt;Zend Framework&lt;/a&gt; to kick of applications on your command line. Go Cal !&lt;br /&gt;&lt;br /&gt;During the day I missed a couple of sessions because I had very interesting talks with other people there at the conference, but I managed to be back in time to watch &lt;a href="http://elizabethmariesmith.com/"&gt;Elizabeth M. Smith&lt;/a&gt; talk about SPL to the Rescue (a topic that I like so much, I'm going to talk about it myself at the &lt;a href="http://phpconference.nl/"&gt;Dutch PHP Conference&lt;/a&gt;). She did an amazing job explaining why one should use &lt;a href="http://php.net/spl"&gt;SPL&lt;/a&gt; in the first place and even got people motivated to help improve today's documentation of &lt;a href="http://php.net/spl"&gt;SPL&lt;/a&gt; on &lt;a href="http://php.net/"&gt;php.net&lt;/a&gt; website.&lt;br /&gt;&lt;br /&gt;If you want to do unit testing on your (&lt;a href="http://php.net/"&gt;PHP&lt;/a&gt;) code, you must ensure you code is testable. &lt;a href="http://sebastian-bergmann.de/"&gt;Sebastian Bergmann&lt;/a&gt; has given a great session on &lt;a href="http://www.slideshare.net/sebastian_bergmann/untestable-code"&gt;Untestable Code&lt;/a&gt;, or which are the things you need to think about when writing code so it can be tested.&lt;br /&gt;&lt;br /&gt;In the evening I was hosting an uncon session about &lt;a href="http://www.slideshare.net/DragonBe/phpunit-testing-to-zendtest"&gt;PHPUnit testing and Zend_Test&lt;/a&gt; where I described the various ways to optimize your tests, how to test databases and how to test your &lt;a href="http://framework.zend.com/"&gt;Zend Framework&lt;/a&gt; application.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Thursday, May 21&lt;/b&gt;&lt;br /&gt;If you wanted to know what's included in the PHP 5.3 releases, you should have attended &lt;a href="http://blog.libssh2.org/"&gt;Sara Golemon&lt;/a&gt;'s session PHP 5.3 - Hot or Not ? where she actually gives you more insight great features that have been added to the PHP 5.3 releases, besides namepsaces.&lt;br /&gt;&lt;br /&gt;For all those new to Linux, check out &lt;a href="http://www.slideshare.net/lornajane/linuxfu-for-php-developers"&gt;Linux-Fu&lt;/a&gt; given by &lt;a href="http://www.lornajane.net/"&gt;Lorna Mitchel&lt;/a&gt; where you get an explenation about the tools that are really useful on your command line. Also good if you don't use a mouse.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://eliw.com/"&gt;Eli White&lt;/a&gt; has given us more insight in the fundamentals of software development with his session The Knight Rider Methodology to Software Development where he's comparing situations that Michael Knight and KIT were in with situations software developers come accross.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.lornajane.net/"&gt;Lorna Mitchel&lt;/a&gt; and &lt;a href="http://leftontheweb.com/"&gt;Stefan Koopmanschap&lt;/a&gt; gave us more insight into the community behind php with their session A Guide to Using and Understanding the Community. Since this talk was so great, they repeated this session on Friday for recording purposes.&lt;br /&gt;&lt;br /&gt;During the uncon sessions I was hosting a round table discussion about PHP user groups and what can be done to draw more attention to these user groups, how to start up with one or how to restart a dorment user group. Getting lots of feedback, I'm going to add all this information into a presentation that can be called the 101 on php user groups. Also keep an eye out for &lt;a href="http://everettsconsulting.com/"&gt;Clark Everetts&lt;/a&gt; website about this session, because he has written down lots of stuff.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Friday, May 22&lt;/b&gt;&lt;br /&gt;Closing keynote was provided by &lt;a href="http://terrychay.com/blog"&gt;Terry Chay&lt;/a&gt;, the guru of explicit presentations. Since you know you're in for a treat, people were counting Terry's f-bombs while enjoying his talk. A &lt;a href="http://lavalantern.org/wwfm_blog/?p=272"&gt;video recording&lt;/a&gt; was made so you can count f-bombs and enjoy the show yourself as well.&lt;br /&gt;&lt;br /&gt;Immediately afterwards I attended an uncon session from &lt;a href="http://paul-m-jones.com/"&gt;Paul M. Jones&lt;/a&gt; about &lt;a href="http://joind.in/468"&gt;Benchmarking PHP Applications&lt;/a&gt; where Paul made a great comparison between frameworks and franchising your business. Awesome presentation and I'm looking forward attending more sessions of Paul.&lt;br /&gt;&lt;br /&gt;Closing the conference, I hosted my last uncon session about implementing &lt;a href="http://www.slideshare.net/DragonBe/continuous-integration-stepbystep"&gt;Continuous Integration step-by-step&lt;/a&gt;, where I discussed the common situations all developers have seen leading towards an automated integration system using the tools best fitted to do the job.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Final notes on this conference&lt;/b&gt;&lt;br /&gt;This was the best &lt;a href="http://php.net/"&gt;PHP&lt;/a&gt; conference ever, where talks were given targeting intermediate to high levelo developers, awesome catering and lots of fun after-hours. I want to express my great gratitude to all that were responsible organizing this event and I'm looking forward attending next conferences.&lt;br /&gt;&lt;br /&gt;If you weren't there, I want to suggest attending next year's conference. You learn so much in the mids of everyone who's involved with &lt;a href="http://php.net/"&gt;PHP&lt;/a&gt; core, &lt;a href="http://php.net/"&gt;PHP&lt;/a&gt; applications or &lt;a href="http://php.net/"&gt;PHP&lt;/a&gt; services. If you can't get an answer there, don't bother become a &lt;a href="http://php.net/"&gt;PHP&lt;/a&gt; developer.&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28215292-2991988782241000727?l=www.dragonbe.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dragonbe/~4/9xdv5eOTxy4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dragonbe.com/feeds/2991988782241000727/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.dragonbe.com/2009/05/phptek-09-overview-of-awesome.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/2991988782241000727" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/2991988782241000727" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dragonbe/~3/9xdv5eOTxy4/phptek-09-overview-of-awesome.html" title="php|tek 09 - Overview of an awesome conference" /><author><name>DragonBe</name><uri>http://www.blogger.com/profile/12610668749799675317</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16969274511863708634" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://www.dragonbe.com/2009/05/phptek-09-overview-of-awesome.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-28215292.post-2722605289961831452</id><published>2009-05-21T20:34:00.002+02:00</published><updated>2009-05-21T20:36:26.146+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="phptek" /><category scheme="http://www.blogger.com/atom/ns#" term="uncon" /><category scheme="http://www.blogger.com/atom/ns#" term="tek09" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="presentation" /><title type="text">PHP|Tek 09 - Uncon session: PHPUnit testing to Zend_Test</title><content type="html">At the first day of PHP|Tek 09 I presented a session on Unit testing using PHPUnit, starting off with a simple example to explain unit testing and ending with testing a Zend Framework application using the application bootstrap.&lt;br /&gt;&lt;br /&gt;If you attended this session, I'd love to hear from you at &lt;a href="http://joind.in/442" title="rate my presentation"&gt;http://joind.in/442&lt;/a&gt;&lt;div style="width: 425px; text-align: left;" id="__ss_1468232"&gt;&lt;a style="margin: 12px 0pt 3px; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; display: block; text-decoration: underline;" href="http://www.slideshare.net/DragonBe/phpunit-testing-to-zendtest?type=presentation" title="PHPUnit testing to Zend_Test"&gt;PHPUnit testing to Zend_Test&lt;/a&gt;&lt;object style="margin: 0px;" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=phpunittesting-090521002015-phpapp01&amp;amp;stripped_title=phpunit-testing-to-zendtest"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=phpunittesting-090521002015-phpapp01&amp;amp;stripped_title=phpunit-testing-to-zendtest" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;"&gt;View more &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/DragonBe"&gt;Michelangelo Van dam&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28215292-2722605289961831452?l=www.dragonbe.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dragonbe/~4/tJtiMq7UAAI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dragonbe.com/feeds/2722605289961831452/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.dragonbe.com/2009/05/phptek-09-uncon-session-phpunit-testing.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/2722605289961831452" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/2722605289961831452" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dragonbe/~3/tJtiMq7UAAI/phptek-09-uncon-session-phpunit-testing.html" title="PHP|Tek 09 - Uncon session: PHPUnit testing to Zend_Test" /><author><name>DragonBe</name><uri>http://www.blogger.com/profile/12610668749799675317</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16969274511863708634" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dragonbe.com/2009/05/phptek-09-uncon-session-phpunit-testing.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-28215292.post-4488789544757911907</id><published>2009-05-11T00:50:00.000+02:00</published><updated>2009-05-11T00:50:11.043+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="tf09" /><category scheme="http://www.blogger.com/atom/ns#" term="phptestfest" /><category scheme="http://www.blogger.com/atom/ns#" term="testfest" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title type="text">PHP Test Fest 2009</title><content type="html">For those who haven't heard about it, last Saturday was &lt;a href="http://qa.php.net/testfest"&gt;PHP Test Fest 2009&lt;/a&gt;, and here in Belgium it was organized by &lt;a href="http://phpbelgium.be/"&gt;PHPBelgium&lt;/a&gt; at the new &lt;a href="http://www.combell.com/"&gt;Combell&lt;/a&gt; location in Ghent.&lt;br /&gt;&lt;br /&gt;We decided to test the SQLite3 extension, and we also had two people writing tests for LDAP. With a nice end result of 24 tests written for SQLite3 and 9 for LDAP, we are very pleased with the result since only 9 people attended our event.&lt;br /&gt;&lt;br /&gt;Our mentor &lt;a href="http://felix.phpbelgium.be/blog/"&gt;Felix De Vliegher&lt;/a&gt;&amp;nbsp; had given us a very clear instructions and apparently most attendees already had seen &lt;a href="http://www.slideshare.net/PHPBelgium/preparation-for-php-test-fest-2009"&gt;my&lt;/a&gt; (and other people's) slides on &lt;a href="http://slideshare.net/"&gt;slideshare.net&lt;/a&gt;. &lt;a href="http://www.flickr.com/photos/dragonbe/sets/72157617817773871/"&gt;See the pictures of those great moments on flicr.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;All attendees did share a few common quotes afterwards:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; "I learned so much here"&lt;/li&gt;&lt;li&gt;"Next year I come back"&lt;/li&gt;&lt;li&gt;"Shame on those who didn't come today"&lt;/li&gt;&lt;/ul&gt;I would like to express my gratitude for the &lt;a href="http://qa.php.net/"&gt;PHP QA Team&lt;/a&gt; for organizing this event, to &lt;a href="http://www.combell.com/"&gt;Combell&lt;/a&gt; for facilitating this event and providing us very nice sandwiches and drinks and to &lt;a href="http://www.ibuildings.com/"&gt;Ibuildings&lt;/a&gt; for providing us a USB stick where we can store our libs and tests on.&lt;br /&gt;&lt;br /&gt;If I do get some "spare" time, I surely will keep on writing tests for the &lt;a href="http://php.net/"&gt;PHP&lt;/a&gt; core, because it is so important to ensure good code coverage on each and every &lt;a href="http://php.net/"&gt;PHP&lt;/a&gt; component.&lt;br /&gt;&lt;br /&gt;In the time being, do check out the &lt;a href="http://gcov.php.net/PHP_5_3/lcov_html/"&gt;code coverage reports for PHP 5_3&lt;/a&gt; and see for yourself that there's still a lot of work to be done to get everything in the green. So step up and help &lt;a href="http://php.net/"&gt;PHP&lt;/a&gt; helping you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28215292-4488789544757911907?l=www.dragonbe.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dragonbe/~4/THOwYYxB05s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dragonbe.com/feeds/4488789544757911907/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.dragonbe.com/2009/05/php-test-fest-2009.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/4488789544757911907" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/4488789544757911907" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dragonbe/~3/THOwYYxB05s/php-test-fest-2009.html" title="PHP Test Fest 2009" /><author><name>DragonBe</name><uri>http://www.blogger.com/profile/12610668749799675317</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16969274511863708634" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><georss:point>51.1133388 3.7889153</georss:point><feedburner:origLink>http://www.dragonbe.com/2009/05/php-test-fest-2009.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-28215292.post-4527895784061380091</id><published>2009-04-09T15:36:00.000+02:00</published><updated>2009-04-09T15:36:32.194+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="conference" /><category scheme="http://www.blogger.com/atom/ns#" term="dpc09" /><category scheme="http://www.blogger.com/atom/ns#" term="amsterdam" /><category scheme="http://www.blogger.com/atom/ns#" term="spl" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="dutch php conference 2009" /><title type="text">Speaker at Dutch PHP Conference 2009</title><content type="html">&lt;a href="http://phpconference.nl/" title="I'm speaker at Dutch PHP Conference 2009"&gt;&lt;img border="0" src="http://dpc.09.s3.amazonaws.com/dpc09_speaker.jpg" style="float: left;" /&gt;&lt;/a&gt;&lt;br /&gt;I'm happy to announce I'll be presenting a talk at the &lt;a href="http://phpconference.nl/"&gt;Dutch PHP Conference 2009&lt;/a&gt; in Amsterdam, a yearly PHP conference organized by &lt;a href="http://ibuildings.com/"&gt;Ibuildings - The PHP Professionals&lt;/a&gt;. This conference is mainly for PHP developers, businesses, governments and educational institutes. But everyone is welcome to experience the warm, fuzzy and very social aspects of PHP and it's community.&lt;br /&gt;&lt;br /&gt;My presentation "SPL, not a bridge too far" is actually an attempt to promote the usage of the &lt;a href="http://php.net/spl"&gt;Standard PHP Library&lt;/a&gt;. SPL provides so many features for iteration and array handling, but is not used or looked at by many developers. My goal is to show with examples that SPL can be a very powerful tool, and thus promoting the usage of SPL.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://phpconference.nl/"&gt;Dutch PHP Conference 2009&lt;/a&gt; is the place to be this year for everyone who's involved with PHP, and the &lt;a href="http://www.phpconference.nl/speakers/"&gt;list of speakers&lt;/a&gt; is awesome: &lt;a href="http://weierophinney.net/matthew/"&gt;Matthew Weier O'Phinney&lt;/a&gt;, &lt;a href="http://derickrethans.nl/"&gt;Derick Rethans&lt;/a&gt;,&amp;nbsp; &lt;a href="http://www.macvicar.net/"&gt;Scot MacVicar&lt;/a&gt;, &lt;a href="http://eliw.com/"&gt;Eli White&lt;/a&gt;, &lt;a href="http://adviesenzo.nl/"&gt;Juliette Reinders Folmer&lt;/a&gt; and &lt;a href="http://blog.maartenballiauw.be/"&gt;Maarten Balliauw&lt;/a&gt; (to name a few).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dpc09.paydro.net/"&gt;Ticket sale&lt;/a&gt; is now open. Get a &lt;b&gt;€ 100 early bird discount&lt;/b&gt; on a three-day ticket or € 55 on a ticket for Tutorial Day only, if you order your tickets before April 30, 2009. Go quickly to the &lt;a href="http://dpc09.paydro.net/"&gt;registration page&lt;/a&gt; and get yourself a seat for the &lt;b&gt;hottest PHP conference in Europe&lt;/b&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28215292-4527895784061380091?l=www.dragonbe.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dragonbe/~4/A96U4zUYvsE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dragonbe.com/feeds/4527895784061380091/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.dragonbe.com/2009/04/speaker-at-dutch-php-conference-2009.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/4527895784061380091" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/4527895784061380091" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dragonbe/~3/A96U4zUYvsE/speaker-at-dutch-php-conference-2009.html" title="Speaker at Dutch PHP Conference 2009" /><author><name>DragonBe</name><uri>http://www.blogger.com/profile/12610668749799675317</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16969274511863708634" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://www.dragonbe.com/2009/04/speaker-at-dutch-php-conference-2009.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-28215292.post-5860591575791662973</id><published>2009-02-23T15:17:00.000+01:00</published><updated>2009-02-23T15:17:57.990+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="rant" /><category scheme="http://www.blogger.com/atom/ns#" term="mobistar" /><category scheme="http://www.blogger.com/atom/ns#" term="failure" /><title type="text">When mobile services are failing...</title><content type="html">&lt;b&gt;&lt;span style="font-size: large;"&gt;The story&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;About 3 months ago I switched from mobile provider &lt;a href="http://www.proximus.be/"&gt;Proximus&lt;/a&gt; to it's competitor &lt;a href="http://www.mobistar.be/"&gt;Mobistar&lt;/a&gt; because of lower rates and special deals for self employed people. Because we were close to New Year, I asked politely to make the transfer after New Year.&lt;br /&gt;&lt;br /&gt;It all started on December 24 when all of a sudden, my old provider dropped the connection. They received the paper declaring I was switching providers. So, as instructed I switched SIM cards and I was now &lt;a href="http://www.mobistar.be/"&gt;Mobistar&lt;/a&gt; customer.&lt;br /&gt;&lt;br /&gt;But although I was able to make outgoing calls, I couldn't get incoming calls or messages. Being the day before Christmas, this is a major issue. Calling the service desk, didn't really provided me with a solution since they blamed &lt;a href="http://www.proximus.be/"&gt;Proximus&lt;/a&gt; for not transferring my number correctly.&lt;br /&gt;I then called my dedicated agent, but he was already packing for his Christmas holidays and not having time to figure it all out. So I was unreachable until December 27.&lt;br /&gt;&lt;br /&gt;All services were allright until December 31st, when I received my first "No service..." message. Again calling &lt;a href="http://www.mobistar.be/"&gt;Mobistar&lt;/a&gt; service desk was a failure, they referred me to a local &lt;a href="http://www.mobistar.be/"&gt;Mobistar&lt;/a&gt; shop to have my SIM-card replaced. So I did, replaced my SIM-card and had to wait for activation, which actually occured on January 3rd 2009. Since then, things started to look brighter and services were up-and-running.&lt;br /&gt;&lt;br /&gt;But on February 16, &lt;a href="http://twitter.com/DragonBe/statuses/1215338449"&gt;I noticed&lt;/a&gt; again a "No service..." message on my iPhone. When I called the &lt;a href="http://www.mobistar.be/"&gt;Mobistar&lt;/a&gt; help desk, all they did was referring me to a local &lt;a href="http://www.mobistar.be/"&gt;Mobistar&lt;/a&gt; shop saying something was wrong with my SIM-card. I've come to think of it as being a default answer for all issues.&lt;br /&gt;&lt;br /&gt;Again, today I experience the same issue with my iPhone. Again a "No service..." on top of my screen. So, while visiting &lt;a href="http://www.mechelen.be/"&gt;Mechelen&lt;/a&gt; city center for lunch, I visited the &lt;a href="http://www.mobistar.be/"&gt;Mobistar&lt;/a&gt; shop and had my SIM-card replaced again. Having to wait about half an hour, and all services should be up-and-running again.&lt;br /&gt;&lt;br /&gt;Waiting for more then an hour, I first checked if my iPhone wasn't broken by using a SIM-card of another provider (&lt;a href="http://www.vodafone.nl/"&gt;Vodafone&lt;/a&gt; NL) before deciding to give &lt;a href="http://www.mobistar.be/"&gt;Mobistar&lt;/a&gt; support desk a call. And now I know the true story behind all misery:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.mobistar.be/"&gt;Mobistar&lt;/a&gt; is having issues with their provisioning system, so new SIM-card activations cannot be processed correctly (I shall have to wait)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mobistar.be/"&gt;Mobistar&lt;/a&gt; is experiencing network issues in my area (&lt;a href="http://www.mechelen.be/"&gt;Mechelen&lt;/a&gt; North) and are working hard to solve it &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mobistar.be/"&gt;Mobistar&lt;/a&gt; does not want people to read about it, so they only tell this to people who call in (very convenient when you're mobile services are out)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mobistar.be/"&gt;Mobistar&lt;/a&gt; does not inform their shops either of failures, since the &lt;a href="http://www.mobistar.be/"&gt;Mobistar&lt;/a&gt; shop I visited checked for systems, services or network failures.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;The punch&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;The Internet is a great way to communicate to your customers. You can mention successes to the whole world... but you can also provide information to your customers for moments when things aren't going as they are supposed to.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mobistar.be/"&gt;Mobistar&lt;/a&gt; could have made me (and other customers) happy if we were able to check if services were down or not working at all. This would leave us at least with an explenation of why our service is unavailable so we could inform the people who are now trying to contact us and getting a system error.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mobistar.be/"&gt;Mobistar&lt;/a&gt;, if you care to read my post here, talk to &lt;a href="http://blog.calevans.com/"&gt;Cal Evans&lt;/a&gt; about using internet services like &lt;a href="http://twitter.com/"&gt;Twitter &lt;/a&gt;as communication tools for your company. &lt;a href="http://search.twitter.com/search?q=mobistar"&gt;Your customers are using it to mention your failures as well&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Also, inform your customers. It's not difficult to set up a "Network status" page where you integrate you NOC information. If still in doubt, give me a call... I make you a special offer.&lt;br /&gt;&lt;br /&gt;And one last thing: tell your call center agents not to blame others (it's their fault), because I'm a customer of &lt;a href="http://www.mobistar.be/"&gt;Mobistar&lt;/a&gt; and how you internally run things is not my business. I'm only interested in when my service is up-and-running again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28215292-5860591575791662973?l=www.dragonbe.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dragonbe/~4/iltD7n2k3P0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dragonbe.com/feeds/5860591575791662973/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.dragonbe.com/2009/02/when-mobile-services-are-failing.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/5860591575791662973" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/5860591575791662973" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dragonbe/~3/iltD7n2k3P0/when-mobile-services-are-failing.html" title="When mobile services are failing..." /><author><name>DragonBe</name><uri>http://www.blogger.com/profile/12610668749799675317</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16969274511863708634" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><georss:point>51.0303007 4.4664046</georss:point><feedburner:origLink>http://www.dragonbe.com/2009/02/when-mobile-services-are-failing.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-28215292.post-6467915363061448176</id><published>2009-02-23T12:06:00.001+01:00</published><updated>2009-02-23T12:07:53.552+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="chris shiflett" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><category scheme="http://www.blogger.com/atom/ns#" term="feedburner" /><category scheme="http://www.blogger.com/atom/ns#" term="planet-php" /><title type="text">Feedburner move to Google error</title><content type="html">This morning I checked my &lt;a href="http://feedburner.com/"&gt;feedburner&lt;/a&gt; stats and I got a message I should move my feeds over to &lt;a href="http://google.com/"&gt;Google&lt;/a&gt;, and so I did.&lt;br /&gt;&lt;br /&gt;I should have read &lt;a href="http://shiflett.org/blog/2009/feb/migrating-from-feedburner-to-google"&gt;Chris Shiflett's blog post&lt;/a&gt; first to prevent my feeds spamming the entire aggregated internet, in particular &lt;a href="http://www.planet-php.net/"&gt;Planet-PHP&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So, I want to apologize to everyone for my massive spam on the various aggregation sites and a hint to &lt;a href="http://google.com/"&gt;Google&lt;/a&gt;: make sure you don't spam the internet while moving stuff from one place to another.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28215292-6467915363061448176?l=www.dragonbe.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dragonbe/~4/gsa0BzsR2_4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dragonbe.com/feeds/6467915363061448176/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.dragonbe.com/2009/02/feedburner-move-to-google-error.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/6467915363061448176" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/6467915363061448176" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dragonbe/~3/gsa0BzsR2_4/feedburner-move-to-google-error.html" title="Feedburner move to Google error" /><author><name>DragonBe</name><uri>http://www.blogger.com/profile/12610668749799675317</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16969274511863708634" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dragonbe.com/2009/02/feedburner-move-to-google-error.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-28215292.post-1308007290514654465</id><published>2009-02-11T14:47:00.145+01:00</published><updated>2009-02-11T15:59:31.274+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="training courses" /><category scheme="http://www.blogger.com/atom/ns#" term="FOSDEM" /><category scheme="http://www.blogger.com/atom/ns#" term="phpwomen" /><category scheme="http://www.blogger.com/atom/ns#" term="phpbelgium" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title type="text">Fosdem 2009 in review</title><content type="html">Last weekend I was at &lt;a href="http://www.fosdem.org/"&gt;FOSDEM'09&lt;/a&gt;, Free and Open-Source Developers European Meeting, in Brussels (Belgium). Together with co-founder &lt;a href="http://felix.phpbelgium.be/blog/"&gt;Felix De Vliegher&lt;/a&gt; and co-organizer &lt;a href="http://patrickallaert.blogspot.com/"&gt;Patrick Allaert&lt;/a&gt;  we were promoting the mission of &lt;a href="http://phpbelgium.be/"&gt;PHPBelgium&lt;/a&gt;, the largest PHP user group in Belgium.&lt;br /&gt;&lt;br /&gt;Besides promoting PHP and the activities of the user group, we also promoted &lt;a href="http://phpwomen.org/"&gt;phpwomen.org&lt;/a&gt;, an international organization for women involved in PHP development. Men are also welcome there.&lt;br /&gt;&lt;br /&gt;On days like these, we're a central point for information and people used the opportunity to ask us a lot of questions regarding PHP. Here is a top 5 of most asked questions:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. Where can I/our company turn to for advanced PHP training courses ?&lt;/b&gt;&lt;br /&gt;I believe &lt;a href="http://www.ibuildings.com/"&gt;Ibuildings&lt;/a&gt;, &lt;i&gt;the PHP professionals&lt;/i&gt;, located in the Netherlands and UK, are the best sources to turn to regarding training courses for advanced PHP and certification.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ibuildings.com/"&gt;Ibuildings&lt;/a&gt; provides standard PHP training courses, including courses from php|architect, but can also provide custom training courses that meet the requirements of your company needs. Training courses are given by &lt;a href="http://www.zend.com/en/services/certification/"&gt;Zend Certified Engineers&lt;/a&gt; (ZCE's) with years of hands-on experience in complex PHP projects. More information can be found at &lt;a href="http://ibuildings.com/technology/training"&gt;http://ibuildings.com/technology/training&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. Is there a certification program for PHP developers (like for Java, .Net, ...) ?&lt;/b&gt;&lt;br /&gt;Yes, there is. &lt;a href="http://www.zend.com/"&gt;Zend Technologies, Inc.&lt;/a&gt; has two sorts of certifications: &lt;a href="http://www.zend.com/en/services/certification/"&gt;Zend Certified Engineer&lt;/a&gt; (ZCE) for PHP developers and &lt;a href="http://www.zend.com/en/services/certification/"&gt;Zend Framework Certified Engineer&lt;/a&gt; for &lt;a href="http://framework.zend.com/"&gt;Zend Framework&lt;/a&gt; developers.&lt;br /&gt;Training courses are provided by Zend Partners or by &lt;a href="http://www.ibuildings.com/"&gt;Ibuildings&lt;/a&gt; in the Netherlands and UK.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. Is PHP enterprise ready ?&lt;/b&gt;&lt;br /&gt;Yes, PHP is enterprise ready. As of &lt;a href="http://www.gophp5.org/"&gt;PHP 5.0&lt;/a&gt; the language is object oriented, scalable and available on many platforms (Linux, Microsoft Windows 2008 Server and IIS7, IBM's i5 Series, ...).&lt;br /&gt;&lt;br /&gt;Especially now with the credit crunch and the unclear (financial) future for many industries PHP offers a lower budget solution for many web based application needs.&lt;br /&gt;&lt;br /&gt;Professional PHP services and consulting for enterprises and governements are provided by companies like &lt;a href="http://www.ibuildings.com/"&gt;Ibuildings&lt;/a&gt;, &lt;a href="http://www.ausy.be/"&gt;AUSY&lt;/a&gt;, &lt;a href="http://omniti.com/"&gt;OmniTi&lt;/a&gt;, and many more.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4. I'm from ..., is there a PHP user group in my neighborhood ?&lt;/b&gt;&lt;br /&gt;Well, it's hard for us to know each and every PHP user group in the world, so I suggest to turn to &lt;a href="http://www.google.com/"&gt;Google&lt;/a&gt;, &lt;a href="http://www.yahoo.com/"&gt;Yahoo&lt;/a&gt; or &lt;a href="http://www.live.com/"&gt;Live Search&lt;/a&gt; to locate a PHP user group in your area. Usually "php user group &lt;location&gt;" would do the trick.&lt;/location&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;5. Where can I get more information about PHP ?&lt;/b&gt;&lt;br /&gt;There are many great sites and blog posts on the internet about PHP and is thus impossible to list all of them here.&lt;br /&gt;&lt;br /&gt;A few good resources to start with are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.php.net/"&gt;www.php.net&lt;/a&gt; (the official site for PHP)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.zend.com/"&gt;www.zend.com&lt;/a&gt; (the site of Zend Technologies, Inc.)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.planet-php.net/"&gt;www.planet-php.net&lt;/a&gt; (aggregation of very interesting blogs that cover PHP)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.phpdeveloper.org/"&gt;www.phpdeveloper.org&lt;/a&gt; (php news site and reference for every PHP developer)&lt;/li&gt;&lt;li&gt;&lt;a href="http://devzone.zend.com/"&gt;devzone.zend.com&lt;/a&gt; (php articles)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28215292-1308007290514654465?l=www.dragonbe.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dragonbe/~4/XI2A487ROf0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dragonbe.com/feeds/1308007290514654465/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.dragonbe.com/2009/02/fosdem-2009-in-review.html#comment-form" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/1308007290514654465" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/1308007290514654465" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dragonbe/~3/XI2A487ROf0/fosdem-2009-in-review.html" title="Fosdem 2009 in review" /><author><name>DragonBe</name><uri>http://www.blogger.com/profile/12610668749799675317</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16969274511863708634" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">6</thr:total><georss:point>50.8119648 4.3822997</georss:point><feedburner:origLink>http://www.dragonbe.com/2009/02/fosdem-2009-in-review.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-28215292.post-7637318242405448735</id><published>2009-01-08T10:28:00.002+01:00</published><updated>2009-01-08T23:47:28.509+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="remote" /><category scheme="http://www.blogger.com/atom/ns#" term="keynote" /><category scheme="http://www.blogger.com/atom/ns#" term="apple" /><title type="text">Killer iPhone app from Apple: Keynote Remote</title><content type="html">&lt;a href="http://3.bp.blogspot.com/_HhRzjL1_W1c/SWXKvfdWvjI/AAAAAAAAB7w/gevxrpzLdSo/s1600-h/keynote_remote_logo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_HhRzjL1_W1c/SWXKvfdWvjI/AAAAAAAAB7w/gevxrpzLdSo/s320/keynote_remote_logo.png" style="float: left;" /&gt;&lt;/a&gt;&lt;a href="http://www.apple.com/iphone/appstore/"&gt;iTunes Appstore&lt;/a&gt; for iPhone and iPod Touch has a numerous list of great applications, but recently I discovered one that really rocks my world: &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=300719251&amp;amp;mt=8?sr=hotnews"&gt;Keynote Remote&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;When giving presentations I used to have a separate pointing device that I could use to move through the slides, but now with &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=300719251&amp;amp;mt=8?sr=hotnews"&gt;Keynote Remote&lt;/a&gt; I can see what is up the screen having my speaker notes right there with me. Flip the display in a horizontal position, I can see my current slide and the next one.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_HhRzjL1_W1c/SWXLMj10sNI/AAAAAAAAB74/_HZPCnU_4Vo/s1600-h/IMG_0002.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_HhRzjL1_W1c/SWXLMj10sNI/AAAAAAAAB74/_HZPCnU_4Vo/s320/IMG_0002.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Fig. 1: Current slide with speaker notes.&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_HhRzjL1_W1c/SWXLcx3dxeI/AAAAAAAAB8A/6t2Co6wJhvw/s1600-h/IMG_0001.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_HhRzjL1_W1c/SWXLcx3dxeI/AAAAAAAAB8A/6t2Co6wJhvw/s320/IMG_0001.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Fig. 2: Current slide with next slide display.&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;This way I can move around the floor while giving presentations without having to stay behind my laptop to see what's next. This is especially good when you're co-presenting something, because now you can see the notes of your fellow speakers as well.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Requirements&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You need to have &lt;a href="http://www.apple.com/iwork/keynote/"&gt;Keynote '09&lt;/a&gt; which is part of the new &lt;a href="http://www.apple.com/iwork/"&gt;iWork '09&lt;/a&gt; where you can set up your iPhone or iPod Touch for connecting with the computer.&lt;/li&gt;&lt;li&gt;You need to have a wifi network where both the Keynote computer and the iPhone/iPod Touch are on.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=300719251&amp;amp;mt=8?sr=hotnews"&gt;Keynote Remote&lt;/a&gt; costs $ 0.99 at the &lt;a href="http://www.apple.com/iphone/appstore/"&gt;iTunes Appstore&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28215292-7637318242405448735?l=www.dragonbe.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dragonbe/~4/vuhgPCZupaU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dragonbe.com/feeds/7637318242405448735/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.dragonbe.com/2009/01/killer-iphone-app-from-apple-keynote.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/7637318242405448735" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/7637318242405448735" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dragonbe/~3/vuhgPCZupaU/killer-iphone-app-from-apple-keynote.html" title="Killer iPhone app from Apple: Keynote Remote" /><author><name>DragonBe</name><uri>http://www.blogger.com/profile/12610668749799675317</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16969274511863708634" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_HhRzjL1_W1c/SWXKvfdWvjI/AAAAAAAAB7w/gevxrpzLdSo/s72-c/keynote_remote_logo.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://www.dragonbe.com/2009/01/killer-iphone-app-from-apple-keynote.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-28215292.post-2329853093855771877</id><published>2009-01-05T09:32:00.000+01:00</published><updated>2009-01-05T09:35:22.948+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="seven things" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title type="text">Mapping Seven Things</title><content type="html">Trying to get a bit of overview of all people who have put up their "Seven Things" list, I created a little map that shows who tagged who with an overview of the most tagged persons.&lt;br /&gt;&lt;br /&gt;Check out the Seven Things map at &lt;a href="http://in2it.be/whotaggedwho.php"&gt;http://in2it.be/whotaggedwho.php&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28215292-2329853093855771877?l=www.dragonbe.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dragonbe/~4/iT56I5_smN8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dragonbe.com/feeds/2329853093855771877/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.dragonbe.com/2009/01/mapping-seven-things.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/2329853093855771877" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/2329853093855771877" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dragonbe/~3/iT56I5_smN8/mapping-seven-things.html" title="Mapping Seven Things" /><author><name>DragonBe</name><uri>http://www.blogger.com/profile/12610668749799675317</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16969274511863708634" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://www.dragonbe.com/2009/01/mapping-seven-things.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-28215292.post-3236044210167022354</id><published>2009-01-03T15:04:00.005+01:00</published><updated>2009-01-03T17:00:55.739+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="tagging" /><category scheme="http://www.blogger.com/atom/ns#" term="seven things" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title type="text">Seven Things - Tagged by Rob Allen</title><content type="html">I was surprised that I made it to the Seven Things thread started by &lt;a href="http://www.tonybibbs.com/"&gt;Tony Bibbs&lt;/a&gt;, but &lt;a href="http://akrabat.com/"&gt;Rob Allen&lt;/a&gt; was so kind to "tag" me and now it's my honor to find seven more victims.&lt;br /&gt;&lt;br /&gt;Seven Things you might not know about me:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;When I was 16, I had a private pilot license (PPL) learned at the Airport of Antwerp. The first year I managed to have enough flying hours to keep my permit but the second year I just couldn't find time to have the minimum required hours to keep my permit. Looking back at this moment in time, I do find it sad I didn't made the effort in maintaining this.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I graduated high-school as an accountant and had a job as a junior accountant at the Benelux head office of &lt;a href="http://century21.be/"&gt;Century21&lt;/a&gt;, but after one month I was already convinced being an accountant was something I didn't wanted to do for the rest of my life. And never spoke of this part in my life again.&lt;/li&gt;&lt;li&gt;I never finished college. I was studying IT at the "&lt;a href="http://www.ha.be/"&gt;Hogeschool Antwerpen&lt;/a&gt;" and after college hours I worked at the customer care center of an European ISP called World Online (no longer exists). When doing my second year IT they offered me a job as developer and I accepted the offer.&lt;/li&gt;&lt;li&gt;I met my wife during a LAN party at &lt;a href="http://www.telenet.be/"&gt;Telenet&lt;/a&gt; (Belgian Telco), where I was working as an in-house developer and my wife was on her last day as security guard (student job).&lt;/li&gt;&lt;li&gt;I'm Dutch, although I'm living in Belgium.&lt;/li&gt;&lt;li&gt;My wife told me we were pregnant on the last evening of &lt;a href="http://zendcon.com/"&gt;ZendCon07&lt;/a&gt; and I celebrated this news in a &lt;a href="http://www.starbucks.com/"&gt;StarBucks&lt;/a&gt; shop just around the corner of the &lt;a href="http://www.motel6.com/"&gt;Motel6&lt;/a&gt; I was staying at. &lt;br /&gt;&lt;/li&gt;&lt;li&gt;Our son was born on Father's day being the best gift a dad could wish for.&lt;/li&gt;&lt;/ul&gt;&amp;nbsp;Now it's my turn to tag people:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://jpipes.com/"&gt;Jay Pipes&lt;/a&gt;, a wonderful guy I met at &lt;a href="http://zendcon.com/"&gt;ZendCon08&lt;/a&gt; showing us there's a whole lot more stuff MySQL has to offer.&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.maartenballiauw.be/"&gt;Maarten Balliauw&lt;/a&gt;, a great PHP/.NET developer who's career I've been following for several years now but only met personally about a month ago.&lt;/li&gt;&lt;li&gt;&lt;a href="http://patrickallaert.blogspot.com/"&gt;Patrick Allaert&lt;/a&gt;, co-manager of &lt;a href="http://www.phpbelgium.be/"&gt;PHPBelgium&lt;/a&gt; and a great mind within the open-source community.&lt;/li&gt;&lt;li&gt;&lt;strike&gt;&lt;a href="http://ishouldbecoding.com/"&gt;Matthew Turland&lt;/a&gt;, whom I've met at &lt;a href="http://zendcon.com/"&gt;ZendCon07&lt;/a&gt; and again at &lt;a href="http://zendcon.com/"&gt;ZendCon08&lt;/a&gt; who's given me great hints and tips with his podcast on site scraping and &lt;a href="http://ishouldbecoding.com/"&gt;his blog&lt;/a&gt;.&lt;/strike&gt; Already tagged by &lt;a href="http://caseysoftware.com/blog"&gt;Keith Casey&lt;/a&gt;, &lt;a href="http://weierophinney.net/"&gt;Matthew Weier O' Phinney&lt;/a&gt;, &lt;a href="http://akrabat.com/"&gt;Rob Allen&lt;/a&gt; and &lt;a href="http://dragonbe.com/"&gt;Me&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.nexen.net/"&gt;Damien Seguy&lt;/a&gt;, the father of elePHPant and founder of &lt;a href="http://nexen.net/"&gt;nexen.net&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.nexdot.net/blog/"&gt;Christian Flickinger&lt;/a&gt;, the awsome dude I met at &lt;a href="http://zendcon.com/"&gt;ZendCon07/08&lt;/a&gt; who always knows how to turn things into a lot of fun.&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.nickbelhomme.com/"&gt;Nick Belhomme&lt;/a&gt;, a Belgian PHP developer who first contacted me asking about doing PHP on a freelance base and now becoming a dear friend.&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.libssh2.org/"&gt;Sara Golemon&lt;/a&gt;, PHP guru at &lt;a href="http://www.yahoo.com/"&gt;Yahoo!&lt;/a&gt; and who I've met also at &lt;a href="http://zendcon.com/"&gt;ZendCon07/08&lt;/a&gt;. &lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;For my tagged victimes, do follow the following rules:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Link your original tagger(s), and list these rules on your blog.&lt;/li&gt;&lt;li&gt;Share seven facts about yourself in the post - some random, some wierd.&lt;/li&gt;&lt;li&gt;Tag seven people at the end of your post by leaving their names and the links to their blogs.&lt;/li&gt;&lt;li&gt;Let them know they’ve been tagged by leaving a comment on their blogs and/or Twitter.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28215292-3236044210167022354?l=www.dragonbe.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dragonbe/~4/Jw9Pojbdeqc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dragonbe.com/feeds/3236044210167022354/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.dragonbe.com/2009/01/seven-things-tagged-by-rob-allen.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/3236044210167022354" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/3236044210167022354" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dragonbe/~3/Jw9Pojbdeqc/seven-things-tagged-by-rob-allen.html" title="Seven Things - Tagged by Rob Allen" /><author><name>DragonBe</name><uri>http://www.blogger.com/profile/12610668749799675317</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16969274511863708634" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dragonbe.com/2009/01/seven-things-tagged-by-rob-allen.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-28215292.post-6037589907820692555</id><published>2009-01-01T14:24:00.009+01:00</published><updated>2009-01-01T17:59:02.830+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="baby xander" /><category scheme="http://www.blogger.com/atom/ns#" term="ibuildings" /><category scheme="http://www.blogger.com/atom/ns#" term="namespaces" /><category scheme="http://www.blogger.com/atom/ns#" term="credit crunch" /><category scheme="http://www.blogger.com/atom/ns#" term="phpbelgium" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="zend framework" /><category scheme="http://www.blogger.com/atom/ns#" term="phpgg" /><category scheme="http://www.blogger.com/atom/ns#" term="job changes" /><title type="text">Looking back to 2008</title><content type="html">First I want to wish everyone all the best for 2009 ! 2008 has been a very wonderful year and makes us looking positive to the future. To cope with the challenges we have to face in 2009, it doesn't hurt looking back to the past year and see where we can improve or act differently.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Let me go over a few keywords that had importance in 2008.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;PHPBelgium&lt;/b&gt;&lt;br /&gt;2008 was the year both &lt;a href="http://felix.phpbelgium.be/blog/"&gt;Felix De Vliegher&lt;/a&gt; and I founded &lt;a href="http://phpbelgium.be/"&gt;PHPBelgium&lt;/a&gt;, a &lt;a href="http://www.php.net/"&gt;PHP&lt;/a&gt; user group for &lt;a href="http://www.php.net/"&gt;PHP&lt;/a&gt; enthusiasts in Belgium. We had a slow start, but as the months passed by the popularity and importance of &lt;a href="http://phpbelgium.be/"&gt;PHPBelgium&lt;/a&gt; grew. Not only for &lt;a href="http://www.php.net/"&gt;PHP&lt;/a&gt; enthusiasts but also for companies as &lt;a href="http://www.microsoft.com/"&gt;Microsoft&lt;/a&gt;, &lt;a href="http://oreilly.com/"&gt;O'Reilly&lt;/a&gt;, &lt;a href="http://www.ibuildings.com/"&gt;Ibuildings&lt;/a&gt; and &lt;a href="http://www.ausy.be/"&gt;AUSY&lt;/a&gt;. In October, &lt;a href="http://patrickallaert.blogspot.com/"&gt;Patrick Allaert&lt;/a&gt; joined our management team.&lt;br /&gt;&lt;br /&gt;Besides providing best practices and presenting advanced programming topics, we also try to do as much as possible for the community by giving away &lt;a href="http://www.elephpantworldtour.com/"&gt;elePHPants&lt;/a&gt;, books and tickets to &lt;a href="http://www.php.net/"&gt;PHP&lt;/a&gt; conferences (like &lt;a href="http://www.zendcon.com/"&gt;ZendCon&lt;/a&gt;, php|works and &lt;a href="http://conference.phpnw.org.uk/"&gt;phpnw&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;phpGG&lt;/b&gt;&lt;br /&gt;Besides a good start up for &lt;a href="http://phpbelgium.be/"&gt;PHPBelgium&lt;/a&gt;, the Dutch counterpart &lt;a href="http://www.phpgg.nl/"&gt;phpGG&lt;/a&gt; had also a very successful re-start in 2008. With more meetings, activities and combining forces with &lt;a href="http://phpbelgium.be/"&gt;PHPBelgium&lt;/a&gt; to organize two very succesful theme-days (&lt;a href="http://qa.php.net/testfest.php"&gt;PHP Test Fest&lt;/a&gt; and &lt;a href="http://bughuntday.org/"&gt;BugHuntDay&lt;/a&gt;), they now are the most important &lt;a href="http://www.php.net/"&gt;PHP&lt;/a&gt; user group in the Netherlands.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Baby Xander&lt;/b&gt;&lt;br /&gt;For me personally, 2008 was the best year ever with the birth of our son &lt;a href="http://devandams.be/"&gt;Xander&lt;/a&gt;. In the past 6 months he has grown into a very curious, enthusiastic and happy baby boy. Both my wife and I enjoy each day we can spend with him, seeing him discovering new things, learning new stuff and becoming very familiar with his surroundings. It's like watching a million years of evolution taking place in only a few months.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ibuildings&lt;/b&gt;&lt;br /&gt;2008 is also the year for &lt;a href="http://www.ibuildings.com/"&gt;Ibuildings&lt;/a&gt;, becoming Europe's leading &lt;a href="http://www.php.net/"&gt;PHP&lt;/a&gt; professional services company. They first started in 1999 in Flushing, the Netherlands and extended their reach to the UK at the end of 2007. They are internationally credited as being an expert in &lt;a href="http://www.php.net/"&gt;PHP&lt;/a&gt; and related technologies, raising the bar on professional services and quality assurance. To quote the international &lt;a href="http://www.phpcommunity.org/"&gt;PHP community&lt;/a&gt;: &lt;i&gt;"Ibuildings is the new black"&lt;/i&gt;, and I have to admit it's true.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Job Changes&lt;/b&gt;&lt;br /&gt;I think 2008 is also the year where a lot of people changed jobs, including myself. But I think the most thrilling news was that &lt;a href="http://blog.calevans.com/"&gt;Cal Evans&lt;/a&gt; changed shirts, from &lt;a href="http://www.zend.com/"&gt;Zend&lt;/a&gt; to &lt;a href="http://www.ibuildings.com/"&gt;Ibuildings&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Namespaces&lt;/b&gt;&lt;br /&gt;PHP 5.3 is about to reach its final stadium, but there was a HOT discussion for it's namespace implementation. I didn't follow the whole discussion, so I'm only reflecting here what the buzz was on almost all PHP channels.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Yes, we can !&lt;/b&gt;&lt;br /&gt;2008 is also the year that an African-American won the presidential elections in the US. Although it has nothing to do with &lt;a href="http://www.php.net/"&gt;PHP&lt;/a&gt;, it sure is worth mentioning it here in my 2008 overview.&lt;br /&gt;&lt;br /&gt;Obama's quote &lt;i&gt;"Yes, we can !"&lt;/i&gt; does not only reflect on his mission in the White House but also for all &lt;a href="http://www.php.net/"&gt;PHP&lt;/a&gt; developers in the world. &lt;i&gt;"Yes, we can !"&lt;/i&gt; will also be our default answer in regards to web application development, rich internet applications, social community projects and so much more. Yes, we can !&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Zend Framework&lt;/b&gt;&lt;br /&gt;I think it's fair to say that 2008 was also the year for &lt;a href="http://framework.zend.com/"&gt;Zend Framework&lt;/a&gt;, with over &lt;a href="http://andigutmans.blogspot.com/2008/12/1o-million-downloads-and-counting.html"&gt;10 million downloads&lt;/a&gt; (and counting), becoming the leading framework for enterprise web application development (and also large scale websites).&lt;br /&gt;&lt;br /&gt;With the introduction of a certification exam for &lt;a href="http://framework.zend.com/"&gt;Zend Framework&lt;/a&gt; (ZFCE), &lt;a href="http://www.zend.com/"&gt;Zend&lt;/a&gt; has enormously boosted the professional level of this powerful framework and with initiatives like &lt;a href="http://bughuntday.org/"&gt;BugHuntDay&lt;/a&gt;, the community involvement has increased a lot.&lt;br /&gt;&lt;br /&gt;Also books like "&lt;a href="http://www.phparch.com/c/books/id/9780973862157"&gt;PHP|Architect's Guide to programming with Zend Framework&lt;/a&gt;" by &lt;a href="http://blog.calevans.com/"&gt;Cal Evans&lt;/a&gt; and "&lt;a href="http://www.zendframeworkinaction.com/"&gt;Zend Framework in Action&lt;/a&gt;" by &lt;a href="http://akrabat.com/"&gt;Rob Allan&lt;/a&gt;, have boosted &lt;a href="http://framework.zend.com/"&gt;Zend Framework&lt;/a&gt;'s popularity. And of course the many blogs and presentations that are too numerous to mention here have added their share to it's popularity.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Credit Crunch&lt;/b&gt;&lt;br /&gt;We cannot neglect the fact that we're right in the middle of a financial crisis, refered to as the "credit crunch". I wish I could say it was something of 2008, but it will have effects in 2009 as well.&lt;br /&gt;&lt;br /&gt;The credit crunch has effects in many industries, including the IT industry. Many large IT companies are faced with layoffs and this will continue to be a reality in 2009 as well.&lt;br /&gt;&lt;br /&gt;But given the nature of &lt;a href="http://www.php.net/"&gt;PHP&lt;/a&gt;, being an open-source programming language, with a non-expensive nature and a rapid deployment history, this financial crisis might become a lucrative moment for PHP development in general. This thought is also shared by &lt;a href="http://jansch.nl/"&gt;Ivo Jansch&lt;/a&gt;, CTO of &lt;a href="http://www.ibuildings.com/"&gt;Ibuildings&lt;/a&gt; who mentioned it in a &lt;a href="http://www.ibuildings.com/blog/archives/1538-Goodbye-2008%21.html#extended"&gt;blog post reflecting 2008&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Thank you !&lt;/b&gt;&lt;br /&gt;Of course, 2008 has been a wonderful year for me, mostly because of you. Giving me constructive comments on my blog posts, meeting me at conferences and congratulating me on &lt;a href="http://www.slideshare.net/DragonBe"&gt;presentations that I share on slideshare.com&lt;/a&gt;. So, thank you for all the love !!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28215292-6037589907820692555?l=www.dragonbe.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dragonbe/~4/9Wr6SLGxj9M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dragonbe.com/feeds/6037589907820692555/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.dragonbe.com/2009/01/looking-back-to-2008.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/6037589907820692555" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/6037589907820692555" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dragonbe/~3/9Wr6SLGxj9M/looking-back-to-2008.html" title="Looking back to 2008" /><author><name>DragonBe</name><uri>http://www.blogger.com/profile/12610668749799675317</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16969274511863708634" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://www.dragonbe.com/2009/01/looking-back-to-2008.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-28215292.post-3811890821482529569</id><published>2008-12-28T21:00:00.001+01:00</published><updated>2008-12-29T18:18:50.666+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="zend studio for eclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="bookreview" /><category scheme="http://www.blogger.com/atom/ns#" term="books" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="developer's guide" /><category scheme="http://www.blogger.com/atom/ns#" term="Zend Studio" /><title type="text">Book review: Zend Studio for Eclipse - Developer's Guide</title><content type="html">&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://www.amazon.com/gp/product/0672329409?ie=UTF8&amp;amp;tag=in2it-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0672329409"&gt;&lt;img border="0" height="110" src="https://images-na.ssl-images-amazon.com/images/I/21l4Uf%2B6QlL._SL160_.jpg" width="85" /&gt;&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=in2it-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0672329409" style="border: medium none ! important; margin: 0px ! important;" width="1" /&gt;&lt;a href="http://4.bp.blogspot.com/_HhRzjL1_W1c/SVi-8Ug4ZAI/AAAAAAAAB7o/4pXW4oAMJkc/s1600-h/bookrating_elephpants_3-5_small.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_HhRzjL1_W1c/SVi-8Ug4ZAI/AAAAAAAAB7o/4pXW4oAMJkc/s320/bookrating_elephpants_3-5_small.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Book:&lt;/b&gt; Zend Studio for Eclipse, Developer's Guide&lt;br /&gt;&lt;b&gt;Authors:&lt;/b&gt; Peter MacIntyre and Ian Morse&lt;br /&gt;&lt;b&gt;Publisher:&lt;/b&gt; Addison-Wesley Pearson Education&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Description&lt;/b&gt;&lt;br /&gt;Zend Studio for Eclipse, Developer's Guide from Addison-Wesley Pearson Education is a guide to Zend Studio for Eclipse (ZSE) for intermediate to advanced developers.&lt;br /&gt;&lt;br /&gt;The book has 18 chapters, with the first 16 covering the different views and preference settings for each specific task. The first 5 chapters are explaining basically the layout of the Eclipse working environment, with a focus on how to modify these views for your own benefit. The last 2 chapters are devoted to working out an example application using ZSE with Zend Framework.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Personal opinion&lt;/b&gt;&lt;br /&gt;This book is in my opinion a beginner's guide into using ZSE, aiming at PHP developers that have a knowledge of general concepts like versioning, debugging and refactoring. I personally was hoping to see advanced settings to tune the IDE into a powerful developer's tool, but it was merely a basic explanation with the correct terminology for a product that I've been using well over two years now (yes, I was also beta-tester for it).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;br /&gt;If you're new to Eclipse in general and specifically Zend Studio for Eclipse, I believe this book is going to be a valuable asset. It will not only give you insight in how the Eclipse IDE works, but it shows you also the possibilities to turn this into a very powerful tool for building PHP applications.&lt;br /&gt;&lt;br /&gt;But if you're already a ZSE veteran I'd have to advice not to buy this book since it has no extra value then to explain the settings/views you've been using all along.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28215292-3811890821482529569?l=www.dragonbe.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dragonbe/~4/l1s6rrNWc5Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dragonbe.com/feeds/3811890821482529569/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.dragonbe.com/2008/12/book-review-zend-studio-for-eclipse.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/3811890821482529569" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/3811890821482529569" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dragonbe/~3/l1s6rrNWc5Q/book-review-zend-studio-for-eclipse.html" title="Book review: Zend Studio for Eclipse - Developer's Guide" /><author><name>DragonBe</name><uri>http://www.blogger.com/profile/12610668749799675317</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16969274511863708634" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_HhRzjL1_W1c/SVi-8Ug4ZAI/AAAAAAAAB7o/4pXW4oAMJkc/s72-c/bookrating_elephpants_3-5_small.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><georss:point>51.0303007 4.4664046</georss:point><feedburner:origLink>http://www.dragonbe.com/2008/12/book-review-zend-studio-for-eclipse.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-28215292.post-7105434237151851412</id><published>2008-12-11T11:14:00.002+01:00</published><updated>2008-12-11T14:55:55.712+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="conference" /><category scheme="http://www.blogger.com/atom/ns#" term="ibuildings" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="edegem" /><category scheme="http://www.blogger.com/atom/ns#" term="feweb" /><title type="text">Successful 6th annual FeWeb Conference</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.feweb.be/img/logofeweb4.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://www.feweb.be/img/logofeweb4.gif" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;Yesterday evening I attended the &lt;a href="http://www.feweb.be/fewebcongres_6feweb.html"&gt;6th annual FeWeb Conference&lt;/a&gt; in Edegem, Belgium with my &lt;a href="http://ibuildings.com/"&gt;Ibuidlings&lt;/a&gt; collegues &lt;a href="http://jansch.nl/"&gt;Ivo Jansch&lt;/a&gt;, Harrie Verveer and Bjorn de Haan. Also fellow co-founder of &lt;a href="http://phpbelgium.be/"&gt;PHPBelgium&lt;/a&gt; and soon-to-be collegue &lt;a href="http://felix.phpbelgium.be/blog/"&gt;Felix De Vliegher&lt;/a&gt; was there. According to &lt;a href="http://www.feweb.be/blog/comments/?feed=true&amp;amp;id_link=103"&gt;their own blog&lt;/a&gt; over 200 persons attended this year's event that had several short tech-tracks and 3 key notes.&lt;br /&gt;&lt;br /&gt;I first attended the "Battle Flash vs AJAX" between &lt;a href="http://www.peterelst.com/blog/2008/12/11/feweb-flash-versus-javascript/"&gt;Peter Elst&lt;/a&gt; and &lt;a href="http://www.quirksmode.org/"&gt;Peter-Paul Koch&lt;/a&gt; and although it wasn't really a battle, it became clear that there's much to say about RIA's in general.&lt;br /&gt;You can find the &lt;a href="http://www.slideshare.net/peterelst/flash-versus-javascript-presentation"&gt;presentation on slideshare&lt;/a&gt; (where else ?).&lt;br /&gt;&lt;br /&gt;After the break &lt;a href="http://www.feweb.be/"&gt;FeWeb&lt;/a&gt; chairman &lt;a href="http://www.linkedin.com/in/marcmestdagh"&gt;Marc Mestdagh&lt;/a&gt; announced the planning for 2009, followed by handing out awards to the &lt;a href="http://www.feweb.be/gedragscode/#kwallabel"&gt;FeWeb Quality Label&lt;/a&gt; winnars (&lt;a href="http://www.webdoos.be/"&gt;Webdoos&lt;/a&gt;, &lt;a href="http://www.2mpact.be/"&gt;2MPact&lt;/a&gt; and &lt;span id="msgtxt1050093558"&gt;&lt;a href="http://www.mediamates.be/"&gt;Media Mates&lt;/a&gt;)&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.linkedin.com/pub/0/bb/947"&gt;Wim Roggeman&lt;/a&gt; of the &lt;a href="http://www.ispa.be/"&gt;Belgian Internet Service Providers Association (ISPA)&lt;/a&gt; talked about copyrights and the new social infrastructure of the Internet today. Nice to see that he's using the succesful computer gaming industry as a showcase how the music industry should work today.&lt;br /&gt;&lt;br /&gt;Final keynote was given by &lt;a href="http://www.linkedin.com/in/lucbeirens"&gt;Luc Beirens&lt;/a&gt;, chief of police for the &lt;a href="http://www.polfed-fedpol.be/org/org_dgj_FCCU_RCCU_nl.php"&gt;Federal Computer Crime Unit (FCCU)&lt;/a&gt;, where he gave an interesting talk about e-crime today and how cyber criminals use the same networks as we to operate (except they're not as visible). A few interesting facts he mentioned were:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;India has now "cyber soliders"&lt;/li&gt;&lt;li&gt;There are still many security issues related to input validation and filtering&lt;/li&gt;&lt;li&gt;Identity theft will become a serious threat&lt;/li&gt;&lt;li&gt;There's a need for a global jurisdiction to fight off cyber crime&lt;/li&gt;&lt;li&gt;End users should have some responsibilities as well (ref. driver's license)&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://twitter.com/"&gt;Twitter&lt;/a&gt; was heavily used during the sessions, making it possible for people who couldn't attend to have an idea what they were missing (&lt;a href="http://search.twitter.com/search?q=feweb"&gt;#feweb&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Of course the drinks and social event were also a highlight of the evening, talking with so many people and discussing ways to promote PHP in Belgium. Through this post I wish to thank everyone for their input, we will work something out.&lt;br /&gt;&lt;br /&gt;Many thanks for the organization of &lt;a href="http://www.feweb.be/"&gt;FeWeb&lt;/a&gt; Conference 2008 (and the sponsors &lt;a href="http://combell.be/"&gt;Combell&lt;/a&gt; and &lt;a href="http://www.bseen.be/"&gt;bSeen&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.feweb.be/"&gt;FeWeb&lt;/a&gt; is an organization for web developers in Belgium that provides information about legal concequences linked to the job as "web developer", interacts with the government and the industry to advocate the role of the industry and issues a quality label for Belgian web development agencies.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28215292-7105434237151851412?l=www.dragonbe.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dragonbe/~4/vwuxW1fAc18" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dragonbe.com/feeds/7105434237151851412/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.dragonbe.com/2008/12/succesfull-6th-annual-feweb-conference.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/7105434237151851412" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/7105434237151851412" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dragonbe/~3/vwuxW1fAc18/succesfull-6th-annual-feweb-conference.html" title="Successful 6th annual FeWeb Conference" /><author><name>DragonBe</name><uri>http://www.blogger.com/profile/12610668749799675317</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16969274511863708634" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><georss:point>51.1516947 4.4339268</georss:point><feedburner:origLink>http://www.dragonbe.com/2008/12/succesfull-6th-annual-feweb-conference.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-28215292.post-1287265966680614554</id><published>2008-12-05T12:36:00.000+01:00</published><updated>2008-12-05T12:54:16.069+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="fail" /><category scheme="http://www.blogger.com/atom/ns#" term="international" /><category scheme="http://www.blogger.com/atom/ns#" term="proximus" /><category scheme="http://www.blogger.com/atom/ns#" term="roaming" /><title type="text">Belgacom - Proximus roaming failure</title><content type="html">&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/_HhRzjL1_W1c/STkVtZ9vB8I/AAAAAAAAB68/K27dI3Ndrys/s1600-h/proximus.png" imageanchor="1" style="float: left; margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_HhRzjL1_W1c/STkVtZ9vB8I/AAAAAAAAB68/K27dI3Ndrys/s320/proximus.png" /&gt;&lt;/a&gt;&lt;/div&gt;In this day and age people have a tendency to check the internet first before calling tech support, but apparently some big companies don't get that.&lt;br /&gt;&lt;br /&gt;I'm in the Netherlands now and since this morning my mobile phone has no service. So I checked the websites of both &lt;a href="http://www.proximus.be/"&gt;Proximus&lt;/a&gt; (my cellular provider), &lt;a href="http://www.belgacom.be/"&gt;Belgacom&lt;/a&gt; (it's mother company) and &lt;a href="http://www.vodafone.nl/"&gt;Vodafone&lt;/a&gt; (it's partner) to see if there's a problem with their network or services. Nothing was mentioned, nor was there any reference that anything was wrong.&lt;br /&gt;So I spend the whole morning calling to tech support of &lt;a href="http://www.proximus.be/"&gt;Proximus&lt;/a&gt; to figure out why I don't have any service.&lt;br /&gt;&lt;br /&gt;First I was kept on hold for about an hour. In my second attempt I could finally was ablte to talk with a tech support agent telling me the whole roaming service was down and all people abroad weren't able to connect to the cellular network.&lt;br /&gt;&lt;br /&gt;This was a general system failure that already lasted several hours but the company didn't even bothered to mention this on the website, having it's customers calling tech support from abroad (paying huge international phone call tarifs) just to find there's a problem at the company.&lt;br /&gt;&lt;br /&gt;Dear &lt;a href="http://www.proximus.be/"&gt;Proximus&lt;/a&gt;, put this kind of failures &lt;b&gt;on your homepage&lt;/b&gt; ! This saves a lot of stress, and gives your customers the posibility to provide alternatives to contact friends, family or customers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28215292-1287265966680614554?l=www.dragonbe.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dragonbe/~4/_w0-OdyLODE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dragonbe.com/feeds/1287265966680614554/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.dragonbe.com/2008/12/belgacom-proximus-roaming-failure.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/1287265966680614554" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/1287265966680614554" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dragonbe/~3/_w0-OdyLODE/belgacom-proximus-roaming-failure.html" title="Belgacom - Proximus roaming failure" /><author><name>DragonBe</name><uri>http://www.blogger.com/profile/12610668749799675317</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16969274511863708634" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_HhRzjL1_W1c/STkVtZ9vB8I/AAAAAAAAB68/K27dI3Ndrys/s72-c/proximus.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dragonbe.com/2008/12/belgacom-proximus-roaming-failure.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-28215292.post-3846948094186698266</id><published>2008-11-20T16:36:00.000+01:00</published><updated>2008-11-20T16:52:05.601+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="video" /><category scheme="http://www.blogger.com/atom/ns#" term="bughuntday" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="zend framework" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><category scheme="http://www.blogger.com/atom/ns#" term="stefan koopmanschap" /><title type="text">Update Zend Framework Bughuntday</title><content type="html">Now the video is on Google Video, so now you can embed it wherever you want :-)&lt;br /&gt;&lt;br /&gt;&lt;embed allowfullscreen="true" allowscriptaccess="always" id="VideoPlayback" src="http://video.google.com/googleplayer.swf?docid=1111351682456439976&amp;amp;hl=en&amp;amp;fs=true" style="height: 326px; width: 400px;" type="application/x-shockwave-flash"&gt;&lt;/embed&gt; &lt;br /&gt;&lt;br /&gt;Thanks to &lt;a href="http://www.leftontheweb.com/"&gt;Stefan Koopmanschap&lt;/a&gt; for the hint.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28215292-3846948094186698266?l=www.dragonbe.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dragonbe/~4/BLkjq_fLuzY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dragonbe.com/feeds/3846948094186698266/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.dragonbe.com/2008/11/update-zend-framework-bughuntday.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/3846948094186698266" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28215292/posts/default/3846948094186698266" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dragonbe/~3/BLkjq_fLuzY/update-zend-framework-bughuntday.html" title="Update Zend Framework Bughuntday" /><author><name>DragonBe</name><uri>http://www.blogger.com/profile/12610668749799675317</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16969274511863708634" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://www.dragonbe.com/2008/11/update-zend-framework-bughuntday.html</feedburner:origLink></entry></feed>
