<?xml version="1.0" encoding="UTF-8"?>
<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/"
	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/"
	>

<channel>
	<title>Kickass Labs &#187; Uncategorized</title>
	<atom:link href="http://www.kickasslabs.com/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.kickasslabs.com</link>
	<description>We &#9829; code.</description>
	<lastBuildDate>Wed, 28 Dec 2011 16:57:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Node Knockout 2011 Post Mortem</title>
		<link>http://www.kickasslabs.com/2011/08/30/node-knockout-2011-post-mortem/</link>
		<comments>http://www.kickasslabs.com/2011/08/30/node-knockout-2011-post-mortem/#comments</comments>
		<pubDate>Tue, 30 Aug 2011 07:21:40 +0000</pubDate>
		<dc:creator>abel</dc:creator>
				<category><![CDATA[Nodejs]]></category>
		<category><![CDATA[Post Mortem]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[competition]]></category>
		<category><![CDATA[nodejs]]></category>
		<category><![CDATA[nodeknockout]]></category>

		<guid isPermaLink="false">http://www.kickasslabs.com/?p=633</guid>
		<description><![CDATA[Node Knockout 2011 took place this past weekend.  I signed up with the hope of being a &#8220;One Man Army&#8221; &#38; winning the solo contestant award.  I figured that NodeJs was so easy to use and so powerful (seriously, it&#8217;s freaking awesome) that &#8230; <a href="http://www.kickasslabs.com/2011/08/30/node-knockout-2011-post-mortem/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://nodeknockout.com/" target="_blank">Node Knockout 2011</a> took place this past weekend.  I signed up with the hope of being a &#8220;One Man Army&#8221; &amp; winning the <a href="http://nodeknockout.com/prizes" target="_blank">solo contestant</a> award.  I figured that <a href="http://nodejs.org/" target="_blank">NodeJs</a> was so easy to use and so powerful (seriously, it&#8217;s freaking awesome) that it&#8217;d be child&#8217;s play.  I unfortunately bit more than I can chew however.</p>
<p><a href="https://twitter.com/codinghorror" target="_blank">Jeff Atwood</a> once blogged: &#8220;<a href="http://www.codinghorror.com/blog/2006/11/the-project-postmortem.html" target="_blank">I don&#8217;t think it matters how you conduct the postmortem, as long as you do it</a>&#8220;.  To that end, here&#8217;s my post mortem of the app I <strong>didn&#8217;t</strong> finish.  Ideally  other developers will learn from my successes and mistakes.  :)</p>
<p><span id="more-633"></span><span style="text-decoration: underline;"><strong>The App/Idea</strong></span>: A web version of my iphone app ( <a href="http://www.touchplaybook.com/" target="_blank">Touch Playbook</a> ) called Playbook Nodes.  I learned a lot creating TPB and I figured I&#8217;d learn a lot porting the code as well.  I emailed the contest organizers early to make sure I wasn&#8217;t going to violate the following rule:</p>
<p style="padding-left: 30px;">&#8220;Of course, feel free to work on the concept for your application before the competition starts: pretty hand-drawn pictures on napkins, angry email threads between team members on two-space or four-space indentation, schema designs, finite state machines.  Just no digital assets including graphic design assets, code, etc.&#8221;</p>
<p style="padding-left: 30px;">~<a href="http://nodeknockout.com/rules">Node Knockout Rules</a></p>
<p>They gave me the green light, so I starting researching the parts of the app I&#8217;d need to understand.  Looking back, here were my mistakes:</p>
<p><span style="text-decoration: underline;"><strong>Mistake #1: Doing too much</strong></span><br />
Heading into the competition, my goal was to recreate the entire app.  That includes the user interactions (dragging players, passing the ball, shooting, etc), full replay animation logic, &amp; state management.  On top of that, I wanted to add new features like user accounts and the ability to share pays.  Considering that it took me 5 months to build TPB (1 month to spec / 3 months to implement / 1 month of user testing ), this order was WAY too tall.  In hindsight, <strong>I should have simply picked another project</strong>.  Anything TPB inspired that&#8217;d be worthwhile would simply take too long.</p>
<p><span style="text-decoration: underline;"><strong>Mistake #2: Assuming that things will simply fit together</strong></span><br />
I assumed that I&#8217;d simply figure out how to elegantly draw paths as the user dragged players (and animate the process later) despite the fact that I couldn&#8217;t find good examples of animating the drawing of paths and I&#8217;d never done it before using Raphael.  I also assumed Mongoose-Auth would be easily to implement and&#8230;well..would just work.  Both of these assumptions cost me precious time.</p>
<p><span style="text-decoration: underline;"><strong>Mistake #3: Oversleeping</strong></span><br />
I was hoping to get about 5-6 hours of sleep each night.  Instead I got 7-8 each night.  I felt great, but I wish I had the extra hours to code.</p>
<p><span style="text-decoration: underline;"><strong>Mistake #4: Failing to achieve a &#8220;thin line through&#8221; in the first 24 hours</strong></span><br />
This might be the most telling sign of failure in a 48 hour competition.  It&#8217;s really important to get a barebones version of your app working before you continue working on the features in your spec.  The 24 span INCLUDES server setup.</p>
<p>It wasn&#8217;t all bad though.  Here are some things I did right:</p>
<p><span style="text-decoration: underline;"><strong>Success #1: Spec&#8217;d as much as I could BEFORE the competition</strong></span><br />
<a href="https://gomockingbird.com/" target="_blank">Mockingbird</a> was super handy way to mock views &amp; my trusty notebook saved my thoughts in the weeks leading to the competition.  Also, I was able to pull my notes from the creation of TPB which helped a bunch.</p>
<p><span style="text-decoration: underline;"><strong>Success #2: Improved my overall JavaScript skills &amp; got comfortable writing node JavaScript before the competition</strong></span><br />
I&#8217;m new to Node.js, but I&#8217;m not new to web development.  I have to shamefully admit that I used to think of JavaScript as a sub-language whose only use were silly DOM tricks.  Fortunately, I started following the works of Douglas Crockford and saw the light.  Not too long after that, I start hearing about NodeJS &amp; I started soaking up examples around the first week in August.  I turned my knowledge harvesting into overdrive &amp; gained the confidence I needed to enter the competition .  Here are some of the things that I did:</p>
<ul>
<li><a href="http://www.yuiblog.com/crockford/" target="_blank">Watched 7.5 hours</a> of Douglas Crockford&#8217;s presentations</li>
<ul>
<li>Also kept a copy of &#8220;<a href="http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742/ref=sr_1_1?ie=UTF8&amp;qid=1314686380&amp;sr=8-1" target="_blank">Javascript: The Good Parts</a>&#8221; close by at all times <img src='http://www.kickasslabs.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<li>Attending a free training by the co-founders of <a href="http://nodejitsu.com/" target="_blank">Nodejitsu</a>, (<a href="https://twitter.com/hij1nx" target="_blank">@hij1nx</a> &amp; <a href="https://twitter.com/indexzero" target="_blank">@indexzero</a>)</li>
<li>Watching as many <a href="http://nodetuts.com/" target="_blank">NodeTuts</a> as I possible could and coding the examples in the vids.</li>
<li><a href="http://nodeguide.com/" target="_blank">Felix&#8217;s Node.js Guide</a></li>
<ul>
<li>Tons of links to helpful content &amp; people to follow (twitter, blogs, etc).</li>
</ul>
<li>Watching videos by <a href="http://twitter.com/ryah" target="_blank">Ryan Dahl</a>, the creator of Node.js</li>
</ul>
<p><span style="text-decoration: underline;"><strong>Success #3: I went with Heroku instead of Linode or Joyent</strong></span><br />
I didn&#8217;t want to lose time configuring a server.  The purpose of the competition is the app that I create, not testing my Sys-Admin skills.  Going with Heroku saved me the headache that many of my fellow participants faced.  Some teams never got their server setup, but I was deploying early and easily.</p>
<p><span style="text-decoration: underline;"><strong>Success #4: Logging my actions</strong></span><br />
Every hour, on the hour, I wrote a summary of how I spent my time.  If I started writing a bunch of code, I&#8217;d shorten my logging to 30 minute intervals.  This was helpful because it drove me to get small victories at least once an hour.</p>
<p><span style="text-decoration: underline;"><strong>Success #5: In Backbone.js apps, add a global logging function</strong></span><br />
I started doing this in every Backbone app that I create.  I add 3 simple methods to my controller/router definition.  This gives me a name-spaced way to log &amp; benchmark events from my controllers, models &amp; views.  It also gives me a clean way to disable logging when I deploy to production &amp; an easy way to toggle the logging once the code is deployed to prod.</p>
<ul>
<li>debugEnv()</li>
<ul>
<li>The router/controller has a variable called &#8216;debug&#8217; which is set to true/false.</li>
<li>The first line of the method looks like this:<br />
<strong>return (this.debug &amp;&amp; (typeof console !== &#8216;undefined&#8217;)); </strong></li>
</ul>
<li>logEvent(message)</li>
<ul>
<li>This method returns if the controller/router&#8217;s debug method is off<br />
<strong>if(! this.debugEnv() ){ return; }  </strong></li>
<li>Otherwise:<br />
<strong>console.log( (new Date()).toTimeString() + &#8220;: &#8221; + message); </strong></li>
</ul>
<li>benchEvent(handle, operand_string)</li>
<ul>
<li>This method needs to use console.time() &amp; console.timeEnd() so it makes sure that we can debug AND that the &#8216;time&#8217; method exists (This is a problem on IE):<br />
<strong>if(! this.debugEnv() || typeof console.time === &#8216;undefined&#8217; ){ return; }</strong></li>
<li>Otherwise, depending on the &#8216;operand_string&#8217;, &#8230;<br />
<strong>case &#8216;+&#8217; : console.time(handle); break;</strong><br />
<strong>case &#8216;-&#8217;: console.timeEnd(handle); break;</strong></li>
</ul>
</ul>
<p><span class="Apple-style-span" style="color: #444444; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px;">This makes it really easy to track what my app is doing and provides simple benchmarking.  I find it super helpful! </span></p>
<p><span style="text-decoration: underline;"><strong>Success #6: Entering Node Knockout 2011</strong></span><br />
The biggest success was taking part in the competition.   I learned so much more about <a href="http://www.expressjs.com/" target="_blank">ExpressJS</a>, <a href="https://github.com/visionmedia/jade" target="_blank">Jade</a>, <a href="http://learnboost.github.com/stylus/docs/js.html" target="_blank">Stylus</a>, <a href="http://mongoosejs.com/" target="_blank">Mongoose</a>, <a href="http://www.mongodb.org/" target="_blank">MongoDB</a>, <a href="http://www.colorzilla.com/gradient-editor/" target="_blank">CSS3 Gradients</a>, and more because I challenged myself.  Was I ready for every single challenge I faced? Absolutely not!  However, failing with focused effort is better than never trying at all.</p>
<p><span style="text-decoration: underline;"><strong>In Conclusion</strong></span><br />
I look forward to Node Knockout 2012.  I&#8217;m probably going to start spec&#8217;ing even earlier and I&#8217;ll be more realistic about what can be accomplished in 48 hours.  I also intend to complete PlaybookNodes.  While I didn&#8217;t get everything done in 48 hours, I put together a LOT of plumbing and I feel that I&#8217;m potentially only a few days away from a finished product.  I hope my experiences help you plan your next 48 coding session better than I did. <img src='http://www.kickasslabs.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Oh, and now that I&#8217;m done with NKO2011, Part 2 of the Backbone.JS tutorial is on it&#8217;s way!</p>
<p>Till next time, Happy Coding!</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.kickasslabs.com%2F2011%2F08%2F30%2Fnode-knockout-2011-post-mortem%2F&amp;title=Node%20Knockout%202011%20Post%20Mortem" id="wpa2a_2"><img src="http://www.kickasslabs.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.kickasslabs.com/2011/08/30/node-knockout-2011-post-mortem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Get Dropbox to Backup Files in Other Directories on Windows</title>
		<link>http://www.kickasslabs.com/2009/08/25/how-to-get-dropbox-to-backup-files-in-other-directories-on-windows/</link>
		<comments>http://www.kickasslabs.com/2009/08/25/how-to-get-dropbox-to-backup-files-in-other-directories-on-windows/#comments</comments>
		<pubDate>Wed, 26 Aug 2009 02:05:39 +0000</pubDate>
		<dc:creator>gabe</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.kickasslabs.com/?p=405</guid>
		<description><![CDATA[If you&#8217;re using Dropbox (affiliate link), and you should be, because it&#8217;s awesome, you might have noticed that Dropbox will only backup/sync files inside your drop box folder; you can&#8217;t tell Dropbox to also sync with other folders. Now, if &#8230; <a href="http://www.kickasslabs.com/2009/08/25/how-to-get-dropbox-to-backup-files-in-other-directories-on-windows/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re using <a href="https://www.getdropbox.com/referrals/NTkxNzYyODk">Dropbox</a> (affiliate link), and you should be, because it&#8217;s awesome, you might have noticed that Dropbox will only backup/sync files inside your drop box folder; you can&#8217;t tell Dropbox to also sync with other folders.</p>
<p>Now, if you&#8217;re on a Mac or Linux system, just add a symlink inside your dropbox folder that points to the other folder you&#8217;d like to sync.  </p>
<p>On Windows,  if you want Dropbox to sync folders outside of your &#8220;My Dropbox&#8221; folder, you&#8217;ll want to use the <a href="http://technet.microsoft.com/en-us/library/cc753194(WS.10).aspx">mklink </a>command to create a <a href="http://en.wikipedia.org/wiki/NTFS_junction_point">directory junction</a> pointing to the other folder you want synced.  For example, if you want Dropbox to sync c:\source_code, open a command prompt, navigate to your dropbox directory (cd &#8220;My Dropbox&#8221;) and type: </p>
<blockquote><p>(Assuming you&#8217;ve already navigated to your &#8220;My Dropbox&#8221; folder)<br />
<strong>mklink /J source_code c:\source_code</strong></p></blockquote>
<p>Bam. That&#8217;s it. Dropbox is now following the link inside the &#8220;My Dropbox&#8221; directory and it&#8217;s syncing c:\source_code because it thinks it&#8217;s just another folder in the dropbox.  Enjoy!</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.kickasslabs.com%2F2009%2F08%2F25%2Fhow-to-get-dropbox-to-backup-files-in-other-directories-on-windows%2F&amp;title=How%20to%20Get%20Dropbox%20to%20Backup%20Files%20in%20Other%20Directories%20on%20Windows" id="wpa2a_4"><img src="http://www.kickasslabs.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.kickasslabs.com/2009/08/25/how-to-get-dropbox-to-backup-files-in-other-directories-on-windows/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Quick Hits:Deploying iPhone projects to your iPhone/iPod Touch</title>
		<link>http://www.kickasslabs.com/2009/06/04/quick-hitsdeploying-iphone-projects-to-your-iphoneipod-touch/</link>
		<comments>http://www.kickasslabs.com/2009/06/04/quick-hitsdeploying-iphone-projects-to-your-iphoneipod-touch/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 12:23:39 +0000</pubDate>
		<dc:creator>abel</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Quick Hits]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[process]]></category>

		<guid isPermaLink="false">http://www.kickasslabs.com/?p=350</guid>
		<description><![CDATA[This process sucks. Period. To get you through the suckage, I found this article with clear and useful steps. If you&#8217;re becoming an iPhone/iPod Touch developer, this is something you NEED to read. The article presents the steps of the &#8230; <a href="http://www.kickasslabs.com/2009/06/04/quick-hitsdeploying-iphone-projects-to-your-iphoneipod-touch/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This process sucks.  Period.  To get you through the suckage, I found this article with clear and useful steps.  If you&#8217;re becoming an iPhone/iPod Touch developer, this is something you NEED to read. The article presents the steps of the deployment process in the best order possible to improve your chances at a successful push.</p>
<p><a title="Deploying iPhone apps to real devices" href="http://mobiforge.com/developing/story/deploying-iphone-apps-real-devices" target="_blank">Deploying iPhone Apps to Real Devices</a></p>
<p>Happy hacking!</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.kickasslabs.com%2F2009%2F06%2F04%2Fquick-hitsdeploying-iphone-projects-to-your-iphoneipod-touch%2F&amp;title=Quick%20Hits%3ADeploying%20iPhone%20projects%20to%20your%20iPhone%2FiPod%20Touch" id="wpa2a_6"><img src="http://www.kickasslabs.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.kickasslabs.com/2009/06/04/quick-hitsdeploying-iphone-projects-to-your-iphoneipod-touch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quick Hits: Things to keep in mind</title>
		<link>http://www.kickasslabs.com/2009/05/17/quick-hits-things-to-keep-in-mind/</link>
		<comments>http://www.kickasslabs.com/2009/05/17/quick-hits-things-to-keep-in-mind/#comments</comments>
		<pubDate>Mon, 18 May 2009 02:32:55 +0000</pubDate>
		<dc:creator>abel</dc:creator>
				<category><![CDATA[Quick Hits]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.kickasslabs.com/?p=324</guid>
		<description><![CDATA[(1) Before you unpack your gems, navigate to your vendors directory: /Users/[yourname]/[your-app]/vendor/gems: gem unpack [gem name] It isn&#8217;t the end of the world if you don&#8217;t do it ahead of time, but it does make life slightly easier. (2) Remember &#8230; <a href="http://www.kickasslabs.com/2009/05/17/quick-hits-things-to-keep-in-mind/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>(1) Before you unpack your gems, navigate to your vendors directory:</p>
<p>/Users/[yourname]/[your-app]/vendor/gems: gem unpack [gem name]</p>
<p>It isn&#8217;t the end of the world if you don&#8217;t do it ahead of time, but it does make life slightly easier.</p>
<p>(2) Remember that when you find a bug, you should write a test for the expected behavior BEFORE fixing the bug.  &#8220;The Rails Way&#8221; has a great quote about testing:</p>
<p>&#8220;It&#8217;s not that Rails encourages you to do test-driven development, it&#8217;s that it makes it difficult for you not to do test-driven development.&#8221; ~Brian Eng</p>
<p>I&#8217;ve interpreted this quote into the following mantra:</p>
<p>&#8220;It&#8217;s not that rails makes it easy to test, it that it makes you pay when you don&#8217;t&#8221;.</p>
<p>Finding a bug after creating your test suite just means that you missed a test.  Take the opportunity to correct that.</p>
<p>Happy hacking.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.kickasslabs.com%2F2009%2F05%2F17%2Fquick-hits-things-to-keep-in-mind%2F&amp;title=Quick%20Hits%3A%20Things%20to%20keep%20in%20mind" id="wpa2a_8"><img src="http://www.kickasslabs.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.kickasslabs.com/2009/05/17/quick-hits-things-to-keep-in-mind/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

