<?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>The Basement Coders Developer Podcast</title>
	<atom:link href="http://basementcoders.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://basementcoders.com</link>
	<description></description>
	<lastBuildDate>Thu, 03 May 2012 21:49:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Episode 53 &#8211; Interview with Erkki Lindpere &#8211; Scala Sink or Swim</title>
		<link>http://basementcoders.com/2012/05/episode-53-interview-with-erkki-lindpere-scala-sink-or-swim/</link>
		<comments>http://basementcoders.com/2012/05/episode-53-interview-with-erkki-lindpere-scala-sink-or-swim/#comments</comments>
		<pubDate>Thu, 03 May 2012 21:47:25 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1731</guid>
		<description><![CDATA[As mentioned in our previous cast with Jevgeni Kabanov, a fellow by the name of Erkki Lindpere from ZeroTurnaround wrote a three-part series of blog posts titled "Scala Sink or Swim". Basically a set of things you should know before considering Scala for a project. An excellent read, and I highly recommend you check it [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
As mentioned in our previous cast with <a href="https://twitter.com/#!/ekabanov" target="_blank">Jevgeni Kabanov</a>, a fellow by the name of <a href="http://zeroturnaround.com/blog/scala-sink-or-swim-part-1/" target="_blank">Erkki Lindpere</a> from <a href="http://zeroturnaround.com" target="_blank">ZeroTurnaround</a> wrote a three-part series of blog posts titled "<a href="http://zeroturnaround.com/blog/scala-sink-or-swim-part-1/" target="_blank">Scala Sink or Swim</a>". Basically a set of things you should know before considering Scala for a project. An excellent read, and I highly recommend you check it out.</p>
<p>From the moment I read the title I thought "oh boy, let the flame wars begin!" and they did for a while in the comments section of the blog.  However, the ZeroTurnaround guys aren't a lot to be pushed around.  You can talk Monads and all sorts of category theory.  They'll respond in kind.  You can tell them "you aren't smart enough to undersand what you are talking about" and they'll point you to their doctoral thesis on the subject at hand.  They are a smart bunch, and Erkki is certainly no exception.  Especially since Erkki is a self proclaimed lover of the Scala language!  He's just pragmatic and down-to-earth as well.  He points out the "Elephant in the room", instead of trying to step around it.</p>
<p>The posts resonated very well with me, a lot of the pain points associated with Scala are laid out in *plain english*.  I found myself nodding my head much more than shaking it back and forth (until I got to the comments section, then there was a lot of head shaking).  Everything is in there from the S in <a href="https://github.com/harrah/xsbt/wiki" target="_blank">SBT</a> perhaps being mislabeled to the complexities that library developers can introduce into your program *just because they can*.</p>
<p>So I highly recommend you have <a href="http://zeroturnaround.com/blog/scala-sink-or-swim-part-1/" target="_blank">a read</a>, and then a listen!</p>

<p>Enjoy!
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2012/05/episode-53-interview-with-erkki-lindpere-scala-sink-or-swim/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep53.mp3" length="0" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 52 &#8211; JRebel, LiveRebel and OSGi with Jevgeni Kabanov</title>
		<link>http://basementcoders.com/2012/04/episode-52-jrebel-liverebel-and-osgi-with-jevgeni-kabanov/</link>
		<comments>http://basementcoders.com/2012/04/episode-52-jrebel-liverebel-and-osgi-with-jevgeni-kabanov/#comments</comments>
		<pubDate>Sat, 14 Apr 2012 14:48:08 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1725</guid>
		<description><![CDATA[Jevgeni is a good friend of the Basement Coders, I know one of the reasons I look forward to JavaOne is because I know him and his ZeroTurnaround team will be there. They always have the most rocking booth at JavaOne and instead of it being manned by PR folks, it's the geeks of the [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<a href="http://zeroturnaround.com"><img src="http://basementcoders.com/wp-content/uploads/2012/04/Jevgeni_polaroid-255x300.jpg" alt="" title="Jevgeni Kabanov" width="255" height="300" class="alignright size-medium wp-image-1726" /></a><a href="http://twitter.com/#!/ekabanov" target="_blank">Jevgeni</a> is a good friend of the Basement Coders, I know one of the reasons I look forward to JavaOne is because I know him and his ZeroTurnaround team will be there.  They always have the most rocking booth at JavaOne and instead of it being manned by PR folks, it's the geeks of the company who work it (although <a href="http://twitter.com/#!/OliverZT" target="_blank">Oliver White</a> is awesome too!).</p>
<p>Jevgeni fills us in about the new product releases of JRebel and LiveRebel happening over at <a href="http://zeroturnaround.com" target="_blank">ZeroTurnaround</a> and we also discuss the hot-button topic that is OSGi.  You see, Jevgeni is a bit outspoken against OSGi, where as our own cast member Jeff Genender is an OSGi fan boi.  Me?  Well I'm just continually asking myself "OSG-why?"  If I can't get a canonical dependency like Hibernate to work with it, what is it's point of existence...</p>
<p>Also Jevgeni mentions <a href="http://geekout.ee/" target="_blank">GeekOut</a> which is the Estonian Java Developer's June 14-15 2012 which boasts a great line up of speakers.  Since it's taking place in Estonia, birthplace of ZeroTurnaround, you know it's gonna be a non-stop geek party as well!</p>
<p>Thanks for the great cast Jevgeni!</p>

<p>Enjoy!</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2012/04/episode-52-jrebel-liverebel-and-osgi-with-jevgeni-kabanov/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep52.mp3" length="0" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep52.mp3" length="0" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 51 &#8211; Just the cast Mam</title>
		<link>http://basementcoders.com/2012/04/episode-51-just-the-cast-mam/</link>
		<comments>http://basementcoders.com/2012/04/episode-51-just-the-cast-mam/#comments</comments>
		<pubDate>Thu, 05 Apr 2012 18:39:29 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1720</guid>
		<description><![CDATA[It's been a while! In this episode (recorded all the way back in February 2012) we have a good old fashion organic Basement Coders podcast. Heath Kesler, Jason Whaley, Guillermo Castro and me Craig Tataryn were in attendence. Also stay tuned for Episode 52, our OSGi (and ERLang) face-off with ZeroTurnaround's Jevgeni Kabanov Enjoy!]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
It's been a while!  In this episode (recorded all the way back in February 2012) we have a good old fashion organic Basement Coders podcast.  Heath Kesler, Jason Whaley, Guillermo Castro and me Craig Tataryn were in attendence.</p>
<p>Also stay tuned for <a href="http://basementcoders.com/2012/04/episode-52-jrebel-liverebel-and-osgi-with-jevgeni-kabanov/" title="Episode 52 – JRebel, LiveRebel and OSGi with Jevgeni Kabanov">Episode 52</a>, our OSGi (and ERLang) face-off with ZeroTurnaround's <a href="http://twitter.com/#!/ekabanov" target="_blank">Jevgeni Kabanov</a></p>

<p>Enjoy!</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2012/04/episode-51-just-the-cast-mam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep51.mp3" length="0" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep51.mp3" length="0" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 50 &#8211; Interview with Josh Long of VMWare &#8211; SpringSource</title>
		<link>http://basementcoders.com/2012/01/episode-50-interview-with-josh-long-of-vmware-springsource/</link>
		<comments>http://basementcoders.com/2012/01/episode-50-interview-with-josh-long-of-vmware-springsource/#comments</comments>
		<pubDate>Mon, 30 Jan 2012 04:39:11 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1708</guid>
		<description><![CDATA[The Spring Framework is the defacto Swiss Army Knife framework for Java. If you know Java, but don't know Spring, you don't *really* know Java. One of the top reasons to use Spring is, although vendor supported, it's open source software. Navigating through the Spring Framework's code base is like seeing how code *should* be [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<a href="http://twitter.com/starbuxman"><img src="http://basementcoders.com/wp-content/uploads/2012/01/Josh-Long-Polaroid-257x300.png" alt="" title="Josh Long" width="257" height="300" class="alignright size-medium wp-image-1711" /></a>The <a href="http://www.springsource.org/" target="_blank">Spring Framework</a> is the defacto Swiss Army Knife framework for Java.  If you know Java, but don't know Spring, you don't *really* know Java.  One of the top reasons to use Spring is, although vendor supported, it's open source software.  Navigating through the Spring Framework's code base is like seeing how code *should* be written.  Design patterns abound, exception handling is taken seriously and the documentation is pretty stellar for open source code.  </p>
<p><a href="http://twitter.com/starbuxman">Josh Long</a> is VMWare's Spring Developer Advocate, he educates developers on the merits of the Spring Framework and gathers feedback, concerns and enhancements that he takes directly to the committers of Spring.  In this episode (wow 50!) Josh takes us through the new features to be found in Spring 3.1 (<a href="http://blog.springsource.com/2011/02/23/spring-3-1-m1-caching/" target="_blank">caching</a>, <a href="http://blog.springsource.com/2011/02/11/spring-framework-3-1-m1-released/" target="_blank">configuration profiles</a>, etc...).  Josh was a great guest, and we hope to have him on again sometime!</p>
<p><br />
Enjoy!</p>
<p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2012/01/episode-50-interview-with-josh-long-of-vmware-springsource/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep50.mp3" length="0" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 49 &#8211; Paperless Offices &amp; Java is not the new COBOL</title>
		<link>http://basementcoders.com/2011/11/episode-49-paperless-offices-java-is-not-the-new-cobol/</link>
		<comments>http://basementcoders.com/2011/11/episode-49-paperless-offices-java-is-not-the-new-cobol/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 21:24:23 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1697</guid>
		<description><![CDATA[In this episode, Jeff walks us through how he setup his business to be almost completely paperless. He talks about the software, hardware and workflow he uses to accomplish this. Here are a list of software/hardware Jeff and Guillermo use: Devon Think Pro Office Fujitsu Scansnap S1500M Scanner Paperless for Mac Also, we discuss an [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<a href="http://knowyourmeme.com/memes/trollface-coolface-problem"><img src="http://basementcoders.com/wp-content/uploads/2011/11/java-trollface-202x300.png" alt="" title="Java is the new COBOL.  Problem?" width="202" height="300" class="alignleft size-full wp-image-1704" /></a>In this episode, Jeff walks us through how he setup his business to be almost completely paperless. He talks about the software, hardware and workflow he uses to accomplish this.  Here are a list of software/hardware Jeff and Guillermo use:</p>
<ul>
<li><a href="http://www.devontechnologies.com/products/devonthink/devonthink-pro.html" target="_blank">Devon Think Pro Office</a></li>
<li><a href="http://www.fujitsu.com/us/services/computing/peripherals/scanners/scansnap/scansnap-s1500m.html">Fujitsu Scansnap S1500M</a> Scanner</li>
<li><a href="http://www.marinersoftware.com/products/paperless/" target="_blank">Paperless for Mac</a></li>
</ul>
<p>Also, we discuss an article I wrote titled: <a href="http://tataryn.net/2011/11/java-is-not-the-new-cobol/" target="_blank">Java is not the new COBOL</a>. As you can imagine, there were people with <a href="http://www.reddit.com/r/programming/comments/m2gsx/java_is_not_the_new_cobol/" target="_blank">opinions on both sides of the fence</a>.</p>
<p><br />
Enjoy!
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/11/episode-49-paperless-offices-java-is-not-the-new-cobol/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep49.mp3" length="0" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 48 &#8211; Better Late than Never &#8211; JavaOne 2011 Recap</title>
		<link>http://basementcoders.com/2011/11/episode-48-better-late-than-never-javaone-2011-recap/</link>
		<comments>http://basementcoders.com/2011/11/episode-48-better-late-than-never-javaone-2011-recap/#comments</comments>
		<pubDate>Thu, 10 Nov 2011 20:59:02 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1689</guid>
		<description><![CDATA[Well I think our livers have finally recovered from JavaOne 2011. Out of the Basement Coders gang Craig, Jeff and Justin all presented there talks, which you can find here: Justin Lee: The not Java that's not Scala -- Alternatives for EE Development Jeff Genender: Using Apache Camel and Java EE in an OSGi World [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
Well I think our livers have finally recovered from JavaOne 2011.  Out of the Basement Coders gang Craig, Jeff and Justin all presented there talks, which you can find here:</p>
<ol>
<li>Justin Lee: <a href="http://www.slideshare.net/evanchooly/the-not-java-thats-not-scala" target="_blank">The not Java that's not Scala -- Alternatives for EE Development</a></li>
<li>Jeff Genender: <a href="http://www.youtube.com/watch?v=Oo0IOhH9UkM" target="_blank">Using Apache Camel and Java EE in an OSGi World</a></li>
<li>Craig Tataryn: <a href="https://github.com/ctataryn/ScalaLangTour" target="_blank">The Scala Language Tour</a></li>
</ol>
<p>Below you'll find few pics &#038; videos we snapped while we were there.  Great job on this year's Java One Oracle!  But to reiterate what was said at the Community Keynote: Give us our own conference!  We want Mascone back!</p>
<p>Just quick shout out to Dustin from "<a href="http://marxsoftware.blogspot.com/2011/10/javaone-2011-opening-keynote.html" target="_blank">Inspired by Actual Events</a>" blog for doing a fantastic job of writing up detailed summaries of everything he saw at Java One 2011.  Phenomenal job Dustin!</p>
<p><br />
Enjoy!</p>
<p><center><br />
<object width="500" height="400"><param name="flashvars" value="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2F54282584%40N04%2Fsets%2F72157627748284309%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2F54282584%40N04%2Fsets%2F72157627748284309%2F&#038;set_id=72157627748284309&#038;jump_to="></param><param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=109615"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=109615" allowFullScreen="true" flashvars="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2F54282584%40N04%2Fsets%2F72157627748284309%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2F54282584%40N04%2Fsets%2F72157627748284309%2F&#038;set_id=72157627748284309&#038;jump_to=" width="400" height="300"></embed></object><br />
</center>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/11/episode-48-better-late-than-never-javaone-2011-recap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep48.mp3" length="0" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 47 &#8211; Fork You Growl!  Interview with Perry Metzger</title>
		<link>http://basementcoders.com/2011/10/episode-47-fork-you-growl-interview-with-perry-metzger/</link>
		<comments>http://basementcoders.com/2011/10/episode-47-fork-you-growl-interview-with-perry-metzger/#comments</comments>
		<pubDate>Thu, 20 Oct 2011 21:16:46 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>
		<category><![CDATA[Growl]]></category>
		<category><![CDATA[oss]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1675</guid>
		<description><![CDATA[For those who may not know, the developer of Growl, that great little notifier app for OSX decided they should be paid for their work. There is one slight problem however. Growl is Open Source Software. It's not like we've never seen this before. A company starts an open source product, gets a bunch of [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<a href="http://knowyourmeme.com/memes/scumbag-steve"><img src="http://basementcoders.com/wp-content/uploads/2011/10/scumbag-growl.png" alt="Scumbag Growl" title="Scumbag Growl" width="175" height="196" class="alignleft size-full wp-image-1683" /></a><br />
For those who may not know, the developer of <a href="http://growl.info/" target="_blank">Growl</a>, that great little notifier app for OSX decided they <a href="http://itunes.apple.com/us/app/growl/id467939042?mt=12">should be paid for their work</a>.  There is one slight problem however.  Growl is Open Source Software.</p>
<p>It's not like we've never seen this before.  A company starts an open source product, gets a bunch of people to contribute to it and then keeps a separate branch of development for themselves and their paying customers.  Eventually enhancements and bug fixes make their way into the Open Source version of the product.  In the case of Growl however OSX Lion happened, and what better way to profit than to create a private branch of Growl, put all the fixes needed to operate Growl under OSX Lion and throw it up on the AppStore for $1.99.  Yeah, they never bothered to feed the fixes back into the OSS version of Growl. They took their proverbial ball and they're going straight to the bank with it.<br />
<a href="http://basementcoders.com/wp-content/uploads/2011/10/testing-mother-fuckers-do-you-do-it.jpg"><img src="http://basementcoders.com/wp-content/uploads/2011/10/testing-mother-fuckers-do-you-do-it-300x208.jpg" alt="Testing Mother Fuckers Do You Do It" title="Testing Mother Fuckers Do You Do It" width="300" height="208" class="alignright size-medium wp-image-1685" /></a><br />
One of the biggest problems with this approach, other than the fact they just pissed off a lot of people who beleive strongly in OSS, is that Growl is still broken.  So you pay your $1.99 and it no workie.</p>
<p>So while these snake-oil salesmen are busy fleecing their users via the AppStore along comes a guy who's had just about enough.  A paying customer who was extremely dishearten by the fact a piece of software he paid for just didn't work as advertised.  His name is <a href="http://twitter.com/#!/perrymetzger" target="_blank">Perry Metzger</a>, and he <a href="https://bitbucket.org/pmetzger/growl/" target="_blank">forked Growl</a>.  Not only did he fork it, he fixed it, and it's free.  Now the road for Perry wasn't smooth, he tried to reason with the authors of Growl, he tried to help existing users who were left out in the cold, and the thanks he got was a cease and desist and a one month ban from the Growl mailing list.  Open Source Software indeed.</p>
<p>Have a listen to Perry's story and please <a href="http://twitter.com/#!/perrymetzger" target="_blank">let him know</a> he's fighting the good fight.</p>
<p>Enjoy!</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/10/episode-47-fork-you-growl-interview-with-perry-metzger/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep47.mp3" length="0" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep47.mp3" length="0" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep47.mp3" length="0" type="audio/mpeg" />
		</item>
		<item>
		<title>The Basement Coders welcome Heath Kesler aboard!</title>
		<link>http://basementcoders.com/2011/10/the-basement-coders-welcome-heath-kesler-aboard/</link>
		<comments>http://basementcoders.com/2011/10/the-basement-coders-welcome-heath-kesler-aboard/#comments</comments>
		<pubDate>Thu, 13 Oct 2011 18:19:18 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[heath kesler]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1667</guid>
		<description><![CDATA[We have a new Basement Coder! Heath Kesler (the guy on the left) has been a long-time friend of the podcast and will be coming aboard to help increase the number of casts. With such busy schedules, the Basement Coders sometimes find it tough to synchronize Swatches so having an extra hand on deck will [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<a href="http://www.flickr.com/photos/54282584@N04/5060388687/" title="Heath Kesler, Guillermo Castro and Jeff Genender by The Basement Coders, on Flickr"><img style="float:left;padding:1em;" src="http://farm5.static.flickr.com/4147/5060388687_9c1bea8731.jpg" width="375" height="500" alt="Heath Kesler, Guillermo Castro and Jeff Genender"></a><br />
We have a new Basement Coder!  <a href="http://www.linkedin.com/in/hkesler" target="_blank">Heath Kesler</a> (the guy on the left) has been a long-time friend of the podcast and will be coming aboard to help increase the number of casts.  With such busy schedules, the Basement Coders sometimes find it tough to synchronize Swatches so having an extra hand on deck will definitely help.  Heath not only brings his vast SOA knowledge to the table, but also his <a href="http://code.google.com/webtoolkit/" target="_blank">GWT </a>expertise, something us <a href="http://wicket.apache.org" target="_blank">Wicket</a>-snobs look forward to debating with him.</p>
<p>So from all of us at the Basement Coders, we'd like to welcome you aboard Heath!</p>
<div style="display:block;height:300px;">&nbsp;</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/10/the-basement-coders-welcome-heath-kesler-aboard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Delivering on Promises, Moving Java Forward: Henrik Stahl at JavaOne 2011</title>
		<link>http://basementcoders.com/2011/10/delivering-on-promises-moving-java-forward-henrik-stahl/</link>
		<comments>http://basementcoders.com/2011/10/delivering-on-promises-moving-java-forward-henrik-stahl/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 18:28:10 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>
		<category><![CDATA[JavaOne oracle java7 java8]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1661</guid>
		<description><![CDATA[As you may remember last year at JavaOne, we had the privilege to interview Oracle's Product and Strategy lead for the Java Platform, Henrik Stahl. The entire theme of JavaOne this year was "Moving Java Forward", and boy is it ever! The vibe at the conference was great compared to last year. We'll most likely [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<img src="http://basementcoders.com/wp-content/uploads/2011/10/Java7.jpg" alt="" title="" width="427" height="233" class="alignright size-full wp-image-1664" />As you may remember last year at JavaOne, we had the <a href="http://basementcoders.com/2010/09/the-future-of-java-rides-on-guys-like-these-interview-with-oracles-justin-kestelyn-and-henrik-stahl/" target="_blank">privilege to interview</a> Oracle's Product and Strategy lead for the Java Platform, <a href="http://blogs.oracle.com/henrik/" target="_blank">Henrik Stahl</a>.</p>
<p>The entire theme of JavaOne this year was "Moving Java Forward", and boy is it ever!  The vibe at the conference was great compared to last year.  We'll most likely be doing a JavaOne 2011 recap episode soon, so I'll save the rest for then.</p>
<p>Have a listen, Henrik has really delivered for us Java folks, and we should tip our hats in appreciation.</p>

</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/10/delivering-on-promises-moving-java-forward-henrik-stahl/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep46.mp3" length="0" type="audio/mpeg" />
		</item>
		<item>
		<title>Strange Loop 2011 Day 1</title>
		<link>http://basementcoders.com/2011/09/strange-loop-2011-day-1/</link>
		<comments>http://basementcoders.com/2011/09/strange-loop-2011-day-1/#comments</comments>
		<pubDate>Wed, 21 Sep 2011 18:05:46 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>
		<category><![CDATA[strangeloop]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1648</guid>
		<description><![CDATA[In this Episode Basement Coders Craig and Jason along with Marc Jeanson, Amir Barylko and Sebastián Galkin recap their Day 1 conference experiences at Alex Miller's Strange Loop 2011 in St. Louis, MO. Conference and pre-conference workshop speakers mentioned in the cast can all be found on the Strange Loop Site in the sessions section. [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<div id="attachment_1454" class="wp-caption aligncenter" style="width: 579px"><a href="http://thestrangeloop.com/" target="_blank"><img src="http://basementcoders.com/wp-content/uploads/2011/06/strangeloop2011.jpg" alt="" title="Strange Loop 2011" width="569" height="319" class="size-full wp-image-1454" /></a><p class="wp-caption-text">September 18th-20th 2011</p></div><br />
In this Episode Basement Coders <a href="http://twitter.com/craiger" target="_blank">Craig</a> and <a href="http://twitter.com/jasonwhaley" target="_blank">Jason</a> along with <a href="http://twitter.com/marcjeanson" target="_blank">Marc Jeanson</a>, <a href="http://twitter.com/abarylko" target="_blank">Amir Barylko</a> and <a href="http://twitter.com/paraseba" target="_blank">Sebastián Galkin</a> recap their Day 1 conference experiences at <a href="http://twitter.com/puredanger" target="_blank">Alex Miller</a>'s <a href="https://thestrangeloop.com/" target="_blank">Strange Loop</a> 2011 in St. Louis, MO.</p>
<p>Conference and pre-conference workshop speakers mentioned in the cast can all be found on the Strange Loop Site in the <a href="https://thestrangeloop.com/sessions" target="_blank">sessions section</a>.</p>

<p>Enjoy!</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/09/strange-loop-2011-day-1/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep45-1.mp3" length="0" type="audio/mpeg" />
		</item>
		<item>
		<title>Clojure Training Nov 6-8 2011</title>
		<link>http://basementcoders.com/2011/09/clojure-training-nov-6-8-2011/</link>
		<comments>http://basementcoders.com/2011/09/clojure-training-nov-6-8-2011/#comments</comments>
		<pubDate>Fri, 16 Sep 2011 16:17:12 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[clojure]]></category>
		<category><![CDATA[functional programming]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1622</guid>
		<description><![CDATA[Back in our Jfokus cast, Neal Ford was really passionate about Clojure. This made me very interested as well. Our friend over at MavenThought is delivering Clojure training up here in Wonderful Winnipeg! For all you Minneapolis folks this is a simple drive, just head North until you see something resembling a City. In Fargo [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<p><div id="attachment_1632" class="wp-caption aligncenter" style="width: 310px"><a href="http://maventhought.com/?p=882"><img src="http://basementcoders.com/wp-content/uploads/2011/09/Clojure-300x213.jpg" alt="" title="Clojure" width="300" height="213" class="size-medium wp-image-1632" /></a><p class="wp-caption-text">Clojure Training Nov 6-8 2011</p></div><br />
Back in our <a target="_blank" href="http://basementcoders.com/2011/02/episode-33-java-is-a-dead-end-from-stockholms-jfokus-conference/">Jfokus cast</a>, <a target="_blank" href="http://www.nealford.com/">Neal Ford</a> was really passionate about <a href="http://clojure.org/" target="_blank">Clojure</a>.  This made me very interested as well. Our friend over at <a href="http://maventhought.com/?p=882" target="_blank">MavenThought</a> is delivering Clojure training up here in <a href="http://winnipegimages.com/Winnipeg_Skyline-N-06-8106A1~1.JPG" target="_blank">Wonderful Winnipeg</a>!  For all you <strong>Minneapolis</strong> folks this is a simple drive, just head North until you see something resembling a City.  In <strong>Fargo</strong> or <strong>Grand Forks</strong>?  Even closer.  Elsewhere in the world?  We have an <a href="http://www.waa.ca/" target="_blank">International Airport</a> as well.</p>
<p><img src="http://basementcoders.com/wp-content/uploads/2011/09/Jets-Logo-300x147.png" alt="" title="" width="300" height="147" class="aligncenter size-medium wp-image-1629" /></p>
<p>I'd really like to pack the rafters for this session so my company, <a href="http://grindsoftware.com" target="_blank">Grind Software Inc</a>. will be giving away two tickets to our new (old?) NHL Team <strong>The Winnipeg Jets vs. the Florida Panthers</strong> on Thursday November 10th!  These tickets are unattainable, all games for the season are <strong>SOLD OUT</strong>.  Once you register for the course, you'll be entered for the draw which will take place in class to those able to attend the game.<br />
<br/><br />
<br/><br />
<center><span style="font-size:1.5em;"><strong>Register</strong> over at <a href="http://maventhought.com/?p=882" target="_blank">MavenThought</a>, or email  <a href="mailto:clojure@maventhought.com">clojure@maventhought.com</a> if you have questions. Group discounts available upon request.</span></center><br />
<br/><br />
<br/>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/09/clojure-training-nov-6-8-2011/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Episode 44 &#8211; David Pollak: Scala&#8217;s not for the Proletariat, HP TouchPad is resurrected, RSS is poisonous &amp; JavaOne winner!</title>
		<link>http://basementcoders.com/2011/09/episode-44-david-pollak-scalas-not-for-the-proletariat-hp-touchpad-is-resurrected-rss-is-poisonous-javaone-winner/</link>
		<comments>http://basementcoders.com/2011/09/episode-44-david-pollak-scalas-not-for-the-proletariat-hp-touchpad-is-resurrected-rss-is-poisonous-javaone-winner/#comments</comments>
		<pubDate>Fri, 09 Sep 2011 13:17:27 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>
		<category><![CDATA[javaone]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[scala]]></category>
		<category><![CDATA[touchpad]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1615</guid>
		<description><![CDATA[In today's episode we cover a wide range of topics from David Pollak's (creator of Lift) view that "Scala is only for a certain class of developer", the HP TouchPad gets a second chance(?) and RSS may be extremely poisonous to your productivity (duh?) Congratulations to Brent Watson! You are our JavaOne 2011 Conference Pass [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<p>In today's episode we cover a wide range of topics from David Pollak's (creator of <a href="http://liftweb.net/" target="_blank">Lift</a>) view that "<a href="http://goodstuff.im/scala-use-is-less-good-than-java-use-for-at-l" target="_blank">Scala is only for a certain class of developer</a>", the <a href="http://www.zdnet.com/blog/mobile-news/as-many-as-200000-hp-touchpads-on-the-way/4209" target="_blank">HP TouchPad gets a second chance</a>(?) and <a href="http://www.zdnet.com/blog/mobile-news/as-many-as-200000-hp-touchpads-on-the-way/4209" target="_blank">RSS may be extremely poisonous to your productivity</a> (duh?)<br />
<strong><br />
Congratulations to <a href="http://twitter.com/#!/brent_watson" target="_blank">Brent Watson</a>! </strong> You are our <a href="http://www.oracle.com/javaone/index.html" target="_blank">JavaOne 2011</a> Conference Pass giveaway winner!</p>
<p><br />
Enjoy!</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/09/episode-44-david-pollak-scalas-not-for-the-proletariat-hp-touchpad-is-resurrected-rss-is-poisonous-javaone-winner/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep44.mp3" length="0" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep44.mp3" length="0" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep44.mp3" length="0" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep44.mp3" length="0" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 43 &#8211; Interview with Prashant Deva of Chronon Systems</title>
		<link>http://basementcoders.com/2011/09/episode-43-interview-with-prashant-deva-of-chronon-systems/</link>
		<comments>http://basementcoders.com/2011/09/episode-43-interview-with-prashant-deva-of-chronon-systems/#comments</comments>
		<pubDate>Wed, 07 Sep 2011 15:02:11 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>
		<category><![CDATA[chronon]]></category>
		<category><![CDATA[debugger]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jvm]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1608</guid>
		<description><![CDATA[Prashant Deva is not some hipster "brogrammer". No, he's about as hard-core geek, John Carmack-level coder. He's the fellow that brought us ANTLR Studio, to give you some bearing on his skills. While preparing for this podcast I 1) realized he never sleeps 2) he's very enthusiastic about Chronon. In this interview Prashant takes us [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<a href="http://chrononsystems.com"><img src="http://basementcoders.com/wp-content/uploads/2011/09/chronon_systems2.png" alt="" title="Chronon Systems" width="415" height="85" class="aligncenter size-full wp-image-1609" /></a><br />
Prashant Deva is not some hipster "<a href="http://www.quora.com/Brogramming/How-does-a-programmer-become-a-brogrammer">brogrammer</a>".  No, he's about as hard-core geek, <a href="http://en.wikipedia.org/wiki/John_D._Carmack">John Carmack</a>-level coder.  He's the fellow that brought us <a href="http://www.placidsystems.com/antlrstudio.aspx">ANTLR Studio</a>, to give you some bearing on his skills.  While preparing for this podcast I 1) realized he never sleeps 2) he's very enthusiastic about <a href="http://www.chrononsystems.com/">Chronon</a>.</p>
<p>In this interview Prashant takes us through Chronon which he describes as a 'DVR for debuggers'.  That's right, you can actually step through a program that has already run!  An invaluable tool for tracking down those nasty production bugs.  The product is amazing, it's not a simple gimmick and I believe it will become the de-facto standard for JVM-based production servers.</p>
<p><strong>Watch the video:</strong><br />
<center><iframe src="http://player.vimeo.com/video/28699567?title=0&amp;byline=0&amp;portrait=0" width="551" height="310" frameborder="0"></iframe></center></p>
<p><strong>Or have a listen:</strong><br />
</p>
<p>Enjoy!
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/09/episode-43-interview-with-prashant-deva-of-chronon-systems/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep43.mp3" length="0" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep43.mp3" length="0" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep43.mp3" length="0" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep43.mp3" length="0" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 42 &#8211; Steve Jobs Resigns, Linux turns 20, HP TouchPad</title>
		<link>http://basementcoders.com/2011/08/episode-42-steve-jobs-resigns-linux-turns-20-hp-touchpad/</link>
		<comments>http://basementcoders.com/2011/08/episode-42-steve-jobs-resigns-linux-turns-20-hp-touchpad/#comments</comments>
		<pubDate>Mon, 29 Aug 2011 15:10:45 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1545</guid>
		<description><![CDATA[.jobs A:link { color:red; } .jobs A:visited { color:red; } .jobs p { color:white; padding-right: 10px; } .jobs { width: 700px; height:593px; background: black; padding-right:10px; } In this Episode Craig has former cast member Alex Demko on to speak about Linux turning 20 years old and the sad news that Steve Jobs is too sick [...]]]></description>
			<content:encoded><![CDATA[<style>
.jobs A:link {
  color:red;
}
.jobs A:visited {
  color:red;
}
.jobs p {
  color:white;
  padding-right: 10px;
}
.jobs {
   width: 700px;
   height:593px;
   background: black;
   padding-right:10px;
}
</style>
<div class="entrycontent jobs">
<img src="http://basementcoders.com/wp-content/uploads/2011/08/Jobs-1.jpg" alt="" title="Jobs-1" width="467" height="208" class="alignleft size-full wp-image-1570" /><br />
<img src="http://basementcoders.com/wp-content/uploads/2011/08/Jobs-2.jpg" alt="" title="Jobs-2" width="506" height="385" class="alignleft size-full wp-image-1571" /></p>
<p>In this Episode Craig has former cast member <a href="http://twitter.com/ademko" target="_blank">Alex Demko</a> on to speak about Linux turning 20 years old and the sad news that Steve Jobs is too sick to continue in his role as visionary CEO at Apple <a href="http://techcrunch.com/2011/08/24/steve-jobs-resigns-from-apple/">and resigns</a>. <a href="http://www.readwriteweb.com/enterprise/author/joe-brockmeier-1.php" target="_blank">Joe Brockmeier</a> over at ReadWriteWeb asks, <a href="http://www.readwriteweb.com/enterprise/2011/08/as-steve-jobs-steps-down-linux.php" target="_blank">which is more influential</a>?  What Jobs has done with Apple or what Linus has done with Linux?</p>
<p>As well, what is up with <a href="http://hp.com" target="_blank">Hewlett-Packard</a> these days?  They are <a href="http://www.informationweek.com/news/global-cio/interviews/231600254" target="_blank">selling off their consumer PC business</a> and <a href="http://techcrunch.com/2011/08/19/hp-issues-touchpad-liquidation-order-get-yours-now-for-100/" target="_blank">liquidating</a> their entry into the tablet space, the HP TouchPad, all without a buyer lined up!  Already <a href="http://techcrunch.com/2011/08/24/hp-touchpad-android-port-bounty-now-over-2000/" target="_blank">there is a bounty setup</a> for anyone that can get the Android OS up and running on the $99 TouchPads.  It's a mad, mad world.</p>
<p><strong>To Steve Jobs</strong>:  All the best. Truly. You have the best medical care money can buy, however it's your drive and determination which has gotten you this far, and it will push you through to whichever end is yours.<br />
<br/>
</div>
<div>
<br />
Enjoy.
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/08/episode-42-steve-jobs-resigns-linux-turns-20-hp-touchpad/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep42.mp3" length="40374054" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep42.mp3" length="40374054" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep42.mp3" length="40374054" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep42.mp3" length="40374054" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep42.mp3" length="40374054" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep42.mp3" length="40374054" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep42.mp3" length="40374054" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep42.mp3" length="40374054" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep42.mp3" length="40374054" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 41 &#8211; Interview with Igor Minar of AngularJS</title>
		<link>http://basementcoders.com/2011/08/episode-41-interview-with-igor-minar-of-angularjs/</link>
		<comments>http://basementcoders.com/2011/08/episode-41-interview-with-igor-minar-of-angularjs/#comments</comments>
		<pubDate>Tue, 23 Aug 2011 19:30:26 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>
		<category><![CDATA[angular]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1532</guid>
		<description><![CDATA[.nohover a:hover {text-decoration:none;} &#60; angular /&#62; This is our first podcast to introduce video! There were some bumps and I learned a lot (all explained in the first 3 minutes of the video) but all-in-all it didn't turn out that bad. If you haven't heard of Angular, and chances are you haven't, it's an MVC [...]]]></description>
			<content:encoded><![CDATA[<style>
  .nohover a:hover {text-decoration:none;}
</style>
<div class="entrycontent">
<center><span class="nohover"><a class="nohover" href="http://angularjs.org"><span style="font-size:3em;color:grey;">&lt; angular /&gt;</span></a></span></center><br />
<br/><br />
This is our first podcast to introduce video!  There were some bumps and I learned a lot (all explained in the first 3 minutes of the video) but all-in-all it didn't turn out that bad.</p>
<p>If you haven't heard of <a href="http://angularjs.org" target="_blank">Angular</a>, and chances are you haven't, it's an MVC Javascript framework that has some real legs.  It promotes the concept of rich client-side programming with a "dumb" back-end.  So picture a scenario where you have an <a href="http://basementcoders.com/2010/11/episode-23-interview-with-shay-banon-of-elastic-search/" target="_blank">Elastic Search</a> server running on your back-end and Angular running in the browser.  All the pulling and pushing of JSON, the event handling, etc.. would be handled by Angular.  It looks pretty impressive.</p>
<p>The framework <a href="https://github.com/angular/angular.js">is hosted on github</a>, and its development is sponsored in part by Google.</p>
<p><strong>Have a watch:</strong><br />
<iframe src="http://player.vimeo.com/video/28033972?title=0&amp;byline=0&amp;portrait=0" width="551" height="310" frameborder="0"></iframe></p>
<p><strong>Or just listen:</strong></p>

<p>Enjoy!
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/08/episode-41-interview-with-igor-minar-of-angularjs/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep41.mp3" length="0" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 40 &#8211; Our thoughts on Mac OSX Lion</title>
		<link>http://basementcoders.com/2011/08/episode-40-our-thoughts-on-mac-osx-lion/</link>
		<comments>http://basementcoders.com/2011/08/episode-40-our-thoughts-on-mac-osx-lion/#comments</comments>
		<pubDate>Sat, 06 Aug 2011 16:07:14 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>
		<category><![CDATA[javaone]]></category>
		<category><![CDATA[osx]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1514</guid>
		<description><![CDATA[On today's episode we share our thoughts on the new Mac OSX Lion. Arstechnica did a brilliant 19 page review the minute Lion was released, and being the fan boys we are a majority of the Basement Coders had it installed as soon as the App Store could download it. Personally, I'm not an early [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<a href="http://arstechnica.com/apple/reviews/2011/07/mac-os-x-10-7.ars"><img src="http://basementcoders.com/wp-content/uploads/2011/08/Apple-Mac-OSX-Lion-3-300x202.jpg" alt="" title="Apple Mac OSX Lion" width="300" height="202" class="alignleft size-medium wp-image-1515" /></a>On today's episode we share our thoughts on the new Mac OSX Lion.  <a href="http://arstechnica.com/apple/reviews/2011/07/mac-os-x-10-7.ars">Arstechnica did a brilliant 19 page review</a> the minute Lion was released, and being the fan boys we are a majority of the Basement Coders had it installed as soon as the App Store could download it.</p>
<p>Personally, I'm not an early adopter of OSs, I wait until other people install it and figure out all the workarounds to problems which inevitably crop up.  I really like my setup currently, and I just can't fathom taking the time to update at the moment.  Especially since OSX Lion is such a major update, it's not like Snow Leopard which only brought bug fixes.  Instead, Lion brings all new features and paradigms, such as being able to install your OS without even visiting a physical store to purchase it.  That's right, all you have to do is grab it from the Mac App Store and let 'er rip.  With all the features in packs, OSX Lion definitely looks to be worth the $29 price tag.</p>
<div style="padding-top:20px;">
<a href="http://www.oracle.com/javaone/"><img style="margin-top:-30px" src="http://basementcoders.com/wp-content/uploads/2011/08/javaone.jpg" alt="" title="JavaOne 2011" width="259" height="115" class="alignright size-full wp-image-1516" /></a>We are also pleased to announce we have a full JavaOne conference pass to give away to a lucky listener!  <a href="http://basementcoders.com/2011/08/win-a-free-pass-to-javaone-2011/">Find out how to enter</a>!
</div>
<p><br/><br />
</p>
<p>Enjoy!
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/08/episode-40-our-thoughts-on-mac-osx-lion/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep40.mp3" length="0" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep40.mp3" length="0" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep40.mp3" length="0" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep40.mp3" length="0" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep40.mp3" length="0" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep40.mp3" length="0" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep40.mp3" length="0" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep40.mp3" length="0" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep40.mp3" length="0" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep40.mp3" length="0" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep40.mp3" length="0" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep40.mp3" length="0" type="audio/mpeg" />
		</item>
		<item>
		<title>Win a free pass to JavaOne 2011!</title>
		<link>http://basementcoders.com/2011/08/win-a-free-pass-to-javaone-2011/</link>
		<comments>http://basementcoders.com/2011/08/win-a-free-pass-to-javaone-2011/#comments</comments>
		<pubDate>Sat, 06 Aug 2011 15:52:30 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1507</guid>
		<description><![CDATA[The Basement Coders (all of em!) will be at JavaOne this October in beautiful San Francisco. As well Justin, Jeff and Craig will be presenting! And folks as a reward for listening, following and supporting Independent Media we want you give you a chance at a full conference pass for JavaOne in San Francisco, October [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<a href="http://www.oracle.com/javaone/"><img src="http://basementcoders.com/wp-content/uploads/2011/08/duke_j1.png" alt="" title="Duke" width="200" height="233" class="alignright size-full wp-image-1508" /></a>The Basement Coders (all of em!) will be at <a href="http://www.oracle.com/javaone/">JavaOne</a> this October in beautiful San Francisco. As well Justin, Jeff and Craig will be presenting! And folks as a reward for listening, following and supporting Independent Media we want you give you a chance at a full conference pass for <a href="http://www.oracle.com/javaone/">JavaOne in San Francisco</a>, October 2nd-6th.  This is literally a $2,000 USD value!  Worth every penny I might add.</p>
<p>All you have to do to enter is <span style="font-size:1.3em"><a href="http://basementcoders.com/javaone">follow these steps</a></span>.  Good luck, and hope to see you there!
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/08/win-a-free-pass-to-javaone-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introduction to Functional Programming</title>
		<link>http://basementcoders.com/2011/08/introduction-to-functional-programming/</link>
		<comments>http://basementcoders.com/2011/08/introduction-to-functional-programming/#comments</comments>
		<pubDate>Tue, 02 Aug 2011 15:37:05 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Craig]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1497</guid>
		<description><![CDATA[Recently I started a local user group called the WfPG - Winnipeg Functional Programming Group. The mandate is simple: Learn Functional Programming paradigms and languages, in a friendly and helpful setting. So much of the time when learning Functional Programming, one is faced with a feeling of inadequacy (at least that's how I feel). The [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<a href="http://wfpg.ca"><img src="http://basementcoders.com/wp-content/uploads/2011/08/logo_200x150.png" alt="" title="WfPG Logo" width="200" height="149" class="aligncenter size-full wp-image-1498" /></a><br />
Recently I started a local user group called the <a href="http://wfpg.ca" target="_blank">WfPG</a> - Winnipeg Functional Programming Group.  The mandate is simple: Learn Functional Programming paradigms and languages, in a friendly and helpful setting.</p>
<p>So much of the time when learning Functional Programming, one is faced with a feeling of inadequacy (at least that's how I feel). The online community can be divisive and just downright demeaning to its members at times. Hence, I thought, why not bring together people willing to learn and share out from behind the veil of anonymity and sit them in a room together.</p>
<p>The <a href="http://wfpg.ca/2011/07/follow-up-to-the-july-2011-event/" target="_blank">video from our first meeting</a> has been posted, feel free to skip ahead to around the 6min mark for the main topic.  If you are in the Winnipeg area and are interested in becoming a member, please <a href="http://meetup.com/theWfPG" target="_blank">become a member of our Meetup</a>.</p>
<p><a href="http://wfpg.ca/2011/07/follow-up-to-the-july-2011-event/"><img src="http://basementcoders.com/wp-content/uploads/2011/08/intro-to-functional-programming-vimeo.jpg" alt="" title="Introduction to Functional Programming" width="627" height="483" class="aligncenter size-full wp-image-1501" /></a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/08/introduction-to-functional-programming/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Apache Wicket Cookbook Review</title>
		<link>http://basementcoders.com/2011/07/apache-wicket-cookbook-review/</link>
		<comments>http://basementcoders.com/2011/07/apache-wicket-cookbook-review/#comments</comments>
		<pubDate>Thu, 07 Jul 2011 18:56:39 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Craig]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1486</guid>
		<description><![CDATA[Some Background... This review of the Apache Wicket Cookbook is interesting because, as it turned out, I was asked to write this book originally! I had been singled out based on my contributions to the 5 days of Wicket. The offer was made back in 2009 when I was placed at a contract full-time on-site [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<h2>Some Background...</h2>
<p>This review of the <a href="http://www.packtpub.com/apache-wicket-cookbook/book">Apache Wicket Cookbook</a> is interesting because, as it turned out, I was asked to write this book originally!  I had been singled out based on my contributions to the <a href="http://java.dzone.com/articles/wicket-setting-project">5 days of Wicket</a>.  The offer was made back in 2009 when I was placed at a contract full-time on-site at a client.  I knew there was no way I could crank out a book in the timeframe given while dealing with work deadlines, not to mention having time left over for my family.<br />
<a href="http://www.packtpub.com/apache-wicket-cookbook/book"><img src="http://basementcoders.com/wp-content/uploads/2011/07/wicket-cookbook-248x300.jpg" alt="" title="Apache Wicket Cookbook" width="248" height="300" class="alignleft size-medium wp-image-1487" /></a><br />
The <a href="http://www.packtpub.com/">[PACT]</a> representative assured me it would be ok, but made the suggestion I should look for a co-author to help.  That actually sounded like a good idea, so I approached a person I was working with and put them in touch with the representative.  Turns out this person whom I handed a co-author spot to couldn’t even be bothered to respond to [PACKT]!  So in the end, being realistic about the time-frames and my current workload, I passed on the offer and suggested they try and get one of the committers (other than the two who wrote <a href="http://basementcoders.com/2008/09/wicket-in-action-review/">Wicket in Action</a>) to write it.  I honestly have no regrets about this decision, I think I would have ended up writing the entire thing *myself* between 9pm-2am.  That would have gotten really-old really-fast.  If my co-author couldn’t even make the time to respond to an email, how would they every help me write a book?</p>
<h2>Fast forward to present day...</h2>
<p>I happened to catch via my twitter feed that <a href="http://twitter.com/#!/ivaynberg">Igor Vaynberg</a> wrote a book on Wicket! This is a very good indication that I have not been paying attention to the ##wicket Freenode channel lately!  I was delighted to know it was Igor who landed the book offer.  He is literally the foundation of the <a href="http://apache-wicket.1842946.n4.nabble.com/Users-forum-f1842947.html">wicket-user</a> mailing list.  He has single handedly helped more people with more problems (which are usually more PEBKAC than anything) than anyone else.  Not to mention he’s a <a href="https://issues.apache.org/jira/secure/QuickSearch.jspa?query=ivaynberg">heavy committer</a> to the project itself.</p>
<h2>The Review…</h2>
<p>The book is in the [PACT] Cookbook format, and that is to say, a cookbook meant for an experienced chef, not the “20 minute recipes” variety.  So don’t go into this book without a firm understanding of Apache Wicket.  My suggestions would be to go out and get yourself a copy of <a href="http://basementcoders.com/2008/09/wicket-in-action-review/">Wicket in Action</a> first, then pickup this book when you want to learn some pragmatic solutions to the “how do I do X in Wicket” questions you might have.</p>
<p>The format of each section of the book takes on this style:</p>
<ul>
<li>State a problem (i.e. “How do I display data as charts?”)</li>
<li>Show an Example</li>
<li>Explain each aspect of the example</li>
<li>Give supplementary hints and tips</li>
</ul>
<p>I liked how each segment of the example was broken out and explained.  My only criticism of this approach would be, in the interest of saving trees, the code samples could have been annotated and then each explanation <a href="http://basementcoders.com/wp-content/uploads/2011/07/wicket-in-action-annotations.png">tagged with the annotation </a>of the code sample it references.</p>
<p>Again, you must have a good foundation in Wicket to understand what’s going on in much of the book.  Even I was thrown for a loop when Igor used the following in his examples:</p>
<pre>
Form&lt;?&gt; myForm  = new Form&lt;Void&gt;(“myForm”)
</pre>
<p>I couldn’t for the life of me figure out what the “Void” was doing. Was it part of Wicket?  Was it part of the JDK?  I couldn’t even really formulate the proper Google search to find out.  Finally I resorted to <a href="http://stackoverflow.com/questions/6563691/formvoid-in-wicket-or-usage-of-the-void-type-in-general">asking the question</a> on Stack Overflow and got an acceptable answer.  My point being is, it wasn’t explained in the book, it was assumed the reader knows.  I think perhaps the reviewers should have caught stuff like that.  Either that or I'm just an idiot for not knowing how that all worked, which is probably the more reasonable explanation.</p>
<p>The chapters of this book are indicative of its author.  These chapters are based off of questions I’m sure are asked many times on the wicket-user list and that’s what <strong>makes the book so great</strong>.  I mean, how many times have I seen the question “How do I prevent my form from submitting more than once?”.  There’s a chapter for that.  Or: “How do I authenticate users of my site?”. There’s a chapter for that too!</p>
<h2>Conclusion...</h2>
<p><strong>Great book, <a href="http://www.packtpub.com/apache-wicket-cookbook/book">go buy a copy</a>!</strong> </p>
<p> Given Igor’s legacy, I’m sure writing this book was 100% less work than if I would have done it (not to mention 100% better!).  The recipes were already written by him countless times in the community on both the user-list and the Wicket codebase itself.  He merely had to collect his thoughts and consolidate it all in one place.  Great job Igor!</p>
<p>I look forward to future cookbooks by Igor, this old dog definitely learned some new tricks along the way.
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/07/apache-wicket-cookbook-review/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Episode 39 &#8211; Google+, Github for Mac (and Zed)</title>
		<link>http://basementcoders.com/2011/07/episode-39-google-github-for-mac-and-zed/</link>
		<comments>http://basementcoders.com/2011/07/episode-39-google-github-for-mac-and-zed/#comments</comments>
		<pubDate>Fri, 01 Jul 2011 14:41:50 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1476</guid>
		<description><![CDATA[Google+ Well Google+ is upon us, and at the time of our taping we were just getting our invites. We've had a chance to test drive it a bit since then and it does look like a serious contender for Facebook and possibly Twitter! The amount of control you get over "who sees what" is [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<div id="attachment_1477" class="wp-caption alignright" style="width: 535px"><a href="http://www.google.com/+/learnmore/"><img src="http://basementcoders.com/wp-content/uploads/2011/07/google2+.jpg" alt="" title="Google+" width="525" height="296" class="size-full wp-image-1477" /></a><p class="wp-caption-text">They did an awesome job on UX</p></div></p>
<h2>Google+</h2>
<p>Well <a href="http://www.google.com/+/learnmore/">Google+</a> is upon us, and at the time of our taping we were just getting our invites.  We've had a chance to test drive it a bit since then and it does look like a serious contender for Facebook and possibly Twitter!</p>
<p>The amount of control you get over "who sees what" is pretty awesome, and they accomplish this through the concept of "circles".  So you have a "circle of friends" or "circle of acquaintances" or maybe even a "circle of jerks"?  <img src='http://basementcoders.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>The neat thing about Google+ is I can treat part of my social graph like Twitter.  That is, people I add to my circles don't necessarily add me to theirs.  This is akin to me following <a href="http://twitter.com/BillGates">@BillGates</a> on Twitter but he doesn't necessarily follow me.  I think the trick for Google+ will be to figure out how to get people to be "open" with their status updates and sharing given all the granularity they provide for controlling such things.  The other trick of course is, besides the geeks, how are they going to get Joe Public to wander over from Facebook given there is no way to export your social graph to Google+?<br />
<a href="http://mac.github.com"><img alt="" src="http://www4.images.coolspotters.com/photos/200808/github-profile.png" title="Git Hub" class="alignleft" width="300" height="450" /></a><br />
The one thing that bugs me a bit (<a href="http://twitter.com/craiger">Craig</a>) is the fact that Google also <a href="http://google.com/chrome">makes a browser</a> and a <a href="http://www.android.com">mobile platform</a>.  Will Google+ be "best viewed on Chrome and Android"?  So far it is. </p>
<h2>Git Hub</h2>
<p>As many of you know, kids today don't only have to worry about bullying on the playground.  Bullying is now a global activity.  Through online gaming and social networks Cyberbullying has become an epidemic, in fact one of my immediate family members is bullied right now online to the point where the Police are involved.  And its not just the meek who are bullied, even kick-ass-guitar-playing-martial-arts-knowing coders like <a href="http://sheddingbikes.com/posts/1306816425.html"><b>Zed Shaw</b> are victims</a>.  Sometimes we don't call that bullying but rather trolling or stalking, but it amounts to the same thing.  What was happening to Zed was facilitated by the fact that on Git Hub a user could add *anyone* they wanted to their project, the person being added had no choice in the matter.  This was akin to the famous <a href="http://consumerist.com/2010/10/facebook-welcomes-you-to-nambla.html">Facebook-NAMBLA</a> loophole.</p>
<p>Zed is known for being <a href="http://www.zedshaw.com.sharedcopy.com/rants/51489cec9386f7c13f69b3a58cd50b02.html">audacious and a bit outspoken</a>.  So for many it was probably tough to feel sorry for him, and it appeared those sentiments were shared by those running Git Hub.  So it wasn't until Zed <a href="http://sheddingbikes.com/posts/1306816425.html">crashed GitHub</a> and made it public that GitHub decided to <a href="http://sheddingbikes.com/posts/1306948009.html">do something about it</a>.</p>
<p>Other links discussed in this cast:</p>
<ul>
<li><a href="http://defunkt.io/dotjs/">dotjs</a> - load Javascript from ~/.js directory based on site in Chrome</li>
<li><a href="http://news.cnet.com/8301-13506_3-20075028-17/geohot-now-a-facebook-employee/">Geohot goes to Facebook</a></li>
</ul>

<p>Enjoy!</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/07/episode-39-google-github-for-mac-and-zed/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep39.mp3" length="44963246" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 38 &#8211; Prairie Dev Conf, TDD, BDD &amp; Kanban</title>
		<link>http://basementcoders.com/2011/06/episode-38-prairie-dev-conf-tdd-bdd-kanban/</link>
		<comments>http://basementcoders.com/2011/06/episode-38-prairie-dev-conf-tdd-bdd-kanban/#comments</comments>
		<pubDate>Thu, 23 Jun 2011 16:25:14 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1453</guid>
		<description><![CDATA[On today's episode Craig along with special guests Marc Jeanson and Sean Kowaski share their experience at the Prairie Developers Conference. Topics include: Test Driven Development Behaviour Driven Development Kanban and much more! Also, Alex Miller from the Strange Loop conference in St. Louis (Sept. 18th-20th 2011) has invited us out to his conference and [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<p><a href="http://prairiedevcon.com/"><img src="http://basementcoders.com/wp-content/uploads/2011/06/prdc2011.jpg" alt="" title="Prairie Developers Conference 2011" width="486" height="166" class="aligncenter size-full wp-image-1456" /><br />
</a><br />
On today's episode Craig along with special guests <a href="http://twitter.com/marcjeanson">Marc Jeanson</a> and Sean Kowaski share their experience at the <a href="http://www.prairiedevcon.com/">Prairie Developers Conference</a>.</p>
<p>Topics include:</p>
<ul>
<li>Test Driven Development</li>
<li>Behaviour Driven Development</li>
<li><a href="http://www.infoq.com/presentations/kanban-for-software">Kanban</a></li>
<li>and much more!</li>
</ul>
<div id="attachment_1454" class="wp-caption aligncenter" style="width: 310px"><a href="http://thestrangeloop.com"><img src="http://basementcoders.com/wp-content/uploads/2011/06/strangeloop2011-300x168.jpg" alt="" title="Strange Loop 2011" width="300" height="168" class="size-medium wp-image-1454" /></a><p class="wp-caption-text">September 18th-20th 2011</p></div>
<p>Also, <a href="http://twitter.com/puredanger">Alex Miller</a> from the <a href="http://thestrangeloop.com">Strange Loop conference</a> in St. Louis (Sept. 18th-20th 2011) has invited us out to his conference and gave us a few spare tickets to give away to listeners.  Tweet us <a href="http://twitter.com/bcoders">@bcoders</a> if you're interested in attending!  <a href="http://www.orthocoders.com">Amir Barylko</a> was the first to receive his free pass, you could too!</p>
<p>Links mentioned in the cast:</p>
<ul>
<li><a href="http://www.skullspace.ca/">Skull Space (Hacker Space)</a> </li>
<li><a href="http://agilewinnipeg.com/">Agile Winnipeg Group</a></li>
<li><a href="http://coderetreat.com/">Code Retreat</a></li>
</ul>
<p><br />
Enjoy!
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/06/episode-38-prairie-dev-conf-tdd-bdd-kanban/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep38.mp3" length="56067167" type="audio/mpeg" />
		</item>
		<item>
		<title>Remember our CrashPlan contest!</title>
		<link>http://basementcoders.com/2011/06/remember-our-crashplan-contest/</link>
		<comments>http://basementcoders.com/2011/06/remember-our-crashplan-contest/#comments</comments>
		<pubDate>Thu, 23 Jun 2011 13:48:05 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1443</guid>
		<description><![CDATA[Just a reminder... Each cast The Basement Coders will be giving away a free 1 year Crash Plan Central unlimited subscription to a lucky listener. All you have to do is follow these steps: Follow @bcoders on Twitter Follow @CrashPlan on Twitter Enter our Contest Winners will be chosen at random (no we don't need [...]]]></description>
			<content:encoded><![CDATA[<p>Just a reminder...<br />
<a href="http://crashplan.com/ref/basementcoders.html"><img src="/crashplan/bcoders-crashplan.png" alt="CrashPlan and Basement Coders" title="Crash Plan and Basement Coders" class="aligncenter size-full" /></a></p>
<p>
    Each cast The Basement Coders will be giving away a free 1 year <em><strong><a href="http://b4.crashplan.com/consumer/features-central.html" target="_blank">Crash Plan Central unlimited subscription</a></strong></em> to a lucky listener.  All you have to do is follow these steps:</p>
<ol style="text-indent:-1em;font-size:1.5em;">
<li>Follow <a href="http://twitter.com/bcoders">@bcoders</a> on Twitter</li>
<li>Follow <a href="http://twitter.com/CrashPlan">@CrashPlan</a> on Twitter</li>
<li><a href="http://twitter.com/home?status=I%20just%20entered%20to%20win%20a%201yr%20unlimited%20@CrashPlan%20Central%20subscription%20by%20listening%20to%20the%20@bcoders%20podcast! http%3A%2F%2Fis.gd/em2bj" target="_blank">Enter our Contest</a></li>
</ol>
<p>Winners will be chosen at random (<em>no we don't need help with the pseudo random number generator to use!</em>) and will be sent a DM via Twitter with further instructions.</p>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/06/remember-our-crashplan-contest/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Episode 37 &#8211; So you Broke the Build</title>
		<link>http://basementcoders.com/2011/06/episode-37-so-you-broke-the-build/</link>
		<comments>http://basementcoders.com/2011/06/episode-37-so-you-broke-the-build/#comments</comments>
		<pubDate>Wed, 08 Jun 2011 22:09:04 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1434</guid>
		<description><![CDATA[Everyone has probably done it, you've broken the build. Now you might feel the need to apologize. Should you? Or is it an excusable act, assuming you only do it once in a blue moon? We'll share some of our own techniques on how to minimize your build breaking ways. In fact, if you follow [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
Everyone has probably done it, you've broken the build.  Now you might <a href="http://programmers.stackexchange.com/questions/79041/how-to-apologize-when-you-have-broken-the-nightly-build">feel the need to apologize</a>.  Should you?  Or is it an excusable act, assuming you only do it once in a blue moon?</p>
<p>We'll share some of our own techniques on how to minimize your build breaking ways.  In fact, if you follow the steps below, the chances of you buying doughnuts for the team will be greatly minimized:</p>
<ol>
<li>Do an update from your VCS, fix any conflicts which might have resulted</li>
<li>Do a full compile of the code base</li>
<li>Run unit tests, ensure no failures</li>
<li>Check again for changes in VCS, repeat from step 1</li>
<li>Now check-in your changes with a USEFUL commit message (<a href="http://twitter.com/#!/unhappycoder/status/8909490370">unlike these ones</a>)</li>
</ol>
<p>On that note, I really liked this video from <a href="http://www.facebook.com/video/video.php?v=778890205865&#038;oid=9445547199">Facebook Engineering on how they deploy builds</a>.  Especially liked the concept of "Commit Karma".  Anytime you break functionality or the build, you lose karma.  A build engineer integrating your code uses your karma as a sign post for how closely he has to monitor your commits.</p>
<p>Other topics:</p>
<ul>
<li><a href="http://www.appleinsider.com/articles/11/05/25/latest_mac_defender_malware_attacks_mac_os_x_without_password.html">Malware on the Mac!</a></li>
<li>Oracle donates Open Office to the Apache Foundation, and <a href="http://ianskerrett.wordpress.com/2011/06/02/two-open-source-ideologies-that-are-just-wrong/">what that means as far as licensing</a></li>
</ul>

<p>Enjoy!
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/06/episode-37-so-you-broke-the-build/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep37.mp3" length="53856163" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep37.mp3" length="53856163" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep37.mp3" length="53856163" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep37.mp3" length="53856163" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 36 &#8211; Software Engineer vs Gardener and are .NET programmers really Inferior?</title>
		<link>http://basementcoders.com/2011/05/episode-36-software-engineer-vs-gardener-and-are-net-programmers-really-inferior/</link>
		<comments>http://basementcoders.com/2011/05/episode-36-software-engineer-vs-gardener-and-are-net-programmers-really-inferior/#comments</comments>
		<pubDate>Thu, 19 May 2011 13:19:14 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1427</guid>
		<description><![CDATA[In today's episode, Jason, Justin, Guillermo and Craig discuss: We announce our 500th Twitter follower! The TIOBE index came out with a new edition, Java, C++ top the charts Expensify CEO remarks on developers who list .NET on their resume will not be hired, or will be scrutinized heavily for that reason Craig hates the [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<p>In today's episode, Jason, Justin, Guillermo and Craig discuss:</p>
<ol>
<li>We announce our 500th Twitter follower!</li>
<li>The TIOBE index came out with a <a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html">new edition</a>, Java, C++ top the charts</li>
<li>Expensify CEO remarks on <a href="http://blog.expensify.com/2011/03/25/ceo-friday-why-we-dont-hire-net-programmers/">developers who list .NET on their resume will not be hired</a>, or will be scrutinized heavily for that reason</li>
<li>Craig hates the title "Software Engineer", well <a href="http://chrisaitchison.com/2011/05/03/you-are-not-a-software-engineer">apparently Chris Aitchison does too</a>, but for different reasons.  Are we Engineers or Gardeners?</li>
<li>The Hudson CI build server <a href="http://java.dzone.com/news/breaking-oracle-plans-transfer">transfers to the Eclipse Foundation</a></li>
<li>Our thoughts on the <a href="http://blog.us.playstation.com/2011/04/27/qa-1-for-playstation-network-and-qriocity-services/">Sony PSN breach</a></li>

<p>Enjoy!
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/05/episode-36-software-engineer-vs-gardener-and-are-net-programmers-really-inferior/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep36.mp3" length="60847366" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 35 &#8211; We&#8217;re Back, Ceylon, Rails + CoffeeScript and TSSJS 2011 recap</title>
		<link>http://basementcoders.com/2011/04/episode-35-were-back-ceylon-rails-coffeescript-and-tssjs-2011-recap/</link>
		<comments>http://basementcoders.com/2011/04/episode-35-were-back-ceylon-rails-coffeescript-and-tssjs-2011-recap/#comments</comments>
		<pubDate>Tue, 26 Apr 2011 14:38:10 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1417</guid>
		<description><![CDATA[Wow, it's been a while! We're back though and apologize for the long delay between casts. I had to edit this cast really quick, so if I missed anything (like links for the show notes) let me know. Today we're talking about our experience at TSSJS 2011, and what Red Hat and Gavin King are [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<div id="attachment_1418" class="wp-caption alignright" style="width: 310px"><img src="http://basementcoders.com/wp-content/uploads/2011/04/Were-back-300x300.jpg" alt="" title="We&#039;re back" width="300" height="300" class="size-medium wp-image-1418" /><p class="wp-caption-text">We're Back!</p></div><br />
Wow, it's been a while!  We're back though and apologize for the long delay between casts.  I had to edit this cast really quick, so if I missed anything (like links for the show notes) let me know.</p>
<p>Today we're talking about our experience at <a href="http://javasymposium.techtarget.com/">TSSJS</a> 2011, and what Red Hat and <a href="http://relation.to/user/gavin">Gavin King</a> are up to as they introduce the spec for a new JVM language called Ceylon.  Ceylon; besides being a country (or former one) <a href="http://en.wikipedia.org/wiki/Tea_production_in_Sri_Lanka">famous for Tea</a> as <a href="http://en.wikipedia.org/wiki/Java">Java</a> is for Coffee; is a language which was designed to incorporate the Functional aspects of languages like Scala and Closure with the approachability of Java.</p>
<p>Some of us are <a href="http://twitter.com/#!/djspiewak/status/58029072495812608">highly skeptical</a> that Ceylon will live up to what others claim: that it's the "<a href="http://www.theregister.co.uk/2011/04/13/red_hat_unveils_project_ceylon/">Java killer</a>"</p>
<p>Also we discuss briefly the <a href="https://github.com/rails/rails/commit/9f09aeb8273177fc2d09ebdafcc76ee8eb56fe33">4Chan-esque commit</a> which is: Rails using <a href="http://jashkenas.github.com/coffee-script/">CoffeeScript</a> as its default.</p>

<p>Enjoy!
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/04/episode-35-were-back-ceylon-rails-coffeescript-and-tssjs-2011-recap/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep35.mp3" length="47555010" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep35.mp3" length="47555010" type="audio/mpeg" />
		</item>
		<item>
		<title>We&#8217;re still alive!</title>
		<link>http://basementcoders.com/2011/04/were-still-alive/</link>
		<comments>http://basementcoders.com/2011/04/were-still-alive/#comments</comments>
		<pubDate>Tue, 12 Apr 2011 15:38:55 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1410</guid>
		<description><![CDATA[Just a quick update to let you know we are still alive and will be recording once again very soon.]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<img src="http://basementcoders.com/wp-content/uploads/2011/04/technical-difficulties-simpsons-300x230.jpg" alt="" title="" width="300" height="230" class="alignright size-medium wp-image-1414" /><br />
Just a quick update to let you know we are still alive and will be recording once again very soon.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/04/were-still-alive/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep34.5.mp3" length="4860062" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 34 &#8211; Interview with DuckDuckGo&#8217;s Gabriel Weinberg</title>
		<link>http://basementcoders.com/2011/03/episode-34-interview-with-duckduckgos-gabriel-weinberg/</link>
		<comments>http://basementcoders.com/2011/03/episode-34-interview-with-duckduckgos-gabriel-weinberg/#comments</comments>
		<pubDate>Sat, 05 Mar 2011 16:10:49 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1393</guid>
		<description><![CDATA[Gabriel Weinberg is someone I've wanted to interview ever since I first heard of the DuckDuckGo search engine. I've always been intrigued by search technology and was pretty impressed by the fact that just one guy could create and maintain a search engine on his own. Couple his achievement with the fact that Gabriel is [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<div class="alignright">
<a href="http://ye.gg/"><img src="http://basementcoders.com/wp-content/uploads/2011/03/yegg_faceshot_polaroid-263x300.jpg" alt="" title="Gabriel Weinberg" width="263" height="300" class="size-medium wp-image-1394" /></a><br />
<a href="http://duckduckgo.com/"><img src="http://basementcoders.com/wp-content/uploads/2011/03/DuckDuckGo-billboard-300x172.jpg" alt="" title="DuckDuckGo" width="300" height="172" class="size-medium wp-image-1396" /></a>
</div>

<p>Gabriel Weinberg is someone I've wanted to interview ever since I first heard of the <a href="http://duckduckgo.com">DuckDuckGo</a> search engine.  I've always been intrigued by search technology and was pretty impressed by the fact that just one guy could create and maintain a search engine on his own.  Couple his achievement with the fact that Gabriel is a very genuine and approachable fellow, anytime I emailed him; whether it be for a DuckDuckgo suggestion or related to the podcast; he always responded in a prompt and courteous manner.  Surprising considering he's not a <strong>serial</strong> entrepreneur he's more of a <strong>parallel</strong> one.  Being really busy with DuckDuckGo as well as <a href="http://www.gabrielweinberg.com/angel.html">investing in new start-ups</a> I appreciate him making time for the little guys in independent internet media.</p>
<p>So why does DuckDuckGo matter?  DuckDuckGo filters out a lot of what you might call "search spam" like link baiting landing pages and tends to prefer search results which have been filtered by human eyes.  That's why you'll see Wikipedia and other human powered search sites get better ranking in DuckDuckGo.  </p>
<p>Another great feature is Privacy. If you want to <a href="http://donttrack.us/">search without being tracked and marketed</a> to then you'll like DuckDuckGo.  Or what if you only want to search YouTube for a certain video?  Using the <a href="https://duckduckgo.com/bang.html">"bang" syntax</a> in your searches act to filter your search terms by category.  As a Java programmer are you really annoyed whenever a JDK 1.4 API doc gets top ranking when you're trying to get the JavaDoc for HashMap?  Bang syntax to the rescue:</p>
<blockquote><p><code>!java5 HashMap</code></p></blockquote>
<p>If you are interested to learn more about DuckDuckgo, <a href="http://twitter.com/Jason">Jason Calacanis</a> had <a href="http://thisweekin.com/thisweekin-startups/this-week-in-startups-72-with-gabriel-weinberg/">interviewed Gabriel</a> back in August, it's worth the listen as well.  A lot of people don't like Calacanis, they find him too abrasive, aggressive and egomaniacal, that doesn't make his advice not worth listening too.  He has a real knack for getting your entrepreneurial motor in gear.  Whenever I feel down about my pet project, I just listen to Jason and the people he interviews and it makes me realize that I can "do it" too, it just takes some faith in yourself and a lot of sweat and tears to get there.  So if you had to compare our interview with Gabriel to Jason's it would come down to the fact we actually ask Gabriel technical questions around how things are glued together at DuckDuckGo.  </p>
<p>The easiest way to try DuckDuckGo is to make it your browser's default search provider.  You can do that by going to the <a href="http://duckduckgo.com/">DuckDuckGo homepage</a> and clicking on the link under the search box labeled "Add to &lt;your browser name here&gt;".  Try it out for a week, you'll most likely keep it.</p>
<p>Have a listen to find out!</p>

</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/03/episode-34-interview-with-duckduckgos-gabriel-weinberg/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep34.mp3" length="47007902" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep34.mp3" length="47007902" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep34.mp3" length="47007902" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep34.mp3" length="47007902" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep34.mp3" length="47007902" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep34.mp3" length="47007902" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep34.mp3" length="47007902" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep34.mp3" length="47007902" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep34.mp3" length="47007902" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep34.mp3" length="47007902" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 33 &#8211; Java is a Dead End from Stockholm&#8217;s Jfokus Conference</title>
		<link>http://basementcoders.com/2011/02/episode-33-java-is-a-dead-end-from-stockholms-jfokus-conference/</link>
		<comments>http://basementcoders.com/2011/02/episode-33-java-is-a-dead-end-from-stockholms-jfokus-conference/#comments</comments>
		<pubDate>Wed, 16 Feb 2011 17:54:26 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1364</guid>
		<description><![CDATA[Mike Gualtieri, an Analyst, wrote an article for Forrester (i.e. the people your boss listens to instead of you) about how Java has outlived it's usefulness as a business language. Troll much? It's no surprise it caught fire becoming Forrester's widest read and commented article. Mike recently did a followup presentation justifying his claims. Before [...]]]></description>
			<content:encoded><![CDATA[<div class="entryContent">
<a href="http://www.jfokus.com/"><img src="http://basementcoders.com/wp-content/uploads/2011/02/Jfokus2011_450x200.jpg" alt="" title="Jfokus 2011" width="450" height="200" class="aligncenter size-full wp-image-1387" /></a><a href="http://basementcoders.com/wp-content/uploads/2011/02/photo-polaroid.jpg"><img src="http://basementcoders.com/wp-content/uploads/2011/02/photo-polaroid-257x300.jpg" alt="" title="photo-polaroid" width="257" height="300" class="alignright size-medium wp-image-1377" /></a><br />
Mike Gualtieri, an Analyst, <a href="http://blogs.forrester.com/mike_gualtieri/10-11-23-java_is_a_dead_end_for_enterprise_app_development">wrote an article</a> for Forrester (i.e. <em>the people your boss listens to instead of you</em>) about how Java has outlived it's usefulness as a business language.  Troll much? <img src='http://basementcoders.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   It's no surprise it caught fire becoming Forrester's widest read and commented article.  Mike recently did a <a href="http://www.forrester.com/Marketing/Campaign/BinaryContent/0,5983,2249,00.pdf">followup presentation</a> justifying his claims.</p>
<p>Before you go ditching all your investments in Java, have a listen to the cast.  We gathered a panel of on-the-ground industry experts from the <a href="http://www.jfokus.com/">Jfokus 2011 conference</a> in Stockholm Sweden (i.e. <em>guys who work for a living</em>) which include:</p>
<ul>
<li><a href="http://www.nealford.com/">Neal Ford</a> - <a href="http://clojure.org/">Closure</a> Proponent</li>
<li><a href="http://blog.nicksieger.com/">Nick Sieger</a> - <a href="http://jruby.org/">JRuby</a> Core Team</li>
<li><a href="http://www.java.net/blogs/brunos/">Bruno Souza</a> - The "<a href="http://java.mn">Java Man</a>"</li>
<li><a href="http://kirk.blog-city.com/">Kirk Pepperdine</a> -<a href="http://www.javaperformancetuning.com/newsletter.shtml"> Java Performance Tuning</a> Expert</li>
</ul>

<p>Enjoy!</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/02/episode-33-java-is-a-dead-end-from-stockholms-jfokus-conference/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep33.mp3" length="54046335" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 32 &#8211; Benefit of Dynamic Typing, PS3 Jailbreak, Verizon iPhone</title>
		<link>http://basementcoders.com/2011/02/episode-32-benefit-of-dynamic-typing-ps3-jailbreak-verizon-iphone/</link>
		<comments>http://basementcoders.com/2011/02/episode-32-benefit-of-dynamic-typing-ps3-jailbreak-verizon-iphone/#comments</comments>
		<pubDate>Fri, 11 Feb 2011 17:17:05 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1352</guid>
		<description><![CDATA[I caught a thread on the Scala-User mailing list recently where a person asked what the "Benefit of dynamic typing" was. Might be a bit of a one sided debate on a Scala list considering Scala is statically typed and you'd think its users would prefer the same. Turns out the Scala community comes from [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<a href="http://www.bbc.co.uk/news/technology-12116051"><img src="http://basementcoders.com/wp-content/uploads/2011/02/playstation-31-300x206.jpg" alt="" title="" width="300" height="206" class="alignright size-medium wp-image-1361" /></a><br />
I caught a thread on the Scala-User mailing list recently where a person asked what the "<a href="http://comments.gmane.org/gmane.comp.lang.scala.user/35638">Benefit of dynamic typing</a>" was.  Might be a bit of a one sided debate on a Scala list considering Scala is statically typed and you'd think its users would prefer the same.  Turns out the Scala community comes from a fairly broad background, and there were some pretty good arguments put forth in favour of Dynamic Typing.  <a href="http://cdsmith.wordpress.com/2011/01/09/an-old-article-i-wrote/">What to know before debating type systems</a> was a great link which popped up in the thread, highly recommend reading it.</p>
<p>In this episode we are simply kicking the tires around the topic of Dynamic vs. Static typing, in a future cast we'll try and give a go at debating the subject with people on both sides of the fence.</p>
<p>In other news <a href="http://en.wikipedia.org/wiki/George_Hotz">George Hotz</a>, who you may know if you've ever run <a href="http://www.blackra1n.com/">blackra1n</a> on your iPhone, <a href="http://www.myce.com/news/sony-wins-seizure-of-hotzs-computers-in-ps3-hack-case-39340/">felt the full force of Sony</a> when he announced he discovered the key which allows you to sign your own software and run it on a Sony PS3.  Because, you know, the PS3 your shelled out hundreds of dollars for obviously doesn't really belong to you, so you can't do with it as you please :S</p>
<p>And finally we talk about the Verizon iPhone and the possibility of a dual-mode (GSM/CDMA) iPhone 5 based on <a href="http://www.tuaw.com/2011/02/08/ifixit-verizon-iphone-using-dual-band-chip/">some discoveries</a> made by <a href="http://www.ifixit.com/Teardown/iPhone-4-Verizon-Teardown/4693/1">iFixit</a>.</p>

<p>Enjoy!
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/02/episode-32-benefit-of-dynamic-typing-ps3-jailbreak-verizon-iphone/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep32.mp3" length="50458167" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 31 &#8211; Jenkins, Amazon Elastic Beanstalk and UBB</title>
		<link>http://basementcoders.com/2011/02/episode-31-jenkins-amazon-elastic-beanstalk-and-ubb/</link>
		<comments>http://basementcoders.com/2011/02/episode-31-jenkins-amazon-elastic-beanstalk-and-ubb/#comments</comments>
		<pubDate>Fri, 04 Feb 2011 16:34:21 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1330</guid>
		<description><![CDATA[If you remember back in Episode 27 we discussed the then unfolding news that Oracle had trademarked the name "Hudson". Well, now the Hudson folks have up and left, renaming a fork of the Continuous Integration Software to "Jenkins". Jason already alluded to the fact that there is already a famous Jenkins meme back in [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<a href="http://stopthemeter.ca"><img src="http://basementcoders.com/wp-content/uploads/2011/02/stopthemeter-192x300.jpg" alt="" title="Stop Usage Based Billing" width="192" height="300" class="alignright size-medium wp-image-1334" /></a><br />
If you remember back in<a href="http://basementcoders.com/2010/12/episode-27-hudson-oracle-raible-and-astycrapper/"> Episode 27</a> we discussed the then unfolding news that Oracle had trademarked the name "Hudson".  Well, now the Hudson folks have up and left, renaming a fork of the Continuous Integration Software to "Jenkins".  Jason already alluded to the fact that there is already a famous <a href="http://en.wikipedia.org/wiki/Leeroy_Jenkins">Jenkins meme</a> back in Episode 30 <img src='http://basementcoders.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   If Jenkins fails, well, at least we have chicken.</p>
<p>Also on our radar is Amazon's new offering called "<a href="http://aws.amazon.com/elasticbeanstalk/">Elastic Beanstalk</a>".  In a nutshell it solves the problem of "I have a WAR file, it contains "the next Twitter" app, but I have no place to deploy or scale it if it becomes popular".</p>
<p>And finally up in <a href="http://en.wikipedia.org/wiki/Anti-Canadianism">Canuckistan</a> we're dealing with the problem of ISPs wanting to impose Usage Based Billing on bandwidth.  <a href="http://stopethemeter.ca">stopthemeter.ca</a> has been setup to petition the government to disallow legislation which will allow ISPs this money grab.  It's been <a href="http://www.theglobeandmail.com/news/politics/crtc-backtracks-on-controversial-internet-billing-decision/article1893496/">very successful</a>.  Now <a href="http://openmedia.ca/">OpenMedia</a>, the folks who are running the campaign against UBB are <a href="http://openmedia.ca/drive">asking for donations</a> to spread awareness.</p>
<p>Disruptive technologies such as <a href="http://skype.com">Skype</a>, <a href="http://netflix.com">Netflix</a>, <a href="http://boxee.tv">Boxee</a> and <a href="http://torrentfreak.com/">Bittorent</a> have set the Cable TV and Telecom systems scrambling.  People are leaving their Cable box and telephones to the Internet when they can pay one fee to have it all.  That doesn't sit right with the Big guys and they need to setup a system such that once everything goes Internet, they'll be making as much if not more than when you had to buy each service separately.</p>
<p>Although you may think "I'm not from Canada, why do I care?"  Well, once the Cable/Telecom providers in your country see the nice juicy profits being made up in Canada, how long before they bite?</p>
<p>Oh and By The Way (tm) we left a little Easter Egg in the cast... can you find it? <img src='http://basementcoders.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>

<p>Enjoy!</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/02/episode-31-jenkins-amazon-elastic-beanstalk-and-ubb/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep31.mp3" length="47420960" type="audio/mpeg" />
		</item>
		<item>
		<title>Epidsode 30 &#8211; Productivity Systems</title>
		<link>http://basementcoders.com/2011/01/epidsode-30-productivity-systems/</link>
		<comments>http://basementcoders.com/2011/01/epidsode-30-productivity-systems/#comments</comments>
		<pubDate>Tue, 25 Jan 2011 20:23:17 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1319</guid>
		<description><![CDATA[Let's face it, in this business there are two types of people: Those that deliver and those who don't. What you may not know is that the differentiating factor could be as simple as whether or not a person has a trusted system in place which allows them an easier time at Getting Things Done. [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
</p>
<p>Let's face it, in this business there are two types of people:  Those that deliver and those who don't.  What you may  not know is that the differentiating factor could be as simple as whether or not a person has a trusted system in place which allows them an easier time at <a href="http://en.wikipedia.org/wiki/Getting_Things_Done">Getting Things Done</a>.<img src="http://basementcoders.com/wp-content/uploads/2011/01/dilbert_productivity.jpg" alt="" title="" width="232" height="141" class="alignright size-full wp-image-1320" style="margin-top:10px"/><br />
<br/><br />
When someone is productive they tend to be goal oriented;  they know what they want to achieve and more importantly <strong>how they can go about doing so</strong>.  A lot of people think that these achiever-types are just "naturally gifted", however the only "natural" inclination common amongst them is that completing tasks drives them to achieving goals.  Fear not! <strong>This can be learned!</strong>  Try it yourself.  Write a simple task list out for Saturday chores (Shovel the walk, get the groceries, fill the tires in the car, etc...).  You'll find that you start feeling good by not only completing those chores, but also from the sense of accomplishment which comes in crossing them off the list.  That sense of accomplishment you get drives you to do more and the side effect of all this is larger goals get eaten away bit by bit until they are completed.</p>
<p>The biggest trick though is building the habit to write down tasks and even more importantly: refer to your task list on a timely basis.  Its one thing to write something down, its another thing to ensure you go back to that list.  If you can accomplish these two basic tasks, you are on your way to becoming a less stressed and anxious person who is looked upon as being a reliable person who has their sh!t together.</p>
<p>Is one of your problems that you get distracted and can't focus long enough to complete even the simplest tasks?  Try the <a href="http://www.pomodorotechnique.com/">Pomodoro technique</a>.  Essentially Pomodoro has you assign a block of time to a task.  Any distraction or interruption eats away at your Pomodoro time.  At the end of the time block, if you haven't finished the task at hand, you take a small break and either setup another time block and try to finish the task, or move on to something else.  It makes you less prone to "checking twitter" until it's your break time.</p>
<p>Are you a visual person by nature?  Perhaps the <a href="http://www.personalkanban.com/pk/primers/what-is-a-kanban/">Kanban</a> system could help you or your team as a whole.  It has you separate your tasks into "lanes" which indicate the state of a task.  States might include: <em>In Progress</em>, <em>Needs Attention</em>, or the most important state: <strong><em>Done</em></strong>.</p>
<p>What you'll find with a lot of these systems is the overarching theme of "<strong>Divide and Conquer</strong>" or "<a href="http://en.wikipedia.org/wiki/Defeat_in_detail">Defeat in Detail</a>" in military terms.  I for one am not good with large tasks until I can divide them up into bite size chunks.  It's also a nice mind trick when you start feeling really good about completing those small chunks which comprise a large goal, even if you've only tackled 20% of the whole; it still makes you hungry to tackle more.</p>
<p>A lot of the productivity systems can be implemented using Pen and Paper, one we haven't mentioned is "<a href="http://www.markforster.net/autofocus-system/">Auto Focus</a>", however there are a bunch of computer programs which have sprung up to help you on your way to productivity:</p>
<ul>
<li><a href="http://www.omnigroup.com/products/omnifocus/">OmniFocus</a> and <a href=" http://culturedcode.com/things/">Things.app</a> for the Getting Things Done system</li>
<li><a href="http://pomodoro.ugolandini.com/">Pomodoro Timer</a></li>
<li><a href="http://evernote.com/">EverNote</a> for collecting random notes and snippets, then organizing them and turning them into tasks later</li>
<li><a href="http://getconcentrating.com/">Concentrate</a> an app which helps you block common distractions like Twitter, Facebook, etc...  Helps when implementing Pomodoro</li>
</ul>
<p>And finally, if you are like me and have all your great epiphanies whilst in the Shower and yet have no means write them down, there is a waterproof <a href="http://www.myaquanotes.com/">shower notepad</a> for jotting down those social networking site multi-billion dollar ideas <img src='http://basementcoders.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Thanks to <a href="http://twitter.com/marcjeanson">Marc Jeanson</a> who provided many of the links and his great insight on the cast.  Marc's company <a href="http://www.redlinesoftware.com/">Redline Software</a> is creating productivity software which should be released in the near future.  We'll let you know when it launches and get our listeners some sneak-peek beta demos.  Marc also authored a screen cast on how to implement the <a href="http://vimeo.com/2825561">zero inbox technique using OmniFocus</a>.</p>

</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/01/epidsode-30-productivity-systems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep30.mp3" length="46404379" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 29 &#8211; Contractor vs Employee</title>
		<link>http://basementcoders.com/2011/01/episode-29-contractor-vs-employee/</link>
		<comments>http://basementcoders.com/2011/01/episode-29-contractor-vs-employee/#comments</comments>
		<pubDate>Thu, 20 Jan 2011 17:10:13 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1303</guid>
		<description><![CDATA[Got the skills to pay the bills? Every employee has wondered what it'd be like to be a contractor at some point. Maybe even dreamed of being one. Now reverse the roles and you don't find many Contractors worth their weight dreaming of becoming employees. Contracting is not for everyone, however it is a great [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<h2>Got the skills to pay the bills?</h2>
<p>Every employee has wondered what it'd be like to be a contractor at some point.  Maybe even dreamed of being one.  Now reverse the roles and you don't find many Contractors worth their weight dreaming of becoming employees.<br />
<img src="http://basementcoders.com/wp-content/uploads/2011/01/bobs.jpg" alt="" title="Office Space: The Bobs" width="500" height="310" class="alignright size-full wp-image-1317" /><br />
Contracting is not for everyone, however it is a great way to broaden your skill set, see many different software systems and how they were built as well as experience both the good and the bad projects and take the good with you and leave the bad behind at contracts end.</p>
<p>A common excuse for Employees when asked "why don't you become a contractor" is that they "like the stability, and a paycheck every two weeks".  Paycheck every two weeks is nice, but you know what else employers use two weeks for?  NOTICE!  Stability in the workspace is a thing of the past. If your company wants to cut costs, here come "<a href="http://www.break.com/usercontent/2008/4/Office-Space-More-Bobs-Interviews-488662">The Bobs</a>" and there goes X% of your co-workers (or you).</p>
<p>We aren't trying to convince you to become a contractor. However, if you're good, you like to be constantly challenged and love changes of scenery, you might be a contractor at heart.</p>

<p>Enjoy!</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/01/episode-29-contractor-vs-employee/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep29.mp3" length="46687755" type="audio/mpeg" />
		</item>
		<item>
		<title>Qwest gets crapped on!</title>
		<link>http://basementcoders.com/2011/01/qwest-gets-crapped-on/</link>
		<comments>http://basementcoders.com/2011/01/qwest-gets-crapped-on/#comments</comments>
		<pubDate>Thu, 20 Jan 2011 04:28:08 +0000</pubDate>
		<dc:creator>jgenender</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1299</guid>
		<description><![CDATA[I canceled Qwest for my business due to the nickel and diming along with high rates. So I moved to VOIP. Not even a month off Qwest and they send a telemarketer to try to get me back. They need to talk to the person who makes the decision for phone service. They were already [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">I canceled Qwest for my business due to the nickel and diming along with high rates.  So I moved to VOIP.  Not even a month off Qwest and they send a telemarketer to try to get me back.  They need to talk to the person who makes the decision for phone service.  They were already in the black list.  So guess who makes the decision?</p>
<p>The old coot kept Tisha LeGour(sp?) for 3:23 minutes. Cha-ching! Qwest paid for that time!</p>

<p>But she calls back!  The old coot got an extra 30 seconds off of her.</p>

</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/01/qwest-gets-crapped-on/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://basementcoders.com/wp-content/uploads/2011/01/astycrapper_tm6.mp3" length="576504" type="audio/mpeg" />
<enclosure url="http://basementcoders.com/wp-content/uploads/2011/01/astycrapper_tm7.mp3" length="73368" type="audio/mpeg" />
		</item>
		<item>
		<title>Astycrapper craps on another one!</title>
		<link>http://basementcoders.com/2011/01/astycrapper-craps-on-another-one/</link>
		<comments>http://basementcoders.com/2011/01/astycrapper-craps-on-another-one/#comments</comments>
		<pubDate>Sun, 16 Jan 2011 20:02:16 +0000</pubDate>
		<dc:creator>jgenender</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1293</guid>
		<description><![CDATA[I checked my asterisk spool directory and a little gem popped up. A telemarketer from CPC (Crescent Credit Card Processing) wants my business real bad. He called from 314-627-5503. Looks like he was already in the black list so guess who answered the call! The old coot kept Brad for 1:35 minutes. Not too shabby!]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">I checked my asterisk spool directory and a little gem popped up.  A telemarketer from CPC (Crescent Credit Card Processing) wants my business real bad.  He called from <a href="http://800notes.com/Phone.aspx/1-314-627-5503">314-627-5503</a>.  Looks like he was already in the black list so guess who answered the call!</p>
<p>The old coot kept Brad for 1:35 minutes.  Not too shabby!</p>

</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/01/astycrapper-craps-on-another-one/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://basementcoders.com/wp-content/uploads/2011/01/astycrapper_tm5.mp3" length="250128" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 28 &#8211; Pass By Magic, Mac App Store &amp; Apache leaving the JCP</title>
		<link>http://basementcoders.com/2011/01/episode-28-pass-by-magic-mac-app-store-apache-leaving-the-jcp/</link>
		<comments>http://basementcoders.com/2011/01/episode-28-pass-by-magic-mac-app-store-apache-leaving-the-jcp/#comments</comments>
		<pubDate>Tue, 11 Jan 2011 17:41:07 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1277</guid>
		<description><![CDATA[Well first off a big Happy New Years from all of the Basement Coders! We were on hiatus during the month of December but are back full force with brand new episode. This episode focuses mostly on a concept in Java which, as we have found, is not well understood by some "experienced" Java Devs: [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
Well first off a big Happy New Years from all of the Basement Coders!  We were on hiatus during the month of December but are back full force with brand new episode.</p>
<p>This episode focuses mostly on a concept in Java which, as we have found, is not well understood by some "experienced" Java Devs: Is Java really Pass By Value.  Well of course it is!  The problem however is people don't know what that means when it comes to reference types.  Common rebuttals are "but a function can modify the state of my object!  That's pass by reference!"  Well, no its not <img src='http://basementcoders.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   That's mutability.</p>
<p><img src="http://basementcoders.com/wp-content/uploads/2011/01/girlfriendify.png" alt="" title="girlfriendify" width="542" height="113" class="aligncenter size-full wp-image-1282" /><br />
Why are we focusing on such a topic?  Well, over on the "Java Developer" group at LinkedIn, someone asked the seemingly innocent question "<a href="http://www.linkedin.com/groupItem?view=&#038;gid=70526&#038;type=member&#038;item=29282724&#038;commentID=-1&#038;goback=.gmp_70526#lastComment">Help guys!!! Java supports pass by value or reference?</a>" which has exploded into a 274 message thread of some of the best flaming you've ever seen!  For those who aren't on LinkedIn, or don't want to become a member of the Java Developers group, a new discussion has taken root <a href="http://www.theserverside.com/news/thread.tss?thread_id=61622">over at The Server Side</a>.</p>
<p>Other topics we cover are the new <a href="http://www.apple.com/mac/app-store/">Mac App Store</a> and what this means for the Mac consumer and developer as well as <a href="https://blogs.apache.org/foundation/entry/the_asf_resigns_from_the">Apache's announcement</a> that they are Leaving the JCP and what (if any) ramifications this will have for Oracle and Java.</p>
<p>Enjoy!<br />

</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2011/01/episode-28-pass-by-magic-mac-app-store-apache-leaving-the-jcp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep28.mp3" length="35074968" type="audio/mpeg" />
		</item>
		<item>
		<title>AstyCrapper strikes again!</title>
		<link>http://basementcoders.com/2010/12/astycrapper-strikes-again/</link>
		<comments>http://basementcoders.com/2010/12/astycrapper-strikes-again/#comments</comments>
		<pubDate>Fri, 10 Dec 2010 02:49:48 +0000</pubDate>
		<dc:creator>jgenender</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1267</guid>
		<description><![CDATA[Today I got a call from a telemarketer that wanted to sell me business consulting.  Of course, I just had to say "Oh yeah, hold on... let me transfer you to the person who handles that." Little did she know that I have delegated the Old Coot (Jordan) to take care of that business.  The [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
Today I got a call from a telemarketer that wanted to sell me business consulting.  Of course, I just had to say "Oh yeah, hold on... let me transfer you to the person who handles that." Little did she know that I have delegated the Old Coot (Jordan) to take care of that business.  The rest is history <img src='http://basementcoders.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>This one is probably the best one so far... the astycrapper kept her for nearly 4 minutes!</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/12/astycrapper-strikes-again/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
<enclosure url="http://basementcoders.com/media/astycrapper_jeff_another_telemarketer.mp3" length="956376" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 27 &#8211; Hudson, Oracle, Raible and AstyCrapper</title>
		<link>http://basementcoders.com/2010/12/episode-27-hudson-oracle-raible-and-astycrapper/</link>
		<comments>http://basementcoders.com/2010/12/episode-27-hudson-oracle-raible-and-astycrapper/#comments</comments>
		<pubDate>Mon, 06 Dec 2010 14:24:31 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1241</guid>
		<description><![CDATA[There is a bit of a kerfuffle going on between the Hudson Continuous Integration project and our friends at Oracle over a change in licensing and the trademarking of the name: HudsonCI. It has gotten to the point where there is talk of forking the project and continuing on without Oracle. Creator of Hudson, Kohsuke [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<a href="http://hudson-ci.org/"><img style="margin-right:-25px" src="http://basementcoders.com/wp-content/uploads/2010/12/hudson-250_268px.png" alt="" title="Hudson Continuous Integration" width="250" height="268" class="alignright size-full wp-image-1242" /></a>There is a bit of a kerfuffle going on between the <a href="http://hudson-ci.org/">Hudson Continuous Integration</a> project and our friends at Oracle over a change in licensing and the trademarking of the name: HudsonCI.  It has gotten to the point where there is <a href="http://www.theserverside.com/news/thread.tss?thread_id=61409">talk of forking the project</a> and continuing on without Oracle.  </p>
<p>Creator of Hudson, <a href="http://kohsuke.org/">Kohsuke Kawagochi</a> is a former Sun/Oracle employee turned entrepreneur who has <a title="InfraDNA" href="http://infradna.com/">built a business</a> offering support and services for Hudson.  Kohsuke is brilliant (and not only because he uses the same WordPress them as us, props to <a href="http://wordpress.org/extend/themes/inove">iNove</a>), his role at Sun/Oracle was in the JAXB department which takes a certain type of person to be able to function (re: smart).</p>
<p>It appears <a href="http://www.hudson-labs.org/content/weekend-update-andrew-bayer">talks between Oracle and the Hudson committers</a> are underway, which is good because the last thing Oracle needs at this point is more uncertainty in the community.</p>
<p>Also we ask ourselves what exactly can be made of this <a href="http://spreadsheets.google.com/pub?key=0AtkkDCT2WDMXdC1HOEtnUHpCejJMbUhGeGJWUmh5dVE&#038;hl=en&#038;output=html">web-framework matrix</a> which seems to have <a href="http://raibledesigns.com/rd/entry/my_comparing_jvm_web_frameworks">appeared from the ether</a> at <a href="http://www.devoxx.com/display/Devoxx2K10/Home">Devoxx 2010</a> from <a href="http://raibledesigns.com/">Matt Raible</a>  We voice our, how do you say... &lt;<em>strong</em>/&gt; opinions on the matter <img src='http://basementcoders.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>And lastly Jeff Genender introduces us to, and demonstrates, a special <a title="AstyCrapper" href="http://www.linuxsystems.com.au/astycrapper/index.html">piece of software </a>which could cost the telemarketing inudstry millions <img src='http://basementcoders.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>

<p>Enjoy!
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/12/episode-27-hudson-oracle-raible-and-astycrapper/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep27.mp3" length="34351792" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 26 &#8211; Modern Day Mainframes: Interview with Craig Mullins</title>
		<link>http://basementcoders.com/2010/12/episode-26-modern-day-mainframes-interview-with-craig-mullins/</link>
		<comments>http://basementcoders.com/2010/12/episode-26-modern-day-mainframes-interview-with-craig-mullins/#comments</comments>
		<pubDate>Wed, 01 Dec 2010 22:42:47 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[mainframe]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1210</guid>
		<description><![CDATA[Ever since we did Episode 7 -Why are Mainframes Still Around? we were left with the realization that really all the podcast involved was a bunch of non-mainframe programmers making speculations about why the dinosaurs didn't become extinct in our world? Granted, I did a bit due dillegence prior to Episode 7 via StackOverflow to [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<a href="http://www.craigsmullins.com/"><img src="http://basementcoders.com/wp-content/uploads/2010/12/Craig-Mullins-pointing-small.jpg" alt="" title="Craig Mullins" width="246" height="447" class="alignright size-full wp-image-1230" /></a><img class="alignleft size-full wp-image-1215" title="hal9000" src="http://basementcoders.com/wp-content/uploads/2010/12/hal9000.jpg" alt="" width="125" height="435" />Ever since we did <a href="http://basementcoders.com/2010/06/episode-7-why-are-mainframes-still-around-or-mainframes-vs-cloud/">Episode 7 -Why are Mainframes Still Around?</a> we were left with the realization that really all the podcast involved was a bunch of non-mainframe programmers making speculations about why the dinosaurs didn't become extinct in our world?</p>
<p>Granted, I did a bit due dillegence prior to Episode 7 via StackOverflow to get <a href="http://stackoverflow.com/questions/2951742/why-are-mainframes-still-around">others opinions on the matter</a> but still, my journalistic spidey senses tingled at the fact Episode 7 was a one-sided debate for the most part.</p>
<p>To remedy this, <a href="http://twitter.com/rburton">a friend</a> put us in touch with Mainframe <a href="http://www.craigsmullins.com/">Consultant</a> and <a href="http://www.craigsmullins.com/booklnks.htm">Author</a>: <a href="http://twitter.com/craigmullins">Craig Mullins</a>.  It was an eye opener of a podcast, Mainframes truly haven't lost their "super computer" moniker even in today's advances with cloud computing.</p>
<p>Around the time I was arranging this interview I thought to get in touch with a previous colleague named <a href="http://twitter.com/gsepke">Glen Sepke</a>.  We went to grab a beer and I told him my aforementioned feeling about Episode 7.  He agreed it was too one-sided.  So I offered to have him on the podcast so it wasn't just us against Craig Mullins <img src='http://basementcoders.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>So Why Do Mainframes Still Exist?  As "modern developers" we really need to ask these types of questions and get credible answers.   Otherwise, people tend to alienate that which they don't know.  It's why developers (and, yes, I was in this camp), snicker at the term "COBOL" and "Mainframe".  Its because we truly don't understand them, and thus a lot of FUD is created.  Mainframes are perhaps becoming even more relevant now that they can run Java and talk to the outside world via Web Services.</p>
<p>So give this episode a listen and open your mind to allowing Mainframes their rightful place in today's modern computing arena.</p>
<p><br />
Enjoy!</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/12/episode-26-modern-day-mainframes-interview-with-craig-mullins/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep26.mp3" length="40660677" type="audio/mpeg" />
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep26.mp3" length="40660677" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 25 &#8211; Interview with Shaun Walker of DotNetNuke</title>
		<link>http://basementcoders.com/2010/11/episode-25-interview-with-shaun-walker-of-dotnetnuke/</link>
		<comments>http://basementcoders.com/2010/11/episode-25-interview-with-shaun-walker-of-dotnetnuke/#comments</comments>
		<pubDate>Mon, 29 Nov 2010 16:51:31 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Craig]]></category>
		<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1202</guid>
		<description><![CDATA[While at Dev Connections 2010 I had the privilege to interview Shaun Walker the creator and founder of DotNetNuke (or DNN for short), a .NET based Content Management System (CMS). Content Management Systems typically allow non-technical people (i.e. Marketing personnel) to build websites like Lego with content being the pieces. They are very popular among [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://basementcoders.com/wp-content/uploads/2010/11/Shaun-Walker.png" alt="" title="Shaun Walker" width="503" height="208" class="aligncenter size-full wp-image-1203" /></p>

<p>While at <a href="http://devconnections.com">Dev Connections</a> 2010 I had the privilege to interview <strong>Shaun Walker</strong> the creator and founder of <a href="http://www.dotnetnuke.com/">DotNetNuke</a> (or DNN for short), a .NET based <a href="http://en.wikipedia.org/wiki/Content_management_system">Content Management System</a> (CMS).   Content Management Systems typically allow non-technical people (i.e. Marketing personnel) to build websites like Lego with content being the pieces.  They are very popular among corporations, and even this site uses <a href="http://wordpress.org/">WordPress</a> which can be considered a CMS for bloggers.</p>
<p>Other CMSs you might know are <a href="http://drupal.org/">Drupal</a>, <a href="http://www.day.com/">Adobe CQ</a> and <a href="http://www.alfresco.com/">Alfresco</a>.</p>
<p>I sat down with Shaun not knowing a heck of a lot about him or the history of DNN and was pleasantly informed that DNN started out life as an Open Source software systems that grew into an Open Core/Dual Licensed flagship product.  It's nice to see this model in play in the .NET world, I hadn't heard of too many .NET based projects which have gone this route.</p>
<p>Shaun was a great guest, even if you aren't into .NET or CMSs you should give the cast a listen, I doubt you'll be disappointed.</p>
<h3>Networking Event</h3>
<p style="padding-top:1em;">
One other thing I should mention is the hospitality DNN extended to me.  They were throwing a party and gave me and my friends from <a href="http://apptius.com/">Apptius Computer Solutions</a> free invites.  The party was a blast, and they gave away over 20 prizes of which one of my friend's won a copy of <a href="http://store.microsoft.com/microsoft/Visual-Studio-2010-Ultimate-with-MSDN/product/6DE912FF">Visual Studio 2010 Ultimate edition with MSDN</a> ( a paltry $11,899 value) and another friend won a DNN plugin pack.</p>
<p>Got to meet a lot of great people including all the DNN Corp folks.  I talked to a number of DNN customers and they all seemed pleased with the product and the people behind DNN.</p>
<p>Thanks again DNNCorp!
</p>

<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/11/episode-25-interview-with-shaun-walker-of-dotnetnuke/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep25.mp3" length="31290139" type="audio/mpeg" />
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep25.mp3" length="31290139" type="audio/mpeg" />
		</item>
		<item>
		<title>Scala Language Tour ( Tutorial )</title>
		<link>http://basementcoders.com/2010/11/scala-language-tour/</link>
		<comments>http://basementcoders.com/2010/11/scala-language-tour/#comments</comments>
		<pubDate>Sat, 27 Nov 2010 01:03:39 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Craig]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[scala]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1176</guid>
		<description><![CDATA[As a follow up to previous posts on Scala (Scala, a cursory glance and Scala and Akka an Interview with Jonas Boner) I've put together a Scala Language Tutorial. This was presented on November 25th 2010 at the Winnipeg Ruby User Group (Winnipeg.rb) and the agenda covered is listed below the video. If you have [...]]]></description>
			<content:encoded><![CDATA[<p><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script><br />
<script type="text/javascript" src="/scripts/scala-lang-flash.js"></script><br />
<script type="text/javascript">
<!--
loadVideo('17225633', 'video');
//--></script></p>
<div class="entrycontent">
<a href="http://scala-lang.org/"><img src="http://basementcoders.com/wp-content/uploads/2010/11/newsflash_logo-e1290819421137.png" alt="" title="Scala" width="332" height="92" class="aligncenter size-full wp-image-1181" /></a></p>
<p>As a follow up to previous posts on Scala (<a href="http://basementcoders.com/2009/04/scala-a-cursory-glance/">Scala, a cursory glance</a> and <a href="http://basementcoders.com/2010/09/episode-16-scala-and-akka-an-inteview-with-jonas-boner/">Scala and Akka an Interview with Jonas Boner</a>) I've put together a <a href="http://www.scala-lang.org/">Scala Language</a> Tutorial.</p>
<p>This was presented on November 25th 2010 at the Winnipeg Ruby User Group (<a href="http://winnipegrb.org/">Winnipeg.rb</a>) and the agenda covered is listed below the video.</p>
<p>If you have any questions, comments or corrections please leave a comment!<br />
<center></p>
<div id="video" style="width:551px;height=413px;"></div>
<p></center></p>
<div name="agenda" id="agenda">
<h2>Agenda - any inaccuracies in the screencast are noted below</h2>
<ul>
<li>Why Scala - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:02:10</a></li>
<li>History of Scala - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:07:01</a></li>
<li>Functional Programming - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:08:05</a>
<ul>
<li>First Class Functions - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:09:01</a>
<ul>
<li>apply - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:09:20</a></li>
<li>   named - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:10:11</a></li>
<li>   literal - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:12:18</a></li>
<li>   partially applied - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:14:28</a></li>
<li>   curried - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:15:56</a>
<ul>
<li>
<em>See <a href="http://basementcoders.com/2010/11/scala-language-tour/#comment-275">zorg's comment</a> below for clarification on the naming of "curried" functions</em>
</li>
</ul>
</li>
<li>   typed - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:17:15</a></li>
</ul>
</li>
<li>   Higher-order functions - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:18:32</a>
<ul>
<li>   foreach</li>
<li>   map</li>
<li>   filter</li>
<li>   fold</li>
<li>   reduce</li>
</ul>
</li>
<li>   Pattern Matching - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:20:54</a>
<li>   Matching on literals - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:21:01</a></li>
<li>   Matching on Class Instances - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:22:34</a></li>
<li>   Matching on Regular Expressions - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:23:18</a></li>
</ul>
</li>
<li>   Partial Functions and Case statements - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:24:31</a></li>
<li>   Other Language Features
<ul>
<li>   for comprehensions - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:29:03</a></li>
</ul>
</li>
<li>   closures - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:29:48</a></li>
<li>   yield - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:31:13</a></li>
<li>   Other Language Features</li>
<li>   var vs val - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:32:45</a></li>
</ul>
</li>
<li>   Object Oriented Programming - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:33:44</a>
<ul>
<li>   object vs class - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:39:15</a>
<ul>
<li>
<em><a href="http://twitter.com/oxbow_lakes">Chris Marshall</a> emailed to say I should have been more explicit about the fact that when a constructor parameter is marked as private the accessor method(s) are still generated by Scala, they just aren't visible to users of the class.</em>
</li>
</ul>
</li>
<li>   Option, Some, None - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:43:01</a>
<ul>
<li>
<em><a href="http://twitter.com/oxbow_lakes">Chris Marshall</a> emailed to say the coverage for this slide was pretty shoddy.  I agree, at the time I hadn't much experience with <code>Option</code> outside of the <a href="http://programming-scala.labs.oreilly.com/">O'Reilly book</a>.  There are many ways to deal with <code>Option</code>, specifically with the None type.  One of the best ways, when you have a list of <code>Option</code>s, is to use <code>flatMap(x=>x)</code>.  It will generate a list of the <code>Option</code>'s underlying values, and disregard <code>None</code> all together.  When dealing with a single <code>Option</code>, <code>getOrElse</code> works nicely as a guard against <code>None</code>.</em>
</li>
</ul>
</li>
<li>   generics (parameterized types) - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:44:57</a></li>
<li>   covariant(+), contravariant(-) and invariant notation - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:47:15</a>
<ul>
<li>
<em>See <a href="http://basementcoders.com/2010/11/scala-language-tour/#comment-324">Blair's comment</a> below about the correct use of co/contra/invariant.</em>
</li>
</ul>
</li>
<li>   duck typing - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:50:16</a></li>
<li>   traits - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:51:44</a></li>
<li>   mixins - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:52:11</a>
<ul>
<li>
<em><a href="http://twitter.com/oxbow_lakes">Chris Marshall</a> emailed to say I missed stating you must first cast the wolfMan to a Canine before being able to call <code>howl()</code>.  As pointed out, WereWolf is spelled wrong (spelled WhereWolf in the cast).  I need a spell checker for vim <img src='http://basementcoders.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </em>
</li>
</ul>
</li>
<li>   case classes - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:55:09</a></li>
<li>   Implicits - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">00:58:33</a></li>
<li>   Common Complaints about Scala - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">01:01:18</a></li>
<li>   Scala tools - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">01:02:47</a></li>
<li>   Scala Resources - <a href="javascript: void(0);" onclick="video.api_seekTo(toSeconds(this.innerHTML));">01:04:40</a>
<ul>
<li>   Scala Mailing List
<ul>
<li>   http://listes.epfl.ch/doc_en.cgi?liste=scala-user</li>
</ul>
</li>
<li>   O'Reily Scala Book (free)
<ul>
<li>   http://programming-scala.labs.oreilly.com/</li>
</ul>
</li>
<li>   #scala on Freenode IRC</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/11/scala-language-tour/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Episode 24 &#8211; Move over Java, Introducing The Fantom Language with Brian and Andy Frank</title>
		<link>http://basementcoders.com/2010/11/episode-24-move-over-java-introducing-the-fantom-language-with-brian-and-andy-frank/</link>
		<comments>http://basementcoders.com/2010/11/episode-24-move-over-java-introducing-the-fantom-language-with-brian-and-andy-frank/#comments</comments>
		<pubDate>Mon, 22 Nov 2010 16:59:23 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1153</guid>
		<description><![CDATA[Our very own Basement Coder Justin Lee arranged for an interview with the creators of the Fantom language: Andy and Brian Frank. It's no coincidence the Frank's share the same last name, they are indeed brothers who work at their own company called Sky Foundry. Aside from Justin, the rest of the Basement Coders hadn't [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<img src="http://basementcoders.com/wp-content/uploads/2010/11/andy_polaroid.jpg" alt="" title="Andy Frank" width="282" height="323" class="alignleft size-full wp-image-1154" /><a href="http://basementcoders.com/wp-content/uploads/2010/11/brian_polaroid.jpg"><img style="clear:both;margin-top:-35px;margin-bottom:15px" src="http://basementcoders.com/wp-content/uploads/2010/11/brian_polaroid.jpg" alt="" title="Brian Frank" width="282" height="323" class="alignright size-full wp-image-1155" /></a><br />
Our very own Basement Coder Justin Lee arranged for an interview with the creators of the <a href="http://fantom.org">Fantom language</a>: Andy and Brian Frank.  It's no coincidence the Frank's share the same last name, they are indeed brothers who work at their own company called <a href="http://skyfoundry.com/">Sky Foundry</a>.</p>
<p>Aside from Justin, the rest of the Basement Coders hadn't heard of Fantom.  Justin assured us it would be worth looking into, and after a cursory glance we all decided that yes, we want to interview these fellows!</p>
<p>When I started looking into Fantom I immediately was struck with the notion of "If Java were to have progressed in both language features and syntax, this is what it would look like".  That's because Fantom looks very Java-like and also runs on the JVM or .NET CLR, so you can leverage all your existing code!  Given this, Fantom's approachability factor is much higher than <a href="http://basementcoders.com/2010/09/episode-16-scala-and-akka-an-inteview-with-jonas-boner/">Scala</a> in that a Java/.NET programmer can look at it and immediately know what's happening.  Scala has a bit more of an "alien" syntax for Java/.NET developers, and it's tough to just "jump into" Scala code without first researching the language and its features.</p>
<p>So take Java, add syntax for <a href="http://en.wikipedia.org/wiki/Closure_(computer_science)">Closures</a>, <a href="http://en.wikipedia.org/wiki/Mixin">Mixins</a>, <a href="http://en.wikipedia.org/wiki/Dynamic_binding_%28computer_science%29">Dynamic Method Binding</a> and you have Fantom. For these reasons alone you should do yourself a favour and<a href="http://fantom.org/doc/docIntro/Tour.html"> take a look at it</a>, if you like what you see, get the word out to your friends and collegues and help Brian and Andy grow the community and the language itself.</p>
<p><br />
Enjoy!<br />
<!--push the author plug down past the last image --></p>
<div style="margin-top:100px">&nbsp;</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/11/episode-24-move-over-java-introducing-the-fantom-language-with-brian-and-andy-frank/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep24.mp3" length="44909757" type="audio/mpeg" />
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep24.mp3" length="44909757" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 23 &#8211; Interview with Shay Banon of Elastic Search</title>
		<link>http://basementcoders.com/2010/11/episode-23-interview-with-shay-banon-of-elastic-search/</link>
		<comments>http://basementcoders.com/2010/11/episode-23-interview-with-shay-banon-of-elastic-search/#comments</comments>
		<pubDate>Thu, 11 Nov 2010 20:04:55 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1145</guid>
		<description><![CDATA[Going into our interview with Shay Banon we didn't know much about Elastic Search.  I know I for one hadn't realized it was a completely Open Source project, I think the .com in the web address threw me.  Coming out of the interview both Jason and I were really impressed by the project. Elastic Search [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<a href="http://www.kimchy.org/"><img src="http://basementcoders.com/wp-content/uploads/2010/11/shay-polaroid-261x300.jpg" alt="" title="Shay Banon" width="261" height="300" class="alignleft size-medium wp-image-1148" /></a>Going into our interview with <a href="http://www.kimchy.org/" target="_blank">Shay Banon</a> we didn't know much about <a href="http://www.elasticsearch.com/">Elastic Search</a>.  I know I for one hadn't realized it was a completely Open Source project, I think the .com in the web address threw me.  Coming out of the interview both Jason and I were really impressed by the project.</p>
<p>Elastic Search is a project that takes Lucene, distributes it and wraps it up in a very convenient RESTful API.  Essentially you "index" (i.e. insert) JSON documents into Elastic Search and you can retrieve those documents and both tasks can be done via REST.</p>
<p>The applications for such a project are really enticing.  For instance, wouldn't it be great if a web designer who's really comfortable with JQuery could write an entire web application without having to bother a Developer to write server-side code to persist and retrieve data?  Since they'd be persisting and retrieving JSON documents from Elastic Search directly from JQuery it's all Javascript to them.</p>
<p>Now, what about mobile applications?  A big trend in Mobile apps is to make the application running on the Phone (or other mobile device) act simply as a presentation tier.  All the heavy lifting and data representation is done via a web service running on a server which the mobile app communicates with.  Elastic Search can be spun up on a server and instantly you have a service your mobile app can communicate with to store and retrieve data in a simple to use fashion.</p>
<p><center><br />
<object width="400" height="225"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=9297470&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=9297470&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="225"></embed></object>
<p><a href="http://vimeo.com/9297470">ElasticSearch - Introduction</a> from <a href="http://vimeo.com/elasticsearch">Elastic Search</a> on <a href="http://vimeo.com">Vimeo</a>.<br />
</center></p>
<p>Elastic Search also supports multi-node instances, <a target="_blank" href="http://en.wikipedia.org/wiki/Shard_%28database_architecture%29">sharding</a> and other distributed and cloud methodologies which ensure your app can scale.</p>
<p>I for one know the next time I need to produce a prototype of a product, Elastic Search will be my first choice for storage and retrieval of data.  I also have the funny feeling it will be retained for the production version of the product as well.</p>

</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/11/episode-23-interview-with-shay-banon-of-elastic-search/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep23.mp3" length="38395236" type="audio/mpeg" />
		</item>
		<item>
		<title>JRebel Sponsors My Movember</title>
		<link>http://basementcoders.com/2010/11/jrebel-sponsors-my-movember/</link>
		<comments>http://basementcoders.com/2010/11/jrebel-sponsors-my-movember/#comments</comments>
		<pubDate>Tue, 09 Nov 2010 15:37:04 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Craig]]></category>
		<category><![CDATA[movember]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1127</guid>
		<description><![CDATA[As you may know, I'm growing a Mustache for the Movember campaign being put on by the Prostate Cancer Society. Well, the good people at Zero Turnaround have out done themselves by offering to give away a free license for JRebel ($60 value!) to the first 20 people who pledge $20 $10 or more Don't [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<p><a href="http://zeroturnaround.com" target="_blank"><img class="size-medium wp-image-1134 alignnone" style="margin-top: 13px; margin-bottom: 13px;" title="ZeroTurnaround" src="http://basementcoders.com/wp-content/uploads/2010/11/zeroturnaround-300x48.png" alt="" width="300" height="48" /></a><a href="http://movember.com"><img class="alignright size-medium wp-image-1135" title="Mustache" src="http://basementcoders.com/wp-content/uploads/2010/11/Movember2010_Icon-300x97.jpg" alt="" width="170" height="55" /></a></p>
<p>As you may know, I'm growing a Mustache for the <a href="http://movember.com">Movember</a> campaign being put on by the Prostate Cancer Society.  Well, the good people at<a href="http://zeroturnaround.com"> Zero Turnaround</a> have out done themselves by offering to give away a free license for <a href="http://zeroturnaround.com/jrebel">JRebel</a> ($60 value!) to the f<strong>irst 20 people who pledge <span style="text-decoration: line-through;">$20</span> $10 or more</strong></p>
<p>Don't know what JRebel is?  Have a listen to <a href="http://basementcoders.com/2010/10/episode-19-jrebel-jevgeni-kabanov-bares-all-for-the-basement-coders/">Episode 19</a> about it, trust me, you'll be rushing back to this page to donate within 10 mins of listening!</p>
<p>All you have to do is:</p>
<ul>
<li>Click this button:<br />
<a href="http://ca.movember.com/donate/your-details/member_id/622474/"><img class="alignnone size-full wp-image-1128" style="margin-left: 25px;" title="Donate to Craig!" src="http://basementcoders.com/wp-content/uploads/2010/11/MOV_donatetome_button.jpg" alt="" width="120" height="48" /></a></li>
<li>Follow the four steps listed on the site; they take all the major credit cards plus PayPal</li>
<li>Enter a donation amount of <span style="text-decoration: line-through;">$20</span> $10 (US or Canadian) <strong>or more</strong> (<a href="http://zeroturnaround.com/jrebel">JRebel</a> licenses are a $60 value!)</li>
<li>In the step where it asks you to "Leave a Message" <strong>make sure to have "<em>JRebel</em>" somewhere in the message</strong> so I can track who to give licenses to</li>
<li>I'll announce on twitter (<a href="http://twitter.com/bcoders">@bcoders</a>) when we have 20 people who have donated!</li>
</ul>
<p>To all those who have now and in the future donated to this worthy cause, I deeply appreciate your support.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/11/jrebel-sponsors-my-movember/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>DevConnections 2010 &#8211; Day 2</title>
		<link>http://basementcoders.com/2010/11/devconnections-2010-day-2/</link>
		<comments>http://basementcoders.com/2010/11/devconnections-2010-day-2/#comments</comments>
		<pubDate>Thu, 04 Nov 2010 23:42:16 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1104</guid>
		<description><![CDATA[Day two of DevConnections 2010 I started off in a session titled: IIS 7.5 for Developers -by STEVE EVANS @scevans. This session was really good, Steve is very comfortable and kept the pace of the session flowing. He took questions, but was able to manage them so they didn't tangent (a skill I value in [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
Day two of <a href="http://devconnections.com">DevConnections 2010</a> I started off in a session titled: <strong>IIS 7.5 for Developers</strong> -by  <strong>STEVE EVANS</strong> <a href="http://twitter.com/scevans">@scevans</a>.  This session was really good, Steve is very comfortable and kept the pace of the session flowing.  He took questions, but was able to manage them so they didn't tangent (a skill I value in an instructor).  He also made good use of humour, not obnoxiously like some do.<br />
<center><span id="more-1104"></span></center><br />
Now I'm from the Apache and Tomcat world of web servers, it's all configuration files for me.  Apache has a terrible legacy configuration file format IMHO.  It's "XML" and I use quotes because it attempts to be XML in some demented way, but its not.  IIS 7 has a really good GUI, but also lets you configure a majority of things via config files, which comes in really handy when you are scripting a deploy.  Overall, I'm impressed, looks like its a great server for static HTML, ASP, ASP.NET and PHP via its support for FastCGI which means guess what folks?  You can have IIS7 host a <a href="http://drupal.org/">Drupal</a> site.</p>
<p>Here are some notes from <strong>IIS 7.5 for Developers</strong> -by  <strong>STEVE EVANS</strong>:</p>
<ul>
<li>Mentioned a lot of "gotchas" for developers (for instance how to name your sites, how that translates to the "Host:" header in http, how to add binding information to get "www" to work and showed how to do it via Power Shell)
</li>
<li>Talks about the AppPool how it's really a separate process around your site so that if it goes down the AppPool is just restarted without taking other apps down.
<ul>
<li>Typically you pick a separate AppPool per site, but it adds a bit of overhead.  </li>
<li>You can have multiple AppPools per application, such that certain parts of your site are isolated (slowly converting portions of your site between versions of .NET for example).
</li>
<li>Session state will differ between AppPools if they aren't setup to be "out of process". </li>
<li>AppPools recycle, which would wipe out sessions.</li>
<li>every 29hrs, makes light of the fact that microsoft picked 29hrs instead of a time of day so people wouldn't complain about a site performance degrading every day at a certain time making it harder to google "site slows down at 11pm"
</li>
<li>Mentions how Powershell will pick the DefaultApplicationPool</li>
<li>32 bit AppPools are faster than 64 bit, only pick 64 bit if you need &gt; 2Gig memory for your site.</li>
</li>
</ul>
<li>FastCGI support, so PHP works great with IIS 7</li>
<li>Great overview of SSL (browser ensures that certificate authority is trusted, does the host header match the certificate, is todays date within date range the certificate was issued).
<ul>
<li>shows how to create a cert.</li>
<li>IIS 7 lets you create a CSR which can be submitted to a CA to request a certificate to be issued.</li>
<li>you can also create a "self signed" cert for internal sites or testing (you can tell the OS that your company is a trusted authority to avoid certificate warnings in the browser)</li>
<li>Add a binding for https, host name is not asked for, certificate is</li>
<li>Shows how to alias the "default document" to any name(s) you'd like, showed that the setting ends up in web.config file for your site).  Shows how you can change the web.config file and have it show up in the GUI
</li>
<li>Through "Feature Delegation" you can control whether or not IIS uses a web.config file (for security reasons).  It doesn't ignore the file if one is present, but it shows an error page (which admittedly might be undesirable when migrating sites from DEV to PROD)
</li>
</ul>
</li>
<li>Failed Request Log feature allows you to log each failed page request to a folder of your choice with nice diagnostic data
<ul>
<li>Application Warmup extension eliminates "spin up" times on first request by allowing IIS to hit your site after it starts to get the spin up done by IIS rather than your first user.
</li>
</li>
</ul>
</ul>
<p>The next session I went to was <strong>Getting Started with POCOs in Entity Framework JULIE LERMAN</strong>, and as a Java dev I didn't get much out of this one.  A POCO is a <strong>P</strong>lain <strong>O</strong>ld <strong>C</strong>LR <strong>O</strong>bject.  Essentially what she described is how Java developers (the good ones) have been programming since they realized EJBs were a bad, horrible idea. The <a href="http://springsource.com">Spring</a> philosophy of "Framework Agnostic" code: don't have your domain objects reference or extend from, say, a persistence framework class.  Apparently in the past this was the only way to use the MS <a href="http://en.wikipedia.org/wiki/ADO.NET_Entity_Framework">Entity Framework</a>, now you can use a POCO.</p>
<ul>
<li>Basically showing how to use Entity Framework with Plain Old CLR Objects.</li>
<li>In the past EF made you extend custom base classes</li>
<li>Funny to hear Dependency Injection as a "new" concept</li>
<li>EF uses Dynamic Proxies around your POCOs</li>
</ul>
<p>My final session was <strong>really really good</strong>.  Essentially <a href="http://www.timhuckaby.com/">Tim Huckaby</a> took us through a concept of "Natural User Interfaces" or NUIs in a session titled "<strong>Using Natural User Interface (NUI) Technologies to Improve User Experience</strong>".  Most of the talk focused on how to create innovative and "natural" UIs for touch based systems (such as MS Surface, WP7, Windows 7 Monitor).  The session started off pretty slow, he took us through some Microsoft Surface programs him and his development team wrote for the TV show Grey's Anatomy.  Kind of like when the CSI folks say "Bring up the program that shows us in 3D what its like when a person gets hit in the head with an axe" type stuff.  Eye Candy fluff.</p>
<p>Then he started going through how different gestures and ways of thinking about interaction are being done now.  It was really amazing.  He showed us a virtual Craps table where a user can throw a set of actual transparent dice on a MS Surface table, and the table reads a "Byte Tag" on the dice to know which number was rolled.  Then a person can place an actual physical poker chip on the table and the Surface will annotate around the poker chip and allow the user to spin the chip in order for it to be used as a "dial" to up or lower their bet.  Really cool!</p>
<div id="attachment_1109" class="wp-caption aligncenter" style="width: 985px"><a href="http://basementcoders.com/wp-content/uploads/2010/11/IMG_20101103_171308.jpg"><img src="http://basementcoders.com/wp-content/uploads/2010/11/IMG_20101103_171308.jpg" alt="" title="Translucent dice which can be read by the surface" width="975" height="937" class="size-full wp-image-1109" /></a><p class="wp-caption-text">Translucent dice which can be read by the surface to determine the number thrown</p></div>
<p>He also said how these types of interfaces are being used in Hospitals for managing things like resources.  The example he gave was a nurse preparing supplies and personnel for a surgery can drag the surgeon, nurses, instruments, supplies, patient into an operating room and really in behind the scence that's feeding an <a href="http://en.wikipedia.org/wiki/Enterprise_resource_planning">ERP System</a>.  Traditional ERP frontends are just a multitude of text boxes, drop-downs and radio buttons the user has to navigate through.  It's very prone to error and frustration.  A NUI such as the one described can save money and lives by reducing errors.</p>
<p>For the latter part of the session he took us through some upcoming user interface technologies such as the <a href="http://cnettv.cnet.com/e3-2010-microsoft-kinect-xbox-360/9742-1_53-50088986.html">Microsoft Kinect</a> and this truly amazing product "<strong><em>Brain Computer Interface</em></strong>" called "<a href="http://www.emotiv.com/">Emotiv</a>".  Really, you have to watch the video on this thing to believe it!  Best part is, it's only $300.  Think of what Stephen Hawking could do with this puppy!<br />
<center><br />
<a href="http://www.emotiv.com/"><img src="http://basementcoders.com/wp-content/uploads/2010/11/1_big-300x231.jpg" alt="" title="Emotiv" width="300" height="231" class="aligncenter size-medium wp-image-1114" /></a><span class="youtube">
<iframe title="YouTube video player" class="youtube-player" type="text/html" width="425" height="344" src="http://www.youtube.com/embed/7utG3NqhBoU?color1=d6d6d6&amp;color2=f0f0f0&amp;border=0&amp;fs=1&amp;hl=en&amp;modestbranding=1&amp;loop=&amp;showinfo=0&amp;iv_load_policy=3&amp;showsearch=0&amp;rel=1" frameborder="0" allowfullscreen></iframe>
</span><br />
</center></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Here are my notes from the NUI presentation:</p>
<ul>
<li>Started off by showing us an app he did for Grey's anatomy on the Microsoft Surface depicting a heart transplant</li>
<li>Essentially saying that Touch interfaces have been around for a while</li>
<li>Windows 7 Capable HD monitors that support touch</li>
<li>Really kind of amounting to just showing videos (without sound because he's not plugged in) of some very impressive UI conventions when using a touch device</li>
<li>Showed how the device can identify objects when you place them on the surface</li>
<li>Mentions that the new monitors can track up to 75 simultaneous touches<br />
three types of touch devices: </p>
<ul>
<li>Resistive Touch (push down on screen and it bends a membrane)</li>
<li>Capacitive (measures an electrical differential your finger introduces to the screen)</li>
<li>Infrared light sensors on the sides measure the blockage of light where your fingers are</li>
</ul>
</li>
<li>Talks about different Gestures, tap, flick, fling, scroll, pinch/spread
<ul>
<li>Sensing a real object being placed on the screenand annotating around it (poker chip,w ith a dial around it and if you spin the chip it ups your bet)
</li>
</ul>
</li>
<li>WPF is Windows Presentation Foundation</li>
<li>"Byte-tag" stickers on objects can be read by the surface</li>
<li>Mentions that Silverlight is 4.2 meg download because Flash is, engineers are trying to figure out how to "trickle-download" the portions of .NET an app would need so you don't have to download everything at the same time (~120Megs)</li>
<li>Talks about XBox Kinect, ships tomorrow, monitors 1 million points on the body
<ul>
<li>Can figure out who you are based on your features</li>
<li>No exposed API at launch</li>
</ul>
</li>
<li>Showed "Emotiv" which is head gear you can wear which "reads your mind" to interface to a computer
<ul>
<li>Only $300</li>
</ul>
</li>
</ul>
<p><strong>P.S. Also interviewed <a href="http://www.dotnetnuke.com/Community/Blogs/tabid/825/BlogId/1/Default.aspx">Shaun Walker</a> from <a href="http://dotnetnuke.com">DotNetNuke</a>, so stay tuned for that podcast!</strong>
 </div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/11/devconnections-2010-day-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DevConnections 2010 &#8211; First Day Impressions</title>
		<link>http://basementcoders.com/2010/11/devconnections-2010-first-day-impressions/</link>
		<comments>http://basementcoders.com/2010/11/devconnections-2010-first-day-impressions/#comments</comments>
		<pubDate>Thu, 04 Nov 2010 09:31:58 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[devconnections]]></category>
		<category><![CDATA[silverlight]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1090</guid>
		<description><![CDATA[DevConnections 2010 is my first Microsoft technologies centered conference in a long time, probably since VBITs in 1999. Having been out of the realm of Microsoft development, I hadn't heard much about DevConnections. A group of guys from Apptius Computer solutions, a local (Winnipeg) consulting group were heading down to Vegas for the conference. I [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<a href="http://basementcoders.com/wp-content/uploads/2010/11/devconnections.png"><img src="http://basementcoders.com/wp-content/uploads/2010/11/devconnections.png" alt="" title="DevConnections 2010" width="862" height="83" class="aligncenter size-full wp-image-1095" /></a><br />
<a href="http://www.devconnections.com/">DevConnections 2010</a> is my first Microsoft technologies centered conference in a long time, probably since VBITs in 1999.</p>
<p>Having been out of the realm of Microsoft development, I hadn't heard much about DevConnections.  A group of guys from Apptius Computer solutions, a local (Winnipeg) consulting group were heading down to Vegas for the conference.</p>
<p>I just so happen to have friends who are working in Vegas at <a href="http://zappos.com">Zappos</a>, and I had $150 United travel voucher burning a hole in my pocket.  Originally I figured I'd just go down to Vegas, hang out with the <a href="http://www.apptius.com/">Apptius</a> folks and have a free place to stay with my Zappos friends.  Then I figured I'd take a chance and email the DevConnections info address to inquire about a free Blogger's pass.  Sure enough, they responded back stating they'd be happy to provide a full conference pass and workshop pass if I so desired.<br />
<span id="more-1090"></span></p>
<h2>FIRST IMPRESSIONS</h2>
<h3>Venue</h3>
<p>The venue for the sessions is the Mandalay Bay. I can't say how pleased I was with this choice, the Mandalay Bay is an awesome hotel, and their conference centre is very nice.  I've been to Caesar's Palace for a conference before, and I'd have to say other than the fact that Caesars is closer to the core of Las Vegas (City Centre), Mandalay conference facilities are just a bit nicer (I found), and that might actually depend on the conference itself choosing what tier of facility they dish out for.</p>
<p>If you were smart enough to stay at Mandalay Bay, you would have full access to their sand beach complete with wave pool. Very awesome. The rooms at the hotel are very very nice, even the basic rooms have beautiful bathrooms complete with deep bathtubs, tiled showers, two sinks and a TV.  P.S. The Apptius folks stayed at the Excalibur which is a tram ride away from Mandalay, and they recently renovated their rooms, so they are a lot nicer than they were in the past.</p>
<p>One comment I'll make on the DevConnections conference as opposed to say <a href="http://www.oracle.com/us/javaonedevelop/index.html">JavaOne</a>, is how easy it would be to social engineer your way into the conference.  I didn't have to show ID to claim my conference badge, never had to show my badge to collect my free meals and never once had to show it in order to enter the conference area.</p>
<p>From a conference goer's perspective this is a blessing and an annoyance.  Blessing because, I hate my conferences feeling like a TSA airport lineup (which J1 was very much like) and an annoyance because if you paid $1,500 for a conference pass you might feel ripped off (and rightfully so) if someone gets in without paying.</p>
<p>Meals so far have ranged from a full sit-down meal (and I can't even guess how many people are at this conference, it's a *huge* number) and buffet style lunch. This is in stark comparison to JavaOne where you are issued a box lunch upon surrender of your lunch coupon for the day. My only gripe: the buffet lunch seating area was a bit of a disaster if you wanted to sit with your friends.  Only the first through the lines got a table with their friends, we were later in the lines and had to hunt down serving staff to get us clean cutlery for a set of seats we snagged from people who were finished their meal. Food was bland as well, but perhaps  expected when you are feeding thousands of people.</p>
<p>DevConnections offers a complimentary drink ticket for one day (Tuesday). JavaOne offered free beer gardens each day for 2hrs at a time.  Now, luckily a *very smart* vendor (<a href="http://www.ontrackpowerconrols.com/">Ontrack PowerControls</a>) picked up on this travesty and offered free Blue Moon beer at there booth, and not just one per person either.</p>
<h2>Windows Phone 7 - WP7</h2>
<p>I weighted my sessions for the first day heavily toward WP7. I am very interested in WP7, although I think it would be glib to say they'll knock Apple out of the top spot for Smart Phones, I'm going to have to say if I were Google I'd be worried.</p>
<p>In my opinion, MS took a really good look at what makes the iPhone such a success, and which pain points Google is experiencing with Android. So essentially Microsoft thought the following were good: </p>
<ul>
<li>Guarantee good user experience regardless of phone manufacturer
<ul>
<li>Manufacturers have to support a profile of hardware specs (CPU speed, available RAM, screen resolution)</li>
</ul>
</li>
<li>Certify apps for the Market place (<strong>but let the devs know where they are at in the process</strong>)</li>
</ul>
<div id="attachment_1098" class="wp-caption aligncenter" style="width: 777px"><a href="http://basementcoders.com/wp-content/uploads/2010/11/IMG_20101102_113337.jpg"><img src="http://basementcoders.com/wp-content/uploads/2010/11/IMG_20101102_113337-767x1024.jpg" alt="" title="WP7 Goal: Consistent Hardware, something Android doesn\&#039;t really enforce..." width="767" height="1024" class="size-large wp-image-1098" /></a><p class="wp-caption-text">WP7 Goal: Consistent Hardware, something Android doesn't really enforce...</p></div>
<h2>Sessions</h2>
<p>The first session I went to was <strong>Getting started with WP7 - BRANDON WATSON</strong>.  I liked this session from the point of view as a good solid intro to the platform.  Now, I missed the Key Note speech by Joe Bileford (sp?) but a few others mentioned that a lot of the presentation was already covered in the Key Note.  So for me, this was good, for those who went to the Key Note it was a bit boring.</p>
<p>* Goal for WP7: 4 seconds from unlock to functional (picture taking)<br />
* Phones are a status symbol these days<br />
* MS Spent a lot of time on UI, gives example of trip to Korea, where presenter didn't know the language.  He was able to get around because of international symbols being used on signs, WP7 borrows from this.<br />
* Very clean user interface, says "removes a lot of the chrome" which means trades visual polish for usability features<br />
* "Metro Map" (Metro is the design philosophy and UI like "Cocoa Touch" is for Apple)<br />
	- Home screen isyour "people Screen"<br />
	- All contact info is linked to social graphs, which is all minable and navigateable from that home screen<br />
	- "Hubs in Metro" People, pictures, games, documents music + video<br />
- Full Zune experience is bundled with WP7<br />
- Top category are only "paid" apps, to avoid using "downloads" as a metric<br />
- Documents are linked to "Sky Drive" their cloud storage system<br />
- Consistent hardware is what will make them competitive. (800x480 standard resolution, second resolution added later)<br />
- multi-point touch<br />
- Same available RAM<br />
- Optional keyboard<br />
- two flavours of development:<br />
 - Silverlight is the development product for the phone<br />
 - XNA is for 3D games (DirectX for WP7)<br />
- sandboxing the developers to preserve user experience (can't have an app monopolizing the CPU, or display)<br />
- Difference between developing for XBox and WP7 is very minimal<br />
- Silverlight 3 (plus plus), some features from 4.<br />
 - White paper on how to preserve performance using SL<br />
 - Relaxed Sandbox for the phone as opposed to what runs in the browser<br />
- Expression Blend is the dev tool for making the UI (visual XAML editor)<br />
- Makes jab at Apple about not keeping devs in the dark about where they are in the process of certifying and app.<br />
- Application license is what allows the app to run on a phone<br />
- User experience is like a lens which has a viewport over what the user can see, they can scroll over it, and there is depth so things in the foreground scrolls faster than that which is in the back<br />
"Cloud Services Powering Experiences" is one of their mantras for the apps on the phone<br />
 - REST/XML/JSON built in<br />
 - location services - Assisted GPS through GPS, cell towers/wifi, dev can specify "level" of quality<br />
 - Integration to Microsoft services (like Live)<br />
- If your app isn't running, it can still consume data by having it pushed to the phone (it has a unique endpoint address based on its application id)<br />
 - if it is running, the app will consume the data right away, if its not, a notification pops up and you can open it<br />
 - live-talk is an app that can pin itself to the homescreen and run in a limited way<br />
- Scrolling, rotating, pinch to zoom is all very fast<br />
- Bad font though, maybe arial all lower case for headings<br />
- Pictures hub is from all social sites + on phone, so as a developer you can access them all the same way.</p>
<p><strong>BUILDING INTEGRATED APPLICATIONS WITH WP7 HARDWARE AND SERVICES - ROB CAMERON</strong></p>
<p>I found this one redundant as he covered a lot of things from the previous session that Brandon Watson did.  He also promised code, but just flew through it in favour of the redundant stuff and slides.</p>
<p>* I found it funny that MS people consider MVC IModel View Controller) *new*<br />
* "This is called "Dependency Injection"" was uttered, again coming from Java this is common place.<br />
* They promote "view models" which I thought was an anti-pattern, but same thing happens in Flex.  Not sure how I feel on the subject (essentially DTO)<br />
* MVVM (Model View ViewModel)<br />
* VM almost seems like what we would call a model in <a href="http://wicket.apache.org">Wicket</a>.  Model = Domain Model, VM = Model<br />
* Followed through on promise to get into code, does a good job explaining it as he goes.<br />
* Mentions "EventAggregator" or "Messenger" which automatically uses "weak references" to your objects so the garbage collector functions properly<br />
* Good use of humour used throughout the sessions</p>
<p><strong>Building Modern Lineof-Business Applications with Microsoft Visual Studio 2010 Professional ORVILLE MCDONALD</strong></p>
<p>* All code, like 3 slides, yay!<br />
* Showing us "Lightswitch" which is Silverlight based templates for rapid application development<br />
* Shows us how to bind data to silverlight using "Data Entity Models"<br />
* Tempo was definitely off, his computer seemed to be lagging quite a bit in VS<br />
* Lots of "moment of silence"<br />
* Painfully slow, he dragged a Entity to a visual panel and it took  5 mins<br />
* Students are schooling him in how Silverlight wants to connect to localhost and some operating system security slows things down considerably<br />
* Student says MS does not consider DE framework is not an ORM, asks where it fits.  Instructor says MS does this a lot where they give you a lot of choices. Student presses for "exactly when would you use it then"?<br />
When you have to make a local datamodel without touching your original schema<br />
* He had to stop demo, says he'll post a video of it and send it to people who email him: orville.mcdonald@microsoft.com</p>
<p>So although I didn't get to see all I wanted to, I still got a decent view of Silverlight and WP7.  Both look really nice.  All in all pretty happy with the conference.
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/11/devconnections-2010-first-day-impressions/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Episode 22 &#8211; Free Java</title>
		<link>http://basementcoders.com/2010/10/episode-22-free-java/</link>
		<comments>http://basementcoders.com/2010/10/episode-22-free-java/#comments</comments>
		<pubDate>Fri, 29 Oct 2010 15:11:24 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1075</guid>
		<description><![CDATA[Do you know what the Free Java movement is? It's not exactly cut-and-dry. Essentially it's a movement which wants more community rather than autocratic involvement in the direction of Java. It seems that Oracle is shaping the JCP with less focus on individuals and seemingly more focus on "Friends of Oracle" (or Friends of Larry, [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<div id="attachment_1076" class="wp-caption aligncenter" style="width: 287px"><a href="http://basementcoders.com/wp-content/uploads/2010/10/IMG_20100920_220601.jpg"><img class="size-large wp-image-1076  " title="Free Java" src="http://basementcoders.com/wp-content/uploads/2010/10/IMG_20100920_220601-225x300.jpg" alt="" width="277" height="368" /></a><p class="wp-caption-text">Jeff sporting his &quot;Java - Just Free It&quot; digs</p></div>
<p>Do you know what the <a href="http://nighthacks.com/roller/jag/entry/let_larry_know_you_care" target="_blank">Free Java movement</a> is?  It's not exactly cut-and-dry.  Essentially it's a movement which wants more community rather than autocratic involvement in the direction of Java.  It seems that Oracle is shaping the <a href="http://en.wikipedia.org/wiki/Java_Community_Process">JCP</a> with <a href="http://gee.cs.oswego.edu/dl/html/jcp22oct10.html" target="_blank">less focus on individuals </a>and seemingly more focus on "<a href="http://blog.crazybob.org/2010/10/long-live-java.html" target="_blank">Friends of Oracle</a>" (or Friends of <a href="http://www.amazon.com/Difference-Between-God-Larry-Ellison/dp/0060008768" target="_blank">Larry</a>, if there's even a distinction).</p>
<p>All of this and the fact that Apple, without warning (or provocation that we know of) decided to<a href="http://developer.apple.com/library/mac/#releasenotes/Java/JavaSnowLeopardUpdate3LeopardUpdate8RN/NewandNoteworthy/NewandNoteworthy.html#//apple_ref/doc/uid/TP40010380-CH4-SW1" target="_blank"> deprecate Java on Mac OSX</a>. The more disturbing part is Oracle's complete "head in the sand" non-reaction to this news.  Essentially, we don't know what the future of Java is on Mac OSX, especially in light of how <a href="http://www.infoworld.com/d/the-industry-standard/oracle-sues-google-over-java-use-in-android-852" target="_blank">lawsuit happy Oracle has been</a> these days.</p>
<p>Even more interesting than the article itself are the <a href="http://www.infoq.com/news/2010/10/can-oracle-save-java#view_62003">comments</a> made by an Oracle employee (and the criticisms which follow) on InfoQ's "<a href="http://www.infoq.com/news/2010/10/can-oracle-save-java" target="_blank">Can Oracle turn around Java?</a>".</p>
<p>So, it is interesting times we live in.  Would love to be a fly on the wall in Oracle to find out exactly what their plans are amidst all the community pressure.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/10/episode-22-free-java/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep22.mp3" length="39263233" type="audio/mpeg" />
		</item>
		<item>
		<title>My Movember Contribution: Ask me about my mustache</title>
		<link>http://basementcoders.com/2010/10/movember-name-tags/</link>
		<comments>http://basementcoders.com/2010/10/movember-name-tags/#comments</comments>
		<pubDate>Thu, 28 Oct 2010 00:27:06 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=1024</guid>
		<description><![CDATA[I was recently at a Meetup called "Secret Handshake" up here in Winnipeg. It's a Meetup for "Creatives" which they leave very open ended to interpretation (writers, graphic artists, software developers, etc...) and while I was there I met a fellow by the name of Steven Soroka (@ssoroka) who's raising money for Prostate Cancer via [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
I was recently at a Meetup called "<a href="http://www.meetup.com/secrethandshake/">Secret Handshake</a>" up here in <a href="http://www.google.ca/search?q=winnipeg+manitoba&#038;ie=utf-8&#038;oe=utf-8&#038;aq=t&#038;rls=org.mozilla:en-US:official&#038;client=firefox-a">Winnipeg</a>.  It's a Meetup for "Creatives" which they leave very open ended to interpretation (writers, graphic artists, software developers, etc...) and while I was there I met a fellow by the name of Steven Soroka (<a href="http://twitter.com/ssoroka">@ssoroka</a>) who's raising money for <a href="http://www.prostatecancer.ca/">Prostate Cancer</a> via a novel campaign called "<a href="http://ca.movember.com/">Movember</a>".</p>
<p>&nbsp;</p>
<p>Essentially Movember is all about growing a mustache during the month of November and asking friends and family to sponsor you.  The proceeds go to help fight Prostate Cancer.  This to me is a brilliant idea because every man secretly wants to grow a mustache but <strong>a)</strong> is self conscious about it (especially when it's first growing) <strong>b)</strong> has a <em>sig.other</em> who might not be too keen on the idea and <strong>c)</strong> it's not really "in fashion" these days, gone are the days of <a href="http://www.imdb.com/name/nm0000633/">Tom Selleck</a> and <a href="http://www.imdb.com/media/rm2920844800/nm0000633">Burt Reynolds</a>, you just don't see <a href="http://www.imdb.com/media/rm3809120000/nm0000354">Matt Damon</a> or <a href="http://www.imdb.com/media/rm3947135232/nm0005493">Justin Timberlake</a> out on the scene sporting a stash.</p>
<p>&nbsp;</p>
<p>This also strikes close to home because my wife lost her Father (<strong>Michael Bate</strong>) to Prostate Cancer well before his time.</p>
<style>
#attachment_1028 {
  clear:right;
}
</style>
<div id="attachment_1027" class="wp-caption alignleft" style="width: 160px"><a href="http://basementcoders.com/wp-content/uploads/2010/10/Michael-Bate-723x1024.jpg"><img src="http://basementcoders.com/wp-content/uploads/2010/10/Michael-Bate-150x150.jpg" alt="" title="Michael Bate" width="150" height="150" class="size-thumbnail wp-image-1027" /></a><p class="wp-caption-text">Michael enjoying life</p></div> <div id="attachment_1028" class="wp-caption alignleft" style="width: 160px"><a href="http://basementcoders.com/wp-content/uploads/2010/10/Michael-and-Lilja-719x1024.jpg"><img src="http://basementcoders.com/wp-content/uploads/2010/10/Michael-and-Lilja-150x150.jpg" alt="" title="Michael and Lilja" width="150" height="150" class="size-thumbnail wp-image-1028" style="clear:right" /></a><p class="wp-caption-text">Michael and our new born daugter months before he succumbed to Cancer</p></div>
<p>So I'm all for growing mustaches for Prostate Cancer when I'm on my home turf, as typically I'm only seeing my friends and relatives.  So I can explain to them what the dealio is.  However, the first week of November I'll be in Las Vegas Nevada at the <a href="http://www.devconnections.com/">DevConnections</a> conference, surrounded by tonnes of people I don't know and interviewing people like <strong>Shaun Walker</strong> from <a href="http://dotnetnuke.com">DotNetNuke</a> as well as some people from <a href="http://zappos.com">Zappos.com</a>.  This has made me a bit self conscious of the fact that I'll be in the beginning stages of growing a stash and will probably look like an adolescent boy going through puberty, or a creep.</p>
<p>&nbsp;</p>
<p>My solution?  The Ice Breaker: a name tag style card I can pin to my shirt which simply states: "Ask me about my &lt;graphic of mustache&gt;".  This accompanied by the customized donation cards that <a href="http://movember.com">movember.com</a> provides should give me a great opener and way to fundraise for this noble cause!  Feel free to download them for yourself, and it would be <a href="http://ca.movember.com/mospace/622474">awesome if you could sponsor me</a>!</p>
<div style="display:block">
<center><br />
<a href="http://basementcoders.com/movember/movember_tag_blue.pdf"><img src="http://basementcoders.com/wp-content/uploads/2010/10/movember-tag_blue_single-300x200.jpg" alt="" title="Ask me about my stash (blue)" width="300" height="200" class="alignleft size-medium wp-image-1052" /></a><a href="http://basementcoders.com/movember/movember_tag_red.pdf"><img src="http://basementcoders.com/wp-content/uploads/2010/10/movember-tag-red_single-300x200.jpg" alt="" title="Ask me about my stash (red)" width="300" height="200" class="alignleft size-medium wp-image-1052" /></a><br />
</center>
</div>
<p>&nbsp;</p>
<div style="display:block">
<em>Click either image to download a PDF version you can print off</em>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/10/movember-name-tags/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Episode 21 &#8211; Interview with Cedric Beust</title>
		<link>http://basementcoders.com/2010/10/episode-21-interview-with-cedric-beust/</link>
		<comments>http://basementcoders.com/2010/10/episode-21-interview-with-cedric-beust/#comments</comments>
		<pubDate>Fri, 22 Oct 2010 14:15:11 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=994</guid>
		<description><![CDATA[Cédric Beust is probably best known for his creation of the TestNG Java testing framework. It arose at a time when JUnit (the defacto standard for Java testing) was becoming stagnant. Testing practices were evolving, and TestNG was keeping up and innovating in the space. Cédric also spent six years at Google, the last four [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<p><a href="http://android.com/"><img src="http://basementcoders.com/wp-content/uploads/2010/10/android_brushed-150x150.jpg" alt="" title="Go to the Android site" width="150" height="150" class="alignleft size-thumbnail wp-image-997" /></a><a href="http://linkedin.com"><img src="http://basementcoders.com/wp-content/uploads/2010/10/linkedin1-150x150.jpg" alt="" title="Go to the LinkedIn site" width="150" height="150" class="alignleft size-thumbnail wp-image-998" /></a><a href="http://beust.com/weblog/"><img src="http://basementcoders.com/wp-content/uploads/2010/10/cedric_polaroid.jpg" alt="" title="Go to Cédric's blog" width="274" height="318" class="alignright size-full wp-image-995" style="margin-top:70px;" /></a></p>
<div style="clear:left">
Cédric Beust is probably best known for his creation of the <a href="http://testng.org/">TestNG</a> Java testing framework.  It arose at a time when JUnit (the defacto standard for Java testing) was becoming stagnant.  Testing practices were evolving, and TestNG was keeping up and innovating in the space.</p>
<p>Cédric also spent six years at Google, the last four of which he spent on <a href="http://www.android.com/">Android</a>.  We talk to Cédric about what it was like working at Google, how the interview process was and his thoughts on Android and some of the decisions which were made for the platform.</p>
<p>Cédric now works for LinkedIn, and continues to support and extend the <a href="http://testng.org/">TestNG</a> framework in his spare time.</p>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/10/episode-21-interview-with-cedric-beust/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep21.mp3" length="39304297" type="audio/mpeg" />
		</item>
		<item>
		<title>Neat Grep Trick &#8211; Displaying File Name in find Results</title>
		<link>http://basementcoders.com/2010/10/neat-grep-trick-displaying-file-name-in-find-results/</link>
		<comments>http://basementcoders.com/2010/10/neat-grep-trick-displaying-file-name-in-find-results/#comments</comments>
		<pubDate>Wed, 20 Oct 2010 16:44:51 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=981</guid>
		<description><![CDATA[So I've been hacking on some Scala in my spare time, and one of the problems I've been having is finding proper IDE support for the language. I like being able to ctrl-click or cmd-click on a class or method to instantly jump to the definition of that class or method. For Classes, IntelliJ IDEA's [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
So I've been hacking on some <a href="http://www.scala-lang.org/">Scala</a> in my spare time, and one of the problems I've been having is finding proper IDE support for the language.  I like being able to ctrl-click or cmd-click on a class or method to instantly jump to the definition of that class or method.  For Classes, IntelliJ IDEA's Scala plugin does alright.  But for methods, it seems pretty lost at times, <a href="http://scala-programming-language.1934581.n4.nabble.com/CSI-Scala-methods-td3004161.html#a3004161">this question</a> on the <a href="http://scala-programming-language.1934581.n4.nabble.com/Scala-User-f1934582.html">scala-user mailing list</a> pretty much sums up my problem:</p>
<p>&nbsp;</p>
<blockquote>
<p>&nbsp;</p>
<p>For instance, I'm using the <a href="http://github.com/osinka/mongo-scala-driver/wiki">mongo-scala-driver</a> and a statement like this:</p>
<p>	<code>val transcripts = db.getCollection("transcripts") of Transcript</code></p>
<p>It can't tell me where "of" is defined.  Or:</p>
<p>	<code>for {acct <- account from dbo} yield new Expense(acct)</code></p>
<p>It has no clue where "from" is declared.</p>
<p>Also, because of Scala syntax I'm not entirely sure if those are imported methods from an Object or methods from the class the method proceeds?  For instance is "from" a method imported from an Object imported using SomeObject._ or a method of the account class?</p></blockquote>
<p>&nbsp;</p>
<p>So, I've been coping by downloading all the source code for the libraries I'm using and issuing find + grep commands on the code base.  For instance:</p>
<p>&nbsp;</p>
<pre>
$ find . -name *.scala -exec grep 'def from' {} \;
        def from(dbo: DBObject) = unapply(dbo)
        def from(dbo: DBObject) = unapply(dbo)
        def from(dbo: DBObject) = unapply(dbo)
    def fromMap(m: Map[String,Any]): DBObject = {
</pre>
<p>&nbsp;</p>
<p>Ah crap, no filename!  Ok, well I could just re-issue the grep command with the <code>-l</code> option to tell it to list file names instead of the matched lines:</p>
<p>&nbsp;</p>
<pre>
find . -name *.scala -exec grep -l 'def from' {} \;
</pre>
<p>&nbsp;</p>
<p>But if I had a lot of hits on my original search, it might be tough to determine which line came from which file.  Well, it turns out you can implement <a href="http://www.linuxquestions.org/questions/programming-9/find-grep-command-to-find-matching-files-print-filename-then-print-matching-content-328036/#post1665799">this trick</a> with grep such that if you specify more than one file to look in, grep will display which file it got its match from, hence you getting listing of the line which matched and what file it came from:</p>
<p>&nbsp;</p>
<pre>
$ find . -name *.scala -exec grep 'def from' /dev/null {} \;
./src/main/scala/com/osinka/mongodb/shape/Field.scala:        def from(dbo: DBObject) = unapply(dbo)
./src/main/scala/com/osinka/mongodb/shape/Field.scala:        def from(dbo: DBObject) = unapply(dbo)
./src/main/scala/com/osinka/mongodb/shape/Field.scala:        def from(dbo: DBObject) = unapply(dbo)
./src/main/scala/com/osinka/mongodb/wrapper/DBObj.scala:    def fromMap(m: Map[String,Any]): DBObject = {
</pre>
<p>&nbsp;</p>
<p>In this case we tell grep to search in both the file provided by find: <code>{}</code> and /dev/null.  It's never going to find a match in <code>/dev/null</code>, so it will always display the match if it came from a file provided by find.
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/10/neat-grep-trick-displaying-file-name-in-find-results/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Episode 20 &#8211; JavaOne 2010 Recap</title>
		<link>http://basementcoders.com/2010/10/episode-20-javaone-2010-recap/</link>
		<comments>http://basementcoders.com/2010/10/episode-20-javaone-2010-recap/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 18:18:06 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=835</guid>
		<description><![CDATA[&#160; P.S. Checkout Basement Coder JavaGeek's personal blog for more JavaOne recap information. &#160; Welcome to our "JavaOne 2010" Recap episode! We had a great time at JavaOne! The best part was that since we do the podcast over Skype we all got to be in the same physical location for once! Checkout our slide [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<p>&nbsp;</p>
<div style="width: 90%; border: thick double black;padding:10px;margin-left:25px;">
P.S. Checkout Basement Coder JavaGeek's personal blog for more <a href="http://javageek.org/categories/java/javaone/">JavaOne recap</a> information.
</div>
<p>&nbsp;</p>

<p>Welcome to our "JavaOne 2010" Recap episode! We had a great time at JavaOne!  The best part was that since we do the podcast over Skype we all got to be in the same physical location for once!  Checkout our slide show below, there is a mixture of video and images so you'll have to click on them to find out which is which (note to flickr, make it more obvious that something is a movie).</p><div id='mss629037'><div class="slide" align="center"><div id='simple_gallery629037' style='width: 510px; height: 464px'><div class='simpleHSslidecontainer' style='width: 510px; height: 439px;' ><div class='hidden-container' class='simpleHSslideimg'> </div></div> </div></div><script type='text/javascript' id='muds_script629037'>
	var hsSimple629037 = {
		slideshowGroup: 'group629037',
		thumbnailId: 'simple_gallery629037',
		width: 500,
		minWidth: 500,
		height: 334,
		minHeight: 334,
		targetX: 'simple_gallery629037 5px',
		targetY: 'simple_gallery629037 5px'
	}
	
	for (attrname in hsSimple) { hsSimple629037[attrname] = hsSimple[attrname]; }
	hs.Expander.prototype.onAfterExpand
	
	init_hs629037 = function() {
		if( hs_sem.isGreen() ) {
			hs_sem.setRed();
			document.getElementById('thumb629037').onclick();
		} else {
			setTimeout(function (){ init_hs629037(); }, 300);
		}
	}
	
	init_hs629037();
	
	hs.addEventListener(window, 'load', function() {
		hs_sem.setGreen();
	});
	
	</script></div><p>&nbsp;</p>
<p>
We also met some celebrities!  And we aren't just talking about <a href="http://basementcoders.com/2010/09/interview-with-james-gosling/">Gosling</a>!  Comedian <strong>Jon LaJoie</strong> (<a href="http://twitter.com/jonlajoiecomedy">@jonlajoiecomedy</a>) who we knew best from this video:
</p>
<p><center><span class="youtube">
<iframe title="YouTube video player" class="youtube-player" type="text/html" width="425" height="344" src="http://www.youtube.com/embed/EVcyNANK5cY?color1=d6d6d6&amp;color2=f0f0f0&amp;border=0&amp;fs=1&amp;hl=en&amp;modestbranding=1&amp;loop=&amp;showinfo=0&amp;iv_load_policy=3&amp;showsearch=0&amp;rel=1" frameborder="0" allowfullscreen></iframe>
</span></center><br />
<center></p>
<div style="width: 90%; border: thick double black;padding:10px;margin-left:25px;">
<span id="more-835"></span>
</div>
<p></center></p>
<p>&nbsp;</p>
<p>We were talking about it (rapist glasses) all week because <a href="http://twitter.com/toomasr">Toomas</a> from Zero Turn Around (JRebel folks) wears those <strong>exact same</strong> glasses!  I snapped a picture of <a href="http://twitter.com/rburton/">Richard Burton</a> wearing them.</p>
<p>&nbsp;</p>
<div class="wp-caption aligncenter" style="width: 385px"><a href="http://www.flickr.com/photos/54282584@N04/5082078412/" title="Richard with Toomas's &quot;Rapist Glasses&quot; on by The Basement Coders, on Flickr"><img src="http://farm5.static.flickr.com/4150/5082078412_c450ff6bc6.jpg" width="375" height="500" alt="Richard with Toomas's &quot;Rapist Glasses&quot; on" /></a><p class="wp-caption-text">I don't know about you, but Richard scares me a hell of a lot more than Jon</p></div>
</div>
<p>&nbsp;</p>
<p><a href="http://www.fxnetworks.com/shows/originals/theleague/"><img src="http://basementcoders.com/wp-content/uploads/2010/10/the_league_logo.png" alt="" title="the_league_logo" width="154" height="56" class="alignright size-full wp-image-958" /></a>Turns out the cast of the TV show "<a href="http://www.fxnetworks.com/shows/originals/theleague/">The League</a>" (in which Jon plays the character <a href="http://theleaguefx.tumblr.com/post/1175154684/taco-is-a-classy-guy-who-has-classy-classy-bed">Taco</a>) was also with him.  So we got to meet <strong>Paul Scheer</strong> (<a href="http://twitter.com/paulscheer">@paulscheer</a>) and <strong>Steve Rannazzisi</strong> (<a href="http://twitter.com/steverannazzisi">@steverannazzisi</a>).  As well, the woman in the picture is a creator of the show. Not shown in the pic was <strong>Casey Chiders</strong> who's hooking some of us up with some BluRay's of the show!</p>
<p>&nbsp;</p>
<p><div class="wp-caption aligncenter" style="width: 510px"><br />
<a href="http://www.flickr.com/photos/54282584@N04/5082130662/" title="Craig with the Cast from The League by The Basement Coders, on Flickr"><img src="http://farm5.static.flickr.com/4014/5082130662_0dd9e63e84.jpg" width="500" height="375" alt="Craig with the Cast from The League" /></a><br />
<p class="wp-caption-text">Craig with the Cast (and a Creator) of The League</p></div>
<p>&nbsp;</p>
<p>All in all we had a blast at JavaOne (Oracle Open World) 2010.  Have a listen for yourself!</p>

<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/10/episode-20-javaone-2010-recap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep20.mp3" length="36606266" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 19 &#8211; JRebel Jevgeni Kabanov &#8220;Bares All&#8221; for the Basement Coders</title>
		<link>http://basementcoders.com/2010/10/episode-19-jrebel-jevgeni-kabanov-bares-all-for-the-basement-coders/</link>
		<comments>http://basementcoders.com/2010/10/episode-19-jrebel-jevgeni-kabanov-bares-all-for-the-basement-coders/#comments</comments>
		<pubDate>Thu, 07 Oct 2010 18:54:51 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=799</guid>
		<description><![CDATA[You know when you meet someone and you automatically "click"? Well, that's how the Basement Coders felt when they met the Zero Turn Around (ZTA) folks at the JavaOne conference. Both Jeff and Justin had met Jevgeni, founder and developer at Zero Turn Around a month ago at JavaZone in Oslo. Jevgeni (@ekabanov), Toomas (@toomasr), [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://zeroturnaround.com/jrebel"><img src="http://basementcoders.com/wp-content/uploads/2010/10/jrebel_col_150.png" alt="Zero Turnaround's JRebel" title="Zero Turnaround's JRebel" class="aligncenter size-full" /></a><br />
<div class="wp-caption aligncenter" style="width: 546px"><a href="http://basementcoders.com/wp-content/uploads/2010/10/bcoders_jevgeni.jpg"><img src="http://basementcoders.com/wp-content/uploads/2010/10/bcoders_jevgeni_small.jpg" alt="All this bus needs is a pole" title="All this bus needs is a pole" /></a><p class="wp-caption-text">Jevgeni, Justin, Jeff, Craig(bottom)</p></div></p>
<p>You know when you meet someone and you automatically "click"?  Well, that's how the Basement Coders felt when they met the Zero Turn Around (ZTA) folks at the JavaOne conference.  Both Jeff and Justin had met Jevgeni, founder and developer at Zero Turn Around a month ago at JavaZone in Oslo.</p>
<p><img src="http://basementcoders.com/wp-content/uploads/2010/10/bus_stamp_small.jpg" alt="Java Road Trip Bus" title="Java Road Trip Bus" class="alignright size-full" /><strong>Jevgeni</strong> (<a href="http://twitter.com/ekabanov">@ekabanov</a>), <strong>Toomas</strong> (<a href="http://twitter.com/toomasr">@toomasr</a>), <strong>Oliver</strong>, <strong>David</strong> and the rest of the ZTA gang are a fun bunch of talented people who've created a product called "<a href="http://zeroturnaround.com/jrebel">JRebel</a>" (<a href="http://twitter.com/javarebel">@javarebel</a>).  Essentially it allows us folks who develop against the JVM to not have to restart/rebuild our application every-single-time-we-make-a-stinking-change!  You don't know how much of a win this is until you've wasted half a day building your code and restarting your application server so you can get the spacing on some &lt;div&gt; just right.</p>
<p>We were actually granted the chance to do this interview from the back of the Java Road Trip bus, which was pretty damn awesome not only for it's luxurious interior but for the sound proofing we would not have otherwise enjoyed from the noisy Java One venues.</p>
<p>So let me just re-iterate how great it was meeting the ZTA folks!  Hope you enjoy the interview, and hopefully you can forward it to your boss so they'll get you a license for JRebel!</p>

<p>Enjoy!</p>
<div class="wp-caption aligncenter" style="width: 546px"><a target="_blank" href="http://www.flickr.com/photos/54282584@N04/5060773506/"><img src="http://basementcoders.com/wp-content/uploads/2010/10/Jevgeni_shirtless_small.jpg" alt="All this bus needs is a pole" title="All this bus needs is a pole" /></a><p class="wp-caption-text">What really happened in the back of the bus?</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/10/episode-19-jrebel-jevgeni-kabanov-bares-all-for-the-basement-coders/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep19.mp3" length="23271278" type="audio/mpeg" />
		</item>
		<item>
		<title>Transcript of our Interview with Justin Kestelyn and Henrik Stahl</title>
		<link>http://basementcoders.com/2010/10/transcript-of-our-interview-with-justin-kestelyn-and-henrik-stahl/</link>
		<comments>http://basementcoders.com/2010/10/transcript-of-our-interview-with-justin-kestelyn-and-henrik-stahl/#comments</comments>
		<pubDate>Fri, 01 Oct 2010 14:53:36 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=788</guid>
		<description><![CDATA[The interview with Oracle's Justin Kestelyn &#038; Henrik Stahl, although pretty decent in audio quality, had more than a few requests for a transcription. So Craig Tataryn (that's me!) hammered out a transcript for all to see (and pick a part). Click the image on the left to view!]]></description>
			<content:encoded><![CDATA[<div class="entrycontent"><a href="http://www.basementcoders.com/transcripts/Oracle_J1_Transcript.html"><img src="http://basementcoders.com/wp-content/uploads/2010/09/transcript.png" alt="Oracle's Justin Kestelyn &#038; Henrik Stahl Interview Transcript" title="Oracle's Justin Kestelyn &#038; Henrik Stahl Interview Transcript" class="alignleft size-full" /></a>The interview with <a href="http://basementcoders.com/?p=745">Oracle's Justin Kestelyn &#038; Henrik Stahl</a>, although pretty decent in audio quality, had more than a few requests for a transcription.  So Craig Tataryn (that's me!) hammered out a transcript for all to see (and pick a part).</div>
<p>Click the image on the left to view!</p>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/10/transcript-of-our-interview-with-justin-kestelyn-and-henrik-stahl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Future of Java Rides on Guys Like These: Interview with Oracle&#8217;s Justin Kestelyn and Henrik Stahl</title>
		<link>http://basementcoders.com/2010/09/the-future-of-java-rides-on-guys-like-these-interview-with-oracles-justin-kestelyn-and-henrik-stahl/</link>
		<comments>http://basementcoders.com/2010/09/the-future-of-java-rides-on-guys-like-these-interview-with-oracles-justin-kestelyn-and-henrik-stahl/#comments</comments>
		<pubDate>Wed, 29 Sep 2010 16:20:10 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=745</guid>
		<description><![CDATA[Edit: The transcript can be found here Once again we present another special Basement Coders podcast Live from Oracle's JavaOne conference in San Francisco. We sit down with Oracle's Justin Kestelyn head of Oracle's OTN network and Henrik Stahl, product and strategy lead for Java Platform technologies to talk about the challenges they faced integrating [...]]]></description>
			<content:encoded><![CDATA[<p>
<strong>Edit: The transcript can be found <a href="http://basementcoders.com/?p=788">here</a></strong></p>
<p><div class="aligncenter">
<img src="http://basementcoders.com/wp-content/uploads/2010/09/Kestelyn_polaroid.jpg" alt="Justin Kestelyn" title="Justin Kestelyn" class="size-full" /><img src="http://basementcoders.com/wp-content/uploads/2010/09/henrik_polaroid.jpg" alt="Henrik Stahl" title="Henrik Stahl" class="size-full" />
</div>
<p>
Once again we present another special Basement Coders podcast Live from Oracle's JavaOne conference in San Francisco.</p>
<p>We sit down with Oracle's <a href="http://blogs.oracle.com/otn/">Justin Kestelyn</a> head of Oracle's <a href="http://www.oracle.com/technetwork/index.html">OTN network</a> and <a href="http://blogs.oracle.com/henrik/">Henrik Stahl</a>, product and strategy lead for Java Platform technologies to talk about the challenges they faced integrating the Oracle and Java communities and Oracle's commitment and goals for Java and the Open Source community</p>
<p>We think this makes for a nice contrast with our previous talk with James Gosling.  If Justin, Henrik and Oracle can deliver on what is said in this cast, then Java is in good hands.  It was great that both Henrik and Justin could take time out of their busy schedules, I mean quite literally JavaOne for them is an absolute roller coaster ride, so we appreciate very much the opportunity to talk with them.</p>

<p>Enjoy!</p>
<p><strong>Note:</strong> As with our previous cast, this one was taped guerrila-style from the Mason St. Tent. For the most part it's ok, but from <strong>11:36-15:18</strong> minutes, you'll hear the Google lady get on her microphone to prod geeks into playing with Lego.  Someone should have told her: you don't need a microphone to get geeks to play with Lego!  Wait out the background noise and things go back to normal.  </p>
<div style="width: 90%; border: thick double black;padding:10px;margin-left:25px;">
Before you accuse us of using "kid gloves" or skirting the real issues surrounding Oracle and Java it should be known that we had an Oracle PR chaperon overseeing the cast (you can see her in the pic below).  It's why you won't hear the words "Google", "JCP" or "lawsuit" anywhere in this cast.  That being said, we tried to get answers for the Open Source community as to the direction Oracle is taking things.  I think Henrik and Justin did a great job, they seem very committed to Java's future.
</div>
<div class="wp-caption aligncenter" style="width: 324px"><a href="http://basementcoders.com/wp-content/uploads/2010/09/Mason_Tent.jpg"><img src="http://basementcoders.com/wp-content/uploads/2010/09/Mason_Tent-50percent.jpg" alt="" title="The Basement Coders with Justin Kestelyn" /></a><p class="wp-caption-text">Click to see a bigger version</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/09/the-future-of-java-rides-on-guys-like-these-interview-with-oracles-justin-kestelyn-and-henrik-stahl/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_J1Oracle2010.mp3" length="20537204" type="audio/mpeg" />
		</item>
		<item>
		<title>Transcript of our Interview with James Gosling</title>
		<link>http://basementcoders.com/2010/09/transcript-of-our-interview-with-james-gosling/</link>
		<comments>http://basementcoders.com/2010/09/transcript-of-our-interview-with-james-gosling/#comments</comments>
		<pubDate>Tue, 28 Sep 2010 17:18:24 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[James Gosling]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=750</guid>
		<description><![CDATA[The James Gosling Interview was pretty tough to hear at points, what with all the background noise. Here is a transcript of the conversation so you can clear up some noisier parts of the cast. Special thanks to Kathleen Kriz and Cameron McKenzie for doing this! Click the image on the left to view!]]></description>
			<content:encoded><![CDATA[<div class="entrycontent"><a href="http://www.basementcoders.com/transcripts/James_Gosling_Transcript.html"><img src="http://basementcoders.com/wp-content/uploads/2010/09/transcript.png" alt="The James Gosling Interview Transcript" title="The James Gosling Interview Transcript" class="alignleft size-full" /></a>The <a href="http://basementcoders.com/?p=721">James Gosling Interview</a> was pretty tough to hear at points, what with all the background noise.  Here is a transcript of the conversation so you can clear up some noisier parts of the cast.  Special thanks to Kathleen Kriz and <a href="http://www.hibernatemadeeasy.com/">Cameron McKenzie</a> for doing this!</div>
<p>Click the image on the left to view!</p>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/09/transcript-of-our-interview-with-james-gosling/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Interview with James Gosling</title>
		<link>http://basementcoders.com/2010/09/interview-with-james-gosling/</link>
		<comments>http://basementcoders.com/2010/09/interview-with-james-gosling/#comments</comments>
		<pubDate>Wed, 22 Sep 2010 22:07:50 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[James Gosling]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=721</guid>
		<description><![CDATA[Edit: The transcript can be found here Picture a Sunday Evening, you've just arrived from where ever you hail from to San Francisco. You got up at some ungodly hour to catch your flight, only to learn its been delayed 2 hours. Once you arrive catch the BART to your hotel, and come to realize [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<p>
<strong>Edit: The transcript can be found <a href="http://basementcoders.com/?p=750">here</a></strong></p>
<p>
<img src="http://basementcoders.com/wp-content/uploads/2010/09/gosling_polaroid.png" alt="James Gosling" title="James Gosling" class="alignright size-full" />Picture a Sunday Evening, you've just arrived from where ever you hail from to San Francisco.  You got up at some ungodly hour to catch your flight, only to learn its been delayed 2 hours.  Once you arrive catch the <a href="http://www.bart.gov/">BART</a> to your hotel, and come to realize "yeah, even two hours difference in timezone does add up".  You have to put on your game-face though, there are Mai Tais to be drunk at the <a href="http://www.tongaroom.com/">Tonga Room</a>, and there are <a href="http://www.oracle.com/us/javaonedevelop/index.html">JavaOne</a> "after parties" to hit.</p>
<p>The After Party circuit is a key sub-layer to the conference experience.  Even if you aren't connected, you can still get into these "who's who" showcases as a lot of the partners open them up to anyone who registers on their respective websites.</p>
<p>For instance, our first after-party was the <a href="https://glassfish.dev.java.net/">GlassFish</a> party which took place at a favourite haunt of the Basement Coders called "<a href="http://maps.google.com/maps/place?oe=utf-8&#038;rls=org.mozilla:en-US:official&#038;client=firefox-a&#038;um=1&#038;ie=UTF-8&#038;q=the+thirsty+bear+san+francisco&#038;fb=1&#038;gl=us&#038;hq=the+thirsty+bear&#038;hnear=San+Francisco,+CA&#038;cid=16117366048065422338">The Thirsty Bear</a>". The beer there is just spectacular. These after-parties are a great way to meet people you might never have talked to outside of a mailing list. Beer greases all social wheels.</p>
<p><img src="http://basementcoders.com/wp-content/uploads/2010/09/bcoders_gosling_polaroid.png" alt="James Gosling and The Basement Coders" title="James Gosling and The Basement Coders" class="alignleft size-full" />About a half hour into our libations in walks a legend: <a href="http://nighthacks.com/roller/jag/">James Gosling</a>, creator of Java itself.  Nervously, but keeping our cool, we approached and introduced ourselves.  We left it at that. As the beers flowed, our courage and machinations began too as well.  "What if, now just what if, we could get Gosling to do a cast?"  But doubting thoughts prevailed: "Nah we aren't big enough" "Do we really want to disturb a guy drinking his beer?"  Quickly some of the Coder's wives keyed into our anxiety over the issue.  Wanting to play match maker, they approached James and asked him if he'd be willing to do a podcast with us. And wouldn't you know it, he whipped out his iPhone (yay James!), opened his calendar and said "Sure! What works for you guys?"  Speechless.</p>
<p>Have a good long listen to our coffee-shop interview with James Gosling.  It's an unfiltered and organic talk with a legend of our craft.  A Coder's Coder, and an all around great guy.  If you like what you hear, why not buy <a href="http://www.cafepress.com/OrcOmit">one of his T-shirts</a> and support the Free Java movement?</p>

<p>Enjoy!</p>
<p><strong>P.S.:</strong> We'll try to work on the quality of cast and filter out more of the background noise.  <a href="http://theserverside.com/">The Server Side</a> has offered to transcribe the cast, so stay tuned for a link to that.  If you know any audio processing tricks, please let us know!  We also have other related media which we'll post soon.</p>
<p><a href="http://zeroturnaround.com/jrebel"><img src="http://basementcoders.com/wp-content/uploads/2010/09/jrebel_col_150.png" alt="JRebel" title="JRebel" class="alignright size-full" /></a><strong>P.P.S.</strong> we also met a group of great guys from <a href="http://www.zeroturnaround.com/">Zero Turn Around</a>, they make this really interesting (and useful) product called <a href="http://www.zeroturnaround.com/jrebel/">JRebel</a> which helps Java developers such that when you make changes to your code base, you no longer have to restart your application server to realize the changes.  So no more restarting Tomcat or Jetty when you change your underlying source code!  Very very cool stuff. Even better is they want to become a show sponsor, which is awesomer (probably not a word <img src='http://basementcoders.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  ).</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/09/interview-with-james-gosling/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_gosling.mp3" length="0" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 16 &#8211; Scala and Akka an Interview with Jonas Boner</title>
		<link>http://basementcoders.com/2010/09/episode-16-scala-and-akka-an-inteview-with-jonas-boner/</link>
		<comments>http://basementcoders.com/2010/09/episode-16-scala-and-akka-an-inteview-with-jonas-boner/#comments</comments>
		<pubDate>Mon, 13 Sep 2010 20:12:40 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=711</guid>
		<description><![CDATA[In this episode Justin and Craig have the privilege of speaking with Jonas Bonér about Scala and Akka. Jonas is a highly intelligent guy who's worked at Terracotta, BEA and was a founder of AspectWerkz. We learn what Scala is and how the Akka framework helps developers write concurrent and fault tolerant systems. If you [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<img src="http://basementcoders.com/wp-content/uploads/2010/09/jonas_boner_polaroid.png" alt="Jonas Bonér" title="Jonas Bonér" class="alignright size-full" />In this episode Justin and Craig have the privilege of speaking with <a href="http://jonasboner.com/">Jonas Bonér</a> about <a href="http://www.scala-lang.org/">Scala</a> and <a href="http://www.akkasource.com">Akka</a>.  Jonas is a highly intelligent guy who's worked at Terracotta, BEA and was a founder of <a href="http://aspectwerkz.codehaus.org/">AspectWerkz</a>.</p>
<p>
We learn what Scala is and how the Akka framework helps developers write concurrent and fault tolerant systems.  If you like what you hear from Jonas, be sure to follow him on Twitter <a href="http://twitter.com/jboner">@jboner</a><br />
<br />
<img border="0" src="http://basementcoders.com/wp-content/uploads/2010/05/delicious_icon.gif" /> <strong>Links used during this podcast can be found in <a href="http://del.icio.us/network/bcoders/episode16+topics">del.icio.us</a>:</strong><ul class="delicious"><li>No bookmarks avaliable.</li></ul></p>

<p>Enjoy!
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/09/episode-16-scala-and-akka-an-inteview-with-jonas-boner/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep16.mp3" length="42970954" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 15 &#8211; The Personalities of IT (and how to deal with them)</title>
		<link>http://basementcoders.com/2010/08/episode-15-the-personalities-of-it-and-how-to-deal-with-them/</link>
		<comments>http://basementcoders.com/2010/08/episode-15-the-personalities-of-it-and-how-to-deal-with-them/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 16:11:26 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=703</guid>
		<description><![CDATA[In this episode Craig, Jeff, Justin, Guillermo and Jason explore their experiences with the Personalities of IT. We all know, our profession has some really odd-birds, everything from know-it alls, slackers to people with less than stellar personal hygiene. You might just pickup some tips on how to deal with these characters, or at least [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<img src="http://basementcoders.com/wp-content/uploads/2010/08/milton-polaroid.png" alt="Somebody took my stapler" title="Somebody took my stapler" class="alignright size-full" />In this episode Craig, Jeff, Justin, Guillermo and Jason explore their experiences with the <em>Personalities of IT</em>.  We all know, our profession has some really odd-birds, everything from know-it alls, slackers to people with less than stellar personal hygiene.  You might just pickup some tips on how to deal with these characters, or at least finish listening to the podcast with a sense of "<strong>at least I'm not alone</strong>"</p>
<p><h3>Let us know your experiences with the "Personalities of IT", by adding <a href="http://basementcoders.com/?p=703#comments">your comments</a> to this post!</h3>
<p>
<br />
<img border="0" src="http://basementcoders.com/wp-content/uploads/2010/05/delicious_icon.gif" /> <strong>Links used during this podcast can be found in <a href="http://del.icio.us/network/bcoders/episode15+topics">del.icio.us</a>:</strong><ul class="delicious"><li>No bookmarks avaliable.</li></ul></p>

<p>Enjoy!
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/08/episode-15-the-personalities-of-it-and-how-to-deal-with-them/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep15.mp3" length="43553067" type="audio/mpeg" />
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep15.mp3" length="43553067" type="audio/mpeg" />
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep15.mp3" length="43553067" type="audio/mpeg" />
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep15.mp3" length="43553067" type="audio/mpeg" />
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep15.mp3" length="43553067" type="audio/mpeg" />
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep15.mp3" length="43553067" type="audio/mpeg" />
		</item>
		<item>
		<title>Scala + Wicket</title>
		<link>http://basementcoders.com/2010/08/scala-wicket/</link>
		<comments>http://basementcoders.com/2010/08/scala-wicket/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 15:28:27 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=698</guid>
		<description><![CDATA[Great Stack OverFlow question about experiences with writing Wicket code in Scala answered by Peter Thomas. To paraphrase: * certainly a lot less boilerplate and less 'noise' * Scala feels like a very good fit for Wicket when it comes to nesting components * for e.g. less work / lines of code to define inner [...]]]></description>
			<content:encoded><![CDATA[<p>Great Stack OverFlow question about experiences with writing <a href="http://stackoverflow.com/questions/2104724/your-experience-with-scalawicket">Wicket code in Scala</a> answered by <a href="http://ptrthomas.wordpress.com">Peter Thomas</a>.  To paraphrase:</p>
<blockquote><p>    * certainly a lot less boilerplate and less 'noise'<br />
    * Scala feels like a very good fit for Wicket when it comes to nesting components<br />
    * for e.g. less work / lines of code to define inner classes / constructors, so can do it mostly in-line and keep nesting without much clutter<br />
    * and at the same time override framework methods as one-liners. nice !<br />
    * Scala seemed to work well with Wicket Generics, compiler seemed to be a lot more stricter at times, maybe this is a good thing. NetBeans plugin helps, but still buggy and slow at times.<br />
    * Not a very complex app, so did not get a chance to apply closures and FP much<br />
    * There are some gotchas you need to be aware of like this: <a href="http://stubbisms.wordpress.com/2009/02/18/fighting-scala-scala-to-java-list-conversion/">Fighting Scala – Scala to Java List Conversion</a> - for the time being I managed using Java collections for domain object properties.</p></blockquote>
<p>Good stuff, look forward to playing around with <a href="http://www.scala-lang.org/">Scala</a>, especially on a <a href="http://wicket.apache.org">Wicket</a> project.</p>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/08/scala-wicket/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Episode 14 &#8211; Apache Camel</title>
		<link>http://basementcoders.com/2010/08/episode-14-apache-camel/</link>
		<comments>http://basementcoders.com/2010/08/episode-14-apache-camel/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 15:16:40 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=684</guid>
		<description><![CDATA[In this episode Craig, Jeff, Justin, Guillermo and Jason explore Apache Camel which is a Java based Enterprise Integration Patterns implementation (EIP) stack. EIP establishes a set of patterns which can be chunked together (like lego blocks) to form a stable message workflow system. The basic premise is: a message comes in (or is retrieved), [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<img src="http://basementcoders.com/wp-content/uploads/2010/08/camel-logo.png" alt="Apache Camel" title="Apache Camel" class="alignright size-full" />In this episode Craig, Jeff, Justin, Guillermo and Jason explore <a href="http://camel.apache.org/">Apache Camel</a> which is a Java based <a href="http://www.eaipatterns.com/toc.html">Enterprise Integration Patterns implementation</a> (EIP) stack.  EIP establishes a set of patterns which can be chunked together (like lego blocks) to form a stable message workflow system.  The basic premise is: a message comes in (or is retrieved), it's transformed, and shipped out the door; at which point it might be transformed again, etc...</p>
<p><a href="http://basementcoders.com/?p=691">We have a sponsor</a>!  Thanks <a href="http://www.crashplan.com/">Crash Plan</a>!  Each week we'll be <a href="http://basementcoders.com/crashplan">giving away</a> a free 1 year unlimited subscription to their Crash Plan Central off-site backup system!  So listen for your chance to win!</p>
<p><em><strong>DISCLAIMER:</strong></em> if you are sick of listening to our obsession about smart phones, you might want to skip ahead to around the 30 minute mark <img src='http://basementcoders.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>And finally I think I've figured out the best process for exporting the podcast such that everyone's voices come through at the same level.  Thanks to a tip from Alex (previous basementcoder) I changed my export process to include using <a href="http://www.conversationsnetwork.org/levelator">Levelator</a>.  That, coupled with <a href="http://forum.skype.com/index.php?showtopic=186941">disabling Skype's annoying "auto gain"</a> seems to have done the trick.  Please let us know if you experience any audio problems!</p>
<img border="0" src="http://basementcoders.com/wp-content/uploads/2010/05/delicious_icon.gif" /> <strong>Links used during this podcast can be found in <a href="http://del.icio.us/network/bcoders/episode14+topics">del.icio.us</a>:</strong><ul class="delicious"><li>No bookmarks avaliable.</li></ul>

<p>Enjoy!
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/08/episode-14-apache-camel/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep14.mp3" length="42800427" type="audio/mpeg" />
		</item>
		<item>
		<title>Crash Plan &#8211; Our new Show Sponsor!</title>
		<link>http://basementcoders.com/2010/08/crash-plan-our-new-show-sponsor/</link>
		<comments>http://basementcoders.com/2010/08/crash-plan-our-new-show-sponsor/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 15:14:51 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=691</guid>
		<description><![CDATA[Well, I have great news in that we now have a Show Sponsor! Crash Plan, which provides a multi-platform backup client (for free) with the option of using their off-site Crash Plan Central service is our new show sponsor! We are very excited and thankful to Crash Plan for stepping up to the plate, all [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<a href="http://crashplan.com/ref/basementcoders.html"><img src="http://basementcoders.com/images/CrashPlan-logo.png" alt="Crash Plan" title="Crash Plan" class="alignright size-full" /></a>Well, I have great news in that we now have a Show Sponsor!  <a href="http://crashplan.com/ref/basementcoders.html">Crash Plan</a>, which provides a multi-platform backup client (for free) with the option of using their off-site <a href="http://b4.crashplan.com/consumer/features-central.html">Crash Plan Central</a> service is our new show sponsor!</p>
<p>
We are very excited and thankful to Crash Plan for stepping up to the plate, all the Basement Coders are personal users of Crash Plan and just absolutely love the service.</p>
<p><h3>Contest</h3>
<p>With the sponsorship comes free 1 year unlimited Crash Plan Central subscriptions! All you have to do is <a href="http://basementcoders.com/crashplan">follow the steps</a> to enter.
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/08/crash-plan-our-new-show-sponsor/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Episode 13 &#8211; Maven 3: Interview with PMC Chair Brian Fox</title>
		<link>http://basementcoders.com/2010/08/episode-13-maven-3-interview-with-pmc-chair-brian-fox/</link>
		<comments>http://basementcoders.com/2010/08/episode-13-maven-3-interview-with-pmc-chair-brian-fox/#comments</comments>
		<pubDate>Mon, 02 Aug 2010 15:16:27 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=674</guid>
		<description><![CDATA[With the Maven 3 betas being out and packing a tonne of cool features we decided that we needed to sit down and talk with someone in the know. Enter Brian Fox, PMC Chair Apache Maven and VP of Engineering at Sonatype (the fellows who make Maven Repositories manageable via their Nexus product). Brian gave [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<img src="http://basementcoders.com/wp-content/uploads/2010/07/brian_fox_framed.jpg" alt="Brian Fox" title="Brian Fox" class="alignright size-full" />With the<a href="http://maven.apache.org/download.html#Maven_3.0-beta-1"> Maven 3 betas</a> being out and packing a tonne of cool features we decided that we needed to sit down and talk with someone in the know.  Enter <a href="http://www.sonatype.com/people/author/brian/">Brian Fox</a>, PMC Chair Apache Maven and VP of Engineering at <a href="http://www.sonatype.com/">Sonatype</a> (the fellows who make Maven Repositories manageable via their <a href="http://www.sonatype.com/products/nexus">Nexus</a> product).</p>
<p>Brian gave us some excellent insider knowledge on Maven 3 (and Maven in general), what it means for all of us who will be upgrading from Maven 2.x and a detailed overview of the killer features packed into Maven 3 including<a href="https://cwiki.apache.org/confluence/display/MAVEN/Parallel+builds+in+Maven+3"> Parallel Builds</a> and the new Repository API.  We thank Brian very much for his excellent answers!</p>
<img border="0" src="http://basementcoders.com/wp-content/uploads/2010/05/delicious_icon.gif" /> <strong>Links used during this podcast can be found in <a href="http://del.icio.us/network/bcoders/episode13+topics">del.icio.us</a>:</strong><ul class="delicious"><li>No bookmarks avaliable.</li></ul>

<p>Enjoy!
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/08/episode-13-maven-3-interview-with-pmc-chair-brian-fox/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep13.mp3" length="40005298" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 12 &#8211; Google&#8217;s Nexus One Android Phone</title>
		<link>http://basementcoders.com/2010/07/episode-12-googles-nexus-one-android-phone/</link>
		<comments>http://basementcoders.com/2010/07/episode-12-googles-nexus-one-android-phone/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 18:20:54 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=670</guid>
		<description><![CDATA[Well, we've talked quite a lot about the differences between Android and iPhone but oddly enough none of us have actually owned an Android phone! This week, Jeff takes us through his experience with his brand spanking new Google Nexus One Android smart phone. Now Jeff is a pretty hard core Apple fan, however he [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<img src="http://basementcoders.com/wp-content/uploads/2010/07/nexus_one.jpg" alt="Google's Nexus One" title="Google's Nexus One" class="alignright size-full" />Well, <a href="http://basementcoders.com/?p=21">we've talked</a> quite a lot about the differences between <a href="http://basementcoders.com/?p=444">Android and iPhone</a> but oddly enough none of us have actually owned an Android phone!  This week, Jeff takes us through his experience with his brand spanking new Google<a href="http://www.google.com/googlephone/tour/"> Nexus One Android</a> smart phone.  Now Jeff is a pretty hard core Apple fan, however he has been impressed with the performance and out-of-the-box-without-hacking features the Nexus One has to offer.</p>
<p>Unfortunately, no sooner had we recorded this podcast (over two weeks ago, I know, just been too busy to edit and publish it!) Google discontinued sales of the Nexus One.  You can still find it on eBay, however it seems people are charging a premium for them <img src='http://basementcoders.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />   We can't even say Jeff got "Apple'd" on this one, it's not like Google announced a new shiny version of the phone that is <a href="http://theoatmeal.com/comics/apple">0.0025% faster</a>.  No, it appears we have a new name: he's been "Google'd" - release a product then abandon it.  That reminds me... I wonder how Google is doing with <a href="http://wave.google.com/">Wave</a> these days?</p>
<img border="0" src="http://basementcoders.com/wp-content/uploads/2010/05/delicious_icon.gif" /> <strong>Links used during this podcast can be found in <a href="http://del.icio.us/network/bcoders/episode12+topics">del.icio.us</a>:</strong><ul class="delicious"><li>No bookmarks avaliable.</li></ul>

<p>Enjoy!
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/07/episode-12-googles-nexus-one-android-phone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep12.mp3" length="30741024" type="audio/mpeg" />
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep12.mp3" length="30741024" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 11 &#8211; All about Open Core Licensing</title>
		<link>http://basementcoders.com/2010/07/episode-11-all-about-open-core-licensing/</link>
		<comments>http://basementcoders.com/2010/07/episode-11-all-about-open-core-licensing/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 03:39:45 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>
		<category><![CDATA[licensing]]></category>
		<category><![CDATA[open core]]></category>
		<category><![CDATA[oss]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=567</guid>
		<description><![CDATA[Finally! We took a bit of a break seeing as how there was a holiday in the US and Canada. But Craig, Guillermo, Justin and Jason are back in Episode 11 discussing a bit of a hot button topic: Open Core Licensing. Essentially, a type of licensing which has made a lot of people rich [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<img src="http://basementcoders.com/wp-content/uploads/2010/07/apple_core.jpg" alt="Open Core" title="Open Core" class="alignright size-full" />Finally!   We took a bit of a break seeing as how there was a holiday in the US and Canada.  But Craig, Guillermo, Justin and Jason are back in Episode 11 discussing a bit of a hot button topic: <a href="http://alampitt.typepad.com/lampitt_or_leave_it/2008/08/open-core-licen.html">Open Core Licensing</a>.  Essentially, a type of licensing which has made a lot of people rich in Open Source *<strong>cough</strong>* MySql *<strong>cough</strong>*.</p>
<p>Find out what Open Core is all about and have a listen!</p>
<img border="0" src="http://basementcoders.com/wp-content/uploads/2010/05/delicious_icon.gif" /> <strong>Links used during this podcast can be found in <a href="http://del.icio.us/network/bcoders/episode11+topics">del.icio.us</a>:</strong><ul class="delicious"><li>No bookmarks avaliable.</li></ul>

<p>Enjoy!
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/07/episode-11-all-about-open-core-licensing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep11.mp3" length="37571208" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 10 &#8211; REST vs. SOAP, Closures in JDK7, etc&#8230;</title>
		<link>http://basementcoders.com/2010/06/episode-10-rest-vs-soap-closures-in-jdk7-etc/</link>
		<comments>http://basementcoders.com/2010/06/episode-10-rest-vs-soap-closures-in-jdk7-etc/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 17:23:44 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>
		<category><![CDATA[ajp]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[closures]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[webservices]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=559</guid>
		<description><![CDATA[In this podcast Craig, Jeff, Jason and Justin and Guillermo take on a range of topics from REST vs. SOAP web services, Closures in Java7 and the Defender Methods proposal, which option is the best for running Apache HTTP with a J2EE container and how to financially bootstrap your Start Up company. Ever curious what [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<img src="http://basementcoders.com/wp-content/uploads/2010/06/basement_fuel.jpg" alt="The Perfect Combo" title="The Perfect Combo" class="alignright size-full" />In this podcast Craig, Jeff, Jason and Justin and Guillermo take on a range of topics from <a href="http://www.dzone.com/links/rest_has_put_enterprise_it_back_five_years_sun_ha.html">REST vs. SOAP</a> web services, <a href="http://www.baptiste-wicht.com/2010/05/java-7-add-public-defender-methods-to-java-interfaces/">Closures in Java7 and the Defender Methods proposal</a>, which option is the best for running <a href="http://www.dzone.com/links/r/deciding_between_modjk_modproxyhttp_and_modproxya.html">Apache HTTP with a J2EE container</a> and how to <a href="http://www.dzone.com/links/r/github_founder_tells_you_how_to_bootstrap_a_busin.html">financially bootstrap your Start Up</a> company.</p>
<p>Ever curious what the Basement Coder's fuel is?  What allows us to do the podcast every week even when it's taped directly following one of the coder's weekly hockey games?  Two words: Espresso and Beer. </p>
<img border="0" src="http://basementcoders.com/wp-content/uploads/2010/05/delicious_icon.gif" /> <strong>Links used during this podcast can be found in <a href="http://del.icio.us/network/bcoders/episode10+topics">del.icio.us</a>:</strong><ul class="delicious"><li>No bookmarks avaliable.</li></ul>

<p>Enjoy!
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/06/episode-10-rest-vs-soap-closures-in-jdk7-etc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep10.mp3" length="47850810" type="audio/mpeg" />
		</item>
		<item>
		<title>Cerner &#8211; A company you DONOT want to work for&#8230;</title>
		<link>http://basementcoders.com/2010/06/cerner-a-company-you-donot-want-to-work-for/</link>
		<comments>http://basementcoders.com/2010/06/cerner-a-company-you-donot-want-to-work-for/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 04:06:41 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=556</guid>
		<description><![CDATA[Wow, here's a prime example of a company you don't want to be working for, checkout this (de)motivational email it's CEO Neal Patterson sent... From: Patterson,Neal To: DL_ALL_MANAGERS; Subject:MANAGEMENT DIRECTIVE: Week #10_01: Fix it or changes will be made Importance: High To the KC_based managers: I have gone over the top. I have been making [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
Wow, here's a prime example of a company you don't want to be working for, checkout this (de)motivational email it's CEO Neal Patterson sent...</p>
<blockquote><p>
From: Patterson,Neal<br />
To: DL_ALL_MANAGERS;<br />
Subject:MANAGEMENT DIRECTIVE: Week #10_01: Fix it or changes will be made<br />
Importance: High<br />
To the KC_based managers:</p>
<p>I have gone over the top. I have been making this point for over one year.</p>
<p>We are getting less than 40 hours of work from a large number of our<br />
KC-based EMPLOYEES. The parking lot is sparsely used at 8AM; likewise<br />
at 5PM. As managers — you either do not know what your EMPLOYEES are<br />
doing; or YOU do not CARE. You have created expectations on the work<br />
effort which allowed this to happen inside Cerner, creating a very<br />
unhealthy environment. In either case, you have a problem and you will<br />
fix it or I will replace you.</p>
<p>NEVER in my career have I allowed a team which worked for me to think<br />
they had a 40 hour job. I have allowed YOU to create a culture which<br />
is permitting this. NO LONGER.</p>
<p>At the end of next week, I am plan to implement the following:<br />
1. Closing of Associate Center to EMPLOYEES from 7:30AM to 6:30PM.<br />
2. Implementing a hiring freeze for all KC based positions. It will<br />
require Cabinet approval to hire someone into a KC based team. I chair<br />
our Cabinet.<br />
3. Implementing a time clock system, requiring EMPLOYEES to ‘punch in’<br />
and ‘punch out’ to work. Any unapproved absences will be charged to<br />
the EMPLOYEES vacation.<br />
4. We passed a Stock Purchase Program, allowing for the EMPLOYEE to<br />
purchase Cerner stock at a 15% discount, at Friday’s BOD meeting. Hell<br />
will freeze over before this CEO implements ANOTHER EMPLOYEE benefit<br />
in this Culture.<br />
5. Implement a 5% reduction of staff in KC.<br />
6. I am tabling the promotions until I am convinced that the ones<br />
being promoted are the solution, not the problem. If you are the<br />
problem, pack you bags.</p>
<p>I think this parental type action SUCKS. However, what you are doing,<br />
as managers, with this company makes me SICK. It makes sick to have to<br />
write this directive.</p>
<p>I know I am painting with a broad brush and the majority of the KC<br />
based associates are hard working, committed to Cerner success and<br />
committed to transforming health care. I know the parking lot is not a<br />
great measurement for ‘effort’. I know that ‘results’ is what counts,<br />
not ‘effort’. But I am through with the debate.</p>
<p>We have a big vision. It will require a big effort. Too many in KC are<br />
not making the effort.</p>
<p>I want to hear from you. If you think I am wrong with any of this,<br />
please state your case. If you have some ideas on how to fix this<br />
problem, let me hear those. I am very curious how you think we got<br />
here. If you know team members who are the problem, let me know.<br />
Please include (copy) Kynda in all of your replies.</p>
<p>I STRONGLY suggest that you call some 7AM, 6PM and Saturday AM team<br />
meetings with the EMPLOYEES who work directly for you. Discuss this<br />
serious issue with your team. I suggest that you call your first<br />
meeting — tonight. Something is going to change.</p>
<p>I am giving you two weeks to fix this. My measurement will be the<br />
parking lot: it should be substantially full at 7:30 AM and 6:30 PM.<br />
The pizza man should show up at 7:30 PM to feed the starving teams<br />
working late. The lot should be half full on Saturday mornings. We<br />
have a lot of work to do. If you do not have enough to keep your teams<br />
busy, let me know immediately.</p>
<p>Folks this is a management problem, not an EMPLOYEE problem.<br />
Congratulations, you are management. You have the responsibility for<br />
our EMPLOYEES. I will hold you accountable. You have allowed this to<br />
get to this state. You have two weeks. Tick, tock</p>
<p>Neal …..<br />
Chairman &#038; Chief Executive Officer<br />
Cerner Corporation www.cerner.com<br />
2800 Rockcreek Parkway; Kansas City, Missouri 64117<br />
“We Make Health Care Smarter”
</p></blockquote>
<p>Wow, just...wow.
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/06/cerner-a-company-you-donot-want-to-work-for/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Episode 9 &#8211; Remote Development Governance</title>
		<link>http://basementcoders.com/2010/06/episode-9-remote-development-governance-2/</link>
		<comments>http://basementcoders.com/2010/06/episode-9-remote-development-governance-2/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 19:47:48 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[offshore]]></category>
		<category><![CDATA[outsourcing]]></category>
		<category><![CDATA[remote]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=550</guid>
		<description><![CDATA[Want to outsource a project but don't know how to go about it? Scared about quality? This podcast as well as The Tenets of Remote Development Governance will help. In this podcast Craig, Jeff, Jason and Justin convey our recommendation on how to successfully partake in and manage remote development projects based on from our [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
Want to outsource a project but don't know how to go about it?  Scared about quality?  This podcast as well as <a href="http://basementcoders.com/?p=517">The Tenets of Remote Development Governance</a> will help.</p>
<p>In this podcast Craig, Jeff, Jason and Justin convey our recommendation on how to successfully partake in and manage remote development projects based on from our experience our collective involvement with outsourced projects.  We've seen it all, we know the do's and the don'ts, so have a listen!</p>
<img border="0" src="http://basementcoders.com/wp-content/uploads/2010/05/delicious_icon.gif" /> <strong>Links used during this podcast can be found in <a href="http://del.icio.us/network/bcoders/episode9+topics">del.icio.us</a>:</strong><ul class="delicious"><li>No bookmarks avaliable.</li></ul>

<p>Enjoy!
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/06/episode-9-remote-development-governance-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep09.mp3" length="49249824" type="audio/mpeg" />
		</item>
		<item>
		<title>Tenets of Remote Development Governance</title>
		<link>http://basementcoders.com/2010/06/tenets-of-remote-development-governance/</link>
		<comments>http://basementcoders.com/2010/06/tenets-of-remote-development-governance/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 19:36:35 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Craig]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[offshore]]></category>
		<category><![CDATA[offshoring]]></category>
		<category><![CDATA[outsourcing]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=517</guid>
		<description><![CDATA[Please checkout the podcast on this topic! It's Episode 9 Remote Development Governance Remote development is usually implemented as a cost saving measure, and thus it's only true metric of success is whether money was saved by augmenting a team with remote developers. After being in this business for close to a decade, I can [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><em>Please checkout the podcast on this topic!  It's <a href="http://basementcoders.com/?p=550">Episode 9</a></em></p></blockquote>
<h2>Remote Development Governance</h2>
<p>Remote development is usually implemented as a cost saving measure, and thus it's only true metric of success is whether money was saved by augmenting a team with remote developers.  After being in this business for close to a decade, I can personally recommend not making *money* your absolute metric of success.  Do remote development teams cost you less?  Yes, but, only if they deliver with quality and are managed properly.  A lot of companies seem to jump into Remote Development without a real plan, if you want to succeed at a Remote Development initiative please read on.<br />
<br/></p>
<h2>The Tenets of Remote Development</h2>
<p>The following are a set of rules for governing your remote development projects be them offshore or onshore.  Apply these simple rules and you'll be on your way to successful development, don't go into remote development unprepared.<br />
<br/><br />
<span id="more-517"></span></p>
<h2 style="border-bottom:0px;"><span style="color:red;">Problem:</span> there aren't enough local developers for our project</h2>
<p><br/></p>
<h3>Developer DNA</h3>
<p>Large centres like Silicon Valley and smaller sized ones like Minneapolis suffer brain drain but in different ways.  Large centres have many companies competing for the same set of people, albeit a large set of people.  Essentially, the amount of companies depletes the stock of talent and drives up salaries. Smaller centers on the other hand have a moderate amount of companies competing for people, the amount of skilled people is relatively low which leads to the same problems the larger centers have.</p>
<p>To expand the developer DNA at your organization you need to explore outside your local gene pool or invest time and resources training less experienced local talent.  Smaller centers like Winnipeg-Manitoba or Fargo-North Dakota offer University Educated developers. The problem with smaller centers from the developer perspective, is the number of companies available to them.  The good developers are either forced to "settle" for a local company or relocate to a larger center.<br />
<br/></p>
<h2 style="border-bottom:0px;"><span style="color:red;">Problem:</span> our project needs developers during our core hours</h2>
<p><br/></p>
<h3>Talent in your Timezone</h3>
<p><em>Geographically challenged smart people</em><br />
Not all developers can run off to Redmond or Palo Alto on a whim and start a new life at a fortune 500 technology company.  Some have families or other ties to their geography.</p>
<p>Let's face it, dealing with remote developers centered on the other side of the globe can be frustrating.  Timezone difference between the North American Pacific-based technology centers and India is up to 12 hours! So the start of your day coincides nicely far past the end of your remote developer's day.</p>
<p><strong>Regional talent</strong> breaks a few barriers: timezone and language problems.  People who are at most 3 hours difference in time from your organization (e.g. Atlantic to Pacific).  Having a remote developer match your core hours is easy on the developer; their quality of life doesn't suffer one iota; and you get to deal with a person during your core business hours.  However regional talent alone does not automatically eliminate the problems involved with outsourcing, but it does break the timezone and language barriers.<br />
<br/></p>
<h2 style="border-bottom:0px;"><span style="color:red;">Problem:</span> how can we trust the true quality of a remote developer?</h2>
<p><br/></p>
<h3>Bait and Switch</h3>
<p>The number one complaint about outsourcing is the quality of talent.  A typical story you'll hear from individuals soured by the remote development experience is when the outsourcing company first engages a company. The resourcing company will send out their skilled "Rockstar" developers with next to perfect language fluency. After contracts are signed they incorporate inexperienced developers, or people  with high language barriers, or both. The inexperienced developers are planted in your organization such that they can train and learn on your dime.  This is not a myth, it's a fact which has played out many times.  In these situations you will not be satisfied with the quality of code developed, and the frustration which arises from communicating requirements to a person who cannot understand them.</p>
<h3>Interview... Interview... Interview...</h3>
<p>You should interview outsourced consultants exactly the same way you interview an employee.  This is the primary thing you can do to avoid Bait and Switch. Do not compromise on talent!<br />
<br/></p>
<h2 style="border-bottom:0px;"><span style="color:red;">Problem:</span> We've hired a remote developer(s), what's the best way to get them productive?</h2>
<p><br/></p>
<h3>Onboarding</h3>
<p>The ability to get a consultant up and running in a development environment, cranking out code is up there as one of the top things your can do to make remote development work.  Consultants cost you money for every hour they are not being productive, why wouldn't you want them to have the tools and knowledge necessary to be productive right away? Ensuring a consultant's network ID and password is setup and ready to go day-one is your first step.  There is nothing worse than a consultant who is twiddling their thumbs for days or weeks because they were brought on board even before they were able to access your network!  Virtual Machines can also be setup such that a development environment, mail client and database tooling are all there and ready to go as soon as the consultant launches it.</p>
<h3>Timing and Requirements</h3>
<p>Do not, I repeat, DO NOT bring a developer in too early in your project.  You need to be able hand a set of requirements to a developer which are concise and complete.  This is especially true for remote developers as the requirements for the project are how they both come to understand and execute deliverable.  If you don't document requirements fully, then you can't really blame a developer for not delivering what you want, and if you bring in a developer too early in a project you'll rely too much on the fact that the developer fully understands requirements which are not documented.</p>
<h3>Infrastructure Support</h3>
<p>An absolute primal mistake a company can make when implementing a Remote Development initiative is to not plan your infrastructure properly.  How will the remote developers interface to your network?  How will you protect your intellectual property?  How will you communicate effectively?</p>
<h4>VPN</h4>
<p>The easiest setup to allow remote developers access to your networks would be via a VPN.  Depending on the level of security you are comfortable with this can be as simple as having your network administrator setup the VPN and accounts for your remote developers.  More secure solutions are available such as RSA SecurID and Entrust security schemes such that if a remote developer's password were ever stolen the malicious party could not login to your system.  Such environments make it easy for a remote developer to work on their own equipment, giving them a choice of operating system and software tools they are used to developing with.</p>
<h4>Remote Desktop</h4>
<p>If gaurding your intellectual property is paramount, then having remote developers login to a Remote Desktop system makes a whole lot of sense.  In this type of setup remote developers are allowed to login to either a physical computer or virtual machine and complete their work within an environment completely under your control.  Files are not stored on the remote developer's local system, their computer does not need to have special environment settings setup (for accessing database systems for instance).  Every aspect of their environment is controlled by your organization from the software they have installed, to the backup procedures used to ensure data is not lost.  If at anytime you want to terminate access, you can do so with the peace of mind that all files and data are kept locally on the machine or virtual appliance the developer used to work.</p>
<h4>Communication</h4>
<p>Without a doubt an absolute must have technology when implementing Remote Development is video conferencing and desktop sharing.  Collaboration tools such as Skype and WebEx make it possible for remote developers to participate in an "on the ground" fashion, regardless of where they are physically located.<br />
<br/></p>
<h2 style="border-bottom:0px;"><span style="color:red;">Problem:</span> our remote developer is bringing in new skills, how do we keep those skills in-house after they have left?</h2>
<p><br/></p>
<h3>Knowledge Capture Systems</h3>
<p>Any company looking to bring on consultants are doing themselves a huge favor by implementing knowledge capture systems.  A knowledge capture system is a vehicle for a consultant to express and persist the knowledge and expertise they brought into the company to the advantage of internal developers for years to come.  Examples of such systems are:</p>
<h3>Wiki</h3>
<p>Easy to use in-place document editing system.  Allows the creation and maintenance of "living documents" across projects and teams within your organization.  "HOWTO: Setup your development Environment" or "HOWTO: Access the Oracle database" are perfect examples of documents which can be contributed to by consultants, and help others after they are gone.</p>
<h3>Newsgroups and Mailing Lists</h3>
<p>Consultants, and even new employees don't necessarily know how to navigate the hierarchy of expertise at your organization. A mailing list or archived newsgroup can be immensely helpful as they provide a means for a developer to say "I don't know who to ask this question to exactly, but here is my question.".  "What is the standard naming convention of Web Service endpoints at this company?" might be an example.  Any questions which are asked multiple times, or are deemed useful to others can be cultivated from the mailing list or news group for addition to the company's Wiki.<br />
<br/></p>
<h2 style="border-bottom:0px;"><span style="color:red;">Problem:</span> How do we know the code being produced is done with quality?</h2>
<p><br/></p>
<h3>Code Reviews</h3>
<p>Scared of the quality you are getting with Remote Developers?  Code Reviews supply the answer.  Code Reviews allow key project members the ability to examine and judge the quality of code being developed.  Formal "round table" code reviews can be setup such that a developer tasked with a deliverable has their code reviewed by other developers on the team once the task is completed.  A better way is to have "on-the-fly" reviews, such that you have your version control system email developers on the team a summary of changes being committed to a project.  Developers can then catch quality problems early on in development, rather than after a deliverable is finished and is harder to make changes to.</p>
<h3>Augment, don't annihilate</h3>
<p>Remote Development, is all about augmenting your existing onsite talent.  Having people "on the ground" is necessary on many levels. Your onsite team are the ones who need to carry the torch going forward and the key to successful remote development is to empower your existing team with development skills and experience they perhaps have not yet attained but not to make them feel as if they are being replaced. Or, perhaps you have a really smart lead developer who deserves a team on par with their skills.  Find a company that provides quality, skilled developers who can help your project succeed.<br />
<br/></p>
<h2>Parting thoughts...</h2>
<p>I hope these "tenets" help companies who are thinking of augmenting their existing in-house talent with remote developers.  You really do need a strong game plan, and if you follow the advice in this article you should be on the right track.  This posting will be a bit of a living document, as I experience new things which work for remote development projects I'll make updates.</p>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/06/tenets-of-remote-development-governance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Episode 8 &#8211; All about Web Sockets</title>
		<link>http://basementcoders.com/2010/06/episode-8-all-about-web-sockets/</link>
		<comments>http://basementcoders.com/2010/06/episode-8-all-about-web-sockets/#comments</comments>
		<pubDate>Mon, 14 Jun 2010 14:34:55 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>
		<category><![CDATA[offshoring]]></category>
		<category><![CDATA[outsourcing]]></category>
		<category><![CDATA[websockets]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=510</guid>
		<description><![CDATA[This week we grill our very own expert Justin Lee about Web Sockets. We ask what they are, how they are being used and how they'll change the web to come. Justin works on the Grizzly Web Sockets project, take a look, experiment with it and create something cool! In this episode we've started a [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
This week we grill our very own expert <a href="http://www.antwerkz.com/grizzly-and-websockets/">Justin Lee</a> about <a href="http://en.wikipedia.org/wiki/WebSockets">Web Sockets</a>.  We ask what they are, how they are being used and how they'll change the web to come.  Justin works on the <a href="https://grizzly.dev.java.net/">Grizzly Web Sockets</a> project, take a look, experiment with it and create something cool!</p>
<p>In this episode we've started a news segment.  We grabbed two of the DZone Big Links of the day which caught our eye.  The topics were "<a href="http://www.lessonsoffailure.com/companies/outsourcing-cost-lie/">The Outsourcing Low Cost Lie</a>" and how the popular free text editor <a href="http://notepad-plus-plus.org/">Notepad++</a> is leaving Source Forge over its policies concerning countries on a US blacklist.</p>
<img border="0" src="http://basementcoders.com/wp-content/uploads/2010/05/delicious_icon.gif" /> <strong>Links used during this podcast can be found in <a href="http://del.icio.us/network/bcoders/episode8+topics">del.icio.us</a>:</strong><ul class="delicious"><li>No bookmarks avaliable.</li></ul>
<p><strong>Note:</strong>  Came under a bit of fire from one listener for my position on Offshoring/Outsourcing.  It should be known (if not clear in the podcast) that I'm targeting the companies that plant Junior devs masquerading as Senior ones.  People in other parts of the world are just as smart and talented than ones in North America, but just as it is here there are a lot of bad or inexperienced ones too.  You can keep those ones mkaythxwtfbbq.  In the next podcast I'll defend my position and hopefully you'll see I'm not anti-world-developers.  I'm sure the other Basement Coders will share their experience and points of view as well.</p>

<p>Enjoy!
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/06/episode-8-all-about-web-sockets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep08.mp3" length="39836965" type="audio/mpeg" />
		</item>
		<item>
		<title>A case for iBatis</title>
		<link>http://basementcoders.com/2010/06/a-case-for-ibatis/</link>
		<comments>http://basementcoders.com/2010/06/a-case-for-ibatis/#comments</comments>
		<pubDate>Fri, 11 Jun 2010 21:14:20 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=502</guid>
		<description><![CDATA[Orginally posted on my JRoller Blog Novemeber 9th 2007 This is an excerpt from a discussion I had with the developers at the company I am contracting to. Let me know your thoughts. Just wrapping up a project and thought I would share my experience of how God awful it was working with Hibernate on [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<em>Orginally posted on my<a href="http://www.jroller.com/craiger"> JRoller Blog</a> Novemeber 9th 2007</em></p>
<p>This is an excerpt from a discussion I had with the developers at the company I am contracting to.  Let me know your thoughts.</p>
<blockquote>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt; font-family:Tahoma'>Just wrapping up a project and thought I would share my experience of how God awful it was working with Hibernate on this project.</span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt; font-family:Tahoma'>&nbsp;</span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt; font-family:Tahoma'><a href="http://forum.hibernate.org/viewtopic.php?t=977400&amp;highlight=">This post</a> sums up the bulk of my problems.  Hibernate definitely has the high-profile backing of the Java community, is JPA compliant now and Gavin King is pretty much the <a href="http://www.loudthinking.com/">DHH</a> in the Java Persistence world.  Not to mention he’s probably making some good coin at his new home (JBoss).  However it is my belief that it only works well for </span><span style='font-size:10.0pt;font-family:Tahoma'>greenfield</span><span style='font-size:10.0pt;font-family:Tahoma'> schemas.  That is, create your schema the way Hibernate wants them but if you are thinking of trying to use Hibernate on a legacy schema, that perhaps isn’t well formed you are in for a world of hurt.</span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt; font-family:Tahoma'>&nbsp;</span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt; font-family:Tahoma'>iBatis on the other hand is the working man’s ORM.  In fact, I think I like it because I (and probably you) have created something similar back in the day before all these formalized ORMs.  It simply and elegantly maps your sql results to an object of your choosing.  You state the SQL you want to execute, be it a plain-jane SQL statement/stored proc/view and it automatically maps the resultset back into POJOs.  It also easily lets you override the default mapping behaviour.</span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt; font-family:Tahoma'>&nbsp;</span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt; font-family:Tahoma'>Defining 1:1, 1:M, M:M relationships are far more straightforward than in Hibernate, ESPECIALLY when your database was not designed by you and you have no control over primary keys, foreign keys, etc...  (i.e. the BKG schema has no foreign keys.... Hibernate really likes those...)</span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt; font-family:Tahoma'>&nbsp;</span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt; font-family:Tahoma'>The solution to the problem in my post (linked above) was to create a view for Hibernate to map to.  Unfortunately, I could not update through that view so I had to code custom &lt;sql-update&gt;, &lt;sql-insert&gt; and &lt;sql-delete&gt; tags for my mapping.  And believe me, that is literally a bolt on solution Hibernate provides without any frills.  You have to actually *<b>run</b>* the hibernate mapping in debug mode to figure out what order hibernate will pass parameter values to your &lt;sql-*&gt; tag.  That is extremely fragile!  The next person that touches your mapping, perhaps to add or remove a property, will inevitably break the &lt;sql-*&gt; functionality.  I absolutely hated using the &lt;sql-*&gt; functionality because of this reason.</span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt; font-family:Tahoma'>&nbsp;</span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt; font-family:Tahoma'>What I did at home was I read the <a href="http://ibatis.apache.org/docs/java/pdf/iBATIS-SqlMaps-2_en.pdf">iBatis SqlMapper</a> documentation.  After that, it took me <b>30 mins</b> to implement functionality that took me a week to implement in Hibernate.  That’s right, <b>a week</b>.  A week sounds like a long time, but I had faith that Hibernate would give me a way to map my pojos without resorting to the &lt;sql-*&gt; tags, but it was only an illusion which I realized after reading the responses (or lack there of) to the post I made on the Hibernate forums.  So most of the time spent was learning that Hibernate doesn't easily support what I needed it to.</span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt; font-family:Tahoma'>&nbsp;</span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt; font-family:Tahoma'>Why is Hibernate more popular?  It writes your sql for you,<br />
iBatis doesn’t.  However, iBatis does have a code generator by the name of <a href="http://ibatis.apache.org/abator.html">Abator</a> (along with an Eclipse plugin) which will do 80% of the grunt work for you by creating your model object, sql mapping files, etc... based off a set of database tables.</span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt; font-family:Tahoma'>&nbsp;</span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt; font-family:Tahoma'>So in conclusion, I think we have to be open to using technologies other than what is officially mandated; when it makes sense.  I don’t think it’s healthy to say "do we use Hibernate <b>OR</b> iBatis for all projects" because in my case iBatis is definitely something that would have made my life easier, saved the firm money and probably would make the DAs more comfortable knowing that some ORM is not creating Voodoo SQL on-the-fly. </span></p>
</blockquote>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/06/a-case-for-ibatis/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Old JRoller Posts</title>
		<link>http://basementcoders.com/2010/06/old-jroller-posts/</link>
		<comments>http://basementcoders.com/2010/06/old-jroller-posts/#comments</comments>
		<pubDate>Fri, 11 Jun 2010 21:03:09 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=500</guid>
		<description><![CDATA[The next few postings on the site will be from my old JRoller account. They are postings I've noticed which have pretty good Google rank.]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
The next few postings on the site will be from my <a href="http://www.jroller.com/craiger">old JRoller account</a>.  They are postings I've noticed which have pretty good Google rank.
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/06/old-jroller-posts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Episode 7 &#8211; Why are Mainframes still around? -or- Mainframes vs. Cloud</title>
		<link>http://basementcoders.com/2010/06/episode-7-why-are-mainframes-still-around-or-mainframes-vs-cloud/</link>
		<comments>http://basementcoders.com/2010/06/episode-7-why-are-mainframes-still-around-or-mainframes-vs-cloud/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 13:11:57 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[mainframe]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=485</guid>
		<description><![CDATA[In this episode we have a special guest, Jason Whaley who along with Jeff Genender have a plethora of SOA and Cloud Computing knowledge and insight. If you were in Las Vegas last March at TSSJS you've no doubt heard them speak. The topic for the podcast is a question I'm sure you've asked several [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<img src="http://basementcoders.com/wp-content/uploads/2010/06/hal9000.jpg" alt="The Ultimate Mainframe" title="The Ultimate Mainframe" class="alignright size-full" height="300" width="100" />In this episode we have a special guest, <a href="http://blank.jasonwhaley.com/">Jason Whaley</a> who along with Jeff Genender have a plethora of <a href="http://en.wikipedia.org/wiki/Service-oriented_architecture">SOA</a> and <a href="http://en.wikipedia.org/wiki/Cloud_computing">Cloud Computing</a> knowledge and insight.  If you were in Las Vegas last March at <a href="http://javasymposium.techtarget.com/">TSSJS</a> you've no doubt heard them speak.</p>
<p>The topic for the podcast is a question I'm sure you've asked several times yourself: "Why are mainframes still around?".  What makes them attractive, even today?  Who maintains these systems in 10 years when the 50-somethings have retired?  Is Cloud Computing the chainsaw-shotgun we've been waiting for or is SOA the "brains" that keep zombie mainframe code alive and well?</p>
<img border="0" src="http://basementcoders.com/wp-content/uploads/2010/05/delicious_icon.gif" /> <strong>Links used during this podcast can be found in <a href="http://del.icio.us/network/bcoders/episode7+topics">del.icio.us</a>:</strong><ul class="delicious"><li>No bookmarks avaliable.</li></ul>

<p>Enjoy!
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/06/episode-7-why-are-mainframes-still-around-or-mainframes-vs-cloud/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep07.mp3" length="29896224" type="audio/mpeg" />
		</item>
		<item>
		<title>Episode 6 &#8211; Apple vs Adobe &amp; Open Source Inc.</title>
		<link>http://basementcoders.com/2010/05/episode-6-apple-vs-adobe-open-source-inc/</link>
		<comments>http://basementcoders.com/2010/05/episode-6-apple-vs-adobe-open-source-inc/#comments</comments>
		<pubDate>Mon, 31 May 2010 20:41:39 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=444</guid>
		<description><![CDATA[Episode 6 marks the return of The Basement Coders Podcast! Craig Tataryn is back with all new co-hosts Jeff Genender, Guillermo Castro and Justin Lee. We hope you enjoy the podcast! In this episode we dissect Apple's position on Flash and what this means to us both as consumers and developers. As well, we ponder [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<img src="http://basementcoders.com/wp-content/uploads/2010/05/apple-flash.png" alt="Apple vs Flash" title="Apple vs Flash" width="148" height="153" class="alignright size-full" />Episode 6 marks the return of The Basement Coders Podcast!  Craig Tataryn is back with all new co-hosts <a href="http://www.savoirtech.com/">Jeff Genender</a>, <a href="http://javageek.org">Guillermo Castro</a> and <a href="http://antwerkz.com">Justin Lee</a>.  We hope you enjoy the podcast!</p>
<p>In this episode we dissect Apple's position on Flash and what this means to us both as consumers and developers.  As well, we ponder the reality that corporations have become the shepherds of mainstream Open Source Software. Why?  Have a listen and find out!</p>
<img border="0" src="http://basementcoders.com/wp-content/uploads/2010/05/delicious_icon.gif" /> <strong>Links used during this podcast can be found in <a href="http://del.icio.us/network/bcoders/episode6+topics">del.icio.us</a>:</strong><ul class="delicious"><li>No bookmarks avaliable.</li></ul>
<p><strong>Other links noted in the cast:</strong></p>
<ul>
<li><a href="http://www.fakesteve.net/2009/12/a-not-so-brief-chat-with-randall-stephenson-of-att.html">Fake Steve Jobs talks to AT&#038;T CEO Randall Stephenson</a></li>
</ul>

<p>Enjoy!
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/05/episode-6-apple-vs-adobe-open-source-inc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep06.mp3" length="50236939" type="audio/mpeg" />
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep06.mp3" length="50236939" type="audio/mpeg" />
		</item>
		<item>
		<title>It&#8217;s always great when your reputation precedes you</title>
		<link>http://basementcoders.com/2010/05/its-always-great-when-your-reputation-proceeds-you/</link>
		<comments>http://basementcoders.com/2010/05/its-always-great-when-your-reputation-proceeds-you/#comments</comments>
		<pubDate>Mon, 10 May 2010 19:41:17 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=433</guid>
		<description><![CDATA[Starting a new/old contract this week. From 2000-2006 I worked with Morgan Stanley mostly on recruiting and talent management HR software. I've been asked back to help out with some additions/enhancements to their project governance software, and here is the intro which was sent to the dev team about my arrival: Craig Tataryn (Location: Winnipeg [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
Starting a new/old contract this week.  From 2000-2006 I worked with Morgan Stanley mostly on recruiting and talent management HR software.  I've been asked back to help out with some additions/enhancements to their project governance software, and here is the intro which was sent to the dev team about my arrival:</p>
<blockquote><p>
<em><strong>Craig Tataryn (Location: Winnipeg - Work from Home)</strong> - Craig also worked with us in the past primarily in the Recruiting area as a web developer with a <strong>strong knowledge of 'The Simpsons'</strong>.  We have brought Craig back <strong>primarily for his sense of humor and knowedge of Homer Simpson</strong>, but we also hope that he will provide value as a developer on the MER/Capital Budget project.  Craig's first day will be some day this week.<br />
</em>
</p></blockquote>
<p>Now off to find my <a href="http://www.youtube.com/watch?v=Yk71GY02diY">drinking bird toy</a> and order me a Tab!
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/05/its-always-great-when-your-reputation-proceeds-you/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Give Credit where Credit is Due: Dan Kulp</title>
		<link>http://basementcoders.com/2010/05/give-credit-where-credit-is-due-dan-kulp/</link>
		<comments>http://basementcoders.com/2010/05/give-credit-where-credit-is-due-dan-kulp/#comments</comments>
		<pubDate>Sun, 09 May 2010 03:15:27 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=410</guid>
		<description><![CDATA[I've just finished up a year long contract at a major insurance company writing their first outward facing HL7 Web Services. From my Leap Frog days, I learned to write SOAP and REST based web services using Apache CXF. During that contract I always heard the name "Dan" come up, apparently he was "the CXF [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<a href="http://hl7.org"><img src="http://basementcoders.com/wp-content/uploads/2010/05/hl7logo.gif" alt="hl7logo" title="hl7logo" width="85" height="101" class="alignleft size-full wp-image-411" /></a>I've just finished up a year long contract at a major insurance company writing their first outward facing <a href="http://hl7.org">HL7 Web Services</a>.</p>
<p>From my <a href="http://www.leapfrog.com/">Leap Frog</a> days, I learned to write <a href="http://www.w3.org/TR/soap/">SOAP</a> and <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer">REST</a> based web services using <a href="http://cxf.apache.org/">Apache CXF</a>.  During that contract I always heard the name "Dan" come up, apparently he was "the CXF guy" who could solve any weird bug that we found when implementing our web services.</p>
<p>After Leap Frog I started the insurance gig.  I was pretty much given carte blanche over the <a href="http://jcp.org/en/jsr/detail?id=224">JAX:WS</a> stack to use.  In my heart of hearts I knew the insurance company wanted me to use <a href="http://ws.apache.org/axis/">Axis</a> as they were a big IBM shop and Webphere Application Server (WAS) comes equipt with a "Web Services Pack".  Given the complexity of HL7, and the ridgidity of WAS "Packs" I forged ahead with CXF.</p>
<p>For the most part the large and unruley HL7 schemas were consumed without problem by CXF.  However, there were snags.  Mostly with JAXB and Schema validation.  I'm talking problems where I debug the stack for two days and still don't know what the hell is going on!  I became desparate at certain points, I mean we'd run into a problem and I'd need an answer or some type of direction on how to proceed.  All I would have to do usually is email the <a href="http://cxf.apache.org/mailing-lists.html">CXF-user mailing list</a> and my answer would be addressed within a day.  There were some problems though where I couldn't wait.  I mean problems where people are literally waiting, money is being lost because we can't deploy for testing.  That's when I needed more interactive help.</p>
<p><a href="http://www.sopera.de/en/home"><img src="http://basementcoders.com/wp-content/uploads/2010/05/sopera_logo_72dpi_250px.png" alt="sopera_logo_72dpi_250px" title="sopera_logo_72dpi_250px" width="160" height="137" class="alignright size-full wp-image-413" /></a>My friend <a href="http://www.linkedin.com/in/jgenender">Jeff Genender</a> who I worked with at Leap Frog suggested I talk to <a href="http://www.dankulp.com">Dan Kulp</a> over at <a href="http://irc.codehaus.org/">irc.codehaus.org</a> on the #cxf channel.  So I did just that, and wow,what a smart, polite and helpful person Dan is!  He helped me through some of the weirdest problems.  He got me to create test cases to demonstrate my problems, and even helped me navigate the CXF code such that I was able to submit my own patches when I had a resolution for a problem.  Dan <a href="http://www.dankulp.com/blog/?p=222">recently lost his job</a> due to lay-offs at Progress, and after a short "vacation" of spending time with his family and fighting off job offers, he <a href="http://www.dankulp.com/blog/?p=225">decided to work for SOPERA</a>, which looks like a perfect fit for Dan.  He still gets to be lead on CXF, maturing the framework and generally kicking ass supporting it, while working on Service Mix and other frameworks comprising <a href="http://www.sopera.de/en/home">SOPERA</a>s product offerings.</p>
<p>Well Dan, all I can say is I'm truely grateful for your help.  You are the type of project lead <strong>that shows how agile OSS projects can be!</strong> Both myself and <a href="http://www.gwl.ca/">Great West Life Assurance</a> owe you a debt of gratitude.  I'm continuing on to a new contract now with <a href="http://www.morganstanley.com/">Morgan Stanley</a>, and I'll do my best to ensure CXF is our web services framework of choice.  I'll also contribute more patches, and help out with the JIRAs!
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/05/give-credit-where-credit-is-due-dan-kulp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maven Exclusions &#8211; Not Always Inherited</title>
		<link>http://basementcoders.com/2010/05/maven-exclusions-not-always-inherited/</link>
		<comments>http://basementcoders.com/2010/05/maven-exclusions-not-always-inherited/#comments</comments>
		<pubDate>Fri, 07 May 2010 20:04:06 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Craig]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=405</guid>
		<description><![CDATA[Learned the hard way that Maven exclusions do not get inherited from parent pom files if you happen to add an exclusion in a child pom. An exclusion is a dependency you do not want used when building your project. For instance, if you have a parent project which declares a dependency in it's dependencyManagement [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
Learned the hard way that Maven exclusions do not get inherited from parent pom files if you happen to add an exclusion in a child pom.</p>
<p>An exclusion is a dependency you do not want used when building your project.  For instance, if you have a parent project which declares a dependency in it's dependencyManagement section, and that dependency has a transitive dependency that you don't want to be used (i.e. an old version of JAXB) you can exclude the transitive dependency like so:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p405code3'); return false;">View Code</a> XML</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p4053"><td class="code" id="p405code3"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependencyManagement<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependencies<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>some.group<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>some.artifact<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;exclusions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;exclusion<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>javax.xml<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>jaxb-xjc<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/exclusion<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/exclusion<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependencies<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependencyManagement<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p>However, if you have a child project which references the parent containing the exclusion, and the child project itself places another exclusion on the same dependency:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p405code4'); return false;">View Code</a> XML</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p4054"><td class="code" id="p405code4"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependencyManagement<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependencies<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>some.group<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>some.artifact<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;exclusions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;exclusion<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>javax.xml.parsers<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>jaxp-api<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/exclusion<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/exclusion<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependencies<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependencyManagement<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p>It's not like <strong>both</strong> jaxb-xjc <strong>and</strong> jaxp-api will be excluded from your build.  In fact, when the child specifies its exclusion, that exclusion "wins".  It overrides any exclusions specified in the parent's dependencyManagement section.</p>
<p><code>mvn -X [your goals here]</code> helps a lot when trying to debug which dependencies are actually being used in a build of your code.  So for instance: <code>mvn -X clean install</code> will dump out diagnostic info about what JVM you are running, as well as an "mvn dependency:tree" type output of the dependencies being used in your build.</p>
<p>Hope this helps someone else banging their heads against the wall trying to figure out why their exclusions aren't working!
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/05/maven-exclusions-not-always-inherited/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Applying a PR filter to Calacanis</title>
		<link>http://basementcoders.com/2010/04/applying-a-pr-filter-to-calacanis/</link>
		<comments>http://basementcoders.com/2010/04/applying-a-pr-filter-to-calacanis/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 19:52:36 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=383</guid>
		<description><![CDATA[If you are a big fan of TWiST or TechCrunch you've most certainly heard of the what could be called a "harsh" or "crass" response to an employee of Mahalo who resigned via email to his employer: Jason Calacanis. I won't re-quote the email exchange here, but I'd like to comment. Jason is a passionate [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<a href="http://www.mahalo.com/answers"><img src="http://basementcoders.com/wp-content/uploads/2010/04/mahalo-logo-300x200.jpg" alt="mahalo-logo" title="mahalo-logo" width="300" height="200" class="alignright size-medium wp-image-398" /></a>If you are a big fan of <a href="http://thisweekin.com/thisweekin-startups/">TWiST</a> or <a href="http://techcrunch.com/2010/04/24/how-not-to-handle-a-resignation-gracefully/?sc=1">TechCrunch</a> you've most certainly heard of the what could be called a "harsh" or "crass" response to an employee of <a href="http://www.mahalo.com/answers">Mahalo</a> who resigned via email to his employer: <a href="http://twitter.com/Jason">Jason Calacanis</a>.</p>
<p>I won't re-quote the email exchange here, but I'd like to comment.  Jason is a passionate guy, he says things from the heart and in-the-moment.  He's also an entrepreneur leading a company that's making a name for itself.  A lot of first impressions of him I hear are "who does he think he is?".  If you try to put yourself in his shoes then an event such as an employee leaving is taken way more personally than if they guy worked at a global faceless corporation like IBM.</p>
<p>The employee I think made a mistake.  Don't resign via email, do it in person if at all possible.  Ok, with Jason's travel schedule that might not have been an option, but I'm sure there must have been someone he could have talked to in person, even Mahalo must have an HR department.</p>
<p>As for Jason's response, I realize he was under the illusion that what he said in his email was a private conversation (i.e. internal email system) but at the same time anything can be copied/pasted to a blog.  I guess if I were Jason I would have replied in the following way, and I believe the point would have still come across the same but viewed much more professionally (i.e. there wouldn't have been a negative blog post resulting from it).</p>
<blockquote><p>Evan, pretty disappointed and not only from Mahalo's perspective but from yours.  Mahalo is infinitely more exciting to work for than &lt;insert faceless company&gt;.  You won't find the same chance to prosper professionally or monetarily, there will be no "stacking bills" in your future I'm afraid.</p>
<p>I appreciate the standard two week notice, however we reserve the right at Mahalo to terminate employment upon indication of resignation.  This is nothing personal, it's to protect our IP and our existing talent.  Companies are notorious for trying to steal entire teams, and Mahalo's main strength lies in our amazing people and the IP they work on.  In both respects, there is none better out there.</p>
<p>Again, I feel a bit sorry for you, the grass is not greener, but sometimes people need to learn that for themselves because ultimately that's life.
</p></blockquote>
<p>Although, leave it to Jason to "kill it" on damage control, he's successfully spun the story such that his intent seem totally rational by a) admitting it was an "in the heat of the moment" response b) explaining what the intent really was.</p>
<p>Now, I'm not trying to put words in Jason's mouth, I just thought restating a knee-jerk response in a less crass way might help switch people's position as to who the real victim is in this situation.  I have no sympathy for Evan, when you quit a small company it's like a divorce.  You don't just email your wife that you are leaving and not expect some fallout.</p>
<p>The real lesson is there is a big difference between leaving a small company and a large one.  Large companies view you as a cog, small ones tend to view you as an asset, an asset they have hand-picked and invested in.
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/04/applying-a-pr-filter-to-calacanis/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>If you are stuck on Outlook 2002&#8230;</title>
		<link>http://basementcoders.com/2010/01/if-you-are-stuck-on-outlook-2002/</link>
		<comments>http://basementcoders.com/2010/01/if-you-are-stuck-on-outlook-2002/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 17:33:18 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=381</guid>
		<description><![CDATA[Yeah, as the title says some corporations (albeit I hope there aren't that many dysfunctional corps out there) are still stuck on Office 2002! What does this mean for you as a contractor or employee of such a corporation? Basically: besides looking like Neanderthals to people outside the corporation you are sharing files with, you [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
Yeah, as the title says some corporations (albeit I hope there aren't that many dysfunctional corps out there) are still stuck on Office 2002!</p>
<p>What does this mean for you as a contractor or employee of such a corporation?  Basically: besides looking like Neanderthals to people outside the corporation you are sharing files with, you are locked out of some of the best plugins available for the Office suite.</p>
<p>One such plugin I desparately wanted to install was <a href="http://www.xobni.com/">Xobni</a> (Inbox spelled backward) which allows you to actually search and organize your Outlook Inbox!  The default search that comes with Outlook 2002 is abhorrent, slow and literally takes over Outlook until it feels it's done.</p>
<p>But guess what?  Xobni and 99% of the other newer Office plugins out there won't support any version of Office prior to 2003.</p>
<p>Enter <a href="http://desktop.google.com/">Google Desktop</a>, probably one of the best kept secrets for solving Outlook 2002's poor search functionality.  Simply install Google Desktop, setup up your preferences for which types of files you want indexed (Outlook being one of the types) and leave Outlook open for a while and Google will do it's magic.</p>
<p>I'm sure your Corporation, if they are still using Office 2002, wouldn't approve of installing "3rd party software" but really this one is worth the risk of getting caught.
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2010/01/if-you-are-stuck-on-outlook-2002/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The reformed Microsoft and exFAT</title>
		<link>http://basementcoders.com/2009/12/the-reformed-microsoft-and-exfat/</link>
		<comments>http://basementcoders.com/2009/12/the-reformed-microsoft-and-exfat/#comments</comments>
		<pubDate>Sun, 13 Dec 2009 17:49:45 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Alex]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=372</guid>
		<description><![CDATA[On my Windows 7 box, I added some hard drives. The formatting dialog box offered the option of formatting it as NTFS or exFAT (aka FAT64). I chose NTFS but was curious as to what exFAT. One wikipedia article later, I was enlightened: it's basically and propriety and patented update to FAT useful for large [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
On my Windows 7 box, I added some hard drives. The formatting dialog box offered the option of formatting it as NTFS or exFAT (aka FAT64). I chose NTFS but was curious as to what exFAT. One wikipedia article later, I was enlightened: it's basically and propriety and patented update to FAT useful for large disks and large files. As portable disks/flash cards are getting bigger (to support video cameras, etc), a suitable format had to replace the venerable, but limited, FAT.</p>
<p>Microsoft, and its defendants, have been claiming how reformed the software giant is, and is more open (with respect to interoperability and compatibility with competing systems and companies) and plays well with others now. Samba and its office formats are getting more open. The world is generally a better place, supposedly.</p>
<p>Except it seems the right hand of Microsoft doesn't seem to know what the left hand is doing.</p>
<p>The most basic, fundamental way to interoperate with an OS is via shared disks. Floppies in the past, hard disks and flash drives now. If you want to interoperate with a PC desktop, that means interoperating with Windows, which means you can only choose formats it supports out of the box.</p>
<p>Microsoft, by virtue of this monopoly, gets to decide the successor to FAT. Making a lower-overhead, but scalable file system suitable for removable disks isn't hard. There are many free and open solutions out there, and coming up with one from scratch isnt innovative or challenging, especially for Microsoft. So they did just that and called it exFAT.</p>
<p>The problem is, the new Microsoft has decided that it wants to cash in more on its technology licensing and patenting (see the <a href="http://www.theregister.co.uk/2009/12/11/exfat_licensing_linux_who_they/">story</a> on the Register), and has decided to heavily license (charge a pretty penny for) exFAT users. These users include flash disk makers, camera/device makers and of course, competing operating systems. Linux in particular is going to be in a grey area, as its hard to extract per-user fees out of something that's often freely downloaded.</p>
<p>exFAT isn't impressive technology. It's not innovative or game changing, and not worth licensing for the technology itself. If anyone else came up with it, it's be ignored and forgotten. But since it's Microsoft, people will have to use (and thus pay for it) to be able to talk to Windows. To use an analogy, the electric company is charging vacuum makers to make cords that can plug into their sockets.</p>
<p>Microsoft, yet again, is leveraging their desktop operating system monopoly into other areas and profit centers, stifling competition. The leopard can't change its stripes, despite its PR. Is anyone actually surprised?
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2009/12/the-reformed-microsoft-and-exfat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How I setup my git repos</title>
		<link>http://basementcoders.com/2009/10/how-i-setup-my-git-repos/</link>
		<comments>http://basementcoders.com/2009/10/how-i-setup-my-git-repos/#comments</comments>
		<pubDate>Sat, 03 Oct 2009 21:24:34 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Craig]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=363</guid>
		<description><![CDATA[I have a directory on my linux box for git repositories and as often as not I need to share these with my fellow developers. Here are the steps I take in setting up a new developer and project. Setup a new git developer I have a group setup on my computer called "git-user". My [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
I have a directory on my linux box for git repositories and as often as not I need to share these with my fellow developers.  Here are the steps I take in setting up a new developer and project.</p>
<h2>Setup a new git developer</h2>
<p>I have a group setup on my computer called "git-user".  My /git directory has been chgrp'd to git-user (that's important).  I then setup a developer account on my machine like so:</p>
<p>Setup the group:</p>
<pre>
sudo addgroup git-user
</pre>
<p>Setup the user:</p>
<pre>
sudo adduser --shell /usr/bin/git-shell --ingroup git-user [username]
</pre>
<p>Of course, replace [username] with the username for the dev you want to share your repo with.  You'll notice that I set their login shell to be git-shell.  This is so you don't have to worry about them logging into your box and using it as a torrent seeder (or basically using it for anything other than git) <img src='http://basementcoders.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Setup ssh keys for the user</h2>
<p>I don't want my user to have to login with a password.  For a few reasons a) I don't want to have to manage their password b) I want to make it as easy as I can for them.  To have them be able to login without a password you need them to generate (if that haven't already) a public/private keyset and they must give you the public key.</p>
<p>To generate the keyset have them follow these steps:</p>
<pre>
ssh-keygen -t dsa -f ~/.ssh/id_dsa -C "username@emailhere.com"
(note, you could use rsa as well if you are so inclined)
</pre>
<p>Have your dev send you the file that's in their ~/.ssh/ directory called id_dsa.pub (or id_rsa.pub if they chose -t rsa).</p>
<p>You're job will be to create a .ssh/authorized_keys file in your developers home directory, and copy the contents of that public key they sent you into it.  You do that like so:</p>
<pre>
sudo mkdir /home/username/.ssh
sudo chown username:username /home/username/.ssh
sudo chmod 700 /home/username/.ssh
sudo cat id_dsa.pub > /home/username/.ssh/authorized_keys
sudo chown username:username /home/username/.ssh/authorized_keys
</pre>
<h2>Setup the repo</h2>
<p>Put your repo wherever you'd like, but it has to be reachable by users within the git-user group.  So for instance I did the following:</p>
<pre>
mkdir /git
sudo chgrp git-user /git
</pre>
<p>Then, to setup the repository for my project:</p>
<pre>
cd /git
mkdir myproj
sudo chgrp git-user myproj
cd myproj
git init --bare --shared=group
</pre>
<p><b>Note:</b> It's worth it to mention that in some older versions of git, issuing the <code>git init</code> command with the <code>--shared=group</code> would not properly set the group for the "objects" directory (I believe).  The version I used in this tutorial was 1.6.1.3 and it seems to work fine now.</p>
<h2>Put code in your repo</h2>
<ol>
<li>backup your local project somewhere</li>
<li>change into the directory of your local project</li>
<li>type: <code>git init</code></li>
<li>type: <code>git remote add origin username@tataryn.net:/git/myproj</code></li>
<li>type: <code>git pull origin master</code></li>
<li><code>ls -al</code> your local directory to make sure your files are still there and confirm there is a .gitignore file present</li>
<li>type: <code>git add .</code></li>
<li>type: <code>git commit -a -m "initial import of my proj"</code></li>
<li>type: <code>git push</code></li>
<p>The last step may or may not work, it all depends on whether you have code already in the repo at the time you originally pulled.  If this doesn't work try: <code>git push origin master</code>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2009/10/how-i-setup-my-git-repos/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Controlling the Storm</title>
		<link>http://basementcoders.com/2009/07/controlling-the-storm/</link>
		<comments>http://basementcoders.com/2009/07/controlling-the-storm/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 04:35:44 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Craig]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[GTD]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=342</guid>
		<description><![CDATA[Was reading Jason's blog post on Brainstorming Done Wrong, I agree completely. Brainstorming is dangerous if not done properly. Simply put, people tend to loose focus and get overwhelmed and confused. What I find typically happens is you'll be in a meeting and a certain person or set of people are by virtue of their [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
Was reading Jason's blog post on <a target="_blank" href="http://blank.jasonwhaley.com/2009/07/brainstorming-done-wrong.html">Brainstorming Done Wrong</a>, I agree completely.  Brainstorming is dangerous if not done properly.  Simply put, people tend to loose focus and get overwhelmed and confused.  What I find typically happens is you'll be in a meeting and a certain person or set of people are by virtue of their own accord brain stormers.  They essentially <i>think out loud</i>.  This has the unfortunate side effect of hijacking the meeting with a tonne of tangential ideas and by the end of the meeting people feel unsatisfied because there is nothing to take away other than confusion and more questions.<a href="http://basementcoders.com/wp-content/uploads/2009/07/mindmap.png"><img src="http://basementcoders.com/wp-content/uploads/2009/07/mindmap-300x286.png" alt="The Mindmap" title="The Mindmap" width="300" height="286" class="alignright size-medium wp-image-343" /></a></p>
<p>A typical scenario of brainstorming gone wrong is the meeting wanting to find out <b><i>what time it is</i></b>. Someone starts telling us how a watch is made, another disagrees and says how he/she prefers how a watch is made.  Several people debate digital versus analog watches, etc...  At the end of the meeting not only do we not know what time it is, we don't have a working blue print for a watch, just a bunch of random ideas.</p>
<p>One thing I've been implementing personally for my own private brainstorming sessions is to write my brainstorm down as a <a target="_blank" href="http://en.wikipedia.org/wiki/Mind_map">mind map</a>.  So I start with a circle in the middle with the main topic printed inside.  Then I start thinking on it, each thought related directly to the main thought gets a branch with and any tangential ideas branch off from those sub branches.  This technique makes it really nice to organize your thoughts and produce something you can take away from a brainstorming session.  Another benefit to mind mapping is it makes it really easy to "prune" the map of invalid ideas, or ideas you don't want to take anywhere meaningful.</p>
<p>If you find your meetings getting out of control, and you "own" the meeting in that you can choose it's direction,  It's not a bad idea to mosey up to the whiteboard right in the middle of a brainstorming session which went off the rails and say "I'm going to write down some of these ideas" and proceed to draw a mind map.  9/10 you'll be asked what the heck it is you are doing, you can then explain that this will help the team keep on track.  Neat trick because it's a passive aggressive way of stating the fact the meeting was off track in the first place, less offensive than saying "you're all a bunch of scatterbrains!" <img src='http://basementcoders.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Mind Maps are great for capturing the natural way your brain problem solves and plans.  Without this technique a lot of your "branches" are lost as they fall out of short-term memory and a lot of the times the "meaningless" branches, when looked back upon actually add a lot of value to your end goal.
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2009/07/controlling-the-storm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Joel and Jeff &#8211; TDD is Relevant</title>
		<link>http://basementcoders.com/2009/07/joel-and-jeff-tdd-is-relavent/</link>
		<comments>http://basementcoders.com/2009/07/joel-and-jeff-tdd-is-relavent/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 02:56:58 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Craig]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[opinion]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=257</guid>
		<description><![CDATA[I'm a big fan of the site Stack Overflow, albeit I find it tough with my schedule to fully contribute to the site but before the site was even live I was a faithful listener to their podcast. I listened to them a lot when I was traveling last year, this was when Jeff and [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
I'm a big fan of the site <a target="_blank" href="http://www.stackoverflow.com">Stack Overflow</a>, albeit I find it tough with my schedule to fully contribute to the site but before the site was even live I was a faithful listener to their podcast. </p>
<p><a target="_blank" href="http://www.stackoverflow.com"><img src="http://basementcoders.com/wp-content/uploads/2009/07/stackoverflowlogo.png" alt="stackoverflowlogo" title="stackoverflowlogo" width="250" height="61" class="alignright size-full wp-image-258" /></a>I listened to them a lot when I was traveling last year, this was when Jeff and the gang were creating Stack Overflow.  I'm done traveling and hadn't really made the time in my life to catch up on podcasts until now.  And it's kind of nice doing it this way because you get "full seasons" of podcasts and don't have to wait eagerly for the next.  That's how I watch TV for the most part, watching one episode a week is for the dogs. So although I'm still a few episodes behind, I managed to get through two I feel need a "rebuttal" of sorts.  The two I speak of are <a target="_blank" href="http://blog.stackoverflow.com/2009/01/podcast-38/">episode 38</a> and <a target="_blank" href="http://blog.stackoverflow.com/2009/02/podcast-41/">episode 41</a></p>
<h2><a target="_blank" href="http://blog.stackoverflow.com/2009/01/podcast-38/">Episode 38</a></h2>
<p>In this episode it's Joel and Jeff talk about <a target="_blank" href="http://en.wikipedia.org/wiki/Test-driven_development">Test Driven Development</a> and how they don't get why it's so useful because really if you are a software company you should just hire awesome programmers who don't need to write unit tests.  This position is pretty much born out of ignorance, and I'm not being a jerk here, I love Jeff and Joel, I just recognize their ignorance for what it is.<br />
<br/><br />
<b>For instance, Joel says at one point:</b></p>
<blockquote><p>It doesn't seem like you could actually get any code written if you're spending all your time writing 8,000,000 unit tests, and every single dinky little class that you need to split a URL into four parts becomes an engineering project worthy of making a bridge, where you spend six months defining 1000 little interfaces. They've just gone off the deep end, and <b>I don't think these people write very much code if they're coming up with these principles</b>, to be honest, it doesn't even make sense.</p></blockquote>
<p>Joel essentially explains that TDD is akin to the Object Oriented Architect who is operating up in his ivory tower, dictating what should be a really good idea in theory, but essentially is impractical in the real world and should be left to the academics to debate.</p>
<h2><a target="_blank" href="http://blog.stackoverflow.com/2009/02/podcast-41/">Episode 41</a></h2>
<p>Episode 38 <a target="_blank" href="http://blog.objectmentor.com/articles/2009/02/06/on-open-letter-to-joel-spolsky-and-jeff-atwood">spawned a rebuttal</a> from <a target="_blank" href="http://blog.objectmentor.com/articles/category/uncle-bobs-blatherings">"Uncle Bob"</a> -- one of the pioneers of the Agile methodology -- he's also a big proponent of TDD.  The episode includes Uncle Bob himself, however he's unable to convince Joel and Jeff that TDD is for the real world and the episode essentially re-iterates Joel and Jeff's stance that if you just hire "awesome programmers", these time-wasting unit tests aren't worth it.</p>
<p>I must admit I was left disappointed, I really thought Uncle Bob would give them the what-for, show them that TDD is alive and well outside their island code base.  Uncle Bob, in my opinion doesn't do a super job trying to convince them of why TDD make sense.  I got the feeling that he didn't want to bring into question Joel and Jeff's coding practices.  For instance, Joel brings up several times how "there is lots of code in the UI layer that you simply can't unit test".  That should signal alarm bells for the astute programmer who has grown accustom to the Model View Controller paradigm (or Separation of Concerns in general).  I really think the problem is that .NET people (I was one briefly) are trapped in the Vendor Vacuum which is Microsoft.  If Microsoft doesn't have a unit testing framework that is bundled in with .NET, then it's probably something not worth looking into is the mantra.  I base this opinion primarily on what I hear Jeff talk about during the podcasts, specifically how early on in development of Stack Overflow they weren't sure if they were going to implement the site using this new "MVC" thing.  For a person like me that's been doing MVC web development since the 1.x versions of <a target="_blank" href="http://struts.apache.org/1.3.8/index.html">Struts</a> (circa 2000), I cringed.  It all goes back to Joel's comment about all the little pieces of logic in the UI, that just shouldn't be the case.  I won't go on about it ad nauseum, I'll just hug <a target="_blank" href="http://wicket.apache.org">Wicket</a> and let others experience the pains of &lt;% logic here %&gt; programming (or "bee sting" tag programming as Jeff might say) in the UI until they too have their "ahah" moment (or until Microsoft has it for them).</p>
<h2>On "A Hah!" moments...</h2>
<p>I've done what they've done though; forming opinion on things that I have no experience with. I did it with the <a target="_blank" href="http://basementcoders.com/?p=47">Mac</a>, <a target="_blank" href="http://basementcoders.com/?p=50">Sushi</a> and of course technical things like <a target="_blank" href="http://basementcoders.com/?p=39">distributed source control</a>.  I've taken a position now that if I haven't tried it, I probably don't have an opinion on it that is worth a hill of beans.  I got the feeling that after all was said and done Joel and Jeff still weren't convinced that TDD was for people who "really coded"...</p>
<p><a href="http://basementcoders.com/wp-content/uploads/2009/07/light-bulb-glowing-filament-ahd1.jpg"><img src="http://basementcoders.com/wp-content/uploads/2009/07/light-bulb-glowing-filament-ahd1-231x300.jpg" alt="The &quot;ahah&quot; moment, usually happens for me in the shower..." title="The &quot;ahah&quot; moment, usually happens for me in the shower..." width="231" height="300" class="alignright size-medium wp-image-279" /></a><br />
There are just some things like DSCM and TDD that you just have to try for yourself to get that "ah hah" moment.  Without that moment, you really have to be a special person to grasp firstly the concept and secondly why it's important and useful.  When I first discovered git (thanks to fellow basementcoders Marc and Alex) I didn't really know why this was any better than svn.  Then I started using it, and discovered how much more agile I could be, for instance I could be merrily working away on some future feature of a software app and instantly be able to code an emergency fix for a released branch.  I can do all that without switching directories and without loosing any work I was doing on my feature.</p>
<h2>Make Unit tests, not User testers</h2>
<p>The funny thing is, in later episodes Jeff laments about a certain Stack Overflow badge for which faulty logic caused the badge to be awarded to users when it shouldn't have been.  Instead of making his users be his unit testers, he could have caught this up front with a set of unit tests for the badging system.</p>
<p>It's actually, when you think of it, pretty surprising that Stack Overflow works as well as it does.  This is primarily due to the community which supports and makes Stack Overflow a success, they find the bugs early enough and the bugs get fixed fast enough that on a whole the site works.  But there will come a day where the site becomes a complex set of features which start to become coupled to one another.  Jeff or one of his partners will change some innocuous piece of code, and because of the lack of unit tests to support regression testing, 5 other bugs will be introduced. That's not a "maybe it will come to that", it's pretty much a fact and users will only put up with so many bugs before they'll get frustrated.</p>
<h2>Cover your ass - the blame game goes away...</h2>
<p><div id="attachment_295" class="wp-caption alignright" style="width: 242px"><a href="http://basementcoders.com/wp-content/uploads/2009/07/browndonkey.jpg"><img src="http://basementcoders.com/wp-content/uploads/2009/07/browndonkey.jpg" alt="Cover your ass" title="Cover Your Ass..." width="232" height="232" class="size-full wp-image-295" /></a><p class="wp-caption-text">Cover your ass</p></div>This is where Uncle Bob, I think, kinda dropped the ball.  What's one of the worst situations to be in on a project?  I would say it's when someone changes code and that change breaks the functionality you are responsible for.  Who gets blamed?  You do, because to the others on the team, QA, Business people, it looks to them like your stuff doesn't work.</p>
<p>This is precisely the problem that lead me to have my "a hah" moment with TDD: it's inherit ability to "cover your ass".  What you do is you build up a set of programmatic tests which exercise the functionality of your unit (most likely a service, or set of services).  You then set your build system to execute these unit tests anytime your program is built.  If the unit tests fail, the build fails.  If the build fails, it means the last change set you made "broke the build".  That is the key, you must enforce a protocol upon your developers that states "before you check *anything* into SCM, you build it and run the unit tests.  If the build fails for any reason, unit test failures included, you fix it before you check in.<br />
<a href="http://basementcoders.com/wp-content/uploads/2009/07/hebrokethebuild.jpg"><img src="http://basementcoders.com/wp-content/uploads/2009/07/hebrokethebuild.jpg" alt="You break it, you bought it bub" title="You break it, you bought it bub" width="380" height="380" class="alignleft size-full wp-image-300" /></a>This needs to be a commandment of your development process that is enforced with extreme prejudice.  I learned that from <a target="_blank" href="http://www.google.ca/search?hl=en&#038;q=jeff+genender">Jeff Genender</a>, the hard way a few times.  If you checked in code that broke the build, he came down on you like a sack of hammers.</p>
<p>The accountability comes into play if you also incorporate <a target="_blank" href="http://studios.thoughtworks.com/2007/6/27/continuous-integration-what-should-i-automate">Continuous Integration</a> tools.  For instance any time we checked in source code at <a target="_blank" href="http://www.leapfrog.com/">Leap Frog</a>, Jason <a target="_blank" href="http://blank.jasonwhaley.com/">Whaley</a> had our Continuous Integration server automatically build the code and run our unit tests.  If a unit tests or compilation failed a big nasty email went around to the team, and to the directors stating "<i>${name_of_jerk} broke the build</i>".</p>
<p>It also really helped that we had top notch QA personal, <a target="_blank" href="http://www.linkedin.com/in/schley">Chas Schley</a> and <a target="_blank" href="http://www.linkedin.com/pub/bradley-epranian/4/7ba/a80">Brad Epranian</a> would not tolerate source code which wasn't properly unit tested.  They themselves were writing a series of automated testing against various parts of the system and it pissed them off to no end when all of a sudden their tests weren't working anymore because of your change.</p>
<h2>Knowledge Transfer</h2>
<p>The fact of the matter is, disregarding everything else, TDD makes you better at understanding your program.  If some developer on your team doesn't know anything about how the "badging system" works, I guarantee you if you pointed him to a set of unit tests which exercise the ins and outs of badging complete with the happy paths and corner cases, he'll have a much better chance at understanding it and being able to contribute fixes and new functionality than if you just set him loose on the code base itself. </p>
<h2>Conclusion</h2>
<p>I really hope I've made my point and I hope this helps somebody, somewhere (if not Joel and Jeff), to understand why TDD isn't just an academic pursuit or a masochistic technique that only "obsessive compulsive" programmers partake in (as Joel might say).  It adds real value, and real quality while broadening your team's understanding of your product.</p>
<h2>To Joel and Jeff....</h2>
<p>I don't know if Joel and Jeff are sick of this topic, maybe it's been beaten into the ground too much already, but I'd love if either they would join us on our podcast or us on theirs to rehash some of the issues.  So Joel/Jeff if you are up for it, let me know, I'd love to talk further.
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2009/07/joel-and-jeff-tdd-is-relavent/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Why Windows isn&#8217;t ready for the desktop</title>
		<link>http://basementcoders.com/2009/05/why-windows-isnt-ready-for-the-desktop/</link>
		<comments>http://basementcoders.com/2009/05/why-windows-isnt-ready-for-the-desktop/#comments</comments>
		<pubDate>Sun, 24 May 2009 17:37:34 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Alex]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=245</guid>
		<description><![CDATA[Slashdot recently ran a story on yet another "Why Linux isn't ready for the desktop." This one was rather nice. It contained a nice technical analysis with only a few errors. It's not this one that I'll be complaining about today, it's the millions of others of these types of articles that seem to be [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<a href="http://slashdot.org/">Slashdot</a> recently ran a <a href="http://linuxfonts.narod.ru/why.linux.is.not.ready.for.the.desktop.html">story</a> on yet another "Why Linux isn't ready for the desktop."</p>
<p>This one was rather nice. It contained a nice technical analysis with only a few errors. It's not this one that I'll be complaining about today, it's the millions of others of these types of articles that seem to be written by long-time Windows users that just happened to have tried Linux and need something to blog about.</p>
<p>Most of the time these users list install issues or driver support as their biggest issue, then conclude that because Photoshop or some other specific applications aren't available (and assume never will be) that Linux is doomed and its users should just give up.</p>
<p>Unfortunately, these arguments are flawed on several fronts. First, Linux can't do anything about the lack of availability of certain commercial applications. This is just a fact of smaller market share. As market share increases, these applications will come on board. Linux can be the perfect operating system, but if it only has 1% of the market share, your specialized accounting application that you bought five years ago still isn't going to run (ignoring wine and virtualization solutions here). Linux is sometimes able to offer you alternatives (for example, the GIMP), but if you really need Photoshop then yeah, Linux isn't an option to you. Only Adobe can rectify this.</p>
<p>Second, no one ever has to install Windows - it comes with their computers. The hardware maker has already made sure everything (hardware-wise) works out of the box. Testing and judging Linux's install process but not Windows' seems unfair.</p>
<p>As a full-time Linux user and programmer, I can't ignore Windows and still must boot it up occasionally to compile and test my software. Every time I go back to Windows to do this work, I'm constantly reminded of the flaws Windows has, flaws that are probably ignored and invisible to the veteran Windows-only user. In fact, the flaws are so glaring, that I sometimes wonder how this crappy operating system became (and stays) the leader (answer: momentum: PC builder support and 3rd party software support). After I'm done a typical session, I snidely conclude that Windows (XP in this case, lets not get started on Vista) isn't yet ready for the desktop, and here's why:</p>
<p>Poor installer - not usable by average users (luckily they don't have to). Lacks drivers and poor auto-detection of hardware, often leaves the computer installed without network, sound or 3D video card support. Had to go to another computer with network access to download network card drivers for the first machine. Have to search the backwater download areas of various sites, running random (and dangerous) executable installers hoping that I have the right one for my particular hardware adapter. Lots of reboots between driver installed wasting boatloads of time. Older hardware often completely unsupported in new versions of operating systems. No live CD. Unfriendly to non-Windows partitions.</p>
<p>Auto upgrades seems slow. Asks a lot of questions, and is very intrusive. Tries to sneak in and install additional software (WGA, IE, etc). Sometimes forgets previous refusals and nags some more. Can scare new users easily, especially when asking about installing new software or displaying EULAs. No nice (central, Internet) package management system. Add/remove programs panel in Control panel sometimes doesn't work and doesn't include all software. Updater sometimes reboots the computer automatically, abruptly terminating any running programs that the user may have delivery left running.</p>
<p>No central upgrading system for 3rd party software. Why doesn't the add/remove program window in control do this? 3rd party (or even 1st party Microsoft like Media player) seems to do their own updating, constantly nagging the user with update and restart requests. New users can be surprised by these queries. Highly intrusive. Upgrades can easily break stuff (no proper dependency tracking) as upgrades may not just include version patches, but completely new versions of software. Not user friendly at all.</p>
<p>Requires virus scanner. Base operating system demands it, yet doesn't provide one. Can be disabled though. Virus scanner makes computer much slower. Without such a scanner though, machine is highly vulnerable, especially since many required utilisation and software packages come from the Internet via the web browser as executables - not the safest delivery vector. Some kind of chmod +x system should be required - software should come in packages and/or package repositories.</p>
<p>No nice repository for additional software. Must find them developer's web sites. This however can be dangerous as if you aren't familiar with the developer, there is a risk of getting malware. There is some kind of signing system for executables, but the user can (too) easily dismiss the queries/warnings, rendering the system ineffective.</p>
<p>The default web browser, IE, is still quite insecure, has (had) poor web standards support and still supports ActiveX, an insane idea (from a security standpoint).</p>
<p>Lacks lots of basic software. PDF viewer, ssh clients, GUI ftp client, torrent client, decent zip-client, decent photo editing, CD/DVD burning software, CD-to-MP3 ripping, etc. Some stuff can be downloaded from Microsoft's site, but this requires knowing about it, finding it and other hassles. Sometimes add-on software can wreck havoc, like after-market firewall or wifi network management software. New users would need the advice of experienced users to avoid installing malware, who have set up realistic-looking mock sites to trap and ensnare users.</p>
<p>Lacking lots of codecs out of the box (like DivX) with no obvious method of getting them. Media player won't rip to MP3 by default, insisting on WMA, even though MP3 is the de-facto standard (to be fair, iTunes is guilty of this too)</p>
<p>The basic software that is there is not polished. The picture viewer doesn't do EXIF rotation. Notepad doesn't support UNIX or mac line endings. WebDAV client support is just broken.</p>
<p>Very unfriendly environment to developers or system admins (and other such power users). Poor command line (shell), no ssh system, non standard build tools (like make), no scripting languages out of the box, lacks many basic command line utilities.  This would seem easy to fix, but Microsoft seems to like to make Windows drastically different (i.e. dislikes anything command line related or anything it didn't invent) in this respect. This results in Windows being a difficult platform to use when working with many open source projects or languages. Developers pretty much have to be using full IDEs and packages, but even in those cases, assembling libraries and build systems is still a pain with lots of trial and error. Cygwin is a half-solution at best. A Microsoft sanctioned shell, ssh client/server and collection of utilities would be best. Apple seemed to have done it, why can't Microsoft?</p>
<p>Not very customizable or tunable by hardware makers, making it an ill fated choice for netbooks. Depending on how the netbook market goes, this may or may not resolve itself. If netbooks get more powerful for the same price, then they can more easily handle Microsoft's operating systems. However, if they get cheaper by using even lower cost components (ARM CPUs, for example), then Microsoft's operating system will be completely shut out.</p>
<p>Windows, on the surface, seems like it would be a complete failure as a desktop operating system. However, it has the world's momentum behind it. All system builds prep their products for it, all corporate technicians are trained to care and feed Microsoft's offerings, a large software ecosystem is ready to fill its gaps and everyone has just plain gotten used to its quirks. This tolerance for crappy software is often misconstrued as being easy to use, when in fact it's simply the devil-you-know vs the devil-you-don't phenomena. People don't so much think Windows is easy to use as they're just used to its crapulence and don't want to bother with anything else. They might even know it's a crappy system, but at least they're comforted in knowing that their system isn't any crappier than their neighbours - everyone's in the same boat.</p>
<p>Suffice to say, there will be no distinct "year of the Linux desktop". It'll be a gradual process, as Linux slowly grows into markets (netbooks, corporate desktops, servers, devices) and slowly encroaches into general desktops. Linux lacks all kinds of software, but every year, it gets a few more (free and commercial) apps (or the apps move to the web) and a few more converts.
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2009/05/why-windows-isnt-ready-for-the-desktop/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Scala, a cursory glance</title>
		<link>http://basementcoders.com/2009/04/scala-a-cursory-glance/</link>
		<comments>http://basementcoders.com/2009/04/scala-a-cursory-glance/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 22:20:33 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Alex]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[linq]]></category>
		<category><![CDATA[scala]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=240</guid>
		<description><![CDATA[Recently, the Scala language was brought to my attention. Now, I've been around the language block a few times, having seen my share of languages. I'm aware and suspicious of the siren-like call new languages have for programmers. They tickle our programming curiosities to the core, offering silver-bullet, paradigm-shifting opportunities for increased productivity. Unfortunately, they [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
Recently, the <a href="http://www.scala-lang.org/">Scala</a> language was brought to my attention.</p>
<p>Now, I've been around the language block a few times, having seen my share of languages. I'm aware and suspicious of the siren-like call new languages have for programmers. They tickle our programming curiosities to the core, offering silver-bullet, paradigm-shifting opportunities for increased productivity. Unfortunately, they require lots of commitment, community, support libraries and momentum to become useful, so one has to be pragmatic when adopting new languages. I tend to error more on the conservative side, but Scala beckoned me to have a closer look. These are my cursory observations.</p>
<p>What first drew me to Scala was its offering of type-safe and concise programming models, based on generics and functional programming. Although the key reason I use C++ is performance, it's the type safety and concise power of templates that keeps me there. I find type-safe languages provide for more readable and maintainable code bases, something that is critical for large and aging projects. Scala seems to push for some of these same ideals.</p>
<p>The first benefit of Scala is immediate: it compiles to Java byte code and is able to utilize Java libraries. This means you can integrate with your existing Java code, use the plethora of existing Java libraries and reuse the man-centuries of work that went into Java VMs. This is somewhat analogous to how C++ can use C. However, C code can (mostly) be compiled as C++ code, Scala code is not anywhere near valid Java code. Although this affords the Scala designers more freedom, it creates another learning curve for Java programmers.</p>
<p>I may have overestimated Scala's intended integration with Java though, as they also have a preliminary link up with .NET working. This could be interesting, or it could split its community focus.</p>
<p>The language itself is very functional and recursive. Functions are first class objects, specialization/type searching is handled via a powerful pattern-matching system and generics seem to be on the right track. This kind of stuff lets you build very interesting DSLs (domain specific languages), something that I think will vital for the future. This means you can build stuff like C#'s <a href="http://msdn.microsoft.com/en-us/vbasic/aa904594.aspx">LINQ</a> SQL query system into a programming language, without having to update the language -- all done as a library. New web presentation mark-up languages, mini-programming/scripting languages, XML query/processing, etc. could all be done as libraries. Neat stuff.</p>
<p>My very cursory inspections with <a href="http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/javap.html">"javap"</a>, the Java class disassembler, shows that Scala is not doing the type specific in-lining I thought it would be (for example, instantiating functions for each specific type T that is used). This means I won't get my performance wishes out of Scala, which is too bad, since that would be more interesting that providing yet another deferred-to-runtime type system (even if it has a nice type-safe compile time checker).</p>
<p>It's an interesting project, and I wish them the best of luck. Programming languages require large investments in time, community and libraries, and they're just beginning this long road and still have a ways to go before I'd commit any large projects to them. This segways into my final, not-really-Scala observation:</p>
<p>Why are the <a href="http://twitter.com/">Twitter</a> guys all <a href="http://www.artima.com/scalazine/articles/twitter_on_scala.html">hot</a> for it?</p>
<p>Twitter (via programmer Alex Payne) seem to be claiming that their notorious problems with scalability and reliability can be traced back to Ruby on Rails. RoR haxxor Obie Fernandez attempts to <a href="http://blog.obiefernandez.com/content/2009/04/my-reasoned-response-about-scala-at-twitter.html">refute</a> this. Whether RoR can handle the load or the Twitter programmers just don't know how to use it, I don't know or care. What I do know is that if you're going to switch to something else, especially for your critical messaging queuing core, don't jump to something even more obscure and untested.</p>
<p>Alex Payne says Scala is fun and gives him the fuzzies, which is all fine and dandy, but for god's sake man, think about the business here and not the Scala book you're penning. You need something scalable and tested, which usually means old and boring. That's just business. Make Twitter work, sell it, and get (even more?) rich.
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2009/04/scala-a-cursory-glance/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Creating an FBJS Widget</title>
		<link>http://basementcoders.com/2009/04/creating-an-fbjs-widget/</link>
		<comments>http://basementcoders.com/2009/04/creating-an-fbjs-widget/#comments</comments>
		<pubDate>Thu, 02 Apr 2009 13:28:38 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Craig]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[fbjs]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=176</guid>
		<description><![CDATA[Those of us who have created more than our fair share of javascript widgets, who have grown to love their favourite frameworks like <a href="http://jquery.com/" target="_blank">jQuery</a>, <a href="http://www.prototypejs.com" target="_blank">prototype</a> and <a href="http://script.acul.us" target="_blank">script.acul.us</a>, think we'll simply whip off a widget for our <a href="http://www.facebook.com/" target="_blank">Facebook</a> application in no time flat. Hell, we'll probably just use some existing ones, add a few tweaks and be off to the races. Then we come up against a daunting reality.... FBJS is Javascript, but it's Javascript running within the framework of a Sandbox]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
			Those of us who have created more than our fair share of javascript widgets, who have grown to love their favourite frameworks like <a href="http://jquery.com/" target="_blank">jQuery</a>, <a href="http://www.prototypejs.com" target="_blank">prototype</a> and <a href="http://script.acul.us" target="_blank">script.acul.us</a>, think we'll simply whip off a widget for our <a href="http://www.facebook.com/" target="_blank">Facebook</a> application in no time flat. Hell, we'll probably just use some existing ones, add a few tweaks and be off to the races. Then we come up against a daunting reality.... FBJS is Javascript, but it's Javascript running within the framework of a Sandbox</p>
<p><span id="more-176"></span></p>
<h2>The Sandbox</h2>
<p>The FBJS sand box is a protective layer. Your raw javascript gets passed through some translators over at Facebook and is spit out to the browser. You get to see that translated Javascript (which we'll now refer to as Face Book Java Script FBJS) when you access a part of your application that contains script elements, you'll notice that all of the variables you have declared in your scripting blocks are rewritten to run within the Sandbox.</p>
<h3>Code you wrote</h3>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p176code5'); return false;">View Code</a> JAVASCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1765"><td class="code" id="p176code5"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #003366; font-weight: bold;">var</span> ds <span style="color: #339933;">=</span>    <span style="color: #009900;">&#123;</span>
    	results<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'apple'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'orange'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'banana'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'peach'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'grape'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'pineapple'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'plum'</span><span style="color: #009900;">&#93;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> tagEntry <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> TagEntry<span style="color: #009900;">&#40;</span>document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'tagEntry'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> ds<span style="color: #339933;">,</span> <span style="color: #3366CC;">'tags[]'</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">15</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    tagEntry.<span style="color: #660066;">renderTags</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<h3>Ends up being</h3>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p176code6'); return false;">View Code</a> JAVASCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1766"><td class="code" id="p176code6"><pre class="javascript" style="font-family:monospace;">&nbsp;
<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
   <span style="color: #003366; font-weight: bold;">var</span> a12345678_ds <span style="color: #339933;">=</span>    <span style="color: #009900;">&#123;</span>
   		results<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'apple'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'orange'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'banana'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'peach'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'grape'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'pineapple'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'plum'</span><span style="color: #009900;">&#93;</span>
       <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
       <span style="color: #003366; font-weight: bold;">var</span> a12345678_tagEntry <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> a12345678_TagEntry<span style="color: #009900;">&#40;</span>a12345678_document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'tagEntry'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> a12345678_ds<span style="color: #339933;">,</span> <span style="color: #3366CC;">'tags[]'</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">15</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       a12345678_tagEntry.<span style="color: #660066;">renderTags</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>In a nutshell Facebook is making sure that you are only instantiating objects for which you wrote and you are using variables only you have defined. They don't want you using Javascript to start poking around a person's profile, grabbing elements you aren't allowed to see!</p>
<p>For instance, the TagEntry class listed above is a class I made, and it resides in a script file I include in my application's web page. Using a tool like Firebug, I can check to find that sure enough, all the TagEntry class functions within my included .js file have been been rewritten as &quot;a12345678_TagEntry*&quot;.</p>
<p>So essentially they are forcing you into your own namespace. You cannot reach out of your namespace unless they have blessed it.</p>
<h2>FBJS</h2>
<p>FBJS itself is a set of objects and functions which abstract away the underlying browser your application is running in. This is a nice feature--I repeat--this is a nice feature. Although, perhaps one which you've already figured out on your own by using frameworks such as prototype. Nonetheless, it's a nice feature to have.</p>
<p>What the fine folks at Facebook have done is used Javascript's ability to morph existing classes and objects, via prototyping, just like how javascript frameworks such as prototype do it. For instance, in FBJS the DOM elements have an entirely new set of functions and the ones you are used to from the W3C specification are either crippled or non existent. You can see the differences by exploring this table (reproduced here from the one found on the <a href="http://wiki.developers.facebook.com/index.php/FBJS#FBJS_DOM_Objects" title="FBJS topic from Facebook Developers Wiki" target="_blank">Facebook Developers Wiki</a>)</p>
<p>&nbsp;</p>
<div>
<div class="wp_codebox_msgheader active"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('fbjs_table '); return false;">View Code</a> FBJS Reference</span>
<div class="codebox_clear"></div>
</div>
<div class="wp_codebox" style="display:none;">
<table style="background-color: rgb(221, 255, 187);">
<tbody>
<tr id="fbjs_table">
<th> JavaScript
</th>
<th> FBJS getter
</th>
<th> FBJS setter
</th>
<th> Description
</th>
</tr>
<tr>
<td> parentNode
</td>
<td> getParentNode
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td> nextSibling
</td>
<td> getNextSibling
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td> previousSibling
</td>
<td> getPreviousSibling
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td> firstChild
</td>
<td> getFirstChild
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td> lastChild
</td>
<td> getLastChild
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td> childNodes
</td>
<td> getChildNodes
</td>
<td>
</td>
<td> Returns a snapshot array of childNodes
</td>
</tr>
<tr>
<td> innerHTML
</td>
<td> n/a
</td>
<td> setInnerFBML
</td>
<td> Note that this can throw an error if you pass a string directly. Use <a title="Fb:js-string" href="http://basementcoders.com/index.php/Fb:js-string">Fb:js-string</a> to create the string first then pass that variable.
</td>
<td>
</td>
</tr>
<tr>
<td>innerHTML
</td>
<td>n/a
</td>
<td>setInnerXHTML
</td>
<td> Beta feature. Allows you to set the innerHTML of an element by passing in a string of XHTML. The XHTML is sanitized according to FBML rules and then placed into the document.
</td>
</tr>
<tr>
<td> innerText/textContent
</td>
<td> n/a
</td>
<td> setTextValue
</td>
<td> Not exactly like setInnerFBML as this will only allow text (no HTML)! It will remove all childNodes of the element it is called on.
</td>
</tr>
<tr>
<td> form
</td>
<td> getForm
</td>
<td>
</td>
<td> Doesn't work, use document.getElementById('formid') instead
</td>
</tr>
<tr>
<td> action
</td>
<td> getAction
</td>
<td> setAction
</td>
<td>
</td>
</tr>
<tr>
<td> value
</td>
<td> getValue
</td>
<td> setValue
</td>
<td>
</td>
</tr>
<tr>
<td> href
</td>
<td> getHref
</td>
<td> setHref
</td>
<td>
</td>
</tr>
<tr>
<td> target
</td>
<td> getTarget
</td>
<td> setTarget
</td>
<td>
</td>
</tr>
<tr>
<td> src
</td>
<td> getSrc
</td>
<td> setSrc
</td>
<td>
</td>
</tr>
<tr>
<td> className
</td>
<td> getClassName
</td>
<td> setClassName
</td>
<td>
</td>
</tr>
<tr>
<td> tagName
</td>
<td> getTagName
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td> id
</td>
<td> getId
</td>
<td> setId
</td>
<td>
</td>
</tr>
<tr>
<td> dir
</td>
<td> getDir
</td>
<td> setDir
</td>
<td>
</td>
</tr>
<tr>
<td> checked
</td>
<td> getChecked
</td>
<td> setChecked
</td>
<td>
</td>
</tr>
<tr>
<td> clientWidth
</td>
<td> getClientWidth
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td> clientHeight
</td>
<td> getClientHeight
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td> offsetWidth
</td>
<td> getOffsetWidth
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td> offsetHeight
</td>
<td> getOffsetHeight
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td> na
</td>
<td> getAbsoluteTop
</td>
<td>
</td>
<td> Returns the elements absolute position relative to the top of the page. Useful because of lack of offsetParent support.
</td>
</tr>
<tr>
<td> na
</td>
<td> getAbsoluteLeft
</td>
<td>
</td>
<td> Same as getAbsoluteTop, but horizontally.
</td>
</tr>
<tr>
<td> scrollTop
</td>
<td> getScrollTop
</td>
<td> setScrollTop
</td>
<td>
</td>
</tr>
<tr>
<td> scrollLeft
</td>
<td> getScrollLeft
</td>
<td> setScrollLeft
</td>
<td>
</td>
</tr>
<tr>
<td> scrollHeight
</td>
<td> getScrollHeight
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td> scrollWidth
</td>
<td> getScrollWidth
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td> tabIndex
</td>
<td> getTabIndex
</td>
<td> setTabIndex
</td>
<td>
</td>
</tr>
<tr>
<td> title
</td>
<td> getTitle
</td>
<td> setTitle
</td>
<td>
</td>
</tr>
<tr>
<td> name
</td>
<td> getName
</td>
<td> setName
</td>
<td>
</td>
</tr>
<tr>
<td> cols
</td>
<td> getCols
</td>
<td> setCols
</td>
<td>
</td>
</tr>
<tr>
<td> rows
</td>
<td> getRows
</td>
<td> setRows
</td>
<td>
</td>
</tr>
<tr>
<td> accessKey
</td>
<td> getAccessKey
</td>
<td> setAccessKey
</td>
<td>
</td>
</tr>
<tr>
<td> disabled
</td>
<td> getDisabled
</td>
<td> setDisabled
</td>
<td>
</td>
</tr>
<tr>
<td> readOnly
</td>
<td> getReadOnly
</td>
<td> setReadOnly
</td>
<td>
</td>
</tr>
<tr>
<td> type
</td>
<td> getType
</td>
<td> setType
</td>
<td>
</td>
</tr>
<tr>
<td> selectedIndex
</td>
<td> getSelectedIndex
</td>
<td> setSelectedIndex
</td>
<td>
</td>
</tr>
<tr>
<td> selected
</td>
<td> getSelected
</td>
<td> setSelected
</td>
<td>
</td>
</tr>
<tr>
<td> location
</td>
<td> n/a
</td>
<td> setLocation
</td>
<td>
</td>
</tr>
<tr>
<td> style
</td>
<td> getStyle
</td>
<td> setStyle
</td>
<td>
</td>
</tr>
<tr>
<td> n/a
</td>
<td> getRootElement
</td>
<td>
</td>
<td> used as document.getRootElement - returns the top-level element of your profile box or canvas page
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>&nbsp;</p>
<p>So as you can see, porting an existing javascript widget to FBJS would not work so well, lots of manual labour and debugging. In FBJS:</p>
<h3>Instead of </h3>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p176code7'); return false;">View Code</a> JAVASCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1767"><td class="code" id="p176code7"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> elem <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'someDiv'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
elem.<span style="color: #660066;">innerHTML</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;&lt;h1&gt; here's some html!&lt;/h1&gt;&quot;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h3>You write</h3>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p176code8'); return false;">View Code</a> JAVASCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1768"><td class="code" id="p176code8"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> elem <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'someDiv'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
elem.<span style="color: #660066;">setInnerXHTML</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&lt;h1&gt; here's some html!&lt;/h1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Essentially properties don't exist, only their setters and getters. It takes some getting used to, and from what I can gleam from <a href="http://forum.developers.facebook.com/viewtopic.php?id=27577" title="FBJS2 Beta Forum topic" target="_blank">FBJS2</a> they have listened to the bitching and moaning of the Facebook developer community and have made writing FBJS more like writing normal javascript inside a browser. This post is not about FBJS2 though, it's about plain jane FBJS and so we continue...</p>
<p class="box" style="margin-left:50px;margin-right:50px;"><strong>Firebug<br />
            </strong>Do you have the <a href="https://addons.mozilla.org/en-US/firefox/addon/1843" target="_blank">Firebug addon</a> installed? If the answer is no, do not pass go, do not collect $200. Seriously, writing any type of rich Javascript widget without the aid of Firefox is an excercise in futility. Not only does it provide some pretty good Javascript debugging options, it also has a network monitoring and a DOM inspector. You can edit both the HTML or CSS of a page on the fly to experiment with changes in real time. Luckily FBJS isolates you from the browser so I only had to debug the code in Firefox with the aid of Firebug. For Internet Explorer I was SOL when it came to debugging the stylesheets, it was all hunt and peck.
            </p>
<h3>The Bad about FBJS</h3>
<p>Aside from not really being able to use external libraries like Prototype and jQuery which override a lot of the default classes in Javascript is the fact that Facebook has created a lot of really kickass widgets that you cannot use for your own application. For instance, the <a href="http://wiki.developers.facebook.com/index.php/Fb:multi-friend-input" target="_blank">&lt;fb:multi-friend-input&gt;</a> renders a really nice little widget that allows you to pick some friends and add them to (what looks like) an input box much like you would see in the To: field of Apple's Mail.app. You, however cannot extend this widget and use it for purposes other than how Facebook indended it to be used. You could not, for example, use it to create a list of fruit, or motorcycles even though if you inspect the widget at runtime you can see that Facebook definitely designed it to be reused for othe purposes.</p>
<p>That's ok, you think, I'll just &quot;procure&quot; the source code for the widget through Firebug and use it on my page as I see fit. Bzzzzzt, wrong! The widget is written to work outside of your application's Sandbox, so it has access to the actual Javascript classes and functions.  If you tried to use it within your sandbox, it just plain wouldn't work.</p>
<p>So really the best you can do is find out how Facebook made something look by inspecting the CSS and HTML for the rendered widget, then you go to town creating your own version of the behaviour for the widget in FBJS.</p>
<p>&nbsp;</p>
<h2>Step 1 - The visuals</h2>
<p>Creating an FBJS widget is no different than a Javascript widget. And for Javascript widgets, I always start with a design. Mock up what your widget will look like using only html and css.  My widget will mimic the aforementioned &lt;fb:multi-friend-input&gt;, except it will be used for entering and storing &quot;tags&quot;. You might be familiar with &quot;tags&quot; if you've ever run your own WordPress blog or use the social bookmarking application <a href="http://del.icio.us/" target="_blank">del.icio.us</a>.  A tag is just a piece of text you want to associate with something such that you can lookup that something later on by specifying it's tag. Here is what I came up with:</p>
<p>    <img src="http://basementcoders.com/wp-content/uploads/2009/04/fbjs1.png" alt="fbjs1" title="fbjs1" width="361" height="67" class="aligncenter size-full wp-image-200" /></p>
<p>That's where things start, with the design, and of course you now have some motivation to add behaviour.  Believe me, getting this to look just right across browsers is by far harder than the FBJS part!</p>
<h2>Step 2 - The Behaviour</h2>
<p>Just to get this out of the way, yeah the u in behaviour is supposed to be there =)</p>
<p>Now, adding the behaviour to your widget is simply a matter of listing out all the things you want the widget to do and then finding out how to do them in FBJS. Here were my list of requirements:</p>
<ol>
<li>Allow users to type text into the widget</li>
<li>When the hit enter, draw the blue box with the x button around the text and allow them to enter more text
<ul>
<li>Don't allow them to enter duplicates</li>
<li>A set of hidden form inputs should track the new tag for form submittal purposes</li>
</ul>
</li>
<li>Users should be allowed to delete tags
<ul>
<li>By clicking the x button on the tag</li>
<li>By pressing the backspace key</li>
<li>A set of hidden form inputs should track the deleted tag for form submittal purposes</li>
</ul>
</li>
<li>A tag should be highlighted when
<ul>
<li>hovered over with the mouse</li>
<li>prior to being deleted via the backspace key</li>
</ul>
</li>
</ol>
<h3>Behaviour 1 - Allow users to type text</h3>
<p>For this behaviour what we'll do is have a &quot;non-styled&quot; text box be inserted in the widget and have the textbox be the one that gets focus when someone clicks on the widget, we do this by adding the following code to the widget's constructor function:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p176code9'); return false;">View Code</a> JAVASCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1769"><td class="code" id="p176code9"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">inputElem</span> <span style="color: #339933;">=</span> document.<span style="color: #660066;">createElement</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'input'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">inputElem</span>.<span style="color: #660066;">setType</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'text'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>limitTagSize <span style="color: #339933;">!=</span> undefined<span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">inputElem</span>.<span style="color: #660066;">setMaxLength</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">15</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">inputElem</span>.<span style="color: #660066;">setClassName</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'tag_input'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">inputElem</span>.<span style="color: #660066;">addEventListener</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'keydown'</span><span style="color: #339933;">,</span> _inputElemKeyDownHandler.<span style="color: #660066;">bind</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">inputElem</span>.<span style="color: #660066;">addEventListener</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'keyup'</span><span style="color: #339933;">,</span> _inputElemKeyUpHandler.<span style="color: #660066;">bind</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">elem</span>.<span style="color: #660066;">appendChild</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">inputElem</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Line 1 we create an input element and on line 2 we set it to be a text element.  Line 3 just checks to see if a constructor parameter was passed in which limits a tag's number of characters.</p>
<p>Line 4 sets our style for the text input, which basically gives it no borders it's effectively invisible but the text carat still shows. Line 5-6 set some event handlers for when the user clicks keys in the input and line 7 adds the input to our widget's parent element</p>
<p>To make sure that the input element is always the element which gets focus, we add the following to our widget's parent element:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p176code10'); return false;">View Code</a> JAVASCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p17610"><td class="code" id="p176code10"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">elem</span>.<span style="color: #660066;">addEventListener</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'click'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>evnt<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">inputElem</span>.<span style="color: #660066;">removeClassName</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'tag_input_hide'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">inputElem</span>.<span style="color: #000066;">focus</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>.<span style="color: #660066;">bind</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Basically we remove a css class which effectively makes the input invisible and we set focus to the input.</p>
<h3>addEventListener</h3>
<p>As you can see from the above examples, addEventListener comes in handy. What it does is it allows you to intercept events on DOM elements and use your own code to handle them. For instance jQuery has a very similar method called <a href="http://docs.jquery.com/Events/bind#typedatafn">bind()</a> which does this and the FBJS method is simply an extended version of the <a href="https://developer.mozilla.org/En/DOM:element.addEventListener" target="_blank">W3C addEventListener</a>.</p>
<p>The great thing about addEventListener is it's browser agnostic. You are passed an Event object which is an FBJS object that works in all browsers, so you don't need a bunch of conditionals to check if certain properties of the event object exist. The FBJS Event object you are passed have the following properties and methods    </p>
<table width="650" border="1">
<tr>
<td colspan="5" align="center"><strong>FBJS Event</strong></td>
</tr>
<tr>
<td colspan="2" align="center"><strong>Properties</strong></td>
<td width="19" align="center">&nbsp;</td>
<td colspan="2" align="center"><strong>Methods</strong></td>
</tr>
<tr>
<td width="90">type</td>
<td width="306">The type of event this is: click, mouseover, etc..</td>
<td>&nbsp;</td>
<td width="152">preventDefault</td>
<td width="253">Prevents the default event handler from firing on this element, but still propgates the event up the DOM to parent elements</td>
</tr>
<tr>
<td>target</td>
<td>The target DOM element this event applies to</td>
<td>&nbsp;</td>
<td>stopPropogation</td>
<td>Stops the propogation of this event to handlers up the DOM tree</td>
</tr>
<tr>
<td>keyCode</td>
<td>The key code issued for events like keyup, keydown, keypressed</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>ctrlKey</td>
<td>Tells us whether the control key was being held</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>shiftKey</td>
<td>Tells us whether the shift key was being held</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>metaKey</td>
<td>Tells us whether the meta key (i.e Windows Key, or Apple Key) was being held</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</table>
<p>What does &quot;this&quot; reference in an event handler? That really all depends on whether you used bind or not when adding your event handler method to an element. If you did bind your event handler to some object then that object you specified is accessible via &quot;this&quot;. However, if you didn't bind the event handler function, then &quot;this&quot; inside the handler simply is an alias for the target property listed above.</p>
<h3>Behaviour 2 - Adding a tag to the widget</h3>
<p>Adding a piece of text the user entered as a tag (i.e. <img src="http://basementcoders.com/wp-content/uploads/2009/04/fbjs2.png" alt="fbjs2" title="fbjs2" width="58" height="21" class="alignnone size-full wp-image-211" style="vertical-align:middle;"/>) involves the following steps:</p>
<ol>
<li>Detect the enter key being pushed</li>
<li>Ensure the text is not empty or a duplicate of an existing tag</li>
<li>Add the text of the tag to the hidden input fields which will be submitted with with the form</li>
<li>Draw the blue boxed text with the x button in the widget</li>
</ol>
<p>For step 1, we need to dive into the  _inputElemKeyDownHandler, in there we have some code like this:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p176code11'); return false;">View Code</a> JAVASCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p17611"><td class="code" id="p176code11"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> ENTER <span style="color: #339933;">=</span> <span style="color: #CC0000;">13</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>evnt.<span style="color: #660066;">keyCode</span> <span style="color: #339933;">==</span> ENTER<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  evnt.<span style="color: #660066;">preventDefault</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Steps 2-4 are handled within the _inputElemKeyDownHandler:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p176code12'); return false;">View Code</a> JAVASCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p17612"><td class="code" id="p176code12"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> tagText <span style="color: #339933;">=</span> trim<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">inputElem</span>.<span style="color: #660066;">getValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>evnt.<span style="color: #660066;">keyCode</span> <span style="color: #339933;">==</span> ENTER <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> tagText <span style="color: #339933;">!=</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #006600; font-style: italic;">//they hit Enter, add the tag if it's not empty</span>
  <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">addTag</span><span style="color: #009900;">&#40;</span>tagText<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">inputElem</span>.<span style="color: #660066;">setValue</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">inputElem</span>.<span style="color: #000066;">focus</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>The bulk of the work is really done inside the &quot;addTag&quot; method of our widget which looks like this:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p176code13'); return false;">View Code</a> JAVASCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p17613"><td class="code" id="p176code13"><pre class="javascript" style="font-family:monospace;">TagEntry.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">addTag</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>tagText<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>this.<span style="color: #660066;">tags</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">tags</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">value</span> <span style="color: #339933;">==</span> tagText<span style="color: #009900;">&#41;</span>  <span style="color: #009900;">&#123;</span>
            <span style="color: #006600; font-style: italic;">//tag already exists</span>
            <span style="color: #000066; font-weight: bold;">return</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #003366; font-weight: bold;">var</span> tag <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Tag<span style="color: #009900;">&#40;</span>tagText<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">tags</span>.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>tag<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">hiddenInputsContainer</span>.<span style="color: #660066;">appendChild</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">createNewTagHiddenInput</span><span style="color: #009900;">&#40;</span>tag<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">elem</span>.<span style="color: #660066;">insertBefore</span><span style="color: #009900;">&#40;</span>tag.<span style="color: #660066;">elem</span><span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">inputElem</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    tag.<span style="color: #660066;">ondelete</span> <span style="color: #339933;">=</span> removeTag.<span style="color: #660066;">bind</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    tag.<span style="color: #660066;">onmouseover</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>evnt<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">unhighlightTag</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>.<span style="color: #660066;">bind</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Lines 2-7 check to see if the incoming tag text is the same as any existing tag we use. If there is a duplicate, we simply return without taking any action. The rest of the method creates a new Tag object (which abstracts away a lot of work to do with tag management), throws that tag onto the widgets existing tags array, adds the hidden input for the tag text so it can be submitted via a form and sets some callback functions which are fired at appropriate times according to the Tag object.</p>
<h3>Behaviour 3 - Removing a tag from the widget</h3>
<p>In order to make the widget work like the &lt;fb:multi-friend-input&gt; we need to support removal of tags in two ways: 1) when they click the x button of the tag 2) if they hit the backspace button the text input and the text input is empty. Actually, the second one is a bit more complicated because we first highlight the tag immediately to the left of the text input, then their second backspace key press actually does the removal.</p>
<p>Given the above two means of which to remove a tag there is  naturally two places where removal takes place, 1) in the x button's click handler 2) in the input element's key down handler.</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p176code14'); return false;">View Code</a> JAVASCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p17614"><td class="code" id="p176code14"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> removeTag<span style="color: #009900;">&#40;</span>tagText<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     <span style="color: #006600; font-style: italic;">//gotta change the hidden input for this tag value to have it's named prepended with 'removed_'</span>
    <span style="color: #003366; font-weight: bold;">var</span> node <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">hiddenInputsContainer</span>.<span style="color: #660066;">getFirstChild</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span> node <span style="color: #339933;">&amp;&amp;</span> node.<span style="color: #660066;">getTagName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toLowerCase</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">'input'</span> <span style="color: #339933;">&amp;&amp;</span> node.<span style="color: #660066;">getValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> tagText<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        node <span style="color: #339933;">=</span> node.<span style="color: #660066;">getNextSibling</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>node <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> node.<span style="color: #660066;">getValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> tagText<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003366; font-weight: bold;">var</span> tag <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Tag<span style="color: #009900;">&#40;</span>tagText<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #006600; font-style: italic;">//add the new hidden input</span>
        <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">hiddenInputsContainer</span>.<span style="color: #660066;">appendChild</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">createNewTagHiddenInput</span><span style="color: #009900;">&#40;</span>tag<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #006600; font-style: italic;">//remove the old hidden input</span>
        <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">hiddenInputsContainer</span>.<span style="color: #660066;">removeChild</span><span style="color: #009900;">&#40;</span>node<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #003366; font-weight: bold;">var</span> i<span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> found <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>this.<span style="color: #660066;">tags</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">tags</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">value</span> <span style="color: #339933;">==</span> tagText<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            found <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">break</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>found<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">tags</span>.<span style="color: #660066;">splice</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">,</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Without seeing all of the code this might look a bit strange, but what the above code does is it finds the existing hidden input element which represents the tag being removed, appends a new hidden input that denotes that the tag has been removed (the &quot;true&quot; parameter on creteNewTagHiddenInput specifies that the hidden input to create should be a &quot;deleted&quot; tag) and finally the tag's original hidden input is removed from the DOM tree so it won't be submitted along wiht the form. The rest of the method searches for that same tag in the widget's tags array and splices it out. The removal of the visual elements of a tag are done elsewhere, and is simply a pruning of that element from the DOM tree.</p>
<p>Now for the Backspace method:</p>
<p><code>_inputElemKeyDownHandler</code></p>
<hr />

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p176code15'); return false;">View Code</a> JAVASCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p17615"><td class="code" id="p176code15"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">tagHighlighted</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    evnt.<span style="color: #660066;">preventDefault</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>evnt.<span style="color: #660066;">keyCode</span> <span style="color: #339933;">==</span> BACKSPACE<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">tagHighlighted</span>.<span style="color: #660066;">remove</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//this really calls the removeTag function listed above</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">tags</span>.<span style="color: #660066;">length</span> <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003366; font-weight: bold;">var</span> lastTag <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">tags</span><span style="color: #009900;">&#91;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">tags</span>.<span style="color: #660066;">length</span><span style="color: #339933;">-</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
            lastTag.<span style="color: #660066;">elem</span>.<span style="color: #660066;">addClassName</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'tag_hover'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">tagHighlighted</span> <span style="color: #339933;">=</span> lastTag<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #006600; font-style: italic;">//unhide the input</span>
            <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">tagHighlighted</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">inputElem</span>.<span style="color: #660066;">removeClassName</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'tag_input_hide'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>evnt.<span style="color: #660066;">keyCode</span> <span style="color: #339933;">==</span> TAB<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #006600; font-style: italic;">//unhide the input</span>
        <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">unhighlightTag</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>First we check to see if there is a tag highlighted already, if not, we don't remove anything and another chunk of code highlights the tag immediately to the left of the input. But if we currently do have a highlighted tag we check to see if the backspace key has been pushed. If it has then we remove the tag, and highlight the tag which was immediately to the left of the removed tag. Or if there are not tags left, we show the input so they can enter more tags.</p>
<h3>Behaviour 4 - Tag highlighting</h3>
<p>By describing what has been going on in the previous behaviours, we have shown how tags are highlighted. Basically, the DOM element which represents it gets a new CSS class called tag_hover which will highlight the tag, like so:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p176code16'); return false;">View Code</a> JAVASCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p17616"><td class="code" id="p176code16"><pre class="javascript" style="font-family:monospace;">lastTag.<span style="color: #660066;">elem</span>.<span style="color: #660066;">addClassName</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'tag_hover'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>&nbsp;</p>
<h2>Using the widget</h2>
<p>To use the widget we need to have a set of divs which look like this so:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p176code17'); return false;">View Code</a> HTML4STRICT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p17617"><td class="code" id="p176code17"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">div</span></a> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;myclearfix&quot;</span> <span style="color: #000066;">style</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;border: 1px solid rgb(132, 150, 186); padding-right: 3px; padding-top:3px;padding-bottom:3px;width: 350px;&quot;</span>&gt;</span>
    <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">div</span></a> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;tagEntry&quot;</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;myclearfix tag_entry&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">div</span></a>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">div</span></a>&gt;</span></pre></td></tr></table></div>

<p>The <a href="http://www.webtoolkit.info/demo/css/clearfix/demo.html" target="_blank">clearfix</a> div ensures all the CSS floated elements don't overlap each other and it provides a nice section with a blueish border to mimic the look of a text input. The child div is the div the javascript will attach to, it too is clearfix but also has the &quot;tag_entry&quot; class. In retrospect, I probably could have made the javascript do all these CSS class editions and div structure, but I'll leave that as an exercise to the reader <img src='http://basementcoders.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>The Javascript to go along with the above tags is:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p176code18'); return false;">View Code</a> JAVASCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p17618"><td class="code" id="p176code18"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script<span style="color: #339933;">&gt;</span>
    <span style="color: #003366; font-weight: bold;">var</span> ds <span style="color: #339933;">=</span>    <span style="color: #009900;">&#123;</span>
                    results<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'apple'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'orange'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'bananna'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'peach'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'grape'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'pineapple'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'plum'</span><span style="color: #009900;">&#93;</span>
                <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> tagEntry <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> TagEntry<span style="color: #009900;">&#40;</span>document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'tagEntry'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> ds<span style="color: #339933;">,</span> <span style="color: #3366CC;">'tags[]'</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">15</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    tagEntry.<span style="color: #660066;">renderTags</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>That will render a tag input widget which looks like so</p>
<p><img src="http://basementcoders.com/wp-content/uploads/2009/04/fbjs3.png" alt="fbjs3" title="fbjs3" width="361" height="66" class="aligncenter size-full wp-image-208" /></p>
<h2>Closing thoughts</h2>
<p>Of course the blog post is only shows the tip of the iceberg. When you <a href='http://basementcoders.com/wp-content/uploads/2009/04/fbjs-taginput.zip'>download the actual source code</a> for this widget you'll see there is a lot more going on.</p>
<p>I enjoyed creating the FBJS widget, I guess I didn't see FBJS as being as big an inconvenience as others profess. Probably because I was &quot;starting fresh&quot; and not trying to port an existing widget. Would I like to use prototype, jQuery or script.acul.us? You bet, but for now I'll have to make due. I would rather the Facebook folks let us use their awesome set of widgets they have put together, instead of us having to re-invent the wheel.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2009/04/creating-an-fbjs-widget/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Five Days of Wicket!</title>
		<link>http://basementcoders.com/2009/03/five-days-of-wicket/</link>
		<comments>http://basementcoders.com/2009/03/five-days-of-wicket/#comments</comments>
		<pubDate>Wed, 11 Mar 2009 17:25:13 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Craig]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=171</guid>
		<description><![CDATA[Checkout this series of articles I'm involved in over at Mystic Coders called The Five Days of Wicket. The purpose of the article is to show how to create a properly layered Wicket application complete with complimentary frameworks such as Spring and Hibernate.]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<img src="http://basementcoders.com/wp-content/uploads/2009/03/logo.png" alt="Wicket Logo" title="Wicket Logo" width="899" height="108" class="aligncenter size-full wp-image-172" /><br/><br />
Checkout this series of articles I'm involved in over at Mystic Coders called <a href="http://www.mysticcoders.com/blog/2009/03/09/5-days-of-wicket/" title="Five Days of Wicket">The Five Days of Wicket</a>.  The purpose of the article is to show how to create a properly layered Wicket application complete with complimentary frameworks such as <a target="_blank" href="http://www.springsource.org/">Spring</a> and <a target="_blank" href="http://www.hibernate.org/">Hibernate</a>.
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2009/03/five-days-of-wicket/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stupid C++ Tricks</title>
		<link>http://basementcoders.com/2009/03/stupid-c-tricks/</link>
		<comments>http://basementcoders.com/2009/03/stupid-c-tricks/#comments</comments>
		<pubDate>Sat, 07 Mar 2009 17:36:06 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Alex]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[tricks]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=167</guid>
		<description><![CDATA[I recently came across this C++ Soup post, which demonstrates some cute C++ tricks. Now by cute, I mean stupid, similar to Dave Letterman's segment "stupid pet tricks" (you can google that if you've never seen this). It's a useless language exercise with little practical application except to show how obfuscated one can make C++. [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
I recently came across this <a href="http://blog.cplusplus-soup.com/2009/03/fp-and-c-left-fold-fibonacci.html">C++ Soup</a> post, which demonstrates some cute C++ tricks. Now by cute, I mean stupid, similar to Dave Letterman's segment "stupid pet tricks" (you can google that if you've never seen this). It's a useless language exercise with little practical application except to show how obfuscated one can make C++. Are there any benefit to these tricks? Lets explore.</p>
<p>Now all C++ programmers do this (myself included) just to see if they understand template programming, so keep in mind that this is NOT a critique of this particular author, who I'm sure is a C++ Ninja. It's just a recent example that triggered this rant. No, just have a look at half the <a href="http://boost.org">boost</a> libraries to see this thinking taken to the extreme. Or even the C++ standard library; does anyone really use the cumbersome std::for_each function or any of that bind stuff? They all feel like they're unfinished ideas: they're onto something, but they're not quite there yet.</p>
<p>These (what I'm calling) C++ tricks are often segments of templated C++ code that push generic programming to solve some kind of basic problem, that is typically solved using simpler (but more verbose) code. A trick author is often amazed (and proud) at how small or flexible the code is, but hopefully realizes that the amount of work or expertise required to make the trick outweighs most benefits. The code is then shelved. Lets cut this silliness out.</p>
<p>Furthermore, most application developers will steer clear (or be ignorant) of such tricks, and popular C++ libraries do well to not require such expertise from their users.</p>
<p>Is there any benefit to these tricks? Yes, only to show what could be possible with C++.</p>
<p>C++ is an extremely powerful language, giving you <i>compile time</i> dynamic/generic programming with no loss of runtime performance. No other language does this so fully and completely, and C++ is still the only language option in many demanding areas.</p>
<p>However, the language needs to grow, and it needs to grow fast. We must look at what these tricks are trying to do, and then think how we can change the language to do the same thing in a sane, logical fashion. C++0x is working on this with lambdas, type inference, better error reporting and some other niceties. But we needed these features yesterday, and get people using them. Lets steal more features from other languages. Lets turn up the meta programming capabilities so we can extend the language without meta-compilers and preprocessors, which until now provide the bulk of the useful new language extensions.</p>
<p>There is no reason why C++ can't offer easy to use and powerful compile-time dynamic programming, resulting in code that looks like a dynamic scripting language, but with safer types and kick-ass performance, memory use and code size.</p>
<p>Lets get to work <img src='http://basementcoders.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2009/03/stupid-c-tricks/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Setting up a new remote git repository</title>
		<link>http://basementcoders.com/2009/03/setting-up-a-new-remote-git-repository/</link>
		<comments>http://basementcoders.com/2009/03/setting-up-a-new-remote-git-repository/#comments</comments>
		<pubDate>Wed, 04 Mar 2009 19:32:16 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=163</guid>
		<description><![CDATA[If you are like me, I have a "central" git repository on a computer I backup regularly. On my laptop/desktop I do all my work and make sure to do constant pushes to the "central" repository. Just thought I would mention that I follow the method listed here to do this. His post is spot [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
If you are like me, I have a "central" git repository on a computer I backup regularly.  On my laptop/desktop I do all my work and make sure to do constant pushes to the "central" repository.<br/><br />
Just thought I would mention that I follow the method listed <a href="http://toolmantim.com/articles/setting_up_a_new_remote_git_repository">here</a> to do this.  His post is spot on and he gives a really good dissection of what is going on behind the scenes.<br/><br />
Great job <a href="http://toolmantim.com/">Toolman Tim</a>!
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2009/03/setting-up-a-new-remote-git-repository/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft and Mono</title>
		<link>http://basementcoders.com/2009/02/microsoft-and-mono/</link>
		<comments>http://basementcoders.com/2009/02/microsoft-and-mono/#comments</comments>
		<pubDate>Sun, 22 Feb 2009 00:43:46 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Alex]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[mono]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=147</guid>
		<description><![CDATA[The Linux Outlaws Podcast recently (in ep. #75) had an interview with Miguel de Icaza on the topic of Mono. Since this is often a heated topic among Linux hackers, I figured I'd chime in with my two cents. Miguel is well know in Linux land, having started the GNOME desktop and countless other desktop [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
The Linux Outlaws Podcast recently (in ep. #75) had an interview with Miguel de Icaza on the topic of Mono. Since this is often a heated topic among Linux hackers, I figured I'd chime in with my two cents.</p>
<p>Miguel is well know in Linux land, having started the GNOME desktop and countless other desktop applications for Linux. He's done more for Linux in the past decade than most (including myself) will ever dream of doing, so critiquing such a leader can't be done lightly.</p>
<p>Miguel unfortunately started out as a typical C-only guy who looked on C++ as large and useless. For years with GNOME he and application developers (myself included) slaved away using the C-based GTK+ library to make graphical applications. Man-centuries were wasted dealing with cumbersome C and its unforgiving API style. C++ was ignored, almost laughed at, despite the fact commercial C++ GUI libraries have been the norm. To this day, GTK+ is still an utter failure with respect to commercial application adoption.</p>
<p>Eventually, even Miguel realized that C was not the language for desktop application development as it was hurting GTK+ adoption. Rather than embrace C++, he threw out the baby with the bath water and embraced C# itself for GNOME application development with the Mono project.</p>
<p>The Mono project is an open source implementation of Microsoft's C# language and runtime for Linux and other operating systems. Although one goal of this project is very honourable (allowing custom/vertical/boring applications from Windows-centric shops to be usable under Linux), I think in general Microsoft is making a sucker out of the Mono developers and users, and here's why:</p>
<p>Microsoft was once an innovative, competitive company. That however, was along time ago. They're now a convicted monopoly who still to this day function primary to lock people into their various technologies. I don't want to sound like a typical "Microsoft is evil" parrot but this is what a monopoly does. I can't fault them for it, but let's not be naive. I can spend a blog post alone on Microsoft's various transgressions, but for now I'll simply rat off areas which they really like to maintain their monopoly lock-ins: file servers/smb, office formats, web browsers/ActiveX, web browsers/IE stagnation, media formats/codecs, flash/Silverlight. Heck, I can't even access my company's MS Exchange web interface in Firefox without getting a substandard interface to email. They can't (well, don't want to) even make a website without trying to lock-in you into Internet Explorer on Windows.</p>
<p>Microsoft is not stupid and understands that platforms are really about capturing and holding developer mind share. Java and similar truly multi-platform technologies that they didn't control was viewed as a huge threat to the Windows empire. So Microsoft "embraced and extended" Java-principles, gave it a new name (C#) and injected a boat load of Windows-specific stuff into it. We can debate the finer differences between the languages until the cows come home, but fundamentally, at their core, they're identical languages, except that C# isn't multi-platform and is very Windows-centric. By the way, Adobe's flash/Actionscript is the next threat and target after Java, so look out for a serious assault on that front from Silverlight.</p>
<p>Given this, it's easy to see why Microsoft likes the Mono project. They get to pretend C# is multi-platform ("see, we're not a monopoly!") and friendly towards Linux and open source, but they don't have to devote any of their own resources to it. Furthermore, Mono on Linux will never be a first class citizen (like in Java) and will always be a version or three behind, lacking in proprietary features. To get the "true" C# experience you'll still be sold a Windows system. Microsoft gets to point to Mono and claim that C# is multi-platform, but will then tell you you must run their version on Windows to get the true, modern and full experience. This basically relegates Mono to (using the colloquial term) being Microsoft's bitch.</p>
<p>Although I used to code a lot of Java, I'm not really a Java proponent. But honestly, if the Linux desktop needs a garbage-collected, byte code-interpreted, type safe and object-oriented language, then Java is hard to beat. Decade or two of testing, mature IDEs, plethora of libraries and truly multi-platform (first class citizenship for Linux) and now open source (I hear?) are all features that would be stupid to ignore. But for some reason, Novell decides to chase Microsoft's ever changing specs while having to rebuild everything from the ground up.</p>
<p>Miguel ends off the interview with what I think is a little Stockholm syndrome. He says that most people unfairly demonize Microsoft, ignoring the specific points (like the above) those people make. Heck, he excuses Balmer's public demonization of Linux as the spouting of a sales man, ignoring the fact that this is the CEO of the big ship Microsoft. One simply needs to use non-Microsoft operating systems and applications in a Microsoft-based shop to truly understand the breadth and effect of their monopolistic lock-in.</p>
<p>But alas, I realize that there are other factors here in Novell's decision to fund Mono. Novell is scrambling for money and business opportunities, looking for any edge against Red Hat, even if that means dancing with the monopoly Microsoft. Although you can't fault Novell for doing what they think is in their best business interests, let's not get delusional into thinking Mono is on some level playing field with Microsoft.
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2009/02/microsoft-and-mono/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Surviving Integration Hell -or- How *not* to Handle Projects Outsourced to Vendors</title>
		<link>http://basementcoders.com/2009/02/surviving-integration-hell-or-how-not-to-handle-projects-outsourced-to-vendors/</link>
		<comments>http://basementcoders.com/2009/02/surviving-integration-hell-or-how-not-to-handle-projects-outsourced-to-vendors/#comments</comments>
		<pubDate>Fri, 20 Feb 2009 20:31:01 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Craig]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=132</guid>
		<description><![CDATA[Integration--the process of porting ones build artifacts from a development to end production environment--in my mind is the biggest unknown for a software project.  Production environments are usually locked down, log files are hard to get to and requests for provisions or server resets -- long to wait for.  What's even worse?  When your integration process involves not only the end goal of "hosting" your application, but also incorporates build and deploy processes and policies that directly affect your code base.]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<p>Integration--the process of porting ones build artifacts from a development to end production environment--in my mind is the biggest unknown for a software project.  Production environments are usually locked down, log files are hard to get to and requests for provisions or server resets -- long to wait for.  What's even worse?  When your integration process involves not only the end goal of "hosting" your application, but also incorporates build and deploy processes and policies that directly affect your code base.</p>
<p>For instance, a client I worked for needed a site.  They provided a nice set of requirements and wireframes, in fact they provided all visual aspects for the site mocked as ASP pages (including the AJAX elements).  What more could I ask for?  It seemed like the perfect storm, a developer I hired would swoop in and add the dynamic elements to the site and we would be done in no time.</p>
<p>We weren't limited in the frameworks we chose in fact early on it was assumed the client only cared that the end result ran fine under IBM WAS.  No problem (I thought), WAS is a servlet container and that's the beauty of Java web development, there is actually a spec describing the functionality of application servers.  This means that the application being produced should operate in a bubble of sorts, it should know nothing (well that's not always possible) of where it's living, it's just a war and it needs a place to live.</p>
<p>Then reality kicked in.  About a few weeks into the project the client presented a "Build and Deployment process for the &lt;insert internal acronym&gt; environment" document.  As far as the build document was concerned Ant was the only real requirement.  Their continuous integration (CI) tool however did support Maven which was great because Maven is what I used.  So, with too much trust in the reasonability of clients we continued on our development path.</p>
<p><span id="more-132"></span></p>
<p>Development went relatively smoothly, we deployed the code to a local Tomcat instance so our QA people could do some basic smoke tests.  When we were confident the code was ready for UAT, we asked the client if they could deploy the code to their servers.  This required a few things:</p>
<ol>
<li>Import the code into their SVN repository</li>
<li>Update some configuration files to match some of their environment settings (i.e. DB host names, file system folder paths, etc...)</li>
<li>Have their CI server build the code</li>
<p><br/></p>
<p>Steps 1 and 2 were a breeze but then I needed to get the client involved in step 3.  I was not familiar with their CI server and I didn't have time to learn it's ins and outs.  I asked the client to setup the CI server to compile and deploy the code by providing them with the Maven goals which needed to be executed. They didn't like this.  Even though their CI server was perfectly capable of building code via Maven, their corporate standards did not have a section on Maven and therefore Maven did not exist to them.  ANT was the only way to build, ANT was the only way they were going to get our code compiled and deployed.  The catch here was that they didn't want to create an ANT script for us, they wanted us to do it.</p>
<h2>Maven to the rescue - Ant Script Generation</h2>
<p>With one command: <code>mvn ant:ant</code> I was able to generate an ant script based off the maven pom.xml file I had already created for the project.  I then ran <code>mvn dependencies:directory</code> to have maven place all the dependencies for the project into a directory under <code>target</code> such that I could have the ant script reference the directory instead of having it download the dependencies, something the end build server would not allow.</p>
<p>With this I thought I was in the clear, I had a working Ant script and life was good.  Then the client said "but this doesn't look like the one that was there already".  "The one that was there already?" I thought?  What do you mean?  This is a new project.  Apparently there was a "static" site already created for the project that did not include the dynamic part we were creating.  Well, I shouldn't say that, it did have a few small Struts 1.2x apps attached to it, but that was it.  I tried to assure them that the static site could remain in place, and our app would simply live at a context under the main site.  All they would have to do is build and deploy both sites.  Their answer was (can you guess?) No. They wanted one ant script which built everything.  And they didn't want to have to build and deploy several war files, that is, they didn't want to build the struts apps and our app, they just wanted one big war file.</p>
<p>Not to mention, they wanted the code to have a specific (and very antiquated) directory structure.  That's right, they wanted me to completely and utterly gut my Maven src/main/java type directory structure and replace it with their own.  No... freaking... way...</p>
<h2>Git to the rescue</h2>
<p>During the entire project I had been using Git for my local source control.  This allowed me to keep version copies of my source code as the project progressed and only when I felt the code was ready to be put onto the client's SVN server would I do a <code>git svn dcommit</code>. This proved to be very good foresight on my part as it allowed me to keep two separate versions of the code base.  One that I kept in git, and one that I pushed to the client, but it wasn't as cut and dry as that.  Read on...</p>
<h2>Maven Assemblies to the rescue</h2>
<p>Now that it was determined that that directory structure of my project was to conform to the client's custom structure I was in a quandry.  I like Maven, it's great and I really couldn't see myself going back to Ant.  So what I did was I created a Maven Assembly which takes the code and artifacts from my local Maven project and spits out a project who's directories conform to the client's wishes.  I then rsync the assembled directory over to a place on my hard drive that contains the SVN checkout of the client's code.</p>
<p>Using these techniques I can now keep my existing maven layout, commit my changes to git whenever I wish.  When I'm ready to give the client a build, I follow these steps:</p>
<ul>
<li>mvn assembly:directory</li>
<li>cd target/project-assembly.dir</li>
<li>rsync -a ./ ~/src/client-svn</li>
<li>cd ~/src/client-svn</li>
<li>svn commit</li>
</ul>
<h2>Other General Problems You as a Client should Avoid</h2>
<p>If you are going to outsource projects to outside vendors here are some tips:</p>
<ul>
<li>Let vendors have access to log files and web server restarts in DEV
<ul>
<li>I had access to neither. It slowed down integration at least 10 fold.  I had to request both log files and server restarts and it could take up to 12 hours to get a response.  I actually resorted to intentionally throwing Exceptions with my log messages in them just to get by.  If I could have <code>tail -F</code>'d a log file or two, things would have been so much better.</li>
</ul>
</li>
<li>I get build standards, really I do.  But when dealing with outside vendors you either have to be upfront about them from day 1, or you have to have people on staff who can help migrate a project to the standard.  I still feel to this day that it was not my responsibility to convert my codebase to Ant and to their folder structures, my job was to create a deliverable. In the Java world that means a) source code and b) a means to build it to a WAR file</li>
<li>VPN - <b>for the love of god people</b> allow your freaking VPN to resolve domain names at the very least.  The VPN I was stuck with would not resolve external or internal domain names.  Everything was done by IP address.  I kept pinching myself to see if I was in a nightmare or something...  Also, no external (outside the VPN) connections were allowed.  This means I <b>couldn't even freaking google something without disconnecting</b>, nor could I send email, nothing.  It was like a bad joke or something
<ul>
<li>Honestly, the best VPNs I find are the ones that say "oh, google is not one of our IPs, I'll ignore that and let life outside the VPN connection handle it"</li>
</ul>
</li>
</ul>
<p>That's all for now.</p>
<p>&lt;/rant&gt;</p>
<p>P.S. I ended up re-writing those Struts 1.2x apps in Wicket because they absolutely refused to build them separately.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2009/02/surviving-integration-hell-or-how-not-to-handle-projects-outsourced-to-vendors/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Qt goes LGPL!</title>
		<link>http://basementcoders.com/2009/02/qt-goes-lgpl/</link>
		<comments>http://basementcoders.com/2009/02/qt-goes-lgpl/#comments</comments>
		<pubDate>Wed, 04 Feb 2009 03:52:01 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Alex]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[qt]]></category>
		<category><![CDATA[wxwidgets]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=111</guid>
		<description><![CDATA[In about a month, Nokia, owners of Troll Tech, makers of the Qt widget library will release Qt 4.5 under the LGPL license. In a web centric world desktop application programming may seem unhip and uninteresting but rest assured, this is huge news, especially for desktop app developers and potentially mobile app developers (Nokia's primary [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
In about a month, <a href="http://nokia.com">Nokia</a>, owners of Troll Tech, makers of the <a href="http://qtsoftware.com">Qt</a> widget library will release Qt 4.5 under the LGPL license. In a web centric world desktop application programming may seem unhip and uninteresting but rest assured, this is huge news, especially for desktop app developers and potentially mobile app developers (Nokia's primary intent here is to build a platform, after all).</p>
<p>Qt, for those that don't know is a very nice, well polished, comprehensive graphical application building toolkit. It's a complete C++ toolkit done right: multi-platform, easy to use and well thought out. It shows to the Java/C#/etc crowd that C++ development can be fun again, it just needed a unified, nice and easy to use "standard library" that covers ALL of the things developers want to do, on all platforms. The C++ "Standard Library" only covers the most basic of things, like strings and files, leaving the C++ developer to go hunt down other libraries to fill in that last 90%.</p>
<p>Prior to the LGPL version, you had to use either the GPL version (requiring your software to be also under the GPL, i.e. free) or you had to buy some commercial licenses, that aren't cheap (a few thousand dollars, usually). The LGPL basically lets you have your cake and eat it too: use the free downloadable library to make applications under any license, for free. This will undoubtedly destroy Troll Tech's income, but the mothership (Nokia) views this as a cheap sacrifice, if it gets them developer mindshare.</p>
<p>As a Linux (well really, multi-platform) desktop app developer, this is a godsend.</p>
<p>Unless you were willing to cough up the dough for the expensive commercial Qt licenses, you where left with few choices, each with their own downsides:</p>
<p>GTK+: poor support under Windows, missing lots of mature features, verbose/cumbersome API and worst off all: it's a C library. Now, I know it's cool to hate on C++, especially from people who don't know the language (especially C programmers who've just dipped their toes in the language), but C++ is still the best way to write compiled-to-native code across multiple platforms with full performance. Period. Full stop. GTK+ programming tends to be so tedious, that everyone seems to do their own light C++ wrappers around the core classes, which has to tell you something. Heck, the GNOME desktop people are trying to push Mono (i.e. C# &amp; GTK) as the new solution, because even they admit C &amp; GTK+ is too messy. For the record, even though I like and use the GNOME desktop, the developer side of me hates the GTK+ library API.</p>
<p>GTK- -: a C++ wrapper around GTK+. Good idea, but it's still cumbersome under Windows and dealing with a framework around another framework is frought with issues. It's also not that popular, leading to less community support, application examples, testing, etc. You don't want to commit your large application to a toolkit that isn't supported, well tested, etc.</p>
<p>FLTK: never used it personally, but it seems small (in community and support), similar to GTK- -.</p>
<p>wxWidgets: After getting fed up with GTK+, I moved to wxWidgets. wxWidgets is a decent library, that seems to work for the most part with a few rough edges, nothing that can't be worked around. These rough edges, a few missing features (database support, for example) and slower development progress is all simply a result of it being a fully volunteer effort. It's a great library, and I'd still be using it if Qt wasn't going LGPL.</p>
<p>So to sum up, Qt is awesome. It's multi-platform, well documented, wildly adopted, broad in features and is joy to use. LGPL licensing will boost the quality and quantity of apps on the Linux desktop: by lowering the barrier to entry and by ported applications coming from Windows. Windows application developers will now be enticed with a free toolkit, which they can then later use to quickly bring their applications to Linux or Mac OS X. Finally, this same API can be used on mobile phones, making Nokia's dream of "Qt Everywhere" come true.
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2009/02/qt-goes-lgpl/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Git Ready!</title>
		<link>http://basementcoders.com/2009/01/git-ready/</link>
		<comments>http://basementcoders.com/2009/01/git-ready/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 20:06:54 +0000</pubDate>
		<dc:creator>marc</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=100</guid>
		<description><![CDATA[Found a new site today with some git tips: Git Ready Check it yo]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
Found a new site today with some git tips:</p>
<p><a target="_blank" href="http://gitready.com/">Git Ready</a></p>
<p>Check it yo
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2009/01/git-ready/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Functioning in Screen</title>
		<link>http://basementcoders.com/2009/01/functioning-in-screen/</link>
		<comments>http://basementcoders.com/2009/01/functioning-in-screen/#comments</comments>
		<pubDate>Sat, 17 Jan 2009 15:35:12 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=93</guid>
		<description><![CDATA[I've used screen for years, probably since the 50th time I got booted off an irc server because my connection was broken. It also came in handy when I was compiling something that took a long time to finish. Screen allows you to keep a terminal session alive even if your ssh or telnet session [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
I've used screen for years, probably since the 50th time I got booted off an irc server because my connection was broken.  It also came in handy when I was compiling something that took a long time to finish.</p>
<p>Screen allows you to keep a terminal session alive even if your ssh or telnet session drops.  If you were disconnected you would simply log back in and type:</p>
<p><code>screen -rd</code></p>
<h2>Attaching to an existing Screen</h2>
<p>That command tells screen to reattach (-r) to an existing screen session and detach any existing person attached to screen (-d).</p>
<h2>Using the Scrollback Buffer</h2>
<p>Once you are in screen you may run into a few situations where, in your normal terminal session, you would be able to press page up/page down to navigate through your scrollback history.  Under screen, this is achieved by entering command mode (Ctrl-a) and then the following (from the screen man page):</p>
<pre>h, j, k, l move the cursor line by line or column by column.
0, ^ and $ move to the leftmost column, to the first or last non-whitespace character on the line.
H, M and L move the cursor to the leftmost column of the top, center or bottom line of the window.
+ and - positions one line up and down.
G moves to the specified absolute line (default: end of buffer).
| moves to the specified absolute column.
w, b, e move the cursor word by word.
B, E move the cursor WORD by WORD (as in vi).
Ctrl-u  and  Ctrl-d  scroll the display up/down by the specified amount of lines while preserving the cursor position. (Default: half screen-full).
Ctrl-b and Ctrl-f scroll the display up/down a full screen.
g moves to the beginning of the buffer.
% jumps to the specified percentage of the buffer.</pre>
<p>Remember, for the above commands to work you have to enter screen's command mode by pressing Ctrl-a first.</p>
<h2>Using Ctrl-a, but not for Command mode</h2>
<p>Another problem you might encounter is, within your irc program or on the command line you might be used to pressing Ctrl-a to move the cursor to the first character of your line.  Problem is, screen uses Ctrl-a as it's command mode key.  Not a problem though, simply type "Ctrl-a" followed by "a"</p>
<h2>Multiple Screens</h2>
<p>The good thing about screen is, you don't need multiple screen instances, you use the same screen instance and simply create new sub-screens.  To do this, enter command mode (Ctrl-a) and type the letter "c" for "create".  That will create a new terminal for you and place you at the command prompt.  To get back to the previous screen, just type "Ctrl-a" followed by "Ctrl-a".  That lets you flip back and forth between two screens.  If you have more than two screens, you can flip directly to a screen using it's number.  The first screen has a number of "0", the second "1", etc...  To flip to the 3rd screen you would type "Ctrl-a" followed by "2".</p>
<h2>Detaching from Screen</h2>
<p>Once you are finished with your session and you wish to disconnect (but keep your session running) simply enter command mode (Ctrl-a) and type "d" to detach your screen.
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2009/01/functioning-in-screen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>LASP &#8211; Linux Apache Sqlite PHP</title>
		<link>http://basementcoders.com/2009/01/lasp-linux-apache-sqlite-php/</link>
		<comments>http://basementcoders.com/2009/01/lasp-linux-apache-sqlite-php/#comments</comments>
		<pubDate>Sat, 17 Jan 2009 05:23:48 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=84</guid>
		<description><![CDATA[I had installed LAMP on my Ubuntu box to prepare for some WordPress I'm doing for a client. It was pretty easy, just followed the Ubuntu LAMP Guide. The only thing is, I wanted to create a few custom PHP pages and didn't really want to use MySQL, instead I wanted to do some simple [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
I had installed LAMP on my Ubuntu box to prepare for some WordPress I'm doing for a client.  It was pretty easy, just followed the Ubuntu <a target="_blank" href="https://help.ubuntu.com/community/ApacheMySQLPHP#Installing%20Apache%202">LAMP Guide</a>.</p>
<p>The only thing is, I wanted to create a few custom PHP pages and didn't really want to use MySQL, instead I wanted to do some simple things with SQLite.  This proved a bit harder than I thought.  It started out ok, I simply apt-get'd the php5-sqlite package, restarted apache and created a little sample <a target="_blank" href="http://ca.php.net/sqlite">I found here</a> (listed below):</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p84code21'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p8421"><td class="code" id="p84code21"><pre class="php" style="font-family:monospace;">query<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'SELECT requests FROM tablename WHERE id = 1'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$q</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$db</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">queryExec</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'CREATE TABLE tablename (id int, requests int, PRIMARY KEY (id)); INSERT INTO tablename VALUES (1,1)'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$hits</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$q</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetchSingle</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$hits</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$result</span><span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000088;">$db</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">queryExec</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;UPDATE tablename SET requests = '<span style="color: #006699; font-weight: bold;">$hits</span>' WHERE id = 1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
        <a href="http://www.php.net/die"><span style="color: #990000;">die</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$err</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>And guess what?  It worked!  Well I've come to expect that with PHP in the limited time I've been using it, things just seem to setup and work properly and that's tough to admit.  Being a Java guy, I'm really whoring around here playing with PHP, but truthfully I just wanted to code a little project where I didn't have to fight tooth and nail figuring out what frameworks to use.  Not to mention the ping pong match of "change-&gt;build-&gt;start servlet engine-&gt;repeat", I just want to mess around with an easy chick (don't tell Java though, I love her!)</p>
<p>Anyway, yes the code sample worked but I noticed that I could not for the life of me open the sqlite database the code created using the <a target="_blank" href="http://sqlitebrowser.sourceforge.net/">sqlitebrowser</a>.  It kept saying that the database wasn't version 3.  Sigh.  So I looked through the available packages for Ubuntu and found like every permutation of <code>php</code> and <code>sqlite</code> along with version numbers for each.  I tried them all, each would bomb with various errors.  Finally I stumbled onto <a target="_blank" href="https://bugs.launchpad.net/ubuntu/+source/php-sqlite3/+bug/178906/comments/9">this thread</a> which states:</p>
<blockquote><p>
There is no bug, because there is no such thing as PDO::SQlite3<br />
You can use the string sqlite as a DSN for the PDO driver, as in<br />
$dbHandle = new PDO('sqlite:test-sqlite3.db');</p>
<p>which opens a connection to a sqlite3 database.<br />
The PDO sqlite dirver supports both sqlite2 and sqlite3 and is installed by the package php-sqlite.<br />
To connect to a sqlite2 database, you would use<br />
$dbHandle = new PDO('sqlite2:test-sqlite2.db');</p>
<p>The package php-sqlite3 installs the PECL SQLite3 extension,which is a completely different animal.<br />
It is used as follows:<br />
$dbHandle = new SQLite3('test.db');
</p></blockquote>
<p>So, choosing <code>php5-sqlite</code> for my package, and changing my code to match the <a target="_blank" href="http://ca.php.net/manual/en/book.pdo.php">proper api calls</a> did it. My code now works like a charm and the resulting database is version 3+ of SQLite.  Note how SQLite3 doesn't have it's own PDO object, you simply use the standard one and feed it a <strong>database prefix of <code>sqlite</code></strong> and it knows to connect to an SQLite3 db. If you wanted to connect to an SQLite2 db, you would use the prefix <code>sqlite2</code>.</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p84code22'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p8422"><td class="code" id="p84code22"><pre class="php" style="font-family:monospace;">query<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'SELECT requests FROM tablename WHERE id = 1'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$q</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$db</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">exec</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'CREATE TABLE tablename (id int, requests int, PRIMARY KEY (id)); INSERT INTO tablename VALUES (1,1)'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$hits</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$q</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetchColumn</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$hits</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$result</span><span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000088;">$db</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">exec</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;UPDATE tablename SET requests = '<span style="color: #006699; font-weight: bold;">$hits</span>' WHERE id = 1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
        <a href="http://www.php.net/die"><span style="color: #990000;">die</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$err</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$result</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2009/01/lasp-linux-apache-sqlite-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Moving to WordPress</title>
		<link>http://basementcoders.com/2009/01/moving-to-wordpress/</link>
		<comments>http://basementcoders.com/2009/01/moving-to-wordpress/#comments</comments>
		<pubDate>Wed, 07 Jan 2009 08:44:33 +0000</pubDate>
		<dc:creator>marc</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://wp.basementcoders.com/?p=3</guid>
		<description><![CDATA[We're moving to wordpress to take advantage of a bunch of things Craig likes in wordpress. Not sure what these are yet, but it does seem like a fairly polished application.]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
We're moving to wordpress to take advantage of a bunch of things Craig likes in wordpress. Not sure what these are yet, but it does seem like a fairly polished application.
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2009/01/moving-to-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Best Buy: Over Packing FTL!!!111one!!1</title>
		<link>http://basementcoders.com/2009/01/best-buy-over-packing-ftl111one1/</link>
		<comments>http://basementcoders.com/2009/01/best-buy-over-packing-ftl111one1/#comments</comments>
		<pubDate>Tue, 06 Jan 2009 13:23:39 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Craig]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=69</guid>
		<description><![CDATA[So Best Buy during their "Boxing Week" sale (for you yanks, think Black Friday) had a Rock Band microphone stand w/ USB extension cord on for $9.99. Now, the Best Buy is only a 10min drive from me so I really don't mind going to pickup the item instead of having it shipped from somewhere [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
So Best Buy during their "Boxing Week" sale (for you yanks, think Black Friday) had a Rock Band microphone stand w/ USB extension cord on for $9.99.  Now, the Best Buy is only a 10min drive from me so I really don't mind going to pickup the item instead of having it shipped from somewhere in Ontario, waste of resources and time if you ask me.</p>
<p>The thing is, Best Buy doesn't offer "in store pickup" during "Boxing Week" which by the way is officially just <a target="_blank" href="http://en.wikipedia.org/wiki/Boxing_Day#Shopping">Boxing Day</a> but sometime in the last 6 years or so the big box stores extended it to an entire week.  They were offering $1.99 shipping so I got it shipped, I wasn't in a rush for it anyway, I have to learn to guitar past medium before I can learn to sing and guitar at the same time anyway.</p>
<p>This is what arrived, the blue thing in the bottom is the microphone stand.  The rest was filled with about 20 ft of packing paper (as seen to the left of the box).<br />
<a href="http://basementcoders.com/wp-content/uploads/2009/01/over-packaging.jpg"><img class="aligncenter size-full wp-image-75" title="You could have fit 20 of these in this box..." src="http://basementcoders.com/wp-content/uploads/2009/01/over-packaging-framed.png" alt="You could have fit 20 of these in this box..." width="278" height="321" /></a></p>
<p>It reminds me of when you buy an SD flash card that is the size of a postage stamp but it is bundled in a plastic container the size of a small laptop!
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2009/01/best-buy-over-packing-ftl111one1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Episode 5 &#8211; Does School Matter?</title>
		<link>http://basementcoders.com/2008/11/episode-5-does-school-matter/</link>
		<comments>http://basementcoders.com/2008/11/episode-5-does-school-matter/#comments</comments>
		<pubDate>Tue, 18 Nov 2008 10:28:37 +0000</pubDate>
		<dc:creator>marc</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://wp.basementcoders.com/?p=24</guid>
		<description><![CDATA[Recorded Nov 20, 2008 In episode 5, we have a biased discussion on whether or not having a computer science degree makes a difference.]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
Recorded Nov 20, 2008</p>
<p>In episode 5, we have a biased discussion on whether or not having a computer science degree makes a difference.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2008/11/episode-5-does-school-matter/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep05.mp3" length="22301363" type="audio/mpeg" />
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep05.mp3" length="22301363" type="audio/mpeg" />
		</item>
		<item>
		<title>More git goodies</title>
		<link>http://basementcoders.com/2008/11/more-git-goodies/</link>
		<comments>http://basementcoders.com/2008/11/more-git-goodies/#comments</comments>
		<pubDate>Thu, 06 Nov 2008 08:12:31 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=67</guid>
		<description><![CDATA[If you are in a subdirectory of your project and want to know where the .git directory lives above you: git rev-parse --git-dir My coworker Guillermo Castro (aka the JavaGeek) found this one by pure necessity. He was told recently that a bunch of related changes which had been checked in over a series of [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
If you are in a subdirectory of your project and want to know where the .git directory lives above you:</p>
<pre>
git rev-parse --git-dir
</pre>
<p>My coworker Guillermo Castro (aka the <a target="_blank" href="http://www.javageek.org/">JavaGeek</a>) found this one by pure necessity.  He was told recently that a bunch of related changes which had been checked in over a series of separate commits needed to be merged into an emergency patch branch for production.  No problem he thought, <code>git cherry-pick</code> to the rescue!  Not so fast.  For 90% of the cases, yes he could just cherry-pick an entire commit into the patch branch.  But there was that 10% of the cases where few files that were supposed to be part of the patch which were checked in to commits that contained changes to files which were not to be included in the branch.  Here is how he solved this problem:</p>
<ul>
<li>he knew that the files he was interested resided under two directories</li>
<li>he knew the sha1 commit hash for the commit that contained changes to the files he was interested in (but also had commits to other files he wasn't)</li>
<li>he wanted only the changes to files under the two directories to be part of his commit.</li>
</ul>
<pre>
git log -1 -p <commit hash>
<paths or file names>
</pre>
<p>The "-1" tells git to only prepare a patch file for the files under the paths specified based on the <b>first</b> commit (which is the one you specified in the &lt;commit hash&gt; param.</p>
<p>Along with the above, he also found a way to cherry-pick commits without actually committing them locally (i.e. just keep the changes staged)</p>
<pre>
git cherry-pick --no-commit <commits>
</pre>
<p>Also, if you are on a Mac, there is a nice version of gitk called <a target="_blank" href="http://github.com/pieter/gitx/wikis">gitx</a> I highly recommend you grab.  It's "pretty" and has some neat features which you can find in the screencasts section of the site.
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2008/11/more-git-goodies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sessions in Wicket</title>
		<link>http://basementcoders.com/2008/10/sessions-in-wicket/</link>
		<comments>http://basementcoders.com/2008/10/sessions-in-wicket/#comments</comments>
		<pubDate>Mon, 13 Oct 2008 22:10:30 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[wicket]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=65</guid>
		<description><![CDATA[Found out a valuable lesson about session management in Wicket today. Wicket tries to be as stateless as long as possible, I believe it takes some hints from how your pages are built to know if it needs to keep a Session around for longer than a Request. So, if you find that newSession(Request request, [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
Found out a valuable lesson about session management in <a target="_blank" href="http://wicket.apache.org/">Wicket</a> today.  Wicket tries to be as stateless as long as possible, I believe it takes some hints from how your pages are built to know if it needs to keep a Session around for longer than a Request.</p>
<p>So, if you find that <code>newSession(Request request, Response response)</code> is being called in your WebApplication class for each and every request (not somethng you want happening if you're trying to keep state in the session between requests!) what you have to do is use the <code>bind()</code> method for the current session.</p>
<p>Using bind() can be done within the constructor of your custom Session class itself, or if you want more control over when Sessions persist, you can call bind selectively (i.e. only in the constructor of pages which use the Session to store/retrieve information intended to live between sessions).</p>
<p>e.g.</p>
<pre>
public class MyPage extends WebPage {
//...
   public MyPage(String id) {
      getSession().bind();
      //setup wicket components
   }
//...
}
</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2008/10/sessions-in-wicket/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>git-svn gotcha</title>
		<link>http://basementcoders.com/2008/09/git-svn-gotcha/</link>
		<comments>http://basementcoders.com/2008/09/git-svn-gotcha/#comments</comments>
		<pubDate>Tue, 30 Sep 2008 03:20:26 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=63</guid>
		<description><![CDATA[I was having problems with the following setup the other day: [remote deveoper] ; [shared git repo] [me] [client's svn repo] So my remote developer and I push and pull to/from the shared git repo, and then I sync changes to and from the client's svn repo using git-svn. Problem My problem is, when I [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<div>
I was having problems with the following setup the other day:</p>
<pre>
 [remote deveoper] <===>; [shared git repo] <===> [me] <===> [client's svn repo]
</pre>
<p>So my remote developer and I push and pull to/from the shared git<br />
repo, and then I sync changes to and from the client's svn repo using<br />
git-svn.</p>
<h1>Problem</h1>
<p>My problem is, when I am ready to merge changes from my local master<br />
branch to trunk-local, if I do a "git merge master" and then try to<br />
issue any git-svn commands I get the following errors:</p>
<pre>
======================
$ git merge master
Updating d88106e..77b86ae
Fast forward
 community/pom.xml |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

$ git svn dcommit
Can't call method "full_url" on an undefined value at
/usr/local/git/libexec/git-core/git-svn line 425.

$ git svn rebase
Unable to determine upstream SVN information from working tree history
======================
</pre>
<p>The only way I've seem to be able to remedy this is if I add the<br />
"subtree" merge strategy to the merge command:</p>
<pre>
git merge -s subtree master
</pre>
<p>Then git-svn doesn't get confused about it's repo, but when you look<br />
at the repo using gitk, you see something like:</p>
<pre>
[trunk-local]--[remotes/trunk]  Merge branch 'master' into trunk-local
|
|
|    [master]--[remotes/origin/master]  "last master commit msg"
|    |
|    |
|  /
/
</pre>
<p>When I use the normal merge strategy then gitk shows all branches at<br />
the same level, but git-svn is of course b0rked.</p>
<h1>Solution</h1>
<p>I tried asking a few people on #git (freenode irc channel for git) for help, but the problem was a bit too involved to explain on irc and have someon follow along, so instead what I did was I asked on the official git mailing list (git@vger.kernel.org) and I got an answer almost immediately from <b>Björn Steinbrink</b> with a solution that seems to work just great!  His input was to use <code>--no-ff</code> when merging my changes into the svn tracking branch (trunk-local).  Here is his explanation:</p>
<blockquote><p>
The original merge you did ended up as a fast-forward, ie. no merge<br />
commit was created. I guess that your history is so, that somehow the<br />
remotes/trunk stuff is reachable through the second parent of some merge<br />
commit that exists in your history. But git-svn uses --first-parent to<br />
find its upstream, so it cannot find that in your scenario. I guess it's<br />
best if you use "*git merge --no-ff master*" to force the creation of a<br />
merge commit. Subtree happens to work because it implies --no-ff, but<br />
I'm not sure whether there might be downsides to using the subtree<br />
strategy, so I'd rather go with the explicit --no-ff and the normal<br />
merge strategies.
</p></blockquote>
<p>Hopes this helps other's in the same situation as I was in.  Thanks <b>Björn Steinbrink</b>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2008/09/git-svn-gotcha/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tip: mimic user file permissions to group</title>
		<link>http://basementcoders.com/2008/09/tip-mimic-user-file-permissions-to-group/</link>
		<comments>http://basementcoders.com/2008/09/tip-mimic-user-file-permissions-to-group/#comments</comments>
		<pubDate>Sat, 20 Sep 2008 15:10:02 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=61</guid>
		<description><![CDATA[I ran into a situation the other day where I had setup a git repository for myself and wanted to grant read/write access to another fellow who is helping out on the project. He could pull from the repository just fine, but couldn't push to it because the directory permissions on the repo were only [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
I ran into a situation the other day where I had setup a git repository for myself and wanted to grant read/write access to another fellow who is helping out on the project.  He could pull from the repository just fine, but couldn't push to it because the directory permissions on the repo were only setup for me to write to.</p>
<p>After creating a new group for us, adding our user ids to it and then doing a recursive chgrp on the repo I realized that by default git repositories are not setup for group writes unless you explicitly specify that at the time of creations (i.e. <code>git init --shared=group</code>.  So I really needed a way to recursively mirror the user's file permissions on all files and directories in the repo to that of the group.</p>
<p>Searching long and hard I could not find a canned solution to this, perhaps one exists out there but because "mimic user file permissions to group" and "mirror user file permissions to group" don't yield good results in google, I was forced to write my own Perl script:</p>
<pre>
#!/usr/bin/perl
use File::stat;
use Fcntl ':mode';

foreach (@ARGV) {
    next unless -e $_;
    $stats = stat($_);
    $mode = substr(sprintf("%04o", $stats->mode), -3);
    $out = "$_ from $mode to ";
    $mode =~ s/(\d)(\d)(\d)/$1$1$3/;
    $out = "$out $mode";
    printf($out . "\n");
    chmod oct($mode), $_;
}
</pre>
<p>The Usage on this script is:</p>
<pre>
mimicuserperms.pl <name of file or directory>
</pre>
<p>To use it recursively:</p>
<pre>
find . -exec mimicuserperms.pl {} \;
</pre>
<p><b>DISCLAIMER</b>: Not sure if this will work on every single system out there, I mean it literally just grabs the last three file perms found by stat and takes the first character and duplicates it over the second. So use at your own risk!  Perhaps, backup whatever you are going to use this on first before trying.
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2008/09/tip-mimic-user-file-permissions-to-group/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>git gotcha</title>
		<link>http://basementcoders.com/2008/09/git-gotcha/</link>
		<comments>http://basementcoders.com/2008/09/git-gotcha/#comments</comments>
		<pubDate>Wed, 10 Sep 2008 18:12:00 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=59</guid>
		<description><![CDATA[Just thought I'd post about a problem I was having with git concerning the setup and cloning of a remote repository. Basically, if you've setup a repository on a remote machine, and want to clone from that machine onto a local one using ssh, you may run into problems like I did. The error I [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
Just thought I'd post about a problem I was having with git concerning the setup and cloning of a remote repository.  Basically, if you've setup a repository on a remote machine, and want to clone from that machine onto a local one using ssh, you may run into problems like I did.</p>
<p>The error I received was:</p>
<pre>ThaDonMBP:workspace craiger$ git clone craiger@192.168.2.10:/git/myproj
Initialized empty Git repository in /private/workspace/myproj/.git
craiger@192.168.2.10's password:
bash: git-upload-pack: command not found
fatal: The remote end hung up unexpectedly</pre>
<p>The problem is that git is expecting git-upload-pack in a specific directory on the remote machine, and that is <code>/usr/bin</code> or <code>/usr/local/bin</code>.  That's *not* where I had git installed, I had it installed in <code>/opt/git/bin</code>.  So all you need to do is symlink your git executables to <code>/usr/bin</code> like so:</p>
<pre>craiger@192.168.2.10:~$ cd /usr/bin
craiger@192.168.2.10:/usr/bin$ sudo ln -s /opt/git/bin/* .</pre>
<p>After that, things should work!
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2008/09/git-gotcha/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wicket in Action Review</title>
		<link>http://basementcoders.com/2008/09/wicket-in-action-review/</link>
		<comments>http://basementcoders.com/2008/09/wicket-in-action-review/#comments</comments>
		<pubDate>Tue, 09 Sep 2008 12:41:20 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[wicket]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=57</guid>
		<description><![CDATA[Wrote a review on the most excellent book Wicket in Action for the Mystic Coders. For those who haven't heard of Wicket, it's a Java web framework that allows designers (the chaps good with Dreamweaver) to collaborate with the Developers (the guys good with Java) in such a way that neither destroys the others work. [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<a target="_blank" href="http://www.mysticcoders.com/blog/2008/09/09/book-review-wicket-in-action/">Wrote a review</a> on the most excellent book <a target="_blank" href="http://www.amazon.com/gp/product/1932394982">Wicket in Action</a> for the <a target="_blank" href="http://www.mysticcoders.com/">Mystic Coders</a>.</p>
<p>For those who haven't heard of <a target="_blank" href="http://wicket.apache.org/">Wicket</a>, it's a Java web framework that allows designers (the chaps good with Dreamweaver) to collaborate with the Developers (the guys good with Java) in such a way that neither destroys the others work.  It's quite a great framework I encourage you to give it a try, and of course read the book!
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2008/09/wicket-in-action-review/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Oracle Sproc Tip</title>
		<link>http://basementcoders.com/2008/08/oracle-sproc-tip/</link>
		<comments>http://basementcoders.com/2008/08/oracle-sproc-tip/#comments</comments>
		<pubDate>Mon, 04 Aug 2008 13:32:20 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=55</guid>
		<description><![CDATA[A colleague of mine, Guillermo Castro, showed me how to print the results of a stored procedure call that returns a ref cursor in Oracle. In SqlDeveloper you would make a script like so: var results ref cursor; var o_status number; var o_err_msg varchar2; exec :results := myschema.MY_SPROC(773490, 'TEST', _status, _err_msg); print results; print o_status; [...]]]></description>
			<content:encoded><![CDATA[<div>
A colleague of mine, <a target="_blank" href="http://www.javageek.org/">Guillermo Castro</a>, showed me how to print the results of a stored procedure call that returns a ref cursor in Oracle.</p>
<p>In SqlDeveloper you would make a script like so:</p>
<pre>
var results ref cursor;
var o_status number;
var o_err_msg varchar2;
exec :results := myschema.MY_SPROC(773490, 'TEST', <img src='http://basementcoders.com/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> _status, <img src='http://basementcoders.com/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> _err_msg);
print results;
print o_status;
print o_err_msg;
</pre>
<p>This will output the values of the refcursor (a result set generated by MY_SPROC) as well as two "normal" out parameters <img src='http://basementcoders.com/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> _status and <img src='http://basementcoders.com/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> _err_msg.
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2008/08/oracle-sproc-tip/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Episode 4 &#8211; iPhones and Androids</title>
		<link>http://basementcoders.com/2008/06/episode-4-iphones-and-androids/</link>
		<comments>http://basementcoders.com/2008/06/episode-4-iphones-and-androids/#comments</comments>
		<pubDate>Wed, 18 Jun 2008 10:23:52 +0000</pubDate>
		<dc:creator>marc</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://wp.basementcoders.com/?p=21</guid>
		<description><![CDATA[Recorded June 10, 2008 In this episode we discuss Apple's just announced (and soon to go on sale) iPhone 3G, 2.0 system software and the iTunes app store. We compare and contrast this device again Google upcoming Android platforms. Is the iPhone the sign of a new revolution or is it the next evolution of [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
Recorded June 10, 2008</p>
<p>In this episode we discuss Apple's just announced (and soon to go on sale) iPhone 3G, 2.0 system software and the iTunes app store. We compare and contrast this device again Google upcoming Android platforms. Is the iPhone the sign of a new revolution or is it the next evolution of cell phones?</p>
<p><strong>Links</strong></p>
<ul>
<li><a title="iPhone" href="http://www.apple.com/iphone/" target="_blank">Apple iPhone</a></li>
<li><a title="Android" href="http://code.google.com/android/" target="_blank">Google Android</a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2008/06/episode-4-iphones-and-androids/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep04.mp3" length="27158466" type="audio/mpeg" />
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep04.mp3" length="27158466" type="audio/mpeg" />
		</item>
		<item>
		<title>Death of the disconnected LAN party</title>
		<link>http://basementcoders.com/2008/06/death-of-the-disconnected-lan-party/</link>
		<comments>http://basementcoders.com/2008/06/death-of-the-disconnected-lan-party/#comments</comments>
		<pubDate>Tue, 10 Jun 2008 11:56:03 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Craig]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=53</guid>
		<description><![CDATA[Say what you will, but LAN parties are *way* better than just getting on some pub server and talking with your buddies over VOIP. In a LAN party setting, I can literally walk up behind a guy and start tea-bagging him (4 r33lz!). A friend of mine holds a quarterly gaming weekend out at his [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
Say what you will, but LAN parties are *way* better than just getting on some pub server and talking with your buddies over VOIP.  In a LAN party setting, I can literally walk up behind a guy and start tea-bagging him (4 r33lz!).</p>
<p>A friend of mine holds a quarterly gaming weekend out at his cottage, it's not a remote cottage, it's in a small hamlet about 45mins from the city.  Up until a few years ago high-speed internet wasn't available to the region, that didn't really matter though, all of our games played nicely over the LAN.  Then games like <a target="_blank" href="http://www.battlefield2.com/">BF2</a> started to emerge, and anything <a target="_blank" href="http://www.steampowered.com">Steam</a> related where they "insist" on doing a little online check.  In earlier patches of BF2, you literally couldn't start the game without being online!  Even though the game has a fully supported single player campaign as well as LAN multiplayer.  Now-a-days it's a bit better, but it can take up to 3-5mins staring at a blank screen when starting BF2 before it is satisfied that it can't connect to the internet before it starts up.  You can get around this by unplugging your ethernet cable when you start the game, then plugging it back in once it starts, but what a pain in the ass.</p>
<p>And then there is Steam, basically if you want to play Half-life or Team Fortress 2, good luck trying to do that without an internet connection, even if you intend to only play locally.  What a joke.  Luckily John now has access to high-speed through his neighbour's connection.  When we go out there to play, they setup a wireless N bridge between the cabins.  However the last time we were up there the bridge failed (for unknown reasons) around midnight, and we were left there wanting to play TF2 but unable to.</p>
<p>Sounds like there needs to be a petition sent to the game companies which implores them not rely on an internet connection in order to play their game.  People still have LAN parties, and yes, sometimes they do this without access to the internet!</p>
<p>&lt;/rant&gt;
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2008/06/death-of-the-disconnected-lan-party/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Episode 3 &#8211; IDEs vs Editors</title>
		<link>http://basementcoders.com/2008/06/episode-3-ides-vs-editors/</link>
		<comments>http://basementcoders.com/2008/06/episode-3-ides-vs-editors/#comments</comments>
		<pubDate>Thu, 05 Jun 2008 10:20:14 +0000</pubDate>
		<dc:creator>marc</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://wp.basementcoders.com/?p=17</guid>
		<description><![CDATA[Our third episode is about a topic near and dear to every developer: what editor to develop with and why it's far superior than the piece of crap someone else uses. Alex, Craig and Marc chat about everything from Eclipse/Textmate to vim/emacs. It's a sensitive topic for most, and we went into this podcast knowing [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<p>Our third episode is about a topic near and dear to every developer: what editor to develop with and why it's far superior than the piece of crap someone else uses.  Alex, Craig and Marc  chat about everything from Eclipse/Textmate to vim/emacs.  It's a sensitive topic for most, and we went into this podcast knowing we wouldn't convince each other to stray from our weapon of choice, but we managed to fill about 45 minutes discussing some of the finer points of editing and being productive.</p>
<p>I think this podcast - more so than the others - represents most accurately three developers sitting around drinking beer and talking shop.  When we go out to the pub (sadly) this is exactly the type of conversation we (and if you've made it to the third episode, probably you too) have.</p>
<p><strong>Links</strong></p>
<ul>
<li><a title="ViM" href="http://www.vim.org/" target="_blank">ViM</a></li>
<li><a title="Emacs the greatest editor ever." href="http://www.gnu.org/software/emacs/" target="_blank">Emacs</a></li>
<li><a title="Eclipse" href="http://www.eclipse.org/" target="_blank">Eclipse</a></li>
<li><a title="Textmate" href="http://macromates.com/" target="_blank">Textmate</a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2008/06/episode-3-ides-vs-editors/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep03.mp3" length="23093376" type="audio/mpeg" />
		</item>
		<item>
		<title>I&#8217;ve&#8230;. changed&#8230;.</title>
		<link>http://basementcoders.com/2008/06/50/</link>
		<comments>http://basementcoders.com/2008/06/50/#comments</comments>
		<pubDate>Tue, 03 Jun 2008 15:46:51 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[Craig]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=50</guid>
		<description><![CDATA[Much like with Mac, I've never been impressed with Sushi. I've gone for sushi before and usually it was because someone said "you don't like sushi? Oh, dude, you just haven't had the good stuff" but ultimately I end up disappointed. This has all changed, last time I was in San Fran Eugene Ciurana took [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
Much like with Mac, I've never been impressed with Sushi.  I've gone for sushi before and usually it was because someone said "<i>you don't like sushi?  Oh, dude, you just haven't had the good stuff</i>" but ultimately I end up disappointed.<br />
<a href="http://basementcoders.com/wp-content/uploads/2008/06/takara-sushi.jpg"><img src="http://basementcoders.com/wp-content/uploads/2008/06/takara-sushi-300x196.jpg" alt="Takara Sushi" title="Takara Sushi" width="300" height="196" class="alignright size-medium wp-image-317" /></a><br />
This has all changed, last time I was in San Fran <a target="_blank" href="http://www.eugeneciurana.com">Eugene Ciurana</a> took us all to a Sushi place called <a target="_blank" href="http://maps.google.ca/maps?q=takara+sushi+san+francisco&amp;ie=UTF8&amp;oe=utf-8&amp;client=firefox-a&amp;ll=37.785758,-122.429334&amp;spn=0.007207,0.016909&amp;z=17&amp;layer=c&amp;cbll=37.784886,-122.429267&amp;panoid=6kr9CiNgNlInEBG85v9tww">Takara</a> .  Now, Eugene is the author of the <a target="_blank" href="http://www.eugeneciurana.com/musings/sushi-eating-HOWTO.html">Sushi Eating HOWTO</a> so if there is anyone who knows good sushi, it should be him!  And he didn't disappoint.  We had only sushi which was comprised of raw fish, on top of rice with a layer of wasabi.  Then moved on to a few cooked items like eel and octopus.  Everything was fantastic, absolutely no gag reflex triggered at any point.</p>
<p>I think the problem I've always had with sushi is a) I'm not a huge fan of fish, I mean I don't hate it, i just don't go out of my way to eat it b) I've always had "rolls" in my limited sushi experience, and these rolls always have seaweed and some sort of mayonnaise type stuff in them.  I'm really not a fan of cold creamy sauces, so right away I was turned off.  And the seaweed has such a fishy flavour that it didn't agree with my gentle palate.</p>
<p>The raw fish didn't taste fishy at all, I was taken aback, the only thing that tasted mildly fishy was the eel.</p>
<p>I think I must be getting cultured, I find Winnipeg lends itself to being cheap and not really trying things. Or, maybe that's just me.</p>
<p>EDIT:  The same thing happened to me with Scotch a few years ago, shout out to Fred Martin from Morgan Stanley for opening my eyes to the smoky flavour of  <a target="_blank" href="http://www.laphroaig.com/">Laphroaig</a>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2008/06/50/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apple Store&#8230;</title>
		<link>http://basementcoders.com/2008/05/apple-store/</link>
		<comments>http://basementcoders.com/2008/05/apple-store/#comments</comments>
		<pubDate>Thu, 29 May 2008 17:34:41 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=47</guid>
		<description><![CDATA[My story of how I was *almost* a Mac fanboi... I've been needing a new laptop capable of doing development on for a few months now. Typically I'm developing on my nice quad-core desktop, however now that my classes are over I've been traveling to San Fran on a regular basis. I have my severely [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
My story of how I was *almost* a Mac fanboi...</p>
<p>I've been needing a new laptop capable of doing development on for a few months now.  Typically I'm developing on my nice quad-core desktop, however now that my classes are over I've been traveling to San Fran on a regular basis.  I have my severely under powered Gateway MX6421 laptop I picked up as a cheap refurb.  1.8Ghz *single* core just doesn't cut it now a days I'm afraid, the Core Duo is a must for developers on the road.</p>
<h2>Mac Fag</h2>
<p>If you've listened to "the podcasts":http://www.basementcoders.com/podcast you know I like to bug Mac Fan Boi #1 (marc) about his Mac.  "<i>Is that thing powered off your own sense of self esteem?</i>"  "<i>How did you pay for that thing?  With your penis and testicles?  Cause surely you won't be needing those any more</i>", and the list goes on....  Now, I need a dual core laptop for travel, so I don't have to wait 5 mins a build.  No problem, just grab a $1000 dell and throw Ubuntu on it (Dell Canada doesn't sell them pre-configured with Ubuntu) you might say.  Yeah, I could, but that kind of limits my selection, you see, cause it's been my experience that Ubuntu doesn't always work nicely on laptops.  For instance, on my current laptop <b>sometimes</b> the thing will hibernate and every time it goes into "<i>sleep</i>" mode, I loose the ability to use my touch pad.  I can't tolerate that kind of shit any more, I just need the laptop to work so I can develop on it.  Enter the Mac.</p>
<h2>My history with Macs</h2>
<p>Almost every single person on my team owns a Mac, and swears by them.  When you ask them "<i>why do you love it so much</i>", they'll respond "<i>you just have to use one to find out, it's hard to explain otherwise</i>".  Now the last time I used a Mac was in University, we had to write our Pascal in the craptastic Mac II lab.  One of the greatest days of my university career was when my prof agreed to let me submit a PC formatted disk containing my assignment written in Turbo Pascal.  I could work from home!  And I didn't have to use a Mac!  yay!  So needless to say, I wasn't a Mac fan.  I was a gamer, for one, and I loved being able to swap out video cards, ram, cpus, I didn't like the fact that when you bought a Mac you were pretty much stuck with what you bought until the day you decided to fork over another $3K for a new one.  You could upgrade slowly with a PC, perfect tool for a starving student.</p>
<h2>They switched to Intel</h2>
<p>It wasn't until Macs went Intel based that I thought about Mac, up until that point in time I saw them as tools only for beardos and people that hang in the local Starbucks.  But even though they were intel based I compared hardware specs and thought to myself "<i>I can build the same computer for a fraction of the price</i>", however, i don't think the same holds true for the laptops.  To me it seems like if you were to go get a  Lenovo that was speced the same as a MacBook Pro, the price difference would be negligible.</p>
<h2>Mac OSX</h2>
<p>Mac OS X is linux like.  That really appeals to me now that I code exclusively on Linux.</p>
<h2>Rationalization</h2>
<p>I started finding myself rationalizing an excuse to go get a Mac. "<i>it just works</i>", "<i>Marc was a linux guy, now he owns (and loves) his Mac</i>", "<i>a lot of the elite coders in Java have them</i>", etc...  The latter rationalization is a bit like the crappy golf player that goes out and blows a tonne of cash on a set of clubs.  Sure it might help marginally, hell it might even give him a shot of confidence, but at the end of the day it's not the car, it's the guy driving.</p>
<h2>The nail in the coffin</h2>
<p>So I'm here at my client's site, slogging away on my underpowered Gateway when it dawns on me "MacBooks are $1K (not the pro version), and they just work, no having to worry about whether a certain feature is going to work, no, it just works. So why don't I just catch the train to the Apple Store and get it over with?"  The MacBook is more than adequate for what I need, that is, a laptop I'll use on the road.  At home I can hop back on the quad-core Ubuntu desktop.  I also like the fact the MacBook is small, perfect for the plane ride.</p>
<p>So the nail in the coffin was when my Tech lead caught wind of my interest in a MacBook.  At first he was saying "<i>no no no, Craig, buy the MacBook Pro.  You are a professional developer, you need professional tools, if you buy bottom of the barrel, you'll get a bad taste in your mouth.</i>".  Ok, but I really don't have $2K+ to blow on something I only really need when I travel (perhaps once a month).  Then it dawns on him: "<i>Craig, I've been wanting to upgrade to a new MBP for a long time.  Why don't you buy mine for $1K and I'll go buy the new one.</i>"  It really didn't take me long to reply "<i>why not?  $1K is my price point, and I would be getting a 17 inch MBP!</i>"  The funny thing is I wasn't even considering buying a 17" beast I could replace my desktop with, but for $1K, what the hell.</p>
<h2>How it went down (in flames)</h2>
<p>My tech lead has a corporate discount at the Mac Store, so our plan was to go down there after work, I would use my credit card to put $1K down on his new MBP, and he would pay the rest.  So after partaking in one too many free wines (the hotel has a thing every Weds, free wine and cheese) we took our alcohol fueled impulse buying attitude into a situation I can only describe as possibly one of the biggest <b>cock-blocks</b> I've experienced at a retail store.</p>
<p>So we walk into the Apple store and find a salesperson (or whatever they are called in an Apple Store) to help us.  My co-worker lists off the specs for the MBP he wants.  They pretty much got what he needs, except he was interested in getting the glossy screen instead of the matte, but he said it wasn't a deal breaker.  He gives her the "<i>I'll take it</i>" and then gets into a weird argument with her over AppleCare.  That was the first weird vibe that got thrown into the experience, also she fed us some bullshit about why he should take the matte screen instead of the glossy screen because "<i>colour is represented better in the matte version</i>", which, from my reading, is the exact opposite of the truth.</p>
<p>The second bad vibe came when I pulled out my credit card and my co-worker explains that I will be picking up $1K of the purchase price as I am buying his old MBP.  Immediately we are confronted with the words "<i>I'm sorry, I can't do that</i>".  She claims because we are using a corporate discount, she can't split the bill.  My coworker immediately asks "<i>you don't work on commission do you?</i>"  "<i>I'm hourly sir</i>", yeah, no shit lady.</p>
<p>The topper to our experience is when the "manager" comes out to read us the riot act.  "<i>Sir, the agreement we have with your company doesn't allow a third part to purchase, even if in part, products under your the corporate rate</i>".  We argued for a for a bit, but in the end they took the nicely boxed MBP off the counter and with a parting shot the sales person quipped "Now sir, you can go to the website and pick the model you really want and pay for it however you choose".</p>
<p>The bottom line is, my coworker is going to "use the website" and buy a new Mac.  He then in turn will sell me his old one.  But I have to wonder what the hell I'm getting into here, I'm getting into bed with a company that doesn't really care if they have my business.  I mean, that store could have been $3,500 richer yesterday.  But maybe it all goes into the central coffers anyway, so they truly don't give a shit how you get your Mac, because they know you want one <img src='http://basementcoders.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2008/05/apple-store/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A few git-svn Tips</title>
		<link>http://basementcoders.com/2008/05/a-few-git-svn-tips/</link>
		<comments>http://basementcoders.com/2008/05/a-few-git-svn-tips/#comments</comments>
		<pubDate>Fri, 23 May 2008 17:12:36 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=43</guid>
		<description><![CDATA[clone a remote svn repo and it's branches and tags git-svn clone -T trunk -b branches -t tags -r 1124:HEAD https://mysvnserver/myproj this will bring down all history from revision 1124 onward intoa local git repository and will create remote branches that track the projects inside your myproj/branches and myproj/tags folders find out what remote svn [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<ol>
<li>clone a remote svn repo and it's branches and tags
<pre>git-svn clone -T trunk -b branches -t tags -r 1124:HEAD https://mysvnserver/myproj</pre>
<p>this will bring down all history from revision 1124 onward intoa  local git repository and will create remote branches that track the projects inside your <code>myproj/branches</code> and <code>myproj/tags folders</code></li>
<li>find out what remote svn branch your local git branch is tracking:
<pre>git log --no-color --first-parent | grep git-svn-id | head -n1</pre>
</li>
<li> given you did the clone from step 1, you could create a local branch which tracks a remote branch (so that your git-svn rebase/decommit commands execute against the right remote branch)
<pre>git checkout -b trunk-local trunk</pre>
<p>this will create a new local branch called "trunk-local" that tracks the remote "trunk" branch in svn.  Any git-svn rebase or dcommit commands issued while trunk-local is your current branch will be executed against the remote trunk branch.</li>
<li>after executing the code from step 2, you find that your local master branch is setup against a remote branch other than "trunk" (I like having my local master branch tracking trunk) you can reset it to track trunk by issuing this command:
<pre>git reset --hard trunk</pre>
</li>
<li>want to merge changes from one local branch to the current branch, but don't want the history of commits?  That is, if after the merge you do a <code>git-svn dcommit</code> you don't want a separate commit for each "git commit" that took place in the "branch to merge to current", you just want one uber commit.
<pre>git merge --squash</pre>
</li>
<li>refer back to the last local commit message (useful if you forgot to include a file in the last commit and would like to re-use the message)
<pre>git log HEAD^..HEAD --pretty=format:%s</pre>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2008/05/a-few-git-svn-tips/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Episode 2 &#8211; UUIDs</title>
		<link>http://basementcoders.com/2008/05/episode-2-uuids/</link>
		<comments>http://basementcoders.com/2008/05/episode-2-uuids/#comments</comments>
		<pubDate>Mon, 12 May 2008 09:54:07 +0000</pubDate>
		<dc:creator>marc</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://wp.basementcoders.com/?p=14</guid>
		<description><![CDATA[Recorded Nov 2007 (yes that long ago) In our second episode, Alex, Craig and Marc had a chat about UUIDs, specifically their function in terms of a database. Are they overkill? When would you need them?. As always, we also drank some beer. Links UUID on Wikipedia]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
Recorded Nov 2007 (yes that long ago)</p>
<p>In our second episode,  Alex, Craig and Marc had a chat about UUIDs, specifically  their function in terms of a database. Are they overkill? When would you need them?.   As always, we also drank some beer.</p>
<p><strong>Links</strong></p>
<p><strong><span style="font-weight: normal;"><a title="UUID" href="http://en.wikipedia.org/wiki/UUID" target="_blank">UUID on Wikipedia</a></span></strong></p>
<p><strong><span style="font-weight: normal;"><a title="UUID" href="http://en.wikipedia.org/wiki/UUID" target="_blank"></a></span><br />
</strong>
</div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2008/05/episode-2-uuids/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep02.mp3" length="11718784" type="audio/mpeg" />
<enclosure url="http://www.basementcoders.com/media/basementcoders.com_ep02.mp3" length="11718784" type="audio/mpeg" />
		</item>
		<item>
		<title>Yeah, so git is good.</title>
		<link>http://basementcoders.com/2008/04/yeah-so-git-is-good/</link>
		<comments>http://basementcoders.com/2008/04/yeah-so-git-is-good/#comments</comments>
		<pubDate>Mon, 14 Apr 2008 20:40:58 +0000</pubDate>
		<dc:creator>craig</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://basementcoders.com/?p=39</guid>
		<description><![CDATA[Late Adopter I'm a late adopter of almost everything. Being a long time "windows guy" I typically wait at least 2 years after a new version of windows is released before upgrading. I am on Vista currently only because it came with my new PC, if not for that fact I'd be still slinging XP. [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
<h1>Late Adopter</h1>
<p>I'm a late adopter of almost everything.  Being a long time "windows guy" I typically wait at least 2 years after a new version of windows is released before upgrading.  I am on Vista currently only because it came with my new PC, if not for that fact I'd be still slinging XP.  The only reason I'm on Windows at all is because of gaming and my inherent laziness to create a dual boot system.  Things have changed recently though, when I got the new PC it did not come with video card, it was onboard, and not anything I could play a modern game with.  So this means I haven't played a PC game since approx. Dec 27th (not that I'm keeping track or anything <img src='http://basementcoders.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ).</p>
<p>Because of my previous contracts, I've been developing on Windows exclusively.  My choices were usually limited by corporate standards, lack of Linux vpn client, etc...  But with my current contract I have a choice, so what I've done is I've been running Ubuntu within a VMWare session on Vista.  I really like this option for two reasons:<br />
# I can backup my entire development environment, OS and all, by simply copying the VMWare image file<br />
# If I need to work from my laptop, I copy the image over and I am up in running in a matter of minutes in the exact same environment (no saying "oh crap, tool XYZ isn't installed")</p>
<h1>git, a different animal</h1>
<p>So.... getting back to the subject, I don't typically change unless I need to.  I've been coding Java for roughly 8 years, prior to that it was VB.  I tried RoR, but never really got farther than admireing Ruby's closures.  That's the trouble, when you are developing professionally in a language and wish to "switch" it's not like you can just go out onto the market and say "I'm a Java developer looking for a contract that teaches me RoR".  It just doesn't work that way, people want you to come in on a contract hitting the ground running, not crawling.  Same goes for version control systems, you use what the corporation paying your salary uses.  Sure you might oggle the features of some other VCS, but unless you have a set of personal projects you can use it on, you aren't going to get to know that other system.</p>
<p>Sure you can learn things "on your own", in your "spare time" (does such a thing exist for some people?) but unless you do something like contribute to an OSS project, or create a publically facing app, you won't have the experience to go along with your self teaching.  I have found experience is what sells you out in the market.</p>
<p>git is different though, git allows you to use it without anyone else knowing you are using it.  That's a great feature, it's almost like if you were able to write your code in Ruby/Rails and just prior to commiting you run the magic program which converts it to Java.  You get to learn the ins and outs of a new framework and someone else pays you to do it.  What I've been able to do with git is clone my client's svn repository into a local git repository using git-svn and commit/branch against the local version.  This is great because I can work on several features at the same time, and when one is ready to be promoted up to the svn repo, I can commit only those changes I made to my local "feature branch"!  When I'm done committing the feature I was working, I switch out of it's branch, execute a an @git-svn rebase@ in my other feature's branch, and continue my work.</p>
<p>The above reasons contribute to why I'm a relatively early adopter of git (at the insistence of Marc and Alex mind you), for the simple reason that it's unobtrusive.</p>
<h1>The Changeset Shuffle</h1>
<pre>
> svn stat
? com/mycompany/feature/new/SomeNewFeature.java
M com/mycompany/feature/old/SomeOldFeatureThatNeededFixing.java
M com/mycompany/common/SomeCommonClassModifiedByBothFeatures.java   <--- Ah crap!
> cp com/mycompany/common/SomeCommonClassModifiedByBothFeatures.java SomeCommonClassModifiedByBothFeatures.java.new
> vim com/mycompany/common/SomeCommonClassModifiedByBothFeatures.java <--- remove the new features
> svn ci -m "qa fix 10032"
> mv SomeCommonClassModifiedByBothFeatures.java.new com/mycompany/common/SomeCommonClassModifiedByBothFeatures.java
</pre>
<p>git really helps you in those times where you are working on some new/experimental feature and then are hit with a critical bug fix found during a QA cycle.  Instead of doing the "change-set shuffle" ; you know, when you are frantically trying to figure out which files should be commited that were part of the fix and which were part of the experimental stuff ; you instead just "stash" away the experimental stuff, or branch your master and fix from there.  I know you SVN'ites are going to tell me "but I can branch just as well as you can!".  This is true to some extent, however with git I can do it without cluttering up the remote svn repo with a separate branch for the change. Using git I can easily and safely from the comfort of my own machine, branch, fix, commit a change and reconcile it to the remote svn repo. All of my git commits, all of the comments I made for those commits (you do comment your commits right!) all get pushed up to the svn repo.  Beautiful.</p>
<h1>How to learn</h1>
<p>Marc put me on to <a href="http://www.peepcode.com/">PeepCode</a> specifically their excellent git intro <a href="http://peepcode.com/products/git">screen cast</a>.  I'm very much a visual learner, so the screen cast format was an excellent choice for me.  You can keep track of some of the other resources I find helpful with git, by taking a look at <a href="http://del.icio.us/craiger316/git">my del.icio.us links</a>.</p>
<h1>In conclusion...</h1>
<p>I find git really rocks because:</p>
<ul>
<li>I can use it in a corporate environment that doesn't support it
<ul>
</li>
<p>I can't do that easily with other VCS</li>
</ul>
</li>
<li>It promotes "playing"
<ul>
<li>I can branch, be merry, experiment without the changeset-shuffle</li>
</ul>
</li>
<li>git promotes branching!
<ul>
<li>yeah, people are shit scared of branching in svn, mostly from a lack of understanding, but a fair bit of it stems from the fact you are branching in the *remote* repository, you just don't want to mess things up!</li>
</ul>
</li>
<li>It's fast, like really fast.</li>
<li>It's distributed, so you can have people clone your repo to their local systems and then they can push their changes to you or visa versa</li>
</ul>
<p>I guess the one gripe I might have is that instead of revision numbers, git uses "hashes" to mark an atomic checkin.  I don't know about you, but I am constantly asked at work "What revision was that changed checked into?"  It's a lot easier to answer "rev.381" than to say "rev.9a02133e6f288864bc6bc9b18ec01732649892h3"</p>
<p>I think Marc said it best, you have to try it in order to have that "a hah" moment, so go out and try it!  Need help?  Let us know on freenode in #basementcoders, or leave a comment right here.
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2008/04/yeah-so-git-is-good/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Episode 1 &#8211; Source Control</title>
		<link>http://basementcoders.com/2008/03/episode-1-source-control/</link>
		<comments>http://basementcoders.com/2008/03/episode-1-source-control/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 09:46:01 +0000</pubDate>
		<dc:creator>marc</dc:creator>
				<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://wp.basementcoders.com/?p=6</guid>
		<description><![CDATA[Recorded Nov 2007 (yes that long ago) In our first episode, Alex, Craig and Marc had a chat about source control systems. A little version control history, a centralized vs distributed comparison, and a few horror stories. We also drank some beer. Links Source Control: http://en.wikipedia.org/wiki/Source_control CVS: http://en.wikipedia.org/wiki/Concurrent_Versions_System Subversion: http://subversion.tigris.org/ Darcs: http://darcs.net Git: http://git.or.cz Mercurial: [...]]]></description>
			<content:encoded><![CDATA[<div class="entrycontent">
Recorded Nov 2007 (yes that long ago)</p>
<p>In our first episode,  Alex, Craig and Marc had a chat about source control systems. A little version control history, a centralized vs distributed comparison, and a few horror stories.   We also drank some beer.</p>
<p>Links</p>
<ul>
<li><a title="Source Control" href="http://en.wikipedia.org/wiki/Source_control " target="_blank">Source Control: http://en.wikipedia.org/wiki/Source_control </a></li>
<li><a title="CVS" href="http://en.wikipedia.org/wiki/Concurrent_Versions_System " target="_blank">CVS: http://en.wikipedia.org/wiki/Concurrent_Versions_System </a></li>
<li><a title="Subversion" href="http://subversion.tigris.org/ " target="_blank">Subversion: http://subversion.tigris.org/ </a></li>
<li><a title="Darcs" href="http://darcs.net" target="_blank">Darcs: http://darcs.net</a></li>
<li><a title="Git" href="http://git.or.cz" target="_blank">Git: http://git.or.cz</a></li>
<li><a title="Mercurial" href="http://www.selenic.com/mercurial" target="_blank">Mercurial: http://www.selenic.com/mercurial</a></li>
<li><a title="Monotone" href="http://www.monotone.ca" target="_blank">Monotone: http://www.monotone.ca</a></li>
<li><a title="Bitkeeper" href="http://www.bitkeeper.com" target="_blank">BitKeeper: http://www.bitkeeper.com</a></li>
<li><a title="Perforce" href="http://www.perforce.com" target="_blank">Perforce: http://www.perforce.com</a></li>
<li><a title="Comparison" href="http://en.wikipedia.org/wiki/Comparison_of_revision_control_software" target="_blank">Comparision of various systems: http://en.wikipedia.org/wiki/Comparison_of_revision_control_software</a></li>
</ul>

<p>Enjoy!
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://basementcoders.com/2008/03/episode-1-source-control/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://basementcoders.com/media/basementcoders.com_ep01.mp3" length="18632832" type="audio/mpeg" />
		</item>
	</channel>
</rss>
<!-- This Quick Cache file was built for (  basementcoders.com/feed/ ) in 3.29455 seconds, on May 18th, 2012 at 4:55 am UTC. -->
<!-- This Quick Cache file will automatically expire ( and be re-built automatically ) on May 18th, 2012 at 5:55 am UTC -->
<!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<!-- Quick Cache Is Fully Functional :-) ... A Quick Cache file was just served for (  basementcoders.com/feed/ ) in 0.00078 seconds, on May 18th, 2012 at 5:20 am UTC. -->
