<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Debuggable.com - Blog</title><link>http://debuggable.com/</link><description /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/debuggable" type="application/rss+xml" /><item><title>First CakeBar meetup in Munich</title><link>http://feeds.feedburner.com/~r/debuggable/~3/457166371/first-cakebar-meetup-in-munich:4922bdb7-f1ec-438c-ae02-1f7c4834cda3</link><guid isPermaLink="false">http://debuggable.com/posts/first-cakebar-meetup-in-munich:4922bdb7-f1ec-438c-ae02-1f7c4834cda3</guid><description>&lt;p&gt;Hey folks,&lt;/p&gt;
&lt;p&gt;a bunch of bakers are starting to organize a regular CakePHP meetup in Munich. If you are interested check out &lt;a href="http://www.cakebar.de/?p=9"&gt;their website&lt;/a&gt;. The first meeting is on Thursday 7:30pm!&lt;/p&gt;
&lt;p&gt;Out of curiosity, anybody interested in having a meetup here in Berlin? &lt;a href="mailto:felix@debuggable.com"&gt;Let me know&lt;/a&gt; and Tim and I will organize something after &lt;a href="http://cakefest.org/"&gt;CakeFest&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;-- Felix Geisendörfer aka the_undefined&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/debuggable/~4/457166371" height="1" width="1"/&gt;</description><author>felix@debuggable.com</author><pubDate>Tue, 18 Nov 2008 13:05:59 +0000</pubDate><comments>http://debuggable.com/posts/first-cakebar-meetup-in-munich:4922bdb7-f1ec-438c-ae02-1f7c4834cda3</comments><feedburner:origLink>http://debuggable.com/posts/first-cakebar-meetup-in-munich:4922bdb7-f1ec-438c-ae02-1f7c4834cda3</feedburner:origLink></item><item><title>Buchtipp: Webentwicklung mit CakePHP</title><link>http://feeds.feedburner.com/~r/debuggable/~3/444401849/buch-tip-webentwicklung-mit-cakephp:4912dccb-f594-4fa1-af20-6c564834cda3</link><guid isPermaLink="false">http://debuggable.com/posts/buch-tip-webentwicklung-mit-cakephp:4912dccb-f594-4fa1-af20-6c564834cda3</guid><description>&lt;p&gt;Hey folks,&lt;/p&gt;
&lt;p&gt;this is going to be my first blog post in German ever, which is borderline madness considering it is my mother language. Anyway, the book I'm talking about is written in German so it makes little to no sense to review it in English.&lt;/p&gt;
&lt;p&gt;Das Buch &lt;a href="http://www.amazon.de/Webentwicklung-mit-CakePHP-Dirk-Ammelburger/dp/3897218631/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1225972923&amp;sr=8-1"&gt;Webentwicklung mit CakePHP&lt;/a&gt; ist ohne Übertreibung *die beste* Veröffentlichung, die es zur Zeit zum Thema CakePHP zu erwerben gibt. Ich hatte die Gelegenheit, in einige CakePHP Bücher (größtenteils Englisch) hineinzuschnuppern und es gibt derzeit wirklich nichts Vergleichbares auf dem Markt.&lt;/p&gt;
&lt;p&gt;Doch zunächst einmal, an wen richtet sich das Buch? In Kapitel 2 gibt es eine Hilfestellung zur Installation eines lokalen Webservers. Kompletten PHP / LAMP Neulingen würde ich dennoch vom Kauf abraten. Ohne solide Grundkenntnisse in PHP und prinzipiellem OOP Verständnis wird man schnell untergehen. Wenn man diese Hürde allerdings genommen hat ist das Buch eine wahre Goldgrube.  Eigentlich traurig, aber wahr: Auch Tim und ich als alte Cakehasen haben eine Menge Dinge über CakePHP gelernt die uns bis dato unbekannt waren.&lt;/p&gt;
&lt;p&gt;Der Hauptunterschied des Buches gegenüber ähnlichen Büchern am Markt ist jedoch ein ganz anderer. Die Kommunikation der Philosophie. Kapitel 1 beschäftigt sich ausschließlich damit, zu erklären, was ein Framework überhaupt ist, warum man es verwenden sollte, was MVC ist etc. Klar, jedes Buch macht hier einen gewissen Versuch, die Grundidee zu vermitteln, aber Dirk &amp; Robert gelingt es perfekt, die Motivation der Core-Entwickler zu verstehen und zu vermitteln. Dies ist unglaublich nützlich wenn es später darum geht, bestimmte Entscheidungen des Frameworks im Bezug auf Conventions, DRY (Don't repeat yourself), MVC, etc. zu verstehen.&lt;/p&gt;
&lt;p&gt;Auch der restliche Aufbau des Buches ist gut durchdacht. Ein Blick in das &lt;a href="http://www.oreilly.de/catalog/cakephpwebentwger/toc.html"&gt;Inhaltsverzeichnis&lt;/a&gt; verrät: Schon in Kapitel 3 wird mit der ersten Datenbankanbindung und der Scaffolding Funktion zur Sache gegangen. Anschließend folgen ganz klassisch Erklärungen zum Controller, Model, View, Helpers, Session handling, Components, etc.. Soweit so gut, das findet man auch noch anderswo erklärt.&lt;/p&gt;
&lt;p&gt;Wo sich das Buch wirklich lohnt sind die schwierigeren Themen. Die Nummer 1 ist ohne Frage ACL. Es geht ja das böse Gerücht um, das lediglich Nate Abele (Entwickler der ACL Funktionalität in CakePHP) in der Lage ist, mit cake's ACL System zu arbeiten. Pustekuchen. Oder in den Worten der Autoren: "Wenn der Kuchen spricht, haben die Krümel zu schweigen". Das ACL Kapitel des Buches ist aus meiner Sicht für sich allein genommen den Kauf Wert. In ~20 Seiten wird einem ein exzellentes Verständnis der Architektur inkl. MPTT gegeben und an praktischen Beispielen erklärt, wie der Hase - pardon - Kuchen läuft.&lt;/p&gt;
&lt;p&gt;Aber auch die anderen Kapitel müssen sich nicht verstecken. Das Buch erklärt auch i18n, AJAX, Unit testing, Plugins und Fehler Behandlung. Immer perfekt gelungen ist der Kompromiss der Informationsselektion. Klar, an vielen Stellen könnte man noch mehr Schreiben, aber die Autoren setzen sehr gute Prioritäten zwischen wichtigen und unwichtigen Informationen.  Somit wird das Lesen an keiner Stelle langweilig und man kann rasche Fortschritte erzielen.&lt;/p&gt;
&lt;p&gt;Um jetzt nicht des Lobbyismus für O'Reilly beschuldigt zu werden: Ja es gibt auch ein paar kleine Fehler die sich im Buch eingeschlichen haben. Davon ist allerdings lediglich einer frustrierend wenn es um die Sortierung von Model results geht, da wird an einer Stelle ein falscher parameter verwendet. Die restlichen Fehler haben eher kosmetische Dimensionen und tun dem Verständnis keinen Abbruch (zumal es sich wirklich um lediglich 3-4 handelt).&lt;/p&gt;
&lt;p&gt;Nichts desto trotz: Wer des Deutschen mächtig ist und sich selbst oder einem Kollegen CakePHP näher bringen möchte sollte unbedingt &lt;a href="http://www.amazon.de/s/ref=nb_ss_w/028-2190767-6445327?field-keywords=webentwicklung%20mit%20cakephp&amp;__mk_de_DE=%C5M%C5Z%D5%D1&amp;url=search-alias%3Daps"&gt;zugreifen&lt;/a&gt;. Bei "Webentwicklung mit CakePHP" handelt es sich wirklich um ein außergewöhnliches Programmierbuch wo fast jedes Kapitel für sich den Kauf rechtfertigen kann.&lt;/p&gt;
&lt;p&gt;-- Felix Geisendörfer aka the_undefined&lt;/p&gt;
&lt;p&gt;PS: I have met Robert, one of the authors twice. He did however not even bother to bribe me with a beer so far (even when Tim and I visited him for Oktoberfest in Munich) so trust me if I say that I truly enjoyed reading this book and my endorsement for it comes from heart.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/debuggable/~4/444401849" height="1" width="1"/&gt;</description><author>felix@debuggable.com</author><pubDate>Thu, 06 Nov 2008 13:55:35 +0000</pubDate><comments>http://debuggable.com/posts/buch-tip-webentwicklung-mit-cakephp:4912dccb-f594-4fa1-af20-6c564834cda3</comments><feedburner:origLink>http://debuggable.com/posts/buch-tip-webentwicklung-mit-cakephp:4912dccb-f594-4fa1-af20-6c564834cda3</feedburner:origLink></item><item><title>Unix is love</title><link>http://feeds.feedburner.com/~r/debuggable/~3/442476807/unix-is-love:4910acf5-4914-46b2-bd75-46954834cda3</link><guid isPermaLink="false">http://debuggable.com/posts/unix-is-love:4910acf5-4914-46b2-bd75-46954834cda3</guid><description>&lt;pre class="terminal"&gt;git ci -m "Updated sidebar" &amp;&amp; git push &amp;&amp; deploy blog &amp;&amp; say "Done"&lt;/pre&gt;
&lt;p&gt;No, this is not pseudo code. I just ran this : ).&lt;/p&gt;
&lt;p&gt;Also read the previous &lt;a href="http://debuggable.com/posts/use-the-terminal:48c67144-9984-447b-a75a-14b14834cda3"&gt;"use the terminal"&lt;/a&gt; post.&lt;/p&gt;
&lt;p&gt;-- Felix Geisendörfer aka the_undefined&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/debuggable/~4/442476807" height="1" width="1"/&gt;</description><author>felix@debuggable.com</author><pubDate>Tue, 04 Nov 2008 20:13:41 +0000</pubDate><comments>http://debuggable.com/posts/unix-is-love:4910acf5-4914-46b2-bd75-46954834cda3</comments><feedburner:origLink>http://debuggable.com/posts/unix-is-love:4910acf5-4914-46b2-bd75-46954834cda3</feedburner:origLink></item><item><title>Free Screencast: Using Git on Windows + More Updates</title><link>http://feeds.feedburner.com/~r/debuggable/~3/440292245/free-screencast-using-git-on-windows-and-more-updates:490e1020-d198-4ab1-b92b-4c5f4834cda3</link><guid isPermaLink="false">http://debuggable.com/posts/free-screencast-using-git-on-windows-and-more-updates:490e1020-d198-4ab1-b92b-4c5f4834cda3</guid><description>&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; The plot for the &lt;a href="http://git.debuggable.com/screencasts/2:using_git_on_windows"&gt;using git windows screencast&lt;/a&gt; is now available.&lt;/p&gt;
&lt;p&gt;Hey folks,&lt;/p&gt;
&lt;p&gt;it has only been a very short time since I wrote about &lt;a href="http://debuggable.com/posts/a-new-business-git.debuggable.com:49013353-bc30-435a-8b56-77c14834cda3"&gt;Debuggable's Screencasting business venture&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://git.debuggable.com/screencasts/2:using_git_on_windows" style="float: left; margin: 0 5px 5px 0"&gt;&lt;img src="http://s3.amazonaws.com/git-screencasts/preview/2_using_git_on_windows_thumb.png"&gt;&lt;br /&gt;
&lt;/a&gt;Since then I have been very busy working like crazy to improve the underlaying architecture and producing a new screencast. &lt;/p&gt;
&lt;p&gt;Let's start with the Screencast first, it is called "&lt;a href="http://git.debuggable.com/screencasts/2:using_git_on_windows"&gt;Using Git on Windows&lt;/a&gt;". In ~18 minutes you can learn how to install and use git on Windows including setting up a local repository and making a bunch of commits.&lt;/p&gt;
&lt;p&gt;What else is new? There are two new sites. The &lt;a href="http://git.debuggable.com/"&gt;git screencasts&lt;/a&gt; site has been completely redone. Initially it was really just a bunch of HTML files with 1 PHP file handling the payment processing. In fact you might get a kick out of what a &lt;a href="http://bin.cakephp.org/view/787984892"&gt;terrible copy &amp; paste job&lt;/a&gt; I pulled off for that : ).&lt;/p&gt;
&lt;p&gt;But hey, I'm really playing this by the "Make it work" and then "Make it work better" rules, and it's tons of fun. Anyway, the new site is now finally a CakePHP app which will make it easy to add tons of new screencasts in future.&lt;/p&gt;
&lt;p&gt;The next new site is the &lt;a href="http://store.debuggable.com/"&gt;Debuggable Store&lt;/a&gt;. This is the payment gateway and the most interesting change. I will write more about this in future but the new setup is kind of fancy. You go to &lt;a href="http://git.debuggable.com/"&gt;git.debuggable.com&lt;/a&gt;, choose a screencast and hit the buy button. You are the redirected to the store where you can actually buy the item. The store then sends you to PayPal. PayPal ping's the store when the payment has cleared and the store sends out an email with a download link. The download link is leading you back to the store which then redirects you to a Amazon S3 download url that is signed for 15 seconds. This way I can keep track of every download, ip and browser. This saves me from having to serve my files through a PHP script (slow!) which is awesome.&lt;/p&gt;
&lt;p&gt;Anyway, what I was actually going to focus on here is: The store is independent from the git screencasts site. I'm already talking to a bunch of people who are interested in selling videos, ebooks and other downloadable files and who are looking for a payment solution that doesn't suck and can possibly be customized in future. If you are interested in a venture like this yourself, please don't hesitate to &lt;a href="mailto:felix@debuggable.com"&gt;contact me&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So, go ahead and &lt;a href="http://store.debuggable.com/buy/2"&gt;download the free using git on windows screencast&lt;/a&gt; - Feedback would be much appreciated!&lt;/p&gt;
&lt;p&gt;-- Felix Geisendörfer aka the_undefined&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/debuggable/~4/440292245" height="1" width="1"/&gt;</description><author>felix@debuggable.com</author><pubDate>Sun, 02 Nov 2008 21:00:01 +0000</pubDate><comments>http://debuggable.com/posts/free-screencast-using-git-on-windows-and-more-updates:490e1020-d198-4ab1-b92b-4c5f4834cda3</comments><feedburner:origLink>http://debuggable.com/posts/free-screencast-using-git-on-windows-and-more-updates:490e1020-d198-4ab1-b92b-4c5f4834cda3</feedburner:origLink></item><item><title>Code Insults Round 1 - Why switch blocks are dumb</title><link>http://feeds.feedburner.com/~r/debuggable/~3/433670960/code-insults-round-1---why-switch-blocks-are-dumb:4901d363-d210-482c-9794-65bd4834cda3</link><guid isPermaLink="false">http://debuggable.com/posts/code-insults-round-1---why-switch-blocks-are-dumb:4901d363-d210-482c-9794-65bd4834cda3</guid><description>&lt;p&gt;Howdy folks,&lt;/p&gt;
&lt;p&gt;Sorry for not getting back to you sooner.  Between speaking engagements, framework releases and hard drive crashes, blog posting just gets lost in all the chaos sometimes.  You know how it is.&lt;/p&gt;
&lt;p&gt;So, today's code was randomly selected from the entries I've received since the &lt;a href="http://debuggable.com/posts/i-will-insult-your-code!:48ac91d1-ca78-4e95-ad66-1e854834cda3"&gt;introductory post&lt;/a&gt;.  The entire submission is actually two files, which together comprise a console script for interacting with a web service (the names of the entrants have been withheld to protect the identities of the guilty).  Rather than examine the full entry, we're going to take a look at one part which I find comes up fairly often: switch block overkill.&lt;/p&gt;
&lt;p&gt;Don't get me wrong, switch blocks are great, especially for flow control (which makes the title of this post slightly misleading and sensationalist), but they're often overused in ways that make your code less maintainable.  Let's take a look at the example:&lt;/p&gt;
&lt;div class="clear"&gt;&lt;/div&gt;
&lt;div class="lang_box"&gt;php&lt;/div&gt;
&lt;div class="code debuggable_sh_php" style="white-space: wrap;white-space: nowrap;"&gt;
&lt;ol&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&lt;span class="kw1"&gt;for&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$k&lt;/span&gt;=&lt;span class="nu0"&gt;0&lt;/span&gt;; &lt;span class="re0"&gt;$k&lt;/span&gt;&amp;lt;count&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$args&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;; &lt;span class="re0"&gt;$k&lt;/span&gt;++&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &lt;span class="re0"&gt;$option&lt;/span&gt; = &lt;span class="re0"&gt;$args&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="re0"&gt;$k&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &lt;span class="kw1"&gt;switch&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$option&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li2"&gt;
&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;case&lt;/span&gt; &lt;span class="st0"&gt;'id'&lt;/span&gt;:&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.php.net/mb_ereg"&gt;&lt;span class="kw3"&gt;mb_ereg&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;^[0-9 ,]+$&amp;quot;&lt;/span&gt;,&lt;span class="re0"&gt;$args&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="re0"&gt;$k&lt;/span&gt;&lt;span class="nu0"&gt;+1&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;id&lt;/span&gt; = &lt;a href="http://www.php.net/explode"&gt;&lt;span class="kw3"&gt;explode&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;','&lt;/span&gt;,&lt;a href="http://www.php.net/str_replace"&gt;&lt;span class="kw3"&gt;str_replace&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;' '&lt;/span&gt;,&lt;span class="st0"&gt;''&lt;/span&gt;,&lt;span class="re0"&gt;$args&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="re0"&gt;$k&lt;/span&gt;&lt;span class="nu0"&gt;+1&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$k&lt;/span&gt;++;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; &lt;span class="kw1"&gt;else&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li2"&gt;
&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$err&lt;/span&gt; = &lt;span class="st0"&gt;'No id number found with id option'&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;break&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;case&lt;/span&gt; &lt;span class="st0"&gt;'q'&lt;/span&gt;:&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;verbose&lt;/span&gt; = &lt;span class="nu0"&gt;0&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li2"&gt;
&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;quiet&lt;/span&gt; = &lt;span class="kw2"&gt;true&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;break&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;case&lt;/span&gt; &lt;span class="st0"&gt;'v'&lt;/span&gt;:&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;verbose&lt;/span&gt; = &lt;span class="nu0"&gt;1&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;quiet&lt;/span&gt; = &lt;span class="kw2"&gt;false&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li2"&gt;
&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;break&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;case&lt;/span&gt; &lt;span class="st0"&gt;'V'&lt;/span&gt;:&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;verbose&lt;/span&gt; = &lt;span class="nu0"&gt;2&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;quiet&lt;/span&gt; = &lt;span class="kw2"&gt;false&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;break&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li2"&gt;
&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;case&lt;/span&gt; &lt;span class="st0"&gt;'D'&lt;/span&gt;:&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;debug&lt;/span&gt; = &lt;span class="kw2"&gt;true&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;verbose&lt;/span&gt; = &lt;span class="nu0"&gt;2&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;quiet&lt;/span&gt; = &lt;span class="kw2"&gt;false&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;break&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li2"&gt;
&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;case&lt;/span&gt; &lt;span class="st0"&gt;'T'&lt;/span&gt;:&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;testrun&lt;/span&gt; = &lt;span class="kw2"&gt;true&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;quiet&lt;/span&gt; = &lt;span class="kw2"&gt;false&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;break&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;case&lt;/span&gt; &lt;span class="st0"&gt;'L'&lt;/span&gt;:&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li2"&gt;
&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.php.net/mb_ereg"&gt;&lt;span class="kw3"&gt;mb_ereg&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;^[0-9]+$&amp;quot;&lt;/span&gt;,&lt;span class="re0"&gt;$args&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="re0"&gt;$k&lt;/span&gt;&lt;span class="nu0"&gt;+1&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;limit&lt;/span&gt; = &lt;span class="re0"&gt;$args&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="re0"&gt;$k&lt;/span&gt;&lt;span class="nu0"&gt;+1&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$k&lt;/span&gt;++;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; &lt;span class="kw1"&gt;else&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$err&lt;/span&gt; = &lt;span class="st0"&gt;'Limit param can only be a digit'&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li2"&gt;
&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;break&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;default&lt;/span&gt;: &lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;!&lt;a href="http://www.php.net/isset"&gt;&lt;span class="kw3"&gt;isset&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$valid_args&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="re0"&gt;$option&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$err&lt;/span&gt; = &lt;span class="st0"&gt;'Uknown argument &lt;span class="es0"&gt;\'&lt;/span&gt;'&lt;/span&gt;.&lt;span class="re0"&gt;$option&lt;/span&gt;.&lt;span class="st0"&gt;'&lt;span class="es0"&gt;\'&lt;/span&gt;.'&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li2"&gt;
&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; &lt;span class="kw1"&gt;else&lt;/span&gt; &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$valid_args&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="re0"&gt;$option&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; !== &lt;span class="kw2"&gt;false&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$k&lt;/span&gt;++;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;break&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li2"&gt;
&lt;div class="de2"&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;p&gt;This code takes a list of arguments from the command line, and uses them to set the state of the shell object.  In other words, it is creating a mapping between the parameter flags and the shell object's properties.&lt;/p&gt;
&lt;p&gt;A key to writing flexible, maintainable code is realizing that your applications are basically comprised of two things: algorithms and data.  Algorithms are the code, the logic.  Data is what the algorithms operate on, though in many cases (like this one), data is showing up as part of the algorithm: it's too tightly bound up in logic, and unnecessarily so.&lt;/p&gt;
&lt;p&gt;Finding where data is tied up in your business logic can sometimes be subtle and hard to spot.  It might help to think about the distinction in these terms.  Logic (or algorithm) code &lt;i&gt;does&lt;/i&gt; something: it causes a transition to the next state of execution within your application.  Conditionals (if/switch blocks) &lt;i&gt;branch&lt;/i&gt;, loops &lt;i&gt;iterate&lt;/i&gt;, etc.  Conversely, data code is declarative, it takes no direct action; i.e. setting a variable or object property.  (Unless &lt;code&gt;__set()&lt;/code&gt; is involved, in which case you're invoking a method anyway, so it doesn't count.  Cheater.)&lt;/p&gt;
&lt;p&gt;Now, setting a variable does cause a change of state within the machine of your application, but in and of itself, this change has no value.  It requires some form of processing via logic code.  With that in mind, let's take a look at the re-written example:&lt;/p&gt;
&lt;div class="clear"&gt;&lt;/div&gt;
&lt;div class="lang_box"&gt;php&lt;/div&gt;
&lt;div class="code debuggable_sh_php" style="white-space: wrap;white-space: nowrap;"&gt;
&lt;ol&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&lt;span class="re0"&gt;$flags&lt;/span&gt; = &lt;a href="http://www.php.net/array"&gt;&lt;span class="kw3"&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &lt;span class="st0"&gt;'q'&lt;/span&gt; =&amp;gt; &lt;a href="http://www.php.net/array"&gt;&lt;span class="kw3"&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;'verbose'&lt;/span&gt; =&amp;gt; &lt;span class="nu0"&gt;0&lt;/span&gt;, &lt;span class="st0"&gt;'quiet'&lt;/span&gt; =&amp;gt; &lt;span class="kw2"&gt;true&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;,&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &lt;span class="st0"&gt;'v'&lt;/span&gt; =&amp;gt; &lt;a href="http://www.php.net/array"&gt;&lt;span class="kw3"&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;'verbose'&lt;/span&gt; =&amp;gt; &lt;span class="nu0"&gt;1&lt;/span&gt;, &lt;span class="st0"&gt;'quiet'&lt;/span&gt; =&amp;gt; &lt;span class="kw2"&gt;false&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;,&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li2"&gt;
&lt;div class="de2"&gt;&amp;nbsp; &lt;span class="st0"&gt;'V'&lt;/span&gt; =&amp;gt; &lt;a href="http://www.php.net/array"&gt;&lt;span class="kw3"&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;'verbose'&lt;/span&gt; =&amp;gt; &lt;span class="nu0"&gt;2&lt;/span&gt;, &lt;span class="st0"&gt;'quiet'&lt;/span&gt; =&amp;gt; &lt;span class="kw2"&gt;false&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;,&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &lt;span class="st0"&gt;'D'&lt;/span&gt; =&amp;gt; &lt;a href="http://www.php.net/array"&gt;&lt;span class="kw3"&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;'debug'&lt;/span&gt; =&amp;gt; &lt;span class="kw2"&gt;true&lt;/span&gt;, &lt;span class="st0"&gt;'verbose'&lt;/span&gt; =&amp;gt; &lt;span class="nu0"&gt;2&lt;/span&gt;, &lt;span class="st0"&gt;'quiet'&lt;/span&gt; =&amp;gt; &lt;span class="kw2"&gt;false&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;,&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &lt;span class="st0"&gt;'T'&lt;/span&gt; =&amp;gt; &lt;a href="http://www.php.net/array"&gt;&lt;span class="kw3"&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;'testrun'&lt;/span&gt; =&amp;gt; &lt;span class="kw2"&gt;true&lt;/span&gt;, &lt;span class="st0"&gt;'quiet'&lt;/span&gt; =&amp;gt; &lt;span class="kw2"&gt;false&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li2"&gt;
&lt;div class="de2"&gt;&lt;span class="kw1"&gt;for&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$k&lt;/span&gt; = &lt;span class="nu0"&gt;0&lt;/span&gt;; &lt;span class="re0"&gt;$k&lt;/span&gt; &amp;lt; &lt;a href="http://www.php.net/count"&gt;&lt;span class="kw3"&gt;count&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$args&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;; &lt;span class="re0"&gt;$k&lt;/span&gt;++&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &lt;span class="re0"&gt;$option&lt;/span&gt; = &lt;span class="re0"&gt;$args&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="re0"&gt;$k&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &lt;span class="re0"&gt;$value&lt;/span&gt; = &lt;span class="re0"&gt;$args&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="re0"&gt;$k&lt;/span&gt; + &lt;span class="nu0"&gt;1&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li2"&gt;
&lt;div class="de2"&gt;&amp;nbsp; &lt;span class="kw1"&gt;switch&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw2"&gt;true&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;case&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$option&lt;/span&gt; == &lt;span class="st0"&gt;'id'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.php.net/mb_ereg"&gt;&lt;span class="kw3"&gt;mb_ereg&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;^[0-9 ,]+$&amp;quot;&lt;/span&gt;, &lt;span class="re0"&gt;$value&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;id&lt;/span&gt; = &lt;a href="http://www.php.net/explode"&gt;&lt;span class="kw3"&gt;explode&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;','&lt;/span&gt;, &lt;a href="http://www.php.net/str_replace"&gt;&lt;span class="kw3"&gt;str_replace&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;' '&lt;/span&gt;,&lt;span class="st0"&gt;''&lt;/span&gt;, &lt;span class="re0"&gt;$value&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$k&lt;/span&gt;++;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li2"&gt;
&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; &lt;span class="kw1"&gt;else&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$err&lt;/span&gt; = &lt;span class="st0"&gt;'No id number found with id option'&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;break&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;case&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.php.net/isset"&gt;&lt;span class="kw3"&gt;isset&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$flags&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="re0"&gt;$option&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li2"&gt;
&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;foreach&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$flags&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="re0"&gt;$option&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; &lt;span class="kw1"&gt;as&lt;/span&gt; &lt;span class="re0"&gt;$key&lt;/span&gt; =&amp;gt; &lt;span class="re0"&gt;$val&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;span class="re0"&gt;$key&lt;/span&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; = &lt;span class="re0"&gt;$val&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;break&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;case&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$option&lt;/span&gt; == &lt;span class="st0"&gt;'L'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li2"&gt;
&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.php.net/mb_ereg"&gt;&lt;span class="kw3"&gt;mb_ereg&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;^[0-9]+$&amp;quot;&lt;/span&gt;, &lt;span class="re0"&gt;$value&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;limit&lt;/span&gt; = &lt;span class="re0"&gt;$value&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$k&lt;/span&gt;++;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; &lt;span class="kw1"&gt;else&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$err&lt;/span&gt; = &lt;span class="st0"&gt;'Limit param can only be a digit'&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li2"&gt;
&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;break&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;default&lt;/span&gt;:&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;!&lt;a href="http://www.php.net/isset"&gt;&lt;span class="kw3"&gt;isset&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$validArgs&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="re0"&gt;$option&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$err&lt;/span&gt; = &lt;span class="st0"&gt;'Uknown argument &lt;span class="es0"&gt;\'&lt;/span&gt;'&lt;/span&gt; . &lt;span class="re0"&gt;$option&lt;/span&gt; . &lt;span class="st0"&gt;'&lt;span class="es0"&gt;\'&lt;/span&gt;.'&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li2"&gt;
&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; &lt;span class="kw1"&gt;else&lt;/span&gt; &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$validArgs&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="re0"&gt;$option&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; !== &lt;span class="kw2"&gt;false&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$k&lt;/span&gt;++;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;break&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li2"&gt;
&lt;div class="de2"&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;p&gt;First of all, notice how the code formatting has been changed: things are now spaced out in a more consistent format that's easier to read, and an explaining variable (&lt;code&gt;$value&lt;/code&gt;) has been added alongside &lt;code&gt;$option&lt;/code&gt;, to make it more clear from the code which options support parameters, and which are stand-alone flags.  When you're writing code, even if you're in a hurry, it always helps to think of the next guy.  That next guy might be you in a couple months (or days) when you come back to the code and wonder what the heck you were doing there.&lt;/p&gt;
&lt;p&gt;Moving on: as we can see, the data mapping has been abstracted out of the logic and put at the top of the code block.  This means that (a) our data can expand infinitely with no logic duplication, and (b) the data can be moved around, manipulated, re-used, or loaded from an external source.  This highlights another property of logic vs. data: logic is fixed and immutable, while data is infinitely flexible.&lt;/p&gt;
&lt;p&gt;Okay... any questions/comments/snide remarks?&lt;/p&gt;
&lt;p&gt;No?  Good.&lt;/p&gt;
&lt;p&gt;Now get outta here and refactor your code!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/debuggable/~4/433670960" height="1" width="1"/&gt;</description><author>nate@cakephp.org</author><pubDate>Mon, 27 Oct 2008 11:09:05 +0000</pubDate><comments>http://debuggable.com/posts/code-insults-round-1---why-switch-blocks-are-dumb:4901d363-d210-482c-9794-65bd4834cda3</comments><feedburner:origLink>http://debuggable.com/posts/code-insults-round-1---why-switch-blocks-are-dumb:4901d363-d210-482c-9794-65bd4834cda3</feedburner:origLink></item><item><title>A New Business - git.debuggable.com</title><link>http://feeds.feedburner.com/~r/debuggable/~3/430540299/a-new-business-git.debuggable.com:49013353-bc30-435a-8b56-77c14834cda3</link><guid isPermaLink="false">http://debuggable.com/posts/a-new-business-git.debuggable.com:49013353-bc30-435a-8b56-77c14834cda3</guid><description>&lt;p&gt;It's almost 5am now but I am finally done. Our new secret business idea is life.&lt;/p&gt;
&lt;p&gt;What is it all about? Well maybe it is best if you &lt;a href="http://git.debuggable.com/index.html"&gt;see for yourself&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The basic problem is that I have fallen in love with git. To deal with this addiction and to put it to good use, I decided to make screencasts about git.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://git.debuggable.com/pages/resolving_merge_conflicts_in_git.html"&gt;&lt;img src="http://git.debuggable.com/img/thumbs/1_resolving_merge_conflicts_thumb.png" style="float: left; margin: 0 10px 5px 0"&gt;&lt;/a&gt;However, I am not talking about the stuff you see everywhere else, but real quality material. It took me probably 3-4 days to produce the first screencast about &lt;a href="http://git.debuggable.com/pages/resolving_merge_conflicts_in_git.html"&gt; resolving merge conflicts&lt;/a&gt;. Lots of it was because I explored technologies and techniques for production, but I think most of the future screencasts will still take a solid day of work.&lt;/p&gt;
&lt;p&gt;But ... I also want to make some money with this : ). So here is the deal. Some material on the site (I will write quite some text in future) will be free. I'll also publish some shorter behind the scenes videos that show some of the things I have to cut out or interesting observations I make about git.&lt;/p&gt;
&lt;p&gt;The real screencasts themselves however cost money. I set the price to $5.99 right now for the first 13 minute long screencast. I don't know if that is too high for most people, but it I think its a good value for what you are getting. After all looking over somebody's shoulder for ~$30 / hour is pretty cheap when learning a new technology : ).&lt;/p&gt;
&lt;p&gt;Anyway, the site needs work &amp; touches all over the place, but I really am forcing myself into "make it work" and then "make it work better" mode here. Too many small side projects of mine died because I got caught up in details. Won't happen with this one.&lt;/p&gt;
&lt;p&gt;Alright, let me know what you think folks - I'm looking forward to some feedback, hopefully from some people who bought the screencast as well : ).&lt;/p&gt;
&lt;p&gt;-- Felix Geisendörfer aka the_undefined&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/debuggable/~4/430540299" height="1" width="1"/&gt;</description><author>felix@debuggable.com</author><pubDate>Fri, 24 Oct 2008 02:30:43 +0000</pubDate><comments>http://debuggable.com/posts/a-new-business-git.debuggable.com:49013353-bc30-435a-8b56-77c14834cda3</comments><feedburner:origLink>http://debuggable.com/posts/a-new-business-git.debuggable.com:49013353-bc30-435a-8b56-77c14834cda3</feedburner:origLink></item><item><title>Deploying with Git</title><link>http://feeds.feedburner.com/~r/debuggable/~3/425475336/deploying-with-git:48faf718-b6c0-4979-89bb-6fa74834cda3</link><guid isPermaLink="false">http://debuggable.com/posts/deploying-with-git:48faf718-b6c0-4979-89bb-6fa74834cda3</guid><description>&lt;p&gt;So we are using &lt;a href="http://git.or.cz/"&gt;Git&lt;/a&gt; here at debuggable now. It takes all the pain out of deployment:&lt;/p&gt;
&lt;pre class="terminal"&gt;&lt;code&gt;ssh &amp;lt;server&amp;gt;
cd /var/www/&amp;lt;project&amp;gt;
git pull&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Done.&lt;/p&gt;
&lt;p&gt;Not easy enough? Create a deploy.sh file:&lt;/p&gt;
&lt;pre class="terminal"&gt;&lt;code&gt;ssh &amp;lt;server&amp;gt; "cd /var/www/&amp;lt;project&amp;gt; &amp;&amp; git pull"&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And once you get super lazy you'll find yourself doing:&lt;/p&gt;
&lt;pre class="terminal"&gt;git pull &amp;&amp; git push &amp;&amp; ./deploy.sh&lt;/pre&gt;
&lt;p&gt;Don't forget to get setup with &lt;a href="http://www.puddingonline.com/~dave/publications/SSH-with-Keys-HOWTO/document/html/SSH-with-Keys-HOWTO-4.html"&gt;ssh keys&lt;/a&gt; so, entering passwords all the time is a major PITA.&lt;/p&gt;
&lt;p&gt;If you are just starting out with all this web craziness and still depend on ftp &amp; shared hosting, try to get a VPS somewhere. I can recommend &lt;a href="https://www.liquidweb.com/"&gt;LiquidWeb&lt;/a&gt; (~$60 month). If there is anything I wish I had done 3 years earlier, it is to get a server with root access - it is so worth it.&lt;/p&gt;
&lt;p&gt;How do you deploy these days?&lt;/p&gt;
&lt;p&gt;-- Felix Geisendörfer aka the_undefined&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/debuggable/~4/425475336" height="1" width="1"/&gt;</description><author>felix@debuggable.com</author><pubDate>Sun, 19 Oct 2008 13:40:04 +0000</pubDate><comments>http://debuggable.com/posts/deploying-with-git:48faf718-b6c0-4979-89bb-6fa74834cda3</comments><feedburner:origLink>http://debuggable.com/posts/deploying-with-git:48faf718-b6c0-4979-89bb-6fa74834cda3</feedburner:origLink></item><item><title>MacBook updates</title><link>http://feeds.feedburner.com/~r/debuggable/~3/420882164/macbook-updates:48f4fe58-3028-4636-850c-55a14834cda3</link><guid isPermaLink="false">http://debuggable.com/posts/macbook-updates:48f4fe58-3028-4636-850c-55a14834cda3</guid><description>&lt;p&gt;The new MacBooks look nice. But the 17" has not been updated, bummer. I'm also surprised there is no new 30" cinema display. That thing has been out since June 2004 now.&lt;/p&gt;
&lt;p&gt;Oh well! I guess that's really good news. I'm not tempted to buy new mac hardware for a while and can invest in a new lens for the camera ; ).&lt;/p&gt;
&lt;p&gt;-- Felix Geisendörfer aka the_undefined&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/debuggable/~4/420882164" height="1" width="1"/&gt;</description><author>felix@debuggable.com</author><pubDate>Tue, 14 Oct 2008 20:17:28 +0000</pubDate><comments>http://debuggable.com/posts/macbook-updates:48f4fe58-3028-4636-850c-55a14834cda3</comments><feedburner:origLink>http://debuggable.com/posts/macbook-updates:48f4fe58-3028-4636-850c-55a14834cda3</feedburner:origLink></item><item><title>What you can do about the finance crisis</title><link>http://feeds.feedburner.com/~r/debuggable/~3/416182754/what-you-can-do-about-the-finance-crisis:48ee8204-bcc0-4bf5-9cd3-764a4834cda3</link><guid isPermaLink="false">http://debuggable.com/posts/what-you-can-do-about-the-finance-crisis:48ee8204-bcc0-4bf5-9cd3-764a4834cda3</guid><description>&lt;p&gt;Work hard.&lt;/p&gt;
&lt;p&gt;Block out the news as much as you can.&lt;/p&gt;
&lt;p&gt;Know that every investment you make now will pay off unbelievable ways if you are serious about it.&lt;/p&gt;
&lt;p&gt;-- Felix Geisendörfer&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/debuggable/~4/416182754" height="1" width="1"/&gt;</description><author>felix@debuggable.com</author><pubDate>Thu, 09 Oct 2008 22:15:18 +0000</pubDate><comments>http://debuggable.com/posts/what-you-can-do-about-the-finance-crisis:48ee8204-bcc0-4bf5-9cd3-764a4834cda3</comments><feedburner:origLink>http://debuggable.com/posts/what-you-can-do-about-the-finance-crisis:48ee8204-bcc0-4bf5-9cd3-764a4834cda3</feedburner:origLink></item><item><title>Walking</title><link>http://feeds.feedburner.com/~r/debuggable/~3/414883605/walking:48ecc68a-e518-4e52-97de-46cf4834cda3</link><guid isPermaLink="false">http://debuggable.com/posts/walking:48ecc68a-e518-4e52-97de-46cf4834cda3</guid><description>&lt;p&gt;I do it once a day now. 30 minutes to an hour. It is beautiful.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://static.thinkingphp.org/img/walking/1.jpg"&gt;&lt;br /&gt;
&lt;img src="http://static.thinkingphp.org/img/walking/2.jpg"&gt;&lt;br /&gt;
&lt;img src="http://static.thinkingphp.org/img/walking/3.jpg"&gt;&lt;br /&gt;
&lt;img src="http://static.thinkingphp.org/img/walking/4.jpg"&gt;&lt;br /&gt;
&lt;img src="http://static.thinkingphp.org/img/walking/5.jpg"&gt;&lt;br /&gt;
&lt;img src="http://static.thinkingphp.org/img/walking/6.jpg"&gt;&lt;br /&gt;
&lt;img src="http://static.thinkingphp.org/img/walking/7.jpg"&gt;&lt;br /&gt;
&lt;img src="http://static.thinkingphp.org/img/walking/8.jpg"&gt;&lt;br /&gt;
&lt;img src="http://static.thinkingphp.org/img/walking/9.jpg"&gt;&lt;br /&gt;
&lt;img src="http://static.thinkingphp.org/img/walking/10.jpg"&gt;&lt;br /&gt;
&lt;img src="http://static.thinkingphp.org/img/walking/11.jpg"&gt;&lt;br /&gt;
&lt;img src="http://static.thinkingphp.org/img/walking/12.jpg"&gt;&lt;/p&gt;
&lt;p&gt;-- Felix Geisendörfer aka the_undefined&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/debuggable/~4/414883605" height="1" width="1"/&gt;</description><author>felix@debuggable.com</author><pubDate>Wed, 08 Oct 2008 14:41:14 +0000</pubDate><comments>http://debuggable.com/posts/walking:48ecc68a-e518-4e52-97de-46cf4834cda3</comments><feedburner:origLink>http://debuggable.com/posts/walking:48ecc68a-e518-4e52-97de-46cf4834cda3</feedburner:origLink></item><link rel="stylesheet" type="text/css" href="/css/syntax_hilite.css" /><script type="text/javascript">
//<![CDATA[
			$('div.code')
				.each(function(i) {
					var $this = $(this), text = $this.text().substr(1), replace = /\n{2}/i;
					while (replace.test(text)) {
						text = text.replace(replace, '');
					}
					$this.data('plain', $('<pre class="code" />').text(text));
					$this.data('hilited', $this.children('ol'));
				})
				.hover(function() {
					if ($(this).children('ol').length) {
						$(this).data('hilited').replaceWith($(this).data('plain'));
					}
				}, function() {
					if (!$(this).children('ol').length) {
						$(this).data('plain').replaceWith($(this).data('hilited'));
					}
				});
//]]>
</script></channel></rss>
