<?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>Tragically L33T</title> 
	<atom:link href="http://tragicallyleet.com/rss.xml" rel="self" type="application/rss+xml" /> 
	<link>http://tragicallyleet.com</link> 
	<description></description> 
	<lastBuildDate>Mon, 08 Mar 2010 17:47:34 -0800</lastBuildDate> 
	<generator>http://jekyllrb.com/</generator> 
	<language>en</language> 
	<sy:updatePeriod>daily</sy:updatePeriod> 
	<sy:updateFrequency>4</sy:updateFrequency> 

	<item> 
		<title>The Lizard Brain, the Dip, and other Godinisms</title> 
		<link>http://tragicallyleet.com/2010/03/03/the-lizard-brain-the-dip-and-other-godinisms</link> 
		<comments>http://tragicallyleet.com/2010/03/03/the-lizard-brain-the-dip-and-other-godinisms#comments</comments> 
		<pubDate>Wed, 03 Mar 2010 00:00:00 -0800</pubDate> 
		<dc:creator>Jeffrey Hulten</dc:creator> 
		
		<category><![CDATA[creativity]]></category> 
      
		<category><![CDATA[work]]></category> 
      
		<guid isPermaLink="true">http://tragicallyleet.com/2010/03/03/the-lizard-brain-the-dip-and-other-godinisms</guid> 
		<description>Seth Godin is a really smart guy. More importantly, he takes his ideas and does something with them. I came across Seth in an interview he did with Merlin Mann. He talked a lot about fear and the lizard brain: the part of our brain that is only hungry, scared,...</description> 
		<content:encoded><![CDATA[ <p><a href='http://sethgodin.typepad.com/'>Seth Godin</a> is a really smart guy. More importantly, he takes his ideas and does something with them.</p>

<p>I came across Seth in <a href='http://www.43folders.com/2010/01/26/godin-linchpin'>an interview</a> he did with <a href='http://43folders.com'>Merlin Mann</a>. He talked a lot about fear and the <a href='http://en.wikipedia.org/wiki/Lizard_brain'>lizard brain</a>: the part of our brain that is only hungry, scared, selfish and horny. Its the part of our brains that ruled in high school.</p>

<p>It will also sabotage us if we let it.</p>

<p>Whenever we get close to completing something big or interesting or important to us, the lizard brain senses a threat. &#8220;What if we fail?&#8221; &#8220;Ridicule is painful!&#8221; &#8220;Better to go along in life quietly, then do something that might get us noticed.&#8221;</p>

<p>The lizard brain tells us to quit when success is near. Seth mentioned in his interview that he listens to his lizard brain&#8230; and then does the opposite. If his lizard brain is quiet, he probably isn&#8217;t doing anything important. If his lizard brain is screaming bloody murder, he knows he is on the right track.</p>

<p>I picked up a couple of Seth&#8217;s books, including Tribes, The Dip, and his new book, Linchpin. As I come across more interesting tidbits I will share them.</p> ]]></content:encoded> 
		</item> 

	<item> 
		<title>Moving my Blog to Jekyll</title> 
		<link>http://tragicallyleet.com/2010/02/28/moving-my-blog-to-jekyll</link> 
		<comments>http://tragicallyleet.com/2010/02/28/moving-my-blog-to-jekyll#comments</comments> 
		<pubDate>Sun, 28 Feb 2010 00:00:00 -0800</pubDate> 
		<dc:creator>Jeffrey Hulten</dc:creator> 
		
		<category><![CDATA[ruby]]></category> 
      
		<category><![CDATA[rake]]></category> 
      
		<category><![CDATA[jekyll]]></category> 
      
		<guid isPermaLink="true">http://tragicallyleet.com/2010/02/28/moving-my-blog-to-jekyll</guid> 
		<description>In the past I have not blogged very often. In fact I seem to blog less often than Wordpress releases a security patch. This was making me nervous and, combined with the issues of writing posts offline at events like NFJS, I decided a change was in order. Enter Jekyll,...</description> 
		<content:encoded><![CDATA[ <p>In the past I have not blogged very often. In fact I seem to blog less often than <a href='http://wordpress.org/'>Wordpress</a> releases a security patch. This was making me nervous and, combined with the issues of writing posts offline at events like NFJS, I decided a change was in order.</p>

<p>Enter <a href='http://github.com/mojombo/jekyll'>Jekyll</a>, the static page blog generator behind <a href='http://pages.github.com/'>Github Pages</a>. So far the workflow of managing text files in a Git repository is working well for me. Not being able to leave well enough alone I created a Rakefile to manage certain tasks like create a tagcloud for the sidebar, creating tag specific pages listing posts, and creating a draft post.</p>

<p>Creating a draft post was pretty straightforward:</p>
<div class='highlight'><pre><code class='ruby'><span class='n'>desc</span> <span class='s1'>&#39;create a new post in draft mode&#39;</span>
<span class='n'>task</span> <span class='ss'>:new</span> <span class='o'>=&gt;</span> <span class='o'>[</span><span class='ss'>:require_input</span><span class='o'>]</span> <span class='k'>do</span>
  <span class='n'>title</span> <span class='o'>=</span> <span class='n'>ask</span><span class='p'>(</span><span class='s2'>&quot;Title: &quot;</span><span class='p'>)</span>
  <span class='n'>filename</span> <span class='o'>=</span> <span class='n'>title</span><span class='o'>.</span><span class='n'>downcase</span><span class='o'>.</span><span class='n'>gsub</span><span class='p'>(</span><span class='sr'>/[^a-z0-9]/</span><span class='p'>,</span><span class='s2'>&quot;-&quot;</span><span class='p'>)</span>
  <span class='n'>template</span><span class='o'>=</span><span class='no'>File</span><span class='o'>.</span><span class='n'>read</span> <span class='s2'>&quot;lib/post_template.markdown&quot;</span>
  <span class='no'>File</span><span class='o'>.</span><span class='n'>open</span><span class='p'>(</span><span class='s2'>&quot;_drafts/</span><span class='si'>#{</span><span class='n'>filename</span><span class='si'>}</span><span class='s2'>.markdown&quot;</span><span class='p'>,</span> <span class='s1'>&#39;w+&#39;</span><span class='p'>)</span> <span class='k'>do</span> <span class='o'>|</span><span class='n'>f</span><span class='o'>|</span> 
    <span class='n'>f</span> <span class='o'>&lt;&lt;</span> <span class='n'>template</span><span class='o'>.</span><span class='n'>gsub</span><span class='p'>(</span><span class='sr'>/POST_TITLE/</span><span class='p'>,</span> <span class='n'>title</span><span class='p'>)</span>
  <span class='k'>end</span>
  <span class='n'>sh</span> <span class='s2'>&quot;git add _drafts/</span><span class='si'>#{</span><span class='n'>filename</span><span class='si'>}</span><span class='s2'>.markdown&quot;</span>
<span class='k'>end</span>
</code></pre>
</div>
<p>Publishing a draft to the blog will consist of a <code>git mv</code> of the draft file to the _posts directory with the data appended to the filename.</p>

<p>As for comments I have switched over to Disqus, which allowed me to import my Wordpress comments and link to them on my Jekyll blog.</p> ]]></content:encoded> 
		</item> 

	<item> 
		<title>MyProgWriMo - Day 15 - Reset</title> 
		<link>http://tragicallyleet.com/2009/11/16/myprogwrimo-day-15-reset</link> 
		<comments>http://tragicallyleet.com/2009/11/16/myprogwrimo-day-15-reset#comments</comments> 
		<pubDate>Mon, 16 Nov 2009 00:00:00 -0800</pubDate> 
		<dc:creator>Jeffrey Hulten</dc:creator> 
		
		<category><![CDATA[myprogwrimo]]></category> 
      
		<category><![CDATA[java]]></category> 
      
		<guid isPermaLink="true">http://tragicallyleet.com/2009/11/16/myprogwrimo-day-15-reset</guid> 
		<description>So I have been working on my project, but Tapestry has been kicking my butt. I have decided to step back and reset. I have useable DAOs and crappy DTOs and not much else. So I am resetting. Grabbing the code that works, dropping Tapestry (the documentation on the IoC...</description> 
		<content:encoded><![CDATA[ <p>So I have been working on my project, but Tapestry has been kicking my butt. I have decided to step back and reset. I have useable DAOs and crappy DTOs and not much else.</p>

<p>So I am resetting. Grabbing the code that works, dropping Tapestry (the documentation on the IoC container and testing is not great) and going back to basics. Hibernate, Spring, Sitemesh&#8230;</p> ]]></content:encoded> 
		</item> 

	<item> 
		<title>MyProgWriMo - Iteration Zero Complete</title> 
		<link>http://tragicallyleet.com/2009/11/02/myprogwrimo-iteration-zero-complete</link> 
		<comments>http://tragicallyleet.com/2009/11/02/myprogwrimo-iteration-zero-complete#comments</comments> 
		<pubDate>Mon, 02 Nov 2009 00:00:00 -0800</pubDate> 
		<dc:creator>Jeffrey Hulten</dc:creator> 
		
		<category><![CDATA[myprogwrimo]]></category> 
      
		<category><![CDATA[java]]></category> 
      
		<category><![CDATA[maven]]></category> 
      
		<guid isPermaLink="true">http://tragicallyleet.com/2009/11/02/myprogwrimo-iteration-zero-complete</guid> 
		<description>Yesterday (11/1) I: Created a basic project structure using a maven archetype Checked that structure into source control Setup a Hudson job to run continuous integration Today I have a light load (since it falls to me to feed the wife). I want to get my first page to render...</description> 
		<content:encoded><![CDATA[ <p>Yesterday (11/1) I:</p>

<ul>
<li>Created a basic project structure using a maven archetype</li>

<li>Checked that structure into <a href='http://github.com/jhulten/autoblog'>source control</a></li>

<li>Setup a Hudson job to run <a href='http://hudson.automatedlabs.com/hudson/job/autoblog/'>continuous integration</a></li>
</ul>

<p>Today I have a light load (since it falls to me to feed the wife). I want to get my first page to render in Tapestry and continue research into the elements I will need like custom dispatching.</p> ]]></content:encoded> 
		</item> 

	<item> 
		<title>MyProgWriMo - Day 2 - Lessons Learned</title> 
		<link>http://tragicallyleet.com/2009/11/02/myprogwrimo-day-2-lessons-learned</link> 
		<comments>http://tragicallyleet.com/2009/11/02/myprogwrimo-day-2-lessons-learned#comments</comments> 
		<pubDate>Mon, 02 Nov 2009 00:00:00 -0800</pubDate> 
		<dc:creator>Jeffrey Hulten</dc:creator> 
		
		<category><![CDATA[myprogwrimo]]></category> 
      
		<category><![CDATA[java]]></category> 
      
		<category><![CDATA[tapestry]]></category> 
      
		<category><![CDATA[hibernate]]></category> 
      
		<guid isPermaLink="true">http://tragicallyleet.com/2009/11/02/myprogwrimo-day-2-lessons-learned</guid> 
		<description>This is going to be harder and easier than I thought. So Tapestry supplies its own IoC container, so no Spring at this point. Also there is a nice Hibernate integration, so I am starting to mess with my entities and figure out the needed annotations. Maven profiles seem to...</description> 
		<content:encoded><![CDATA[ <p>This is going to be harder and easier than I thought.</p>

<p>So Tapestry supplies its own IoC container, so no Spring at this point. Also there is a nice Hibernate integration, so I am starting to mess with my entities and figure out the needed annotations.</p>

<p>Maven profiles seem to manage the different configuration aspects of my application such as properties for development versus a Hudson build. So I can find it in the future, here is the profile snippet for development with a in memory database:</p>
<div class='highlight'><pre><code class='xml'><span class='nt'>&lt;profile&gt;</span>
    <span class='nt'>&lt;id&gt;</span>development<span class='nt'>&lt;/id&gt;</span>
    <span class='nt'>&lt;properties&gt;</span>
        <span class='nt'>&lt;hibernate.dialect&gt;</span>org.hibernate.dialect.HSQLDialect<span class='nt'>&lt;/hibernate.dialect&gt;</span>
        <span class='nt'>&lt;hibernate.connection.driver_class&gt;</span>org.hsqldb.jdbcDriver<span class='nt'>&lt;/hibernate.connection.driver_class&gt;</span>
        <span class='nt'>&lt;hibernate.connection.url&gt;</span>jdbc:hsqldb:mem:autoblog<span class='nt'>&lt;/hibernate.connection.url&gt;</span>
        <span class='nt'>&lt;hibernate.connection.username&gt;</span>sa<span class='nt'>&lt;/hibernate.connection.username&gt;</span>
        <span class='nt'>&lt;hibernate.connection.password&gt;&lt;/hibernate.connection.password&gt;</span>
        <span class='nt'>&lt;hibernate.connection.pool_size&gt;&lt;/hibernate.connection.pool_size&gt;</span>
        <span class='nt'>&lt;hibernate.connection.autocommit&gt;</span>true<span class='nt'>&lt;/hibernate.connection.autocommit&gt;</span>
        <span class='nt'>&lt;hibernate.cache.provider_class&gt;</span>org.hibernate.cache.HashtableCacheProvider
        <span class='nt'>&lt;/hibernate.cache.provider_class&gt;</span>
        <span class='nt'>&lt;hibernate.hbm2ddl.auto&gt;</span>create-drop<span class='nt'>&lt;/hibernate.hbm2ddl.auto&gt;</span>
        <span class='nt'>&lt;hibernate.show_sql&gt;</span>true<span class='nt'>&lt;/hibernate.show_sql&gt;</span>
    <span class='nt'>&lt;/properties&gt;</span>
<span class='nt'>&lt;/profile&gt;</span>
</code></pre>
</div> ]]></content:encoded> 
		</item> 

	<item> 
		<title>NaNoWriMo, meet MyProgWriMo</title> 
		<link>http://tragicallyleet.com/2009/11/01/nanowrimo-meet-myprogwrimo</link> 
		<comments>http://tragicallyleet.com/2009/11/01/nanowrimo-meet-myprogwrimo#comments</comments> 
		<pubDate>Sun, 01 Nov 2009 00:00:00 -0800</pubDate> 
		<dc:creator>Jeffrey Hulten</dc:creator> 
		
		<category><![CDATA[myprogwrimo]]></category> 
      
		<category><![CDATA[java]]></category> 
      
		<guid isPermaLink="true">http://tragicallyleet.com/2009/11/01/nanowrimo-meet-myprogwrimo</guid> 
		<description>My wife is, for the second year in a row, participating in NaNoWriMo, the National Novel Writing Month. In a effort to leech off her enthusiasm and not distract her by watching House reruns I will be doing MyProgWriMo, My Program Written in a Month. The plan is to write...</description> 
		<content:encoded><![CDATA[ <p>My wife is, for the second year in a row, participating in NaNoWriMo, the National Novel Writing Month. In a effort to leech off her enthusiasm and not distract her by watching House reruns I will be doing MyProgWriMo, My Program Written in a Month.</p>

<p>The plan is to write stories that capture the work to be done in a month, hold one week sprints to execute stories, and release a functional (if not pretty) program at the end of November.</p>

<p>This is the first time I have tried a time-boxed activity like this, so we will see what happens. I will attempt to blog about the experience, but will focus on completing the stories first.</p>

<p>I decided to focus on Java development for this project. I have not done any serious Java programming in YEARS, so I needed a problem set that I understood well so I could focus on the HOW instead of on the WHAT.</p>

<p>SO, here it is. In one month I plan to write (with tests) a blogging platform. I know! Its so cliche&#8230; But I understand the issues and there is lots to learn.</p>

<p>Now, no one just writes Java code anymore (or so it seems) so I will be using some tools along the way. Hibernate (duh) will be used for persistence. Spring (double duh) will be used for IoC. I am thinking about Tapestry for presentation, but I have not gotten that far.</p>

<p>Stay tuned, boys and girls. It should be a wild ride.</p>

<p>Oh, and why didn&#8217;t I choose Grails? I am pretty sure I can do this all in Grails. I want to know I can do it in Java as well.</p> ]]></content:encoded> 
		</item> 

	<item> 
		<title>Announcing Toolbox</title> 
		<link>http://tragicallyleet.com/2009/10/08/announcing-toolbox</link> 
		<comments>http://tragicallyleet.com/2009/10/08/announcing-toolbox#comments</comments> 
		<pubDate>Thu, 08 Oct 2009 00:00:00 -0800</pubDate> 
		<dc:creator>Jeffrey Hulten</dc:creator> 
		
		<category><![CDATA[toolbox]]></category> 
      
		<category><![CDATA[projects]]></category> 
      
		<category><![CDATA[python]]></category> 
      
		<guid isPermaLink="true">http://tragicallyleet.com/2009/10/08/announcing-toolbox</guid> 
		<description>I have just released a 0.1 version of Toolbox, a simple command for managing version of Java tools and frameworks.&#160; See the project page for details.</description> 
		<content:encoded><![CDATA[ <p>I have just released a 0.1 version of Toolbox, a simple command for managing version of Java tools and frameworks.&#160; See the <a href='/projects/toolbox'>project page</a> for details.</p> ]]></content:encoded> 
		</item> 

	<item> 
		<title>NFJS – Fall 2009 – Day Three</title> 
		<link>http://tragicallyleet.com/2009/09/24/nfjs-fall-2009-day-three</link> 
		<comments>http://tragicallyleet.com/2009/09/24/nfjs-fall-2009-day-three#comments</comments> 
		<pubDate>Thu, 24 Sep 2009 00:00:00 -0800</pubDate> 
		<dc:creator>Jeffrey Hulten</dc:creator> 
		
		<category><![CDATA[nfjs]]></category> 
      
		<category><![CDATA[productivity]]></category> 
      
		<category><![CDATA[clojure]]></category> 
      
		<category><![CDATA[neuroscience]]></category> 
      
		<guid isPermaLink="true">http://tragicallyleet.com/2009/09/24/nfjs-fall-2009-day-three</guid> 
		<description>Ah, the final day of No Fluff&#8230; I spent the morning talking with Barbee Davis and Suzie Lewis Ship about topics ranging from science fiction to Agile development. As a result I missed Ken Sipe&#8217;s Iteration 0 panel. 7 Habits of Highly Effective Developers - Ken Sipe Ken&#8217;s session is...</description> 
		<content:encoded><![CDATA[ <p>Ah, the final day of No Fluff&#8230;</p>

<p>I spent the morning talking with Barbee Davis and Suzie Lewis Ship about topics ranging from science fiction to Agile development. As a result I missed Ken Sipe&#8217;s Iteration 0 panel.</p>

<h3 id='7_habits_of_highly_effective_developers__ken_sipe'>7 Habits of Highly Effective Developers - Ken Sipe</h3>

<p>Ken&#8217;s session is about applying the <a href='http://www.amazon.com/gp/product/0743269519?ie=UTF8&amp;tag=tragicallyl33-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0743269519'>The 7 Habits of Highly Effective People</a> by Stephen Covey to software developers.</p>

<p>Covey&#8217;s seven habits are:</p>

<ul>
<li>be proactive</li>

<li>begin with the end in mind</li>

<li>put first things first</li>

<li>seek first to understand, then to be understood</li>

<li>synergize</li>

<li>sharpen the saw</li>
</ul>

<p>Ken referred to a blog post &#8221;<a href='http://www.philosophicalgeek.com/2008/01/20/5-attributes-of-highly-effective-programmers/'>Top 5 Attributes of Highly Effective Programmers</a>&#8221;. The attributes from that post are:</p>

<ul>
<li>Humility</li>

<li>Love of Learning</li>

<li>Detail Orientedness</li>

<li>Adaptability</li>

<li>Passion</li>
</ul>

<p>He has his own list:</p>

<ul>
<li>
<p>focused on a mission with a vision</p>
</li>

<li>
<p>best researcher</p>
</li>

<li>
<p>best debugger</p>
</li>

<li>
<p>god complex when it comes to software development</p>

<ul>
<li>not a lack of humility</li>

<li>just optimism to be able to do anything on the computer</li>
</ul>
</li>

<li>
<p>quality focused</p>
</li>

<li>
<p>detailed oriented!</p>
</li>
</ul>

<h3 id='clojure__howard_lewis_ship'>Clojure - Howard Lewis Ship</h3>

<p>I have never programmed in Lisp. Considering the other panels in the same time slot I figured I would do something about that and increase my knowledge with the Clojure session.</p>

<p>Clojure is a partial Lisp clone on the JVM with support for software transactional memory to keep your concurrent processes running smoothly.</p>

<h3 id='hacking_your_brain_for_fun_and_profit__nathaniel_schutta'>Hacking Your Brain for Fun and Profit - Nathaniel Schutta</h3>

<p>This was the last panel I attended for the weekend, and a lot of fun. I enjoy thinking about and discussing learning techniques and such.</p>

<p>The only topic I will touch on here is the need for sleep. According to the <a href='http://www.spokane.wsu.edu/ResearchOutreach/Sleep/documents/2003SLP-VanDongen-etal.pdf'>research</a> Nate referenced, if you consistently get six hours of sleep when you need eight it is like missing two nights of sleep. Staying up one night results in a 30% drop in cognitive function&#8230;</p>

<p>So go take a nap. A 26 minute nap gives a 34% boost to performance.</p> ]]></content:encoded> 
		</item> 

	<item> 
		<title>NFJS - Fall 2009 - Day Two</title> 
		<link>http://tragicallyleet.com/2009/09/23/nfjs-day-two</link> 
		<comments>http://tragicallyleet.com/2009/09/23/nfjs-day-two#comments</comments> 
		<pubDate>Wed, 23 Sep 2009 00:00:00 -0800</pubDate> 
		<dc:creator>Jeffrey Hulten</dc:creator> 
		
		<category><![CDATA[grails]]></category> 
      
		<category><![CDATA[groovy]]></category> 
      
		<category><![CDATA[nfjs]]></category> 
      
		<category><![CDATA[patterns]]></category> 
      
		<category><![CDATA[metaprogramming]]></category> 
      
		<category><![CDATA[java]]></category> 
      
		<guid isPermaLink="true">http://tragicallyleet.com/2009/09/23/nfjs-day-two</guid> 
		<description>Dim Sum Grails - Scott Davis Grails is an open-source web framework written in Groovy. Grails is being used by major players like Wired.com, Taco Bell in Canada, and more. If you have ever created a domain (model) object in Grails and noticed the scaffolding lists fields in alphabetical order,...</description> 
		<content:encoded><![CDATA[ <h3 id='dim_sum_grails__scott_davis'>Dim Sum Grails - Scott Davis</h3>

<p>Grails is an open-source web framework written in Groovy. Grails is being used by major players like Wired.com, Taco Bell in Canada, and more.</p>

<p>If you have ever created a domain (model) object in Grails and noticed the scaffolding lists fields in alphabetical order, there is a simple way past this. When you add your fields to the static constraints closure, Grails will output them in the order provided.</p>

<p>Want to add Lucene to your application? Try this.</p>
<div class='highlight'><pre><code class='text'>&gt; grails install-plugin searchable
</code></pre>
</div>
<p>All that is left to give yourself a search engine is add searchable=true to your domain classes.</p>

<p>Once you have done that, start your application with grails run-app annd go to http://localhost:8080/app/searchable to see your search page.</p>

<h3 id='design_patterns_in_java_and_groovy__venkat_subramaniam'>Design Patterns in Java and Groovy - Venkat Subramaniam</h3>

<p>I have always had an interest in patterns since I attended Pattern Languages of Programming (PLoP) in 2006. Venkat refered to Java as a post-pattern language; the Gang of Four Design Patterns book came out just before Java, and so patterns are far easier to implement in Java than C++. Likewise we have power and flexibility in Groovy that we do not have in Java that enables pattern implementation.</p>

<p>I found myself in an interesting conversation with Barbee Davis and Ted Neward, so I was late to the next session.</p>

<h3 id='mopping_up_groovy__venkat_subramaniam'>MOPping up Groovy - Venkat Subramaniam</h3>

<p>This session was about meta-programming techniques in Groovy. My favorite part was the end where Venkat wrote a executable DSL (domain specific language) in Groovy.</p>

<p>At this point I was pretty tired and none of the last set of panels really interested me, so I went home a little early.</p> ]]></content:encoded> 
		</item> 

	<item> 
		<title>NFJS - Fall 2009 - Day One</title> 
		<link>http://tragicallyleet.com/2009/09/22/nfjs-fall-2009-day-one</link> 
		<comments>http://tragicallyleet.com/2009/09/22/nfjs-fall-2009-day-one#comments</comments> 
		<pubDate>Tue, 22 Sep 2009 00:00:00 -0800</pubDate> 
		<dc:creator>Jeffrey Hulten</dc:creator> 
		
		<category><![CDATA[nfjs]]></category> 
      
		<category><![CDATA[java]]></category> 
      
		<category><![CDATA[antipatterns]]></category> 
      
		<category><![CDATA[groovy]]></category> 
      
		<category><![CDATA[testing]]></category> 
      
		<guid isPermaLink="true">http://tragicallyleet.com/2009/09/22/nfjs-fall-2009-day-one</guid> 
		<description>Its that time again! The No Fluff Just Stuff : Pacific Northwest Software Symposium has returned to the Redmond Marriot. Effective Java - Venkat Subramaniam Unlike many talks, Venkat let us chose the topics. He put up a Jeopardy style board with categories like &#8216;Syntax Sugar&#8217;, &#8216;Collections&#8217; and &#8216;Objects&#8217; and...</description> 
		<content:encoded><![CDATA[ <p>Its that time again! The No Fluff Just Stuff : Pacific Northwest Software Symposium has returned to the Redmond Marriot.</p>

<h3 id='effective_java__venkat_subramaniam'>Effective Java - Venkat Subramaniam</h3>

<p>Unlike many talks, Venkat let us chose the topics. He put up a Jeopardy style board with categories like &#8216;Syntax Sugar&#8217;, &#8216;Collections&#8217; and &#8216;Objects&#8217; and let us pick. The content varied wildly, not in its quality (Venkat knows his stuff) but in just how deep into the rabbit hole it would lead you.</p>

<p>As an example, which is better?</p>
<div class='highlight'><pre><code class='java'><span class='n'>string1</span> <span class='o'>+</span> <span class='n'>string2</span>
<span class='k'>new</span> <span class='nf'>StringBuffer</span><span class='o'>(</span><span class='n'>string1</span><span class='o'>).</span><span class='na'>append</span><span class='o'>(</span><span class='n'>string2</span><span class='o'>)</span>
</code></pre>
</div>
<p>Normally you might think that the simple + would be less efficient, but thanks to syntactic sugar the opposite is true.</p>

<p>In Java 1.4 and above the simple + will use StringBuilder in the background. StringBuilder will preallocate space based on expectations and will not acquire and release locks like StringBuffer will.</p>

<p>There were a lot of code examples and we covered pitfalls and Java strangeness like the above.</p>

<h3 id='common_antipatterns__mark_richards'>Common Antipatterns - Mark Richards</h3>

<p>We started talking about common antipatterns in life as an example.</p>

<p>There are some common causes of anti-patterns:</p>

<ul>
<li>haste - aggressive deadlines and budgets drive lower standards of quality</li>

<li>apathy - general lack of concern about finding the proper solution to a problem</li>

<li>arrogance - refusal to accept solutions or practices generally known to be effective</li>

<li>ignorance - failure (intentional or non-intentional) to seek a clear understanding of the problem space</li>

<li>pride - refusal to leverage existing designs, code and frameworks; builds everything from scratch</li>
</ul>

<p><strong>Object Orgy</strong> - insufficiently encapsulated objects result in unrestricted access to their internals.</p>

<p><strong>Cargo Cult Programming</strong> - using patters, methods and techniques without understanding why.</p>

<p><strong>Golden Hammer</strong> - using the same tool, product or technique to solve every problem.</p>

<p>With the plethora of languages available on the JVM, we have all kinds of choice. For a comprehensive list of language options, see <a href='http://www.is-research.de/info/vmlanguages/'>http://www.is-research.de/info/vmlanguages/</a></p>

<p><strong>Accidental Complexity</strong> - introducing non-essential complexity into a solution.</p>

<blockquote>
<p>essential complexity: we have a hard problem</p>

<p>accidental complexity: we have made a problem hard</p>

<p>&#8220;developers are drawn to complexity like moths to a flame - often with the same result&#8221; - Neal Ford</p>
</blockquote>

<p><strong>Lava Flow</strong> - obsolete technologies and forgotten extensions leave hardened globules of dead code in its wake.</p>

<p><strong>The Blob</strong> - an all encompassing class or component that knows too much and does too much.</p>

<p>Use a roles and responsibility model. Figure out in just a couple of sentences what the job of a given object is.</p>

<p><strong>Architecture by Implication</strong> - systems lacking a clear architecture definition.</p>

<p>Don&#8217;t rely too heavily on past experience; every problem is a little different.</p>

<h3 id='groovy_testing__scott_davis'>Groovy Testing - Scott Davis</h3>

<p>There are some real benefits to using Groovy for testing. Groovy has the ability to get into the private guts of a Java object.</p>

<p>The concept of a &#8216;private&#8217; field is a Java <em>language</em> construct, not a Java <em>platform</em> construct. This means you can get to private methods and fields.</p>

<h3 id='keynote__venkat_subramaniam'>Keynote - Venkat Subramaniam</h3>

<p>Venkat gave the keynote after dinner; an entertaining talk about the pointy-hairness in all of us, not just bosses.</p> ]]></content:encoded> 
		</item> 

	</channel> 
</rss> 