Archive for March, 2011

Zend Certified Engineer

Yesterday I took (and passed) the Zend  PHP 5.3 Certified Engineer exam – more information here from Zend and on Wikipedia. Having worked with PHP for about 11 years I had first imagined that this qualification wouldn’t be particularly stressful – that didn’t transpire to be the case! It turned out that I covered about 60% of the syllabus in my regular work patterns, but even then I relied on the PHP manual a lot more than I had realised.

The last (credible) exam I took was probably at university, and upon reflection I got myself considerably more wound up about the ZCE than anything in higher or further education. The last time I got this stressed about an examination was my driving test. The two events were similar in that I considered myself more than competent in the appropriate field, yet the exam stood between my assertion and independent confirmation.

I booked the exam 3 weeks in advance (as soon as we got back from Thailand) and spent the first two weeks gently revising. Then I sourced my first mock test, and the horrific reality of the situation became clear: not only did I need to learn a lot more about the aspects of PHP that I used every day, but I also had a whole load of new topics to cover. The less technically interested can leave now with the following summary: I revised like my life depended on it for a week, and yesterday was I victorious which was a massive relief. Those who want to know more about the PHP 5.3 Zend Certified Engineer exam, read on…

Note that when I took the exam I signed a disclaimer promising not to reveal any of the questions, so please don’t ask me for them. I can best sum up my horror with the following mock question I dug up from the internet, which asked what the result of this code would be:

echo strlen(sha1(’0′, true));

Now I’ve since asked a couple of people much cleverer than me about this, and I was pleased to note that neither of them knew what the second parameter to sha1() was (even though it’s the same as the second parameter to md5(), ha!). Still, unlike me, they both guessed that it meant it’d yield the raw binary output, and as such proved they’re naturally in a position closer to passing than I was a week ago. There were more though, like what does the second parameter of count() do, and what does this output:

echo “hello123″ . 34 + 4 , 123 . 11;

Then there’s the next issue: this was a PHP 5.3 test. I started working with PHP 3, and today work with the current enterprise release on CentOS which is 5.1.6. I chose to do the 5.3 exam partially because it was the only one available, but I was also convinced of its merit because RHEL 6 has just been released with PHP 5.3(.2), so this qualification should stand up for a few years yet. The issue of course is that being a creature of habit I hadn’t used all of PHP5′s functionality, and I hadn’t even been exposed to the 5.3 software at work.

Fortunately my home server now runs Fedora 14 and so had PHP 5.3.6 which was excellent for a revision platform. Still we’ve got some (IMO very good) custom frameworks at work, which meant I hadn’t had direct exposure to PHP’s PDO, mysqli, SimpleXMLElement, DomDocument and streams functionality. I managed to hoover all this up in a week, and in doing so implemented some nifty custom scripts including a revised RSS reader to HTML module to provide work blog content on various web pages.

There were some moments during the test when I doubted its quality; for instance I needed to recall in free-form the allow_url_fopen ini variable, but at the time couldn’t remember if it was in fact called allow_url_open. In the real world under such circumstances I’d just open the /etc/php.ini file and search for allow_url_ – this would hardly cost me any time – yet the exam would only reward me for the exact answer.

Ultimately passing the test and obtaining Zend Certified Engineer status has been extremely satisfying. While I don’t think it’s a perfect measure – the very fact that I can pass (and there’s no higher merit pass) means that those who clearly know more than me can’t achieve further recognition – it does set a useful standard. In my role as an employer I would certainly take any prospective PHP engineers with ZCE status seriously.

M5 update

During the various cold snaps of the past two winters the M5 has refused to start due to a completely flat battery. I don’t blame it for this: it often goes for 2 to 3 weeks without being used, and the battery is dated 2004. When I bought the 330d’s drilled discs from BMW I noticed that they were offering 30% off all batteries in February. So right at the end of the month, I took the plunge and gave them £130 for an enormous 28kg 110Ah monster.

New one on the left, oldie on the right. Same part number after 7 years – quite unusual in my experience! Due to the lack of a spare tyre, the battery fits quite neatly under the centre of the boot floor, and it takes just 3 13mm nuts to hold it in.

On other matters, I’ve found a disappointing spot of rust on the back of the car. I’m sure that wasn’t there just a few weeks ago! The paint hasn’t yielded yet (despite looking like it has in the picture below). There’s another spot elsewhere so I’ll give the car a once over and consult a body shop later in the year.

I did give the car a rather satisfying clean though, removing lots of grime from the rubber seals around the windows and within the boot lid space.

As a final thought, we’ve got a silly situation now where the 330d’s brakes look more bling than the M5′s. Given that the M5′s discs are rather worn, and I’m toying with the idea of making the M5 tackle some circuits later this year, I’ve found some tasty items on C3BMW. Discs, pads and sensor have come to £475 – I shall report back in due course!