<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>GarthDB</title>
	
	<link>http://blog.garthdb.com</link>
	<description>a blog.</description>
	<lastBuildDate>Thu, 01 Mar 2012 00:14:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/garthdb/gfTP" /><feedburner:info uri="garthdb/gftp" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Fun with Scammers</title>
		<link>http://feedproxy.google.com/~r/garthdb/gfTP/~3/qOy7di9czOY/</link>
		<comments>http://blog.garthdb.com/fun-with-scammers/#comments</comments>
		<pubDate>Thu, 01 Mar 2012 00:13:08 +0000</pubDate>
		<dc:creator>garthdb</dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://blog.garthdb.com/?p=172</guid>
		<description><![CDATA[I just sold my laptop on Craigslist, and of course I had a bunch of scammers respond. This is the transcript from the email thread with my favorite one ALIYA JANES: are you sure it&#8217;s still in good working condition?I am buying this item for my son as a birthday gift i would have love [...]]]></description>
			<content:encoded><![CDATA[<p>I just sold my laptop on Craigslist, and of course I had a bunch of scammers respond.</p>
<p>This is the transcript from the email thread with my favorite one</p>
<p><span id="more-172"></span></p>
<p><strong>ALIYA JANES:</strong> are you sure it&#8217;s still in<br />
good working<br />
condition?I am buying<br />
this<br />
item for my son as a<br />
birthday gift i<br />
would have love to come<br />
over to<br />
your place and see it<br />
myself but my<br />
job will not give me the<br />
chance to<br />
do that ,i will love to see<br />
some pics,I<br />
will offer 1600 including<br />
shipping fee so get back<br />
to me with<br />
your pay pal email<br />
address so that<br />
i can make the payment<br />
as soon as<br />
possible to your pay pal<br />
account.I<br />
need you to get back to<br />
me as soon as<br />
possible and i want the<br />
item to<br />
be shipped out today it<br />
is very<br />
urgent.Awaiting your<br />
quick response</p>
<p>&#8211;<br />
hello seller is this item still for sales</p>
<hr/>
<strong>ME:</strong> Am I shipping it to Nigeria?</p>
<hr/>
<strong>ALIYA JANES:</strong> yes and let me know your aim</p>
<hr/>
<strong>ME:</strong> Ha! You&#8217;re awesome.</p>
<hr/>
<strong>ALIYA JANES:</strong> thanks for that ur paypal money request</p>
<hr/>
<strong>ME:</strong> No problem. I&#8217;ll fly my MacBook pro over to your son personally, on my<br />
magical Pegasus.</p>
<hr/>
<strong>ALIYA JANES:</strong> who do you think you are? Taking me for granted</p>
<hr/>
<strong>ME:</strong> Me?… &lt;whisper&gt;I&#8217;m Batman&lt;/whisper&gt;</p>
<img src="http://feeds.feedburner.com/~r/garthdb/gfTP/~4/qOy7di9czOY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.garthdb.com/fun-with-scammers/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://blog.garthdb.com/fun-with-scammers/</feedburner:origLink></item>
		<item>
		<title>Using the Latest Stable Version (v0.6.10) of NodeJS on Heroku</title>
		<link>http://feedproxy.google.com/~r/garthdb/gfTP/~3/Mu3WBpppEX4/</link>
		<comments>http://blog.garthdb.com/using-the-latest-stable-version-v0-6-10-of-nodejs-on-heroku/#comments</comments>
		<pubDate>Tue, 21 Feb 2012 04:58:46 +0000</pubDate>
		<dc:creator>garthdb</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[heroku]]></category>
		<category><![CDATA[nodejs]]></category>

		<guid isPermaLink="false">http://blog.garthdb.com/?p=156</guid>
		<description><![CDATA[Update: you can also use nodejs-versions in the labs plugin. If you&#8217;re starting some NodeJS fun on Heroku, you might find that it is not using the latest stable version (as of today is v0.6.10). &#160;To help fix this problem Heroku has provided the means to build your own buildpacks with the Cedar Stack. &#160;This [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update:</strong> you can also use <a href="http://devcenter.heroku.com/articles/labs-nodejs-versions">nodejs-versions</a> in the labs plugin.</p>
<p>If you&#8217;re starting some <a href="http://nodejs.org/">NodeJS</a> fun on <a href="http://heroku.com">Heroku</a>, you might find that it is not using the latest stable version (as of today is v0.6.10). &nbsp;To help fix this problem Heroku has provided the means to build your own <a href="http://devcenter.heroku.com/articles/buildpacks">buildpacks</a> with the <a href="http://devcenter.heroku.com/articles/cedar">Cedar Stack</a>. &nbsp;<a href="http://blog.superpat.com/2011/11/15/running-your-own-node-js-version-on-heroku/">This article</a> has one of the better tutorials, but it requires you to use aws; which just seemed silly for something as standard using the latest stable version.</p>
<p>I was in the process of building my own buildpack, when I found Heroku has already provided the stable versions of <a href="http://heroku-buildpack-nodejs.s3.amazonaws.com/manifest.nodejs">Node</a> and <a href="http://heroku-buildpack-nodejs.s3.amazonaws.com/manifest.npm">NPM</a>.</p>
<p>To use these:</p>
<ol>
<li>Fork <a href="https://github.com/heroku/heroku-buildpack-nodejs">Heroku&#8217;s NodeJS buildpack</a></li>
<li>Clone your new repository locally</li>
</ol>
<p><script src="https://gist.github.com/1873669.js?file=clone.sh"></script></p>
<ol>
<li value="3">Edit the bin/compile</li>
</ol>
<p><script src="https://gist.github.com/1873669.js?file=edit_complile.sh"></script></p>
<div>Replace this:</div>
<p><script src="https://gist.github.com/1873669.js?file=old_compile"></script></p>
<div>with this:</div>
<p><script src="https://gist.github.com/1873669.js?file=new_compile"></script></p>
<ol>
<li value="4">Commit and push changes</li>
</ol>
<p><script src="https://gist.github.com/1873669.js?file=git_push.sh"></script></p>
<ol>
<li value="5">Create a new Heroku application</li>
</ol>
<p><script src="https://gist.github.com/1873669.js?file=create_heroku.sh"></script></p>
<p>I haven&#8217;t found any documentation on how to change the buildpack url setting in an existing application, so I&#8217;m going to assume it isn&#8217;t possible. &nbsp;If anyone knows otherwise, feel free to let me know.</p>
<img src="http://feeds.feedburner.com/~r/garthdb/gfTP/~4/Mu3WBpppEX4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.garthdb.com/using-the-latest-stable-version-v0-6-10-of-nodejs-on-heroku/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://blog.garthdb.com/using-the-latest-stable-version-v0-6-10-of-nodejs-on-heroku/</feedburner:origLink></item>
		<item>
		<title>Code Themes</title>
		<link>http://feedproxy.google.com/~r/garthdb/gfTP/~3/VswMGlECIVw/</link>
		<comments>http://blog.garthdb.com/code-themes/#comments</comments>
		<pubDate>Fri, 03 Feb 2012 22:29:59 +0000</pubDate>
		<dc:creator>garthdb</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[theme]]></category>

		<guid isPermaLink="false">http://blog.garthdb.com/?p=149</guid>
		<description><![CDATA[Professionals work hard to keep their tools sharp and ready, and developers tend to be quite passionate about their tools. I&#8217;ve been looking at different IDE themes, and am curious as to what people might be using. I find myself leaning toward the Railscasts theme in Espresso.]]></description>
			<content:encoded><![CDATA[<p>Professionals work hard to keep their tools sharp and ready, and developers tend to be quite passionate about their tools.</p>
<p>I&#8217;ve been looking at different IDE themes, and am curious as to what people might be using.</p>
<p><a href="http://blog.garthdb.com/wp-content/uploads/2012/02/findex.html.png"><img class="size-medium wp-image-150 alignnone" title="railscasts" src="http://blog.garthdb.com/wp-content/uploads/2012/02/findex.html-300x194.png" alt="" width="300" height="194" /></a></p>
<p>I find myself leaning toward the Railscasts theme in Espresso.</p>
<img src="http://feeds.feedburner.com/~r/garthdb/gfTP/~4/VswMGlECIVw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.garthdb.com/code-themes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.garthdb.com/code-themes/</feedburner:origLink></item>
		<item>
		<title>SXSW 2012 Submission</title>
		<link>http://feedproxy.google.com/~r/garthdb/gfTP/~3/D2u8GBe7saE/</link>
		<comments>http://blog.garthdb.com/sxsw-2011-submission/#comments</comments>
		<pubDate>Tue, 16 Aug 2011 05:01:17 +0000</pubDate>
		<dc:creator>garthdb</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[Speaking]]></category>

		<guid isPermaLink="false">http://blog.garthdb.com/?p=135</guid>
		<description><![CDATA[Since Tony Holguin tweeted Mickey&#8217;s 10 Commandments last year I&#8217;ve been itching to present on how they relate to User Experience and Interaction Design.  So I&#8217;ve finally submitted the topic to SXSW 2012 with Tony&#8217;s permission.  Check out the session page on SXSW for the full details. If you&#8217;re not familiar with the SXSW process, the topic [...]]]></description>
			<content:encoded><![CDATA[<p>Since <a href="http://twitter.com/antonioholguin">Tony Holguin</a> tweeted Mickey&#8217;s 10 Commandments last year I&#8217;ve been itching to present on how they relate to User Experience and Interaction Design.  So I&#8217;ve finally submitted <a href="http://panelpicker.sxsw.com/ideas/view/9586">the topic</a> to SXSW 2012 with Tony&#8217;s permission.  Check out the <a href="http://panelpicker.sxsw.com/ideas/view/9586">session page</a> on SXSW for the full details.</p>
<p>If you&#8217;re not familiar with the SXSW process, the topic submissions are closed, but now the community is invited to vote for their favorite sessions.  It&#8217;s not required that you be registered for the event to vote, but you do have to sign in/create and account.  The community votes count for 30% of the decision-making process, 40% is by the SXSW Advisory Board, and 30% by the SXSW staff. (<a href="http://panelpicker.sxsw.com/pages/faq">full faq</a>)</p>
<p>So in summary, and in the words of the great <a href="http://dougfunniesjournal.tumblr.com/post/350267023/episode-6-part-1-doug-mayor-for-a-day">Mayor Robert &#8220;Bob&#8221; White</a>, &#8220;<a href="http://panelpicker.sxsw.com/ideas/view/9586">Vote for me</a>&#8221;</p>
<p><a href="http://panelpicker.sxsw.com/ideas/view/9586"><img class="alignnone" title="Vote for Me" src="http://i986.photobucket.com/albums/ae342/dougfunnieiscrazy/Doug%20Mayor%20For%20a%20Day/dontbeasucker.jpg" alt="" width="400" height="300" /></a></p>
<p>While you&#8217;re at it, why don&#8217;t you vote for <a href="http://panelpicker.sxsw.com/ideas/view/11120">Andy Branch</a> and <a href="http://panelpicker.sxsw.com/ideas/view/11951">Leonard Souza</a>&#8216;s sessions.</p>
<p><span id="more-135"></span></p>
<p><strong>Mickey&#8217;s 10 Commandments</strong><br />
(originally for theme park design)</p>
<p>1. Know your audience &#8211; Don&#8217;t bore people, talk down to them or lose them by assuming that they know what you know.</p>
<p>2. Wear your guest&#8217;s shoes &#8211; Insist that designers, staff and your board members experience your facility as visitors as often as possible.</p>
<p>3. Organize the flow of people and ideas &#8211; Use good story telling techniques, tell good stories not lectures, lay out your exhibit with a clear logic.</p>
<p>4. Create a weenie &#8211; Lead visitors from one area to another by creating visual magnets and giving visitors rewards for making the journey</p>
<p>5. Communicate with visual literacy &#8211; Make good use of all the non-verbal ways of communication &#8211; color, shape, form, texture.</p>
<p>6. Avoid overload &#8211; Resist the temptation to tell too much, to have too many objects, don&#8217;t force people to swallow more than they can digest, try to stimulate and provide guidance to those who want more.</p>
<p>7. Tell one story at a time &#8211; If you have a lot of information divide it into distinct, logical, organized stories, people can absorb and retain information more clearly if the path to the next concept is clear and logical.</p>
<p>8. Avoid contradiction &#8211; Clear institutional identity helps give you the competitive edge. Public needs to know who you are and what differentiates you from other institutions they may have seen.</p>
<p>9. For every ounce of treatment , provide a ton of fun &#8211; How do you woo people from all other temptations? Give people plenty of opportunity to enjoy themselves by emphasizing ways that let people participate in the experience and by making your environment rich and appealing to all senses.</p>
<p>10. Keep it up &#8211; Never underestimate the importance of cleanliness and routine maintenance, people expect to get a good show every time, people will comment more on broken and dirty stuff.</p>
<p>Martin Sklar, Walt Disney Imagineering, Education vs. Entertainment: Competing for audiences, AAM Annual meeting, 1987</p>
<p>&nbsp;</p>
<img src="http://feeds.feedburner.com/~r/garthdb/gfTP/~4/D2u8GBe7saE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.garthdb.com/sxsw-2011-submission/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.garthdb.com/sxsw-2011-submission/</feedburner:origLink></item>
		<item>
		<title>Clean Illustrator FXG Files</title>
		<link>http://feedproxy.google.com/~r/garthdb/gfTP/~3/FueSyTr7Pkc/</link>
		<comments>http://blog.garthdb.com/clean-illustrator-fxg-files/#comments</comments>
		<pubDate>Mon, 15 Aug 2011 19:18:58 +0000</pubDate>
		<dc:creator>garthdb</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://blog.garthdb.com/?p=133</guid>
		<description><![CDATA[When saving Illustrator Files as FXG there is an option to &#8220;Save Illustrator Private Data&#8221;. Even with this option unchecked I find the resulting FXG file has more data in it I need for use in a Flex project. I have a quick regular expression to remove most of the unnecessary namespaces and data from [...]]]></description>
			<content:encoded><![CDATA[<p>When saving Illustrator Files as FXG there is an option to &#8220;Save Illustrator Private Data&#8221;.  Even with this option unchecked I find the resulting FXG file has more data in it I need for use in a Flex project.</p>
<p>I have a quick regular expression to remove most of the unnecessary namespaces and data from the file; I figured someone else might find it useful.</p>
<p><code>(ai:|ATE:|flm:|d:)(\w*)(=")([^"]*)(")( )?</code></p>
<img src="http://feeds.feedburner.com/~r/garthdb/gfTP/~4/FueSyTr7Pkc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.garthdb.com/clean-illustrator-fxg-files/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.garthdb.com/clean-illustrator-fxg-files/</feedburner:origLink></item>
		<item>
		<title>Clean Code Course Notes</title>
		<link>http://feedproxy.google.com/~r/garthdb/gfTP/~3/osELLQfjlbI/</link>
		<comments>http://blog.garthdb.com/clean-code-cours-notes/#comments</comments>
		<pubDate>Wed, 27 Jul 2011 17:24:12 +0000</pubDate>
		<dc:creator>garthdb</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[clean code]]></category>
		<category><![CDATA[Uncle Bob]]></category>

		<guid isPermaLink="false">http://blog.garthdb.com/?p=125</guid>
		<description><![CDATA[AdobeXD brought in Robert Martin to teach a Clean Code Course over the next few days. Decided to post my notes as we are going along. I&#8217;ll keep posting my notes as we go along. Updated: day 2, Refactoring; day 3, Unit Tests. Comic: The only valid measurement of code quality: WTFs/minute There will be [...]]]></description>
			<content:encoded><![CDATA[<p>AdobeXD brought in <a href="http://www.twitter.com/unclebobmartin">Robert Martin</a> to teach a Clean Code Course over the next few days.  Decided to post my notes as we are going along.  I&#8217;ll keep posting my notes as we go along.  <strong>Updated:</strong> day 2, Refactoring; day 3, Unit Tests.</p>
<p><span id="more-125"></span></p>
<p>Comic: The only valid measurement of code quality: WTFs/minute</p>
<p>There will be code.</p>
<p>A fragile premise?<br />
&#8220;Good code matters.&#8221; &#8211;Kent Beck</p>
<p>Everybody gets slowed down by bad code &#8211; why do we write it?<br />
We confuse the need for speed with the need for clean code.</p>
<p>Metaphor &#8211; What&#8217;s the fastest way to be done with dinner? Get up from the table and not do the clean up.  When it is time to eat we just find the cleanest dishes and when dinner is over we leave the dishes dirty again.  Eventually it is so hard to make dinner we outsource dinner.  Sushi chefs clean as they prepare food.  If you want to go fast &#8211; go as clean as you can.  The only way to go fast is to go clean.</p>
<p>We can blame a lot of things for leaving a mess behind.  Ultimately we are the ones who make the mess.</p>
<p>Excuses:<br />
	The deadline looms.<br />
	The backlog grows.<br />
	Managers are testy.</p>
<p>When managers approach and ask you to go faster we need to hold the line.  Make sure they understand that the best way to go faster is to code cleaner.</p>
<p>Metaphor &#8211; The doctor and the patient.  The doctor is the servant and the patient is the customer.  Even still the doctor is the boss.  The patient needs to relinquish a certain amount of control to the doctor to allow them to be the most efficient.</p>
<p>We are paid because we are the experts.</p>
<p>This is the dilemma that we as developers face and we haven&#8217;t been doing a very good job.</p>
<p>&#8220;Later equals never&#8221;</p>
<p>Productivity vs Time<br />
On a new project the beginning of the project we are the most efficient and get the most done.  It doesn&#8217;t last.  Over time the code becomes more complex and productivity goes down.</p>
<p>The mess grows so big and so deep and so tall, they can not clean it up.  There is no way at all.</p>
<p>When productivity goes down the business hires more people.  Productivity goes down during training; it might go back down.  Then the business decides to redesign.  They pick the 10 best and start a tiger team to head up the redesign.  Then there is a race with the rest of developers maintaining the code.</p>
<p>Xeno&#8217;s paradox</p>
<p>Boy Scout rule &#8211; always leave the code cleaner than you found it, and do some random act of kindness.</p>
<p>Why does code rot?<br />
When we find dirty code, we don&#8217;t want to touch it because if something breaks the code will be assigned to us to fix it.</p>
<p>If you want to be able to clean code &#8211; you need to have a suite of tests that you trust.</p>
<p>You only trust tests you write first.</p>
<p>&#8211; Break &#8211;</p>
<p>The planets take odd paths as they travel across the sky.  They actually back track.</p>
<p>What color does you IDE make your comments?  Green, why?  It is calming &#8211; sometimes it&#8217;s faded so as to not distract.  Meaning the comments are less important.</p>
<p>Comments rot when we don&#8217;t pay attention to them.  Eventually comments become lies and things change and they do not.  We should have a reason for every line of code we write, even/especially comments.</p>
<p>Refrain from adding comments in your code that contains information contained elsewhere, including the source control system.</p>
<p>Instead of including HTML formatting in the comments (for source docs) use only the pre tag (as a concession for the docs)</p>
<p>DW: Comments are sometimes written for the developer to think through what they are building.<br />
UncleBob: So they are masturbatory?</p>
<p>Your effort is to make your code as readable as possible.</p>
<p>Writing code should follow the journalism rule &#8211; order the contents of your class in order of importance.</p>
<p>Maybe the private symbol doesn&#8217;t belong in an abstract class at all.</p>
<p>It isn&#8217;t just nice to have an IDE that will support refactoring, it is necessary.</p>
<p>Sometimes conventions are more important than common sense.  The principle of common surprise.</p>
<p>Never make your users do a double take.</p>
<p>The best documentation for a module is the source code for the module.  The code should be written in the most readable fashion with a smattering of helpful comments.</p>
<p>We have the impression that frequent comments means we are a good developer.</p>
<p>You should look at every comment as a failure.  We still write comments because we still have failures.</p>
<p>Here is the issue, we are the developers, the code is our document.  We have stupid rules put on us because we have behaved unprofessionally in the past.  We have to suffer through it now.</p>
<p>&#8211; Break &#8211;</p>
<p>Long Functions<br />
	Avoid nested if statements<br />
	Avoid large dynamic ranges within functions</p>
<p>First Rule of Functions<br />
	They should be small</p>
<p>Second Rule of Functions<br />
	They should be smaller than that.</p>
<p>Function should not be 100 lines long.<br />
Functions should hardly ever be 20 lines long.</p>
<p>Smallness implies that blocks within:<br />
	if<br />
	else<br />
	while<br />
	etc<br />
should be one line long.<br />
Probably that line should be a function call.</p>
<p>Smallness also implies:<br />
	functions should not be large enough to hold nested structures<br />
	therefore the indent of level of a function should not be greater than one or two<br />
	this makes the functions easy to read and understand</p>
<p>A large function usually hides one or more classes.</p>
<p>A function is cohesive if it does one thing, does it well, and does it only</p>
<p>Extract until you drop</p>
<p>&#8220;I like my code to be elegant and efficient… clean code does one thing well.&#8221;<br />
	&#8211; Bjarne Stroustrup</p>
<p>&#8220;Clean code is simple and direct.  Clean code reads like well-written prose…&#8221;<br />
	&#8211; Grady Booch</p>
<p>&#8220;Clean code can be read… Clean code should be literate…&#8221;<br />
	&#8211; &#8220;Big&#8221; Dave Thomas</p>
<p>&#8220;Clean code always looks like it was written by someone who cares&#8221;<br />
	&#8211;Michael Feathers</p>
<p>&#8220;You know you are working on clean code when each routine you read turns out to be pretty much what you expected…&#8221;<br />
	&#8211; Ward Cunningham</p>
<p>&#8211; Day 2 &#8211;</p>
<p>Refactoring</p>
<p>You can write something badly and then manipulate it.</p>
<p>(Uncle Bob&#8217;s personal rule) Don&#8217;t ever make the developer scroll right (in the IDE).</p>
<p>Never test through the UI.  (Don&#8217;t test business rules through the GUI).</p>
<p>Rule for writing tests &#8211; Intentional Coding!  Write the tests for the code you wish you had.</p>
<p>First refactor the tests.  Make sure they are easy to maintain or you&#8217;ll eventually throw them out.</p>
<p>The tests are the parachute you are going to jump out of plane with; make sure they are folded correctly.</p>
<p>As far as performance &#8211; you don&#8217;t know where the bottle neck is until you profile.  You can look at the code and refactor all day without improving performance unless you first check to see where the problem is.</p>
<p>&#8211; Break &#8211;</p>
<p>Switch/If statements can be refactored into polymorphic dispatcher.</p>
<p>Uncle Bob&#8217;s Three Laws<br />
1) Write NO production code except to pass a failing test.<br />
2) Write only enough of a test to demonstrate a failure.<br />
3) Write only enough production code to pass the test.</p>
<p>Unless you&#8217;ve tried it, you should find these rules to be rediculous.</p>
<p>Book &#8211; Working Effectively with Legacy Code by Michael Feathers</p>
<p>As tests become more specific, production code must become more generic.</p>
<p>http://cleancoder.posterous.com/the-transformation-priority-premise</p>
<p>&#8211; Day 3 &#8211;</p>
<p>No more than three arguments in a function.</p>
<p>Don&#8217;t use booleans as arguments.</p>
<p>Avoid output arguments.</p>
<img src="http://feeds.feedburner.com/~r/garthdb/gfTP/~4/osELLQfjlbI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.garthdb.com/clean-code-cours-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.garthdb.com/clean-code-cours-notes/</feedburner:origLink></item>
		<item>
		<title>12 Heuristics of UX</title>
		<link>http://feedproxy.google.com/~r/garthdb/gfTP/~3/mPReIC7Ajd8/</link>
		<comments>http://blog.garthdb.com/12-heuristics-of-ux/#comments</comments>
		<pubDate>Mon, 25 Jul 2011 09:00:11 +0000</pubDate>
		<dc:creator>garthdb</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[Heuristics]]></category>
		<category><![CDATA[ux]]></category>

		<guid isPermaLink="false">http://blog.garthdb.com/?p=120</guid>
		<description><![CDATA[I&#8217;ve been meaning to post these awhile ago, but I did a session back at 360&#124;Flex 2010 DC and I included a list of 12 Heuristics for UX. To be completely honest, they are influenced by Jakob Nielsen&#8217;s Ten Usability Heuristics, but I don&#8217;t really like his angle or implementation and they are definitely lacking [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been meaning to post these awhile ago, but I did a <a href="http://blog.garthdb.com/decrap-your-application-part-2/">session</a> back at 360|Flex 2010 DC and I included a list of 12 Heuristics for UX.  To be completely honest, they are influenced by Jakob Nielsen&#8217;s <a href="http://www.useit.com/papers/heuristic/heuristic_list.html">Ten Usability Heuristics</a>, but I don&#8217;t really like his angle or implementation and they are definitely lacking as far as user experience is concerned.</p>
<p>Here is the list:</p>
<ol>
<li>Response</li>
<li>Metaphor</li>
<li>Navigation</li>
<li>Consistency</li>
<li>Training</li>
<li>Efficiency</li>
<li>Design</li>
<li>Prevention</li>
<li>Recovery</li>
<li>Help</li>
<li>Emotion</li>
<li>Anthropomorphism</li>
</ol>
<p>I&#8217;m working up a more in-depth exploration and will post it soon.</p>
<img src="http://feeds.feedburner.com/~r/garthdb/gfTP/~4/mPReIC7Ajd8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.garthdb.com/12-heuristics-of-ux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.garthdb.com/12-heuristics-of-ux/</feedburner:origLink></item>
		<item>
		<title>James T. Edmondson: Typography Hero (updated)</title>
		<link>http://feedproxy.google.com/~r/garthdb/gfTP/~3/0rtUnQlPosg/</link>
		<comments>http://blog.garthdb.com/james-t-edmondson-typography-hero/#comments</comments>
		<pubDate>Thu, 14 Jul 2011 23:19:46 +0000</pubDate>
		<dc:creator>garthdb</dc:creator>
				<category><![CDATA[Heroes]]></category>
		<category><![CDATA[typography]]></category>

		<guid isPermaLink="false">http://blog.garthdb.com/?p=93</guid>
		<description><![CDATA[Yesterday I again found myself enjoying the Lost Type Co-op site. It is a wonderful site that hosts some beautiful fonts. It is a name-your-price system that gives the designers 100% of the proceeds. I decided I should support the wonderful program and buy a couple of fonts. I don&#8217;t have any specific project in [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday I again found myself enjoying the <a href="http://www.losttype.com/">Lost Type Co-op site</a>.  It is a wonderful site that hosts some beautiful fonts.  It is a name-your-price system that gives the designers 100% of the proceeds.</p>
<p>I decided I should support the wonderful program and buy a couple of fonts.  I don&#8217;t have any specific project in mind to use them, they are just pretty.  Feeling cheap by not paying anything (which is totally allowed by the site) I decided to pay at least $1 for<a href="http://www.losttype.com/font/?name=wisdom%20script"> Wisdom Script</a> created by <a href="http://work.jamestedmondson.com/">James T. Edmondson</a>.</p>
<p>This morning I received a thank you email from James.  I thought it was quite decent to get a system generated thank you email even for my $1 purchase, but scrolling down I realized that James had personally written it (handmade even) when I saw this drawn message.</p>
<p><a href="http://blog.garthdb.com/wp-content/uploads/2011/07/IMG_3622.jpg"><img class="alignnone size-medium wp-image-94" title="handwritten_thanks" src="http://blog.garthdb.com/wp-content/uploads/2011/07/IMG_3622-224x300.jpg" alt="James T. Edmondson's handwritten thanks" width="224" height="300" /></a></p>
<p>For this &#8211; <a href="http://twitter.com/jamestedmondson">James T. Edmondson</a> is my Typography Hero; follow him on <a href="http://twitter.com/jamestedmondson">twitter</a> and send him bags of money on <a href="http://www.losttype.com/font/?name=wisdom%20script">Lost Type Co-op</a>.</p>
<p><strong>Update</strong> &#8211; James has released a new font called <a href="http://www.losttype.com/font/?name=duke">Duke</a>.  After purchasing it he sent me another thank you.</p>
<p><a href="http://blog.garthdb.com/wp-content/uploads/2011/07/IMG_3671.jpg"><img class="size-medium wp-image-99 alignnone" title="James_T_Edmondson_thanks_again" src="http://blog.garthdb.com/wp-content/uploads/2011/07/IMG_3671-300x224.jpg" alt="Thanks Again Garth" width="300" height="224" /></a></p>
<img src="http://feeds.feedburner.com/~r/garthdb/gfTP/~4/0rtUnQlPosg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.garthdb.com/james-t-edmondson-typography-hero/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.garthdb.com/james-t-edmondson-typography-hero/</feedburner:origLink></item>
		<item>
		<title>Why Does UX Rock So Hard</title>
		<link>http://feedproxy.google.com/~r/garthdb/gfTP/~3/jC5HBteyPro/</link>
		<comments>http://blog.garthdb.com/why-does-ux-rock-so-hard/#comments</comments>
		<pubDate>Tue, 14 Jun 2011 21:27:26 +0000</pubDate>
		<dc:creator>garthdb</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[Speaking]]></category>
		<category><![CDATA[User Experience]]></category>

		<guid isPermaLink="false">http://blog.garthdb.com/?p=83</guid>
		<description><![CDATA[I spoke at Flash and the City last week in NYC. My session was titled Why Does UX Rock So Hard. I&#8217;ve included my slides, but, to be honest, they are fairly minimal and don&#8217;t make as much sense without context of the presentation. I was also asked to participate in the keynote on why [...]]]></description>
			<content:encoded><![CDATA[<p>I spoke at <a href="http://fatc.co/">Flash and the City</a> last week in NYC.  My session was titled Why Does UX Rock So Hard.</p>
<p>I&#8217;ve included my slides, but, to be honest, they are fairly minimal and don&#8217;t make as much sense without context of the presentation.</p>
<p><img style="visibility:hidden;width:0px;height:0px;" border=0 width=0 height=0 src="http://c.gigcount.com/wildfire/IMP/CXNID=2000002.0NXC/bT*xJmx*PTEzMDgwODUxOTA*NjkmcHQ9MTMwODA4NTUzNjY2NyZwPTEwMDA3NTImZD*mZz*yJm89YWY*NmI1YTMyZjIwNDRlMjlh/ZjlhOTRkYzhkZjYxZTgmb2Y9MA==.gif" /><object height="425" width="550"><param name="movie" value="http://slidesix.com/viewer/SlideSixViewer.swf?alias=UX-Rocks"/><param name="menu" value="false"/><param name="scale" value="noScale"/><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always" /><embed src="http://slidesix.com/viewer/SlideSixViewer.swf?alias=UX-Rocks" allowscriptaccess="always" allowFullScreen="true" height="425" width="550" type="application/x-shockwave-flash"  FlashVars="gig_lt=1308085190469&#038;gig_pt=1308085536667&#038;gig_g=2"/><param name="FlashVars" value="gig_lt=1308085190469&#038;gig_pt=1308085536667&#038;gig_g=2" /></object></p>
<p>I was also asked to participate in the keynote on why it is a good time to be a UX Designer.</p>
<p><img style="visibility:hidden;width:0px;height:0px;" border=0 width=0 height=0 src="http://c.gigcount.com/wildfire/IMP/CXNID=2000002.0NXC/bT*xJmx*PTEzMDgwODYzMTE3MjEmcHQ9MTMwODA4Njc3MTkxMSZwPTEwMDA3NTImZD*mZz*yJm89YWY*NmI1YTMyZjIwNDRlMjlh/ZjlhOTRkYzhkZjYxZTgmb2Y9MA==.gif" /><object height="425" width="550"><param name="movie" value="http://slidesix.com/viewer/SlideSixViewer.swf?alias=Flash-and-the-City-Keynote-sgzXt"/><param name="menu" value="false"/><param name="scale" value="noScale"/><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always" /><embed src="http://slidesix.com/viewer/SlideSixViewer.swf?alias=Flash-and-the-City-Keynote-sgzXt" allowscriptaccess="always" allowFullScreen="true" height="425" width="550" type="application/x-shockwave-flash"  FlashVars="gig_lt=1308086311721&#038;gig_pt=1308086771911&#038;gig_g=2"/><param name="FlashVars" value="gig_lt=1308086311721&#038;gig_pt=1308086771911&#038;gig_g=2" /></object></p>
<img src="http://feeds.feedburner.com/~r/garthdb/gfTP/~4/jC5HBteyPro" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.garthdb.com/why-does-ux-rock-so-hard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.garthdb.com/why-does-ux-rock-so-hard/</feedburner:origLink></item>
		<item>
		<title>Designing for Mobile</title>
		<link>http://feedproxy.google.com/~r/garthdb/gfTP/~3/WTGI3w779-0/</link>
		<comments>http://blog.garthdb.com/designing-for-mobile/#comments</comments>
		<pubDate>Mon, 02 May 2011 02:03:11 +0000</pubDate>
		<dc:creator>garthdb</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Speaking]]></category>
		<category><![CDATA[Flash Camp]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[showoff]]></category>

		<guid isPermaLink="false">http://blog.garthdb.com/?p=68</guid>
		<description><![CDATA[Just finished up my session at Flash Camp on Designing for Mobile. For the fun of trying something new I built the deck with Showoff, taking the recommendation from Sim.  It&#8217;s not as feature rich as Powerpoint/Keynote, but it is fun to play with. I also posted the deck to github. Designing for Mobile Deck [...]]]></description>
			<content:encoded><![CDATA[<p>Just finished up my session at Flash Camp on Designing for Mobile.</p>
<p>For the fun of trying something new I built the deck with <a href="https://github.com/schacon/showoff">Showoff</a>, taking the recommendation from <a href="http://www.simb.net/">Sim</a>.  It&#8217;s not as feature rich as Powerpoint/Keynote, but it is fun to play with.</p>
<p>I also posted the deck to <a href="https://github.com/GarthDB/Designing-for-Mobile">github</a>.</p>
<p><a href="http://blog.garthdb.com/wp-content/uploads/2011/04/designing_for_mobile.pdf">Designing for Mobile Deck</a> (pdf)</p>
<img src="http://feeds.feedburner.com/~r/garthdb/gfTP/~4/WTGI3w779-0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.garthdb.com/designing-for-mobile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.garthdb.com/designing-for-mobile/</feedburner:origLink></item>
	</channel>
</rss>

