<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.2.1" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>jamesv.org</title>
	<link>http://www.jamesv.org</link>
	<description>code shanty</description>
	<pubDate>Tue, 29 Apr 2008 13:20:08 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.2.1</generator>
	<language>en</language>
			<item>
		<title>deploying code from SVN to a webhost that can&#8217;t access your repository</title>
		<link>http://www.jamesv.org/2008/03/20/deploying-code-from-svn-to-a-webhost-that-cant-access-your-repository/</link>
		<comments>http://www.jamesv.org/2008/03/20/deploying-code-from-svn-to-a-webhost-that-cant-access-your-repository/#comments</comments>
		<pubDate>Thu, 20 Mar 2008 23:48:35 +0000</pubDate>
		<dc:creator>jamesv</dc:creator>
		
		<category><![CDATA[bash]]></category>

		<category><![CDATA[svn]]></category>

		<category><![CDATA[snippet]]></category>

		<category><![CDATA[code]]></category>
<category>bash</category><category>code</category><category>snippet</category><category>svn</category>
		<guid isPermaLink="false">http://www.jamesv.org/2008/03/20/deploying-code-from-svn-to-a-webhost-that-cant-access-your-repository/</guid>
		<description><![CDATA[I just ran into the problem of trying to deploy code from an SVN repository to a machine that couldn&#8217;t access the repo (corporate firewall in the way). Since manually keeping tabs of which files were changed and pushing by hand sucks, and doing clean builds for minor changes is a time sink, a better [...]]]></description>
			<content:encoded><![CDATA[<p>I just ran into the problem of trying to deploy code from an SVN repository to a machine that couldn&#8217;t access the repo (corporate firewall in the way). Since manually keeping tabs of which files were changed and pushing by hand sucks, and doing clean builds for minor changes is a time sink, a better way had to be found.</p>

<pre><code>#!/bin/bash

#get latest contents from svn and pull out touched files
svn up | egrep "^A |^U " > updates.txt

#start a manifest of files to push
echo "cd <strong>/deploy/path/on/remote/host</strong>&#8221; > sftp_batch.txt

cat updates.txt | while read line
do
   FILEPATH=${line:5}
   #add command to push the files from your local machine to the remote host
   echo &#8220;put $FILEPATH $FILEPATH&#8221; >> sftp_batch.txt
done

sftp -b sftp_batch.txt <strong>user</strong>@<strong>remote.host</strong></code></pre>

<p>I have a working folder <strong>/work/sitename-dev</strong> in which I do all of my development, and a clean check-out of the same repo at <strong>/work/sitename-deploy</strong>. By tossing the above script into the <em>deploy</em> folder I can work and commit to the repo as often as I like from the <em>dev</em> folder without keeping tabs on my changes.</p>

<p>When it comes time to update the live site, just run the script. This updates the contents of the <em>deploy</em> folder, builds a manifest of touched files and passes that manifest to SFTP as a batchfile for promotion. </p>

<p>Caveats</p>

<ul>
<li>I know this doesn&#8217;t address deletions from the SVN repo, but I don&#8217;t need that functionality now, so I didn&#8217;t write it. You can thought.</li>
<li>You need to install your ssh keys for SFTP to work in a scripted manner like this.</li>
</ul>

<p>If anyone finds this useful, I&#8217;d love to know.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jamesv.org/2008/03/20/deploying-code-from-svn-to-a-webhost-that-cant-access-your-repository/feed/</wfw:commentRss>
		</item>
		<item>
		<title>take my money, please.</title>
		<link>http://www.jamesv.org/2008/03/04/take-my-money-please/</link>
		<comments>http://www.jamesv.org/2008/03/04/take-my-money-please/#comments</comments>
		<pubDate>Tue, 04 Mar 2008 21:20:49 +0000</pubDate>
		<dc:creator>jamesv</dc:creator>
		
		<category><![CDATA[music]]></category>

		<category><![CDATA[vent]]></category>
<category>music</category><category>vent</category>
		<guid isPermaLink="false">http://www.jamesv.org/2008/03/04/take-my-money-please/</guid>
		<description><![CDATA[As exciting as I am about previously big label bands releasing their music in a more open and forward thinking way, I&#8217;m a little bit nervous that I&#8217;ve had to jump through hoops to actually acquire both In Rainbows and Ghosts I-IV after purchase. I understand that this is a new delivery method and there [...]]]></description>
			<content:encoded><![CDATA[<p>As exciting as I am about previously big label bands releasing their music in a more open and forward thinking way, I&#8217;m a little bit nervous that I&#8217;ve had to jump through hoops to actually acquire both <strong>In Rainbows</strong> and <strong>Ghosts I-IV</strong> after purchase. I understand that this is a new delivery method and there are some kinks to be worked out, but I really hope the next natural step after getting a receipt from a band doesn&#8217;t become hopping on a torrent site as part of the &#8220;fulfillment&#8221; process. The fact that I couldn&#8217;t download Ghosts at all (with no error message, just a beachball), and it was a one time link, only added to my concern.</p>

<p>In other news:</p>

<pre><code>http://store.nin.com/secure/{transaction id from your receipt}/nin_ghosts_I-IV_mp3.zip</code></pre>

<p>will let you download Ghosts now.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jamesv.org/2008/03/04/take-my-money-please/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Soliciting questions, to ask myself daily</title>
		<link>http://www.jamesv.org/2008/01/07/soliciting-questions-to-ask-myself-daily/</link>
		<comments>http://www.jamesv.org/2008/01/07/soliciting-questions-to-ask-myself-daily/#comments</comments>
		<pubDate>Tue, 08 Jan 2008 03:54:30 +0000</pubDate>
		<dc:creator>jamesv</dc:creator>
		
		<category><![CDATA[creepy]]></category>

		<category><![CDATA[metrics]]></category>

		<guid isPermaLink="false">http://www.jamesv.org/2008/01/07/soliciting-questions-to-ask-myself-daily/</guid>
		<description><![CDATA[I&#8217;m working on a metrics project and have been collecting info about myself as stub data (certainly not the world&#8217;s most interesting topic, but a free input stream). I have a base set of questions already, but am hunting for more.

Most of the obvious sources (Flickr/Twitter/Mint/GMail/anything else with a private beta and life-stream) give off [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m working on a metrics project and have been collecting info about myself as stub data (certainly not the world&#8217;s most interesting topic, but a free input stream). I have a base set of questions already, but am hunting for more.</p>

<p>Most of the obvious sources (Flickr/Twitter/Mint/GMail/anything else with a private beta and life-stream) give off &#8220;free&#8221; data, so I am looking for datapoints that I&#8217;ll need to track myself. So far I am logging stuff like mood/stress level, physical activity, ethical decisions,  cooking habits. The weirder crap. The stuff that I hope will lend itself to interesting analysis in 12 months time.</p>

<p>If you could look back on a year in your life, what questions would you be interested in asking yourself?</p>

<p><img class='wood' src='http://www.jamesv.org/wp-content/uploads/2008/01/metrics.jpg' alt='thanks gdocs' /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jamesv.org/2008/01/07/soliciting-questions-to-ask-myself-daily/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Flickr trinket - scattered photos</title>
		<link>http://www.jamesv.org/2007/11/29/flickr-trinket-scattered-photos/</link>
		<comments>http://www.jamesv.org/2007/11/29/flickr-trinket-scattered-photos/#comments</comments>
		<pubDate>Thu, 29 Nov 2007 20:03:07 +0000</pubDate>
		<dc:creator>jamesv</dc:creator>
		
		<category><![CDATA[flickr]]></category>

		<category><![CDATA[freebie]]></category>

		<category><![CDATA[how to]]></category>

		<category><![CDATA[code]]></category>

		<category><![CDATA[flash]]></category>

		<guid isPermaLink="false">http://www.jamesv.org/2007/11/29/flickr-trinket-scattered-photos/</guid>
		<description><![CDATA[Someone asked me to open the source for a Flickr widget we have running at the office. So here it is:




Download the code


    Flickr Scattered Photo Widget - rev4


or build your own copy from my Google Code repo

jamesv -+- flash-classes --- org -+- json --- JSON.as
       [...]]]></description>
			<content:encoded><![CDATA[<p>Someone asked me to open the source for a Flickr widget we have running at the office. So here it is:
<embed width="625" height="400" quality="high" bgcolor="#000000" wmode="transparent" name="virtualchumby" type="application/x-shockwave-flash" src="http://jamesv.googlecode.com/svn/trunk/flash-source/widgets/flickr_photo_scatter/flickr_photo_scatter.swf" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></p>

<p></p>

<h2>Download the code</h2>

<div class="download">
    <a href="/code/downloads/flickr-photo-scatter_rev4.tar">Flickr Scattered Photo Widget - rev4</a>
</div>

<p>or build your own copy from my <a href="http://code.google.com/p/jamesv/">Google Code repo</a></p>

<pre><code>jamesv -+- flash-classes --- org -+- json --- JSON.as
        |                         |
        |                         +- jamesv -+- apis --- Flickr.as
        |                                    +- utils --- Core.as
        |                                    +- widgets --- FlickrPhotoScatter.as
        |
        +- flash-source --- widgets --- flickr_photo_scatter -+- flickr_photo_scatter.fla
                                                              +- flickr_photo_scatter.swf
                                                              +- manifest.txt</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.jamesv.org/2007/11/29/flickr-trinket-scattered-photos/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Flash as Bondo</title>
		<link>http://www.jamesv.org/2007/11/10/flash-as-bondo/</link>
		<comments>http://www.jamesv.org/2007/11/10/flash-as-bondo/#comments</comments>
		<pubDate>Sat, 10 Nov 2007 19:18:08 +0000</pubDate>
		<dc:creator>jamesv</dc:creator>
		
		<category><![CDATA[conference]]></category>

		<category><![CDATA[flash]]></category>
<category>conference</category><category>flash</category>
		<guid isPermaLink="false">http://www.jamesv.org/2007/11/10/flash-as-bondo/</guid>
		<description><![CDATA[Thanks to everyone who came out to support me at Michigan Flash Fest. I am going to try to track down a copy of the audio from the day, but in the meantime here is a copy of the slides that were used.

View on Slideshare
]]></description>
			<content:encoded><![CDATA[<p>Thanks to everyone who came out to support me at <a href="http://www.miflashfest.org">Michigan Flash Fest</a>. I am going to try to track down a copy of the audio from the day, but in the meantime here is a copy of the slides that were used.</p>

<div style="width:625px;text-align:left" id="__ss_160805"><object style="margin:0px" width="625" height="520"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=flash-as-bondo-1194619748282721-2"/><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=flash-as-bondo-1194619748282721-2" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="625" height="520"></embed></object><a href="http://www.slideshare.net/jamesv/flash-as-bondo" title="View 'Flash As Bondo' on SlideShare">View on Slideshare</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.jamesv.org/2007/11/10/flash-as-bondo/feed/</wfw:commentRss>
		</item>
		<item>
		<title>30 days of Cake</title>
		<link>http://www.jamesv.org/2007/10/16/30-days-of-cake/</link>
		<comments>http://www.jamesv.org/2007/10/16/30-days-of-cake/#comments</comments>
		<pubDate>Wed, 17 Oct 2007 03:11:28 +0000</pubDate>
		<dc:creator>jamesv</dc:creator>
		
		<category><![CDATA[mysql]]></category>

		<category><![CDATA[process]]></category>

		<category><![CDATA[cakephp]]></category>

		<category><![CDATA[code]]></category>

		<guid isPermaLink="false">http://www.jamesv.org/2007/10/16/30-days-of-cake/</guid>
		<description><![CDATA[I&#8217;ve been using CakePHP on a number of recent projects at the office and have been longing for some of the little trinkets I took for granted in rails. One of the bigguns has been working out a new build process. After a little head scratching on how to make it feel right I came [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been using <a href="http://www.cakephp.org" title="CakePHP framework">CakePHP</a> on a number of recent projects at the office and have been longing for some of the little trinkets I took for granted in rails. One of the bigguns has been working out a new build process. After a little head scratching on how to make it feel right I came up with a super tiny build script and a new top level directory alongside /app, <strong>/db</strong>.</p>

<h2>Builder script</h2>

<p>A harness to do a fresh export of the site code, drop the existing db tables, build new ones and stub in some data. (gave me a chance to learn about <a href="http://dev.mysql.com/doc/refman/5.0/en/option-files.html">.my.cnf</a> files too).</p>

<pre class="prettyprint"><code>#!/bin/bash
# get latest from SVN
rm -rf /path/to/htdocs/*
svn export http://www.svnrepo.com /path/to/htdocs

# purge and rebuild db and data
mysql < /path/to/htdocs/db/schema.sql
mysql < /path/to/htdocs/db/stub_data.sql
</code></pre>

<h2>/db/schema.sql</h2>

<p>I found it more convienient to throw away the old structure and start fresh with each change to the db (if nothing else, it makes me update my stub data file and test harnesses. You could just as easily have stacked <em>&#8220;alter table&#8221;</em> statements to denote changes between versions.</p>

<pre class="prettyprint"><code>...

----------------------------------------------------------------
-- incoming data feeds
-- -- rev 61: added "video" and "photo" to `feed_type`
-- -- rev 76: changed `name` VARCHAR(50) -> VARCHAR(255)
----------------------------------------------------------------
DROP TABLE IF EXISTS `feeds`;
CREATE TABLE feeds (
    id INT UNSIGNED AUTO_INCREMENT,
    project_id INT UNSIGNED NULL,
    name VARCHAR(255),
    src_url VARCHAR(300),
    feed_type ENUM('rss', 'atom', 'video', 'photo'),
    active BOOLEAN DEFAULT true,
    created DATETIME DEFAULT NULL,
    modified DATETIME DEFAULT NULL,
    PRIMARY KEY  (id, project_id)
) TYPE=MyISAM;

...
</code></pre>

<h2>/db/stub_data.sql</h2>

<p>By giving all developers on a project a common set of starting data, it makes it easier to replicate issues uncovered throughout the site. If one coder finds that a section of the codebase is soft against a certain type of data (unicode, html entities, etc) they can add sample data of that kind to everyone&#8217;s stub file. By making everyone feel the pain of the insecurity it tends to get addressed faster.</p>

<pre class="prettyprint"><code>...

----------------------------------------------------------------
-- stub data feeds
----------------------------------------------------------------
INSERT INTO feeds 
    (project_id,name,src_url,feed_type,created) 
VALUES
    (1, "Google News", "http://news.google.com/?output=rss", "rss", NOW()),
    (2, "Fine Hypertext Products", "http://feeds.kottke.org/main", "rss", NOW()),
    (1, "Yahoo! Interface Blog - dev", "http://feeds.yuiblog.com/yuiblog/development", "rss", NOW());

...</code></pre>

<p>This approach is still <em>really</em> early in its development and will almost certainly be revisited a number of times as it is used more, but so far it has fared quite well for deployment and replication across a number of machines.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jamesv.org/2007/10/16/30-days-of-cake/feed/</wfw:commentRss>
		</item>
		<item>
		<title>priorities</title>
		<link>http://www.jamesv.org/2007/10/01/priorities/</link>
		<comments>http://www.jamesv.org/2007/10/01/priorities/#comments</comments>
		<pubDate>Mon, 01 Oct 2007 14:03:40 +0000</pubDate>
		<dc:creator>jamesv</dc:creator>
		
		<category><![CDATA[travel]]></category>

		<category><![CDATA[fowa2007]]></category>

		<category><![CDATA[aside]]></category>

		<category><![CDATA[conference]]></category>
<category>aside</category><category>conference</category><category>fowa2007</category><category>pants</category><category>travel</category>
		<guid isPermaLink="false">http://www.jamesv.org/2007/10/01/priorities/</guid>
		<description><![CDATA[I just had a very personally telling moment while putting together a checklist of stuff to cram into my bag at the last second before heading off to FOWA&#8230;



All appeared notably above:



This was after an initial quick sort of items based on perceived pain to myself if I neglected to pack said item,
]]></description>
			<content:encoded><![CDATA[<p>I just had a very personally telling moment while putting together a checklist of stuff to cram into my bag at the last second before heading off to <a href="http://www.futureofwebapps.com">FOWA</a>&#8230;</p>

<p><img src="http://myskitch.com/jamesv/london_packing_list-20071001-100056.jpg" alt="tada list" /></p>

<p>All appeared notably above:</p>

<p><img src="http://myskitch.com/jamesv/london_packing_list-20071001-100218.jpg" alt="tada list" /></p>

<p>This was after an initial quick sort of items based on perceived pain to myself if I neglected to pack said item,</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jamesv.org/2007/10/01/priorities/feed/</wfw:commentRss>
		</item>
		<item>
		<title>new personal highscore - 66.7 kph</title>
		<link>http://www.jamesv.org/2007/09/03/new-personal-highscore-667-kph/</link>
		<comments>http://www.jamesv.org/2007/09/03/new-personal-highscore-667-kph/#comments</comments>
		<pubDate>Tue, 04 Sep 2007 00:38:37 +0000</pubDate>
		<dc:creator>jamesv</dc:creator>
		
		<category><![CDATA[aside]]></category>

		<category><![CDATA[bike]]></category>
<category>aside</category><category>bike</category>
		<guid isPermaLink="false">http://www.jamesv.org/2007/09/03/new-personal-highscore-667-kph/</guid>
		<description><![CDATA[
66.7 kph / 41.5 mph

Not shabby for a $75 road bike from the 80s. Though this little slice of heaven has been calling my name&#8230;
]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.jamesv.org/wp-content/uploads/2007/09/race_day.jpg' alt='66.7 kph' class='wood' /><br />
66.7 kph / 41.5 mph</p>

<p>Not shabby for a $75 road bike from the 80s. Though <a href='http://www.konaworld.com/08_jake.htm' title='2008 Kona Jake'>this little slice of heaven</a> has been calling my name&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jamesv.org/2007/09/03/new-personal-highscore-667-kph/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Wrapping Paper</title>
		<link>http://www.jamesv.org/2007/08/27/wrapping-paper/</link>
		<comments>http://www.jamesv.org/2007/08/27/wrapping-paper/#comments</comments>
		<pubDate>Mon, 27 Aug 2007 13:41:55 +0000</pubDate>
		<dc:creator>jamesv</dc:creator>
		
		<category><![CDATA[dom scripting]]></category>

		<category><![CDATA[css]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[doing less]]></category>

		<category><![CDATA[code]]></category>

		<guid isPermaLink="false">http://www.jamesv.org/2007/08/27/wrapping-paper/</guid>
		<description><![CDATA[I love really intricate graphical treatments around page elements, I also really hate putting extra code fluff into pages. The way I see it, if a chunk of markup is only there strictly for aesthetic purposes, it&#8217;s on the chopping block. The more garbage code you have in your document, the tougher it is for [...]]]></description>
			<content:encoded><![CDATA[<p>I love really intricate graphical treatments around page elements, I also really hate putting extra code fluff into pages. The way I see it, if a chunk of markup is only there strictly for aesthetic purposes, it&#8217;s on the chopping block. The more garbage code you have in your document, the tougher it is for search engine spiders and screen readers to walk through your pages.</p>

<p>The DOM however is fair game. Anything you want to screw with on the clientside (so long as it&#8217;s crossbrowser compatible) is A-Ok in my book, once a document is in-browser gets pulled apart any way.</p>

<p>To that end, I wrote this (which uses a very basic set of <a href="http://www.mootools.net">MooTools</a> methods):</p>

<pre><code>function wrapper(selector) {
    $$(selector).each(
        function(element) {
            var wrapper = new Element('div').setProperty('class','outer').injectBefore(el);
            element.injectInside(wrapper);

            var before = new Element('div').setProperty('class','before').injectBefore(element);
            var after = new Element('div').setProperty('class','after').injectAfter(element);
        }
    )
}
</code></pre>

<p>which takes all elements on the page with a given selector and wraps them in DIVs for styling.</p>

<p>Before:</p>

<pre><code>&lt;img src='foo.jpg' alt='Some image' class='to-be-wrapped' /&gt;
</code></pre>

<p><img src='http://www.jamesv.org/wp-content/uploads/2007/08/leaves.jpg' alt='leaves' /></p>

<p>After:</p>

<pre><code>&lt;div class='outer'&gt;
    &lt;div class='before'&gt;&lt;/div&gt;
    &lt;img src='foo.jpg' alt='Some image' class='to-be-wrapped' /&gt;
    &lt;div class='after'&gt;&lt;/div&gt;
&lt;/div&gt;
</code></pre>

<p><img src='http://www.jamesv.org/wp-content/uploads/2007/08/leaves.jpg' alt='leaves' class='wood' /></p>

<h2>or</h2>

<p>You could just as easily use this same method to throw rounded corners around blocks of text or create some really nice pull quotes.</p>

<p><img src='http://www.jamesv.org/wp-content/uploads/2007/08/wrapper.jpg' alt='pullquotes and rounded corners' class='wood' /></p>

<p>This approach is pretty similar to the CSS <em>before</em> and <em>after</em> pseudo classes, but is properly supported across <a href="http://developer.yahoo.com/yui/articles/gbs/index.html">A-Grade browsers</a>. Also, I think this gives you a little more flexibility, as you can could embed checks on the content you are about to wrap and make slight tweaks. For example, if you were wrapping blog comments, you might want to call out the post author&#8217;s comments in a slightly different way.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jamesv.org/2007/08/27/wrapping-paper/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Be proud of your patches</title>
		<link>http://www.jamesv.org/2007/08/25/be-proud-of-your-patches/</link>
		<comments>http://www.jamesv.org/2007/08/25/be-proud-of-your-patches/#comments</comments>
		<pubDate>Sun, 26 Aug 2007 02:09:24 +0000</pubDate>
		<dc:creator>jamesv</dc:creator>
		
		<category><![CDATA[pants]]></category>

		<category><![CDATA[methods]]></category>

		<category><![CDATA[shortcomings]]></category>

		<category><![CDATA[code]]></category>
<category>code</category><category>methods</category><category>pants</category><category>shortcomings</category>
		<guid isPermaLink="false">http://www.jamesv.org/2007/08/25/be-proud-of-your-patches/</guid>
		<description><![CDATA[
For the first couple years I was doing development work, whenever I found a problem with my code that noone else had caught, I always tried to sneak out a fix under the radar. I now say with much more experience and 20/20 hindsight, I was a friggin&#8217; idiot.

I wasn&#8217;t fooling anybody, all systems designed [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.jamesv.org/wp-content/uploads/2007/08/pants.jpg' alt='i break pants, often' class='wood' /><br />
For the first couple years I was doing development work, whenever I found a problem with my code that noone else had caught, I always tried to sneak out a fix under the radar. I now say with much more experience and 20/20 hindsight, <em>I was a friggin&#8217; idiot</em>.</p>

<p>I wasn&#8217;t fooling anybody, all systems designed and implemented by man are susceptible to catastrophic failures, anyone would stopped even for a second would immediately realize that. By trying to brush them under the rug and pretty like they never happened, I was doing myself a disservice. The first place I end up looking whenever I start a new project is my past, and by hiding my previous flubs, the chance of me pulling the same bone-headed move again kept going up and up. By sucking up my pride and making notes of where I had gone wrong in the past, it&#8217;s been a boon in a number of ways:</p>

<ul>
<li>I only make a mission critical error requiring me to sleep at my desk once. Usually.</li>
<li>Anyone else who reads or uses my code can hopefully avoid a couple of late night sessions of their own head scratching.</li>
<li>It proves to the world that a real live person wrote and is actively maintaining the site/tool/app, and moreover that they are continually looking for ways to make it better and enhance the experience.</li>
<li>Also it serves as notice of common points of failure to watch out for in future endeavors. (ie: <strong>always</strong> sanitize every field you let a user fill into their profile).</li>
</ul>

<p>This &#8220;revelation&#8221; came to me when I was fixing a pair of pants. I used to routinely skip wearing a belt and thusly blew buttons off my fly left and right. After a couple years of patching them up with nicely matching thread, and subsequently popping them right back off my trousers, I had enough and needed to find a better way. I figured if I cared enough to put the effort into continually fixing them, there was no reason to hide that, so I switched over to bright orange and hot pink thread. Almost immediately I stopped trashing clothing because the trigger of seeing where I had gone wrong in the past, and reminded me to put on a belt.</p>

<p>So, I say to you, relish in your botches, slip ups and fubars. Hem your pants in lime green and you&#8217;ll stop buying stuff a size too large, in more ways that one.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jamesv.org/2007/08/25/be-proud-of-your-patches/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
