<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.2.2" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>Foo.co.za - Neil Broers</title>
	<link>http://www.foo.co.za</link>
	<description>Personal blog of Neil Broers</description>
	<pubDate>Thu, 08 Mar 2012 08:45:21 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.2.2</generator>
	<language>en</language>
			<item>
		<title>The SOLID Principles of OO Design and Object Calisthenics</title>
		<link>http://www.foo.co.za/the-solid-principles-of-oo-design-and-object-calisthenics</link>
		<comments>http://www.foo.co.za/the-solid-principles-of-oo-design-and-object-calisthenics#comments</comments>
		<pubDate>Sun, 04 Mar 2012 08:40:47 +0000</pubDate>
		<dc:creator>Neil Broers</dc:creator>
		
		<category><![CDATA[Software Development]]></category>

		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.foo.co.za/the-solid-principles-of-oo-design-and-object-calisthenics</guid>
		<description><![CDATA[Chances are, if you are using test driven development, or regularly dabble with OOP design, you have implemented one or more of the SOLID principles, possibly without even knowing it. The SOLID principles are by no means a new concept, but it&#8217;s gaining traction within the PHP community. If you have a look at the [...]]]></description>
			<content:encoded><![CDATA[<p>Chances are, if you are using test driven development, or regularly dabble with OOP design, you have implemented one or more of the SOLID principles, possibly without even knowing it. The SOLID principles are by no means a new concept, but it&#8217;s gaining traction within the PHP community. If you have a look at the Zend Framework v2.0 or Symfony 2 projects, you will see many of the principles applied. </p>
<p>The SOLID principles are:</p>
<ul>
<li>S - Single Responsibility Principle</li>
<li>O - Open/Closed Principle</li>
<li>L - Liskov Substitution Principle</li>
<li>I - Interface Segregation Principle</li>
<li>D - Dependency Inversion Principle</li>
</ul>
<p>I&#8217;ve found a strong correlation between the SOLID principles and a practice called Object Calisthenics, an idea from Jeff Bay detailed in the book,  The ThoughtWorks Anthology. Some of the rules in Object Calisthenics compliment the SOLID principles very well, I will refer to the rules when this is the case. In short, without going in too much detail, here are the 9 rules of Object Calisthenics:</p>
<ol>
<li>Use only one level of indentation per method</li>
<li>Don’t use the else keyword</li>
<li>Wrap all primitives and strings</li>
<li>Use only one dot per line</li>
<li>Don’t abbreviate</li>
<li>Keep all entities small</li>
<li>Don’t use any classes with more than two instance variables</li>
<li>Use first-class collections</li>
<li>Don’t use any getters/setters/properties</li>
</ol>
<p>The SOLID principles focus on Dependency Management. I&#8217;m sure as developers, we&#8217;ve all been victims of projects with poor dependency management - changing code in one part of the system breaks code in another part; Re-using code is difficult or impossible; Classes and methods are huge and often it&#8217;s hard to tell what they&#8217;re supposed to be doing. The SOLID principles are ways to reduce the likelihood of this of happening. Unlike design patterns which guide you to a solution, the SOLID principles can be used as a guide to prevent problems.</p>
<p>In this article, I will cover the first of the SOLID principles, the Single Responsibility Principle - &#8220;A class should have one, and only one, reason to change&#8221;. This is basically the same as &#8220;cohesion&#8221;, or writing classes with &#8220;high cohesion&#8221;.  So, why is this important? If a class has more than one responsibility, there is more than one reason for it to change. This leads to very volatile classes which of course could affect any other classes that depend on it. See also Object Calisthenics, rules 6 and 7.</p>
<p>It is often easy to spot classes that fail this principle as they often contain words like &#8220;Manager&#8221;, or &#8220;Handler&#8221;. When implementing SRP, classes become more specific and focussed and the class names reflect the single responsibility of the class, e.g. EmployeePayrolCalculator.</p>
<p>So how do you go about refactoring your code to implement this principle? Begin by implementing the principle in your methods - refactor your methods to 5-7 lines, one block of indentation and a single responsibility per method (see rule 1 and 2 of Object Calisthenics). Once you have refactored your methods, ask yourself how many reasons does your class have to change? If the database schema changes, does it affect your class? And if the business rules change? How about a user interface change? If you establish more than one reason for change, refactor the class into two or more classes until you are happy that all your classes only have one responsibility. </p>
<p>In the next article - The Open Closed Principle.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.foo.co.za/the-solid-principles-of-oo-design-and-object-calisthenics/feed</wfw:commentRss>
		</item>
		<item>
		<title>ZendCon 2011 – Introducing Zend Developer Cloud, Zend Studio 9 and Zend Framework 2</title>
		<link>http://www.foo.co.za/zendcon-2011-%e2%80%93-introducing-zend-developer-cloud-zend-studio-9-and-zend-framework-2</link>
		<comments>http://www.foo.co.za/zendcon-2011-%e2%80%93-introducing-zend-developer-cloud-zend-studio-9-and-zend-framework-2#comments</comments>
		<pubDate>Mon, 10 Oct 2011 14:01:57 +0000</pubDate>
		<dc:creator>Neil Broers</dc:creator>
		
		<category><![CDATA[Zend Studio]]></category>

		<category><![CDATA[Cloud]]></category>

		<category><![CDATA[Zend Framework]]></category>

		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.foo.co.za/zendcon-2011-%e2%80%93-introducing-zend-developer-cloud-zend-studio-9-and-zend-framework-2</guid>
		<description><![CDATA[
ZendCon kicked off on 17 October in Santa Clara, California. The surprise of the conference was the announcement of the launch of Zend Developer Cloud during Zend’s CEO Andi Gutmans’ opening keynote speech.
Zend Developer Cloud is a free, cloud based environment for developing and deploying PHP applications. It has tools to quickly set up PHP [...]]]></description>
			<content:encoded><![CDATA[<p><img src="/uploads/pics/zendcon.jpg"></p>
<p>ZendCon kicked off on 17 October in Santa Clara, California. The surprise of the conference was the announcement of the launch of <a href="http://www.phpcloud.com/">Zend Developer Cloud</a> during Zend’s CEO Andi Gutmans’ opening keynote speech.</p>
<p>Zend Developer Cloud is a free, cloud based environment for developing and deploying PHP applications. It has tools to quickly set up PHP application stacks, including Zend Framework, Joomla, Drupal and WordPress. It includes a code tracing tool and debugging features. Once the application is ready, it can be deployed to any cloud provider supporting the “Zend Application Fabric”, including Amazon and Rackspace. Zend Developer Cloud also supports the ability to take snapshots of instances at any given time that can be shared with other developers. This could be useful for developer collaboration. It is currently available as a “technology preview release”, you can <a href="https://my.phpcloud.com/invite-friend/request-key">request an early access key here.</a></p>
<p><img src="/uploads/pics/phpcloud.png"></p>
<p>The keynote also featured a live demonstration and one of the tools featured during the demonstration was the new <a href="http://www.zend.com/en/products/studio/studio-9-beta">Zend Studio 9 beta.</a> It features tight integration with the Zend Developer Cloud, allowing developers to deploy to the cloud instances from within the IDE. Other noteworthy features include Git and Github support build into the IDE which should make a lot of developers very happy. Emphasis was also placed on how the new IDE can be configured to only include modules that developers need, cutting down a lot of the bulk that is a common complaint with Eclipse IDEs.</p>
<p>During the week before the conference, the beta 1 release of Zend Framework was announced. ZendCon 2011 had several talks detailing the internal workings of the new framework. One of the major changes includes extensive use of dependency injection throughout to make it truly extensible. Most of the framework was rewritten to ensure consistency throughout and to harness the full capabilities of PHP 5.3. The architecture was also simplified greatly by introducing event driven programming to the framework. To find out more about ZF2, have a look at the <a href="http://framework.zend.com/wiki/pages/viewpage.action?pageId=42303506">community wiki</a>. Take note that the API will change while still in Beta.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.foo.co.za/zendcon-2011-%e2%80%93-introducing-zend-developer-cloud-zend-studio-9-and-zend-framework-2/feed</wfw:commentRss>
		</item>
		<item>
		<title>Python VS PHP</title>
		<link>http://www.foo.co.za/python-vs-php</link>
		<comments>http://www.foo.co.za/python-vs-php#comments</comments>
		<pubDate>Thu, 07 Jul 2011 14:24:11 +0000</pubDate>
		<dc:creator>Neil Broers</dc:creator>
		
		<category><![CDATA[Python]]></category>

		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.foo.co.za/python-vs-php</guid>
		<description><![CDATA[
Aah, the old programming language debate, much akin to comparing religions or political parties – bound to end up in a fist fight. Some will argue that as long as you choose the right tool for the job, it doesn’t matter, but I’ve found it’s always the little things that break the camel’s (or in [...]]]></description>
			<content:encoded><![CDATA[<p><img src="/uploads/pics/vs2.png"></p>
<p>Aah, the old programming language debate, much akin to comparing religions or political parties – bound to end up in a fist fight. Some will argue that as long as you choose the right tool for the job, it doesn’t matter, but I’ve found it’s always the little things that break the camel’s (or in this case, the programmer’s) back.</p>
<p>I wrote a little Python pet project (mind the pun) this week after years of web development using only PHP. As a matter of fact, my first job was a Python position. Eventually, as I started doing GUI development in Delphi, Python was relegated to odd jobs and hacks. When I started doing PHP development, Python became redundant and eventually my skills became rusty as old nails. Until now.</p>
<p>Even after just one week using Python, I remember why I’ll always prefer it – it empowers me as a programmer. In the Python community, they refer to it as the “batteries included” philosophy – with the mere inclusion of a library, anything becomes possible. Combine that with clean and readable syntax, fluent interfaces, powerful list comprehensions, list slicing, an interactive console, and too many other features to mention, it’s clear to see why.</p>
<p><img src="/uploads/pics/python_xkcd.png"></p>
<p>I’ll illustrate using a Python example (Yes, it&#8217;s a bad example):</p>
<p><code>date = details[1].split("&lt;td&gt;")[1].split("&lt;/td&gt;")[0].strip()</code></p>
<p>This line takes the second element of a list (the Python equivalent of an array) and parses a date string out of an HTML table cell. Whether or not it is advisable to do this is a topic for another day, but it illustrates quite handily how the combination of “everything is an object”, great list operators and string functions makes a hack like this effortless. Here is the equivalent PHP code:</p>
<p><code>$parts = explode('&lt;td&gt;', $details[1]);<br />
$otherParts = explode('&lt;/td&gt;', $parts[1]);<br />
$date = trim($otherParts[0]);</code></p>
<p>If you’re a PHP developer and haven’t worked with Python before, do yourself a big favour and head over to the <a href="http://docs.python.org/tutorial/index.html">Python tutorial</a> or check out any of the multitude of <a href="http://mechanicalintegrator.com/2011/iss-notify/">hacks</a>, projects and <a href="https://www.djangoproject.com/">frameworks</a> written in Python and see how it’s the little things that make programming enjoyable.</p>
<p><img src="/uploads/pics/EF.jpg"></p>
]]></content:encoded>
			<wfw:commentRss>http://www.foo.co.za/python-vs-php/feed</wfw:commentRss>
		</item>
		<item>
		<title>How to pay your vehicle license online</title>
		<link>http://www.foo.co.za/how-to-pay-your-vehicle-license-online</link>
		<comments>http://www.foo.co.za/how-to-pay-your-vehicle-license-online#comments</comments>
		<pubDate>Wed, 24 Nov 2010 11:45:05 +0000</pubDate>
		<dc:creator>Neil Broers</dc:creator>
		
		<category><![CDATA[Traffic]]></category>

		<category><![CDATA[Cape Town]]></category>

		<guid isPermaLink="false">http://www.foo.co.za/how-to-pay-your-vehicle-license-online</guid>
		<description><![CDATA[If you&#8217;re in Cape Town and live within the city limits (see the map) you can pay your car license online using an EFT payment.
Head over to the Cape Town government site and fill in the online form. After a few days they will send you the amount, a reference number and their banking details.
After [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re in Cape Town and live within the city limits (see the <a href="http://www.capetown.gov.za/en/DriversLicences/Documents/City_jurisdictio_%20map_by_ivano_mangiagalli.pdf" target="_NEW">map</a>) you can pay your car license online using an EFT payment.</p>
<p>Head over to the <a href="http://www.capetown.gov.za/en/Vehiclelicensing/Pages/Licencepayments.aspx" target="_NEW">Cape Town government site</a> and fill in the online form. After a few days they will send you the amount, a reference number and their banking details.</p>
<p>After making the payment, I received my license in the post within a week!</p>
<p>Awesome. Now how about credit card payment facilities, please?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.foo.co.za/how-to-pay-your-vehicle-license-online/feed</wfw:commentRss>
		</item>
		<item>
		<title>My unexpected visitor</title>
		<link>http://www.foo.co.za/my-unexpected-visitor</link>
		<comments>http://www.foo.co.za/my-unexpected-visitor#comments</comments>
		<pubDate>Mon, 18 Oct 2010 09:11:16 +0000</pubDate>
		<dc:creator>Neil Broers</dc:creator>
		
		<category><![CDATA[Snakes]]></category>

		<guid isPermaLink="false">http://www.foo.co.za/my-unexpected-visitor</guid>
		<description><![CDATA[Saturday afternoon, I was quite surprised to see a rather large snake slither into my house from my back yard. 
I grabbed my camera and took some rather close-up shots of it hiding behind a cooler box.

Thinking it was a rather harmless mole-snake, I moved the cooler box in an attempt to scare the animal [...]]]></description>
			<content:encoded><![CDATA[<p>Saturday afternoon, I was quite surprised to see a rather large snake slither into my house from my back yard. </p>
<p>I grabbed my camera and took some rather close-up shots of it hiding behind a cooler box.</p>
<p><img src="http://www.foo.co.za/uploads/pics/snake/1.JPG" onmouseout="undefined" onmouseover="undefined" title="undefined" /></p>
<p>Thinking it was a rather harmless mole-snake, I moved the cooler box in an attempt to scare the animal back where it came from, but to my surprise, this rather non-docile snake reared up its hooded head, ready to strike. I have never moved so fast!</p>
<p>Considering my options, I phoned 10111 for some &#8220;advice&#8221;. The lady on the other end, amidst muted laughter, assured me that the she&#8217;ll send the police. Not even 2 minutes later, the police arrived. After a quick search, it turns out the snake had gone into hiding. </p>
<p><img src="http://www.foo.co.za/uploads/pics/snake/3.JPG" onmouseout="undefined" onmouseover="undefined" title="undefined" /></p>
<p>Unable to assist any further, the police called in a snake expert to assist.  After tearing up my garage and kitchen, he found it hiding in my kitchen cupboard.</p>
<p><img src="http://www.foo.co.za/uploads/pics/snake/4.JPG" onmouseout="undefined" onmouseover="undefined" title="undefined" /></p>
<p>&nbsp;</p>
<p><img src="http://www.foo.co.za/uploads/pics/snake/5.JPG" onmouseout="undefined" onmouseover="undefined" title="undefined" /></p>
<p>One deadly Cape Cobra, ready to strike.</p>
<p>The snake was stuffed into a bag for transport - hopefully to a place far, far away from me!</p>
<p><img src="http://www.foo.co.za/uploads/pics/snake/6.JPG" onmouseout="undefined" onmouseover="undefined" title="undefined" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.foo.co.za/my-unexpected-visitor/feed</wfw:commentRss>
		</item>
		<item>
		<title>The Smarty Trap</title>
		<link>http://www.foo.co.za/the-smarty-trap</link>
		<comments>http://www.foo.co.za/the-smarty-trap#comments</comments>
		<pubDate>Tue, 10 Aug 2010 07:57:38 +0000</pubDate>
		<dc:creator>Neil Broers</dc:creator>
		
		<category><![CDATA[Software Development]]></category>

		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.foo.co.za/the-smarty-trap</guid>
		<description><![CDATA[Recently I went to Luke Welling’s presentation entitled “PHP in the 21½th Century” at OSCON. He mentioned something interesting that got me thinking, something he calls “The Smarty Trap”. This trap occurs when someone decides to write a template engine with “a simple syntax that designers can understand” – it starts with some includes and [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I went to Luke Welling’s presentation entitled “PHP in the 21½th Century” at OSCON. He mentioned something interesting that got me thinking, something he calls “The Smarty Trap”. This trap occurs when someone decides to write a template engine with “a simple syntax that designers can understand” – it starts with some includes and printing a variable here and there. All goes well until he realizes he needs looping, so he builds loops into the language. And so it continues until the template engine is as complicated as any other programming language.</p>
<p>This is probably the most common argument against template engines. People often say “but PHP IS a template engine”. Proponents of template engines will then counter argue that the syntax is simpler, but in some cases this is just not true…</p>
<p>We use Smarty in one of our products and in retrospect, we would most likely not have chosen to use it if we had to do it all again. However, based on our requirements and design decisions at the time, it was probably the right choice for then. When we started out, we opted for a MVC architecture where controllers pull data from models and push the data as arrays to the view. The advantage of this approach is that it keeps the templates simple because you’re only ever printing the contents of variables and occasionally looping over a dataset.</p>
<p>As our product evolved and became more complicated, this process became tedious and inefficient. Objects had to be converted to arrays and passed to the view. Sometimes this included a hierarchy of child objects. Then we started implementing lazy loading and iterators, the benefit of which quickly evaporated when we converted all of our objects to arrays.</p>
<p>We decided to instead pass either the model objects to the view or to use view helpers. The view then calls methods on the model or loops over the iterator, preserving the original objects and any lazy loading. All was well again, but of course the views started getting more and more complicated. To refer back to the argument, our templates have now become as complicated as embedded PHP code in HTML would have been. Add of course the additional overhead of the template engine and the cost of learning yet another language and suddenly a template engine doesn’t make an awful lot of sense anymore.</p>
<p>The problem is that requirements, design decisions and technologies all shift and evolve over time. It is not possible to predict where your product will be in 2 years, 5 years or even a few months from now. As software engineers, we try to accommodate change as much as possible by building safeguards into our code. However, at the end of the day, we cannot predict the future so we have to make peace with the fact that continuous re-factoring is as much a fact of life as change itself.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.foo.co.za/the-smarty-trap/feed</wfw:commentRss>
		</item>
		<item>
		<title>Drizzle – the forecast looks good</title>
		<link>http://www.foo.co.za/drizzle-%e2%80%93-the-forecast-looks-good</link>
		<comments>http://www.foo.co.za/drizzle-%e2%80%93-the-forecast-looks-good#comments</comments>
		<pubDate>Fri, 23 Jul 2010 08:05:48 +0000</pubDate>
		<dc:creator>Neil Broers</dc:creator>
		
		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[Databases]]></category>

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.foo.co.za/drizzle-%e2%80%93-the-forecast-looks-good</guid>
		<description><![CDATA[Drizzle – the forecast looks good
23 July 2010
Drizzle is a relatively new project with the aim of producing a lightweight relational database system based on MySQL. From the Drizzle website:
“Drizzle is a community-driven project based on the popular MySQL DBMS that is focused on MySQL’s original goals of ease-of-use, reliability and performance. The Drizzle team [...]]]></description>
			<content:encoded><![CDATA[<p>Drizzle – the forecast looks good<br />
23 July 2010</p>
<p>Drizzle is a relatively new project with the aim of producing a lightweight relational database system based on MySQL. From the Drizzle website:</p>
<blockquote><p><i>“Drizzle is a community-driven project based on the popular MySQL DBMS that is focused on MySQL’s original goals of ease-of-use, reliability and performance. The Drizzle team is removing non-essential code, refactoring the remaining code, switching to a microkernel architecture (with well-defined APIs) and generally making Drizzle into a lean, mean query-running machine.”<br />
One of the biggest drivers for the lean kernel and quick bootstrapping of Drizzle is to make it an ideal database to use on cloud architectures. It is important to note that due to this, windows compatibility was removed from Drizzle.</i></p></blockquote>
<p>It is quickly apparent that creating a stripped down version of MySQL wasn’t their only goal as the system includes a comprehensive plugin architecture. This allows many options for integration.</p>
<p>Pluggable authentication allows you to use plugins to authenticate using something like LDAP or HTTP. A pluggable query filter allows you to block or filter queries before they get executed. With the pluggable query cache (still in development), you could even plug in something like memcache. Even SQL functions are pluggable, allowing you to write custom functions.</p>
<p>Drizzle can be installed using apt-get, RPM’s or can be easily compiled from source. Installation is made even simpler because there is no bootstrap step and no system tables that need to be created.</p>
<p>Starting up Drizzle is simple, with the only required parameter being the data directory: <i>drizzled –datadir=/my/data/path</i></p>
<p>Plugins can be installed using apt-get and need to be enabled when starting up the daemon, for example: <i>–plugin-add=md5,pbxt</i></p>
<p>Drizzle is still in alpha and major new changes are introduced on a daily basis, so its not quite ready for your production environment, but it’s certainly worth keeping an eye on this project.</p>
<p>For more information, visit the <a href="http://drizzle.org/wiki/Main_Page">project wiki</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.foo.co.za/drizzle-%e2%80%93-the-forecast-looks-good/feed</wfw:commentRss>
		</item>
		<item>
		<title>ZendCon 2009 PHP Conference – Review</title>
		<link>http://www.foo.co.za/zendcon-2009-php-conference-%e2%80%93-review</link>
		<comments>http://www.foo.co.za/zendcon-2009-php-conference-%e2%80%93-review#comments</comments>
		<pubDate>Wed, 11 Nov 2009 08:15:03 +0000</pubDate>
		<dc:creator>Neil Broers</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.foo.co.za/zendcon-2009-php-conference-%e2%80%93-review</guid>
		<description><![CDATA[October 2009 saw my return to San Jose for one of the top conferences on the PHP calendar – ZendCon. Other than taking place a month later and the conference venue shifting locations slightly, much of the format of this year’s ZendCon was the same as last year’s.
Taking the organizational reigns this time around, Eli [...]]]></description>
			<content:encoded><![CDATA[<p>October 2009 saw my return to San Jose for one of the top conferences on the PHP calendar – ZendCon. Other than taking place a month later and the conference venue shifting locations slightly, much of the format of this year’s ZendCon was the same as last year’s.</p>
<p>Taking the organizational reigns this time around, Eli White takes over from Cal Evans who recently moved from Zend to iBuildings. Organization was mostly smooth, with a few minor hiccups – day 1 had a serious lack of power supply, leaving most attendees with dying laptops before lunch. Compounding the problem, no notepads or pens were provided on registration. Attendees who had registered early and received free netbooks reported that the netbooks came with European plugs instead of US ones. However, most of these issues were sorted out by day 2.</p>
<p>The speakers at this year’s ZendCon included some familiar stalwarts – Sebastian Bergmann was back and presented on topics including testing, quality assurance and continuous integration. Accompanying him, was Stefan Priebsch and Arne Blankerts, who together with Sebastian Bergmann makes up the newly formed PHP consulting company, thePHP.cc. Cal Evans was present in the capacity as a speaker and delivered a good presentation on design patterns. Of course,  Elizabeth Marie Smith was back and presented on PHP for the desktop using php GTk as well as a talk on SPL</p>
<p>Of all the speakers, two that stood out was Ilia Alshanetsky and Stefan Priebsch. I attended two of Ilia sessions, the first about premature optimization and the second on popular caching tools, APC and Memcache. His rapid delivery style and excellent knowledge crammed an almost overwhelming amount of content into a single one hour slot. Stefan Priebsch joined in on a code review tutorial session with Sebastian Bergmann and Arne Blankerts, but it was only when he presented on OOP best practices when he came into his own. Stefan is an engaging speaker and his OOP knowledge demands a lot of respect.</p>
<p>As usual, Twitter and the ZendCon IRC channel was abuzz with attendees tweeting during the conference and was a great way to keep a finger on the conference’s pulse.</p>
<p>The conference, however, wasn’t without negatives – drinks (soft drinks and coffee) were only served after every 2 talks and physically removed after the break, even though these weren’t refrigerated to begin with. In some instances, I had to leave the conference venue to purchase my own drinks.</p>
<p>This year there was no party or any afterhours activities arranged by the conference or sponsors other than the usual reception – this year sponsored by Adobe.</p>
<p>Regarding the format of the conference, I do feel that there are too many talks and the talks are too short – it is simply not possible (unless your name is Ilia Alshanetsky) to fit any meaningful amount of information into a one hour slot , especially the more advanced topics (which are of course the more interesting ones).</p>
<p>ZendCon 09 ended with a framework shootout – a representative of each of the more popular PHP frameworks were invited to appear in a panel discussion and the audience grilled them with questions. Of course, to liven things up, each panel member was provided with a toy gun. Although not particularly useful, it was highly entertaining and a great way to end the conference with.</p>
<p>For a list of conference speakers, talks, ratings and slides of this year’s ZendCon, check out the <a href="http://joind.in/event/view/44">ZendCon Joind.in page.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.foo.co.za/zendcon-2009-php-conference-%e2%80%93-review/feed</wfw:commentRss>
		</item>
		<item>
		<title>How to Sync your E.T. Systems remote to your automated garage door</title>
		<link>http://www.foo.co.za/how-to-sync-your-et-systems-remote-to-your-automated-garage-door</link>
		<comments>http://www.foo.co.za/how-to-sync-your-et-systems-remote-to-your-automated-garage-door#comments</comments>
		<pubDate>Mon, 15 Jun 2009 14:15:44 +0000</pubDate>
		<dc:creator>Neil Broers</dc:creator>
		
		<category><![CDATA[Automation]]></category>

		<guid isPermaLink="false">http://www.foo.co.za/how-to-sync-your-et-systems-remote-to-your-automated-garage-door</guid>
		<description><![CDATA[E.T. Systems seems to have quickly taken over the garage door and gate automation market in Cape Town - every second person has one of those ugly, blue remotes - some with up to six buttons on them - attached to their key rings.

I recently had 2 of my remotes fail within the space  of [...]]]></description>
			<content:encoded><![CDATA[<p>E.T. Systems seems to have quickly taken over the garage door and gate automation market in Cape Town - every second person has one of those ugly, blue remotes - some with up to six buttons on them - attached to their key rings.</p>
<p><img src="http://www.foo.co.za/uploads/pics/6button_large.jpg" /></p>
<p>I recently had 2 of my remotes fail within the space  of a month and was off to E.T. Systems to acquire a new one (at a whopping R125 mind you!)</p>
<p>Here&#8217;s the simple procedure to sync your new remote to your E.T. Systems garage door:</p>
<p>The E.T. Systems remotes work by implementing some sort of patented rolling code transmitted by the remote and identified by the receiver. Without digging into details, this rolling code necessitates syncing your remote to your garage door.</p>
<p>To start, pop open the plastic cover of your garage door. Next, search for 3 pins labeled &#8220;BT LT&#8221; (bottom right of the circuit board in this picture):</p>
<p><img src="http://www.foo.co.za/uploads/pics/DSC00389.jpg" width="600" /></p>
<p>The idea is to short the pin on the &#8220;BT&#8221; side with the middle pin - press the button on the remote that you wish to use to open the garage door and at the same time use something metal to &#8220;short&#8221; the pin labeled &#8220;BT&#8221; and the middle pin. You should hear a beeping sound which indicates that the operation was successful.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.foo.co.za/how-to-sync-your-et-systems-remote-to-your-automated-garage-door/feed</wfw:commentRss>
		</item>
		<item>
		<title>ABSA building insurance, what a joke!</title>
		<link>http://www.foo.co.za/absa-building-insurance-what-a-joke</link>
		<comments>http://www.foo.co.za/absa-building-insurance-what-a-joke#comments</comments>
		<pubDate>Thu, 11 Jun 2009 13:54:09 +0000</pubDate>
		<dc:creator>Neil Broers</dc:creator>
		
		<category><![CDATA[Insurance]]></category>

		<guid isPermaLink="false">http://www.foo.co.za/archives/7</guid>
		<description><![CDATA[If you&#8217;re like me and just got Absa&#8217;s building insurance with your Absa home loan, because, well, it was easy, I&#8217;d advise you to think again!
It all started on a windy autumn day when the fascia board on my roof blew off, nearly falling on my poor neighbour&#8217;s Uno (which surely would have flattened it [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re like me and just got Absa&#8217;s building insurance with your Absa home loan, because, well, it was easy, I&#8217;d advise you to think again!</p>
<p>It all started on a windy autumn day when the fascia board on my roof blew off, nearly falling on my poor neighbour&#8217;s Uno (which surely would have flattened it :)) On my neighbour&#8217;s advice, I decided to claim from my building insurance. So, Tuesday morning 10 AM, I decide to brave the Absa call center and submit my claim&#8230;</p>
<p>20 minutes of annoying hold music later and I&#8217;m put through to an operator - I submit the claim and they tell me its been forwarded to the Cape Town division, great. Knowing how these things go, I make a note of the Cape Town office&#8217;s number and end the call.</p>
<p>By Wednesday afternoon I still hadn&#8217;t heard back from those lazy Capetonians, so I decide to do some leg work with my fingers and call them up - &#8220;no sir, we&#8217;ll submit your claim to a contractor immediately&#8221;. &#8220;So why haven&#8217;t you?&#8221; - I wanted to ask.  So I wait in vain with a couple of days of rainy weather threatening to destroy my house even further.</p>
<p>Friday afternoon I get a call from the contractor who assured me in a very Afrikaans accent that Absa takes their insurance very seriousness and he wants to come have a look, right now! After insisting that I&#8217;m at work and won&#8217;t be able to open up for him, he&#8217;s so adamant that I just let him be - hope he has good eyes!</p>
<p>The weekend comes and goes and before I know it, it&#8217;s Wednesday again. Give them a call - &#8220;No, the person who is dealing with your claim is on leave, I&#8217;ll follow up and call you back&#8221;. Great.</p>
<p>Friday afternoon arives, and yet again I phone. Now, by this time I&#8217;ve had enough of their shoddy service and I was planning on switching to Santam the moment the claim is settled. So to my suprise (or maybe not) they refuse to fix the roof - they claim the workmanship on the fascia board is bad because the builder used nails instead of screws. Hmmm. OK, very irate now. I phone up my good buddy Dann at Santam - apparently they need a specific clause in their policy that specifies that nails used on the facia board is considered bad workmanship, otherwise they have to pay up&#8230;</p>
<p>So several phone calls later I&#8217;m able to get my hands on the policy wording&#8230; I quote from section B: Specific Exceptions: &#8220;3. defects in design or construction&#8221; - Sounds pretty broad and subjective to me.</p>
<p>So I phone some builders, a structural engineer, the Master Builder&#8217;s association and the overwhelming opinion is that nails are more frequently used than screws and doesn&#8217;t constitute bad workmanship.</p>
<p>Finally, after several emails, phone calls, and weeks later, the claim is reassessed and a contractor is assigned to fix the roof, success! Of course, not wanting to end up in the same situation again I ask him what they use to attach the Fascia boards&#8230; NAILS!! They use F#$%#%@ nails!</p>
<p>In conclusion, it doesn&#8217;t pay to be an optimist - insurance companies will and do find any excuse not to pay out a claim leaving it up to the consumer to prove their case. I guess most people just give up and with the amount of trouble I went through with this claim, maybe that would have been the saner option!</p>
<p>I&#8217;ll be cancelling my insurance with Absa the moment the roof is fixed and start looking for another bank to finance my home loan.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.foo.co.za/absa-building-insurance-what-a-joke/feed</wfw:commentRss>
		</item>
	</channel>
</rss>

