<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en"><title>Jason Leveille's Blog</title><link href="http://jasonleveille.com" rel="alternate" /><id>http://jasonleveille.com</id><updated>2009-05-19T20:44:48Z</updated><subtitle>Web Development Intoxication</subtitle><geo:lat>39.385165</geo:lat><geo:long>-77.453909</geo:long><link rel="self" href="http://feeds.feedburner.com/leveille" type="application/atom+xml" /><entry><title>Free Web Development eBooks</title><link href="http://feedproxy.google.com/~r/leveille/~3/O1W1wBVBAkE/free-web-development-ebooks" rel="alternate" /><updated>2009-05-19T20:44:48Z</updated><id>tag:jasonleveille.com,2009-05-19:/2009/05/free-web-development-ebooks</id><category term="Django" /><category term="Plone" /><category term="Python" /><content type="html">&lt;p&gt;
            In celebration of my new blog, and in the spirit of my recent work with Python, I have two Python themed books to give away. &lt;strong&gt;Update:&lt;/strong&gt; I have given away the books. Thanks for everyone who showed interest.
        &lt;/p&gt;
        &lt;p class="wurdig-entry-gallery"&gt;
            &lt;a href="http://www.packtpub.com/django-1-0-website-development-2nd-edition/book" rel="external" title="Django 1.0 Website Development"&gt;&lt;img src="http://jasonleveille.com/uploads/django.jpg" width="250" height="308" alt="Django 1.0 Website Development"&gt;&lt;/a&gt;&lt;a href="http://www.packtpub.com/practical-plone-3-beginners-guide-to-building-powerful-websites/book" title="Practical Plone 3: A Beginner's Guide to Building Powerful Websites" rel="external"&gt;&lt;img src="http://jasonleveille.com/uploads/plone.jpg" width="250" height="308" alt="Practical Plone 3: A Beginner's Guide to Building Powerful Websites"&gt;&lt;/a&gt;
        &lt;/p&gt;&lt;!--more--&gt;
        &lt;h3&gt;
            The eBooks
        &lt;/h3&gt;
        &lt;p&gt;
            Thanks to &lt;a href="http://www.packtpub.com"&gt;Packt Publishing&lt;/a&gt; for providing the following books in &lt;abbr title="Portable Document Format"&gt;PDF&lt;/abbr&gt; format:
        &lt;/p&gt;
        &lt;ul&gt;
            &lt;li&gt;
                &lt;a href="http://www.packtpub.com/practical-plone-3-beginners-guide-to-building-powerful-websites/book" rel="external"&gt;Practical Plone 3: A Beginner's Guide to Building Powerful Websites&lt;/a&gt;
            &lt;/li&gt;
            &lt;li&gt;
                &lt;a href="http://www.packtpub.com/django-1-0-website-development-2nd-edition/book" rel="external"&gt;Django 1.0 Website Development&lt;/a&gt;
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;h3&gt;
            The Rules
        &lt;/h3&gt;
        &lt;p&gt;
            All you need to do is leave a single comment below that demonstrates the following:
        &lt;/p&gt;
        &lt;ol&gt;
            &lt;li&gt;Your interest in Python
            &lt;/li&gt;
            &lt;li&gt;Your interest in either Plone or Django
            &lt;/li&gt;
        &lt;/ol&gt;
        &lt;p&gt;
            In one week I will contact you (if you are chosen) via email with information about the books (when you leave a comment you will be required to enter a valid email). Anything that appears to be spam will be automatically deleted.
        &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leveille?a=O1W1wBVBAkE:vWrIN-mahU4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=O1W1wBVBAkE:vWrIN-mahU4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=O1W1wBVBAkE:vWrIN-mahU4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=O1W1wBVBAkE:vWrIN-mahU4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=O1W1wBVBAkE:vWrIN-mahU4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=O1W1wBVBAkE:vWrIN-mahU4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=O1W1wBVBAkE:vWrIN-mahU4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leveille/~4/O1W1wBVBAkE" height="1" width="1"/&gt;</content><feedburner:origLink>http://jasonleveille.com/2009/05/free-web-development-ebooks</feedburner:origLink></entry><entry><title>My New Pylons Powered Blog</title><link href="http://feedproxy.google.com/~r/leveille/~3/zUyDzORVBRI/my-new-pylons-powered-blog" rel="alternate" /><updated>2009-05-19T16:03:31Z</updated><id>tag:jasonleveille.com,2009-05-19:/2009/05/my-new-pylons-powered-blog</id><category term="Pylons" /><category term="Python" /><content type="html">&lt;p&gt;
            It has been at least 3 months since I started coding this blog, and last Friday I finally deployed the thing. Those of you who read my blog likely know that this project was born from a &lt;a href="http://jasonleveille.com/2009/02/graduate-school-independent-study"&gt;graduate school independent study proposal&lt;/a&gt;. No good has ever come from a Friday afternoon deployment (at least for me), however my graduation was this past Saturday (Wo0t) and I had challenged myself to a pre-graduation launch. My primary motivation with this post is to enable and test comments in production. I want to see if things fall apart, and if my primitive spam detection holds up. So, feel free to leave a comment, good or bad.
        &lt;/p&gt;&lt;!--more--&gt;
        &lt;h3&gt;
            My Original Goals
        &lt;/h3&gt;
        &lt;p&gt;
            In general I met most of the &lt;a href="http://jasonleveille.com/2009/02/graduate-school-independent-study"&gt;goals associated with the project&lt;/a&gt;, though I definitely didn't meet them all. For example:
        &lt;/p&gt;
        &lt;ul&gt;
            &lt;li&gt;I didn't create a lifestream and have yet to code anything against &lt;a href="http://couchdb.apache.org/"&gt;CouchDB&lt;/a&gt;
            &lt;/li&gt;
            &lt;li&gt;I am NOT using &lt;a href="http://nginx.net/"&gt;nginx&lt;/a&gt; to serve static media files, though that is likely to change
            &lt;/li&gt;
            &lt;li&gt;I am using &lt;a href="http://www.google.com/analytics/"&gt;Google Analytics&lt;/a&gt; instead of &lt;a href="http://www.haveamint.com/"&gt;Mint&lt;/a&gt;
            &lt;/li&gt;
            &lt;li&gt;I am not using &lt;a href="http://960.gs/"&gt;960gs&lt;/a&gt;
            &lt;/li&gt;
            &lt;li&gt;I did not use &lt;a href="http://www.dojotoolkit.org/"&gt;Dojo&lt;/a&gt; ... which I may or may not go back to
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;h3&gt;
            Looking Back
        &lt;/h3&gt;
        &lt;p&gt;
            It has been a busy semester for me. My original goal was to touch as many new technologies as I could. For example:
        &lt;/p&gt;
        &lt;ul&gt;
            &lt;li&gt;I had never used &lt;a href="http://www.postgresql.org/"&gt;PostgreSQL&lt;/a&gt; before
            &lt;/li&gt;
            &lt;li&gt;I had never coded anything of substance in &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt;
            &lt;/li&gt;
            &lt;li&gt;I had never used the &lt;a href="http://pylonshq.com/"&gt;Pylons&lt;/a&gt; web framework
            &lt;/li&gt;
            &lt;li&gt;I had never hosted my own web application on my own web server
            &lt;/li&gt;
            &lt;li&gt;I had never worked with &lt;a href="http://www.debian.org/"&gt;Debian&lt;/a&gt; (&lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt; doesn't count ;).
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;p&gt;
            All of these things combined amounted to some really late nights, however I'm satisfied with the project in its current state. Over the year I will be adding additional features and enhancements, all of which can be seen at my &lt;a href="http://github.com/leveille/wurdig/tree/master"&gt;Wurdig github repository&lt;/a&gt;.
        &lt;/p&gt;
        &lt;h3&gt;
            Why the name Wurdig
        &lt;/h3&gt;
        &lt;p&gt;
            Ralph Wurdig is my grandfather. He passed away in 2005 after a long battle with Cancer. It is an understatement to say that he was a great man. When I decided to start this project I wanted to give it a name, and Wurdig was the first thing that came to mind (and I now own www.wurdig.com, though I haven't done anything with it). In retrospect I'm very happy to have named the project after my grandfather. I have spent the last 3 months thinking about him as a result.
        &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leveille?a=zUyDzORVBRI:zjU1o-ry9FM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=zUyDzORVBRI:zjU1o-ry9FM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=zUyDzORVBRI:zjU1o-ry9FM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=zUyDzORVBRI:zjU1o-ry9FM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=zUyDzORVBRI:zjU1o-ry9FM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=zUyDzORVBRI:zjU1o-ry9FM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=zUyDzORVBRI:zjU1o-ry9FM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leveille/~4/zUyDzORVBRI" height="1" width="1"/&gt;</content><feedburner:origLink>http://jasonleveille.com/2009/05/my-new-pylons-powered-blog</feedburner:origLink></entry><entry><title>Book Review: Building Websites with ExpressionEngine 1.6</title><link href="http://feedproxy.google.com/~r/leveille/~3/O5PQHIPEucE/book-review-building-websites-with-expressionengine-16" rel="alternate" /><updated>2009-04-15T12:23:39Z</updated><id>tag:jasonleveille.com,2009-04-15:/2009/04/book-review-building-websites-with-expressionengine-16</id><category term="Book Reviews" /><category term="Expression Engine" /><category term="PHP" /><content type="html">&lt;p&gt;
            I was recently contacted by &lt;a href="http://www.packtpub.com/"&gt;PACKT Publishing&lt;/a&gt; and asked to provide a review for &lt;a href="http://www.packtpub.com/building-websites-with-expressionengine-1.6/book"&gt;Building Websites with ExpressionEngine 1.6&lt;/a&gt;. Following is the review.
        &lt;/p&gt;&lt;!--more--&gt;
        &lt;div class="hreview" id="hreview-A-Good-Introduction-To-ExpressionEngine"&gt;
            &lt;h3 class="summary"&gt;
                Finally, Energized About ExpressionEngine
            &lt;/h3&gt;
            &lt;p&gt;
                &lt;abbr title="2009-04-15T09:22-05:00" class="dtreviewed"&gt;Apr. 15, 2009&lt;/abbr&gt; by &lt;span class="reviewer vcard"&gt;&lt;span class="fn"&gt;Jason R. Leveille&lt;/span&gt;&lt;/span&gt;
            &lt;/p&gt;
            &lt;div class="item"&gt;
                &lt;a href="http://www.packtpub.com/building-websites-with-expressionengine-1.6/book"&gt;Building Websites with ExpressionEngine 1.6&lt;/a&gt;
            &lt;/div&gt;
            &lt;p&gt;
                &lt;abbr title="4" class="rating"&gt;★★★★☆&lt;/abbr&gt;&lt;span style="display: none;" class="version"&gt;0.4&lt;/span&gt;
            &lt;/p&gt;
            &lt;div class="description item vcard"&gt;
                &lt;p&gt;
                    Over the last 2 years I have listened to the buzz surrounding &lt;abbr title="Expression Engine"&gt;EE&lt;/abbr&gt;.&amp;nbsp; On at least 3 occasions I installed &lt;abbr title="Expression Engine"&gt;EE&lt;/abbr&gt;, only to be completely turned away by the administrative interface (one of these occasions I even purchased a personal license).&amp;nbsp; Admittedly, disregarding a perfectly valid &lt;abbr title="Content Management System"&gt;CMS&lt;/abbr&gt; purely for aesthetic disagreements is very shortsighted.&amp;nbsp; After reading&amp;nbsp; &lt;a href="http://www.packtpub.com/building-websites-with-expressionengine-1.6/book"&gt;Building Websites with ExpressionEngine 1.6&lt;/a&gt;, I now wish I had taken the time 2 years ago to look beyond the UI, and focus more on the functionality that &lt;abbr title="Expression Engine"&gt;EE&lt;/abbr&gt; would have brought to my projects.&amp;nbsp; This book provided me with that missing piece of the puzzle, and now there is no question that this &lt;abbr title="Content Management System"&gt;CMS&lt;/abbr&gt; will be on my options list when attempting to make good choices for my employer, and consequently for our clients.&amp;nbsp; If you have experience with the limitations of other solutions, and you are curious how &lt;abbr title="Expression Engine"&gt;EE&lt;/abbr&gt; can help you solve the problems you inevitably need to solve in your client projects, than this book is for you.
                &lt;/p&gt;
                &lt;h3&gt;
                    The Parts I Liked
                &lt;/h3&gt;
                &lt;p&gt;
                    Coming into this book, there were 3 questions I wanted answered:
                &lt;/p&gt;
                &lt;ol&gt;
                    &lt;li&gt;How flexible is the template system?
                    &lt;/li&gt;
                    &lt;li&gt;How easy is it to manage access control on a group and user basis?
                    &lt;/li&gt;
                    &lt;li&gt;How easy is it to write custom solutions that integrate with &lt;abbr title="Expression Engine"&gt;EE&lt;/abbr&gt;?
                    &lt;/li&gt;
                &lt;/ol&gt;
                &lt;p&gt;
                    Questions 1 and 2 were answered in thorough fashion, and as far as I’m concerned are worth the price of the book.&amp;nbsp; Question 3 was answered to some extent (through the good coverage of &lt;a href="http://expressionengine.com/docs/cp/admin/weblog_administration/custom_weblog_fields.html"&gt;custom fields&lt;/a&gt;), as well as the brief discussion of the difference between modules, plugins, and extensions.&amp;nbsp; The important point here is that the book answers the question, “Can &lt;abbr title="Expression Engine"&gt;EE&lt;/abbr&gt; be extended”.&amp;nbsp; The answer is a definite yes.
                &lt;/p&gt;
                &lt;h3&gt;
                    The Parts I Struggled With
                &lt;/h3&gt;
                &lt;p&gt;
                    As you may have noticed, I only gave this book a 4/5 star rating.&amp;nbsp; In general, I felt that too much time was spent on non &lt;abbr title="Expression Engine"&gt;EE&lt;/abbr&gt; specific topics.&amp;nbsp; For example, I don’t want to read about CSS in an &lt;abbr title="Expression Engine"&gt;EE&lt;/abbr&gt; book.&amp;nbsp; Tell me if there are any integration points I need to be made aware of, but please don’t try to teach me about &lt;abbr title="Cascading Style Sheets"&gt;CSS&lt;/abbr&gt;.&amp;nbsp; The time you’ve wasted on this topic (covered in hundreds - thousands? - of other books elsewhere) would have been better spent on &lt;abbr title="Expression Engine"&gt;EE&lt;/abbr&gt; (for example, with more details on writing your own modules/plugins/extensions).&amp;nbsp; I also found the example application subject matter (selling toast) to be a distraction.
                &lt;/p&gt;
                &lt;h3&gt;
                    Conclusion
                &lt;/h3&gt;
                &lt;p&gt;
                    I’m not familiar with the online documentation for &lt;abbr title="Expression Engine"&gt;EE&lt;/abbr&gt;, so I can’t say if this book would give you anything that you couldn’t find &lt;a href="http://expressionengine.com/docs/"&gt;online&lt;/a&gt;.&amp;nbsp; If you are like me, you are curious about the buzz surrounding &lt;abbr title="Expression Engine"&gt;EE&lt;/abbr&gt;, and you have a real need for a solution that makes it easy to solve real problems (see points 1 - 3 above), than this book will provide you with a great introduction.&amp;nbsp; It is written at a remedial level, but as far as I’m concerned that doesn’t detract from the book.&amp;nbsp; I wasn’t looking for howto answers as much as I was looking for a “what can you do for me” answers, and I got that.
                &lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leveille?a=O5PQHIPEucE:IYWZ2hcP3XY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=O5PQHIPEucE:IYWZ2hcP3XY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=O5PQHIPEucE:IYWZ2hcP3XY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=O5PQHIPEucE:IYWZ2hcP3XY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=O5PQHIPEucE:IYWZ2hcP3XY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=O5PQHIPEucE:IYWZ2hcP3XY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=O5PQHIPEucE:IYWZ2hcP3XY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leveille/~4/O5PQHIPEucE" height="1" width="1"/&gt;</content><feedburner:origLink>http://jasonleveille.com/2009/04/book-review-building-websites-with-expressionengine-16</feedburner:origLink></entry><entry><title>An Update for April '09</title><link href="http://feedproxy.google.com/~r/leveille/~3/SyeAOY5ec-0/an-update-for-april-09" rel="alternate" /><updated>2009-04-15T09:18:16Z</updated><id>tag:jasonleveille.com,2009-04-15:/2009/04/an-update-for-april-09</id><category term="CSS" /><category term="Expression Engine" /><category term="Open Source" /><category term="Pylons" /><category term="Python" /><content type="html">&lt;p&gt;
            March and April have been pretty busy months for me. Here are some things I’ve been working on, reading, studying, thinking about, etc.
        &lt;/p&gt;&lt;!--more--&gt;
        &lt;ul&gt;
            &lt;li&gt;A few weeks back we deployed one of the largest site projects I had ever worked on (built using &lt;a href="http://plone.org/"&gt;Plone&lt;/a&gt;).&amp;nbsp; The deployment went great and post deployment has been very smooth.&amp;nbsp; I’m hoping to find the time to write about my experience with Plone.
            &lt;/li&gt;
            &lt;li&gt;This month I seem to have an abundance of &lt;abbr title="Photoshop Deluxe"&gt;PSD&lt;/abbr&gt; files awaiting template build.&amp;nbsp; Luckily, I work with some exceptionally talented designers and working with their PSD files is a pleasure.&amp;nbsp; One of the templates will skin a &lt;a href="http://www.dotnetnuke.com/"&gt;DotNetNuke&lt;/a&gt; site build; another will skin an &lt;a href="http://expressionengine.com/"&gt;ExpressionEngine&lt;/a&gt; site build; two will represent skins for custom solutions; and another will skin a &lt;a href="http://wordpress.org/"&gt;Wordpress&lt;/a&gt; site build.
            &lt;/li&gt;
            &lt;li&gt;For the past month or so it seems that I have been using every one of my spare minutes working with &lt;a href="http://www.pylonshq.com/"&gt;Pylons&lt;/a&gt; and &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt;.&amp;nbsp; The more I code in Python the more I’m getting sucked in.&amp;nbsp; My new blog (&lt;a href="http://github.com/leveille/wurdig/tree/master"&gt;Wurdig&lt;/a&gt; is the name) is coming along nicely.&amp;nbsp; I feel like I have a ton more to complete, however there is no rush.&amp;nbsp; I believe I will have accomplished enough by early May to meet my &lt;a href="http://jasonleveille.com/2009/02/graduate-school-independent-study/"&gt;Independent Project&lt;/a&gt; obligations, however I may or may not deploy the new blog until June 1.
            &lt;/li&gt;
            &lt;li&gt;I’m looking at a frozen instance of &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt;/&lt;a href="http://aptana.com/studio/"&gt;Aptana Studio&lt;/a&gt; and wondering if I should just dump them completely.&amp;nbsp; I would say 40% of my coding time is in &lt;a href="http://www.vim.org/"&gt;VIM&lt;/a&gt; anyway, and I don’t really need the FTP/SFTP/SVN support offered by Aptana Studio (all of which I can manage via command line).&amp;nbsp; I need to reevaluate this.
            &lt;/li&gt;
            &lt;li&gt;I just finished reading &lt;a href="http://www.packtpub.com/building-websites-with-expressionengine-1.6/book"&gt;Building Websites with ExpressionEngine 1.6&lt;/a&gt; (and I’m currently writing a review).&amp;nbsp; This book has solidified my thinking that &lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;ct=res&amp;amp;cd=1&amp;amp;url=http%3A%2F%2Fexpressionengine.com%2F&amp;amp;ei=JurlSbX4JZKNtgeHppmYAg&amp;amp;usg=AFQjCNGpPjL_Te01PiwaO7v2uK6FLFnS6w&amp;amp;sig2=FO-OIpAhTHahafj7JqY01w"&gt;&lt;abbr title="Expression Engine"&gt;EE&lt;/abbr&gt;&lt;/a&gt; will be a good CMS choice for a lot of projects I work on (projects that have flexible template requirements, more fine grained access control, etc).&amp;nbsp; Luckily at the end of this month I’ll be starting my first &lt;abbr title="Expression Engine"&gt;EE&lt;/abbr&gt; project.&amp;nbsp; I’m excited.
            &lt;/li&gt;
            &lt;li&gt;I just purchased 4 more books from &lt;a href="http://www.amazon.com"&gt;Amazon&lt;/a&gt; and I’m looking forward to their arrival:
                &lt;ul&gt;
                    &lt;li&gt;
                        &lt;a href="http://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1239804286&amp;amp;sr=8-1"&gt;The Pragmatic Programmer: From Journeyman to Master&lt;/a&gt;
                    &lt;/li&gt;
                    &lt;li&gt;
                        &lt;a href="http://www.amazon.com/Essential-SQLAlchemy-Rick-Copeland/dp/0596516142/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1239804316&amp;amp;sr=1-1"&gt;Essential SQLAlchemy&lt;/a&gt;
                    &lt;/li&gt;
                    &lt;li&gt;
                        &lt;a href="http://www.amazon.com/HTTP-Developers-Handbook-Library/dp/0672324547/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1239804343&amp;amp;sr=1-1"&gt;HTTP Developer’s Handbook (Developer’s Library)&lt;/a&gt;
                    &lt;/li&gt;
                    &lt;li&gt;
                        &lt;a href="http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1239804367&amp;amp;sr=1-1"&gt;JavaScript: The Good Parts&lt;/a&gt;
                    &lt;/li&gt;
                &lt;/ul&gt;
            &lt;/li&gt;
            &lt;li&gt;
                &lt;a href="http://github.com/leveille/simple-mc/tree/master"&gt;SimpleMC&lt;/a&gt; has been seeing some action on the &lt;a href="http://groups.google.com/group/simple_mc"&gt;SMC Google group&lt;/a&gt;.&amp;nbsp; It looks like a few more people are starting to use the project.&amp;nbsp; A developer friend of mine (whose &lt;a href="http://tracker.trollfot.org/wiki/Dolmen"&gt;work&lt;/a&gt; I really respect) called SMC heavy for the few things that it does do.&amp;nbsp; He is absolutely correct about that, however it provided me with a good learning opportunity for &lt;a href="http://extjs.com/"&gt;EXTJS&lt;/a&gt;.
            &lt;/li&gt;
            &lt;li&gt;I’ll be graduating in May!!
            &lt;/li&gt;
        &lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leveille?a=SyeAOY5ec-0:NNDu6nWK5Lc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=SyeAOY5ec-0:NNDu6nWK5Lc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=SyeAOY5ec-0:NNDu6nWK5Lc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=SyeAOY5ec-0:NNDu6nWK5Lc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=SyeAOY5ec-0:NNDu6nWK5Lc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=SyeAOY5ec-0:NNDu6nWK5Lc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=SyeAOY5ec-0:NNDu6nWK5Lc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leveille/~4/SyeAOY5ec-0" height="1" width="1"/&gt;</content><feedburner:origLink>http://jasonleveille.com/2009/04/an-update-for-april-09</feedburner:origLink></entry><entry><title>Breaking the Maintenance Budget</title><link href="http://feedproxy.google.com/~r/leveille/~3/HHhH7fQj578/breaking-the-maintenance-budget" rel="alternate" /><updated>2009-03-19T13:11:00Z</updated><id>tag:jasonleveille.com,2009-03-19:/2009/03/breaking-the-maintenance-budget</id><category term="CSS" /><category term="Code Maintenance" /><content type="html">&lt;p&gt;
            Anyone who works in web design and development is familiar with spending a lot of time implementing client requests: modify this photo, change this footer text, add this navigation item, remove this link, etc.&amp;nbsp; Knowing this, I try to think about the decisions I’m making while putting together a template or writing code.&amp;nbsp; I often ask myself if the decision I’m currently making will impact maintenance later on.
        &lt;/p&gt;
        &lt;blockquote&gt;
            &lt;p&gt;
                Poor decisions during development/implementation lead to poor decisions during maintenance. (&lt;a href="http://twitter.com/jleveille/status/1254555057"&gt;via Twitter&lt;/a&gt;)
            &lt;/p&gt;
        &lt;/blockquote&gt;&lt;!--more--&gt;
        &lt;p&gt;
            The quote above could be reworded to: “Poor decisions during development/implementation lead to more difficult maintenance later on”.&amp;nbsp; I never claim to be perfect.&amp;nbsp; I know I make mistakes and I try to learn from those mistakes.&amp;nbsp; I try not to judge the work of others, but sometimes it is ok to be judgmental.&amp;nbsp; Sometimes it is ok to speak out against poor decisions.
        &lt;/p&gt;
        &lt;p&gt;
            &lt;span id="more-380"&gt;&lt;/span&gt;
        &lt;/p&gt;
        &lt;h3&gt;
            The Edit Request
        &lt;/h3&gt;
        &lt;p&gt;
            Today I was asked to remove a link from a navigation list.
        &lt;/p&gt;
        &lt;div class="wurdig-caption aligncenter" style="width: 468px"&gt;
            &lt;a href="http://www.flickr.com/photos/leveilles/3368417580/"&gt;&lt;img title="Navigation List" src="http://farm4.static.flickr.com/3546/3368417580_6a6b3ec877_o.png" alt="Navigation List" width="458" height="96"&gt;&lt;/a&gt;
            &lt;p class="wurdig-caption-text"&gt;
                Navigation List
            &lt;/p&gt;
        &lt;/div&gt;
        &lt;h3&gt;
            Removing the Link
        &lt;/h3&gt;
        &lt;div class="wurdig-caption aligncenter" style="width: 452px"&gt;
            &lt;a href="http://www.flickr.com/photos/leveilles/3368417638/"&gt;&lt;img title="After the Edit" src="http://farm4.static.flickr.com/3440/3368417638_eba9ff06d3_o.png" alt="After I Removed the Link" width="442" height="86"&gt;&lt;/a&gt;
            &lt;p class="wurdig-caption-text"&gt;
                After I Removed the Link
            &lt;/p&gt;
        &lt;/div&gt;
        &lt;p&gt;
            At this point I realized this template builder had achieved the button effect using one solid image.&amp;nbsp; I crossed my fingers and hoped that the image was a transparent PNG.
        &lt;/p&gt;
        &lt;h3&gt;
            The Solid Background Image - a JPEG
        &lt;/h3&gt;
        &lt;div class="wurdig-caption aligncenter" style="width: 521px"&gt;
            &lt;a href="http://www.flickr.com/photos/leveilles/3368417722/"&gt;&lt;img title="The JPEG Background Image" src="http://farm4.static.flickr.com/3564/3368417722_aba0a5f039_o.png" alt="asdf" width="511" height="242"&gt;&lt;/a&gt;
            &lt;p class="wurdig-caption-text"&gt;
                The JPEG Background Image
            &lt;/p&gt;
        &lt;/div&gt;
        &lt;p&gt;
            The problem here is that the background behind the buttons is a patterned background.&amp;nbsp; Of course, any time you put a transparent gradient over a patterned background you’re going to have your work cut out for you.
        &lt;/p&gt;
        &lt;h3&gt;
            Breaking the Maintenance Budget
        &lt;/h3&gt;
        &lt;p&gt;
            If&amp;nbsp; client asks me to remove a link from their navigation, the last thing I want to do is charge them for 2 hours.&amp;nbsp; In the example above, we settled on an alternate link to replace the one we were removing, however had I rebuilt this navigation, even 2 hours would probably not have been enough time.&amp;nbsp; I would have had to:
        &lt;/p&gt;
        &lt;ul&gt;
            &lt;li&gt;Recut the images (likely for a &lt;a href="http://www.alistapart.com/articles/slidingdoors/"&gt;sliding doors&lt;/a&gt; implementation)
            &lt;/li&gt;
            &lt;li&gt;Reworked the CSS
            &lt;/li&gt;
            &lt;li&gt;Tested in various browsers
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;p&gt;
            Thankfully, and without a hint of the technical underpinnings, we were able to convince the client that replacing the link (instead of removing) was the better approach.&amp;nbsp; Typically this kind of implementation is a window into a flawed template build.&amp;nbsp; One that will only cause problems as time goes by.&amp;nbsp; Decisions such as the one above are a source of major frustration when the maintenance man comes calling.&amp;nbsp; Without asking the simple question, “how will this affect maintenance”, you could be breaking the maintenance budget.&amp;nbsp; In the case above, we would have had to have eaten the additional cost to rework the navigation, or risked the potential of losing credibility with our client.&amp;nbsp; Neither is a good choice as far as I’m concerned.
        &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leveille?a=HHhH7fQj578:0EubqG-_eKI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=HHhH7fQj578:0EubqG-_eKI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=HHhH7fQj578:0EubqG-_eKI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=HHhH7fQj578:0EubqG-_eKI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=HHhH7fQj578:0EubqG-_eKI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=HHhH7fQj578:0EubqG-_eKI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=HHhH7fQj578:0EubqG-_eKI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leveille/~4/HHhH7fQj578" height="1" width="1"/&gt;</content><feedburner:origLink>http://jasonleveille.com/2009/03/breaking-the-maintenance-budget</feedburner:origLink></entry><entry><title>An Update for March '09</title><link href="http://feedproxy.google.com/~r/leveille/~3/y3qFgQAxxlQ/an-update-for-march-09" rel="alternate" /><updated>2009-03-13T15:23:17Z</updated><id>tag:jasonleveille.com,2009-03-13:/2009/03/an-update-for-march-09</id><category term="Miscellaneous" /><category term="Plone" /><category term="Pylons" /><content type="html">&lt;p&gt;
            As the month mark approaches since my last post I figured I would take a few moments to talk about some of the things I’ve been working on.&amp;nbsp; I’ve been working on:
        &lt;/p&gt;&lt;!--more--&gt;
        &lt;ul&gt;
            &lt;li&gt;being an attentive father when my girls are not sleeping
            &lt;/li&gt;
            &lt;li&gt;a rather large &lt;a href="http://plone.org/"&gt;Plone&lt;/a&gt; project (the combining of multiple sites into one) which is approaching deployment.&amp;nbsp; Day by day I’m learning to appreciate Plone more and more.&amp;nbsp; There are days when I wish Plone were in front of me so I could punch it in the head.&amp;nbsp; There are other days when I’m thankful for this really great CMS.
            &lt;/li&gt;
            &lt;li&gt;a &lt;a href="http://mu.wordpress.org/"&gt;Wordpress MU&lt;/a&gt; project that is also approaching deployment.&amp;nbsp; Wordpress MU has proven to be the correct choice for this particular project, based on project scale, content, and user requirements.&amp;nbsp; This particular project has been a joy to work on.
            &lt;/li&gt;
            &lt;li&gt;learning &lt;a href="http://pylonshq.com/"&gt;Pylons&lt;/a&gt; (and &lt;a href="http://sqlalchemy.org/"&gt;SQLAlchemy&lt;/a&gt;/&lt;a href="http://www.makotemplates.org/"&gt;Mako&lt;/a&gt;), and in parallel, continuing to learn &lt;a href="http://python.org/"&gt;Python&lt;/a&gt;.&amp;nbsp; I’m currently working my way through “&lt;a href="http://pylonsbook.com/"&gt;The Pylons Book&lt;/a&gt;“, and it is going very well.&amp;nbsp; I really like this framework.
            &lt;/li&gt;
            &lt;li&gt;getting through 2 graduate courses.&amp;nbsp; I’m so ready to be done with school.
            &lt;/li&gt;
            &lt;li&gt;getting &lt;a href="http://en.wikipedia.org/wiki/Love_handle"&gt;love handles.&lt;/a&gt; I never thought I’d say this, but I love the pear shaped look I’m developing … not.
            &lt;/li&gt;
        &lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leveille?a=y3qFgQAxxlQ:Lcor-kCwtCM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=y3qFgQAxxlQ:Lcor-kCwtCM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=y3qFgQAxxlQ:Lcor-kCwtCM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=y3qFgQAxxlQ:Lcor-kCwtCM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=y3qFgQAxxlQ:Lcor-kCwtCM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=y3qFgQAxxlQ:Lcor-kCwtCM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=y3qFgQAxxlQ:Lcor-kCwtCM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leveille/~4/y3qFgQAxxlQ" height="1" width="1"/&gt;</content><feedburner:origLink>http://jasonleveille.com/2009/03/an-update-for-march-09</feedburner:origLink></entry><entry><title>Web Server Transition Complete</title><link href="http://feedproxy.google.com/~r/leveille/~3/wdlaBIBuVRE/webserver-transition-complete" rel="alternate" /><updated>2009-02-26T05:37:49Z</updated><id>tag:jasonleveille.com,2009-02-26:/2009/02/webserver-transition-complete</id><category term="Server Administration" /><content type="html">&lt;p&gt;
            This blog is now being hosted from &lt;a href="http://jasonleveille.com/2009/02/building-the-new-web-server/"&gt;my own web server&lt;/a&gt;.&amp;nbsp; &lt;a href="http://www.slicehost.com/"&gt;Slicehost&lt;/a&gt; has served me very well for the last 6 months, however, complete control over every aspect of my server is something I’ve wanted for a long time.&amp;nbsp; The transition didn’t go as smooth as I would have liked (the DNS record was pointing at my home IP address rather than my static IP … whatever), but things now seem to be in working order.&amp;nbsp; If you notice any odd behavior please let me know.&amp;nbsp; For the more curious, here are some facts:
        &lt;/p&gt;&lt;!--more--&gt;
        &lt;ul&gt;
            &lt;li&gt;Debian GNU/Linux 5.0.0 &lt;a href="http://www.debian.org/releases/lenny/"&gt;(Lenny&lt;/a&gt;)
            &lt;/li&gt;
            &lt;li&gt;HP Netserver LC 2000r
            &lt;/li&gt;
            &lt;li&gt;Pentium 3, 733MHz
            &lt;/li&gt;
            &lt;li&gt;20GB HD
            &lt;/li&gt;
            &lt;li&gt;2.5 GB RAM, which was dirt cheap
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;div class="wurdig-caption aligncenter" style="width: 397px"&gt;
            &lt;a href="http://www.flickr.com/photos/leveilles/3273777405/in/photostream/"&gt;&lt;img title="New Server Image 2" src="http://farm4.static.flickr.com/3528/3273777405_4d86c05e60_b.jpg" alt="New Server Image 2" width="387" height="258"&gt;&lt;/a&gt;
            &lt;p class="wurdig-caption-text"&gt;
                New Server Image 2
            &lt;/p&gt;
        &lt;/div&gt;
        &lt;p&gt;
            I’m making good progress towards my goal of not only running the site from my own web server, but also &lt;a href="http://jasonleveille.com/2009/02/graduate-school-independent-study/"&gt;building my own blog engine&lt;/a&gt;. My fingers are crossed that things keep progressing smoothly.
        &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leveille?a=wdlaBIBuVRE:UID62D8Meu8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=wdlaBIBuVRE:UID62D8Meu8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=wdlaBIBuVRE:UID62D8Meu8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=wdlaBIBuVRE:UID62D8Meu8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=wdlaBIBuVRE:UID62D8Meu8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=wdlaBIBuVRE:UID62D8Meu8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=wdlaBIBuVRE:UID62D8Meu8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leveille/~4/wdlaBIBuVRE" height="1" width="1"/&gt;</content><feedburner:origLink>http://jasonleveille.com/2009/02/webserver-transition-complete</feedburner:origLink></entry><entry><title>Book Review: Pragmatic Version Control Using Git</title><link href="http://feedproxy.google.com/~r/leveille/~3/6fSU5A9JTZg/book-review-pragmatic-version-control-using-git" rel="alternate" /><updated>2009-02-15T23:57:05Z</updated><id>tag:jasonleveille.com,2009-02-15:/2009/02/book-review-pragmatic-version-control-using-git</id><category term="Book Reviews" /><category term="Git" /><content type="html">&lt;p&gt;
            I recently finished &lt;a href="http://www.pragprog.com/titles/tsgit/pragmatic-version-control-using-git"&gt;Pragmatic Version Control Using Git&lt;/a&gt;.&amp;nbsp; Following is the review.
        &lt;/p&gt;&lt;!--more--&gt;
        &lt;div id="hreview-A-Good-Introduction-To-Lighttpd" class="hreview"&gt;
            &lt;h3 class="summary"&gt;
                An Excellent Git Resource
            &lt;/h3&gt;
            &lt;p&gt;
                &lt;abbr class="dtreviewed" title="2009-01-21T09:22-05:00"&gt;Feb. 15, 2009&lt;/abbr&gt; by &lt;span class="reviewer vcard"&gt;&lt;span class="fn"&gt;Jason R. Leveille&lt;/span&gt;&lt;/span&gt;
            &lt;/p&gt;
            &lt;div class="item"&gt;
                &lt;a href="http://www.pragprog.com/titles/tsgit/pragmatic-version-control-using-git"&gt;Pragmatic Version Control Using Git&lt;/a&gt;
            &lt;/div&gt;
            &lt;p&gt;
                &lt;abbr class="rating" title="5"&gt;★★★★★&lt;/abbr&gt;&lt;span class="version" style="display: none;"&gt;0.5&lt;/span&gt;
            &lt;/p&gt;
            &lt;div class="description item vcard"&gt;
                &lt;p&gt;
                    I have been a fan of &lt;a href="http://www.travisswicegood.com/"&gt;Travis Swicegood’s&lt;/a&gt; work for a while now.&amp;nbsp; He not only has the ability to &lt;a href="http://www.simpletest.org/"&gt;write&lt;/a&gt; &lt;a href="http://phpt.info/"&gt;good&lt;/a&gt; &lt;a href="http://www.ning.com/"&gt;software&lt;/a&gt;, but he can also talk about it.&amp;nbsp; Travis’ latest work, &lt;em&gt;Pragmatic Version Control Using Git&lt;/em&gt;, is an excellent introduction into the world of distributed version control with &lt;a href="http://git-scm.com/"&gt;Git&lt;/a&gt;.&amp;nbsp; For a long time I’ve been a &lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt; user, and for a while now Git has been getting a lot of good press.&amp;nbsp; Like anyone who wants to use the best tools available I often wondered if the grass was greener on the Git side.&amp;nbsp; Travis addresses the advantages Git has over &lt;abbr title="subversion"&gt;SVN&lt;/abbr&gt; (and he even shows you how to use Git with &lt;abbr title="subversion"&gt;SVN&lt;/abbr&gt;), which should help you in derterming the color of your version control grass.&amp;nbsp; If you want to investigate what Git can do for you, not only will this book provide an excellent introduction, but it will also provide a great reference.&amp;nbsp; I recommend this one for your bookshelf.
                &lt;/p&gt;
                &lt;h3&gt;
                    The Parts I Liked
                &lt;/h3&gt;
                &lt;p&gt;
                    These days I don’t have a lot of time for books that fail to get to the good stuff quickly.&amp;nbsp; This book is a quick read and gets right to the point.&amp;nbsp; It starts with an introduction and moves right into the steps needed to set up this version control system.&amp;nbsp; From there it moves quickly into creating a project and working directly with Git.
                &lt;/p&gt;
                &lt;p&gt;
                    Git has a very rich feature set which could overwhelm a new user.&amp;nbsp; Travis does a nice job distilling the details down to exactly what you need to know, while including material later on in the book for users with more advanced needs.&amp;nbsp; Topics include, among other things: tags, branches, history, remote branches, best practices, and advanced topics.&amp;nbsp; Since I’m not one for repeating what you can find elsewhere, take a look at the full &lt;a href="http://media.pragprog.com/titles/tsgit/toc.pdf"&gt;table of contents&lt;/a&gt; for a complete list of topics.
                &lt;/p&gt;
                &lt;p&gt;
                    In addition to the topics previously mentioned, the book also has administrative and appendixes sections.&amp;nbsp; These sections alone are worth the price tag for this book.&amp;nbsp; Topics include:
                &lt;/p&gt;
                &lt;ul&gt;
                    &lt;li&gt;Migrating to Git
                    &lt;/li&gt;
                    &lt;li&gt;Running a Git Server with Gitosis
                    &lt;/li&gt;
                    &lt;li&gt;A Git Command Quick Reference
                    &lt;/li&gt;
                    &lt;li&gt;Other Resources and Tools
                    &lt;/li&gt;
                &lt;/ul&gt;
                &lt;h3&gt;
                    The Parts I Struggled With
                &lt;/h3&gt;
                &lt;p&gt;
                    Although I stand by my 5 rating for this book, everything didn’t go as smoothly as I would have liked.&amp;nbsp; Namely, I had a bit of a difficult time setting up &lt;a href="http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way"&gt;Gitosis&lt;/a&gt;.&amp;nbsp; Everything was fine until I had to initialize gitosis.&amp;nbsp; At this point things started going wrong for me (Ubuntu 8.04 is what I tested with).&amp;nbsp; I’m sorry that I can’t provide better details, as it has been a month since I struggled with this part of the book.&amp;nbsp; Admittedly, I didn’t put much of an effort into setting up Gitosis.&amp;nbsp; &lt;a href="https://github.com/"&gt;GitHub&lt;/a&gt; currently meets and exceeds all &lt;a href="https://github.com/leveille"&gt;my Git hosting&lt;/a&gt; needs.&amp;nbsp; When the time comes for me to have the need for private git repositories, I’ll revisit Gitosis.
                &lt;/p&gt;
                &lt;h3&gt;
                    Conclusion
                &lt;/h3&gt;
                &lt;p&gt;
                    For a long time I’ve been using Subversion for version control.&amp;nbsp; In the short time I’ve been using Git, it has become my version control system of choice.&amp;nbsp; As far as I’m concerned, it has lived up to the hype.&amp;nbsp; Like anything else there is a bit of a learning curve with Git, however with resources such as this book you’ll hit the ground running.&amp;nbsp; Not only that, but this book is really nice to have for the inevitable need of a refresher.
                &lt;/p&gt;
                &lt;p&gt;
                    If you like quick reads, packed with nuggets of very useful information, knowing full well that you’ll eventually need access to more advanced topics, than this might very well be the perfect Git book for you.
                &lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leveille?a=6fSU5A9JTZg:GWQ-8B8mm7M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=6fSU5A9JTZg:GWQ-8B8mm7M:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=6fSU5A9JTZg:GWQ-8B8mm7M:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=6fSU5A9JTZg:GWQ-8B8mm7M:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=6fSU5A9JTZg:GWQ-8B8mm7M:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=6fSU5A9JTZg:GWQ-8B8mm7M:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=6fSU5A9JTZg:GWQ-8B8mm7M:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leveille/~4/6fSU5A9JTZg" height="1" width="1"/&gt;</content><feedburner:origLink>http://jasonleveille.com/2009/02/book-review-pragmatic-version-control-using-git</feedburner:origLink></entry><entry><title>Building the new Web Server</title><link href="http://feedproxy.google.com/~r/leveille/~3/-8g3qYTN-48/building-the-new-web-server" rel="alternate" /><updated>2009-02-12T11:23:41Z</updated><id>tag:jasonleveille.com,2009-02-12:/2009/02/building-the-new-web-server</id><category term="Linux" /><category term="Server Administration" /><content type="html">&lt;p&gt;
            In &lt;a href="http://jasonleveille.com/2009/02/graduate-school-independent-study/"&gt;an earlier&lt;/a&gt; post I mentioned the fact that I will be rebuilding this blog.&amp;nbsp; One of my goals was to move away from &lt;a href="http://www.slicehost.com/"&gt;Slicehost&lt;/a&gt; and onto my own server.&amp;nbsp; I now have the server in my office, and I am starting the process of building the server to meet my requirements.&amp;nbsp; Here are some specs and some images in case you are curious.
        &lt;/p&gt;&lt;!--more--&gt;
        &lt;ul&gt;
            &lt;li&gt;HP Netserver LC 2000r
            &lt;/li&gt;
            &lt;li&gt;Pentium 3, 733MHz
            &lt;/li&gt;
            &lt;li&gt;20GB HD
            &lt;/li&gt;
            &lt;li&gt;512 MB RAM
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;p&gt;
            Yeah, I’ll be packing this puppy with ram and possibly upgrading the CPU.
        &lt;/p&gt;
        &lt;div class="wurdig-caption aligncenter" style="width: 397px"&gt;
            &lt;a href="http://www.flickr.com/photos/leveilles/3274595788/in/photostream/"&gt;&lt;img title="New Server Image 1" src="http://farm4.static.flickr.com/3478/3274595788_09938cd11b.jpg" alt="New Server Image 1" width="387" height="258"&gt;&lt;/a&gt;
            &lt;p class="wurdig-caption-text"&gt;
                New Server Image 1
            &lt;/p&gt;
        &lt;/div&gt;
        &lt;div class="wurdig-caption aligncenter" style="width: 397px"&gt;
            &lt;a href="http://www.flickr.com/photos/leveilles/3273777405/in/photostream/"&gt;&lt;img title="New Server Image 2" src="http://farm4.static.flickr.com/3528/3273777405_4d86c05e60_b.jpg" alt="New Server Image 2" width="387" height="258"&gt;&lt;/a&gt;
            &lt;p class="wurdig-caption-text"&gt;
                New Server Image 2
            &lt;/p&gt;
        &lt;/div&gt;
        &lt;p&gt;
            Much thanks goes to &lt;a href="http://www.blueatlas.com"&gt;Blue Atlas&lt;/a&gt; for not only giving me the server and an IP address, but for also providing me with support!
        &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leveille?a=-8g3qYTN-48:ZEOJ0wi0WuI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=-8g3qYTN-48:ZEOJ0wi0WuI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=-8g3qYTN-48:ZEOJ0wi0WuI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=-8g3qYTN-48:ZEOJ0wi0WuI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=-8g3qYTN-48:ZEOJ0wi0WuI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=-8g3qYTN-48:ZEOJ0wi0WuI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=-8g3qYTN-48:ZEOJ0wi0WuI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leveille/~4/-8g3qYTN-48" height="1" width="1"/&gt;</content><feedburner:origLink>http://jasonleveille.com/2009/02/building-the-new-web-server</feedburner:origLink></entry><entry><title>CakePHP vs Django vs Rails vs Who Cares - Make a Decision</title><link href="http://feedproxy.google.com/~r/leveille/~3/kuOCuYCJuU0/cakephp-vs-django-vs-rails-vs-who-cares-make-a-decision" rel="alternate" /><updated>2009-02-11T20:50:27Z</updated><id>tag:jasonleveille.com,2009-02-11:/2009/02/cakephp-vs-django-vs-rails-vs-who-cares-make-a-decision</id><category term="CakePHP" /><category term="Django" /><category term="Frameworks" /><category term="Rails" /><content type="html">&lt;p&gt;
            As someone who:
        &lt;/p&gt;
        &lt;ol&gt;
            &lt;li&gt;has made a framework choice, and developed numerous projects on that framework (&lt;a href="http://cakephp.org/"&gt;CakePHP&lt;/a&gt;) and,
            &lt;/li&gt;
            &lt;li&gt;is always &lt;a href="http://www.djangoproject.com/"&gt;poking&lt;/a&gt; &lt;a href="http://pylonshq.com/"&gt;around&lt;/a&gt; &lt;a href="http://rubyonrails.org/"&gt;with&lt;/a&gt; &lt;a href="http://framework.zend.com/"&gt;other&lt;/a&gt; &lt;a href="http://codeigniter.com/"&gt;frameworks&lt;/a&gt;
            &lt;/li&gt;
        &lt;/ol&gt;
        &lt;p&gt;
            I am often asked about the tough choice of picking among all the great framework choices (both in and out of the &lt;a href="http://php.net/"&gt;PHP&lt;/a&gt; world).&amp;nbsp; My advice is always the same.
        &lt;/p&gt;&lt;!--more--&gt;
        &lt;h3&gt;
            Who Cares - Make a Decision
        &lt;/h3&gt;
        &lt;p&gt;
            Getting stuck in &lt;a href="http://www.google.com/search?hl=en&amp;amp;q=which+framework+should+I+choose&amp;amp;btnG=Google+Search&amp;amp;aq=f&amp;amp;oq=which+framework+should+I+choos"&gt;choice limbo&lt;/a&gt; is bad for many reasons.&amp;nbsp; Perhaps the biggest one of all has to do with inaction.&amp;nbsp; If you are unsure which framework to choose from, chances are pretty good you’re not writing code or being as productive as you could be.&amp;nbsp; If you’re not writing code than you’re not starting the process of getting over one or more learning curves (every framework will carry a learning curve … if you choose a framework outside of a language you are familiar with, than you’ll have many learning curves to get over).
        &lt;/p&gt;
        &lt;h3&gt;
            Go Easy on Yourself
        &lt;/h3&gt;
        &lt;p&gt;
            I would recommend selecting a framework in a language that you are already familiar with.&amp;nbsp; If you are a PHP person, choose a &lt;a href="http://www.google.com/search?hl=en&amp;amp;q=php+frameworks&amp;amp;btnG=Search"&gt;PHP framework&lt;/a&gt;.&amp;nbsp; If you are a Python person, choose from a &lt;a href="http://www.google.com/search?hl=en&amp;amp;q=python+frameworks&amp;amp;btnG=Search"&gt;Python framework&lt;/a&gt;.&amp;nbsp; If you are a Ruby person, choose from a &lt;a href="http://www.google.com/search?hl=en&amp;amp;q=ruby+frameworks&amp;amp;btnG=Search"&gt;Ruby framework&lt;/a&gt;.&amp;nbsp; Just pick one and go with it, but don’t make the task any more difficult than it needs to be.
        &lt;/p&gt;
        &lt;h3&gt;
            Life After a Few Applications
        &lt;/h3&gt;
        &lt;p&gt;
            You won’t get anywhere with your choice unless you write a few applications with your chosen framework.&amp;nbsp; You’ll find (and this is the good part), that after you gain the confidence you can only gain by getting your hands dirty, you’ll more easily be able to transition into another framework.&amp;nbsp; Once you gain a firm grasp on the concepts of &lt;a href="http://en.wikipedia.org/wiki/Model-view-controller"&gt;MVC&lt;/a&gt;, it’s amazing how familiar other MVC frameworks will look.&amp;nbsp; If after a few projects you feel as though you’ve made a poor choice, choose something else.&amp;nbsp; Your new found confidence and experience should make the transition much less painful.
        &lt;/p&gt;
        &lt;h3&gt;
            Should you Choose a Framework
        &lt;/h3&gt;
        &lt;p&gt;
            If you look for them, you’ll find more &lt;a href="http://www.google.com/search?hl=en&amp;amp;q=frameworks+suck&amp;amp;btnG=Search"&gt;opinions&lt;/a&gt; &lt;a href="http://www.sitepoint.com/blogs/2008/08/29/rasmus-lerdorf-php-frameworks-think-again/"&gt;regarding&lt;/a&gt; frameworks than you could possibly care to read.&amp;nbsp; My personal feeling is that:
        &lt;/p&gt;
        &lt;ol&gt;
            &lt;li&gt;unless you are writing an application that can’t afford the performance penalty that is likely to come along with any framework (perhaps &amp;lt; .005% of applications on the Internet are in this category, and congratulations if you are working on one), &lt;strong&gt;or&lt;/strong&gt;
            &lt;/li&gt;
            &lt;li&gt;you are working on an application that doesn’t need a framework to begin with, &lt;strong&gt;or&lt;/strong&gt;
            &lt;/li&gt;
            &lt;li&gt;you shouldn’t be writing a custom application (when perhaps the best thing you can do for your client is choose a proven CMS … one that eases content management/maintenance/etc) &lt;strong&gt;than&lt;/strong&gt;
            &lt;/li&gt;
        &lt;/ol&gt;
        &lt;p&gt;
            Yes, you should choose a framework.&amp;nbsp; A good framework will help you stay organized, will remove a lot of mundane (but won’t remove the need for you to be responsible!), and will come packaged with proven, maintained, debuged, tested, cared for, etc, code.
        &lt;/p&gt;
        &lt;h3&gt;
            You’re Also Choosing a Community
        &lt;/h3&gt;
        &lt;p&gt;
            It’s not all about the code.&amp;nbsp; Though a framework won’t do your job for you, it can help you be better at your job.&amp;nbsp; Part of getting better is learning, and choosing a framework with a good community will help you learn.&amp;nbsp; Whatever you choose, either be involved or observe the community.&amp;nbsp; Admittedly, I am not very involved in the &lt;a href="http://groups.google.com/group/cake-php"&gt;CakePHP community&lt;/a&gt; (for many reasons … including the fact that I develop in .Net, Classic ASP, and Python).&amp;nbsp; But I am constantly observing the community.&amp;nbsp; I receive a daily digest of Google Group postings, I occasionally follow conversations on &lt;a href="http://en.wikipedia.org/wiki/IRC"&gt;IRC&lt;/a&gt;, and I read ~20 blogs having something to do with CakePHP.&amp;nbsp; I follow the community even though it’s been more than 2 months since I’ve developed in CakePHP.&amp;nbsp; I’ve made a commitment to this framework and I would be doing myself a disservice by not maintaining some sort of connection to the community.
        &lt;/p&gt;
        &lt;h3&gt;
            Last Thoughts
        &lt;/h3&gt;
        &lt;p&gt;
            In case I haven’t been clear about this: JUST MAKE A CHOICE and don’t worry about it.&amp;nbsp; Just make a choice and develop a few real applications with your choice.&amp;nbsp; If you’re worried about making the wrong choice, don’t be.&amp;nbsp; If you’re asking if you should choose framework X or framework Y, than you’re wasting time.&amp;nbsp; Making a choice is liberating.&amp;nbsp; Liberate yourself and start coding.
        &lt;/p&gt;
        &lt;p&gt;
            Even though you are choosing a framework, never stop learning/reading the language in which the framework is written.&amp;nbsp; I sometimes code with CakePHP, however I read PHP books/blogs/magazines that have nothing to do with CakePHP.&amp;nbsp; I read programming books/blogs/magazines so that I can be a better developer.&amp;nbsp; Try to remember that you are a programmer first; you are a PHP/Python/PERL/Ruby/etc programmer second; and you are a CakePHP/Django/Rails/etc developer third.
        &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leveille?a=kuOCuYCJuU0:DDaRK89IEUo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=kuOCuYCJuU0:DDaRK89IEUo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=kuOCuYCJuU0:DDaRK89IEUo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=kuOCuYCJuU0:DDaRK89IEUo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=kuOCuYCJuU0:DDaRK89IEUo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=kuOCuYCJuU0:DDaRK89IEUo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=kuOCuYCJuU0:DDaRK89IEUo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leveille/~4/kuOCuYCJuU0" height="1" width="1"/&gt;</content><feedburner:origLink>http://jasonleveille.com/2009/02/cakephp-vs-django-vs-rails-vs-who-cares-make-a-decision</feedburner:origLink></entry></feed>
