<?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-11-04T01:55:10Z</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" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry><title>Perfect Pitch</title><link href="http://feedproxy.google.com/~r/leveille/~3/ekU7G8rWtAI/perfect-pitch" rel="alternate" /><updated>2009-11-04T01:55:10Z</updated><id>tag:jasonleveille.com,2009-11-04:/blog/2009/11/perfect-pitch</id><category term="DMCA" /><category term="Google" /><category term="Perfect Pitch" /><category term="SEO" /><content type="html">&lt;p&gt;
            &lt;strong&gt;Some links to complete the backstory&lt;/strong&gt;: &lt;a href="http://adactio.com/journal/1623/"&gt;&lt;/a&gt;
        &lt;/p&gt;
        &lt;ul&gt;
            &lt;li&gt;
                &lt;a rel="external" href="http://adactio.com/journal/1623/"&gt;http://adactio.com/journal/1623/&lt;/a&gt;
            &lt;/li&gt;
            &lt;li&gt;
                &lt;a rel="external" href="http://www.thesession.org/discussions/display/21250"&gt;http://www.thesession.org/discussions/display/21250&lt;/a&gt;
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;h3&gt;
            Quest for the Perfect Pitch
        &lt;/h3&gt;
        &lt;p&gt;
            If in fact &lt;a rel="external" href="http://en.wikipedia.org/wiki/Digital_Millennium_Copyright_Act"&gt;&lt;abbr title="Digital Millennium Copyright Act"&gt;DMCA&lt;/abbr&gt;&lt;/a&gt; take-down has been used for &lt;a rel="external" href="http://en.wikipedia.org/wiki/Search_engine_optimization"&gt;&lt;abbr title="Search Engine Optimization"&gt;SEO&lt;/abbr&gt;&lt;/a&gt; gains, than I hope my small contribution to &lt;a rel="external" href="http://adactio.com"&gt;Adactio&lt;/a&gt;'s perfect pitch quest is helpful.
        &lt;/p&gt;
        &lt;blockquote&gt;
            &lt;p&gt;
                So let’s get this straight. In a discussion about perfect pitch, someone mentions the website perfectpitch.com. They don’t repost any materials from the site. They don’t even link to the site. They don’t really say anything particularly disparaging. But it all takes is for the owner of perfectpitch.com to abuse the Digitial Millenium Copyright Act with a spurious complaint and just like that, Google removes the discussion from its search index.&lt;br&gt;
                &lt;strong class="right"&gt;Adactio Post 1623 - Perfect Pitch&lt;/strong&gt;
            &lt;/p&gt;
        &lt;/blockquote&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leveille?a=ekU7G8rWtAI:cCvhrBi9VR8: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=ekU7G8rWtAI:cCvhrBi9VR8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=ekU7G8rWtAI:cCvhrBi9VR8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=ekU7G8rWtAI:cCvhrBi9VR8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=ekU7G8rWtAI:cCvhrBi9VR8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=ekU7G8rWtAI:cCvhrBi9VR8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=ekU7G8rWtAI:cCvhrBi9VR8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leveille/~4/ekU7G8rWtAI" height="1" width="1"/&gt;</content><feedburner:origLink>http://jasonleveille.com/blog/2009/11/perfect-pitch</feedburner:origLink></entry><entry><title>Concrete5 Mod Rewrite to Add Request Trailing Slash</title><link href="http://feedproxy.google.com/~r/leveille/~3/y-sE1F2h5iU/concrete5-mod-rewrite-to-add-request-trailing-slash" rel="alternate" /><updated>2009-10-23T18:09:27Z</updated><id>tag:jasonleveille.com,2009-10-23:/blog/2009/10/concrete5-mod-rewrite-to-add-request-trailing-slash</id><category term="Apache" /><category term="Mod Rewrite" /><category term="Regular Expressions" /><content type="html">&lt;p&gt;
            I recently had the need to add a trailing slash to http requests in a &lt;a href="http://www.concrete5.org/"&gt;Concrete5&lt;/a&gt; application (that did not have pretty urls enabled).&amp;nbsp; The issue stemed from clients adding links that did not include the trailing slash.&amp;nbsp; In the interest of keeping things clean, here are the rules I wanted to follow:
        &lt;/p&gt;
        &lt;ol&gt;
            &lt;li&gt;Only rewrite urls that contain index.php
            &lt;/li&gt;
            &lt;li&gt;Only rewrite urls where the above is satisfied and is followed by at least 1 trailing slash
            &lt;/li&gt;
            &lt;li&gt;Only rewrite urls where the above is satisfied and the url ends with at least one valid character (defined below)
            &lt;/li&gt;
            &lt;li&gt;Only rewrite urls where the above is satisfield and does not already end with a trailing slash
            &lt;/li&gt;
        &lt;/ol&gt;&lt;!--more--&gt;
        &lt;p&gt;
            &lt;strong&gt;Valid characters&lt;/strong&gt; include: upper and lower a-z, 0-9, forward slashes, and underscores and dashes.&amp;nbsp; Here is what I came up with.&amp;nbsp; If you see a fault, or can improve what is here, please do so.
        &lt;/p&gt;
        &lt;pre class="prettyprint"&gt;
 
&amp;lt;IfModule mod_rewrite.c&amp;gt;
    RewriteEngine On
    RewriteBase /

    # If the request contains index.php
    RewriteCond %{REQUEST_FILENAME} index.php

    # index.php must be preceeded by a forward slash
    # and one or more word characters including forward slashes and dashes
    # If the pattern contains questions marks, periods, etc, than this condition
    # will not be satisfied.  The pattern should not contain a trailing
    # forward slash
    RewriteCond %{REQUEST_URI} index\\.php[\\/]{1}[a-zA-Z0-9\\/_-]+[^\\/]$

    # Append a trailing forward slash to the request and redirect
    RewriteRule ^(.*)$ http://%{SERVER_NAME}/$1/ [L,R=301]
&amp;lt;/IfModule&amp;gt;
&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leveille?a=y-sE1F2h5iU:BloztJ2JvLU: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=y-sE1F2h5iU:BloztJ2JvLU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=y-sE1F2h5iU:BloztJ2JvLU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=y-sE1F2h5iU:BloztJ2JvLU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=y-sE1F2h5iU:BloztJ2JvLU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=y-sE1F2h5iU:BloztJ2JvLU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=y-sE1F2h5iU:BloztJ2JvLU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leveille/~4/y-sE1F2h5iU" height="1" width="1"/&gt;</content><feedburner:origLink>http://jasonleveille.com/blog/2009/10/concrete5-mod-rewrite-to-add-request-trailing-slash</feedburner:origLink></entry><entry><title>A Halloween Poem: Like All Shadows</title><link href="http://feedproxy.google.com/~r/leveille/~3/bopdGVKqtNw/a-halloween-poem-like-all-shadows" rel="alternate" /><updated>2009-10-19T20:33:34Z</updated><id>tag:jasonleveille.com,2009-10-19:/blog/2009/10/a-halloween-poem-like-all-shadows</id><category term="Miscellaneous" /><content type="html">&lt;p&gt;
            When he was a Junior in High School, my twin brother Jamie wrote a poem entitled, "Like All Shadows".&amp;nbsp; This morning I woke up with the poem in my head.&amp;nbsp; It has a Halloweenish sounding sound, and maybe that's why it was on my mind this morning.&amp;nbsp; Anyhow, enjoy the poem ... I know I have over the years, especially in October.
        &lt;/p&gt;&lt;!--more--&gt;
        &lt;h3&gt;
            Like All Shadows
        &lt;/h3&gt;
        &lt;p&gt;
            As I wander, feeling weary,&lt;br&gt;
            I look behind me what's that near me
        &lt;/p&gt;
        &lt;p&gt;
            I don't know it looks quite black&lt;br&gt;
            and tall and clear and short and flat
        &lt;/p&gt;
        &lt;p&gt;
            It sticks quite close with much persistence&lt;br&gt;
            on my heals like gum for instance
        &lt;/p&gt;
        &lt;p&gt;
            I wish it would leave me but wait it goes&lt;br&gt;
            with the sun like all shadows
        &lt;/p&gt;
        &lt;p&gt;
            With the sun like all shadows&lt;br&gt;
            I'm free I'm free away it goes
        &lt;/p&gt;
        &lt;p&gt;
            But wait it's dark I cannot see&lt;br&gt;
            alas the moon is guiding me
        &lt;/p&gt;
        &lt;p&gt;
            With this I take a look around&lt;br&gt;
            and see my shadow on the ground
        &lt;/p&gt;
        &lt;p&gt;
            I turn to run to get away&lt;br&gt;
            but he still chases anyway
        &lt;/p&gt;
        &lt;p&gt;
            So with a thought and on a whim&lt;br&gt;
            I turn hooray I'm chasing him
        &lt;/p&gt;
        &lt;p&gt;
            I'm chasing him I see no end&lt;br&gt;
            If anything I've found a friend
        &lt;/p&gt;
        &lt;p&gt;
            A friend who'll always ease my woes&lt;br&gt;
            who's always there like all shadows
        &lt;/p&gt;
        &lt;p&gt;
            Copyright © Jamie B. Leveille
        &lt;/p&gt;
        &lt;p&gt;
            &lt;strong&gt;Happy Halloween!!&lt;/strong&gt;
        &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leveille?a=bopdGVKqtNw:3O4SNo2AGkU: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=bopdGVKqtNw:3O4SNo2AGkU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=bopdGVKqtNw:3O4SNo2AGkU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=bopdGVKqtNw:3O4SNo2AGkU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=bopdGVKqtNw:3O4SNo2AGkU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=bopdGVKqtNw:3O4SNo2AGkU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=bopdGVKqtNw:3O4SNo2AGkU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leveille/~4/bopdGVKqtNw" height="1" width="1"/&gt;</content><feedburner:origLink>http://jasonleveille.com/blog/2009/10/a-halloween-poem-like-all-shadows</feedburner:origLink></entry><entry><title>Damascus HS October 2009 Presentation</title><link href="http://feedproxy.google.com/~r/leveille/~3/JG0qu9qMAhk/damascus-hs-october-2009-presentation" rel="alternate" /><updated>2009-10-19T20:06:27Z</updated><id>tag:jasonleveille.com,2009-10-19:/blog/2009/10/damascus-hs-october-2009-presentation</id><category term="Presentations" /><content type="html">&lt;p&gt;
            I recently had the pleasure of speaking to &lt;a rel="external" href="http://teachmetheweb.org"&gt;Jeff Brown&lt;/a&gt;'s &lt;abbr title="High School"&gt;HS&lt;/abbr&gt; Advanced Web Tools. This is the second year in a row that I've had the opportunity to &lt;a rel="external" href="http://teachmetheweb.org/index.php/tmtw/blog-article/2009_-_2010_guest_speaker_line_up/"&gt;visit with Jeff's students&lt;/a&gt;, and I have thoroughly enjoyed each visit.
        &lt;/p&gt;&lt;!--more--&gt;
        &lt;p&gt;
            The highlight of the talk likely came in the 42nd minute, when I &lt;a rel="external" href="http://twitter.com/jleveille/status/4891941792"&gt;tripped over my computer cord&lt;/a&gt; and sent my laptop crashing to the ground. It was all part of the show. I spent the weekend trying to prevent the &lt;a rel="external" href="http://twitter.com/jleveille/status/4964773593"&gt;imminent&lt;/a&gt; &lt;a rel="external" href="http://twitter.com/jleveille/status/4979048973"&gt;failure&lt;/a&gt; &lt;a rel="external" href="http://twitter.com/jleveille/status/4979151053"&gt;of my laptop &lt;abbr title="Hard Disk"&gt;HD&lt;/abbr&gt;&lt;/a&gt;. It's currently hanging on by a thin thread.
        &lt;/p&gt;
        &lt;h3&gt;
            A Lesson in Vocabulary
        &lt;/h3&gt;
        &lt;p&gt;
            My talk started with a bit of a warm-up ... I threw some talking points at them, from which I derived the vocabulary for the discussion. The talking points were:
        &lt;/p&gt;
        &lt;ul&gt;
            &lt;li&gt;Are you ever overwhelmed with what you are expected to know?
            &lt;/li&gt;
            &lt;li&gt;Remind yourself that the best solution to a problem is often the simplest.
            &lt;/li&gt;
            &lt;li&gt;Complex solutions cost much more over time, and are bound to make you miserable.
            &lt;/li&gt;
            &lt;li&gt;How can you possibly identify the simplest solution if you don't know much about the problem you are trying to solve? You need education.
            &lt;/li&gt;
            &lt;li&gt;Education is a long-term committment, and should rarely be a short-term goal.
            &lt;/li&gt;
            &lt;li&gt;Your best education will almost never happen in the classroom (after which I got a standing ovation).
            &lt;/li&gt;
            &lt;li&gt;While you are in the process of learning, of being "educated", you are going to make mistakes.
            &lt;/li&gt;
            &lt;li&gt;Mistakes are ok. You need to make mistakes in order to get better ... in order to know where you need improvement.
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;p&gt;
            From these talking points, I derived a simple set of vocabulary words:
        &lt;/p&gt;
        &lt;ul&gt;
            &lt;li&gt;Overwhelmed
            &lt;/li&gt;
            &lt;li&gt;Simplicity
            &lt;/li&gt;
            &lt;li&gt;Complexity
            &lt;/li&gt;
            &lt;li&gt;Education
            &lt;/li&gt;
            &lt;li&gt;Failure
            &lt;/li&gt;
            &lt;li&gt;Success
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;p&gt;
            Finally, I provided basic examples of simple solutions; I talked about the importance of dedication to education in the field of web development; and I talked about the part that failure plays in the success of a web developer.
        &lt;/p&gt;
        &lt;h3&gt;
            Impressions
        &lt;/h3&gt;
        &lt;p&gt;
            Overall I thought the presentation went ok. It could have been better. It could have been worse (I could have broken my face for example). The best part of the presentation came with the questions from students at the end. I think the next time that I talk (thanks to Mr. Brown, there will be a next time), I'll leave more time at the end to interact with the students ... and I'll leave my laptop unplugged.
        &lt;/p&gt;
        &lt;h3&gt;
            Presentation
        &lt;/h3&gt;
        &lt;ul&gt;
            &lt;li&gt;
                &lt;a href="http://jasonleveille.com/talks/10-2009-Damascus/damascus-presentation-10-15-2009.pdf"&gt;Presentation&lt;/a&gt; (.pdf)
            &lt;/li&gt;
        &lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leveille?a=JG0qu9qMAhk:VKVtjB6OJ8o: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=JG0qu9qMAhk:VKVtjB6OJ8o:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=JG0qu9qMAhk:VKVtjB6OJ8o:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=JG0qu9qMAhk:VKVtjB6OJ8o:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=JG0qu9qMAhk:VKVtjB6OJ8o:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=JG0qu9qMAhk:VKVtjB6OJ8o:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=JG0qu9qMAhk:VKVtjB6OJ8o:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leveille/~4/JG0qu9qMAhk" height="1" width="1"/&gt;</content><feedburner:origLink>http://jasonleveille.com/blog/2009/10/damascus-hs-october-2009-presentation</feedburner:origLink></entry><entry><title>BluePlate - Now With Partial HTML5 Support</title><link href="http://feedproxy.google.com/~r/leveille/~3/cngPYMYyMas/blueplate-now-with-partial-html5-support" rel="alternate" /><updated>2009-10-09T16:33:06Z</updated><id>tag:jasonleveille.com,2009-10-09:/blog/2009/10/blueplate-now-with-partial-html5-support</id><category term="CSS" /><category term="Frameworks" /><category term="HTML5" /><content type="html">&lt;p&gt;
            &lt;a rel="external" href="http://github.com/leveille/blueplate"&gt;BluePlate&lt;/a&gt; is a set of template files that we use at &lt;a rel="external" href="http://www.blueatlas.com"&gt;BlueAtlas&lt;/a&gt; to get up and running quickly with a site/template/application build.&amp;nbsp; We've found that by having this base set of template files, we can get from design to template completion at a much faster pace.&amp;nbsp; The other advantage comes in the form of consistancy and convention.&amp;nbsp; By having a consistent set of file names, locations, etc, we can focus our energy elsewhere.
        &lt;/p&gt;&lt;!--more--&gt;
        &lt;h3&gt;
            HTML5 Template
        &lt;/h3&gt;
        &lt;p&gt;
            For a while now I've wanted to also provide a simple starting point for HTML5 support.&amp;nbsp; This morning I created our base set of &lt;a rel="external" href="http://github.com/leveille/blueplate/tree/master/framework-lite-html5"&gt;HTML5 framework lite&lt;/a&gt; files.&amp;nbsp; These files provide partial support for the &lt;a rel="external" href="http://dev.w3.org/html5/spec/Overview.html"&gt;HTML5 spec&lt;/a&gt;.
        &lt;/p&gt;
        &lt;h3&gt;
            Why Only Partial Support?
        &lt;/h3&gt;
        &lt;p&gt;
            You really have 3 options when it comes to working with HTML5:
        &lt;/p&gt;
        &lt;ol&gt;
            &lt;li&gt;You only &lt;a rel="external" href="http://orderedlist.com/articles/getting-started-with-html5"&gt;modify the doctype&lt;/a&gt; to be HTML5 compliant.
            &lt;/li&gt;
            &lt;li&gt;You modify the doctype, and insert div attributes values that are consistant with &lt;a rel="external" href="http://html5doctor.com/category/elements/"&gt;new HTML5 element names&lt;/a&gt;.&amp;nbsp; This option allows you to acclimate yourself to the various new and shiny HTML5 elements, without jumping in head first.
            &lt;/li&gt;
            &lt;li&gt;You &lt;a rel="external" href="http://html5doctor.com/html-5-boilerplates/"&gt;dive right in&lt;/a&gt;, modify the doctype, and use the new HTML5 elements. Because of &lt;a rel="external" href="http://html5doctor.com/how-to-get-html5-working-in-ie-and-firefox-2/"&gt;issues in FF2 and IE&lt;/a&gt;, you'll also need to use an &lt;a rel="external" href="http://remysharp.com/downloads/html5.js"&gt;HTML5 enabling script&lt;/a&gt;.
            &lt;/li&gt;
        &lt;/ol&gt;
        &lt;p&gt;
            If you look at the source code, you'll notice that I went with option #2.&amp;nbsp; If you notice that I've hosed some things up (or my understading of new element usage is flawed), please let me know.
        &lt;/p&gt;
        &lt;h3&gt;
            Credit
        &lt;/h3&gt;
        &lt;p&gt;
            BluePlate started in the offices of &lt;a rel="external" href="http://www.blueatlas.com/"&gt;BlueAtlas&lt;/a&gt; during the summer of 2008.&amp;nbsp; &lt;a rel="external" href="http://teachmetheweb.org/"&gt;Jeff Brown&lt;/a&gt; and I decided that too much effort was being wasted on starting our template builds.&amp;nbsp; So, we decided to put together a simple starting point.&amp;nbsp; Over time it has been refined and simplified, however it is most certainly not perfect.&amp;nbsp; If you notice anything screwy, please let me know.
        &lt;/p&gt;
        &lt;p&gt;
            There really isn't much in BluePlate to be impressed with.&amp;nbsp; As I mentioned, its primary function is to provide us with a starting point.&amp;nbsp; With that said, I think it's important to acknowledge &lt;a href="http://developer.yahoo.com/yui/grids/"&gt;Yahoo Grids/Fonts/Reset/Type&lt;/a&gt;, which is used in the full version of our template files.&amp;nbsp; I also want to acknowledge &lt;a href="http://simplebits.com"&gt;Dan Cederholm&lt;/a&gt;, whose book, "&lt;a href="http://handcraftedcss.com/"&gt;HandCrafted CSS&lt;/a&gt;" was the inspiration for BluePlate lite, and &lt;a href="http://www.blueprintcss.org/"&gt;BluePrint CSS&lt;/a&gt;, whose print stylesheet we make use of.
        &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leveille?a=cngPYMYyMas:0eZhxKRnkS0: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=cngPYMYyMas:0eZhxKRnkS0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=cngPYMYyMas:0eZhxKRnkS0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=cngPYMYyMas:0eZhxKRnkS0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=cngPYMYyMas:0eZhxKRnkS0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=cngPYMYyMas:0eZhxKRnkS0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=cngPYMYyMas:0eZhxKRnkS0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leveille/~4/cngPYMYyMas" height="1" width="1"/&gt;</content><feedburner:origLink>http://jasonleveille.com/blog/2009/10/blueplate-now-with-partial-html5-support</feedburner:origLink></entry><entry><title>The CS Masters Degree Distraction</title><link href="http://feedproxy.google.com/~r/leveille/~3/BdGrJw2j8ts/the-cs-masters-degree-distraction" rel="alternate" /><updated>2009-10-06T18:42:36Z</updated><id>tag:jasonleveille.com,2009-10-06:/blog/2009/10/the-cs-masters-degree-distraction</id><category term="Graduate School" /><content type="html">&lt;p&gt;
            This past May I graduated with a Masters Degree in Computer Science. In the ~6 months that followed, I often found myself reflecting on the value of my new degree. What follows is my best effort to get those feelings recorded.
        &lt;/p&gt;&lt;!--more--&gt;
        &lt;h3&gt;
            A Brief History
        &lt;/h3&gt;
        &lt;p&gt;
            I started my first Graduate School class in the Fall of 2004 - a data structures course. With a full-time job and a growing family, taking 1 class per semester (and sometimes 2) was all I could manage. In the Spring of 2009, a full 5 years later, I finally graduated. Suffice it to say, these were 5 very long years for me. I often found myself wondering if Graduate School was the right decision. It is not in my nature to half-ass things, and my work ethic contributed to my success. I graduated with a 3.97 GPA. I just couldn't shake my desire to drop the theoretical, roll my sleeves up, and get some real work done.
        &lt;/p&gt;
        &lt;blockquote&gt;
            &lt;p&gt;
                Graduate School continually distracted me from the things I really wanted to learn.
            &lt;/p&gt;
        &lt;/blockquote&gt;
        &lt;h3&gt;
            A Distraction
        &lt;/h3&gt;
        &lt;p&gt;
            I often felt distracted while sitting in class. That doesn't mean I didn't learn anything of value though. I had some very interesting courses with some great professors. Just look at the list of my favorite classes below.&amp;nbsp; You'll probably be envious.&amp;nbsp; I worked on some challenging team projects and met some really great people. I just never felt fulfilled. Even in my favorite classes, I couldn't help but wonder why I wasn't hearing about things like version control or deployment.&amp;nbsp; Even my favorite classes left me often feeling a little empty (the exceptions being "Algorithms and Programming" and "Advanced Data Structures").&amp;nbsp; For me, the experience of being in a graduate school course, or of studying theortetical topics, never held water to my web development books, or my late night hack-a-thons. HTTP, HTML, CSS, PHP, Python, SQL, performance tuning, JavaScript, Apache, server administration, Web Services ... there was no comparison for me.
        &lt;/p&gt;
        &lt;blockquote&gt;
            &lt;p&gt;
                I often felt distracted while sitting in class ... I often felt like I was pretending to care.
            &lt;/p&gt;
        &lt;/blockquote&gt;
        &lt;h3&gt;
            A Developers Quest to be Better
        &lt;/h3&gt;
        &lt;p&gt;
            5 years ago I fooled myself into thinking that a degree in Computer Science would make me a better developer. What I didn't realize at the time was that writing code and building things are what really matter ... along with some less tangible inner qualities. At my core I have an insatiable love of learning and an uncompromising desire to improve. The caveat here is that I can't love to learn everything, and I didn't love a significant portion of what I was learning in Graduate School. I often felt like I was pretending to care.&amp;nbsp; 3 hours of straight PowerPoint would be enough to drive anyone insane.&amp;nbsp; Maybe my negative memories have more to do with how I was learning, instead of what I was learning.
        &lt;/p&gt;
        &lt;h3&gt;
            Not a Single Test
        &lt;/h3&gt;
        &lt;p&gt;
            One of the courses I was most looking forward to during my time in school was a Software Testing and Quality Assurance course. Imagine my surprise when I got to the end of the course without ever being asked to write a test. Really! I never had to write a single test. Enough said.
        &lt;/p&gt;
        &lt;h3&gt;
            My Favorite Courses
        &lt;/h3&gt;
        &lt;ul&gt;
            &lt;li&gt;Algorithms and Programming 1/2 (Excellent Professor made Java interesting)
            &lt;/li&gt;
            &lt;li&gt;WWW Programming (Learned all about &lt;a href="http://www.perl.org/"&gt;PERL&lt;/a&gt;)
            &lt;/li&gt;
            &lt;li&gt;Advanced Data Structures (Some great C++ Immersion)
            &lt;/li&gt;
            &lt;li&gt;Current Technologies in Web (Created &lt;a rel="external" href="http://smc.jasonleveille.com:8081/"&gt;SimpleMC&lt;/a&gt;, and a &lt;a rel="external" href="http://rubyonrails.org/"&gt;Rails&lt;/a&gt; CMS)
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;h3&gt;
            My Least Favorite Courses
        &lt;/h3&gt;
        &lt;ul&gt;
            &lt;li&gt;Artificial Intelligence (No clear direction and focus)
            &lt;/li&gt;
            &lt;li&gt;Computer Organization and Design (3 hours every week of PowerPoint hell)
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;h3&gt;
            My Most Disappointing Courses
        &lt;/h3&gt;
        &lt;ul&gt;
            &lt;li&gt;Software Testing (Not a single test required)
            &lt;/li&gt;
            &lt;li&gt;Programming Languages (Not a clear focus)
            &lt;/li&gt;
            &lt;li&gt;Principles of Software Engineering (A group project that did little to mimic the actual software development process ... like firing those who aren't performing)
            &lt;/li&gt;
            &lt;li&gt;Web Services (Half assed SOAP projects)
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;h3&gt;
            Conclusion
        &lt;/h3&gt;
        &lt;p&gt;
            In re-reading my post, I don't believe I have captured my true feelings.&amp;nbsp; But I'm going to leave the words as they are.&amp;nbsp; Perhaps it will generate some discussion, or perhaps my words will fall silently into the bit bucket. It's interesting that I can have such negative feelings about graduate school, and at the same time look back fondly on at least 5 courses.&amp;nbsp; In retrospect, a lot of what I've felt might have to do with the fact that I took all my elective courses up front, and left all of my required courses for the end.&amp;nbsp; Maybe this has more to do with my impressions than I've allowed myself to admit.
        &lt;/p&gt;
        &lt;p&gt;
            For some people, I'm sure a &lt;abbr title="Computer Science"&gt;CS&lt;/abbr&gt; Masters Degree would be well worth the time and effort. If you exhibit these traits, and you are considering a degree in &lt;abbr title="Computer Science"&gt;CS&lt;/abbr&gt; , than perhaps you should question yourself:
        &lt;/p&gt;
        &lt;ul&gt;
            &lt;li&gt;You love to learn anything and everything you can about web development.
            &lt;/li&gt;
            &lt;li&gt;You are constantly buying web development books from Amazon or adding books to your wish list.
            &lt;/li&gt;
            &lt;li&gt;You subscribe to more web development related &lt;abbr title="Really Simple Syndication"&gt;RSS&lt;/abbr&gt; feeds than you could possibly get through in a day.
            &lt;/li&gt;
            &lt;li&gt;You devour any and every web development related Podcast you can get your hands on (or maybe not directly web related. My absolute favorite is &lt;a rel="external" href="http://www.grc.com/securitynow.htm"&gt;Security Now&lt;/a&gt;)
            &lt;/li&gt;
            &lt;li&gt;You don't feel at ease unless you are writing code and building things.
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;p&gt;
            I think you've gotten the idea. Feel free to leave a comment if you agree/disagree.
        &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leveille?a=BdGrJw2j8ts:UodF0xf1CN8: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=BdGrJw2j8ts:UodF0xf1CN8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=BdGrJw2j8ts:UodF0xf1CN8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=BdGrJw2j8ts:UodF0xf1CN8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=BdGrJw2j8ts:UodF0xf1CN8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=BdGrJw2j8ts:UodF0xf1CN8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=BdGrJw2j8ts:UodF0xf1CN8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leveille/~4/BdGrJw2j8ts" height="1" width="1"/&gt;</content><feedburner:origLink>http://jasonleveille.com/blog/2009/10/the-cs-masters-degree-distraction</feedburner:origLink></entry><entry><title>MySQL GROUP BY (Aggregate) Functions: A Prime Candidate</title><link href="http://feedproxy.google.com/~r/leveille/~3/bO_FEtudKG4/mysql-group-by-aggregate-functions-a-prime-candidate" rel="alternate" /><updated>2009-09-28T01:07:24Z</updated><id>tag:jasonleveille.com,2009-09-28:/blog/2009/09/mysql-group-by-aggregate-functions-a-prime-candidate</id><category term="MySQL" /><content type="html">&lt;h3&gt;
            The Problem
        &lt;/h3&gt;
        &lt;p&gt;
            A few days ago I was contacted by a colleague in need of some &lt;abbr title="Structured Query Language"&gt;SQL&lt;/abbr&gt; help. He has a piece of athletic management software that tracks various metadata about teams. In his schedule table he tracks the host/opponent id and game scores, among other things. He needed an easy way to query for the number of wins, losses, and ties for each team (for all completed games). Following is the query he had constructed prior to contacting me:
        &lt;/p&gt;
        &lt;pre class="prettyprint"&gt;
SELECT id, host_id, host_score, opponent_id, opp_score,
(case
   when (host_score &amp;gt; opp_score) then host_id
   when (host_score &amp;lt; opp_score) then opponent_id
   else 0
end) as winner,
(case
   when (opp_score &amp;gt; host_score) then host_id
   when (opp_score &amp;lt; host_score) then opponent_id
   else 0
end) as loser,
(case
   when (opp_score = host_score) then opponent_id
   else 0 
end) as tie1,
(case
   when (opp_score = host_score) then host_id
   else 0
end) as tie2
FROM schedule
WHERE status = 'COM'
&lt;/pre&gt;
        &lt;p&gt;
            The query above gave him the winner and loser for each game (and whether or not the game resulted in a tie), however he needed an aggregate count of wins/losses/ties.
        &lt;/p&gt;
        &lt;h3&gt;
            MySQL GROUP BY (Aggregate) Functions: SUM
        &lt;/h3&gt;
        &lt;p&gt;
            I don't write &lt;abbr title="Structured Query Language"&gt;SQL&lt;/abbr&gt; every day, however my instincts told me two things: 1) his solution looked much to complicated for what he was trying to accomplish (a sure sign that you might be doing something wrong), and 2) this sounded like a classic &lt;a rel="external" href="http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html"&gt;GROUP BY&lt;/a&gt; problem. After pulling out &lt;a href="../2009/09/my-mini-book-library"&gt;my trusty SQL book&lt;/a&gt; for reference, I constructed the following query and passed it along:
        &lt;/p&gt;
        &lt;pre class="prettyprint"&gt;
SELECT host_id, 
    SUM(host_id &amp;gt; opponent_id) AS wins, 
    SUM(host_id &amp;lt; opponent_id) AS losses, 
    SUM(host_id = opponent_id) AS ties 
FROM schedule 
WHERE status = 'COM' 
GROUP BY host_id
&lt;/pre&gt;
        &lt;h3&gt;
            Conclusion
        &lt;/h3&gt;
        &lt;p&gt;
            If you need aggregate data on fields in one of your database tables (&lt;a rel="external" href="http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_avg"&gt;AVG&lt;/a&gt;, &lt;a rel="external" href="http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_count"&gt;COUNT&lt;/a&gt;, &lt;a rel="external" href="http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_sum"&gt;SUM&lt;/a&gt;, etc), your mind should immediately go to GROUP BY. It could save you time and headache.
        &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leveille?a=bO_FEtudKG4:EOni6L_5Qyo: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=bO_FEtudKG4:EOni6L_5Qyo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=bO_FEtudKG4:EOni6L_5Qyo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=bO_FEtudKG4:EOni6L_5Qyo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=bO_FEtudKG4:EOni6L_5Qyo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=bO_FEtudKG4:EOni6L_5Qyo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=bO_FEtudKG4:EOni6L_5Qyo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leveille/~4/bO_FEtudKG4" height="1" width="1"/&gt;</content><feedburner:origLink>http://jasonleveille.com/blog/2009/09/mysql-group-by-aggregate-functions-a-prime-candidate</feedburner:origLink></entry><entry><title>Securely Mounting an Encrypted Remote TrueCrypt File as a Local Directory</title><link href="http://feedproxy.google.com/~r/leveille/~3/Of1NxQvjpOI/securely-mounting-an-encrypted-remote-truecrypt-file-as-a-local-directory" rel="alternate" /><updated>2009-09-25T14:34:34Z</updated><id>tag:jasonleveille.com,2009-09-25:/blog/2009/09/securely-mounting-an-encrypted-remote-truecrypt-file-as-a-local-directory</id><category term="Linux" /><category term="SSH" /><category term="TrueCrypt" /><category term="Ubuntu" /><content type="html">&lt;p&gt;
            The following post will provide a quick (aka, lacking detail and description) guide for securely mounting an encrypted remote &lt;a rel="external" href="http://www.truecrypt.org/"&gt;TrueCrypt&lt;/a&gt; file as a local directory. If you need more information, feel free to leave a comment with your question(s) and I'll do my best to get back to you.
        &lt;/p&gt;
        &lt;h3&gt;
            Why?
        &lt;/h3&gt;
        &lt;p&gt;
            Do you have sensitive files that you want protected and accessible from a central location? Cool. So do I.
        &lt;/p&gt;
        &lt;h3&gt;
            Materials
        &lt;/h3&gt;
        &lt;ul&gt;
            &lt;li&gt;I performed these steps on 3 Ubuntu 9.04 machines. Your mileage may vary.
            &lt;/li&gt;
            &lt;li&gt;A remote server that you have &lt;abbr title="Secure Shell"&gt;SSH&lt;/abbr&gt;/&lt;abbr title="Secure File Transfer Protocol"&gt;SFTP&lt;/abbr&gt; access to.
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;h3&gt;
            Resources
        &lt;/h3&gt;
        &lt;ul&gt;
            &lt;li&gt;
                &lt;a rel="external" href="http://embraceubuntu.com/2005/10/28/how-to-mount-a-remote-ssh-filesystem-using-sshfs/"&gt;Embrace Ubuntu&lt;/a&gt;
            &lt;/li&gt;
            &lt;li&gt;
                &lt;a rel="external" href="http://ubuntuforums.org/showthread.php?t=972548"&gt;Ubuntu Forums&lt;/a&gt;
            &lt;/li&gt;
        &lt;/ul&gt;&lt;!--more--&gt;
        &lt;h3&gt;
            On Your Remote Machine
        &lt;/h3&gt;
        &lt;ul&gt;
            &lt;li&gt;Log into your remote machine and create a directory (that you will eventually mount)
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;h3&gt;
            On Your Local Machine
        &lt;/h3&gt;
        &lt;ul&gt;
            &lt;li&gt;Install sshfs
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;pre class="prettyprint"&gt;
    sudo apt-get install sshfs
&lt;/pre&gt;
        &lt;ul&gt;
            &lt;li&gt;Create a directory that will serve as the local mount point for your remote directory
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;pre class="prettyprint"&gt;
    mkdir ~/dirname
&lt;/pre&gt;
        &lt;ul&gt;
            &lt;li&gt;Check to see if you can mount a remote directory locally
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;pre class="prettyprint"&gt;
    sshfs your.remote.ip.address:/remote/directory/to/mount ~/dirname
&lt;/pre&gt;
        &lt;ul&gt;
            &lt;li&gt;Check your desktop to see if you see the mount point. Double click it and create a file w/in the mount point. Visit your remote server and see if the file is there.
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;p class="wurdig-entry-gallery"&gt;
            &lt;a rel="external" href="http://www.flickr.com/photos/leveille/3953368918/in/set-72157622395677666/"&gt;&lt;img src="http://farm3.static.flickr.com/2501/3953368918_911d47e62b.jpg" alt="Adding a test file to a locally mounted remote directory." width="500" height="259"&gt;&lt;/a&gt; &lt;a rel="external" href="http://www.flickr.com/photos/leveille/3953369038/in/set-72157622395677666/"&gt;&lt;img src="http://farm3.static.flickr.com/2464/3953369038_887cabb3b0.jpg" alt="Checking the remote existence of a locally added file." width="500" height="344"&gt;&lt;/a&gt;
        &lt;/p&gt;
        &lt;ul&gt;
            &lt;li&gt;For now, dismount the directory
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;pre class="prettyprint"&gt;
    fusermount -u ~/dirname
&lt;/pre&gt;
        &lt;h4&gt;
            The good stuff. Mounting an encrypted TrueCrypt file as a local directory.
        &lt;/h4&gt;
        &lt;ul&gt;
            &lt;li&gt;Specify user_allow_other in fuse.conf
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;pre class="prettyprint"&gt;
    sudo vi /etc/fuse.conf
&lt;/pre&gt;
        &lt;ul&gt;
            &lt;li&gt;Add the following line to the end of the configuration file:
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;pre class="prettyprint"&gt;
    user_allow_other
&lt;/pre&gt;
        &lt;ul&gt;
            &lt;li&gt;On 2 different machines I had to restart Ubuntu (in order for the upcoming steps in this guide to work). You may have to do the same.
            &lt;/li&gt;
            &lt;li&gt;Mount your remote directory, but this time specify the allow_other directive (man sshfs for more information)
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;pre class="prettyprint"&gt;
    sshfs your.remote.ip.address:/remote/directory/to/mount ~/dirname -o allow_other 
&lt;/pre&gt;
        &lt;ul&gt;
            &lt;li&gt;Download and install &lt;a rel="external" href="http://www.truecrypt.org/downloads"&gt;TrueCrypt&lt;/a&gt;. Installation should be pretty painless. Leave a comment here if you experience otherwise.
            &lt;/li&gt;
            &lt;li&gt;Navigate to Applications &amp;gt;&amp;gt; Other &amp;gt;&amp;gt; TrueCrypt ... click it. Proceed with the following steps:
                &lt;ol&gt;
                    &lt;li&gt;Create Volume
                    &lt;/li&gt;
                    &lt;li&gt;Create an encrypted file container
                    &lt;/li&gt;
                    &lt;li&gt;Standard TrueCrypt volume
                    &lt;/li&gt;
                    &lt;li&gt;Select file, navigate to your local mount point, and enter a name (any name your heart desires)
                    &lt;/li&gt;
                    &lt;li&gt;Click Save, followed by Next
                    &lt;/li&gt;
                    &lt;li&gt;Leave the Encryption Algorithm and Hash Algorithm on their defaults (unless you don't want to). Click Next
                    &lt;/li&gt;
                    &lt;li&gt;Specify the volume size and click Next
                    &lt;/li&gt;
                    &lt;li&gt;Enter a &lt;strong&gt;strong password&lt;/strong&gt; and click Next
                    &lt;/li&gt;
                    &lt;li&gt;Select a FileSystem type of Linux Ext3 and click Next
                    &lt;/li&gt;
                    &lt;li&gt;If you will mount the file on other platforms (such as Windows) select the first option, otherwise select the second. Click Next
                    &lt;/li&gt;
                    &lt;li&gt;Randomly move your mouse and click format
                    &lt;/li&gt;
                    &lt;li&gt;Enter your local system administrator password when prompted
                    &lt;/li&gt;
                    &lt;li&gt;Finally, at the "Volume Created" window, click Exit
                    &lt;/li&gt;
                &lt;/ol&gt;
            &lt;/li&gt;
            &lt;li&gt;Now, at the main TrueCrypt window, click the "Select File" button
            &lt;/li&gt;
            &lt;li&gt;Navigate to your mount point and select the TrueCrypt volume you just created
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;p class="wurdig-entry-gallery"&gt;
            &lt;a rel="external" href="http://www.flickr.com/photos/leveille/3952598541/in/set-72157622395677666/"&gt;&lt;img src="http://farm4.static.flickr.com/3433/3952598541_1450c10465.jpg" alt="Selecting the TrueCrypt volume to mount." width="500" height="377"&gt;&lt;/a&gt;
        &lt;/p&gt;
        &lt;ul&gt;
            &lt;li&gt;Once selected, click the "Mount" button
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;p class="wurdig-entry-gallery"&gt;
            &lt;a rel="external" href="http://www.flickr.com/photos/leveille/3953375184/in/set-72157622395677666/"&gt;&lt;img src="http://farm4.static.flickr.com/3432/3953375184_d3c09a71b1.jpg" alt="Mounting the selected TrueCrypt volume." width="500" height="442"&gt;&lt;/a&gt;
        &lt;/p&gt;
        &lt;ul&gt;
            &lt;li&gt;When prompted, enter the TrueCrypt volume password you entered when creating the encrypted volume
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;p class="wurdig-entry-gallery"&gt;
            &lt;a rel="external" href="http://www.flickr.com/photos/leveille/3952598573/in/set-72157622395677666/"&gt;&lt;img src="http://farm3.static.flickr.com/2565/3952598573_c5ee96253c.jpg" alt="Entering the volume password in order to mount the TrueCrypt volume. " width="480" height="148"&gt;&lt;/a&gt;
        &lt;/p&gt;
        &lt;ul&gt;
            &lt;li&gt;Take a look at your desktop. If this has worked for you, you should see a mount point for your remote directory, as well as a mount point for your TrueCrypt volume. Add a file to the TrueCrypt container and poke around a little bit.
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;p class="wurdig-entry-gallery"&gt;
            &lt;a rel="external" href="http://www.flickr.com/photos/leveille/3952598519/in/set-72157622395677666/"&gt;&lt;img src="http://farm4.static.flickr.com/3529/3952598519_9a90f07b43.jpg" alt="Checking the desktop to see if the volume has been mounted." width="480" height="406"&gt;&lt;/a&gt; &lt;a rel="external" href="http://www.flickr.com/photos/leveille/3953375288/in/set-72157622395677666/"&gt;&lt;img src="http://farm4.static.flickr.com/3527/3953375288_c5b6e82c11.jpg" alt="Adding a file to the TrueCrypt volume." width="480" height="290"&gt;&lt;/a&gt;
        &lt;/p&gt;
        &lt;ul&gt;
            &lt;li&gt;When you are done, be sure to Dismount your mounted TrueCrypt volume. This can be done by visiting the main TrueCrypt window and selecting the "Dismount" button
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;h3&gt;
            Commands (For Quick Reference)
        &lt;/h3&gt;
        &lt;p&gt;
            &lt;strong&gt;Mount a remote directory&lt;/strong&gt;
        &lt;/p&gt;
        &lt;pre class="prettyprint"&gt;
    sshfs your.remote.ip.address:/remote/directory/to/mount ~/dirname -o allow_other
&lt;/pre&gt;
        &lt;p&gt;
            &lt;strong&gt;Dismount the remote directory&lt;/strong&gt;
        &lt;/p&gt;
        &lt;pre class="prettyprint"&gt;
    fusermount -u ~/dirname
&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leveille?a=Of1NxQvjpOI:4PIR2J8R94g: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=Of1NxQvjpOI:4PIR2J8R94g:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=Of1NxQvjpOI:4PIR2J8R94g:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=Of1NxQvjpOI:4PIR2J8R94g:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=Of1NxQvjpOI:4PIR2J8R94g:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=Of1NxQvjpOI:4PIR2J8R94g:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=Of1NxQvjpOI:4PIR2J8R94g:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leveille/~4/Of1NxQvjpOI" height="1" width="1"/&gt;</content><feedburner:origLink>http://jasonleveille.com/blog/2009/09/securely-mounting-an-encrypted-remote-truecrypt-file-as-a-local-directory</feedburner:origLink></entry><entry><title>My Mini Book Library</title><link href="http://feedproxy.google.com/~r/leveille/~3/DRDaZ28ai24/my-mini-book-library" rel="alternate" /><updated>2009-09-24T19:15:19Z</updated><id>tag:jasonleveille.com,2009-09-24:/blog/2009/09/my-mini-book-library</id><category term="Miscellaneous" /><content type="html">&lt;p&gt;
            Currently, my office library consists of the following books. This does not include the books/magazines that I keep at home.
        &lt;/p&gt;&lt;!--more--&gt;
        &lt;p class="wurdig-entry-gallery"&gt;
            &lt;a rel="external" href="http://www.flickr.com/photos/leveille/3928973990/in/set-72157622395677666/"&gt;&lt;img src="http://farm4.static.flickr.com/3459/3928973990_4a3d9a32d0.jpg" alt="Book Library Image 1" width="500" height="334"&gt;&lt;/a&gt; &lt;a rel="external" href="http://www.flickr.com/photos/leveille/3928973654/in/set-72157622395677666/"&gt;&lt;img src="http://farm3.static.flickr.com/2648/3928973654_17ff5dae43.jpg" alt="Book Library Image 2" width="500" height="334"&gt;&lt;/a&gt; &lt;a rel="external" href="http://www.flickr.com/photos/leveille/3928190857/in/set-72157622395677666/"&gt;&lt;img src="http://farm4.static.flickr.com/3482/3928190857_2c1751e7db.jpg" alt="Book Library Image 3" width="500" height="334"&gt;&lt;/a&gt; &lt;a rel="external" href="http://www.flickr.com/photos/leveille/3928190527/in/set-72157622395677666/"&gt;&lt;img src="http://farm3.static.flickr.com/2634/3928190527_5e4cdd45f7.jpg" alt="Book Library Image 4" width="500" height="334"&gt;&lt;/a&gt; &lt;a rel="external" href="http://www.flickr.com/photos/leveille/3928972648/in/set-72157622395677666/"&gt;&lt;img src="http://farm4.static.flickr.com/3534/3928972648_588bce0b98.jpg" alt="Book Library Image 5" width="500" height="334"&gt;&lt;/a&gt; &lt;a rel="external" href="http://www.flickr.com/photos/leveille/3928189845/in/set-72157622395677666/"&gt;&lt;img src="http://farm3.static.flickr.com/2654/3928189845_424d560422.jpg" alt="Book Library Image 6" width="500" height="334"&gt;&lt;/a&gt;
        &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leveille?a=DRDaZ28ai24:rHpegGdKSnk: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=DRDaZ28ai24:rHpegGdKSnk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=DRDaZ28ai24:rHpegGdKSnk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=DRDaZ28ai24:rHpegGdKSnk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=DRDaZ28ai24:rHpegGdKSnk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=DRDaZ28ai24:rHpegGdKSnk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=DRDaZ28ai24:rHpegGdKSnk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leveille/~4/DRDaZ28ai24" height="1" width="1"/&gt;</content><feedburner:origLink>http://jasonleveille.com/blog/2009/09/my-mini-book-library</feedburner:origLink></entry><entry><title>Refresh Rockville Presentation</title><link href="http://feedproxy.google.com/~r/leveille/~3/JLO0rWQwBq4/refresh-rockville-presentation" rel="alternate" /><updated>2009-09-10T14:32:04Z</updated><id>tag:jasonleveille.com,2009-09-10:/blog/2009/09/refresh-rockville-presentation</id><category term="CakePHP" /><category term="Django" /><category term="Frameworks" /><category term="Presentations" /><category term="Pylons" /><category term="Rails" /><category term="Teaching" /><content type="html">&lt;p&gt;
            On Tuesday, September 8, I had the pleasure of speaking at the very first &lt;a href="http://www.meetup.com/refreshrockville/"&gt;Refresh Rockville&lt;/a&gt; event.&amp;nbsp; My goal with &lt;a href="http://www.meetup.com/refreshrockville/calendar/10417852/"&gt;Let Frameworks Help You&lt;/a&gt; was to demonstrate how properly leveraging frameworks can strengthen a developers skillset.
        &lt;/p&gt;&lt;!--more--&gt;
        &lt;p&gt;
            The main bullet points of my talk were:
        &lt;/p&gt;
        &lt;p&gt;
            &lt;strong&gt;&lt;em&gt;Frameworks&lt;/em&gt;&lt;/strong&gt;
        &lt;/p&gt;
        &lt;ol&gt;
            &lt;li&gt;help you stay organized (and avoid &lt;a href="http://www.pragprog.com/the-pragmatic-programmer/extracts/software-entropy"&gt;software entropy&lt;/a&gt;)
            &lt;/li&gt;
            &lt;li&gt;provide tools to help you develop more rapidly
                &lt;ul&gt;
                    &lt;li&gt;command line tools for code generation and debugging
                    &lt;/li&gt;
                    &lt;li&gt;convention and/over configuration to reduce mundane tasks
                    &lt;/li&gt;
                    &lt;li&gt;development servers to get you up and running quickly
                    &lt;/li&gt;
                &lt;/ul&gt;
            &lt;/li&gt;
            &lt;li&gt;improve your ability to find and fix bugs
                &lt;ul&gt;
                    &lt;li&gt;easy test integration, setup, and execution
                    &lt;/li&gt;
                    &lt;li&gt;debugging/logging facilities
                    &lt;/li&gt;
                &lt;/ul&gt;
            &lt;/li&gt;
            &lt;li&gt;help you keep your application secure
                &lt;ul&gt;
                    &lt;li&gt;
                        &lt;abbr title="Filter Input Escape Output"&gt;FIEO&lt;/abbr&gt;
                    &lt;/li&gt;
                    &lt;li&gt;
                        &lt;abbr title="Cross Site Request Forgery"&gt;CSRF&lt;/abbr&gt; / form protection
                    &lt;/li&gt;
                    &lt;li&gt;Authentication / Authorization facilities
                    &lt;/li&gt;
                &lt;/ul&gt;
            &lt;/li&gt;
            &lt;li&gt;improve your URLs
            &lt;/li&gt;
            &lt;li&gt;make caching easy
            &lt;/li&gt;
            &lt;li&gt;allow you to more easily handle i18n/l10n concerns for multilingual audiences
            &lt;/li&gt;
        &lt;/ol&gt;&lt;!--more--&gt;
        &lt;h3&gt;
            How Goes It
        &lt;/h3&gt;
        &lt;p&gt;
            I thought the presentation went ok.&amp;nbsp; I should have been more clear up front that the talk was not going to be a teaching session, but rather an information session.&amp;nbsp; I also should have more clearly defined what a framework was.&amp;nbsp; Hindsight is 20/20.&amp;nbsp; I covered a lot of material in a short amount of time, including the following:
        &lt;/p&gt;
        &lt;ul&gt;
            &lt;li&gt;My examples came from &lt;a href="http://cakephp.org/"&gt;CakePHP&lt;/a&gt;, &lt;a href="http://www.djangoproject.com/"&gt;Django&lt;/a&gt;, &lt;a href="http://pylonshq.com/"&gt;Pylons&lt;/a&gt;, and &lt;a href="http://rubyonrails.org/"&gt;RubyOnRails&lt;/a&gt;.
            &lt;/li&gt;
            &lt;li&gt;In a matter of ~15 minutes I built applications in Rails and CakePHP, and demonstrated the excellent Django administrator.
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;p&gt;
            As you can imagine, this could be a lot to swallow for a group of people.
        &lt;/p&gt;
        &lt;h3&gt;
            Resources
        &lt;/h3&gt;
        &lt;ul&gt;
            &lt;li&gt;
                &lt;a href="../../talks/09-2009-Refresh-Rockville/"&gt;Presentation Material&lt;/a&gt;
            &lt;/li&gt;
            &lt;li&gt;
                &lt;a href="../../talks/09-2009-Refresh-Rockville/Presentation/presentation.html"&gt;The Actual Presentation&lt;/a&gt;
            &lt;/li&gt;
            &lt;li&gt;
                &lt;a href="http://www.meetup.com/refreshrockville/"&gt;Refresh Rockville&lt;/a&gt;
            &lt;/li&gt;
            &lt;li&gt;
                &lt;a href="http://www.meetup.com/refreshrockville/calendar/10417852/"&gt;Let Frameworks Help You&lt;/a&gt;
            &lt;/li&gt;
            &lt;li&gt;
                &lt;a href="http://github.com/leveille/wurdig/tree/master"&gt;Wurdig: my blog software, which provided much of the source code for the examples&lt;/a&gt;
            &lt;/li&gt;
        &lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leveille?a=JLO0rWQwBq4:XKtsmA-Sadw: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=JLO0rWQwBq4:XKtsmA-Sadw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=JLO0rWQwBq4:XKtsmA-Sadw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=JLO0rWQwBq4:XKtsmA-Sadw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=JLO0rWQwBq4:XKtsmA-Sadw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leveille?a=JLO0rWQwBq4:XKtsmA-Sadw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leveille?i=JLO0rWQwBq4:XKtsmA-Sadw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leveille/~4/JLO0rWQwBq4" height="1" width="1"/&gt;</content><feedburner:origLink>http://jasonleveille.com/blog/2009/09/refresh-rockville-presentation</feedburner:origLink></entry></feed>
