<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>jleveille</title>
    <link>http://virb.com/jleveille</link>
    <description><![CDATA[]]></description>
    <generator>Virb 2.0 (@jleveille)</generator>
    <language>en</language>
    <item>
      <title>Building the new Web Server</title>
      <link>http://virb.com/jleveille/posts/text/1087614</link>
      <description><![CDATA[<p>In <a href="http://jasonleveille.com/2009/02/graduate-school-independent-study/">an earlier</a> post I mentioned the fact that I will be rebuilding this blog.]]></description>
      <pubDate>Fri, 13 Feb 2009 23:44:41 -0800</pubDate>
      <guid>http://virb.com/jleveille/posts/text/1087614</guid>
    </item>
    <item>
      <title>CakePHP vs Django vs Rails vs Who Cares - Make a Decision</title>
      <link>http://virb.com/jleveille/posts/text/1083809</link>
      <description><![CDATA[<p>As someone who:</p>
<ol>
<li>has made a framework choice, and developed numerous projects on that framework (<a href="http://cakephp.org/">CakePHP</a>) and,</li>
<li>is always <a href="http://www.djangoproject.com/">poking</a> <a href="http://pylonshq.com/">around</a> <a href="http://rubyonrails.org/">with</a> <a href="http://framework.zend.com/">other</a> <a href="http://codeigniter.com/">frameworks</a></li>
</ol>
<p>I am often asked about the tough choice of picking among all the great framework choices (both in and out of the <a href="http://php.net/">PHP</a> world).]]></description>
      <pubDate>Wed, 11 Feb 2009 22:07:02 -0800</pubDate>
      <guid>http://virb.com/jleveille/posts/text/1083809</guid>
    </item>
    <item>
      <title>My Path to a Career in Web Development</title>
      <link>http://virb.com/jleveille/posts/text/1079754</link>
      <description><![CDATA[<p>I enjoy hearing about the paths people have taken on the journey to their current job.]]></description>
      <pubDate>Mon, 09 Feb 2009 21:46:41 -0800</pubDate>
      <guid>http://virb.com/jleveille/posts/text/1079754</guid>
    </item>
    <item>
      <title>Graduate School Independent Study</title>
      <link>http://virb.com/jleveille/posts/text/1072729</link>
      <description><![CDATA[<p>This is my last semester of graduate school.  In May I will be graduating with a MSCS degree.  This semester I am taking an Operating Systems course as well as an independent study.  So far the subject matter for the OS course has been good, but what I'm really excited about is my independent study.  Last week I submitted my study proposal and on the same day found out that it had been accepted.  I am thankful that I have professors who are open-minded (and not stuck in the theoretical muck).]]></description>
      <pubDate>Thu, 05 Feb 2009 23:42:40 -0800</pubDate>
      <guid>http://virb.com/jleveille/posts/text/1072729</guid>
    </item>
    <item>
      <title>Simple Managed Content: SimpleMC</title>
      <link>http://virb.com/jleveille/posts/text/1069114</link>
      <description><![CDATA[<p>Today, with the support of <a href="http://www.blueatlas.com">Blue Atlas Interactive</a>, I am releasing version 0.90 of Simple Managed Content (SimpleMC).  SimpleMC, which requires PHP/MySQL, aims to provide an easy way for content editors to manage blocks of content.  The following links and screencast should give you a good picture of the project:</p>
<ul>
<li><a href="http://github.com/leveille/simple-mc/tree/master">GitHub Project Home</a></li>
<li><a href="http://leveille.lighthouseapp.com/projects/24238-simple-mc/overview">Lighthouse Project Home</a></li>
<li><a href="http://groups.google.com/group/simple_mc">Google Group</a></li>
<li><a href="http://smc.jasonleveille.com">Project Demo</a></li>
<li>A project of <a href="http://www.blueatlas.com">Blue Atlas Interactive</a></li>
</ul>
<div class="wp-caption aligncenter" style="width: 464px"><a href="https://blueatlas.s3.amazonaws.com/simplemc/simplemc_intro_flash/index.htm"><img title="SimpleMC Screenshot" src="http://jasonleveille.com/wp-content/uploads/2009/02/04/simplemc_screenshot.png" alt="SimpleMC Screenshot" width="454" height="410" /></a><p class="wp-caption-text">SimpleMC Screencast (.swf)</p></div>
<h3>Features</h3>
<ul>
<li><a href="http://www.fckeditor.net/">FCK Editor</a></li>
<li><a href="http://extjs.com/">ExtJS</a> for interface components</li>
<li><a href="http://code.google.com/p/minify/">Minify</a> for CSS/JS minification</li>
<li><a href="http://htmlpurifier.org/">HTMLPurifier</a> for content purification</li>
<li>A simple caching solution</li>
<li>Debug/Production modes</li>
<li>Backend user/content administrator</li>
</ul>
<h3>Thoughts</h3>
<p>This project started as most projects do, with the needs of a client. ]]></description>
      <pubDate>Tue, 03 Feb 2009 22:44:01 -0800</pubDate>
      <guid>http://virb.com/jleveille/posts/text/1069114</guid>
    </item>
    <item>
      <title>Book Review: Lighttpd</title>
      <link>http://virb.com/jleveille/posts/text/1050414</link>
      <description><![CDATA[<p>I was recently contacted by <a href="http://www.packtpub.com/">PACKT Publishing</a> and asked to provide a review for <a href="http://www.packtpub.com/lighttpd/book">Lighttpd</a>.  Following is the review.<span id="more-191"></span></p>
<div id="hreview-A-Good-Introduction-To-Lighttpd" class="hreview">
<h2 class="summary">A Good Introduction to Lighttpd</h2>
<p>Jan 21, 2009 by <span class="reviewer vcard"><span class="fn">Jason R. Leveille</span></span></p>
<div class="item"><a class="fn url" href="http://www.packtpub.com/lighttpd/book">Lighttpd</a></div>
<p>?????<span class="version" style="display: none;">0.4</span></p>
<div class="description item vcard">For quite a while now I have been deploying web applications to <a href="http://www.apache.org/">Apache</a> and <a href="http://www.iis.net/">IIS</a> web servers.  My personal blog (this blog!) used to be served by the Apache Web Server, in a relatively low memory environment (256M ... ok, maybe that isn't low for some of you).  At the start of January '09 I started having memory/server/swap issues.  At around the same time I received <a href="http://www.lighttpd.net/">Lighttpd</a> in the mail from PACKT.  With book in hand, in a few short hours I made the switch to Lighttpd and things have been running well ever since.  If you're interested in exploring what Lighttpd can do for you, I would recommend this book for your bookshelf.  In case it is relevant, I was a complete and total Lighttpd newb prior to receiving this book ... I still feel like a newb, but at least I now have a good reference in hand.</p>
<p></p>
<h3>The Parts I Liked</h3>
<p>The book covered a wide range of topics, including: a basic introduction to lighttpd, installation, security, encryption, optimization, virtual hosting (and topics in *CGI), among other things.  Overall I really thought this book was solid, for a number of reasons:</p>
<ul>
<li>It contains a lot of relevant and rich code examples</li>
<li>It provides a lot of detail with regards to whatever the topic is being addressed</li>
<li>Each chapter wastes no time in addressing the topics you are likely to find most important (virtual hosts, security, streaming content, serving static media)</li>
<li>There is little fluff in the book. In certain books I can take a sense of humor.  In other books I just want the facts.  This book provides the facts</li>
<li>It provides a full chapter on SSL with good examples, etc</li>
<li>It provides a full chapter on security, including the evasion of denial of service (<a href="http://en.wikipedia.org/wiki/Denial_of_service">DoS</a>) attacks, setting up <a href="http://linux.about.com/od/commands/l/blcmdl8_logrota.htm">logrotate</a> (which I was not familiar with), and grepping your log files.  It becomes apparent rather quickly that the author really wants you to feel comfortable trying to administer and secure your web server</li>
<li>It contains an entire chapter on optimizing Lighttpd, including load testing and caching</li>
<li>It provides information on migrating from Apache, and hosting common web applications (<a href="http://wordpress.org/">Wordpress</a>, <a href="http://www.phpmyadmin.net/home_page/index.php">PHPMyAdmin</a>, etc) on Lighttpd.  Let's face it, most of us would be migrating from Apache, and very likely taking Wordpress (etc) along for the ride</li>
</ul>
<h3>The Parts I Struggled With</h3>
<p>From the beginning of the book, the author discusses version 1.5.0 of Lighttpd.  He also makes statements such as:</p>
<blockquote><p>
Chapter 12: As of Lighttpd 1.4.7, this module has been superseded by mod_magnet, ...</p></blockquote>
<p>The problem I have here is that if you look on the Lighttpd website, the most recent version of the web server is 1.4.20.  I would rather have heard nothing at all about future versions of Lighttpd.  I found it distracting, continually wondering if I should be using version 1.4.blah, or version 1.5.  Only to find that I couldn't find these mystery versions (maybe I didn't look as hard as I should have).  I also found I had some issues with some of the code examples.  In some cases I had to revert to Googling to figure out the issue I was trying to solve (sorry, I can't think of a good example of this at the moment).</p>
<h3>Conclusion</h3>
<p>Throughout my time investigating Lighttpd it has become apparent that this web server is not under heavy development.  As a matter of fact, I came across many rumblings with regards to the projects stalled state.  I'm not sure, but perhaps as the book was under development, 1.4.7 and 1.5.0 were very real.  Perhaps post production those development branches died.  I really don't know.  I do think if you are going to choose to run Lighttpd you have to keep these things in mind.  Regardless, if you are going to run this web server this book would be a great companion as you are learning.</p></div>
</div>
<div class="feedflare">
<a href="http://feeds2.feedburner.com/~f/leveille?a=UyZtX0no"><img src="http://feeds2.feedburner.com/~f/leveille?d=41" border="0"></img></a> <a href="http://feeds2.feedburner.com/~f/leveille?a=W5KEKXhG"><img src="http://feeds2.feedburner.com/~f/leveille?i=W5KEKXhG" border="0"></img></a> <a href="http://feeds2.feedburner.com/~f/leveille?a=5b2rG3zm"><img src="http://feeds2.feedburner.com/~f/leveille?i=5b2rG3zm" border="0"></img></a> <a href="http://feeds2.feedburner.com/~f/leveille?a=lvarwNtk"><img src="http://feeds2.feedburner.com/~f/leveille?i=lvarwNtk" border="0"></img></a> <a href="http://feeds2.feedburner.com/~f/leveille?a=Pb2Z9UPt"><img src="http://feeds2.feedburner.com/~f/leveille?i=Pb2Z9UPt" border="0"></img></a>
</div><img src="http://feeds2.feedburner.com/~r/leveille/~4/1UFiPul3Pig" height="1" width="1" />]]></description>
      <pubDate>Sat, 24 Jan 2009 01:18:07 -0800</pubDate>
      <guid>http://virb.com/jleveille/posts/text/1050414</guid>
    </item>
    <item>
      <title>PunBB Authentication JQuery Plugin</title>
      <link>http://virb.com/jleveille/posts/text/1046295</link>
      <description><![CDATA[<p>I have finally created my first <a href="http://jquery.com/">jQuery</a> <a href="http://plugins.jquery.com/">plugin</a>.  The <a href="http://github.com/leveille/punbbauth/tree/master">punbbauth</a> plugin should provide an easy way to sync authentication between your application and <a href="http://punbb.informer.com/">PunBB</a>.<br />
<span id="more-167"></span><br />
This plugin provides an easy way to hook into <a href="http://punbb.informer.com/">PunBB</a> authentication login/logout.  Hooks should be applied to your own applications login form and logout link.  Another option is available to hook into an "access" link, however this will likely not see much use under most normal circumstances.</p>
<p>This plugin does not attempt to solve the issue of syncing your application with punbb.  Rather, it attempts to solve the issue of single sign on when a user logs into your application.</p>
<h3>Gotchas</h3>
<p>As the plugin uses <a href="http://en.wikipedia.org/wiki/XMLHttpRequest">XHR</a> to communicate with PunBB, it's usage is of course limited to the XHR <a href="http://en.wikipedia.org/wiki/Same_origin_policy">same origin policy</a>.</p>
<h3>Download</h3>
<p>Source code, as well as downloads, can be found for this plugin on github: <a href="http://github.com/leveille/punbbauth/tree/master">http://github.com/leveille/punbbauth/tree/master</a></p>
<h3>Examples</h3>
<h3>BIND TO LOGIN FORM</h3>
<h4>ex. 1</h4>
<pre class="JavaScript" name="code">
//assumes a username fieldname of username
//assumes a password fieldname of password
//also assumes form class structure: &lt;form class="punbb login"&gt;
$('.punbb').punbbauth();
</pre>
<h4>ex. 2</h4>
<pre class="JavaScript" name="code">
//app_uname_field: &lt;input name="uname_fieldname" /&gt;
//app_pword_field: &lt;input name="pword_fieldname" /&gt;
//assumes form class structure: &lt;form class="punbb login"&gt;
$('.punbb').punbbauth({
    app_uname_field : 'uname_fieldname',
    app_pword_field : 'pword_fieldname'
});
</pre>
<h3>BIND TO LOGOUT LINK</h3>
<h4>ex. 1</h4>
<pre class="JavaScript" name="code">
//assumes link class structure: &lt;a class="punbb logout"&gt;...&lt;/a&gt;
$('.punbb').punbbauth();
</pre>
<h3>BIND TO ACCESS LINK</h3>
<p>NOTE: This will likely not see very much use, as it requires access to a plain text password.  See notes below</p>
<h4>ex. 1</h4>
<pre class="JavaScript" name="code">
//assumes link class structure: &lt;a class="punbb access"&gt;...&lt;/a&gt;
$('.punbb').punbbauth({
    punbb_username : 'username',
    punbb_password : 'password'
});
</pre>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/leveille?a=I1KnJL.P"><img src="http://feeds.feedburner.com/~f/leveille?i=I1KnJL.P" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/leveille?a=nqleLb.p"><img src="http://feeds.feedburner.com/~f/leveille?i=nqleLb.p" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/leveille?a=BcmGzJ.p"><img src="http://feeds.feedburner.com/~f/leveille?i=BcmGzJ.p" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/leveille?a=IXk2MK.p"><img src="http://feeds.feedburner.com/~f/leveille?i=IXk2MK.p" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/leveille?a=MGt13H.p"><img src="http://feeds.feedburner.com/~f/leveille?i=MGt13H.p" border="0"></img></a>
</div>]]></description>
      <pubDate>Wed, 21 Jan 2009 23:44:31 -0800</pubDate>
      <guid>http://virb.com/jleveille/posts/text/1046295</guid>
    </item>
    <item>
      <title>Great Computer Security Quotes</title>
      <link>http://virb.com/jleveille/posts/text/1035536</link>
      <description><![CDATA[<p>Occasionally something comes up via <a href="http://www.twitter.com">Twitter</a> that is really interesting.  Today, <a href="http://twitter.com/nateabele">Nate Abele</a> (of <a href="http://www.cakephp.org">CakePHP</a> fame) <a href="http://twitter.com/nateabele/status/1121243805">shared a link</a> to "<a href="http://www.ranum.com/security/computer_security/editorials/dumb/index.html">The Six Dumbest Ideas in Computer Security</a>", written by <a href="http://www.ranum.com/">Marcus J. Ranum</a> (a world-renowned expert on security system design and implementation) in 2005.  This article is so full of useful and interesting insight, that I couldn't help but to quote some of my favorite passages:</p>
<blockquote><p>One extremely useful piece of management kung-fu to remember, if you find yourself up against an "early adopter" is to rely on your peers. Several years ago I had a client who was preparing to spend a ton of money on a technology without testing it operationally. I suggested offhandedly to the senior IT manager in charge that he should send one of his team to a relevant conference (in this case, LISA) where it was likely that someone with hands-on experience with the technology would be in attendance. I proposed that the manager have his employee put a message on the "meet and greet" bulletin board that read:  "Do you have hands-on experience with xyz from pdq.com? If so, I'm authorized to take you to dinner at Ruth's Chris if you promise to give me the low-down on the product off the record. Contact, etc..." The IT manager later told me that a $200 dinner expense saved them over $400,000 worth of hellish technological trauma.</p></blockquote>
<p>And another:</p>
<blockquote><p>"Let's go production with it now and we can secure it later" - no, you won't. A better question to ask yourself is "If we don't have time to do it correctly now, will we have time to do it over once it's broken?" Sometimes, building a system that is in constant need of repair means you will spend years investing in turd polish because you were unwilling to spend days getting the job done right in the first place.</p></blockquote>
<p>And another:</p>
<blockquote><p>Why is "Enumerating Badness" a dumb idea? It's a dumb idea because sometime around 1992 the amount of Badness in the Internet began to vastly outweigh the amount of Goodness. For every harmless, legitimate, application, there are dozens or hundreds of pieces of malware, worm tests, exploits, or viral code. Examine a typical antivirus package and you'll see it knows about 75,000+ viruses that might infect your machine. Compare that to the legitimate 30 or so apps that I've installed on my machine, and you can see it's rather dumb to try to track 75,000 pieces of Badness when even a simpleton could track 30 pieces of Goodness. In fact, if I were to simply track the 30 pieces of Goodness on my machine, and allow nothing else to run, I would have simultaneously solved the following problems:</p>
<ul>
<li>Spyware</li>
<li>Viruses</li>
<li>Remote Control Trojans</li>
<li>Exploits that involve executing pre-installed code that you don't use regularly</li>
</ul>
</blockquote>
<p>And finally:</p>
<blockquote><p>Let me put it to you in different terms: <em><strong>if "Penetrate and Patch" was effective, we would have run out of security bugs in Internet Explorer by now</strong></em>. What has it been? 2 or 3 a month for 10 years?</p></blockquote>
<p>There are 10 others that I could have quoted here.  Although it looks like Marcus hasn't written anything on his blog in over a year, I'm still adding <a href="http://www.ranum.com/rss20.xml">his feed</a> to my reader.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/leveille?a=agtOIx.P"><img src="http://feeds.feedburner.com/~f/leveille?i=agtOIx.P" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/leveille?a=9GkYtb.p"><img src="http://feeds.feedburner.com/~f/leveille?i=9GkYtb.p" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/leveille?a=yMgrCG.p"><img src="http://feeds.feedburner.com/~f/leveille?i=yMgrCG.p" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/leveille?a=YCkCIT.p"><img src="http://feeds.feedburner.com/~f/leveille?i=YCkCIT.p" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/leveille?a=zb9Oli.p"><img src="http://feeds.feedburner.com/~f/leveille?i=zb9Oli.p" border="0"></img></a>
</div>]]></description>
      <pubDate>Fri, 16 Jan 2009 04:08:47 -0800</pubDate>
      <guid>http://virb.com/jleveille/posts/text/1035536</guid>
    </item>
    <item>
      <title>VI Tips of the Day #3</title>
      <link>http://virb.com/jleveille/posts/text/1027794</link>
      <description><![CDATA[<h3>Deleting Text</h3>
<p>After opening a <a href="http://en.wikipedia.org/wiki/Vi">VI</a> session, often you'll want to delete "things" from your file:</p>
<ul>
<li><strong>CTRL+h </strong>or<strong> Backspace</strong> - Delete previous character</li>
<li><strong>CTRL+w</strong> - Delete previous word</li>
<li><strong>CTRL+x</strong> - Delete to start of inserted text</li>
<li><strong>nx</strong> - Delete n characters beginning with current; omitting n deletes current character</li>
<li><strong>nX</strong> - Delete previous n characters; omitting n deletes previous characters</li>
<li><strong>ndw</strong> - Delete next n words beginning with current; omitting n deletes current word</li>
<li><strong>ndb - </strong>Delete previous n words; omitting n deletes previous word</li>
<li><strong>ndd</strong> - Delete n lines beginning with current; omitting n deletes current line</li>
<li><strong>:n, md</strong> - Delete lines n through m</li>
<li><strong>D</strong> or <strong>d$</strong> - Delete from cursor to end of current line</li>
<li><strong>d</strong><em>cursor_cmd</em> - Delete text to <em>cursor_cmd</em> (e.g. <strong>dG</strong> deletes from current line to end of file)</li>
</ul>
<p>Placed here for easy reference.]]></description>
      <pubDate>Mon, 12 Jan 2009 12:38:18 -0800</pubDate>
      <guid>http://virb.com/jleveille/posts/text/1027794</guid>
    </item>
    <item>
      <title>Personal Dislikes: Failing to See the Big Picture</title>
      <link>http://virb.com/jleveille/posts/text/1027793</link>
      <description><![CDATA[<p>There really isn't a whole lot that bothers me.]]></description>
      <pubDate>Mon, 12 Jan 2009 12:38:18 -0800</pubDate>
      <guid>http://virb.com/jleveille/posts/text/1027793</guid>
    </item>
    <item>
      <title>VI Tips of the Day #2</title>
      <link>http://virb.com/jleveille/posts/text/1008214</link>
      <description><![CDATA[<h3>Moving Your Cursor</h3>
<p>After opening a <a href="http://en.wikipedia.org/wiki/Vi">VI</a> session, often you'll want to move your cursor around:</p>
<ul>
<li><strong>k</strong> - Up</li>
<li><strong>j</strong> - Down</li>
<li><strong>h</strong> - Left</li>
<li><strong>l </strong>or<strong> Space</strong> - Right</li>
<li><strong>w</strong> or<strong> W</strong> - Start of next word; W ignores punctuation</li>
<li><strong>b </strong>or<strong> B</strong> - Start of previous word; B ignores punctuation</li>
<li><strong>e </strong>or<strong> E</strong> - End of next word; E ignores punctuation</li>
<li><strong>$<em></em></strong> - Last character in current line</li>
<li><strong>+ </strong>or<strong> Return -</strong> First character in next line</li>
<li><strong>1G</strong> - First line in file</li>
<li><strong>G</strong> - Last line in file</li>
<li><strong>G$</strong> - Last character in file</li>
<li><strong>(</strong> - Beginning of sentence</li>
<li><strong>)</strong> - Beginning of next sentence</li>
<li><strong>{</strong> - Beginning of paragraph</li>
<li><strong>}</strong> - Beginning of next paragraph</li>
</ul>
<p>Placed here for easy reference.]]></description>
      <pubDate>Wed, 31 Dec 2008 21:21:29 -0800</pubDate>
      <guid>http://virb.com/jleveille/posts/text/1008214</guid>
    </item>
    <item>
      <title>Book Review: CakePHP Application Development</title>
      <link>http://virb.com/jleveille/posts/text/1007393</link>
      <description><![CDATA[<p>I was recently contacted by <a href="http://www.packtpub.com/">PACKT Publishing</a> and asked to provide a review for <a href="http://www.packtpub.com/cakephp-application-development/book">CakePHP Application Development</a>.  Following is the review.<span id="more-102"></span></p>
<div id="hreview-This-Book-Fell-Short-For-Me" class="hreview">
<h2 class="summary">This Book Fell Short For Me</h2>
<p>Dec 30, 2008 by <span class="reviewer vcard"><span class="fn">Jason R. Leveille</span></span></p>
<div class="item"><a class="fn url" href="http://www.packtpub.com/cakephp-application-development/book">CakePHP Application Development</a></div>
<p>?????<span class="version" style="display: none;">0.3</span></p>
<div class="description item vcard">If it is of any consequence, I have been working with CakePHP for over a year now, and over that year I have worked on 5 CakePHP projects (of various sizes).  Though there were parts of the book I liked, for both technical and non-technical reasons I wasn't a fan of this book.</p>
<h3>The Parts I Liked</h3>
<p>The example driven approach taken by the authors provides newcomers to CakePHP with step-by-step instructions for working with Cake.  Providing source code examples is often the best way to learn/teach a particular subject.  Ahsanul and Anupom provided plenty of source code to look at.  They also provided detailed feedback regarding what exactly is going on in their examples.  Though I thought the feedback was verbose and redundant at times, I think newcomers to Cake would like the detailed explanation this book provides.</p>
<h3>The Parts I Struggled With</h3>
<p>Some of the major reasons why this book wasn't for me have nothing to do with technical content.  The writing style of the authors, as well as errors in grammar and code examples, made this a very difficult read for me (and I read the book from cover to cover).  I also took issue with inconsistent code formatting (indentation and spacing of code).  As I am reading a book and my reading flow is interrupted, I become frustrated with the text and distracted by the interruptions.  In the case of this book, the interruptions served to divert my attention from the subject matter.</p>
<p>As far as technical content, this book does not have nearly as much to offer (nor will it be as up-to-date) as what you would find by visiting <a href="http://book.cakephp.org">book.cakephp.org</a> (and <a href="http://api.cakephp.org">api.cakephp.org</a>), even if you're just looking for an introduction.  Your best source of information for CakePHP will always be these two websites.  That doesn't mean that a CakePHP book couldn't have value ... on the contrary, I don't care how good online documentation is (and Cakes is among the best for an open source project), there is no substitute for a good book.  With the alternatives available though, a Cake book would have to shine.  This book didn't shine for me.  One glaring example exists in the QuickWall demo application built towards the end of the book.  The authors make use of the CakePHP minLength model validation rule.  Frequently throughout the demo, in source code and in explanations, they refer to this rule as minLenght.  This is, of course, a mistake, and it happens in multiple places.  How could this mistake make it all the way to final publication?  When I checked the online errata for this book, I found no mention of the error (I submitted an errata entry that may or may not be there when you read this).  The minLength example represents a small piece of one part of the book, but it provides a window into what I saw as a clear lack of detailed polish throughout the book.</p>
<p>Other issues I had with this book include: 1) I understand that many books are going to talk about JavaScript and try to meet their quota for Web 2.0 buzzwords, however I believe that space would have been better filled with information about CakePHP behaviors (containable), plugins, internationalization/localization, configuration (Configure class), debugging, etc, etc; 2) If you are going to use the e (echo) shortcut, take the next step and also use the h shortcut to escape output where appropriate; 3) Often books give a false impression that using a framework such as this will bring you from concept to completion in no time at all.  Although a full stack framework such as this will take care of many mundane development tasks, there will always be a substantial amount of work left to do, for example, after running cake and baking your models/views/controllers.  Data needs to be filtered and escaped, granular access control and administrative backends need to be constructed, sql calls need to be vetted for efficiency, proper deployment processes need to be put in place, etc, etc.</p>
<h3>Conclusion</h3>
<p>No framework can be the Chia Pet of the development world - you can't sprinkle on a little water and expect to have a plant with little effort in a short amount of time.  I think that any indication otherwise is misleading.  You'll still have to work hard with Cake (application development takes time), but at least you'll be working in the right direction.  I thought the message of how easy development is with Cake was too strong in this book.  Poor applications can be built with or without Cake in PHP.  It is up to authors to provide at least a partial glimpse into best practices when developing with the topic they are writing about.  I just didn't think that happened here.  With polish, attention to detail, and the inclusion of a wider range of CakePHP features, I think this book would have been a nice addition to your collection.  Unfortuantely, for me it fell short.</p></div>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/leveille?a=WA5fkX.O"><img src="http://feeds.feedburner.com/~f/leveille?i=WA5fkX.O" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/leveille?a=vqqTQX.o"><img src="http://feeds.feedburner.com/~f/leveille?i=vqqTQX.o" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/leveille?a=8e5lJG.o"><img src="http://feeds.feedburner.com/~f/leveille?i=8e5lJG.o" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/leveille?a=0Cmn9O.o"><img src="http://feeds.feedburner.com/~f/leveille?i=0Cmn9O.o" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/leveille?a=W0VY2X.o"><img src="http://feeds.feedburner.com/~f/leveille?i=W0VY2X.o" border="0"></img></a>
</div>]]></description>
      <pubDate>Wed, 31 Dec 2008 03:56:54 -0800</pubDate>
      <guid>http://virb.com/jleveille/posts/text/1007393</guid>
    </item>
    <item>
      <title>VI Tips of the Day #1</title>
      <link>http://virb.com/jleveille/posts/text/1007392</link>
      <description><![CDATA[<h3>Inserting Text</h3>
<p>After opening a <a href="http://en.wikipedia.org/wiki/Vi">VI</a> session, often you'll want to start editing or adding text.</p>
<ul>
<li><strong>a</strong> - Append after cursor</li>
<li><strong>A</strong> - Append after end of current line</li>
<li><strong>i</strong> - Insert before cursor</li>
<li><strong>I</strong> - Insert before beginning of current line</li>
<li><strong>o</strong> - Open new line below current line and insert</li>
<li><strong>O</strong> - Open new line above current line and insert</li>
<li><strong>:r <em>file</em></strong> - Read file specified by <em>file</em>,and insert contents after current line</li>
<li><strong>:nr <em>file</em></strong> - Read file specified by <em>file</em>, and insert contents after line <em>n</em></li>
</ul>
<p>Placed here for easy reference.]]></description>
      <pubDate>Wed, 31 Dec 2008 03:56:54 -0800</pubDate>
      <guid>http://virb.com/jleveille/posts/text/1007392</guid>
    </item>
    <item>
      <title>test</title>
      <link>http://virb.com/jleveille/posts/text/996517</link>
      <description><![CDATA[<p>test</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/leveille?a=1dD5O"><img src="http://feeds.feedburner.com/~f/leveille?i=1dD5O" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/leveille?a=4Vqoo"><img src="http://feeds.feedburner.com/~f/leveille?i=4Vqoo" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/leveille?a=Ycduo"><img src="http://feeds.feedburner.com/~f/leveille?i=Ycduo" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/leveille?a=P4Ixo"><img src="http://feeds.feedburner.com/~f/leveille?i=P4Ixo" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/leveille?a=Rcufo"><img src="http://feeds.feedburner.com/~f/leveille?i=Rcufo" border="0"></img></a>
</div>]]></description>
      <pubDate>Tue, 23 Dec 2008 03:54:06 -0800</pubDate>
      <guid>http://virb.com/jleveille/posts/text/996517</guid>
    </item>
    <item>
      <title>Make Yourself a Lasagna</title>
      <link>http://virb.com/jleveille/posts/text/989602</link>
      <description><![CDATA[<p>I'm not writing anything else here, so I figured I'd post my lasagna recipe.]]></description>
      <pubDate>Thu, 18 Dec 2008 17:52:52 -0800</pubDate>
      <guid>http://virb.com/jleveille/posts/text/989602</guid>
    </item>
    <item>
      <title>Web Application Security</title>
      <link>http://virb.com/jleveille/posts/text/965550</link>
      <description><![CDATA[<p>In preparation for my <a href="http://www.slideshare.net/jleveille/web-application-security-presentation-820243">web application security talk</a> at <a href="http://www.montgomeryschoolsmd.org/schools/damascushs/">Damascus High School</a>, I have made my presentation available through <a href="http://www.slideshare.net/">slideshare</a>.]]></description>
      <pubDate>Fri, 05 Dec 2008 01:35:34 -0800</pubDate>
      <guid>http://virb.com/jleveille/posts/text/965550</guid>
    </item>
    <item>
      <title>CakePHP Logging</title>
      <link>http://virb.com/jleveille/posts/text/961813</link>
      <description><![CDATA[<p><a href="http://book.cakephp.org/view/158/Introduction">CakePHP logging</a> provides an easy way to write to either a debug or error log, however did you know that you can also very easily write to other log files?]]></description>
      <pubDate>Wed, 03 Dec 2008 08:19:10 -0800</pubDate>
      <guid>http://virb.com/jleveille/posts/text/961813</guid>
    </item>
    <item>
      <title>Peter Schiff is the Man</title>
      <link>http://virb.com/jleveille/posts/text/931540</link>
      <description><![CDATA[<p>Watching this clip makes me understand just a little bit better how we got into such a financial mess in this country.]]></description>
      <pubDate>Sat, 15 Nov 2008 14:18:39 -0800</pubDate>
      <guid>http://virb.com/jleveille/posts/text/931540</guid>
    </item>
    <item>
      <title>Breaking my New Years Resolution</title>
      <link>http://virb.com/jleveille/posts/text/894673</link>
      <description><![CDATA[<p>December 31, 2007 I decided that I would not eat dessert at all in 2008.]]></description>
      <pubDate>Mon, 27 Oct 2008 02:57:37 -0700</pubDate>
      <guid>http://virb.com/jleveille/posts/text/894673</guid>
    </item>
    <item>
      <title>Blog Overhaul Using Django</title>
      <link>http://virb.com/jleveille/posts/text/840140</link>
      <description><![CDATA[<p>My plan for a long time now has been to move away from <a href="http://wordpress.org/">Wordpress</a> as my blog engine.  Wordpress has been great for me, and it does a lot of things right (for one, it just works and you can be up and running with a blog very rapidly), but it can be a pig.  Anyway, I figure that by putting it in writing I'll start to find the time to get this process started.  So, my only decision is what will be my engine.  Here is a list of choices that I have considered over the past few months, as well as reasons why I am not going in their direction:</p>
<h3><a href="http://expressionengine.com/">Expression Engine (EE)</a></h3>
<p>I have never built an EE site.]]></description>
      <pubDate>Wed, 24 Sep 2008 02:10:14 -0700</pubDate>
      <guid>http://virb.com/jleveille/posts/text/840140</guid>
    </item>
  </channel>
</rss>
