<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>H3RALD - Tag 'cakephp' (RSS Feed)</title>
    <language>en-us</language>
    <lastBuildDate>Sat, 24 Oct 2009 18:26:59 -0000</lastBuildDate>
    <ttl>40</ttl>
    <link>http://www.h3rald.com</link>
    <description/>
    <item>
      <title>Too many cooks... take #3</title>
      <description>&lt;p&gt;Like &lt;a href="http://www.h3rald.com/articles/too-many-cooks-take-2/"&gt;its predecessor&lt;/a&gt;, this is another rant about the (end of the) &lt;a href="http://www.cakephp.org"&gt;CakePHP framework&lt;/a&gt;. Not that I particularly enjoy writing about the misfortune of others, but after reading &lt;a href="http://bakery.cakephp.org/articles/view/the-cake-is-still-rising"&gt;this official announcement&lt;/a&gt; I felt compelled to post.&lt;/p&gt;
&lt;p&gt;It has been two years since my last post on this subject and yes, the cake is still rising, but at what price? Will it still taste sweet now that two of its main ingredients are not part of it anymore? As &lt;a href="http://cakebaker.42dh.com/2009/10/23/the-end-of-cakephp/"&gt;Daniel&lt;/a&gt; puts it, &lt;em&gt;probably the best thing to do now is to drink tea and to wait until the dust settles&amp;#8230;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;As far as I&amp;#8217;m concerned, what really matters is that Garrett Woodworth (former CakePHP Project Manager) and Nate Abele (former CakePHP Lead Developer) are &lt;em&gt;gone&lt;/em&gt;. They realized they had enough Nuts over the years and they decided to switch to a more &lt;a href="http://irc.cakephp.org/logs/link/1110092#message1110102"&gt;Lithium-rich&lt;/a&gt; diet. More helthy and depression-proof, too!&lt;/p&gt;
&lt;p&gt;Stupid metaphors and painful jokes aside, this is probably the best piece of news the CakePHP community received in a long time: the birth of &lt;em&gt;a fork of the CakePHP framework&lt;/em&gt;, more precisely of the so-called Cake3 branch.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Cake3&lt;/em&gt;? I didn&amp;#8217;t keep up-to-date with the buzz, so I didn&amp;#8217;t know anything about this until today, when I decided to finally start catching up.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;Cake 3.0, on the other hand, is pretty different from the existing core code in a few notable ways. Mainly, it&amp;#8217;s been re-written from the ground up for &lt;span class="caps"&gt;PHP&lt;/span&gt; 5.3.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style="padding-right:6em;"&gt;from &lt;a href="http://debuggable.com/posts/Cake_3_interview_with_Nate_Abele:4a665a5e-5bfc-4e42-96ee-6d284834cda3"&gt;Cake 3 interview with Nate Abele&lt;/a&gt;, debuggable.com&lt;/p&gt;
&lt;p&gt;Of course, in these three years of my full immersion in the Ruby language, I almost completely forgot about &lt;span class="caps"&gt;PHP&lt;/span&gt; too. &lt;span class="caps"&gt;PHP&lt;/span&gt; 5.3 means namespace and closures, i.e. the Rubyist&amp;#8217;s daily bread. A more modular CakePHP, properly object-oriented, with an ActiveRecord-like &lt;span class="caps"&gt;API&lt;/span&gt; for models (finally!) is definitely worth a look, especially if it&amp;#8217;s Nut-free as well.&lt;/p&gt;
&lt;p&gt;The new framework will be called &lt;strong&gt;Lithium&lt;/strong&gt; (sounds more professional already), and it&amp;#8217;s due to launch next monday, here: &lt;a href="http://li3.rad-dev.org/"&gt;http://li3.rad-dev.org/&lt;/a&gt; (at the time of writing, this link is password-protected).&lt;/p&gt;
&lt;p&gt;Personally, I am &lt;em&gt;very&lt;/em&gt; excited about this new project. It should have happened three years ago, really, but there&amp;#8217;s no point in being greedy: the time has finally come. I would like to (pre-)thank Garrett and Nate for their (upcoming) amazing work, I&amp;#8217;ll definitely keep a closer eye on it.&lt;/p&gt;</description>
      <pubDate>Sat, 24 Oct 2009 18:26:59 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/too-many-cooks-take-3/</guid>
      <link>http://www.h3rald.com/articles/too-many-cooks-take-3/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/too-many-cooks-take-3/#comments</comments>
      <category>cakephp</category>
      <category>rant</category>
      <category>php</category>
      <category>li3</category>
    </item>
    <item>
      <title>Too many cooks... take #2</title>
      <description>&lt;p&gt;Today I was not going to post on my blog. I have the flu, I don&amp;#8217;t feel very well so I started reading some news feeds on Google Reader. That lasted for about half an hour, so I decided to check my old Netvibes account where I kept other feeds, including a bunch of CakePHP-related blogs.&lt;/p&gt;
&lt;p&gt;Two posts immediately grab my attention:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cakebaker.42dh.com/2007/08/27/i-dont-trust-cakephp-or-what-should-you-say-in-public/"&gt;I don&#8217;t trust CakePHP or what should you say in public?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;and&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cakebaker.42dh.com/2007/08/28/bye-bye-cakephp-team/"&gt;Bye, bye, CakePHP team&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;They&amp;#8217;re both from Daniel&amp;#8217;s cakebaker blog, the one I used to read when I was really into Cake.&lt;/p&gt;
&lt;p&gt;To cut a long story short, apparently Daniel said something wrong and he got &amp;#8220;what he deserves&amp;#8221; for speaking out. Naughty boy!&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s because it might have put  &amp;#8220;CakePHP and the team in a bad light&amp;#8221;. Well, I don&amp;#8217;t know about that, but definitely now it IS in a bad light!&lt;/p&gt;
&lt;p&gt;I even found a bunch of comment which link this incident to what happened to me a few months ago:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;#8220;I said it when Fabio/H3rald left, and I&#8217;ll say it again&#8212;I think the biggest weakness of Cake is that the core dev team is quick to cut people out who don&#8217;t hold to every dogma the devs do. Fundamentalism, ego, call it what you will, a great community will only count for so long if the core keeps alienating its biggest allies. (not that they&#8217;re neccessarily alienating you, dho. I truly hope you stick around. You do seem to be taking it well.)&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;sup&gt;^&lt;/sup&gt; Whoever you are, you&amp;#8217;re 100% right.&lt;/p&gt;
&lt;p&gt;A core asset (at least for his writings) of the CakePHP team is gone, and another (big) chunk of CakePHP PR strategy is out of play, now, it seems. While I&amp;#8217;m sorry the CakePHP community has to get the butt-end of it as always, I&amp;#8217;m certainly happy for Daniel who, like me, will now have a chance to look around and experiment with new things. That&amp;#8217;s right man, Rails or Django are the way to go.&lt;/p&gt;</description>
      <pubDate>Sat, 01 Sep 2007 22:41:00 -0600</pubDate>
      <guid>http://www.h3rald.com/articles/too-many-cooks-take-2/</guid>
      <link>http://www.h3rald.com/articles/too-many-cooks-take-2/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/too-many-cooks-take-2/#comments</comments>
      <category>cakephp</category>
      <category>writing</category>
      <category>rant</category>
    </item>
    <item>
      <title>An Interview with the creator of the Akelos Framework</title>
      <description>&lt;p&gt;I &lt;a href="http://www.h3rald.com/blog/34"&gt;already&lt;/a&gt; &lt;a href="http://www.h3rald.com/blog/38"&gt;covered&lt;/a&gt; the Akelos &lt;span class="caps"&gt;PHP&lt;/span&gt; framework in the past, but for those who don&amp;#8217;t know it, Akelos seems to be one of the few &lt;a href="http://www.h3rald.com/articles/rails-inspired-php-frameworks"&gt;Rails-inspired &lt;span class="caps"&gt;PHP&lt;/span&gt; frameworks&lt;/a&gt; still worth mentioning, besides CakePHP and Symphony of course.&lt;/p&gt;
&lt;p&gt;I recently has a look at their recently-relaunched &lt;a href="http://www.akelos.org/"&gt;community website&lt;/a&gt; and I noticed this phrase:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;Being port of Ruby on Rails to &lt;span class="caps"&gt;PHP&lt;/span&gt; Akelos is also optimized for programmer happiness and sustainable productivity&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Bermi Ferrer, Akelos creator, openly admits the framework is a port of Ruby on Rails to &lt;span class="caps"&gt;PHP&lt;/span&gt;, an attempt to help &lt;em&gt;&amp;#8220;Ruby on Rails developers who need to code in &lt;span class="caps"&gt;PHP&lt;/span&gt;&amp;#8221;&lt;/em&gt;, among others. Of course Akelos is not Rails, simply because Ruby is (thank God for that!) not &lt;span class="caps"&gt;PHP&lt;/span&gt;, however I decided to find out more, and I asked Bermi a few questions, which he promptly answered.&lt;h4&gt;&lt;em&gt;There are a lot of frameworks for &lt;span class="caps"&gt;PHP&lt;/span&gt;, perhaps too many: why did you decide to create Akelos rather than using one of the existing ones?&lt;/em&gt;&lt;/h4&gt;&lt;/p&gt;
&lt;p&gt;I started coding &lt;a href="http://www.akelos.org/"&gt;Akelos&lt;/a&gt; back in 2004 for our internal developments.  At that time I only found very few frameworks out there like &lt;a href="http://www.mojavi.org/"&gt;Mojavi&lt;/a&gt; and &lt;a href="http://ez.no/"&gt;eZ Publish&lt;/a&gt;. These frameworks were not my ideal of an &lt;a href="http://en.wikipedia.org/wiki/Agile_software_development"&gt;Agile development&lt;/a&gt; environment, so I decided to brew my own solution.&lt;/p&gt;
&lt;p&gt;After reading &lt;a href="http://www.martinfowler.com/books.html"&gt;Patterns of Enterprise Application Architecture&lt;/a&gt; it was clear to me the kind of framework I wanted &lt;a href="http://www.akelos.org/"&gt;Akelos&lt;/a&gt; to become,  so I started to implement some of the design patterns from the book into Akelos.&lt;/p&gt;
&lt;p&gt;During the summer of 2005 I had a look into other &lt;span class="caps"&gt;PHP&lt;/span&gt; frameworks like &lt;a href="http://www.cakephp.org/"&gt;CakePHP&lt;/a&gt;, &lt;a href="http://phpontrax.com/"&gt;&lt;span class="caps"&gt;PHP&lt;/span&gt; on Trax&lt;/a&gt;, and &lt;a href="http://www.bennolan.com/biscuit/"&gt;Biscuit&lt;/a&gt; but none of them was more complete or easier to use than what Akelos was already at that time.&lt;/p&gt;
&lt;p&gt;Then I used &lt;a href="http://www.rubyonrails.org/"&gt;Rails&lt;/a&gt; for one small personal project and immediately found that &lt;a href="http://www.akelos.org/"&gt;Akelos&lt;/a&gt; interfaces, conventions and philosophy were close to the Rails approach. &lt;a href="http://api.rubyonrails.org/files/vendor/rails/activerecord/README.html"&gt;Rails ActiveRecord&lt;/a&gt; implementation was impressive, better than mine and much much better than other existing &lt;span class="caps"&gt;PHP&lt;/span&gt; implementations, so I first ported the ActiveRecord code using &lt;a href="http://adodb.sourceforge.net/"&gt;&lt;span class="caps"&gt;PHP&lt;/span&gt; AdoDB&lt;/a&gt; as the database abstraction layer.&lt;/p&gt;
&lt;p&gt;After that point, whenever I had a problem to solve while coding my customers applications I turned to Rails and they usually had the most elegant solution available. So I did like the idea of digging into Rails code to learn more Ruby and bringing Rails magic to the &lt;span class="caps"&gt;PHP&lt;/span&gt; world. It also helped the fact that Rails inline documentation is excellent so it could be easily adapted for Akelos.&lt;/p&gt;
&lt;h4&gt;&lt;em&gt;What&amp;#8217;s new since last time I posted about Akelos?&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;The biggest change is the direction that the project has taken. Until now we have not dedicated time to promote Akelos, we just used it for our internal projects and we have been adding features as needed without a fixed roadmap or advocacy.&lt;/p&gt;
&lt;p&gt;Now this has changed. More and more developers are using Akelos and contributing functionalities they miss from Rails. After some serious contribution proposals and many developers telling us how much they like Akelos, we decided to take the time to build a nice community site which includes &lt;a href="http://forum.akelos.org/"&gt;forums&lt;/a&gt;, a &lt;a href="http://wiki.akelos.org/"&gt;wiki&lt;/a&gt;, a new &lt;a href="http://www.akelos.org/docs/tutorials/booklink"&gt;tutorial&lt;/a&gt; and &lt;a href="http://www.akelos.org/screencasts"&gt;a screen-cast&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There are also some improvements like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sintags, now accepts ruby-like calls to helper methods from the views.&lt;/li&gt;
&lt;li&gt;Action Webservice, a component for creating and consuming Web Services easily.&lt;/li&gt;
&lt;li&gt;Action Mailer, which allows you to receive and send (directly or in delayed mode) emails from within your application. (this is almost ready to ship)&lt;/li&gt;
&lt;li&gt;Acts as tree behavior for Models.&lt;/li&gt;
&lt;li&gt;Many performance improvements.&lt;/li&gt;
&lt;li&gt;Many small contributions and bug fixes.&lt;/li&gt;
&lt;li&gt;Code base reduced from 16MB to 9MB.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;em&gt;From the new site, it seems that Akelos is &amp;#8211; or aims to be &amp;#8211; a port of Rails for &lt;span class="caps"&gt;PHP&lt;/span&gt;. Is that true? Do you aim to target Rails developers as possible users of the framework in situations in which &amp;#8220;they have no choice&amp;#8221; but to use &lt;span class="caps"&gt;PHP&lt;/span&gt; instead of Ruby?&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;Akelos has ported many Ruby on Rails components keeping their interfaces and functionality whenever it was feasible to port the Ruby code to &lt;span class="caps"&gt;PHP&lt;/span&gt;. It might be considered a port in the sense of functionality, but there are some Rails strengths that rely on the Ruby language and that are impossible to port to &lt;span class="caps"&gt;PHP&lt;/span&gt;. However, Ruby developers will find that Akelos is the &lt;span class="caps"&gt;PHP&lt;/span&gt; framework with is the closest to Rails.&lt;/p&gt;
&lt;p&gt;On the other hand, many &lt;span class="caps"&gt;PHP&lt;/span&gt; developers have moved to Ruby because &lt;span class="caps"&gt;PHP&lt;/span&gt; lacked a hyper-productive and fun-to-use framework like Rails for building complex applications. That is no longer the case, and those who excel at &lt;span class="caps"&gt;PHP&lt;/span&gt; can start being productive from day one by using Akelos. In this way, Akelos target users are those who already know &lt;span class="caps"&gt;PHP&lt;/span&gt; and need to build complex applications that can run on almost any cheap shared hosting using a solid foundation based on good coding practices and widely accepted conventions.&lt;/p&gt;
&lt;h4&gt;&lt;em&gt;What Rails features are missing in Akelos?&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;A standalone webserver like WebBrick, &lt;span class="caps"&gt;RJS&lt;/span&gt;, has and belongs to many through associations, string/number/date extensions and Active Resource.&lt;/p&gt;
&lt;p&gt;Ruby-powered features like modules, runtime class overriding and blocks will never be available in Akelos.&lt;/p&gt;
&lt;p&gt;Scaffolds in Akelos work by generating code, I found quite useless to enable $scaffold = true; and have magic functionality that you can&amp;#8217;t modify, so I decided not to invest my time on that one.&lt;/p&gt;
&lt;h4&gt;&lt;em&gt;I noticed quite a few generators available for Akelos, do they work as a Rails developer may expect them to work?&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;The ones that are available do pretty much the same as in RoR.&lt;/p&gt;
&lt;h4&gt;&lt;em&gt;How does Akelos compare to other similar &lt;span class="caps"&gt;PHP&lt;/span&gt; frameworks like, say, CakePHP? What features does Akelos offer which Cake doesn&amp;#8217;t offer and vice-versa?&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;I&amp;#8217;m not aware of Cake&amp;#8217;s functionalities. At the time I started porting Rails my feelings about CakePHP were that they missed the simplicity point in favor of architectural discussions that lead to confusing code, but that was long ago.&lt;/p&gt;
&lt;p&gt;Akelos (and Rails) do not implement &lt;span class="caps"&gt;ACL&lt;/span&gt; like Cake does, as that is a business logic component that varies too much from one case to other, it has no place inside the framework.&lt;/p&gt;
&lt;p&gt;Akelos is built with internationalization in its core. You can even internationalize your Models by prefixing the column name with the locale.&lt;/p&gt;
&lt;p&gt;I think that Cake only has an act_as_tree behavior on models while Akelos has Tree, Nested Set, and List. Akelos also implements handy features from Rails like &lt;a href="http://en.wikipedia.org/wiki/Optimistic_concurrency_control"&gt;optimistic locking&lt;/a&gt;, &lt;a href="http://www.martinfowler.com/eaaCatalog/lazyLoad.html"&gt;lazy loading&lt;/a&gt;, &lt;a href="http://www.martinfowler.com/eaaCatalog/singleTableInheritance.html"&gt;table inheritance&lt;/a&gt;, counters, automatic transactions, really powerful validations, calculations&amp;#8230;, and I think most of these advanced features are still missing on Cake, but maybe I&amp;#8217;m wrong.&lt;/p&gt;
&lt;h4&gt;&lt;em&gt;Did you include unit tests for all the framework classes?&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;The main components are fully unit tested, and no new code or patch gets into the trunk without unit tests.&lt;/p&gt;
&lt;h4&gt;&lt;em&gt;Did you or someone do any performance test or benchmarks on Akelos already?&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;During the last month a lot of code was refactored to improve performance with the help of &lt;a href="http://xdebug.org/"&gt;Xdebug&lt;/a&gt;, &lt;a href="http://kcachegrind.sourceforge.net/"&gt;Kcachegrind&lt;/a&gt; and &lt;a href="http://httpd.apache.org/docs/2.0/programs/ab.html"&gt;ab&lt;/a&gt;. We significantly improved the performance in one of our most complex intranet applications, a &lt;a href="http://www.basecamphq.com/"&gt;basecamp&lt;/a&gt;-like system.&lt;/p&gt;
&lt;p&gt;Akelos also implements caching at many levels, so it&amp;#8217;s very easy to increase performance as we did with a new &lt;span class="caps"&gt;CMS&lt;/span&gt; that can handle +200 requests per second using &lt;a href="http://www.apache.org/"&gt;Apache&lt;/a&gt; in a cheap shared server environment.&lt;/p&gt;
&lt;h4&gt;&lt;em&gt;Why should a &lt;span class="caps"&gt;PHP&lt;/span&gt; developer choose Akelos over another &lt;span class="caps"&gt;PHP&lt;/span&gt; framework?&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://www.akelos.org/docs/tutorials/booklink#mvc"&gt;Akelos &lt;span class="caps"&gt;MVC&lt;/span&gt; implementation&lt;/a&gt; and &lt;a href="http://www.akelos.org/docs/tutorials/booklink#workflow"&gt;workflow&lt;/a&gt; are really easy to understand.&lt;/p&gt;
&lt;p&gt;In Akelos all the methods and interfaces are thoroughly selected, so whenever you need to do something you just need to type what you think. Default options are selected with care so you don&amp;#8217;t need to set any  configuration unless you want to modify the default behavior.&lt;/p&gt;
&lt;p&gt;Coding multilingual applications, building complex relationships within models, distributing databases changes within your development team, building Ajax interfaces, unit testing your code and many other common tasks for &lt;span class="caps"&gt;PHP&lt;/span&gt; developers are really simple to accomplish when using Akelos.&lt;/p&gt;
&lt;p&gt;Akelos is designed to work on PHP4 and PHP5 and it comes with an easy web installer you can adapt for your application. It has functions for working with files and directories in common situations when the web server runs as a different user.&lt;/p&gt;
&lt;p&gt;And one of the main reasons for choosing Akelos is that it makes coding fun and lets you focus on solving user problems rather than wasting your time in repetitive technical annoyances. When coding with other developers the &lt;em&gt;convention over configuration philosophy&lt;/em&gt; helps everybody to understand  exactly how everything works and where to find things.&lt;/p&gt;
&lt;h4&gt;&lt;em&gt;Is there any website using Akelos already?&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;The &lt;a href="http://www.thechemicalbrothers.com/"&gt;Chemical Brothers&lt;/a&gt; new website which has been developed by &lt;a href="http://www.3ev.com/"&gt;3rd Eye Vision (3ev)&lt;/a&gt; is using Akelos. &lt;/p&gt;
&lt;p&gt;The &lt;a href="http://www.akelos.org/"&gt;Akelos.org&lt;/a&gt; site is running a &lt;span class="caps"&gt;CMS&lt;/span&gt; named Editam which we will release as Open Source in a near future.&lt;/p&gt;
&lt;p&gt;Some small websites like &lt;a href="http://www.fundaciocaixacarlet.com/"&gt;Fundacio Caixa Carlet&lt;/a&gt; and many intranet/extranet sites that we&amp;#8217;ve been coding during the last 2 years.&lt;/p&gt;
&lt;h4&gt;&lt;em&gt;What are your future plans for Akelos? Anything new on the way?&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;A new manual, and a better &lt;span class="caps"&gt;API&lt;/span&gt; interface are the main priorities right now.&lt;/p&gt;
&lt;p&gt;Continuing bringing Rails functionality as needed.&lt;/p&gt;
&lt;p&gt;Releasing our sister project Editam &lt;span class="caps"&gt;CMS&lt;/span&gt; which will help developers who need to add functionality on the top of a &lt;span class="caps"&gt;CMS&lt;/span&gt; using a solid &lt;span class="caps"&gt;MVC&lt;/span&gt; framework like Akelos.&lt;/p&gt;</description>
      <pubDate>Thu, 19 Jul 2007 03:02:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/akelos-interview/</guid>
      <link>http://www.h3rald.com/articles/akelos-interview/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/akelos-interview/#comments</comments>
      <category>php</category>
      <category>rails</category>
      <category>cakephp</category>
      <category>frameworks</category>
    </item>
    <item>
      <title>Time for a diet...</title>
      <description>&lt;p&gt;My fianc&amp;eacute;e keeps telling me that too many cakes are not good for me, and I never listen: I always liked cakes! I &lt;strong&gt;did&lt;/strong&gt; like the CakePHP&amp;#8482;&lt;sup class="footnote"&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt; framework too, once, and I &lt;strong&gt;did&lt;/strong&gt; write &lt;a href="http://www.h3rald.com/projects/view/cakephp-herald"&gt;some articles&lt;/a&gt; about it in the past, and I believe at least a bunch of Bakers found them useful, especially at the time.&lt;br /&gt;
I do believe the Cake&amp;#8482; Software Foundation&lt;sup class="footnote"&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt; quite liked having their framework featured on popular websites like php|architect and SitePoint, and I believe that I contributed &amp;#8211; to some extent &amp;#8211; to make it one of the most popular frameworks available for the &lt;span class="caps"&gt;PHP&lt;/span&gt; programming language.&lt;/p&gt;
&lt;p&gt;Unfortunately though someone decided that two of such articles and my personal website were no longer worth a mention on CakePHP official website frontpage. To me, this makes sense since the two CakePHP-related series which are being published by &lt;span class="caps"&gt;IBM&lt;/span&gt; are much more up-to-date than my articles, and thus deserve such a mention instead.&lt;/p&gt;
&lt;p&gt;Oddly enough, I took a screenshot of the CakePHP website just yesterday &lt;em&gt;&amp;#8220;by chance&amp;#8221;&lt;/em&gt; and my articles were still there:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.h3rald.com/img/pictures/cake-promo/cakephp-08032007.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;#8230;while this morning they weren&amp;#8217;t anymore:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.h3rald.com/img/pictures/cake-promo/cakephp-09032007.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Of course I can&amp;#8217;t provide any proof that I took the screenshot yesterday, and of course I don&amp;#8217;t have any proof of the fact that someone in &lt;span class="caps"&gt;CSF&lt;/span&gt; may have thought that due to my recent &lt;a href="http://www.h3rald.com/blog/view/42/"&gt;bad behavior&lt;/a&gt; my articles didn&amp;#8217;t deserve to be publicized anymore. I am confident that the Cake Software Foundation always does its best in keeping its site up-to-date, and I am glad that yesterday&amp;#8217;s accident reminded them that there were far better articles which needed to be featured on their site. At least I &lt;em&gt;finally&lt;/em&gt; did something good for the community!&lt;/p&gt;
&lt;p&gt;Sarcasm apart, I feel I owe an apology for blowing this whole thing out of proportions: I disclosed embarassing details about our past project which &amp;#8211; for the sake of the framework &amp;#8211; should have never been made public, perhaps.&lt;br /&gt;
I want all of you to know that I still think that CakePHP is the best &lt;span class="caps"&gt;PHP&lt;/span&gt; framework ever made and I genuinely think that Larry E. Master did outstanding work in all this time, along with the rest of &lt;span class="caps"&gt;CSF&lt;/span&gt; members and contributors. Best of luck for your future editorial and development projects.&lt;/p&gt;
&lt;p&gt;Since now my contributions are no longer &amp;#8220;officially recognized&amp;#8221;, I think I&amp;#8217;d better to move on devoting my attention to something else.&lt;/p&gt;
&lt;p class="footnote" id="fn1"&gt;&lt;sup&gt;1&lt;/sup&gt; &amp;#8220;CakePHP&amp;#8221; and &amp;#8220;Cake&amp;#8221; &lt;em&gt;seems&lt;/em&gt; to be registered trademarks of the Cake Software Foundation Inc. I&amp;#8217;m not sure if I&amp;#8217;m allowed to use them in this blog &amp;#8212; If anyone has any problem with it, please let me know.&lt;/p&gt;</description>
      <pubDate>Fri, 09 Mar 2007 03:59:00 -0700</pubDate>
      <guid>http://www.h3rald.com/articles/43/</guid>
      <link>http://www.h3rald.com/articles/43/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/43/#comments</comments>
      <category>cakephp</category>
      <category>rant</category>
      <category>writing</category>
    </item>
    <item>
      <title>Too many cooks spoil the Cake book</title>
      <description>&lt;p&gt;I am sorry to announce that my upcoming book, CakePHP Recipes, will not be published anymore. As a matter of fact, it wasn&amp;#8217;t finished because some of the people involved failed to comply with the terms of their contract in delivering material which was suitable for publication.&lt;/p&gt;
&lt;p&gt;To quote an email I received from my publisher a few days ago,&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;#8220;[&amp;#8230;] The Cake Software Foundation has informed us they are withdrawing from the CakePHP Recipes project, and returning the advances they&amp;#8217;ve received. This means we can no longer count on them for support, nor can we package the book as an official title.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;After careful consideration, we have determined that this renders the book no longer viable for us. So, regrettably we must cancel your contract as well. Please understand that we have no quarrel with your performance; you have been responsive and communicative for the entire time. [&amp;#8230;]&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This is a huge disappointment to me, in particular because I am not responsible for the cancellation. It was going to be my very first book to be published, and due to someone else&amp;#8217;s misjudgement and lack of motivation it will never be available to the readers.&lt;br /&gt;
I do not want to put the blame the whole Cake Software Foundation for this: nearly every person involved in the project did his best in reviewing parts of the book or offering me support. Regrettably this wasn&amp;#8217;t enough: unfortunately it seems that someone didn&amp;#8217;t like the idea of me writing the book and kept doubting not only my coding skills but also my ability as a writer all along.&lt;/p&gt;
&lt;p&gt;It is sad to see how certain individuals fail to understand the importance of marketing and public relations not only when working on a team project but also in ordinary life, but it is truly disappointing to see how the thoughts and opinions of a single individual affect the work of a whole team.&lt;/p&gt;</description>
      <pubDate>Tue, 06 Mar 2007 18:45:00 -0700</pubDate>
      <guid>http://www.h3rald.com/articles/42/</guid>
      <link>http://www.h3rald.com/articles/42/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/42/#comments</comments>
      <category>cakephp</category>
      <category>writing</category>
    </item>
    <item>
      <title>Introducing: "CakePHP Recipes"</title>
      <description>&lt;p&gt;Despite all my efforts to keep the whole thing quiet for the time being, a few days ago I entered the words &amp;#8220;CakePHP Recipes&amp;#8221; in Google and discovered &amp;#8211; to my astonishment &amp;#8211; that my new book about the CakePHP framework is already for (pre)sale in many popular online bookstores.&lt;/p&gt;
&lt;p&gt;Up to now I never made any formal announcement myself (although the Cake Software Foundation already did, months ago), nor gave out any juicy details about it, but maybe now the time has come to post something more about it. Yes, I am indeed writing a book about the CakePHP framework, and yes, you can already buy it but no, you can&amp;#8217;t phisically get it simply because it&amp;#8217;s still in progress (miracles of the modern publishing industry!).&lt;/p&gt;
&lt;p style="float:left;"&gt;&lt;img src="http://base--/img/cakephp-recipes/cover.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#8217;d like to point out that I&amp;#8217;m not the &lt;em&gt;only&lt;/em&gt; author of the book: all the code examples and snippets included in the book is provided by the Cake Software Foundation staff, in the person of Larry E. Masters and Garrett J. Woodworth mainly, who will also act as technical editors and first reviewers of the book, together with other trusthworthy CakePHP core developers.&lt;br /&gt;
It is our intent to produce an enjoyable and yet very useful book which will hopefully help CakePHP enthusiasts to use the framework in real-world situations: the book will not focus on theory but on practice, by providing a lot of interesting &amp;#8220;recipes&amp;#8221; on how to implement a particular functionality in a CakePHP web application.&lt;/p&gt;
&lt;p&gt;Why should you get it? Here are some reasons:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;It is a book written &lt;em&gt;by&lt;/em&gt; programmers &lt;em&gt;for&lt;/em&gt; programmers&lt;/li&gt;
	&lt;li&gt;All the code included in the book has been created and tested by the creators of the framework&lt;/li&gt;
	&lt;li&gt;Part of all the revenues generated by the book (including royalties) will go to the Cake Software Foundation, and hopefully contribute to improve our already excellent framework.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Very special thanks to &lt;a href="http://www.peachpit.com/"&gt;Peachpit Press&lt;/a&gt; for giving me and the Cake Software Foundation this chance to&lt;/p&gt;
&lt;p&gt;More to come&amp;#8230;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class="caps"&gt;UPDATE&lt;/span&gt;&lt;/strong&gt;: This book &lt;a href="http://www.h3rald.com/blog/42"&gt;has been canceled&lt;/a&gt; and therefore will &lt;span class="caps"&gt;NEVER&lt;/span&gt; be available in bookshops or online stores.&lt;/p&gt;
&lt;/blockquote&gt;</description>
      <pubDate>Wed, 01 Nov 2006 21:25:00 -0700</pubDate>
      <guid>http://www.h3rald.com/articles/40/</guid>
      <link>http://www.h3rald.com/articles/40/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/40/#comments</comments>
      <category>cakephp</category>
      <category>writing</category>
    </item>
    <item>
      <title>Some updates</title>
      <description>&lt;p&gt;Quite a bit of time passed since the last blog post, and I&amp;#8217;m actually sorry about that, but as I thought, I don&amp;#8217;t have as much free time as I used to be. Work is work, after all!&lt;br /&gt;
This post will be multipurpose as actually I bluid up a few things to write about in the last few days&amp;#8230; erhm, ok, &lt;em&gt;weeks&lt;/em&gt;.&lt;/p&gt;
&lt;h3&gt;New Website Design&lt;/h3&gt;
&lt;p&gt;Something different eh? Yep, definitely! Some time ago I started a small project called &lt;a href="http://base--/projects/view/h3rald-redesign"&gt;h3raLd.com Re-design&lt;/a&gt; hoping that some &lt;span class="caps"&gt;GFX&lt;/span&gt; guru could provide a new template for this website, and actually in the end I decided to accept the work of &lt;em&gt;&lt;strong&gt;Bartus F. Teipel&lt;/strong&gt;&lt;/em&gt; a Brazilian CakePHP enthusiast.&lt;br /&gt;
Bartus is obviously (&lt;span class="caps"&gt;MUCH&lt;/span&gt;) more talented than me when it comes to design, and I was amazed at the quality of the template he provided, in a really short time. &lt;br /&gt;
Unfortunately he didn&amp;#8217;t yet provide a link to his main website/portfolio, but for now all I can show you is his website for party pics, &lt;a href="http://www.circuscircus.com.br/"&gt;CircusCircus&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The new template sports a more contemporary Web2.0-ish look which I like a lot, and Bartus used libraries like &lt;a href="http://prototype.conio.net/"&gt;prototype&lt;/a&gt;, &lt;a href="http://moofx.mad4milk.net/"&gt;moo.fx&lt;/a&gt; and &lt;a href="http://www.html.it/articoli/niftycube/index.html"&gt;Nifty Corners Cube&lt;/a&gt; for the &lt;span class="caps"&gt;AJAX&lt;/span&gt; effects and functionalities. &lt;br /&gt;
A really outstanding work, thanks Bartus!&lt;/p&gt;
&lt;h3&gt;The CakePHP Herald project has been completed&lt;/h3&gt;
&lt;p&gt;With my &lt;a href="http://www.h3rald.com/articles/view/cakephp-first-bite/"&gt;latest article&lt;/a&gt; about CakePHP published on SitePoint, the &lt;a href="http://base--/projects/view/cakephp-herald/"&gt;CakePHP Herald&lt;/a&gt; project was completed.&lt;br /&gt;
I must say that I really enjoyed writing all those articles about CakePHP, and the only thing I regret is not to have written anything (yet) about some more advanced topic about CakePHP. This was mostly due to &amp;#8211; again &amp;#8211; lack of time to focus on advanced topic and produce some quality examples.&lt;/p&gt;
&lt;p&gt;However, judging by the positive feedback I received about the articles, I am really happy of the final result: even more people discovered the power of CakePHP and became &lt;em&gt;bakers&lt;/em&gt;. Happy baking to all of you!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;So&amp;#8230; no more articles about Cake?&lt;/em&gt; Maybe not for a while, I think I&amp;#8217;ll be rather busy in the following months. Curious? Read on :-)&lt;/p&gt;
&lt;h3&gt;My biggest and most important project&lt;/h3&gt;
&lt;p&gt;I actually got really pissed off with Larry, Garret &amp;amp; the other Master Bakers because of what they wrote on the &lt;a href="http://cakeforge.org/forum/forum.php?forum_id=244"&gt;announcement&lt;/a&gt; for the latest CakePHP release:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;[&amp;#8230;]In other news, some new articles were published on Sitepoint &lt;sup class="footnote"&gt;&lt;a href="#fn3"&gt;3&lt;/a&gt;&lt;/sup&gt; and in the International &lt;span class="caps"&gt;PHP&lt;/span&gt; magazine &lt;sup class="footnote"&gt;&lt;a href="#fn4"&gt;4&lt;/a&gt;&lt;/sup&gt;. Fabio Cevasco &lt;sup class="footnote"&gt;&lt;a href="#fn5"&gt;5&lt;/a&gt;&lt;/sup&gt; is the man behind these articles. Together with Fabio, we will be writing a book that will be published [&amp;#8230;]&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;After all this time I spent &lt;em&gt;trying desperately not to say a word about it&lt;/em&gt; they came out and heralded it out of nowhere. Sigh&amp;#8230; they ruined the surprise effect! Oh well, it&amp;#8217;s too late now, isn&amp;#8217;t it?&lt;/p&gt;
&lt;p&gt;So yes, when I say that I&amp;#8217;m spending at least 60% of my time (at work and at home) writing I really mean it. The rest? Well, I do have a lovely girlfriend after all!!!&lt;/p&gt;</description>
      <pubDate>Mon, 24 Jul 2006 19:07:00 -0600</pubDate>
      <guid>http://www.h3rald.com/articles/37/</guid>
      <link>http://www.h3rald.com/articles/37/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/37/#comments</comments>
      <category>website</category>
      <category>cakephp</category>
    </item>
    <item>
      <title>The CakePHP Framework: Your First Bite</title>
      <description>&lt;p&gt;According to a recent study, &lt;span class="caps"&gt;PHP&lt;/span&gt; is one of the most popular programming languages in the world. In spite of this, &lt;span class="caps"&gt;PHP&lt;/span&gt; is often criticized for its inconsistent naming conventions, its lack of important features as compared to other languages (like namespaces) and its inherent disorganization. Furthermore, &lt;span class="caps"&gt;PHP&lt;/span&gt; is very easy to learn, and this has often led to the common misconception that most &lt;span class="caps"&gt;PHP&lt;/span&gt; developers are inexperienced and that their code is therefore prone to security vulnerabilities and exploits.&lt;a href="http://www.sitepoint.com/article/application-development-cakephp"&gt;Read the full article&lt;/a&gt; on &lt;a href="http://www.sitepoint.com/"&gt;SitePoint.com&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Fri, 14 Jul 2006 02:03:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/cakephp-first-bite/</guid>
      <link>http://www.h3rald.com/articles/cakephp-first-bite/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/cakephp-first-bite/#comments</comments>
      <category>cakephp</category>
      <category>tutorial</category>
      <category>review</category>
    </item>
    <item>
      <title>Ruby on Rails &amp; CakePHP</title>
      <description>&lt;p&gt;This article is an attempt to port a famous Ruby on Rails tutorial to &lt;span class="caps"&gt;PHP&lt;/span&gt; using an emerging &lt;span class="caps"&gt;PHP&lt;/span&gt; &lt;span class="caps"&gt;MVC&lt;/span&gt; framework, CakePHP. CakePHP was inspired by Rails&amp;#8217; philosophy of Rapid Application Development. It implements a lot of the features and concepts that made Ruby on Rails popular in a very short time. Although Ruby&amp;#8217;s syntax and way of doing things is known to be much more elegant than other programming languages, there is yet hope for &lt;span class="caps"&gt;PHP&lt;/span&gt; to get more organized and effi cient. This tutorial will follow its Rails counterpart step-by-step, covering the essential steps to create a simple, yet fully functional, web application.&lt;br /&gt;
Register on the &lt;a href="http://www.php-mag.net/magphpde/psecom,id,20,archive,2,noeid,20,.html"&gt;International &lt;span class="caps"&gt;PHP&lt;/span&gt; Magazine&lt;/a&gt; to read the full article.&lt;br /&gt;
&lt;img src="/img/thumbs/phpmag0706.gif" alt="" /&gt;&lt;/p&gt;</description>
      <pubDate>Fri, 07 Jul 2006 07:52:28 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/ror-and-cakephp/</guid>
      <link>http://www.h3rald.com/articles/ror-and-cakephp/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/ror-and-cakephp/#comments</comments>
      <category>cakephp</category>
      <category>rails</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>An overview of the CakePHP framework</title>
      <description>&lt;p&gt;&lt;em&gt;&amp;#8220;There are many frameworks available for the &lt;span class="caps"&gt;PHP&lt;/span&gt; programming language nowadays, and especially a lot of &lt;span class="caps"&gt;RAD&lt;/span&gt; (Rapid Application Development) frameworks which aim to make web development faster, less tedious and more organized. CakePHP was one of the first frameworks to port the &lt;span class="caps"&gt;RAD&lt;/span&gt; philosophy &amp;#8211; which became so popular after Ruby on Rails &amp;#8211; to the &lt;span class="caps"&gt;PHP&lt;/span&gt; programming language. CakePHP v1.0 is now one of the most popular and intuitive solutions for &lt;span class="caps"&gt;PHP&lt;/span&gt; programming, let&amp;#8217;s discover why&amp;#8230;&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://hades.phparch.com/ceres/public/article/index.php/art::cakephp::overview"&gt;Read the full article&lt;/a&gt; on &lt;a href="http://hades.phparch.com/artemis/main/"&gt;php|architect article repository&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 30 May 2006 13:50:20 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/cakephp-overview/</guid>
      <link>http://www.h3rald.com/articles/cakephp-overview/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/cakephp-overview/#comments</comments>
      <category>cakephp</category>
      <category>review</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Watch out: CakePHP screencasts</title>
      <description>&lt;p&gt;Tutorials are great, articles are helpful, manuals are essential and the &lt;span class="caps"&gt;API&lt;/span&gt; is your best friend, but there&amp;#8217;s still something missing there&amp;#8230; Unfortunately podcasts are not yet available, but the CakePHP team is proud to announce the creation of two &lt;a href="http://cakephp.org/pages/screencasts"&gt;screencasts&lt;/a&gt; in an effort to help new bakers familiarizing with CakePHP&amp;#8217;s concepts. &lt;br /&gt;
This is old news now, the screencasts section came together with the &lt;a href="http://base--/blog/view/24"&gt;site overhaul&lt;/a&gt; but I only got a chance to take a look at them (one of them only, to be totally honest) recently, and so here&amp;#8217;s a spoil&amp;#8230; erhm, a &lt;em&gt;detailed&lt;/em&gt; description of John Anderson&amp;#8217;s screencast about the &lt;a href="http://manual.cakephp.org/chapter/18"&gt;Blog Tutorial&lt;/a&gt;.&lt;/p&gt;
&lt;p style="float:left;"&gt;&lt;img src="http://base--/img/pictures/CakePHP_1.0.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;There&amp;#8217;s something I&amp;#8217;ll never do: a screencast. Recording every mouse movement, every word or piece of code typed in half an hour? No way! And what happens if I mistype something? People will keep pointing out the fact that I was starting to type &lt;code&gt;&amp;lt;/h2&amp;gt;&lt;/code&gt; to close a &lt;code&gt;&amp;lt;/h1&amp;gt;&lt;/code&gt; tag, or that I waited an eternity like five full seconds before deciding what to do. I guess I&amp;#8217;m quite paranoid&amp;#8230; John did it, and he did it well. Using just bash, vim and Safari he was able to record an excellent 30-minutes screencast featuring the blog tutorial. &lt;br /&gt;
Before people start complaining that the blog tutorial should be completed in fifteen minutes, keep in mind that John&amp;#8217;s screencast is meant to show everything clearly to new users, via a trial and error approach if necessary.&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s what happens in the screencast, nothing new if your read the blog tutorial, but still interesting, especially if you&amp;#8217;re new to Cake. Unfortunately there&amp;#8217;s no audio, but the video talks by itself and John will occasionally write some comments here and there.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;0:01 &amp;#8211; 5:00&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;span class="caps"&gt;SVN&lt;/span&gt; checkout to get the latest CakePHP version&lt;/li&gt;
	&lt;li&gt;make app/tmp writeable&lt;/li&gt;
	&lt;li&gt;execute queries (table posts)&lt;/li&gt;
	&lt;li&gt;insert some test posts&lt;/li&gt;
	&lt;li&gt;create database config file: modify 3 lines of database.php&lt;/li&gt;
	&lt;li&gt;CakePHP is now able to connect to database&lt;/li&gt;
	&lt;li&gt;create app/models/post.php model&lt;/li&gt;
	&lt;li&gt;create posts_controller.php [John uses Vim as preferred &lt;span class="caps"&gt;PHP&lt;/span&gt; editor]&lt;/li&gt;
	&lt;li&gt;try to access /posts/, error: missing method index()&lt;/li&gt;
	&lt;li&gt;create function index() in postscontroller.php able to fetch posts&lt;/li&gt;
	&lt;li&gt;refresh, missing index view&lt;/li&gt;
	&lt;li&gt;create index.thtml displaying the raw posts array&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;5:01 &amp;#8211; 10:00&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;index.thtml: display posts with table and foreach iteration&lt;/li&gt;
	&lt;li&gt;add hyperlink in index.thtml to view posts&lt;/li&gt;
	&lt;li&gt;access /posts/view/1 &amp;#8594; missing method view()&lt;/li&gt;
	&lt;li&gt;add view() method in postscontroller.php&lt;/li&gt;
	&lt;li&gt;create view.thtml to display&lt;/li&gt;
	&lt;li&gt;Raw view post with pre tags and print_r()&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;10:01 &amp;#8211; 15:00&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;display post properly with &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; tags&lt;/li&gt;
	&lt;li&gt;add link in index.thtml to add a post&lt;/li&gt;
	&lt;li&gt;missing method &amp;#8594; add()&lt;/li&gt;
	&lt;li&gt;add add() in controller&lt;/li&gt;
	&lt;li&gt;missing view [trial and error, trial and error&amp;#8230;]&lt;/li&gt;
	&lt;li&gt;create add.thtml, using the Html Helper to create input tags easily&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;15:01 &amp;#8211; 20:00&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;add.thtml (continued)&lt;/li&gt;
	&lt;li&gt;testing add form&lt;/li&gt;
	&lt;li&gt;view added post&lt;/li&gt;
	&lt;li&gt;start adding another (for validation purposes) [stop before submitting]&lt;/li&gt;
	&lt;li&gt;modify post.php model, valid_not_empty for title and body&lt;/li&gt;
	&lt;li&gt;modify view to trigger validation &lt;code&gt;$html-&amp;gt;tagErrorMsg()&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;test: no body, message displayed&lt;/li&gt;
	&lt;li&gt;test: no title, message displayed&lt;/li&gt;
	&lt;li&gt;add another post, everything works&lt;/li&gt;
	&lt;li&gt;[pause: five seconds]&lt;/li&gt;
	&lt;li&gt;back to the controller, create delete() function&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;20:01 &amp;#8211; 25:00&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;delete function (continued)&lt;/li&gt;
	&lt;li&gt;add &amp;#8220;Actions&amp;#8221; table column in index.thtml, with link delete post&lt;/li&gt;
	&lt;li&gt;delete two posts&lt;/li&gt;
	&lt;li&gt;take a breath&lt;/li&gt;
	&lt;li&gt;add link in index.thtml to edit post&lt;/li&gt;
	&lt;li&gt;refresh page, mouse over edit links&amp;#8230;&lt;/li&gt;
	&lt;li&gt;back to controller, add edit function [we learnt abour CakePHP errors alright]&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;25:01 &amp;#8211; 27:38&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;pause, 5 sec [should I write edit.thtml from scratch]&lt;/li&gt;
	&lt;li&gt;copy add.thtml as edit.thtml&lt;/li&gt;
	&lt;li&gt;change just the title and form action&lt;/li&gt;
	&lt;li&gt;[pause: 3 sec]&lt;/li&gt;
	&lt;li&gt;test edit link&lt;/li&gt;
	&lt;li&gt;edit a post&lt;/li&gt;
	&lt;li&gt;move around, switch views&lt;/li&gt;
	&lt;li&gt;edit config/routes.php&lt;/li&gt;
	&lt;li&gt;set default route to posts/index&lt;/li&gt;
	&lt;li&gt;refresh &amp;#8211;  all done!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;#8217;s it. All in a 40MB .mov file. Download it from &lt;a href="http://www.archive.org/download/CakePHP_BlogTutorialJohn/BlogTutorial.mov"&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Sat, 20 May 2006 13:47:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/31/</guid>
      <link>http://www.h3rald.com/articles/31/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/31/#comments</comments>
      <category>cakephp</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>rdBaker: Bake your CakePHP application online</title>
      <description>&lt;p&gt;Right after my &lt;a href="http://base--/blog/view/26"&gt;last blog post&lt;/a&gt; I decided to log on #cakephp on irc.freenode.org as usual, and gwoo pops in and says &amp;#8220;h3raLd, you didn&amp;#8217;t review rdBaker yet!&amp;#8221;&lt;br /&gt;
That&amp;#8217;s right, I didn&amp;#8217;t yet, so I may as well do it today.&lt;/p&gt;
&lt;p&gt;I remember hearing about rdBaker months ago, waaay before CakePHP 1.0, way before the RCs, I remember someone mentioning it on CakePHP user group in right after the bake.php script was created. &lt;em&gt;&amp;#8220;How about having an online baking utility?&amp;#8221;&lt;/em&gt; &amp;#8211; and that&amp;#8217;s precisely what rdBaker is, a more &lt;span class="caps"&gt;PHP&lt;/span&gt;-ish version of bake.php, which runs like any other &lt;span class="caps"&gt;PHP&lt;/span&gt; scripts: in your browser.&lt;/p&gt;
&lt;p&gt;This cute little thing is obviously available for free on &lt;a href="http://cakeforge.org/frs/?group_id=13&amp;amp;release_id=74"&gt;CakeForge&lt;/a&gt; and is part of &lt;a href="http://www.rd11.com"&gt;gwoo&lt;/a&gt; &amp;#8217;s &lt;a href="http://cakeforge.org/projects/rdos/"&gt;rdOpenSource&lt;/a&gt; project which includes various other Cake-powered applications.&lt;br /&gt;
I personally recommend new (and old) bakers to download them and play with them, try to understand how they were coded, because they can really teach you &lt;em&gt;a lot&lt;/em&gt; on how to code a CakePHP application or website properly.&lt;/p&gt;
&lt;p&gt;So anyway, get your copy of rdBaker, unzip it and have a look at the &lt;code&gt;README.txt&lt;/code&gt; file for the installation instructions:&lt;/p&gt;
&lt;quote&gt;
&lt;p&gt;1. Place rdBaker in the root along side /cake_install/app.&lt;br /&gt;
2. chmod /cake_install/rdBaker/tmp to 0777&lt;br /&gt;
3. launch http://localhost/cake_install/rdBaker/&lt;/p&gt;
&lt;/quote&gt;
&lt;p&gt;Not too hard, innit?&lt;/p&gt;
&lt;p&gt;&lt;img src="http://base--/img/pictures/rdbaker.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Good. So you try accessing something like &lt;code&gt;http://localhost/php/test/cakephp/cake_test/rdBaker/&lt;/code&gt; (that&amp;#8217;s on my own local &lt;span class="caps"&gt;WAMP&lt;/span&gt; server) and you&amp;#8217;ll get a nice page asking you to &amp;#8220;supply your ingredients&amp;#8221; via a simple form. &lt;br /&gt;
Unlike its command line cousin, rdBaker doesn&amp;#8217;t require you to fill in &lt;em&gt;all&lt;/em&gt; the fields, but just the full path to the save directory (which is normally already filled in) and of course the name of the model (Post, User, Comment).&lt;br /&gt;
Then you can select the type of output and choose whether you want to generate an empty controller, a scaffolded one or the &lt;em&gt;full&lt;/em&gt; option including all the most common &lt;acronym title="Create, Retrieve, Update, Delete"&gt;&lt;span class="caps"&gt;CRUD&lt;/span&gt;&lt;/acronym&gt; methods.&lt;br /&gt;
Finally &amp;#8211; if you like &amp;#8211; you can enter any association or valitation rules for your model, then press the &lt;em&gt;Bake it!&lt;/em&gt; button and voil&amp;aacute;, in you&amp;#8217;ll find three directories (controllers, models and views) in your save directory containing all the &lt;acronym title="Model View Controller"&gt;&lt;span class="caps"&gt;MVC&lt;/span&gt;&lt;/acronym&gt; entities you need regarding a particular model:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
		rdBaker Result Array
(
    [0] =&amp;gt; notes_controller.php created and written. Look in D:SERVERwwwphptestcakephpcake_testtmpcontrollers
    [1] =&amp;gt; note.php created and written. Look in D:SERVERwwwphptestcakephpcake_testtmpmodels
    [2] =&amp;gt; index.thtml created and written. Look in D:SERVERwwwphptestcakephpcake_testtmpviews/notes
    [3] =&amp;gt; add.thtml created and written. Look in D:SERVERwwwphptestcakephpcake_testtmpviews/notes
    [4] =&amp;gt; edit.thtml created and written. Look in D:SERVERwwwphptestcakephpcake_testtmpviews/notes
    [5] =&amp;gt; view.thtml created and written. Look in D:SERVERwwwphptestcakephpcake_testtmpviews/notes
)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But there&amp;#8217;s more! By checking the appropriate checkbox, you can get all the stuff packed in a zip file!&lt;/p&gt;
&lt;p&gt;Not bad at all, and fast as well.&lt;/p&gt;
&lt;p&gt;Now the bad things&amp;#8230;&lt;br /&gt;
The script works fine, but there&amp;#8217;s something which could be improved, perhaps:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;If you choose to put everything in a zip file, the file will be named &amp;#8220;baked_by_rdBaker.zip&amp;#8221; &amp;#8211; not a big deal, but maybe it could be personalized according to the model name entered.&lt;/li&gt;
	&lt;li&gt;Regardless you want to add validation rules to your model or not, you&amp;#8217;ll &lt;em&gt;always&lt;/em&gt; find some validation rules for a &lt;em&gt;title&lt;/em&gt; and &lt;em&gt;body&lt;/em&gt; field. I checked and they are hardcoded in the template file (rdBaker/views/helpers/templates/full/model.txt):&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;
  var $validate = array(
		'title'=&amp;gt;VALID_NOT_EMPTY,
		'body'=&amp;gt;VALID_NOT_EMPTY);
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
	&lt;li&gt;In the baked index.thtml view, there will always be a column named &amp;#8220;Title&amp;#8221;. This, again, is hardcoded in the template.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Other than these things, everything seems to work fine. A really nice script!&lt;/p&gt;</description>
      <pubDate>Mon, 08 May 2006 03:50:00 -0600</pubDate>
      <guid>http://www.h3rald.com/articles/27/</guid>
      <link>http://www.h3rald.com/articles/27/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/27/#comments</comments>
      <category>cakephp</category>
    </item>
    <item>
      <title>bake.php - Easy baking for lazy folks</title>
      <description>&lt;p&gt;When I first tried Ruby on Rails I was literally amazed by the &lt;em&gt;generator&lt;/em&gt; script. Yes, I was young and inexperienced then (six/seven months ago), but you must admit that getting a controller, a model, all the basic views generated automatically by&lt;/p&gt;
&lt;p&gt;&lt;code&gt;rails script/generator scaffold Posts&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;is not a bad thing. Especially if the same script allows you to create model, views and controller separately and other things. &lt;a href="http://www.symfony-project.com/"&gt;Symfony&lt;/a&gt; and &lt;span class="caps"&gt;PHP&lt;/span&gt; on Trax already tried to port this functionalities, with mixed results. What about Cake? Oh well, yes, we do have something like that&amp;#8230; something rather different, but still something: the &lt;code&gt;bake.php&lt;/code&gt; script.&lt;br /&gt;
This cute little thing is located in the &lt;code&gt;cake/scripts/&lt;/code&gt; folder and can be used &amp;#8211; hear, hear &amp;#8211; from command line. You can run Ruby and Perl scripts, so yes, you can actually run &lt;span class="caps"&gt;PHP&lt;/span&gt; from command line, although it&amp;#8217;s not its primary purpose.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://base--/img/pictures/bake.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Cool then, let&amp;#8217;s open a *nix shell, Windows command prompt, etc. etc., go into the &lt;code&gt;cake/scripts/&lt;/code&gt; folder and run:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;php bake.php&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Assuming that the php executable is in your &lt;em&gt;&lt;span class="caps"&gt;PATH&lt;/span&gt;&lt;/em&gt; environment variable &amp;#8211; if not, either you add it or you&amp;#8217;ll have to type something like:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;D:SERVERphpphp.exe bake.php&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;depending on where your php executable is. You&amp;#8217;ll be be greeted by a &amp;#8220;&lt;span class="caps"&gt;CAKEPHP&lt;/span&gt; &lt;span class="caps"&gt;BAKE&lt;/span&gt;&amp;#8221; text, and then you&amp;#8217;ll be asked a few questions. One thing to realize before proceeding any further: bake.php is &lt;em&gt;not&lt;/em&gt; a generator, not in the traditional &amp;#8220;Rails&amp;#8221; sense, anyway. It&amp;#8217;s rather a handy but more verbose dialogue-based configuration script &amp;#8211; which will also generate &lt;em&gt;something&lt;/em&gt; eventually if you provide all the necessary details.&lt;br /&gt;
A different approach, which may be good or bad according to your taste: personally I think we should also have something faster to use, like a Rails generator, and I opened a &lt;a href="https://trac.cakephp.org/ticket/768"&gt;ticket&lt;/a&gt; about it, but let&amp;#8217;s see what bake.php can do, for now.&lt;/p&gt;
&lt;p&gt;The answer is&amp;#8230; nearly anything. It annoying enough to please, but if you follow its directions it can do a prettu decent job in the end, it&amp;#8217;s far from being sentient, but let&amp;#8217;s say it&amp;#8217;s smart enough for a script. First of all if you try it out on a fresh Cake install it will notice that you haven&amp;#8217;t configured your database yet, so it will ask for a hostname, username, password, database name etc. etc. and generate your &lt;code&gt;app/config/database.php&lt;/code&gt; for you, not a bad start.&lt;/p&gt;
&lt;p&gt;Once that&amp;#8217;s done &amp;#8211; and it won&amp;#8217;t go on unless you configure a (MySQL only?) database &amp;#8211; you can proceed with the rest. You can start creating either a controller, model or view; I tried a &lt;code&gt;Posts&lt;/code&gt; controller, for example. The script then asks quite a few questions:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;The controller&amp;#8217;s name&lt;/li&gt;
	&lt;li&gt;Whether it will use other models besides posts&lt;/li&gt;
	&lt;li&gt;Whether you want to include any helper&lt;/li&gt;
	&lt;li&gt;Whether you want to include any component&lt;/li&gt;
	&lt;li&gt;Whether you want to generate the base &lt;span class="caps"&gt;CRUD&lt;/span&gt; methods&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then finally it generates the damn thing. The result is good enough:&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;
&amp;lt;?php
class PostsController extends AppController
{
	//var $scaffold;
	var $name       = 'Posts';&lt;/p&gt;
&lt;p&gt;function index()&lt;br /&gt;
	{&lt;br /&gt;
		$this&amp;#8594;set(&amp;#8216;data&amp;#8217;, $this&amp;#8594;Post&amp;#8594;findAll());&lt;br /&gt;
	}&lt;/p&gt;
&lt;p&gt;function add()&lt;br /&gt;
	{&lt;br /&gt;
		if(empty($this&amp;#8594;params[&amp;#8216;data&amp;#8217;]))&lt;br /&gt;
		{&lt;br /&gt;
			$this&amp;#8594;render();&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			if($this&amp;#8594;Post&amp;#8594;save($this&amp;#8594;params[&amp;#8216;data&amp;#8217;]))&lt;br /&gt;
			{&lt;br /&gt;
				$this&amp;#8594;flash(&amp;#8216;Post saved.&amp;#8217;, &amp;#8216;/posts/index&amp;#8217;);&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				$this&amp;#8594;render();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;/p&gt;
&lt;p&gt;function edit($id)&lt;br /&gt;
	{&lt;br /&gt;
		if(empty($this&amp;#8594;params[&amp;#8216;data&amp;#8217;]))&lt;br /&gt;
		{&lt;br /&gt;
			$this&amp;#8594;set(&amp;#8216;data&amp;#8217;, $this&amp;#8594;Post&amp;#8594;find(&amp;#8216;Post.id = &amp;#8217; . $id));&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			if($this&amp;#8594;Post&amp;#8594;save($this&amp;#8594;params[&amp;#8217;data&amp;#8217;]))&lt;br /&gt;
			{&lt;br /&gt;
				$this&amp;#8594;flash(&amp;#8216;Post saved.&amp;#8217;, &amp;#8216;/posts/index&amp;#8217;);&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				$this&amp;#8594;set(&amp;#8216;data&amp;#8217;, $this&amp;#8594;params[&amp;#8216;data&amp;#8217;]);&lt;br /&gt;
				$this&amp;#8594;validateErrors($this&amp;#8594;Post);&lt;br /&gt;
				$this&amp;#8594;render();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;/p&gt;
&lt;p&gt;function view($id)&lt;br /&gt;
	{&lt;br /&gt;
		$this&amp;#8594;set(&amp;#8216;data&amp;#8217;, $this&amp;#8594;Post&amp;#8594;find(&amp;#8217;Post.id = &amp;#8217; . $id));&lt;br /&gt;
	}&lt;/p&gt;
&lt;p&gt;function delete($id)&lt;br /&gt;
	{&lt;br /&gt;
		$this&amp;#8594;Post&amp;#8594;del($id);&lt;br /&gt;
		$this&amp;#8594;redirect(&amp;#8216;/posts/index&amp;#8217;);&lt;br /&gt;
	}&lt;/p&gt;
&lt;p&gt;function postList()&lt;br /&gt;
	{&lt;br /&gt;
		$vars = $this&amp;#8594;Post&amp;#8594;findAll();&lt;br /&gt;
		foreach($vars as $var)&lt;br /&gt;
		{&lt;br /&gt;
			$list[$var[&amp;#8216;Post&amp;#8217;][&amp;#8216;id&amp;#8217;]] = $var[&amp;#8216;Post&amp;#8217;][&amp;#8216;name&amp;#8217;];&lt;br /&gt;
		}&lt;/p&gt;
&lt;p&gt;return $list;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s more or less the same with models and views: it will still ask a lot of questions and in the end generate the thing. &lt;br /&gt;
This behaviour is more advanced than a standard generator, you can include helpers and components already, if you want, but do you &lt;em&gt;really&lt;/em&gt; want that? For models it even asks if you want to include particular associations and validation rules! Personally, I&amp;#8217;d rather a generator script which generates something &lt;em&gt;immediately&lt;/em&gt; and accepts maybe some parameters to further customization, like:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;php bake.php scaffold Posts&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;php bake.php controller Posts&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;php bake.php model Posts&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;php bake.php model Posts&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;php bake.php controller Posts helper +Html -Time,Javascript&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;php bake.php model Posts assoc +hasMany comments,tags&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Bah&amp;#8230; just some random thoughts. How about custom-made generators (&lt;a href="http://wiki.rubyonrails.org/rails/pages/AvailableGenerators"&gt;Rails-inspired&lt;/a&gt;)?&lt;/p&gt;</description>
      <pubDate>Sat, 06 May 2006 07:43:00 -0600</pubDate>
      <guid>http://www.h3rald.com/articles/26/</guid>
      <link>http://www.h3rald.com/articles/26/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/26/#comments</comments>
      <category>cakephp</category>
      <category>frameworks</category>
    </item>
    <item>
      <title>Rails-inspired PHP frameworks</title>
      <description>&lt;p&gt;There are various articles online examining many &lt;span class="caps"&gt;PHP&lt;/span&gt; frameworks, providing short reviews or comparative charts, but I could not find yet an article  examining the so called &lt;em&gt;&amp;#8220;Rails-inspired frameworks&amp;#8221;&lt;/em&gt; anywhere on the web, so I decided to write my own&amp;#8230;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class="caps"&gt;IMPORTANT&lt;/span&gt; &lt;span class="caps"&gt;UPDATE&lt;/span&gt;:&lt;/strong&gt; I do no longer recommend the CakePHP framework anymore due to the &lt;a href="http://www.h3rald.com/blog/42"&gt;unprofessionalism of some member of its development team&lt;/a&gt;. My site is now powered by Ruby on Rails and I totally lost interest in &lt;span class="caps"&gt;PHP&lt;/span&gt; and any &lt;span class="caps"&gt;PHP&lt;/span&gt; framework. If you are looking for a decent web framework, try &lt;a href="http://www.rubyonrails.org"&gt;Ruby on Rails&lt;/a&gt; (for Ruby), &lt;a href="http://www.djangoproject.com/"&gt;Django&lt;/a&gt; (for Python) or &lt;a href="http://catalyst.perl.org/"&gt;Catalyst&lt;/a&gt; (for Perl).&lt;br /&gt;
I&amp;#8217;m talking about those &lt;span class="caps"&gt;PHP&lt;/span&gt; frameworks who give at least part of their success to Ruby on Rails&lt;sup class="footnote"&gt;&lt;a href="#fn2"&gt;2&lt;/a&gt;&lt;/sup&gt;, but don&amp;#8217;t call them &lt;em&gt;clones&lt;/em&gt; or &lt;em&gt;ports&lt;/em&gt; as some of their creators may get offended.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style="float:left;"&gt;&lt;img src="/img/pictures/rails.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Since Rails shocked the world with an easy-to-use, powerful and semi-sentient web development framework, web development is not the same anymore: everything must be done efficiently, quickly and you &lt;em&gt;have&lt;/em&gt; to produce a Web 2.0 compliant public beta after X days/weeks/months or your work is simply not useful to anybody. Try doing that with the traditional &lt;span class="caps"&gt;PHP&lt;/span&gt; spaghetti code: you can&amp;#8217;t, it&amp;#8217;s too much, it will be too tangled up and in the end you&amp;#8217;ll lose your mind trying to find that &lt;em&gt;small insignificant bug&lt;/em&gt; which makes your web application completely useless.&lt;/p&gt;
&lt;p&gt;Yes, you could use Rails, but maybe you don&amp;#8217;t know or don&amp;#8217;t want to learn Ruby, your host doesn&amp;#8217;t support it, your boss loves &lt;span class="caps"&gt;PHP&lt;/span&gt; etc. etc. If you&amp;#8217;re in this situation or you simply would like to know what&amp;#8217;s going on at the &lt;span class="caps"&gt;PHP&lt;/span&gt; front of the Rails Clone War, you should keep reading this article.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;d like to introduce &amp;#8211; briefly &amp;#8211; six Rails-inspired &lt;span class="caps"&gt;PHP&lt;/span&gt; frameworks and compare them with each other, to point out their features, their pros and cons.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; I&amp;#8217;m a CakePHP&lt;sup class="footnote"&gt;&lt;a href="#fn3"&gt;3&lt;/a&gt;&lt;/sup&gt; fan, this site has been built with CakePHP and I even wrote something&lt;sup class="footnote"&gt;&lt;a href="#fn4"&gt;4&lt;/a&gt;&lt;/sup&gt; about it in the past. This makes me inevitably partial and more familiar with this particular framework, but I&amp;#8217;ll try my very best to provide a relatively objective analysis. Obviously frameworks which are not based on the &lt;span class="caps"&gt;MVC&lt;/span&gt; architechture and that weren&amp;#8217;t inspired by Ruby on Rails have not been included, so forget things like &lt;span class="caps"&gt;PRADO&lt;/span&gt;, Qcodo, eZComponents, or even Mojavi: it&amp;#8217;s not that they are &amp;#8220;bad&amp;#8221;, they&amp;#8217;ve just been left out because they are not pertinent to this article&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;CakePHP&lt;/h3&gt;
&lt;p style="float:right;"&gt;&lt;img src="/img/pictures/CakePHP_1.0.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="http://www.cakephp.org/"&gt;www.cakephp.org&lt;/a&gt;&lt;br /&gt;
&lt;strong&gt;&lt;span class="caps"&gt;PHP&lt;/span&gt; version:&lt;/strong&gt; PHP4 and PHP5&lt;br /&gt;
&lt;strong&gt;License:&lt;/strong&gt; &lt;span class="caps"&gt;MIT&lt;/span&gt;&lt;sup class="footnote"&gt;&lt;a href="#fn5"&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;br /&gt;
&lt;strong&gt;Download size (.tar.gz):&lt;/strong&gt; 184KB&lt;br /&gt;
&lt;strong&gt;Supported Databases:&lt;/strong&gt; MySQL, PostgreSQL, SQlite, MS &lt;span class="caps"&gt;SQL&lt;/span&gt; + any other supported by ADOdb or &lt;span class="caps"&gt;PEAR&lt;/span&gt;::DB database abstraction layers&lt;br /&gt;
&lt;strong&gt;Beginner&amp;#8217;s Tutorial&lt;/strong&gt;: &lt;a href="http://wiki.cakephp.org/tutorials:blog_tutorial_-_1"&gt;Blog Tutorial&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Official Description:&lt;/strong&gt;&lt;br /&gt;
&lt;em&gt;&amp;#8220;Cake is a rapid development framework for &lt;span class="caps"&gt;PHP&lt;/span&gt; which uses commonly known design patterns like ActiveRecord, Association Data Mapping, Front Controller and &lt;span class="caps"&gt;MVC&lt;/span&gt;. Our primary goal is to provide a structured framework that enables &lt;span class="caps"&gt;PHP&lt;/span&gt; users at all levels to rapidly develop robust web applications, without any loss to flexibility.&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PROs:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Lightweight, not bloated, containing only essential code&lt;/li&gt;
	&lt;li&gt;Runs both on PHP4 and PHP5&lt;/li&gt;
	&lt;li&gt;No configuration needed &amp;#8211; except for a stupidly short database configuration file and a few constants which &lt;em&gt;can&lt;/em&gt; be modified. You can literally start baking in less than five minutes&lt;/li&gt;
	&lt;li&gt;Extended table association support, allowing the creation of complex database architechtures&lt;/li&gt;
	&lt;li&gt;Extremely logical and functional directory structure: better than Rails, if you ask me.&lt;/li&gt;
	&lt;li&gt;Enhanced &lt;span class="caps"&gt;AJAX&lt;/span&gt; support through the &lt;span class="caps"&gt;AJAX&lt;/span&gt; and Javascript view helpers&lt;/li&gt;
	&lt;li&gt;useful &amp;#8220;bake&amp;#8221; command line script to generate parts of the  code automatically&lt;/li&gt;
	&lt;li&gt;Very active community and plenty of &lt;em&gt;satellite sites&lt;/em&gt;&lt;/li&gt;
	&lt;li&gt;Suitable for every kind of website, from the small personal site to the advanced e-business application.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;CONs:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;No &amp;#8220;official&amp;#8221; internationalization support for now, but it will be included in the next milestone.&lt;/li&gt;
	&lt;li&gt;It does not take fully advantage of PHP5 features&lt;/li&gt;
	&lt;li&gt;Official documentation still needs some some improvement, although now it seems pretty complete and exhaustive.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Comments:&lt;/strong&gt;&lt;br /&gt;
CakePHP is my personal favorite: easy to learn, easy to use,multi-purpose and not bloated. Cake&amp;#8217;s philosophy is not to include unnecessary code in the framework unless it&amp;#8217;s absolutely necessary for the framework itself, as a result, 3rd-party libraries are not included in the official releases, but may be seamlessly integrated with the framework &lt;em&gt;if developers need them&lt;/em&gt;. &lt;br /&gt;
Cake&amp;#8217;s success is partly determined &amp;#8211; at least initially &amp;#8211; by the fact that it can run fine with no limitations on PHP4, while other similar frameworks don&amp;#8217;t. Although this may still be one of its most obvious strengths, it must be said that Cake seems to go in the right direction, taking only the best from Rails, without forcing developers into complex and pointless adaptations, and evolving into a great framework created &lt;em&gt;in &lt;span class="caps"&gt;PHP&lt;/span&gt;, for &lt;span class="caps"&gt;PHP&lt;/span&gt;&lt;/em&gt;.&lt;/p&gt;
&lt;h3&gt;Symfony&lt;/h3&gt;
&lt;p style="float:right;"&gt;&lt;img src="/img/pictures/symfony.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="http://www.symfony-project.com/"&gt;www.synfony.project.com&lt;/a&gt;&lt;br /&gt;
&lt;strong&gt;&lt;span class="caps"&gt;PHP&lt;/span&gt; version:&lt;/strong&gt; PHP5&lt;br /&gt;
&lt;strong&gt;License:&lt;/strong&gt; Symfony&lt;sup class="footnote"&gt;&lt;a href="#fn6"&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;br /&gt;
&lt;strong&gt;Download size (.tgz):&lt;/strong&gt; 1255KB&lt;br /&gt;
&lt;strong&gt;Supported Databases:&lt;/strong&gt; MySQL, PostgreSQL, SQLite, Oracle, MS &lt;span class="caps"&gt;SQL&lt;/span&gt; + any other supported by Creole database abstraction layer&lt;br /&gt;
&lt;strong&gt;Beginner&amp;#8217;s Tutorial&lt;/strong&gt;: &lt;a href="http://www.symfony-project.com/tutorial/my_first_project.html"&gt;My first project&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Official Description:&lt;/strong&gt;&lt;br /&gt;
&lt;em&gt;&amp;#8220;Based on the best practices of web development, thoroughly tried on several active websites, symfony aims to speed up the creation and maintenance of web applications, and to replace the repetitive coding tasks by power, control and pleasure. [&amp;#8230;]&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Symfony is an object-oriented PHP5 framework based on the &lt;span class="caps"&gt;MVC&lt;/span&gt; model. Symfony allows for the separation of business rules, server logic and presentation views of a web application. It also contains numerous tools and classes aimed at shortening the development time of a complex web application.&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PROs:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Fully featured framework, includes everything you might ever need (see CONs, below)&lt;/li&gt;
	&lt;li&gt;Full native internationalization support&lt;/li&gt;
	&lt;li&gt;Truly excellent documentation, tutorials, wiki, book, screencasts, &lt;span class="caps"&gt;API&lt;/span&gt;, real-world examples, etc. etc.&lt;/li&gt;
	&lt;li&gt;Code generators&lt;/li&gt;
	&lt;li&gt;Various &amp;#8220;pre-built&amp;#8221; modules/libraries for the most common tasks&lt;/li&gt;
	&lt;li&gt;It was not inspired only by Rails, but borrows concepts and practices from various other frameworks&lt;/li&gt;
	&lt;li&gt;Good community support&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;CONs:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Seems too big compared to the others, too many &amp;#8220;extras&amp;#8221; which may not be useful to &lt;em&gt;all&lt;/em&gt; developers&lt;/li&gt;
	&lt;li&gt;PHP5 only&lt;/li&gt;
	&lt;li&gt;Confusing and disorganized directory structure&lt;/li&gt;
	&lt;li&gt;Uses too many configuration files, not suitable for &lt;em&gt;simple&lt;/em&gt; projects&lt;/li&gt;
	&lt;li&gt;Steep learning curve&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Comments:&lt;/strong&gt;&lt;br /&gt;
Symfony is really an interesting framework: it&amp;#8217;s perhaps the most &lt;em&gt;complete&lt;/em&gt; in terms for features and documentation. The only problem I have with it is that it just seems too complex and rather difficult to learn if compared to the others, which can do &lt;em&gt;almost&lt;/em&gt; the same things (or will soon be able to) in a &lt;em&gt;&lt;span class="caps"&gt;MUCH&lt;/span&gt;&lt;/em&gt; simpler way. A nice blend of &lt;span class="caps"&gt;MVC&lt;/span&gt;, pre-built components, command line generators and &lt;span class="caps"&gt;YAML&lt;/span&gt;/Propel configuration files, but perhaps a bit &lt;em&gt;disorganized&lt;/em&gt; in its internal structure, unlike its wonderful documentation and support section.&lt;/p&gt;
&lt;h3&gt;&lt;span class="caps"&gt;PHP&lt;/span&gt; on Trax&lt;/h3&gt;
&lt;p style="float:right;"&gt;&lt;img src="/img/pictures/phpontrax.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="http://www.phpontrax.com/"&gt;www.phpontrax.com&lt;/a&gt;&lt;br /&gt;
&lt;strong&gt;&lt;span class="caps"&gt;PHP&lt;/span&gt; version:&lt;/strong&gt; PHP5&lt;br /&gt;
&lt;strong&gt;License:&lt;/strong&gt; &lt;span class="caps"&gt;MIT&lt;/span&gt;&lt;br /&gt;
&lt;strong&gt;Download size (.tgz):&lt;/strong&gt; 843KB&lt;br /&gt;
&lt;strong&gt;Supported Databases:&lt;/strong&gt; Any database supported by &lt;span class="caps"&gt;PEAR&lt;/span&gt;::DB&lt;br /&gt;
&lt;strong&gt;Beginner&amp;#8217;s Tutorial&lt;/strong&gt;: &lt;a href="http://svn.phpontrax.com/wiki/HowToCreateATraxApplication"&gt;How to create a Trax application&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Official Description:&lt;/strong&gt;&lt;br /&gt;
&lt;em&gt;&amp;#8220;Php On Trax (formerly Php On Rails) is a web-application and persistance framework that is based on Ruby on Rails and includes everything needed to create database-backed web-applications according to the Model-View-Control pattern of separation.&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PROs:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Simple, logical, essential: a true RoR port to PHP5&lt;/li&gt;
	&lt;li&gt;Code generators, like Rails&lt;/li&gt;
	&lt;li&gt;Zero configuration (like Rails and Cake&lt;/li&gt;
	&lt;li&gt;Easy and logical directory structure (the same as Rails)&lt;/li&gt;
	&lt;li&gt;Supports table associations, but more in a way which is more similar to Ruby on Rails than Cake.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;CONs:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Lack of documentation compared to the others&lt;/li&gt;
	&lt;li&gt;Trying to port Ruby on Rails to &lt;span class="caps"&gt;PHP&lt;/span&gt;, ignoring why RoR was not built in &lt;span class="caps"&gt;PHP&lt;/span&gt; in the first place&lt;sup class="footnote"&gt;&lt;a href="#fn7"&gt;7&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
	&lt;li&gt;No internationalization or other advanced functionalities&lt;/li&gt;
	&lt;li&gt;PHP5 only&lt;/li&gt;
	&lt;li&gt;Small community&lt;/li&gt;
	&lt;li&gt;&lt;span class="caps"&gt;DBO&lt;/span&gt; class based only on &lt;span class="caps"&gt;PEAR&lt;/span&gt;::DB&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Comments:&lt;/strong&gt;&lt;br /&gt;
In my opinion this project aims too much to be a Rails-clone to acquire a proper consensus. Trying to port something to another language is not good, especially in the case of Rails and Ruby. This framework looks somehow like an old version of CakePHP, which evolved slightly but always remained anchored to its beliefs of building a Rails port for &lt;span class="caps"&gt;PHP&lt;/span&gt; (even in the name!). Some may say that this is a lost battle since the beginning &amp;#8211; or better, since before it started &amp;#8211; but others found that &lt;span class="caps"&gt;PHP&lt;/span&gt; on Trax can be the easiest way to switch from Ruby on Rails to a &lt;span class="caps"&gt;PHP&lt;/span&gt; equivalent. Who is going to do that? Well, Ruby programmers &lt;em&gt;forced&lt;/em&gt; to develop in &lt;span class="caps"&gt;PHP&lt;/span&gt;, maybe. Not too good, but not too bad either.&lt;/p&gt;
&lt;h3&gt;Code Igniter&lt;/h3&gt;
&lt;p style="float:right;"&gt;&lt;img src="/img/pictures/codeigniter.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="http://www.codeigniter.com/"&gt;www.codeigniter.org&lt;/a&gt;&lt;br /&gt;
&lt;strong&gt;&lt;span class="caps"&gt;PHP&lt;/span&gt; version:&lt;/strong&gt; PHP4 and PHP5&lt;br /&gt;
&lt;strong&gt;License:&lt;/strong&gt; CodeIgniter&lt;sup class="footnote"&gt;&lt;a href="#fn8"&gt;8&lt;/a&gt;&lt;/sup&gt;&lt;br /&gt;
&lt;strong&gt;Download size (.zip):&lt;/strong&gt; 609KB&lt;br /&gt;
&lt;strong&gt;Supported Databases:&lt;/strong&gt; MySQL, PostgreSQL, SQLite, MySQLi, MS &lt;span class="caps"&gt;SQL&lt;/span&gt; + &lt;span class="caps"&gt;ODBC&lt;/span&gt;&lt;br /&gt;
&lt;strong&gt;Beginner&amp;#8217;s Tutorial&lt;/strong&gt;: &lt;a href="http://www.codeigniter.com/videos/ci_intro.mov"&gt;Hello World! Introduction to Code Igniter&lt;/a&gt; [video]&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Official Description:&lt;/strong&gt;&lt;br /&gt;
&lt;em&gt;&amp;#8220;Code Igniter is an Open Source Web Application Framework that makes writing kick-ass &lt;span class="caps"&gt;PHP&lt;/span&gt; programs simple as apple pie. [&amp;#8230;] Designed to enable, not overwhelm, Code Igniter is a powerful &lt;span class="caps"&gt;PHP&lt;/span&gt; framework with a very small footprint, built for &lt;span class="caps"&gt;PHP&lt;/span&gt; coders who need a simple and elegant toolkit to create full-featured web applications.&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;If you&amp;#8217;re a developer who lives in the real world of shared hosting accounts and clients with deadlines, and if you&amp;#8217;re tired of ponderously large and thoroughly undocumented frameworks that require rocket science to understand, Code Igniter might just be the right tool for you.&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PROs:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Good and organized documentation&lt;/li&gt;
	&lt;li&gt;Zero configuration (like Rails and Cake)&lt;/li&gt;
	&lt;li&gt;Includes various classes and libraries for common tasks&lt;/li&gt;
	&lt;li&gt;Compatible with PHP4 and PHP5&lt;/li&gt;
	&lt;li&gt;Medium-sized community&lt;/li&gt;
	&lt;li&gt;Intuitive directory structure&lt;/li&gt;
	&lt;li&gt;Ships with the full user guide included in separate &lt;span class="caps"&gt;HTML&lt;/span&gt; files&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;CONs:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;No full (&amp;#8220;written&amp;#8221;) tutorials except the videos!&lt;/li&gt;
	&lt;li&gt;Relatively new to the scene, but growing&lt;/li&gt;
	&lt;li&gt;Does not seem to support table associations.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Comments:&lt;/strong&gt;&lt;br /&gt;
People on the Net seem to be rather enthusiastic about this framework: where there&amp;#8217;s a thread about the &lt;em&gt;big ones&lt;/em&gt; (Cake and Symfony), there&amp;#8217;s always, someone who pops in suggesting to try out Code Igniter. I personally think this can be a true bless for small/medium sized projects, however, I&amp;#8217;d opt for CakePHP or Symfony for a large scale application: something is missing, e.g., most notably, table associations.&lt;/p&gt;
&lt;h3&gt;Biscuit&lt;/h3&gt;
&lt;p style="float:right;"&gt;&lt;img src="/img/pictures/biscuit.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="http://biscuitproject.tigris.org/"&gt;biscuitproject.tigris.org&lt;/a&gt;&lt;br /&gt;
&lt;strong&gt;&lt;span class="caps"&gt;PHP&lt;/span&gt; version:&lt;/strong&gt; PHP4 and PHP5&lt;br /&gt;
&lt;strong&gt;License:&lt;/strong&gt; &lt;span class="caps"&gt;MIT&lt;/span&gt;&lt;sup class="footnote"&gt;&lt;a href="#fn5"&gt;5&lt;/a&gt;&lt;/sup&gt;  &lt;br /&gt;
&lt;strong&gt;Download size (.zip):&lt;/strong&gt; 240KB&lt;br /&gt;
&lt;strong&gt;Supported Databases:&lt;/strong&gt; Any database supported by &lt;span class="caps"&gt;PEAR&lt;/span&gt;::DB&lt;br /&gt;
&lt;strong&gt;Beginner&amp;#8217;s Tutorial&lt;/strong&gt;: &lt;a href="http://bennolan.com/biscuit/tutorial.html"&gt;Creating a simple application using the Biscuit &lt;span class="caps"&gt;MVC&lt;/span&gt; framework&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Official Description:&lt;/strong&gt;&lt;br /&gt;
&lt;em&gt;&amp;#8220;The mission of this project is to port Ruby on Rails to PHP5 (minus the Ruby part ;-)&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PROs:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Zero configuration, easy to deploy&lt;/li&gt;
	&lt;li&gt;Runs both on PHP4 and PHP5&lt;/li&gt;
	&lt;li&gt;Simple to learn&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;CONs:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Still under development and incomplete&lt;/li&gt;
	&lt;li&gt;Offers a limited subset of the features and functionalities offered by competitors: no internationalization, no table associations, no scaffolding&amp;#8230;&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;&amp;#8220;Documentation coming soon&amp;#8221;&lt;/em&gt;&lt;/li&gt;
	&lt;li&gt;Almost non-existent community&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Comments:&lt;/strong&gt;&lt;br /&gt;
This project started as an attempt to create something simpler than CakePHP and more similar to Rails. I&amp;#8217;m not sure whether the project is still active or not, since the last &amp;#8220;release&amp;#8221; on the former&amp;#8217;s developer site is dated August 2005. Still in early stage &amp;#8211; or dead.&lt;/p&gt;
&lt;h3&gt;Pipeline&lt;/h3&gt;
&lt;p style="float:right;"&gt;&lt;img src="/img/pictures/livepipe.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="http://livepipe.net/pipeline/"&gt;livepipe.net/pipeline/&lt;/a&gt;&lt;br /&gt;
&lt;strong&gt;&lt;span class="caps"&gt;PHP&lt;/span&gt; version:&lt;/strong&gt; PHP5&lt;br /&gt;
&lt;strong&gt;License:&lt;/strong&gt; Pipeline&lt;sup class="footnote"&gt;&lt;a href="#fn9"&gt;9&lt;/a&gt;&lt;/sup&gt;&lt;br /&gt;
&lt;strong&gt;Download size (.zip):&lt;/strong&gt; 288KB&lt;br /&gt;
&lt;strong&gt;Supported Databases:&lt;/strong&gt; SQLite&lt;br /&gt;
&lt;strong&gt;Beginner&amp;#8217;s Tutorial&lt;/strong&gt;: none&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PROs:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Simple directory structure&lt;/li&gt;
	&lt;li&gt;Suitable for small projects&lt;/li&gt;
	&lt;li&gt;Comes with various ready-made components&lt;/li&gt;
	&lt;li&gt;Supports table relationships&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;CONs:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;PHP5-only&lt;/li&gt;
	&lt;li&gt;Too restrictive: only SQLite supported, &lt;em&gt;kindly suggests&lt;/em&gt; developers to use its built-in features only&lt;/li&gt;
	&lt;li&gt;No documentation or tutorials, just the &lt;span class="caps"&gt;API&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;Not suitable for large projects&lt;/li&gt;
	&lt;li&gt;Almost non-existent community&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Comments:&lt;/strong&gt;&lt;br /&gt;
This project mainly borrowed the &lt;span class="caps"&gt;MVC&lt;/span&gt; architecture and some basic concepts from Rails, creating a simple PHP5 framework with personal/small websites in mind: it offers various built-in components which can be handy to most of us, supports &lt;em&gt;only&lt;/em&gt; SQLite, and basically tells developers what to do. In my opinion it&amp;#8217;s not flexible enough to be compared to the others, and it&amp;#8217;s simply not suitable for anything other than small websites.&lt;/p&gt;
&lt;h3&gt;Conclusions&lt;/h3&gt;
&lt;p&gt;My favorite framework still remains CakePHP, it&amp;#8217;s simple and yet powerful, easy to learn and use, mature, well supported and continuously improving. Symfony &amp;#8211; at the moment &amp;#8211; seems to be the one with most features and the best documentation, and it is an excellent and well supported project. The only problem I have with it is the scary amount of configuration files necessary to create an application: CakePHP doesn&amp;#8217;t need any and can be used for (almost?) equally complex projects.&lt;br /&gt;
Although I didn&amp;#8217;t have a chance to try them out, &lt;span class="caps"&gt;PHP&lt;/span&gt; on Trax is certainly the most faithful port of Ruby on Rails to &lt;span class="caps"&gt;PHP&lt;/span&gt;, but it lacks some of the features CakePHP and Symfony offer. Code Igniter may not be as advanced as the others, but its community seems to grow and its simplicity may appeal more users in the future&amp;#8230;&lt;/p&gt;
&lt;p&gt;At any rate, developers should &lt;em&gt;always&lt;/em&gt; choose the best framework for their needs: I tried to write a quick comparative analysis of these six Rails&amp;#8217; &amp;#8220;&lt;span class="caps"&gt;PHP&lt;/span&gt; children&amp;#8221;, now it&amp;#8217;s &lt;em&gt;your&lt;/em&gt; turn, try out some of them, if you choose wisely you won&amp;#8217;t be disappointed.&lt;/p&gt;
&lt;h3&gt;Notes&lt;/h3&gt;
&lt;p class="footnote" id="fn1"&gt;&lt;sup&gt;1&lt;/sup&gt; They are all distributed according to various Open Source licenses.&lt;/p&gt;
&lt;p class="footnote" id="fn2"&gt;&lt;sup&gt;2&lt;/sup&gt; &lt;a href="http://www.rubyonrails.org"&gt;Ruby on Rails&lt;/a&gt; &amp;#8211; Ruby framework for web development&lt;/p&gt;
&lt;p class="footnote" id="fn3"&gt;&lt;sup&gt;3&lt;/sup&gt; &lt;a href="http://www.cakephp.org"&gt;CakePHP&lt;/a&gt; &amp;#8211; Rapid [&lt;span class="caps"&gt;PHP&lt;/span&gt;] Development Framework&lt;/p&gt;
&lt;p class="footnote" id="fn4"&gt;&lt;sup&gt;4&lt;/sup&gt; &lt;a href="/articles/view/cakephp"&gt;CakePHP &amp;#8211; A &amp;#8216;tasty&amp;#8217; solution for &lt;span class="caps"&gt;PHP&lt;/span&gt; programming&lt;/a&gt;, originally published on &lt;a href="http://www.zzine.org/articles/cakephp"&gt;zZine Magazine&lt;/a&gt;&lt;/p&gt;
&lt;p class="footnote" id="fn5"&gt;&lt;sup&gt;5&lt;/sup&gt; Open Source &lt;a href="http://www.opensource.org/licenses/mit-license.php"&gt;&lt;span class="caps"&gt;MIT&lt;/span&gt; License&lt;/a&gt;.&lt;/p&gt;
&lt;p class="footnote" id="fn6"&gt;&lt;sup&gt;6&lt;/sup&gt; Symfony License:&lt;br /&gt;
&lt;small&gt;&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
Copyright &amp;#169; 2004-2006 Fabien Potencier&lt;br /&gt;
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the &amp;#8220;Software&amp;#8221;), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:&lt;/p&gt;
&lt;p&gt;The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;THE&lt;/span&gt; &lt;span class="caps"&gt;SOFTWARE&lt;/span&gt; IS &lt;span class="caps"&gt;PROVIDED&lt;/span&gt; &amp;#8220;AS IS&amp;#8221;, &lt;span class="caps"&gt;WITHOUT&lt;/span&gt; &lt;span class="caps"&gt;WARRANTY&lt;/span&gt; OF &lt;span class="caps"&gt;ANY&lt;/span&gt; &lt;span class="caps"&gt;KIND&lt;/span&gt;, &lt;span class="caps"&gt;EXPRESS&lt;/span&gt; OR &lt;span class="caps"&gt;IMPLIED&lt;/span&gt;, &lt;span class="caps"&gt;INCLUDING&lt;/span&gt; &lt;span class="caps"&gt;BUT&lt;/span&gt; &lt;span class="caps"&gt;NOT&lt;/span&gt; &lt;span class="caps"&gt;LIMITED&lt;/span&gt; TO &lt;span class="caps"&gt;THE&lt;/span&gt; &lt;span class="caps"&gt;WARRANTIES&lt;/span&gt; OF &lt;span class="caps"&gt;MERCHANTABILITY&lt;/span&gt;, &lt;span class="caps"&gt;FITNESS&lt;/span&gt; &lt;span class="caps"&gt;FOR&lt;/span&gt; A &lt;span class="caps"&gt;PARTICULAR&lt;/span&gt; &lt;span class="caps"&gt;PURPOSE&lt;/span&gt; &lt;span class="caps"&gt;AND&lt;/span&gt; &lt;span class="caps"&gt;NONINFRINGEMENT&lt;/span&gt;. IN NO &lt;span class="caps"&gt;EVENT&lt;/span&gt; &lt;span class="caps"&gt;SHALL&lt;/span&gt; &lt;span class="caps"&gt;THE&lt;/span&gt; &lt;span class="caps"&gt;AUTHORS&lt;/span&gt; OR &lt;span class="caps"&gt;COPYRIGHT&lt;/span&gt; &lt;span class="caps"&gt;HOLDERS&lt;/span&gt; BE &lt;span class="caps"&gt;LIABLE&lt;/span&gt; &lt;span class="caps"&gt;FOR&lt;/span&gt; &lt;span class="caps"&gt;ANY&lt;/span&gt; &lt;span class="caps"&gt;CLAIM&lt;/span&gt;, &lt;span class="caps"&gt;DAMAGES&lt;/span&gt; OR &lt;span class="caps"&gt;OTHER&lt;/span&gt; &lt;span class="caps"&gt;LIABILITY&lt;/span&gt;, &lt;span class="caps"&gt;WHETHER&lt;/span&gt; IN AN &lt;span class="caps"&gt;ACTION&lt;/span&gt; OF &lt;span class="caps"&gt;CONTRACT&lt;/span&gt;, &lt;span class="caps"&gt;TORT&lt;/span&gt; OR &lt;span class="caps"&gt;OTHERWISE&lt;/span&gt;, &lt;span class="caps"&gt;ARISING&lt;/span&gt; &lt;span class="caps"&gt;FROM&lt;/span&gt;, &lt;span class="caps"&gt;OUT&lt;/span&gt; OF OR IN &lt;span class="caps"&gt;CONNECTION&lt;/span&gt; &lt;span class="caps"&gt;WITH&lt;/span&gt; &lt;span class="caps"&gt;THE&lt;/span&gt; &lt;span class="caps"&gt;SOFTWARE&lt;/span&gt; OR &lt;span class="caps"&gt;THE&lt;/span&gt; &lt;span class="caps"&gt;USE&lt;/span&gt; OR &lt;span class="caps"&gt;OTHER&lt;/span&gt; &lt;span class="caps"&gt;DEALINGS&lt;/span&gt; IN &lt;span class="caps"&gt;THE&lt;/span&gt; &lt;span class="caps"&gt;SOFTWARE&lt;/span&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;/small&gt;&lt;/p&gt;
&lt;p class="footnote" id="fn7"&gt;&lt;sup&gt;7&lt;/sup&gt; Read the comments by David Heinemeier Hansson on &lt;a href="http://www.37signals.com/svn/archives/000606.php"&gt;Ruby on Rails to Basecamp&lt;/a&gt;&lt;/p&gt;
&lt;p class="footnote" id="fn8"&gt;&lt;sup&gt;8&lt;/sup&gt; CodeIgniter &lt;a href="http://www.codeigniter.com/user_guide/license.html"&gt;License Agreement&lt;/a&gt;&lt;/p&gt;
&lt;p class="footnote" id="fn9"&gt;&lt;sup&gt;9&lt;/sup&gt; Pipeline is licensed under the same terms as the Symfony framework [Copyright &amp;#169; 2006 Picora Pipeworks &lt;span class="caps"&gt;LLC&lt;/span&gt;].&lt;/p&gt;</description>
      <pubDate>Wed, 03 May 2006 12:57:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/rails-inspired-php-frameworks/</guid>
      <link>http://www.h3rald.com/articles/rails-inspired-php-frameworks/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/rails-inspired-php-frameworks/#comments</comments>
      <category>frameworks</category>
      <category>review</category>
      <category>cakephp</category>
      <category>rails</category>
    </item>
    <item>
      <title>CakePHP 1.0 released</title>
      <description>&lt;p&gt;As &lt;a href="http://digg.com/programming/CakePHP_1.0_has_been_released"&gt;Digg&lt;/a&gt;_ points out, the first &lt;em&gt;stable&lt;/em&gt; version of CakePHP was released, yesterday. I should have posted yesterday about it, and no, I didn&amp;#8217;t forget: I was just busy downloading the new version, have a look at the new site, talk to people etc.&lt;/p&gt;
&lt;p&gt;Anyhow, it&amp;#8217;s ready, just baked and smells damn good. Go get it if you didn&amp;#8217;t already, it&amp;#8217;s available at &lt;a href="http://cakeforge.org/frs/?group_id=23"&gt;the usual place&lt;/a&gt;, even this time you won&amp;#8217;t be disappointed. CakePHP now reached the 1.0 milestone, in a way which reminds me a lot about Mozilla Firefox: a lot of people were already using it &lt;em&gt;before&lt;/em&gt; it went stable officially!&lt;/p&gt;
&lt;p style="float:left;"&gt;&lt;img src="http://base--/img/pictures/CakePHP_1.0.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;The CakePHP Team has been humble enough not to declare their product &lt;em&gt;stable&lt;/em&gt; before the time. I personally considered CakePHP stable &lt;em&gt;enough&lt;/em&gt; since RC2&amp;#8230; and considering that this site and many others have been built on alpha, beta and RC version, I think people can get an idea of Cake&amp;#8217;s reliability.&lt;br /&gt;
Nothing (too) new came out the oven this time: CakePHP 1.0 is mainly a bugfix release, with all the features we&amp;#8217;ve learnt to love. It&amp;#8217;s just &lt;em&gt;better_: a lot of things have been fixed, model associations work better, etc. etc. You can read the &lt;a href="http://cakeforge.org/frs/shownotes.php?group_id=23&amp;amp;release"&gt;changelog/announcement&lt;/a&gt;&lt;/em&gt;id=85 or have a look below for a quick summary of the new features and most interesting fixes:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
Revision: [2420]
Added fix for Ticket #320.
Fixed Model::save() so it will only allow a model to save itself.
Fixed Model::save() when saving a HABTM association

Revision: [2437]
Adding fix for Model::findNeighbours().
Was returning all associations and fields. Now recursive
is set to 0 and only returns the prev and next keys array

Revision: [2456]
"Enables use of Controller::$data in addition to Controller::$params['data']"

Revision: [2490]
Fixing a bug that occurs when connecting to two different
databases on the same server, and enabling cross-database
model associations

Revision: [2491]
Adding Microsoft SQL Server driver [EXPERIMENTAL]

Revision: [2577]
Adding $alias property to enable future Oracle support

Revision: [2625]
Bringing all DB drivers up to date

Revision: [2653]
Adding check for custom error class in app/.
Added check for AppController::appError(); will be called if this method 
is in AppController.
&lt;/code&gt;&lt;/pre&gt;
&lt;p style="float:right;"&gt;&lt;img src="http://base--/img/pictures/cakesite.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;If you&amp;#8217;re not too excited about this new release, maybe you should have a look at &lt;a href="http://www.cakephp.org"&gt;www.cakephp.org&lt;/a&gt;. Different? Damn right it is: it looks like someone listened to our prayers for a new website design. The merciful soul is &lt;a href="http://www.nolimit-studio.com/"&gt;Armando Sosa&lt;/a&gt;, the winner of CakePHP&amp;#8217;s design contest. He&amp;#8217;s a latin-american web designer who had the &lt;span class="caps"&gt;GREAT&lt;/span&gt; idea of thinking about an &lt;em&gt;innovative&lt;/em&gt; design for the Cake site&amp;#8230; Actually my dad didn&amp;#8217;t think that way: &lt;em&gt;&amp;#8220;That&amp;#8217;s not new, that way of advertising was all over the place when I was a kid!&amp;#8221;&lt;/em&gt; And he&amp;#8217;s right, Armando thought that a fifties-like template would have been perfect for Cake. Forget all the smooth, roundy-and-chubby, toons-like &amp;#8220;official&amp;#8221; Web 2.0 designs (beta), the new Cake site needs to stand out of the crowd&amp;#8230;&lt;/p&gt;
&lt;p style="float:left;"&gt;&lt;img src="http://base--/img/pictures/fonz.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;
&lt;em&gt;Heyyy! Well done guys&amp;#8230;&lt;/em&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 02 May 2006 21:06:00 -0600</pubDate>
      <guid>http://www.h3rald.com/articles/24/</guid>
      <link>http://www.h3rald.com/articles/24/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/24/#comments</comments>
      <category>cakephp</category>
      <category>webdevelopment</category>
    </item>
    <item>
      <title>Ten minutes on Rails (while eating Cake)</title>
      <description>&lt;p&gt;Today I decided to do something different, something I&amp;#8217;ve been dying to do since before coming across CakePHP: give Rails a &lt;em&gt;proper&lt;/em&gt; try. Like many other &lt;span class="caps"&gt;PHP&lt;/span&gt; developers out there, when &lt;a href="http://www.rubyonrails.org"&gt;Ruby on Rails&lt;/a&gt; came out I felt damn jealous and terribly tempted to learn Ruby &lt;em&gt;only&lt;/em&gt; to start using such an amazing web development framework. At the time I actually even started reading various tutorials about it, and I was literally amazed at how RoR revolutioned the way of developing web applications.&lt;/p&gt;
&lt;p style="float:left;"&gt;&lt;img src="http://base--/img/pictures/rails.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;One of the main problems which made me &amp;#8211; sadly &amp;#8211; abandon Rails was Ruby itself: personally I&amp;#8217;ve never seen a programming language with a cleaner and more elegant syntax, but also &amp;#8211; at least at the time &amp;#8211; there weren&amp;#8217;t many hosts supporting it. LuckilyI found CakePHP quickly after that&amp;#8230;&lt;br /&gt;
Now however, more and more hosting companies boast full Rails support, and so when recently I &lt;a href="http://base--/blog/view/21/"&gt;had to move&lt;/a&gt; to a new host, I made sure it was Rails-friendly, &lt;em&gt;just in case I wanted to give Rails another try, someday&lt;/em&gt;.&lt;br /&gt;
Oh well, the temptation was so strong that today, only a two days after switching to my new host, I felt I &lt;em&gt;had&lt;/em&gt; to try it, I &lt;em&gt;had&lt;/em&gt; to taste something different than the usual Cake.&lt;/p&gt;
&lt;p&gt;I decided to (re-)read and follow the &lt;a href="http://www.onlamp.com/pub/a/onlamp/2005/01/20/rails.html"&gt;OnLamp tutorial&lt;/a&gt; about RoR, step by step, once again. I quickly typed &lt;code&gt;rails cookbook&lt;/code&gt; from my shell and voil&amp;aacute;, rails silently creates the skeleton of my application:&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;README&lt;/span&gt;&lt;br /&gt;
Rakefile&lt;br /&gt;
app/&lt;br /&gt;
components/&lt;br /&gt;
config/&lt;br /&gt;
db/&lt;br /&gt;
doc/&lt;br /&gt;
favicon.ico&lt;br /&gt;
index.html&lt;br /&gt;
lib/&lt;br /&gt;
log/&lt;br /&gt;
public/&lt;br /&gt;
script/&lt;br /&gt;
structure.txt&lt;br /&gt;
test/&lt;br /&gt;
tmp/&lt;br /&gt;
vendor/&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s familiar: it&amp;#8217;s very similar to what CakePHP&amp;#8217;s directory structure used to look like. Now Cake &lt;em&gt;evolved&lt;/em&gt; and adopted its own schema, which &amp;#8211; I must say &amp;#8211; seems more functional than RoR&amp;#8217;s, at least at a first glance:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;app/
	&lt;ul&gt;
		&lt;li&gt;config/&lt;/li&gt;
		&lt;li&gt;controllers/&lt;/li&gt;
		&lt;li&gt;models/&lt;/li&gt;
		&lt;li&gt;plugins/&lt;/li&gt;
		&lt;li&gt;tmp/&lt;/li&gt;
		&lt;li&gt;vendors/&lt;/li&gt;
		&lt;li&gt;views/&lt;/li&gt;
		&lt;li&gt;webroot/&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
	&lt;li&gt;cake/
	&lt;ul&gt;
		&lt;li&gt;config/&lt;/li&gt;
		&lt;li&gt;docs/&lt;/li&gt;
		&lt;li&gt;libs/&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
	&lt;li&gt;vendors/&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="float:right;"&gt;&lt;img src="http://base--/img/pictures/cakephp.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Cake felt the necessity to divide what you can mess with (&lt;code&gt;app/&lt;/code&gt;, &lt;code&gt;vendors/&lt;/code&gt;) from what you&amp;#8217;d better not touch (&lt;code&gt;cake/&lt;/code&gt;). Rails just left everything on the same level.&lt;/p&gt;
&lt;p&gt;After creating my database and the necessary tables I have to edit &lt;code&gt;config/database.yml&lt;/code&gt;, which corresponds to Cake&amp;#8217;s &lt;code&gt;app/config/database.php&lt;/code&gt;. Then things start to become a bit different from Cake, as Rails offers some very handy built in scripts which can be used to automatically create your application&amp;#8217;s files, i.e. executing &lt;code&gt;ruby script/generate controller Recipe&lt;/code&gt; creates the controller and other bits:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;exists  app/controllers/
exists  app/helpers/
create  app/views/recipe
exists  test/functional/
create  app/controllers/recipe_controller.rb
create  test/functional/recipe_controller_test.rb
create  app/helpers/recipe_helper.rb&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And so on. Anyhow&amp;#8230; I followed the tutorial and yes, it was a nice read. CakePHP borrowed a lot from Rails but not everything. Inevitably Ruby&amp;#8217;s syntax is less verbose and looks very very clean:&lt;/p&gt;
&lt;p&gt;&amp;lt;% highlight :ruby do %&amp;gt;&lt;br /&gt;
class RecipeController &amp;lt; ApplicationController&lt;br /&gt;
	scaffold :recipe&lt;/p&gt;
&lt;p&gt;def list&lt;br /&gt;
		@recipes = Recipe.find_all&lt;br /&gt;
	end&lt;/p&gt;
&lt;p&gt;def edit&lt;br /&gt;
		&lt;code&gt;recipe = Recipe.find(&lt;/code&gt;params[&amp;#8220;id&amp;#8221;])&lt;br /&gt;
		@categories = Category.find_all&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;/p&gt;
&lt;p&gt;While CakePHP&amp;#8217;s, simply because it uses &lt;span class="caps"&gt;PHP&lt;/span&gt; and not Ruby, looks less pretty:&lt;/p&gt;
&lt;p&gt;&amp;lt;% highlight :php do %&amp;gt;&lt;br /&gt;
class RecipesController extends AppController&lt;br /&gt;
{&lt;br /&gt;
	var $scaffold;&lt;/p&gt;
&lt;p&gt;function list()&lt;br /&gt;
	{&lt;br /&gt;
		$this&amp;#8594;set(&amp;#8216;recipes&amp;#8217;, $this&amp;#8594;Recipe&amp;#8594;findAll());&lt;br /&gt;
	}&lt;/p&gt;
&lt;p&gt;function edit($id)&lt;br /&gt;
	{&lt;br /&gt;
		$this&amp;#8594;set(&amp;#8216;recipe&amp;#8217;, $this&amp;#8594;Recipe&amp;#8594;find(&amp;#8220;id = $id&amp;#8221;));&lt;br /&gt;
		$this&amp;#8594;set(&amp;#8216;categories&amp;#8217;, $this&amp;#8594;Category&amp;#8594;findAll());&lt;br /&gt;
	}&lt;/p&gt;
&lt;p&gt;}&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;/p&gt;
&lt;p&gt;CakePHP Development Team did a great job translating some of Rails functionalities into &lt;span class="caps"&gt;PHP&lt;/span&gt;, and the while CakePHP&amp;#8217;s syntax is &lt;strong&gt;much&lt;/strong&gt; cleaner if compared to PHP&amp;#8217;s standard spaghetti-code approach, Ruby just looks much more clear, sorry. &lt;em&gt;Imagine a world without funny unnecessary brackets, pointless semicolons and where everything just looks better&lt;/em&gt;: that&amp;#8217;s Ruby.&lt;/p&gt;
&lt;p&gt;Sigh. Now I do understand why Rails was built in Ruby and not in &lt;span class="caps"&gt;PHP&lt;/span&gt;: simply because a PHP&amp;#8217;s Rails would have been outscored by its &amp;#8220;Ruby port&amp;#8221;!&lt;/p&gt;
&lt;p&gt;One thing I liked about Rails which has not been ported in Cake (yet) is a somehow smarter way of scaffolding. While the Ruby code above actually works, the CakePHP&amp;#8217;s edit method doesn&amp;#8217;t, or better, it does but not as expected: when you remove &lt;code&gt;var $scaffold&lt;/code&gt; the scaffold is just plain gone, and you have to code everything yourself, while in Ruby you can leave the scaffold and then develop methods one by one, and still be able to use scaffolded methods if you didn&amp;#8217;t define the custom ones.&lt;/p&gt;
&lt;p&gt;The other thing I noticed about RoR is that it definitely handles errors better! This is probably another language issue. I basically forgot to set a category for the recipes, and when executing my custom list of recipes I got a very, very well structured error page showing something like:&lt;/p&gt;
&lt;p&gt;&amp;lt;% highlight :ruby do %&amp;gt;&lt;br /&gt;
NoMethodError in Recipe#index&lt;/p&gt;
&lt;p&gt;Showing app/views/recipe/index.rhtml where line #18 raised:&lt;/p&gt;
&lt;p&gt;You have a nil object when you didn&amp;#8217;t expect it!&lt;br /&gt;
The error occured while evaluating nil.name&lt;/p&gt;
&lt;p&gt;Extracted source (around line #18):&lt;/p&gt;
&lt;p&gt;15:  &amp;lt;% @recipes.each do |recipe| &lt;span&gt;&amp;gt;&lt;br /&gt;
16:   &lt;tr&gt;&lt;br /&gt;
17:    &lt;td&gt;&amp;lt;&lt;/span&gt;= link_to recipe.title, :action =&amp;gt; &amp;#8220;show&amp;#8221;, :id =&amp;gt; recipe.id &lt;span&gt;&amp;gt;&lt;/td&gt;&lt;br /&gt;
18:    &lt;td&gt;&amp;lt;&lt;/span&gt;= recipe.category.name &lt;span&gt;&amp;gt;&lt;/td&gt;&lt;br /&gt;
19:    &lt;td&gt;&amp;lt;&lt;/span&gt;= recipe.date &lt;span&gt;&amp;gt;&lt;/td&gt;&lt;br /&gt;
20:   &lt;/tr&gt;&lt;br /&gt;
21:  &amp;lt;&lt;/span&gt; end &lt;span&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;/span&gt; end %&amp;gt;&lt;/p&gt;
&lt;p&gt;I took a screenshot of the page, because it was too nice: &lt;a href="http://base--/img/pictures/rails_error.jpg"&gt;check it out&lt;/a&gt;. This error page really tells you what&amp;#8217;s wrong, and even prints the lines of code around the error! It also lets the developer check the full backtrace and every sort of information&amp;#8230; Can we have this in CakePHP please? I actually started to develop something like this, but seemed quite hard to do in &lt;span class="caps"&gt;PHP&lt;/span&gt;.&lt;/p&gt;</description>
      <pubDate>Sat, 29 Apr 2006 07:29:00 -0600</pubDate>
      <guid>http://www.h3rald.com/articles/22/</guid>
      <link>http://www.h3rald.com/articles/22/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/22/#comments</comments>
      <category>cakephp</category>
      <category>rails</category>
      <category>webdevelopment</category>
    </item>
    <item>
      <title>New CakePHP Manual (with associations!)</title>
      <description>&lt;p&gt;Gustavo Carreno just &lt;a href="http://groups.google.com/group/cake-php/browse_thread/thread/4e13231cc383b9bb/6414184c1058fadb#6414184c1058fadb"&gt;announced&lt;/a&gt; a new release of the &lt;a href="http://cakeforge.org/frs/?group_id=53&amp;amp;release_id=82"&gt;CakePHP Offline Manual&lt;/a&gt;. Personally I was extremely happy to download this new release because it finally contains documentation and howtos related to CakePHP&amp;#8217;s Model Associations, which is perhaps one of the most used &lt;em&gt;advanced&lt;/em&gt; CakePHP features.&lt;br /&gt;
So I&amp;#8217;ll have no excuses not to learn how to use them, great&amp;#8230;&lt;/p&gt;
&lt;p&gt;The manual is available in the following formats:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Windows compressed &lt;span class="caps"&gt;HTML&lt;/span&gt; (.chm)&lt;/li&gt;
	&lt;li&gt;&lt;span class="caps"&gt;PDF&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span class="caps"&gt;HTML&lt;/span&gt; (multiple pages or single page)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Furthermore, the CakePHP &lt;span class="caps"&gt;API&lt;/span&gt; is also available for download in .chm format, thanks to  Mladen Mihajlovic.&lt;/p&gt;
&lt;p&gt;Well done guys. Really useful for people like me who are on dialup sometimes :)&lt;/p&gt;</description>
      <pubDate>Tue, 18 Apr 2006 00:47:00 -0600</pubDate>
      <guid>http://www.h3rald.com/articles/17/</guid>
      <link>http://www.h3rald.com/articles/17/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/17/#comments</comments>
      <category>cakephp</category>
    </item>
    <item>
      <title>Databases supported by CakePHP</title>
      <description>&lt;p&gt;One of the most recurring questions on CakePHP User Group is probably &lt;em&gt;&amp;#8220;Does Cake support X database?&amp;#8221;&lt;/em&gt;. Sure, most of us tend to use just MySQL for our websites and applications, but in certain situations some more &lt;em&gt;exotic&lt;/em&gt; database support makes the difference. A partial answer to the question above could be &lt;em&gt;&amp;#8220;Yes, probably, at least partially&amp;#8221;&lt;/em&gt;: CakePHP offers support for some database &amp;#8220;natively&amp;#8221; (i.e. Cake folks made some &lt;em&gt;ad hoc&lt;/em&gt; database drivers), others through either &lt;a href="http://adodb.sourceforge.net/"&gt;ADOdb&lt;/a&gt; or &lt;a href="http://pear.php.net/package/DB"&gt;&lt;span class="caps"&gt;PEAR&lt;/span&gt;::DB&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;CakePHP seems to use a &lt;em&gt;multiple level&lt;/em&gt; database abstraction: in other words, popular abstraction layers like ADOdb or &lt;span class="caps"&gt;PEAR&lt;/span&gt;::DB have been wrapped in a &amp;#8220;driver&amp;#8221; which basically extends the DboSource class (which is the most high level database abstraction). Some people don&amp;#8217;t like the idea, because this means that the could be some performance issues, for one, and also that inevitably not &lt;em&gt;all&lt;/em&gt; features offered by either ADOdb or &lt;span class="caps"&gt;PEAR&lt;/span&gt;::DB are used. In my very, very, very modest opinion (I&amp;#8217;m not an expert on this matter), this solution focus on achieving good database compatibility leaving the doors open for further tinkering, if needed.&lt;/p&gt;
&lt;p style="float:left;"&gt;&lt;img src="http://base--/img/pictures/postgres.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Having said this, yes, the possibilities are good that your favorite database is supported by CakePHP, more or less. Of course, as repeatedly pointed out by some CakePHP core developers, Cake dev team didn&amp;#8217;t and is not going to test &lt;em&gt;every&lt;/em&gt; database with Cake, using either of the two abstraction layers, but users are more than welcome to do so.&lt;/p&gt;
&lt;p&gt;Let&amp;#8217;s now have a look at what is &lt;em&gt;known to work&lt;/em&gt; with Cake:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MySQL&lt;/strong&gt; works fine, and is currently recommended as &lt;em&gt;preferred&lt;/em&gt; database solution. What about &lt;strong&gt;MySQLi&lt;/strong&gt;? Well, thanks to mappleJoe there&amp;#8217;s a (PHP5 only!) &lt;a href="http://cakephp.org/pastes/show/770e73e77e4d7a3d32c2f3de3f175512"&gt;driver&lt;/a&gt; ready to be used.&lt;/p&gt;
*PostgreSQL*&amp;#8217;s support is continuously improving. Something may work, something may not: the good news is that the folks who are using it are &lt;a href="http://groups.google.com/group/cake-php/browse_thread/thread/85a29ab6ec6826a0/8eecea26ba53e1fd?q=postgres&amp;amp;rnum=1#8eecea26ba53e1fd"&gt;sharing their thoughts&lt;/a&gt; with the rest of us.
&lt;p style="float:right;"&gt;&lt;img src="http://base--/img/pictures/sqlite.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SQLite&lt;/strong&gt; is supported natively, or so it seems&amp;#8230; what about the newest SQLite3? Yes, probably: there&amp;#8217;s a quick &lt;a href="http://www.thompsonlife.net/index.php?section=9"&gt;howto&lt;/a&gt; on ThompsonLife.net to make it work through the dbo_pear driver.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Access&lt;/strong&gt; works through the ADOdb driver, as reported in CakePHP &lt;a href="http://wiki.cakephp.org/docs:databases"&gt;wiki&lt;/a&gt; (thanks ivanp).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.filemaker.com/"&gt;FileMaker&lt;/a&gt; is getting there: things aren&amp;#8217;t that easy, but bdb is doing &lt;a href="http://groups.google.com/group/cake-php/browse_thread/thread/572d8dd2ba4cbdf7/dca851c795247c0b?q=database&amp;amp;rnum=2#dca851c795247c0b"&gt;all his best&lt;/a&gt; to make it work, good luck!&lt;/p&gt;
&lt;p&gt;Neil Fincham was also trying to develop a custom driver to support &lt;a href="http://www.pervasive.com/"&gt;Pervasive&lt;/a&gt; through a &lt;a href="http://www.unixodbc.org/"&gt;unixODBC&lt;/a&gt; driver. Best of luck!&lt;/p&gt;
&lt;p&gt;For other databases, check ADOdb&amp;#8217;s &lt;a href="http://phplens.com/adodb/supported.databases.html"&gt;list of supported databases&lt;/a&gt; and use the &lt;code&gt;dbo-adodb&lt;/code&gt; driver, or use &lt;span class="caps"&gt;PEAR&lt;/span&gt;::DB (for fbsql, ibase, informix, msql, mssql, mysql, mysqli, oci8, odbc, pgsql,sqlite and sybase) using the &lt;code&gt;dbo-pear&lt;/code&gt; driver.&lt;/p&gt;</description>
      <pubDate>Sun, 16 Apr 2006 23:30:00 -0600</pubDate>
      <guid>http://www.h3rald.com/articles/16/</guid>
      <link>http://www.h3rald.com/articles/16/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/16/#comments</comments>
      <category>cakephp</category>
      <category>webdevelopment</category>
      <category>databases</category>
    </item>
    <item>
      <title>I18n</title>
      <description>&lt;p&gt;&lt;em&gt;&amp;#8220;CakePHP will officially support Internationalization (i18n) from version 2.0&amp;#8221;&lt;/em&gt;. That is to say: not right now. That doesn&amp;#8217;t mean we have to wait, no chance! I&amp;#8217;m Italian and there are plenty of bakers speaking a language other than English who might want to develop a multi-lingual website.&lt;/p&gt;
&lt;p&gt;I did, &lt;a href="http://v60.h3rald.com/"&gt;once&lt;/a&gt;, and the final result wasn&amp;#8217;t too bad in the end: every page of the site (except the articles) could be translated into Italian. Before examining my solution (which is far from optimal) I&amp;#8217;d like to mention an excellent CakePHP package which allows basic (mostly statuc) i18n.&lt;br /&gt;
It looks like I missed an important baker in my recent &lt;a href="http://base--/blog/view/11"&gt;blog post&lt;/a&gt;: &lt;a href="http://www.noswad.me.uk/"&gt;Andy Dawson&lt;/a&gt;, creator &amp;#8211; among other things &amp;#8211; of the &lt;a href="http://cakeforge.org/snippet/detail.php?type=package&amp;amp;id=2"&gt;Locale Package&lt;/a&gt;, available at CakeForge. His solution actually came out after H3RALD.com v60 was already developed so I didn&amp;#8217;t use it for my own site.&lt;br /&gt;
At a first glance Andy&amp;#8217;s solution truly solves basic l18n problems in an elegant way: the most important code snippet is the &lt;a href="http://cakeforge.org/snippet/download.php?type=snippet&amp;amp;id=74"&gt;Locale Component&lt;/a&gt; which provides the following functionalities:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;automatic language detection based on browser&amp;#8217;s UserAgent string&lt;/li&gt;
	&lt;li&gt;loading of locale files&lt;/li&gt;
	&lt;li&gt;setting of customizeable (translated) messages&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The getString() method provided in the locale component is actually used through the double underscore function, which is already defined (but not yet implemented) in the standard CakePHP file &lt;code&gt;cake/basics.php&lt;/code&gt; (yes, this is a small core hack). Andy&amp;#8217;s double underscore function can take five parameters:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;function __($msgId, $MessageArgs=NULL, $capitalize=1, $punctuate=0,$Code=NULL)
{
    require_once(COMPONENTS.'locale.php');
    $Locale = LocaleComponent::getInstance();
    return $Locale-&amp;gt;getString( $msgId, $MessageArgs, $capitalize, $punctuate, $Code );
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;These parameters are:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;a &amp;#8220;message id&amp;#8221; or the message itself&lt;/li&gt;
	&lt;li&gt;some parameters which can be passed to the message&lt;/li&gt;
	&lt;li&gt;the message&amp;#8217;s capitalization:
	&lt;ul&gt;
		&lt;li&gt;0 = no change&lt;/li&gt;
		&lt;li&gt;1 = first letter of first word&lt;/li&gt;
		&lt;li&gt;2 = fist character of all words&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
	&lt;li&gt;the message&amp;#8217;s punctuation:
	&lt;ul&gt;
		&lt;li&gt;0 = &amp;quot;&amp;quot;&lt;/li&gt;
		&lt;li&gt;1 = .&lt;/li&gt;
		&lt;li&gt;2 = !&lt;/li&gt;
		&lt;li&gt;3 = ?&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
	&lt;li&gt;the language code, if you need to override your page&amp;#8217;s language&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is a convenient method which can be used everywhere, both in your controllers and in your views, to translate simple pre-stored messages. Where are those messages stored? In various locale files which must be placed in &lt;code&gt;app/controllers/components/messages/&lt;/code&gt; and look like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;   $messages = Array (
    'LocaleSetTo'=&amp;gt;"Site locale set to UK English",
    'LocaleChangeTo'=&amp;gt;"Change site locale to UK English",
    // Time related messages
    'ago' =&amp;gt; "%s ago",
    'ages' =&amp;gt; "a long time ago (%s)",
)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The locale package also comes with a &lt;em&gt;Language Controller&lt;/em&gt; you can use to handle language changes, and a useful rewrite of the &lt;em&gt;Time Helper_. Andy recently updated his &lt;a href="http://wiki.cakephp.org/tutorials:i18n"&gt;i18n tutorial&lt;/a&gt; available on CakePHP Wiki, a very interesting read on how to quickly add i18n support to yout first Cake blog (yes, the one described in the &lt;a href="http://wiki.cakephp.org/tutorials:blog_tutorial"&gt;Blog Tutorial&lt;/a&gt;_-&lt;/em&gt;1).&lt;/p&gt;
&lt;p&gt;So far so good. The Locale Package provide some basic multi-lingual support in an efficient way, and I&amp;#8217;d certainly use it if I decide to (re-)develop a multi-lingual site, but unfortunately this does not fully solve the problem.&lt;br /&gt;
If you want &lt;strong&gt;full&lt;/strong&gt; i18n, for sure you&amp;#8217;d like to have all the contents of your website translated, which is &amp;#8211; normally &amp;#8211; dynamic and maybe stored in a database. That was the case of my old website: all the pages are dynamic, not static, so I had to think about something else. &lt;br /&gt;
Since I only had plans to develop a &lt;em&gt;dual&lt;/em&gt; language site, I opted for a very lazy (but yet effective) solution: each table &amp;#8211; more or less &amp;#8211; had &amp;#8220;duplicate&amp;#8221; fields, something like this:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;id&lt;/li&gt;
	&lt;li&gt;title_en&lt;/li&gt;
	&lt;li&gt;title_it&lt;/li&gt;
	&lt;li&gt;text_en&lt;/li&gt;
	&lt;li&gt;text_it&lt;/li&gt;
	&lt;li&gt;created&lt;/li&gt;
	&lt;li&gt;modified&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I basically defined a global $lang variable set to &amp;#8220;en&amp;#8221; by default and then I accessed the record&amp;#8217;s fields (for example in views) like this:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;echo $data['Project']['text_'.$lang]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Ugly, perhaps, but did the job. The good (or bad) thing about this technique was that I could modify the contents of a project, for example, regardless of the current language: in my add/edit view, I chose to generate &lt;em&gt;all&lt;/em&gt; the fields of a table and therefore modify all the fields of a project without switching to the other language.&lt;/p&gt;
&lt;p&gt;How will Cake support locales? Will we have &amp;#8220;localized&amp;#8221; database tables (and models?) Only time will tell&amp;#8230;&lt;/p&gt;</description>
      <pubDate>Sat, 15 Apr 2006 07:15:00 -0600</pubDate>
      <guid>http://www.h3rald.com/articles/15/</guid>
      <link>http://www.h3rald.com/articles/15/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/15/#comments</comments>
      <category>cakephp</category>
      <category>webdevelopment</category>
    </item>
    <item>
      <title>CakePHP hybrids</title>
      <description>&lt;p&gt;When I first talked to gwoo, CakePHP&amp;#8217;s project manager, I asked him if Cake had any potential &lt;em&gt;limitations&lt;/em&gt;. I asked him &amp;#8211; I was kidding actually &amp;#8211; wether it would be possible to build an application like Gmail using the framework and he &amp;#8211; very seriously &amp;#8211; simply said &lt;em&gt;&amp;#8220;yes, why not?&amp;#8221;&lt;/em&gt;. &lt;br /&gt;
I repeat myself when I say that CakePHP leaves plenty of freedom to developers within the bounds of its &lt;span class="caps"&gt;MVC&lt;/span&gt; structure: once you grasp the basic logic behind it, your possibilities are endless. I don&amp;#8217;t want to act as a Ruby on Rails fanatic and boast that &lt;em&gt;you can do anything  with CakePHP&lt;/em&gt; and things like that, but I can certainly say that CakePHP can be &lt;em&gt;extended&lt;/em&gt; and &lt;em&gt;integrated&lt;/em&gt; with other collections of scripts, frameworks and projects. With limitations, of course: you probably don&amp;#8217;t want to force an integration between CakePHP and another &lt;span class="caps"&gt;MVC&lt;/span&gt;/Event Driven/Whatever framework, simply because it would be rather pointless and potential conflicts may occur.&lt;/p&gt;
&lt;p&gt;What I keep finding online is other open source projects adopting CakePHP as &lt;em&gt;backend&lt;/em&gt; and &lt;em&gt;structure&lt;/em&gt;. I&amp;#8217;m sure there are many examples which could be mentioned here, but I chose two in particular: one has been around for a few months and the other is just born.&lt;/p&gt;
&lt;p style="float:left;"&gt;&lt;img src="http://base--/img/pictures/amfphp.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://amfphp.org/"&gt;&lt;span class="caps"&gt;AMFPHP&lt;/span&gt;&lt;/a&gt; is quite an interesting project:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;[it] is an open-source Flash Remoting gateway. It&amp;#8217;s fast, reliable, 100% free and open-source. Flash Remoting is a technology built into the Flash player core that enables sending data between the server and the client seemlessly.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In other words, it makes lifes much easier for developers who&amp;#8217;d like to integrate their flash animations and script more tightly into their &lt;span class="caps"&gt;PHP&lt;/span&gt; application. If you are curious to see some results, head off to &lt;span class="caps"&gt;AMFPHP&lt;/span&gt; &lt;a href="http://amfphp.org/showcase.html"&gt;showcase&lt;/a&gt;.&lt;br /&gt;
Cool, but what has this project to do with CakePHP? Well, gwoo recently created &lt;a href="http://cakeforge.org/projects/cakeamfphp/"&gt;CakeAMFPHP&lt;/a&gt;, a CakeForge project which just yesterday reached its &lt;a href="http://rd11.com/posts/view/21"&gt;0.4.0 release&lt;/a&gt;, and it&amp;#8217;s fully compatible with &lt;span class="caps"&gt;AMFPHP&lt;/span&gt; 1.2.3 and CakePHP 0.10 final.&lt;br /&gt;
Here&amp;#8217;s an excerpt taken from CakeAMFPHP &lt;span class="caps"&gt;README&lt;/span&gt;.txt file:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;[&amp;#8230;] &lt;br /&gt;
1) get CakePHP 0.10 final (http://cakephp.org)&lt;br /&gt;
2) get amfphp 1.2.3 (http://amfphp.org)&lt;br /&gt;
3) get the &lt;span class="caps"&gt;UFO&lt;/span&gt; js http://www.bobbyvandersluis.com/ufo/&lt;br /&gt;
4) put amfphp into /app/vendors&lt;br /&gt;
5) put cakeamfphp into vendors&lt;br /&gt;
6) put the cake_gateway.php in /app/webroot&lt;br /&gt;
7) put the cakeamfphp.php in /app/views/helpers&lt;br /&gt;
8) put CakeMySqlAdpater.php in /app/vendors/amfphp-core/adapters&lt;br /&gt;
9) Voila: NetServices.setDefaultGatewayUrl( &amp;#8216;http://localhost/cake_install/cake_gateway.php&amp;#8217;);&lt;br /&gt;
Access the service browser through&lt;br /&gt;
http://localhost/cake_install/vendors/cakeamfphp/cakebrowser/&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The installation doesn&amp;#8217;t seem too painful at all. And &amp;#8211; guess what &amp;#8211; gwoo recently updated a very informative tutorial showing how to create a simple &amp;#8211; but still impressive &amp;#8211; bullettin board with CakeAMFPHP.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;#8220;Cool, but I never liked flash, what about &lt;span class="caps"&gt;AJAX&lt;/span&gt;?&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;p style="float:left;"&gt;&lt;img src="http://base--/img/pictures/qooxdoo.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;CakePHP has a nice &lt;span class="caps"&gt;AJAX&lt;/span&gt; helper to be used in conjunction with &lt;a href="http://prototype.conio.net/"&gt;prototype&lt;/a&gt;, but there are truly a lot of libraries, mini-frameworks, pre-built applications to create interactive desktop-like user interfaces. Some people may already know &lt;a href="http://qooxdoo.oss.schlund.de/"&gt;qooxdoo&lt;/a&gt;,&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;[&amp;#8230;] an advanced open-source JavaScript-based &lt;span class="caps"&gt;GUI&lt;/span&gt; toolkit. qooxdoo continues where simple &lt;span class="caps"&gt;HTML&lt;/span&gt; is not enough. This way qooxdoo can help you implement your &lt;span class="caps"&gt;AJAX&lt;/span&gt;-enhanced web 2.0 application &amp;#8211; easier than ever before.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In a recent &lt;a href="http://groups.google.com/group/cake-php/browse_thread/thread/ba219c64cd794764/1d77973293514618?lnk=raot"&gt;discussion&lt;/a&gt; on CakePHP user group someone suggested the possibility to integrate qooxdoo with CakePHP. Apparently qooxdoo people were &lt;a href="http://www.nabble.com/Re%3A-qooxdoo-PHP-framework-project-p3799302.html"&gt;evaluating&lt;/a&gt; various &lt;span class="caps"&gt;MVC&lt;/span&gt; frameworks, and Cake was obviously listed together with two other Rails clones for &lt;span class="caps"&gt;PHP&lt;/span&gt;. The good news is that &lt;a href="http://cakeforge.org/users/a100rk/"&gt;100rk&lt;/a&gt; just started a new project called &lt;a href="http://cakeforge.org/projects/cqx"&gt;&lt;span class="caps"&gt;CQX&lt;/span&gt;&lt;/a&gt;, which &amp;#8211; although still in pre-alpha a development demo is already available, and it &lt;em&gt;shows off&lt;/em&gt; most of qooxdoo&amp;#8217;s features&amp;#8230; &lt;a href="http://cqx.100rk.org/trunk/"&gt;Take a look&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Best of luck to 100rk and his brand new project, I really hope to see more of it soon!&lt;/p&gt;</description>
      <pubDate>Fri, 14 Apr 2006 07:55:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/14/</guid>
      <link>http://www.h3rald.com/articles/14/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/14/#comments</comments>
      <category>cakephp</category>
      <category>webdevelopment</category>
      <category>php</category>
    </item>
    <item>
      <title>Baking a new CakeArticle</title>
      <description>&lt;p&gt;Too right. Enough being a lazy writer, it&amp;#8217;s time to seriously produce something. I could sit here and pretend that long blog posts can make up for the lack of new articles, but I&amp;#8217;d like to write something &lt;em&gt;proper&lt;/em&gt; and new. Judging by the latest stats people come here hoping to find either a blog &lt;em&gt;entirely&lt;/em&gt; devoted to CakePHP or some CakePHP related content. Well, actually they can &lt;a href="http://base--/tags/CakePHP/"&gt;find&lt;/a&gt; quite a bit, but I&amp;#8217;d like to be able to sport more Cake-related articles, bookmarks, and posts. My main problem is that I could add ten bookmarks about Cake right away, but the &lt;em&gt;latest addition&lt;/em&gt; showed on the front page would feature only bookmarks, which would be bad (yes, I do worry about silly things). At the moment this blog is the second easiest way to provide fresh content frequently enough to encourage visitors to come back, but articles could be even better.&lt;/p&gt;
&lt;p style="float:left;"&gt;&lt;img src="http://base--/img/pictures/baking_bear.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Without further ado, I hereby announce that &lt;em&gt;I am working on some new articles on CakePHP&lt;/em&gt;, at least one. I&amp;#8217;d like to write something technical about CakePHP&amp;#8217;s advanced features, because that&amp;#8217;s where the current documentation is lacking, at the moment: associations, caching, some advanced components&amp;#8230; they are topics which seem to interest those bakers who already baked their first cake and are now looking for some more icing.&lt;/p&gt;
&lt;p&gt;Interested? Good! Sadly, that&amp;#8217;s not what I&amp;#8217;m going to write now, at least not the first article I&amp;#8217;ll be releasing. Please stop calling me names, there&amp;#8217;s no need to say that I&amp;#8217;m just a lazy coward who doesn&amp;#8217;t want to get his hands dirty and write some tough stuff. And stop pulling those sad faces! Think about&amp;#8230; new bakers. There are new people learning about Cake and I know there are, I just discovered &lt;a href="http://www.480x.com/2006/04/12/eureka/"&gt;one&lt;/a&gt; yesterday almost by chance: he seems to be really enthusiastic about Cake, judging by his &lt;a href="http://www.480x.com/2006/04/13/eureka-part-deux/"&gt;latest post&lt;/a&gt; (OK, nevermind the pic).&lt;br /&gt;
Those people are mostly more-or-less experienced &lt;span class="caps"&gt;PHP&lt;/span&gt; programmers who want to find an answer to all their development problems and annoyance. Well, my good friends, the answer lies in Cake. Cake can save us all and bestow powerful blessings of Good &lt;span class="caps"&gt;PHP&lt;/span&gt; Design and Well-structured Programming upon our messy spaghetti code!&lt;/p&gt;
&lt;p&gt;I almost considered writing a humorous article about Cake, but luckily I changed my mind. My old &lt;a href="http://base--/articles/view/cakephp/"&gt;CakePHP article&lt;/a&gt; is already a few months old and was written when Cake was in pre-beta. I feel it&amp;#8217;s time for a more up-to-date howto and introduction to our framework, something maybe not as lenghty but easily readable by almost anyone interested in starting to learn about Cake.&lt;/p&gt;
&lt;p&gt;Baking lessons. Yes, that&amp;#8217;s it. I&amp;#8217;m currently writing an article divided in ten lessons which could potentially turn casual cowboy coders into (apprentice) bakers. That could be easy for those already enlightened by &lt;acronym title="Object Oriented Programming"&gt;&lt;span class="caps"&gt;OOP&lt;/span&gt;&lt;/acronym&gt; and &lt;acronym title="Model-View-Controller"&gt;&lt;span class="caps"&gt;MVC&lt;/span&gt;&lt;/acronym&gt;, and perhaps more difficult for others: at any rate, I&amp;#8217;ll try my best.&lt;/p&gt;</description>
      <pubDate>Thu, 13 Apr 2006 08:21:00 -0600</pubDate>
      <guid>http://www.h3rald.com/articles/13/</guid>
      <link>http://www.h3rald.com/articles/13/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/13/#comments</comments>
      <category>cakephp</category>
      <category>writing</category>
    </item>
    <item>
      <title>Meet some Cake(PHP) bakers!</title>
      <description>&lt;p&gt;I should write more. I noticed that I since I decided to take a break from &lt;a href="http:www.zzine.org"&gt;zZine Magazine&lt;/a&gt; I more or less stopped writing &amp;#8211; and started &lt;em&gt;baking&lt;/em&gt; again with &lt;a href="http://www.cakephp.org/"&gt;CakePHP&lt;/a&gt;. As a result I finally recoded this website and &lt;em&gt;refreshed&lt;/em&gt; a little bit my almost-rusty baking skills.&lt;/p&gt;
&lt;p style="float:left;"&gt;&lt;img src="http://base--/img/pictures/cakephp.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Why not taking advantage of this and write more about CakePHP then? After all, my last &lt;a href="http://base--/articles/view/cakephp/"&gt;article&lt;/a&gt; turned out well enough and some people even bookmarked it online on del.icio.us and ma.gnolia&amp;#8230; Now it&amp;#8217;s a bit out of date, I must admit: it was based on a pre-beta release of the framework, and we&amp;#8217;re (more or less) stable now. &lt;br /&gt;
A lot of things changed in the Bakers Community since then! At the time the &lt;a href="http://wiki.cakephp.org/"&gt;wiki&lt;/a&gt; barely started and there was no &lt;a href="http://manual.cakephp.org/"&gt;manual&lt;/a&gt; whatsoever, only my long and perhaps &lt;em&gt;slightly&lt;/em&gt; boring article describing Cake&amp;#8217;s functionalities. Now there things are much better for newcomers: they have a continuously growing community to rely upon, both on the Google user group and on &lt;span class="caps"&gt;IRC&lt;/span&gt; (#cakephp on FreeNode counted 63 members today, while back in the day 20 was a big number). There are also a few people who started blogging and starting websites about CakePHP: while I was the first to write an article about Cake I was &lt;em&gt;the last&lt;/em&gt; so far to start a blog :/ Oh well, nobody&amp;#8217;s perfect!&lt;/p&gt;
&lt;p&gt;The first site I came across &amp;#8211; although not a blog really &amp;#8211; is Graham Bird&amp;#8217;s &lt;a href="http://grahambird.co.uk/cake/"&gt;Cake for Beginners&lt;/a&gt;. When someone asks me some basic questions about CakePHP I send him there because first of all they&amp;#8217;ll find a short &lt;span class="caps"&gt;FAQ&lt;/span&gt; about the framework, i.e. something everybody should know before even start thinking about learning Cake. Similarly, the guy has a &lt;a href="http://grahambird.co.uk/cake/glossary/"&gt;Glossary&lt;/a&gt; in progress to help those souls who feel lost in Cake&amp;#8217;s terminology. If you don&amp;#8217;t consider yourself a total beginner anymore, the &lt;a href="http://grahambird.co.uk/cake/tutorials/"&gt;Tutorials&lt;/a&gt; section can be a very interesting read: I wanted to add some &lt;span class="caps"&gt;AJAX&lt;/span&gt; bits to my site, but the documentation about this seemed pretty scarce, so I headed to the &lt;a href="http://grahambird.co.uk/cake/tutorials/ajax.php"&gt;Ajax Task List&lt;/a&gt; tutorial and it really helped.&lt;/p&gt;
&lt;p&gt;On the blogs front, on the other hand, &lt;a href="http://cakebaker.42dh.com/"&gt;Cake Baker&lt;/a&gt; seems to be the most active: I&amp;#8217;m starting to check this one often (OK, I&amp;#8217;d better subscribe to the &lt;span class="caps"&gt;RSS&lt;/span&gt; feeds, perhaps) because it seems to be &lt;span class="caps"&gt;THE&lt;/span&gt; best place to get the latest news about everything concerning CakePHP: The author seems to post quite frequently (there&amp;#8217;s always a new post every 1-3 days maximum) includes short code snippets when necessary and report news when there&amp;#8217;s anything to report.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sentino.wordpress.com/"&gt;Sentino&lt;/a&gt; is also an interesting place to learn new things about CakePHP: the only problem is that the author seems to post less frequently&amp;#8230; the blog seems to have some sort of &amp;#8220;milestone&amp;#8221; schedule, publishing something when there&amp;#8217;s something big enough to justify a post. If you want to subscribe to a less frequent blog with only the essentials about Cake, this is a good choice.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rossoft.wordpress.com/"&gt;RosSoft&lt;/a&gt; unlike the others mentioned up to now has a much more technical approach: no news about Cake or anything, just some &lt;span class="caps"&gt;REALLY&lt;/span&gt; useful real-world example of Cake helpers, components etc. etc., with &lt;span class="caps"&gt;FULL&lt;/span&gt; source code to cut and paste. Really handy if you need something specific, truly excellent for beginners to have a look at how Cake classes should be written. &lt;br /&gt;
Among the most interesting fully working snippets:&lt;br /&gt;
&lt;a href="http://rossoft.wordpress.com/2006/03/29/ip-to-country-component-geo-location/"&gt;IP-to-country component&lt;/a&gt; &lt;br /&gt;
&lt;a href="http://rossoft.wordpress.com/2006/03/27/poor-mans-cron-component/"&gt;Poor man&amp;#8217;s cron component&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://rossoft.wordpress.com/2006/03/16/image-auth-component/"&gt;Image Auth &amp;#8211; &lt;span class="caps"&gt;CAPTCHA&lt;/span&gt; component&lt;/a&gt;&lt;/p&gt;
&lt;p style="float:right;"&gt;&lt;img src="http://xcite-online.de/spliceit/themes/SpliceIt/logo.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.thinkingphp.org/"&gt;ThinkingPHP&lt;/a&gt; is another &amp;#8220;technical&amp;#8221; Cake blog, with interesting code snippets and thoughts about our favourite &lt;span class="caps"&gt;PHP&lt;/span&gt; framework. For those who don&amp;#8217;t know or don&amp;#8217;t remember him (yes, like me&amp;#8230;), he&amp;#8217;s the author of &lt;a href="http://xcite-online.de/spliceit/"&gt;SpliceIt!&lt;/a&gt;&amp;#8230; what?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;SpliceIt!&amp;#8217;s mission is to provide a clean and light-weight code base for people who want to create complex webapps faster then ever. The things we want to provide are:&lt;br /&gt;
    &amp;#8211; User/Right Managment&lt;br /&gt;
    &amp;#8211; Theming Support&lt;br /&gt;
    &amp;#8211; i18n&lt;br /&gt;
    &amp;#8211; Url Aliasing&lt;br /&gt;
    &amp;#8211; and most notabily: Modularization of often used Code Segments&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;i.e. something I should have checked before recoding this website. I&amp;#8217;ll definitely keep this in mind for the next release of h3rald.com.&lt;/p&gt;
&lt;p style="float:left;"&gt;&lt;img src="http://rdos.rd11.com/img/rd11/rdlogo.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rd11.com/posts"&gt;Posts@ rd11&lt;/a&gt; a.k.a. gwoo [and seth]&amp;#8216;s blog. Moment of silence. Gwoo is CakePHP&amp;#8217;s project manager (respect+) and one of the lead developers of CakePHP and he also actually uses Cake for his website and blog instead of WordPress :)&lt;br /&gt;
What can I write about him. It&amp;#8217;s difficult. I&amp;#8217;ll avoid all possible pseudo-religious comparisons but when I say that &lt;em&gt;he created CakePHP&lt;/em&gt; I think I say it all. The code he used for his blog is part of a collection of open-source, Cake-powered tools all prefixed with rd- or Cake, available on &lt;a href="https://cakeforge.org/projects/rdos"&gt;CakeForge&lt;/a&gt;. I personally think that looking at his sample applications can be one of the best way to learn how to bake &lt;em&gt;properly&lt;/em&gt;, and yes, I &lt;strong&gt;did&lt;/strong&gt; check them out before coding this site for the second time. Demos are &lt;a href="http://rdos.rd11.com/"&gt;online&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s it. These are perhaps the most well-known bakers and/or Cake bloggers on the planet. There are certainly others, maybe even in other languages, but now I&amp;#8217;d better stop writing now, because this is a rather long blog post. Sorry. I&amp;#8217;m new to blogging and I just can&amp;#8217;t help myself: especially with Cake, I need to write lenghty texts!&lt;br /&gt;
More to come&amp;#8230;&lt;/p&gt;</description>
      <pubDate>Tue, 11 Apr 2006 09:03:00 -0600</pubDate>
      <guid>http://www.h3rald.com/articles/11/</guid>
      <link>http://www.h3rald.com/articles/11/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/11/#comments</comments>
      <category>cakephp</category>
    </item>
    <item>
      <title>New site operative</title>
      <description>&lt;p&gt;Yes, it works. Perhaps it&amp;#8217;s a tiny bit slower than expected but the new h3raLd.com seems to work.&lt;br /&gt;
I&amp;#8217;ll probably find some new exciting bugs to fix in the next few hours, as usual &amp;#8211; that will be annoying but perfectly normal.&lt;/p&gt;
&lt;p&gt;&lt;del&gt;The good thing is that the new template seems to load faster, mostly due to the fact that I hardly used images&lt;/del&gt; &amp;lt;- [not true, te new site appears to be slower, maybe not due to the images], at any rate, let&amp;#8217;s see how it goes. I can imagine I&amp;#8217;ll have to implement some sort of caching system for the tagging system in particular, but fortunately &lt;a href="http://www.cakephp.org/"&gt;CakePHP&lt;/a&gt; apparently comes with a built-in caching mechanism for views, models etc. etc. although the documentation available seems to be &lt;a href="http://groups.google.com/group/cake-php/browse_thread/thread/f0f96751bb61bc7b/bcb43c97e91923c7?q=caching&amp;amp;rnum=1#bcb43c97e91923c7"&gt;scarce&lt;/a&gt; at the moment, and I&amp;#8217;ve been to lazy to investigate any further.&lt;/p&gt;</description>
      <pubDate>Thu, 06 Apr 2006 08:57:00 -0600</pubDate>
      <guid>http://www.h3rald.com/articles/8/</guid>
      <link>http://www.h3rald.com/articles/8/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/8/#comments</comments>
      <category>website</category>
      <category>webdevelopment</category>
      <category>cakephp</category>
    </item>
    <item>
      <title>CakePHP - A 'tasty' solution for PHP programming</title>
      <description>Web developers can either love or hate PHP, and one of the criticisms of this easy-to-use programming language which is repeated over and over on IRC, forums and blogs is that "PHP is disorganized".&lt;br /&gt;
Is this really true? If so, is there any possible way to write a PHP application in a logical and clean way? Read on...Every web developer has certainly heard of PHP. Some people like it and consider it a powerful and easy-to-use way to create complex websites or web applications, while others are convinced that it is merely a bad copy of Perl.  Opinions are certainly mixed on the matter.&lt;br /&gt;
&lt;br /&gt;
One thing to keep in mind when reading criticisms of PHP is its origins, as therein lies the crux of the matter. PHP was created as a form interpreter, initially offering only a &lt;em&gt;very limited&lt;/em&gt; range of functionality.  Its main purpose was to make life easier for web developers who wanted to do simple tasks,  like manipulating form data.&lt;br /&gt;
&lt;br /&gt;
People liked the concept - PHP was free and it quickly became popular among developers. More functionality was added and continues to be added with each new release, and PHP is now one of the most popular and powerful programming languages available for web development.It is relatively easy to learn, compared to Perl, ASP, or JSP, and it can be used for almost anything[1].&lt;br /&gt;
&lt;br /&gt;
The sheer simplicity of the language was most likely the cause of the enormous amount of exploits discovered through the years which earned PHP the label "&lt;em&gt;too dangerous to use in 'proper' applications&lt;/em&gt;". The danger, however, lies not in the language itself, but rather in the &lt;em&gt;way&lt;/em&gt; developers make use of the language: PHP's simplicity makes writing bad or exploitable code extremely easy. Furthermore, PHP's ability to be placed within any HTML page with the greatest of ease tempted developers to write ever-increasing amounts of 'spaghetti code', which by its very nature is neither organized nor clean code, and certainly does not help a developer learn how to write organized or clean code.&lt;br /&gt;
&lt;br /&gt;
These problems, however, can be solved.  There are many ways to go about doing this, but the easiest, most effective way is to create a framework[2]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Bringing Order to Chaos&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
After learning some PHP myself, I remember noticing that my applications were growing in a disorganized and uncontrollable manner. Things tended to be added at the last minute, and bugs were fixed and patched 'on the fly' wherever they occurred.  PHP lacked the structure that is present in most other programming languages.  I remember reading the word &lt;em&gt;framework&lt;/em&gt; for the first time not too long ago while I was downloading a Windows Update of the .NET framework[3].  That inspired me to start searching the Internet for a 'PHP framework'.  That led me to an interesting blog entry[4] where a solution was proposed - a solution to &lt;em&gt;bring order to chaos&lt;/em&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;fieldset&gt;&lt;blockquote&gt;&lt;br /&gt;
[...] The answer is simple: create our own class library, some kind of framework, the PHP framework. The similar in many ways to that one which is already well known to Java or .NET programmers. We could set the standards, structure and main guidelines. [...]&lt;br /&gt;
&lt;/blockquote&gt;&lt;/fieldset&gt;&lt;br /&gt;
&lt;br /&gt;
That blog post made me think about developing my own framework, until I noticed that there were many projects already in progress, and some in fact completed; the end result being a  fully functional PHP framework.  I read a lot about some of them[5], and abandoned the idea of developing my own, because as a good developer, I believe I should never re-invent the wheel. So I kept looking. I found Pear[6], although that's more a repository of PHP classes with a common standard than a framework, while I was looking for THE solution to developing many types of applications, not merely how to do one thing in particular.&lt;br /&gt;
&lt;br /&gt;
I came across a very promising project named Prado[7], which  won the latest Zend contest, and was considered the best PHP5 application of the year. It is a masterpiece of coding and PHP5 usage, so I tried to learn it.  I even developed a website with it.&lt;br /&gt;
&lt;br /&gt;
Prado lets the developer design the application without imposing any ready-made components, but I found its event-driven[8] approach neither easy to learn nor suitable for everyday web applications. I did not like the idea of having to code a reaction to every event (like a click on a button or different phases of page rendering): that is the approach that ASP takes, and at least in that respect, Prado seems to be inspired by the .NET framework.  Event-driven programming is suitable for GUI development and desktop-based interfaces, but not for web applications.&lt;br /&gt;
&lt;br /&gt;
After trying Prado, I was still unsatisfied, so I once again began my search for a solution to improve my programming. My meanderings took me to Ruby on Rails[9], one of the most recent examples of technology hype on the Net.  At the same time,to a  certain extent, it is also a successful tool. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;The Rails Phenomenon&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;fieldset&gt;&lt;blockquote&gt;&lt;br /&gt;
"Rails is a full-stack, open-source web framework in Ruby for writing real-world applications with joy and less code than most frameworks spend doing XML sit-ups."&lt;br /&gt;
&lt;/blockquote&gt;&lt;/fieldset&gt;&lt;br /&gt;
&lt;br /&gt;
That sounded like what I was looking for, and  I started reading more about it in the vast and varied help sections[10] available both on and off of the official site. The Rails team did an outstanding job promoting and marketing the framework, and also in providing comprehensive textual documentation (and even video tutorials) to help both beginners as well as experienced programmers get started with it.&lt;br /&gt;
&lt;br /&gt;
Briefly, Rails uses Ruby's object oriented programming, in conjunction with the MVC pattern and various automated scripts (generators), to help developers program their applications quickly and in a solid and organized way.  However, as that is neither clear nor convincing, let's spend a few moments on the MVC Pattern[11], which will also be useful to understanding the following sections.&lt;br /&gt;
&lt;br /&gt;
MVC stands for &lt;strong&gt;M&lt;/strong&gt;odel &lt;strong&gt;V&lt;/strong&gt;iew &lt;strong&gt;C&lt;/strong&gt;ontroller: these three words enclose - and this is just a personal opinion - all the wisdom and philosophy of web development, describing - once again, in my opinion - the three most logical parts a web application &lt;em&gt;should&lt;/em&gt; be divided into to achieve code robustness, order and power, all at the same time.  Let's look at what each of the component parts mean in detail:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
[*]&lt;strong&gt;Model&lt;/strong&gt;: The model represents the very essence of the &lt;em&gt;information&lt;/em&gt; and &lt;em&gt;content&lt;/em&gt; of a web application. Imagine this as an object able to gather the information and content of your webpages from a particular resource, such as a database. The model is the only entity able to access resources.&lt;br /&gt;
[*]&lt;strong&gt;View&lt;/strong&gt;: The view is an attempt to separate the most unstable part of an application: the user front-end. A view is only responsible for presenting the information that the Model gathered. A view does nothing but format the output, and can be compared to a template or report. In all MVC frameworks for web applications, only view files contain (X)HTML code, and mostly only that. They can therefore be changed &lt;em&gt;at any time&lt;/em&gt; without having to touch a single line of the business logic of your application.&lt;br /&gt;
[*]&lt;strong&gt;Controller&lt;/strong&gt;: The controller is the 'brain' of the application. Consider it to be the only part of your program that can 'think' and manage the other parts. Controller files are the only ones able to &lt;em&gt;order&lt;/em&gt; the Model to gather information and then pass the information obtained to the view for display.  &lt;br /&gt;
&lt;/ul&gt; &lt;br /&gt;
&lt;br /&gt;
Although the MVC seems to make things more complicated, that is part of the objective.  Since one of the advantages (and weaknesses) of PHP was its simplicity, the MVC adds complexity to bring more order and logic to the design process. The three entities are separated for just that reason, and trying to put them together can result in potential disasters, since it causes the whole  pattern to fail.&lt;br /&gt;
&lt;br /&gt;
Coming back to Rails, I was quite impressed by the features it offered, but there was a small problem: the Ruby programming language itself. I experienced some difficulties in setting up the environment properly, and I also discovered that most standard hosting companies do not offer Ruby hosting plans as standard. Hosting issues aside, I would have had to learn Ruby in order to master Rails, and I really did not have the time for that: I had to develop a website quickly and easily, preferably with languages I already knew.&lt;br /&gt;
&lt;br /&gt;
After deciding to abandon Rails (for the moment, anyway), I was amazed by the number of projects in other programming languages that try to emulate the famous Ruby framework, to the point of being considered &lt;em&gt;clones&lt;/em&gt; or ports of it to another language.  To my knowledge, the &lt;em&gt;Rails disease&lt;/em&gt; contaminated the following programming languages:&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;PHP&lt;/li&gt;[12]&lt;br /&gt;
&lt;li&gt;Python&lt;/li&gt;[13]&lt;br /&gt;
&lt;li&gt;Java &lt;/li&gt;[14]&lt;br /&gt;
&lt;li&gt;Perl &lt;/li&gt;[15]&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
I said &lt;em&gt;disease&lt;/em&gt; because Rails developers think that Ruby on Rails was made in Ruby for a reason, namely that Ruby offered some unique features that were not available in other languages.  I will not delve into that topic here; more information is available[16] for those who are interested.  However, suffice it to say that there are some Rails ports in PHP that were immediately attacked because of the fact or legend that the creator of Rails originally wanted to develop his framework in PHP and then switched to Ruby.   Let's examine one of those PHP frameworks in detail.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;CakePHP: Just Another Rails Clone?&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
I chose to learn CakePHP (or "Cake")[17] mainly because it offered more features than the other two PHP alternatives.  It also  seemed to be a more original and actively developed project.  In particular, I'd like to quote one of CakePHP's developers, from when he introduced the framework in a comment to a blog post[16]: &lt;br /&gt;
&lt;br /&gt;
&lt;fieldset&gt;&lt;blockquote&gt;&lt;br /&gt;
"While it's difficult to copy Rails in PHP, it's quite possible to write an equivalent system. I like the terseness of Ruby code, but I need the structure that Rails provides, how it makes me organize my code into something sustainable. That's why I'm ripping off Rails in Cake."&lt;br /&gt;
&lt;/blockquote&gt;&lt;/fieldset&gt;&lt;br /&gt;
&lt;br /&gt;
Cake's developers (bakers?) are developing their own framework which uses many principles of Ruby on Rails, revisited and re-proposed in an extremely flexible and easy to use PHP tool, rather than simply trying to port Rails to PHP. I also liked the fact that they bothered to choose an original name for their project, unlike others: there are too many "&amp;lt;insert language here&amp;gt;-on-Rails" frameworks, and while the whole "Rails" thing is innovative and catchy the first time, it loses its appeal quickly when people use the word everywhere just because it is "fashionable".&lt;br /&gt;
&lt;br /&gt;
Quoting from CakePHP's website:&lt;br /&gt;
&lt;br /&gt;
&lt;fieldset&gt;&lt;blockquote&gt;&lt;br /&gt;
"Cake is a rapid development framework for PHP which uses commonly known design patterns like ActiveRecord, Association Data Mapping, Front Controller and MVC. Our primary goal is to provide a structured framework that enables PHP users at all levels to rapidly develop robust web applications, without any loss to flexibility." &lt;br /&gt;
&lt;/blockquote&gt;&lt;/fieldset&gt;&lt;br /&gt;
&lt;br /&gt;
That sounds like the Holy Grail for PHP developers, and I must admit I'm quite impressed myself after using it on various little projects, but is it really all true? What are Cake's features? Are there any limitations?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;The Ingredients&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
So what is Cake?  In the previous sections, I introduced some general concepts and ideas common to Ruby on Rails and CakePHP, but nothing in particular was said about the structure of the framework itself.  Let's now turn to that and discuss it in some detail, particularly as it pertains to Cake.&lt;br /&gt;
&lt;br /&gt;
The first thing to understand about Cake (and Rails as well) is that one of their aims was to avoid editing long and complex configuration files in order to run the environment.  The approach in this sense is to use &lt;em&gt;conventions&lt;/em&gt; over &lt;em&gt;configuration&lt;/em&gt;. This may sound terribly restrictive, but in reality it proved  to make things much simpler. After all, I said I wanted to use a framework because I needed a solid structure to base my applications on, not that I needed to be able to create and personalize my own structure and system. Cake uses some simple rules in order to run properly, and the easiest way to explain them is through Cake's directory structure, which represents the skeleton of every CakePHP application.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;em&gt;/&lt;br /&gt;
---app/&lt;br /&gt;
------config/&lt;br /&gt;
------controllers/&lt;br /&gt;
---------components/&lt;br /&gt;
------models/&lt;br /&gt;
------plugins/&lt;br /&gt;
------views/&lt;br /&gt;
---------elements/&lt;br /&gt;
---------errors/&lt;br /&gt;
---------helpers/&lt;br /&gt;
---------layouts/&lt;br /&gt;
---------pages/&lt;br /&gt;
------webroot/&lt;br /&gt;
---------css/&lt;br /&gt;
---------files/&lt;br /&gt;
---------img/&lt;br /&gt;
---------js/&lt;br /&gt;
&lt;/strong&gt;---cake/&lt;br /&gt;
------config/&lt;br /&gt;
---------inflections/&lt;br /&gt;
------docs/&lt;br /&gt;
------libs/&lt;br /&gt;
---------controller/&lt;br /&gt;
---------generator/&lt;br /&gt;
---------model/&lt;br /&gt;
---------view/&lt;br /&gt;
------scripts/&lt;br /&gt;
---tmp/&lt;br /&gt;
------cache/&lt;br /&gt;
------distro/&lt;br /&gt;
------logs/&lt;br /&gt;
------tests/&lt;br /&gt;
---vendors/&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
I expanded only the first three levels of the tree, although there are more levels in the &lt;em&gt;/cake/&lt;/em&gt; directory.  They won't be considered here simply because the &lt;em&gt;/cake/&lt;/em&gt; directory contains CakePHP's internal libraries, which normally will not be modified when developing an application.  The &lt;em&gt;/tmp/&lt;/em&gt; directory also will not be elaborated upon either, because it is only used to store temporary files. However, the &lt;em&gt;/vendor/&lt;/em&gt; directory should contain third party scripts and libraries that you may want to use in your application, but they are not normally integrated with Cake's framework.  95% of your application will reside within the &lt;em&gt;/app/&lt;/em&gt; directory, which we therefore need to examine in greater detail.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;em&gt;/config/&lt;/em&gt;&lt;/u&gt;&lt;br /&gt;
When I said that Cake strives to use conventions over configuration, I really meant it.  This directory does not contain thousands of configuration files, only five very small ones. They represent the only items which &lt;em&gt;might&lt;/em&gt; need to be configured. &lt;br /&gt;
&lt;br /&gt;
[list]&lt;br /&gt;
[*]&lt;strong&gt;acl.ini.php&lt;/strong&gt;: This file must be edited only if you plan to use Cake's default ACL (access control list) system for your application. It sets permissions for the application, so it should be used to list every group, user, and their respective rights. This can be useful for small sites with a few well known users, but for anything else, you should develop your own ACL or authentication system that relies on a database.   &lt;br /&gt;
[*]&lt;strong&gt;core.php&lt;/strong&gt;: This file can be edited to change some default options, such as the level of the error messages and notices that the application will output. This comes in very handy while developing an application.&lt;br /&gt;
[*]&lt;strong&gt;database.php.default&lt;/strong&gt;: This should be renamed to database.php and edited if you plan to use any databases with Cake. The settings are fairly straightforward, and include the type of database used (mysql, postrgres, sqlite, or any other supported by the AdoDB library[18]), username, password and database name.&lt;br /&gt;
[*]&lt;strong&gt;paths.php&lt;/strong&gt;: Unless you are very particular, you should leave this file alone. It tells Cake where to look for CSS files, images, controllers, etc. If you are planning to adopt Cake's directory structure - which is the most logical option - you can ignore this.&lt;br /&gt;
[*]&lt;strong&gt;routes.php&lt;/strong&gt;: Following Rails' example, CakePHP features a "routing system" for user-friendly URLs. By default, your URLs will look like this: &lt;em&gt;http://sitename/controller-name/action-name/eventual/action/parameters&lt;/em&gt;, which is a really nice way to organize a site, but you may want to change something if you have particular requirements. &lt;br /&gt;
[/list]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;em&gt;Controllers&lt;/em&gt;&lt;/u&gt;&lt;br /&gt;
As mentioned previously, a controller represents the "brain" of the MVC pattern, the part which controls what the other parts are doing. Imagine a controller like a section of your site: its name will be present on the address bar, and each of these sections will have a file named &amp;lt;something&amp;gt;_controller.php, and will also contain a class named SomethingController that extends the AppController class. This class will  have some methods that correspond to some standard actions like &lt;em&gt;index&lt;/em&gt; (the default action called when you access the &lt;a href="http://sitename/controller/"&gt;http://sitename/controller/&lt;/a&gt; page) or other user-defined ones like &lt;em&gt;add&lt;/em&gt; or &lt;em&gt;list&lt;/em&gt; or &lt;em&gt;admin&lt;/em&gt;, depending on the application. As a general rule, you want to add any 'business logic' you want to implement in your application in controllers - for example, calculations or a database query that produces a result. &lt;em&gt;Then&lt;/em&gt; once all the mess is done, the result (usually an array or a variable) is passed to the view (see &lt;em&gt;views&lt;/em&gt; below). &lt;br /&gt;
 &lt;br /&gt;
If this is starting to sound too technical for you, I recommend reading a tutorial[19] available on the CakePHP website about creating a simple blog application. The tutorial will explain most of Cake's basics, including how to pass a variable from a Controller to the corresponding view &lt;em&gt;($this-set('variableNameInView', $variable))&lt;/em&gt; and other useful things.&lt;br /&gt;
&lt;br /&gt;
Recently &lt;em&gt;Components&lt;/em&gt; have been added to CakePHP, and quoting from the corresponding wiki page[20]:&lt;br /&gt;
&lt;fieldset&gt;&lt;blockquote&gt;&lt;br /&gt;
"Components are the preferred way to provide additional functionality to your controller. To make a component available you would add var $component = array('myComponent') inside of your controller's definition, add your file to the /app/controllers/components, name your class MyComponent, and create your methods."&lt;br /&gt;
&lt;/blockquote&gt;&lt;/fieldset&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;em&gt;Models&lt;/em&gt;&lt;/u&gt;&lt;br /&gt;
A model is an object able to access the database. In Cake's terms, that is any class extending the AppModel class. That class is directly under the &lt;em&gt;/cake/&lt;/em&gt; directory (along with the previously mentioned AppController class), and can be moved to the &lt;em&gt;/app/&lt;/em&gt; directory and modified if you want to add some particular site-wide behavior to it which will be inherited by all models extending it.&lt;br /&gt;
&lt;br /&gt;
In even simpler terms, you need to create a Model class for every table you're planning to use in your database. A convention in Cake says that database table names should be plural and that the corresponding model should be singular. If you use a table named 'mice', your model should be named 'mouse': Cake is smart enough to understand irregular plurals through an &lt;em&gt;Inflector&lt;/em&gt; class.&lt;br /&gt;
&lt;br /&gt;
Creating a model class for basic use is trivial:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class Post extends AppModel&lt;br /&gt;
{&lt;br /&gt;
    var $name = 'Post';&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then you'll be able to access the model (and therefore the database) from a controller via simple instructions like $this-&amp;gt;Post-&amp;gt;findAll(). This instruction will query the database and return all records within the Posts table in your database.  You can also perform more complex operations, and also specify SQL queries to execute, if you need to, but remeber that models can only be accessed through controllers! If you need some information stored in your database to be displayed on a view, execute the query from the controller and pass it to the view as per the MVC pattern.  It can prevent you from cluttering views with business logic and thereby making code updates much harder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;em&gt;Views&lt;/em&gt;&lt;/u&gt;&lt;br /&gt;
Views are used to present information gathered with a model and a controller to the public. They are mostly HTML pages with some PHP tags in them, prints of variables and maybe some &lt;em&gt;foreach&lt;/em&gt; loops. Nothing more than that should be used in a view!&lt;br /&gt;
&lt;br /&gt;
Views must be placed in this directory and obey the following conventions:&lt;br /&gt;
&lt;br /&gt;
1. They must be named after a controller's action to allow the controller to refer to a particular view automatically. The same view can be used by multiple controllers, but it must be either set manually or through a layout (see below).&lt;br /&gt;
2. Views referring to an action of a particular controller must be placed under a subfolder named after the controller.&lt;br /&gt;
3. All views must have a .thtml extension.&lt;br /&gt;
&lt;br /&gt;
Any site-wide view, like the site's template, must be placed under the &lt;em&gt;layouts&lt;/em&gt; subfolder. In particular, the default.thtml file in the folder represents the global template for your application: page titles and specific pages (views) will be invoked automatically by using $title_for_layout and $content_for_layout respectively.&lt;br /&gt;
&lt;br /&gt;
Similarly to what was said about components, &lt;em&gt;helpers&lt;/em&gt; can be used to extend views functionalities[20]:&lt;br /&gt;
&lt;br /&gt;
&lt;fieldset&gt;&lt;blockquote&gt;&lt;br /&gt;
"Helpers are all about the view. You know about the helpers in Cake, but you need a little bit more. You want to have your own methods to display formatted info. To achieve this, you need to add var $helpers = array('myHelper').&lt;br /&gt;
&lt;br /&gt;
Now, throw your myhelper.php file into the /app/views/helpers/, create the class MyHelper, and $myHelper is available in the view." &lt;br /&gt;
&lt;/blockquote&gt;&lt;/fieldset&gt;   &lt;br /&gt;
&lt;br /&gt;
Cake comes with some very useful default helpers to create links and HTML tags, import JavaScript, create forms, and use AJAX code easily. Unlike most other frameworks, Cake neither has nor uses a third party template engine (like Smarty[21]) for views, but helpers can be used to achieve similar results more quickly than an engine can.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;em&gt;Plugins&lt;/em&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
Plugins are user-developed enhancements for Cake. Unlike the files placed under the &lt;em&gt;vendor&lt;/em&gt; directory, a plugin is an application specifically made to be used within the CakePHP environment. At the moment this feature is still under development.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;em&gt;Webroot&lt;/em&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
If you read carefully what I wrote above about routes, you might be wondering if &lt;em&gt;every&lt;/em&gt; page must have a controller and a view in order to be displayed properly. What about images, JavaScript and CSS files? The answer is this directory: everything you place here will not be seen as part of the MVC-based environment; CSS files can be stored in the &lt;em&gt;/css&lt;/em&gt; folder, Javascript under &lt;em&gt;/js&lt;/em&gt;, and so on. Additionally, some helpers can provide a easier way to access or display images, scripts, CSS, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;em&gt;Other Features&lt;/em&gt;&lt;/u&gt;&lt;br /&gt;
Cake offers even more than this; the latest releases have introduced a few more Rails-inspired features:&lt;br /&gt;
&lt;br /&gt;
[list]&lt;br /&gt;
[*]&lt;strong&gt;Scaffolding&lt;/strong&gt;: Do you want to test your application without spending time writing all the CRUD (Create, Read, Update, Delete) code? That's where the concept of scaffolding comes in:  by setting a few variables in the right places[22], Cake will generate basic mechanisms to add, edit, list, and delete records in your database, along with all the associated view files. You won't have to code a single form, as everything will be generated automatically by the framework according to SQL field types.&lt;br /&gt;
[*]&lt;strong&gt;Bake&lt;/strong&gt;: Another Rails-inspired feature revisited in PHP. Rails uses a set of scripts and in particular the &lt;em&gt;rake&lt;/em&gt; utility to instantaneously create the foundation for a Rails application with scaffolds already in place.  CakePHP offers the same functionality through the &lt;em&gt;bake&lt;/em&gt; utility, which is currently available as either a batch file or a PHP script.&lt;br /&gt;
[*]&lt;strong&gt;ACL&lt;/strong&gt;: As previously mentioned, Cake comes with a ready-made Access Control List (ACL) system, which can be extended and used to restrict particular areas of a Cake application to certain users or user groups.&lt;br /&gt;
[*]&lt;strong&gt;Compatibility&lt;/strong&gt;: CakePHP is fully compatible with both PHP and PHP5.&lt;br /&gt;
[/list]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Meet the Bakers&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
After reading all these things about CakePHP and its framework, you may have some questions, or be curious about some aspect of the project. PHPNut and gwoo, two of CakePHP's creators and lead developers, offered to answer some questions exclusively for zZine readers. This interview took place on Oct. 26th, 2005, in #dev-cakephp on irc.freenode.org.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;h3rald&lt;/u&gt;:&lt;/em&gt; Thanks to both of you for allowing me to interview you about your project, CakePHP. Where did the name come from, anyway?&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;PHPnut:&lt;/em&gt; The original project was started by Michal Tatarynowicz aka Pies (hence the name), and when I saw his release, last March, I decided to contact him.  I told him that the company I own supports projects like Cake, and also that I was in the process of developing something along the same lines. &lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;h3raLd&lt;/u&gt;:&lt;/em&gt; Is Cake released under the GPL? How many developers are helping out?&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;gwoo:&lt;/em&gt; Cake is released under the MIT license, and the development team is composed of me and PHPnut, plus four other contributors. Then there's the Documentation Team, currently 3-5 people. Documentation has to follow the releases, so it usually lags behind a bit: we made so many modifications in the recent release that the Doc Team has a lot to catch up on, but it's getting there.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;PHPnut:&lt;/em&gt; With this release you will see that the docs are going to be much better. The code is very stable now, and hopefully very little changes on that.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;h3raLd&lt;/u&gt;:&lt;/em&gt; Some people, at first glance, may think that Cake is a PHP port of Ruby on Rails. How true is that? What are the differences and similarities between these two frameworks?&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;PHPnut:&lt;/em&gt; Cake started as a port, but has evolved into something more: we discussed using the concepts that RoR offered and including them in a framework for users of PHP.  I have used PHP for a number of years, and  I am comfortable with it; this is where my passion is, and I think people who use Cake have those same passions as we developers do.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;h3raLd&lt;/u&gt;:&lt;/em&gt; I read once that Rails was developed in Ruby because only Ruby can offer certain functionalities and features...&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;gwoo:&lt;/em&gt; I would disagree, and I think that is proven in what we have done: sure RoR has a built in server and some other nice things, but PHP is everywhere.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;h3raLd&lt;/u&gt;:&lt;/em&gt; Some developers, especially Perl programmers, tend to consider PHP an "inferior" language sometimes.  What do you think of that?&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;PHPnut:&lt;/em&gt; My name says what I think about them all.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;gwoo:&lt;/em&gt; PHP is a web programming language; that's what it was designed for, and that's what it does best: It all boils down to what you are comfortable with.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;h3raLd&lt;/u&gt;:&lt;/em&gt; Did you try any other PHP frameworks, MVC-based (Mojavi, for example), or event-driven, like Prado? What do you think about them? In what ways can Cake be better or worse?&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;gwoo:&lt;/em&gt; They are all so complex, in my opinion, and I tried nearly all of them. Cake breaks apart the MVC and handle the CRUD in a logical way, and Cake syntax is super easy to learn.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;h3raLd&lt;/u&gt;:&lt;/em&gt; Ruby on Rails has been ported to various languages, including Java and Python. There are three PHP frameworks inspired by the famous Ruby project: Biscuit, PHP on Tracks and CakePHP.  What do you think of that? Any chance of a merge? Did you have a look at them?&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;gwoo:&lt;/em&gt; You forgot Symfony[27], a PHP5-only port: I tried it but it seems much harder to learn than Cake.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;PHPnut:&lt;/em&gt; I could be wrong, but I think these other projects are behind us in ease of use, in what the framework is capable of doing, and in  features, not to mention community support.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;gwoo:&lt;/em&gt; I tried all of the PHP ports of Ruby on Rails and none of them has the features, the community,or a lexicon as good as Cake's.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;h3raLd&lt;/u&gt;:&lt;/em&gt; Why don't you consider CakePHP a port? In what way is it evolving from Rails?&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;PHPnut:&lt;/em&gt; Rails and CakePHP share a lot: MVC pattern, Active Record pattern...but we're not strictly following Rails, and we're able to think by ourselves. Recently we changed the directory structure, and in my opinion our is more functional than the Ruby on Rails one.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;h3raLd&lt;/u&gt;:&lt;/em&gt; What can Cake be used for? What kind of projects? Are there any limitations?&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;gwoo:&lt;/em&gt; Personally I think that Cake is the most extensible framework out there for PHP: with components, helpers and vendor access you can do anything you want!&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;PHPnut:&lt;/em&gt; We are limited only by what a web server (generally Apache, but IIS seems to work as well) and a database can do. We may be limited by PHP itself, but we twist that in our own little sick ways sometimes.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;h3raLd&lt;/u&gt;:&lt;/em&gt; Any thought about AJAX? I saw some nice demos made with Cake.   What do you think of this new trend in web development? Some people consider it the future, while others are concerned about compatibility, and still others are relatively indifferent to it.  What about you?&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;gwoo:&lt;/em&gt; AJAX can be very useful in creating an application, but should not be overused. People have become very comfortable with how the Web works:i f you start doing tons of drag and drop and no refreshes, users will feel lost in how to operate the site.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;u&gt;h3raLd&lt;/u&gt;:&lt;/em&gt; Thank you very much for your time, both of you. Is there anything you'd like to add to this interview? Something you'd like to say to users interested in trying out Cake?&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;PHPnut:&lt;/em&gt; Come and enjoy: we are here to help...&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;gwoo:&lt;/em&gt; ...And plan to be here for a very long time!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Let's cook...&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
One of the most positive things about CakePHP is that even though it is a fairly new project (most of the code is 100% useable already,but  they still consider the projectto be in the 'alpha' stage), it's maintained by many dedicated developers and PHP enthusiasts. I was amazed to see how the whole documentation evolves and is quite literally updatedon a daily basis. &lt;br /&gt;
Anybody can contribute to the framework or simply test it and share their experiences.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;em&gt;CakePHP Wiki&lt;/em&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
Anybody can register an account for free and contribute tutorials and documentation to the new CakePHP Wiki[23]. This is currently the most up-to-date source for documentation files and tutorials.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;em&gt;CakePHP User Group&lt;/em&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
If you need assistance or you want to contact the Cake developers or other Cake users, you can post a message on their Google User Group[24]: people will reply with useful comments, usually on the same day, and the developers &lt;em&gt;do&lt;/em&gt; listen to user suggestions.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;em&gt;CakePHP IRC Channel&lt;/em&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
If you want to offer (or receive) real-time assistance, feel free to join #cakephp on FreeNode (irc.freenode.org). I went there disguised as a total newbie (it wasn't much of a stretch) and they helped me a lot, explaining basic concepts of the framework and pointing me to the right documentation files.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;em&gt;CakePHP Development&lt;/em&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
Experienced PHP developers are more than welcome to contribute to the project. People may be accepted to the core development team if they have sufficient knowledge and spare time, or alternatively,components or code can be submitted through the newly created CakeForge[24].  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;...Or Just Eat&lt;/strong&gt; [small]&lt;em&gt; by Marc Abramowitz&lt;/em&gt;[/small]&lt;br /&gt;
&lt;br /&gt;
If you don't feel ready to contribute and you'd like to try out the framework first, it can be downloaded directly from the CakePHP site[25] as either a  &lt;em&gt;release&lt;/em&gt; or a &lt;em&gt;nightly&lt;/em&gt; build: the zip file is less than 300KB.&lt;br /&gt;
&lt;br /&gt;
I wanted to include a &lt;em&gt;success story&lt;/em&gt; written by Marc Abramowitz, an experienced PHP programmer who decided to adopt CakePHP as a framework to use in a production environment: he persuaded his colleagues to use it and they all seem happy with it.  He writes:&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;For the past few years, I've done quite a bit of work in PHP, working on production code that runs on a very high traffic web site. PHP has served us well, as it is easy to write and read, quite efficient, and easy to integrate with existing C++ code as the site grew.&lt;br /&gt;
&lt;br /&gt;
Lately, there has been a lot of buzz in the web development community about Ruby on Rails. Like many others, I took some interest in Ruby on Rails because I was intrigued by the apparent power and elegance of Ruby and because I wondered if a Model/View/Controller (MVC) framework like Rails would help enforce a more consistent code structure that would make the code easier to understand and maintain. Additionally, I wondered if an MVC framework would enable very rapid prototyping.&lt;br /&gt;
&lt;br /&gt;
Some people are very wary of frameworks that impose structure, as they like to have the freedom to do things however they want. However, there is a tradeoff between structure and flexibility. If you're working on a small team or a relatively small project, then you may not find structure to be very helpful; you may even find that it gets in your way. &lt;br /&gt;
&lt;br /&gt;
However, as teams and projects get larger, structure becomes more and more valuable, as it enforces consistent patterns of how to do things and rather than being something that limits, it in fact liberates, because it abstracts away the small details and allows us to therefore concentrate on the larger problem. Think of the lines that are painted on our roadways - although they add structure, we don't find them to be limiting. On the contrary, they help us to drive without worrying about crashing into each other at every moment - they free us from being concerned with small details so that we can concentrate on getting where we're going.&lt;br /&gt;
&lt;br /&gt;
Rapid prototyping appeals to me, because I find it helps me to better present my ideas for new apps and features. A mockup can only go so far - there is no substitute for a working prototype. When clients get their hands on a functional prototype, they get a better idea of what is possible and it forces them to clarify their requirements for the product. This results in a better dialogue between the developer and the client, which leads to better upfront decisions, more stable requirements, less stress, and a better product.&lt;br /&gt;
&lt;br /&gt;
So, Rails appealed to me not only because of the potentially valuable structure that it could add, but also because it could enable rapid prototyping. However, I knew that there was no chance of Rails being used for production code in my organization, because we run some very high traffic web sites that require the utmost in efficiency.  We are also by and large a PHP shop.&lt;br /&gt;
&lt;br /&gt;
However, when my manager approached me and asked me to develop a database-backed internal tool, I thought of Rails again.  I then considered the fact that I would probably someday have to hand this app off to someone else, and that someone would probably know PHP but not Ruby. Heck, even I had several years of experience with PHP (including writing some PHP extensions) but I had only done a little bit of reading about Ruby, and I also had no practical experience with it.&lt;br /&gt;
&lt;br /&gt;
Furthermore, with PHP I had access to a large number of PHP extensions that wrapped various internal libraries. So PHP was the natural choice. Ideally, I wanted to use PHP with a Rails-like MVC framework that would facilitate rapid development, and this is what led me to CakePHP.&lt;br /&gt;
&lt;br /&gt;
I began by downloading CakePHP 0.9.2 and following the sample tutorial that walks you through creating a simple blog application (note that at the time of this writing, the current version of Cake is now 0.10.0.1076, so some of the details of using Cake have changed). I was pleased to find that the process was quite similar to the process for Rails. One difference that I noted was that Rails tutorials always emphasize using scripts to generate models, controller, and scaffolds, whereas the Cake tutorial walked me through explicitly writing out all the code. I noticed that the Cake download came with a script called "bake" which looked like something that could potentially do some of the code generation, but since it wasn't mentioned in the tutorial, I chose not to use it.&lt;br /&gt;
&lt;br /&gt;
The process of creating a first application using the tutorial was quite easy. Here are the steps in brief (consult the tutorial for more details):&lt;br /&gt;
&lt;br /&gt;
1. Create the database table. Cake requires tables to have some extra&lt;br /&gt;
fields:&lt;br /&gt;
  - id, an auto_increment primary key&lt;br /&gt;
  - created, a datetime&lt;br /&gt;
  - updated, a datetime&lt;br /&gt;
2. Configure Cake to access the database by editing the config/database.php file&lt;br /&gt;
3. Create a model class which extends AppModel (a Cake provided class)&lt;br /&gt;
4. Create a controller class which extends AppController (a Cake provided class) and write one or more controller methods&lt;br /&gt;
5. Create a view which is a PHP file with a .thtml extension and is meant to be mostly HTML with very little embedded PHP - typically just echoing of variables and some simple control structures like [i]foreach&lt;/em&gt;.&lt;br /&gt;
Cake also provides some simple convenience methods that write out certain HTML constructs for you.&lt;br /&gt;
&lt;br /&gt;
That's it! That alone is enough to create a basic but functional application. The tutorial goes on to show you how to add additional functionality to the blogging app. After that there's a shorter, more advanced tutorial that shows you how to add a few more things to the blogging app.&lt;br /&gt;
&lt;br /&gt;
Once I had gotten comfortable with Cake by following the tutorial, I proceeded to write my own application. Getting started was easy - I followed the same steps as in the tutorial to create my first table, model, controller, and views, then my second table, model, controller, and views. Then my app got a bit more complicated. I needed to have many-to-many relations and more elaborate queries than the default ones that Cake provides. I began to worry that Cake would break down here. I had heard people grumble that MVC frameworks like Rails and Cake were great for little toy apps that only do CRUD (Create, Read, Update, Delete), but that they couldn't handle complex queries using joins and the like. I poked around in the Cake source code and was pleased to find that there were nice lower level methods that allowed me to bypass the Cake defaults and do whatever custom queries I liked. For example, I wrote something like this in one of my models:&lt;br /&gt;
&lt;br /&gt;
function index(){&lt;br /&gt;
           return $this-findBySql(&lt;br /&gt;
               "SELECT id, title, AVG(rating) avg_rating, MIN(rating) min_rating, MAX(rating) max_rating, COUNT(rating) num_ratings " .&lt;br /&gt;
               "FROM ideas LEFT JOIN ratings ON ideas.id =&lt;br /&gt;
ratings.skill_id " .&lt;br /&gt;
               "GROUP BY id " .&lt;br /&gt;
               "ORDER BY title");&lt;br /&gt;
       }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So what I have is a model that does &lt;em&gt;not&lt;/em&gt; have a one-to-one mapping with a single table. It actually retrieves data from more than one table.&lt;br /&gt;
&lt;br /&gt;
Over time, I picked up a few more Cake concepts. For example, at some point we decided that every page of the app would have a similar look and feel with a particular masthead and logo, and all the pages in one section of the site would show tabs for all of the various views with the currently selected tab highlighted. At first, I just used the same code at the top of each of my views to display the masthead, logo, and tabs. This, of course, became a pain when I needed to change the layout, since I needed to make the same change in several different views.&lt;br /&gt;
&lt;br /&gt;
Then one day I realized that Cake had a concept of layouts, which are high level templates in  &lt;em&gt;app/views/layouts&lt;/em&gt; that define the basic structure of pages.  The individual views are just content that gets embedded in these high level layout templates. So I took the common masthead and logo, put it in my default layout, and removed it from the individual views. Now when I wanted to change the look of the masthead, I only had to do it in one place. For the tabs, I discovered the concept of elements. I placed the code for my tabs in &lt;em&gt;apps/views/elements/tabs.thtml&lt;/em&gt;.  Then the tabs could be displayed in any template using:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php echo $this-renderElement('tabs') ?&lt;br /&gt;
&lt;br /&gt;
Rather than stick the above statement in all of the many pages that were supposed to display tabs, I created a new layout in &lt;em&gt;apps/views/layouts/tabbed.thtml&lt;/em&gt; (which uses renderElement to render the tabs). Then I used&lt;br /&gt;
&lt;br /&gt;
$this-layout = "tabbed"&lt;br /&gt;
&lt;br /&gt;
in the controller to tell it to use the tabbed layout rather than the default (non-tabbed) layout.&lt;br /&gt;
&lt;br /&gt;
After a couple of days of work on this application, it was time to demo it to the VP, who was very impressed with what I was able to accomplish in such a short period of time. It was brought up that before I took on the project they had asked some other folks how long it would take them to build it in Java and they had said that it would take on the order of months what I had built in a couple of days. Morals of the story:&lt;br /&gt;
&lt;br /&gt;
1. Cake is very lightweight and productive&lt;br /&gt;
2. Cake might be very beneficial to your career&lt;br /&gt;
&lt;br /&gt;
Eventually, I was assigned to another project and my manager wanted me to transition my Cake project to another engineer, who was experienced with PHP but not with Cake. I sat down with the new engineer and in about 20 or 30 minutes of explanation and walking him through the code,&lt;br /&gt;
he felt ready to code. Not only did he feel that he knew enough to start working with the application, I could tell from the smile on his face that he was very impressed by the power and succinctness of Cake, which was the  same reaction that I initially had. After a couple of days, I checked back with him and he had made a remarkable amount of progress on the application - there were a ton of new pages and features.&lt;br /&gt;
&lt;br /&gt;
So you see, Cake is a very productive environment. For a very small investment in the initial learning curve, you can get a significant increase in productivity.&lt;br /&gt;
[/i]&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;...And the icing?&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
So that's what CakePHP is about. The project may only have just entered alpha stage, but the code is already very stable and useable, as PHPnut, gwoo and Marc said.  So what's going to be included in the beta and stable releases? I researched a bit and asked the developers, and here's how Cake will probably evolve in the following months:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;Cake's built-in &lt;/li&gt;&lt;strong&gt;data-validation&lt;/strong&gt; capabilities will be extended. A validator class - which already exists, by the way - will be extended to include more data types and expressions to be validated before being stored in a database. &lt;br /&gt;
&lt;li&gt;A new default &lt;/li&gt;&lt;strong&gt;ACL system&lt;/strong&gt; will be included and will support database access and .ini files as well. &lt;br /&gt;
&lt;li&gt; The &lt;/li&gt;&lt;strong&gt;AJAX&lt;/strong&gt; helper class and AJAX support will be enhanced, featuring unobtrusive JavaScript and ALA behavior[28].&lt;br /&gt;
&lt;li&gt; &lt;/li&gt;&lt;strong&gt;Multiple applications&lt;/strong&gt; with the same core files. In the future developers will be able to create their own Cake application which could be placed in the app/plugins directory and be seamlessly integrated and auto-linked to other Cake applications.&lt;br /&gt;
&lt;/ul&gt;   &lt;br /&gt;
&lt;br /&gt;
After learning all this about Cake and after trying it out myself, I really think that I have found the solution to all of my PHP web development problems. CakePHP can really help PHP developers a lot if properly used and understood.  Still not convinced? Just try it out then, will you?[17]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Notes and Related Resources&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Special thanks to:&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
[*]&lt;strong&gt;Larry E. Masters aka &lt;em&gt;PhpNut&lt;/em&gt;&lt;/strong&gt; and  Garrett J. Woodworth &lt;strong&gt;gwoo&lt;/strong&gt; for providing all the answers to my questions and contributing to create such a wonderful tool for the PHP community.&lt;br /&gt;
[*]&lt;strong&gt;Marc Abramowitz&lt;/strong&gt; for sharing his experiences with the CakePHP framework and providing the content for the '...let's eat' section.&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
[small]&lt;br /&gt;
[1] PHP functions reference, &lt;a href="http://www.php.net/manual/en/funcref.php"&gt;http://www.php.net/manual/en/funcref.php&lt;/a&gt;&lt;br /&gt;
[2] Framework, Wikipedia Page - &lt;a href="http://en.wikipedia.org/wiki/Framework"&gt;http://en.wikipedia.org/wiki/Framework&lt;/a&gt;&lt;br /&gt;
[3] .NET framework overview - &lt;a href="http://msdn.microsoft.com/netframework/technologyinfo/default.aspx"&gt;http://msdn.microsoft.com/netframework/technologyinfo/default.aspx&lt;/a&gt;&lt;br /&gt;
[4] "PHP Framework", delorian's blog, PHP Community - &lt;a href="http://www.phpcommunity.org/node/100"&gt;http://www.phpcommunity.org/node/100&lt;/a&gt;&lt;br /&gt;
[5]Some popular PHP frameworks: Mojavi (&lt;a href="http://www.mojavi.org/"&gt;http://www.mojavi.org/&lt;/a&gt;), phpMVC (&lt;a href="http://www.phpmvc.net/"&gt;http://www.phpmvc.net/&lt;/a&gt;), BlueShoes (&lt;a href="http://www.blueshoes.org/"&gt;http://www.blueshoes.org/&lt;/a&gt;), Seagull (&lt;a href="http://seagull.phpkitchen.com/"&gt;http://seagull.phpkitchen.com/&lt;/a&gt;).&lt;br /&gt;
[6] PEAR - &lt;a href="http://pear.php.net/"&gt;http://pear.php.net/&lt;/a&gt;&lt;br /&gt;
[7] Prado - PHP Rapid Application Development Object-Oriented, &lt;a href="http://www.xisc.com/"&gt;http://www.xisc.com/&lt;/a&gt;&lt;br /&gt;
[8] Event Driven Programming, Wikipedia Page -  &lt;a href="http://en.wikipedia.org/w/index.php?title=Event_driven_programming"&gt;http://en.wikipedia.org/w/index.php?title=Event_driven_programming&lt;/a&gt;&lt;br /&gt;
[9] Ruby on Rails, Official Page - &lt;a href="http://www.rubyonrails.org/"&gt;http://www.rubyonrails.org/&lt;/a&gt;&lt;br /&gt;
[10] Ruby on Rails, Doumentation - &lt;a href="http://documentation.rubyonrails.com/"&gt;http://documentation.rubyonrails.com/&lt;/a&gt;&lt;br /&gt;
[11] Model View Controller, Wikipedia Page - &lt;a href="http://en.wikipedia.org/w/index.php?title=Model-View-Controller"&gt;http://en.wikipedia.org/w/index.php?title=Model-View-Controller&lt;/a&gt;&lt;br /&gt;
[12] PHP frameworks inspired by Rails: &lt;a href="http://phpontrax.com/"&gt;http://phpontrax.com/&lt;/a&gt;, &lt;a href="http://flinn.activeintra.net/biscuit/"&gt;http://flinn.activeintra.net/biscuit/&lt;/a&gt;, &lt;a href="http://www.cakephp.org/"&gt;http://www.cakephp.org/&lt;/a&gt;&lt;br /&gt;
[13]Python frameworks inspired by Rails: &lt;a href="http://fanery.sourceforge.net/"&gt;http://fanery.sourceforge.net/&lt;/a&gt;, &lt;a href="http://fanery.sourceforge.net/"&gt;http://fanery.sourceforge.net/&lt;/a&gt;, &lt;a href="http://subway.python-hosting.com/"&gt;http://subway.python-hosting.com/&lt;/a&gt;&lt;br /&gt;
[14]Java framework inspired by Rails: &lt;a href="https://trails.dev.java.net/"&gt;https://trails.dev.java.net/&lt;/a&gt;&lt;br /&gt;
[15]Perl frameworks inspired by Rails:&lt;br /&gt;
&lt;a href="http://search.cpan.org/dist/Catalyst/lib/Catalyst/Manual/Intro.pod"&gt;http://search.cpan.org/dist/Catalyst/lib/Catalyst/Manual/Intro.pod&lt;/a&gt;, &lt;a href="http://perlonrails.org/index.php/Main_Page"&gt;http://perlonrails.org/index.php/Main_Page&lt;/a&gt; &lt;br /&gt;
[16] "Rails Clones: Blood suckers or useful drones?", RedHanded - &lt;a href="http://redhanded.hobix.com/cult/railsClonesBloodsuckersOrUsefulDrones.html"&gt;http://redhanded.hobix.com/cult/railsClonesBloodsuckersOrUsefulDrones.html&lt;/a&gt;&lt;br /&gt;
[17] CakePHP - Rails-inpired PHP framework, &lt;a href="http://www.cakephp.org/"&gt;http://www.cakephp.org/&lt;/a&gt;&lt;br /&gt;
[18] AdoDB, PHP Database Abstraction Layer - &lt;a href="http://adodb.sourceforge.net/"&gt;http://adodb.sourceforge.net/&lt;/a&gt;&lt;br /&gt;
[19] CakePHP blog tutorial - &lt;a href="http://wiki.cakephp.org/tutorials:blog_tutorial_-_1"&gt;http://wiki.cakephp.org/tutorials:blog_tutorial_-_1&lt;/a&gt;&lt;br /&gt;
[20] Extending CakePHP -  &lt;a href="http://wiki.cakephp.org/tutorials:extending_cake"&gt;http://wiki.cakephp.org/tutorials:extending_cake&lt;/a&gt;&lt;br /&gt;
[21] Smarty, PHP Template Engine - &lt;a href="http://smarty.php.net/"&gt;http://smarty.php.net/&lt;/a&gt;&lt;br /&gt;
[22] Scaffolding a Blog, CakePHP Wiki - &lt;a href="http://wiki.cakephp.org/tutorials:scaffolding_a_blog"&gt;http://wiki.cakephp.org/tutorials:scaffolding_a_blog&lt;/a&gt;&lt;br /&gt;
[23] CakePHP Wiki - &lt;a href="http://wiki.cakephp.org/"&gt;http://wiki.cakephp.org/&lt;/a&gt;&lt;br /&gt;
[24] CakePHP Google User Group - &lt;a href="http://groups.google.com/group/cake-php"&gt;http://groups.google.com/group/cake-php&lt;/a&gt;&lt;br /&gt;
[25] CakeForge - &lt;a href="http://cakeforge.org/"&gt;http://cakeforge.org/&lt;/a&gt;&lt;br /&gt;
[26] CakePHP Downloads Page - &lt;a href="http://cakephp.org/downloads/"&gt;http://cakephp.org/downloads/&lt;/a&gt;&lt;br /&gt;
[27] Simfony, PHP5 framework - &lt;a href="http://www.symfony-project.com/"&gt;http://www.symfony-project.com/&lt;/a&gt;&lt;br /&gt;
[28] ALA behavior - &lt;a href="http://bennolan.com/behaviour/"&gt;http://bennolan.com/behaviour/&lt;/a&gt;&lt;br /&gt;
[/small]</description>
      <pubDate>Thu, 08 Dec 2005 16:03:39 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/cakephp/</guid>
      <link>http://www.h3rald.com/articles/cakephp/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/cakephp/#comments</comments>
      <category>cakephp</category>
      <category>review</category>
      <category>frameworks</category>
      <category>webdevelopment</category>
    </item>
  </channel>
</rss>
