<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>Tragically L33T</title>
 <link href="http://tragicallyleet.com/atom.xml" rel="self"/>
 <link href="http://tragicallyleet.com/"/>
 <updated>2010-03-08T17:47:34-08:00</updated>
 <id>http://tragicallyleet.com/</id>
 <author>
   <name>Jeffrey Hulten</name>
   <email>jeffh@tragicallyleet.com</email>
 </author>
 
 
 <entry>
   <title>The Lizard Brain, the Dip, and other Godinisms</title>
   <link href="http://tragicallyleet.com/2010/03/03/the-lizard-brain-the-dip-and-other-godinisms"/>
   <updated>2010-03-03T00:00:00-08:00</updated>
   <id>http://tragicallyleet.com/2010/03/03/the-lizard-brain-the-dip-and-other-godinisms</id>
   <content type="html">&lt;p&gt;&lt;a href='http://sethgodin.typepad.com/'&gt;Seth Godin&lt;/a&gt; is a really smart guy. More importantly, he takes his ideas and does something with them.&lt;/p&gt;

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

&lt;p&gt;It will also sabotage us if we let it.&lt;/p&gt;

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

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

&lt;p&gt;I picked up a couple of Seth&amp;#8217;s books, including Tribes, The Dip, and his new book, Linchpin. As I come across more interesting tidbits I will share them.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Moving my Blog to Jekyll</title>
   <link href="http://tragicallyleet.com/2010/02/28/moving-my-blog-to-jekyll"/>
   <updated>2010-02-28T00:00:00-08:00</updated>
   <id>http://tragicallyleet.com/2010/02/28/moving-my-blog-to-jekyll</id>
   <content type="html">&lt;p&gt;In the past I have not blogged very often. In fact I seem to blog less often than &lt;a href='http://wordpress.org/'&gt;Wordpress&lt;/a&gt; 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.&lt;/p&gt;

&lt;p&gt;Enter &lt;a href='http://github.com/mojombo/jekyll'&gt;Jekyll&lt;/a&gt;, the static page blog generator behind &lt;a href='http://pages.github.com/'&gt;Github Pages&lt;/a&gt;. 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.&lt;/p&gt;

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

&lt;p&gt;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.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>MyProgWriMo - Day 15 - Reset</title>
   <link href="http://tragicallyleet.com/2009/11/16/myprogwrimo-day-15-reset"/>
   <updated>2009-11-16T00:00:00-08:00</updated>
   <id>http://tragicallyleet.com/2009/11/16/myprogwrimo-day-15-reset</id>
   <content type="html">&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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&amp;#8230;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>MyProgWriMo - Iteration Zero Complete</title>
   <link href="http://tragicallyleet.com/2009/11/02/myprogwrimo-iteration-zero-complete"/>
   <updated>2009-11-02T00:00:00-08:00</updated>
   <id>http://tragicallyleet.com/2009/11/02/myprogwrimo-iteration-zero-complete</id>
   <content type="html">&lt;p&gt;Yesterday (11/1) I:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Created a basic project structure using a maven archetype&lt;/li&gt;

&lt;li&gt;Checked that structure into &lt;a href='http://github.com/jhulten/autoblog'&gt;source control&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;Setup a Hudson job to run &lt;a href='http://hudson.automatedlabs.com/hudson/job/autoblog/'&gt;continuous integration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;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.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>MyProgWriMo - Day 2 - Lessons Learned</title>
   <link href="http://tragicallyleet.com/2009/11/02/myprogwrimo-day-2-lessons-learned"/>
   <updated>2009-11-02T00:00:00-08:00</updated>
   <id>http://tragicallyleet.com/2009/11/02/myprogwrimo-day-2-lessons-learned</id>
   <content type="html">&lt;p&gt;This is going to be harder and easier than I thought.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='xml'&gt;&lt;span class='nt'&gt;&amp;lt;profile&amp;gt;&lt;/span&gt;
    &lt;span class='nt'&gt;&amp;lt;id&amp;gt;&lt;/span&gt;development&lt;span class='nt'&gt;&amp;lt;/id&amp;gt;&lt;/span&gt;
    &lt;span class='nt'&gt;&amp;lt;properties&amp;gt;&lt;/span&gt;
        &lt;span class='nt'&gt;&amp;lt;hibernate.dialect&amp;gt;&lt;/span&gt;org.hibernate.dialect.HSQLDialect&lt;span class='nt'&gt;&amp;lt;/hibernate.dialect&amp;gt;&lt;/span&gt;
        &lt;span class='nt'&gt;&amp;lt;hibernate.connection.driver_class&amp;gt;&lt;/span&gt;org.hsqldb.jdbcDriver&lt;span class='nt'&gt;&amp;lt;/hibernate.connection.driver_class&amp;gt;&lt;/span&gt;
        &lt;span class='nt'&gt;&amp;lt;hibernate.connection.url&amp;gt;&lt;/span&gt;jdbc:hsqldb:mem:autoblog&lt;span class='nt'&gt;&amp;lt;/hibernate.connection.url&amp;gt;&lt;/span&gt;
        &lt;span class='nt'&gt;&amp;lt;hibernate.connection.username&amp;gt;&lt;/span&gt;sa&lt;span class='nt'&gt;&amp;lt;/hibernate.connection.username&amp;gt;&lt;/span&gt;
        &lt;span class='nt'&gt;&amp;lt;hibernate.connection.password&amp;gt;&amp;lt;/hibernate.connection.password&amp;gt;&lt;/span&gt;
        &lt;span class='nt'&gt;&amp;lt;hibernate.connection.pool_size&amp;gt;&amp;lt;/hibernate.connection.pool_size&amp;gt;&lt;/span&gt;
        &lt;span class='nt'&gt;&amp;lt;hibernate.connection.autocommit&amp;gt;&lt;/span&gt;true&lt;span class='nt'&gt;&amp;lt;/hibernate.connection.autocommit&amp;gt;&lt;/span&gt;
        &lt;span class='nt'&gt;&amp;lt;hibernate.cache.provider_class&amp;gt;&lt;/span&gt;org.hibernate.cache.HashtableCacheProvider
        &lt;span class='nt'&gt;&amp;lt;/hibernate.cache.provider_class&amp;gt;&lt;/span&gt;
        &lt;span class='nt'&gt;&amp;lt;hibernate.hbm2ddl.auto&amp;gt;&lt;/span&gt;create-drop&lt;span class='nt'&gt;&amp;lt;/hibernate.hbm2ddl.auto&amp;gt;&lt;/span&gt;
        &lt;span class='nt'&gt;&amp;lt;hibernate.show_sql&amp;gt;&lt;/span&gt;true&lt;span class='nt'&gt;&amp;lt;/hibernate.show_sql&amp;gt;&lt;/span&gt;
    &lt;span class='nt'&gt;&amp;lt;/properties&amp;gt;&lt;/span&gt;
&lt;span class='nt'&gt;&amp;lt;/profile&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;</content>
 </entry>
 
 <entry>
   <title>NaNoWriMo, meet MyProgWriMo</title>
   <link href="http://tragicallyleet.com/2009/11/01/nanowrimo-meet-myprogwrimo"/>
   <updated>2009-11-01T00:00:00-07:00</updated>
   <id>http://tragicallyleet.com/2009/11/01/nanowrimo-meet-myprogwrimo</id>
   <content type="html">&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

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

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Stay tuned, boys and girls. It should be a wild ride.&lt;/p&gt;

&lt;p&gt;Oh, and why didn&amp;#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.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Announcing Toolbox</title>
   <link href="http://tragicallyleet.com/2009/10/08/announcing-toolbox"/>
   <updated>2009-10-08T00:00:00-07:00</updated>
   <id>http://tragicallyleet.com/2009/10/08/announcing-toolbox</id>
   <content type="html">&lt;p&gt;I have just released a 0.1 version of Toolbox, a simple command for managing version of Java tools and frameworks.&amp;#160; See the &lt;a href='/projects/toolbox'&gt;project page&lt;/a&gt; for details.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>NFJS – Fall 2009 – Day Three</title>
   <link href="http://tragicallyleet.com/2009/09/24/nfjs-fall-2009-day-three"/>
   <updated>2009-09-24T00:00:00-07:00</updated>
   <id>http://tragicallyleet.com/2009/09/24/nfjs-fall-2009-day-three</id>
   <content type="html">&lt;p&gt;Ah, the final day of No Fluff&amp;#8230;&lt;/p&gt;

&lt;p&gt;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&amp;#8217;s Iteration 0 panel.&lt;/p&gt;

&lt;h3 id='7_habits_of_highly_effective_developers__ken_sipe'&gt;7 Habits of Highly Effective Developers - Ken Sipe&lt;/h3&gt;

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

&lt;p&gt;Covey&amp;#8217;s seven habits are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;be proactive&lt;/li&gt;

&lt;li&gt;begin with the end in mind&lt;/li&gt;

&lt;li&gt;put first things first&lt;/li&gt;

&lt;li&gt;seek first to understand, then to be understood&lt;/li&gt;

&lt;li&gt;synergize&lt;/li&gt;

&lt;li&gt;sharpen the saw&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Humility&lt;/li&gt;

&lt;li&gt;Love of Learning&lt;/li&gt;

&lt;li&gt;Detail Orientedness&lt;/li&gt;

&lt;li&gt;Adaptability&lt;/li&gt;

&lt;li&gt;Passion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;He has his own list:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;focused on a mission with a vision&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;best researcher&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;best debugger&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;god complex when it comes to software development&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;not a lack of humility&lt;/li&gt;

&lt;li&gt;just optimism to be able to do anything on the computer&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;quality focused&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;detailed oriented!&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id='clojure__howard_lewis_ship'&gt;Clojure - Howard Lewis Ship&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

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

&lt;h3 id='hacking_your_brain_for_fun_and_profit__nathaniel_schutta'&gt;Hacking Your Brain for Fun and Profit - Nathaniel Schutta&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;The only topic I will touch on here is the need for sleep. According to the &lt;a href='http://www.spokane.wsu.edu/ResearchOutreach/Sleep/documents/2003SLP-VanDongen-etal.pdf'&gt;research&lt;/a&gt; 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&amp;#8230;&lt;/p&gt;

&lt;p&gt;So go take a nap. A 26 minute nap gives a 34% boost to performance.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>NFJS - Fall 2009 - Day Two</title>
   <link href="http://tragicallyleet.com/2009/09/23/nfjs-day-two"/>
   <updated>2009-09-23T00:00:00-07:00</updated>
   <id>http://tragicallyleet.com/2009/09/23/nfjs-day-two</id>
   <content type="html">&lt;h3 id='dim_sum_grails__scott_davis'&gt;Dim Sum Grails - Scott Davis&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

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

&lt;p&gt;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.&lt;/p&gt;

&lt;h3 id='design_patterns_in_java_and_groovy__venkat_subramaniam'&gt;Design Patterns in Java and Groovy - Venkat Subramaniam&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

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

&lt;h3 id='mopping_up_groovy__venkat_subramaniam'&gt;MOPping up Groovy - Venkat Subramaniam&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>NFJS - Fall 2009 - Day One</title>
   <link href="http://tragicallyleet.com/2009/09/22/nfjs-fall-2009-day-one"/>
   <updated>2009-09-22T00:00:00-07:00</updated>
   <id>http://tragicallyleet.com/2009/09/22/nfjs-fall-2009-day-one</id>
   <content type="html">&lt;p&gt;Its that time again! The No Fluff Just Stuff : Pacific Northwest Software Symposium has returned to the Redmond Marriot.&lt;/p&gt;

&lt;h3 id='effective_java__venkat_subramaniam'&gt;Effective Java - Venkat Subramaniam&lt;/h3&gt;

&lt;p&gt;Unlike many talks, Venkat let us chose the topics. He put up a Jeopardy style board with categories like &amp;#8216;Syntax Sugar&amp;#8217;, &amp;#8216;Collections&amp;#8217; and &amp;#8216;Objects&amp;#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.&lt;/p&gt;

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

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;There were a lot of code examples and we covered pitfalls and Java strangeness like the above.&lt;/p&gt;

&lt;h3 id='common_antipatterns__mark_richards'&gt;Common Antipatterns - Mark Richards&lt;/h3&gt;

&lt;p&gt;We started talking about common antipatterns in life as an example.&lt;/p&gt;

&lt;p&gt;There are some common causes of anti-patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;haste - aggressive deadlines and budgets drive lower standards of quality&lt;/li&gt;

&lt;li&gt;apathy - general lack of concern about finding the proper solution to a problem&lt;/li&gt;

&lt;li&gt;arrogance - refusal to accept solutions or practices generally known to be effective&lt;/li&gt;

&lt;li&gt;ignorance - failure (intentional or non-intentional) to seek a clear understanding of the problem space&lt;/li&gt;

&lt;li&gt;pride - refusal to leverage existing designs, code and frameworks; builds everything from scratch&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Object Orgy&lt;/strong&gt; - insufficiently encapsulated objects result in unrestricted access to their internals.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cargo Cult Programming&lt;/strong&gt; - using patters, methods and techniques without understanding why.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Golden Hammer&lt;/strong&gt; - using the same tool, product or technique to solve every problem.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Accidental Complexity&lt;/strong&gt; - introducing non-essential complexity into a solution.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;essential complexity: we have a hard problem&lt;/p&gt;

&lt;p&gt;accidental complexity: we have made a problem hard&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Lava Flow&lt;/strong&gt; - obsolete technologies and forgotten extensions leave hardened globules of dead code in its wake.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Blob&lt;/strong&gt; - an all encompassing class or component that knows too much and does too much.&lt;/p&gt;

&lt;p&gt;Use a roles and responsibility model. Figure out in just a couple of sentences what the job of a given object is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Architecture by Implication&lt;/strong&gt; - systems lacking a clear architecture definition.&lt;/p&gt;

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

&lt;h3 id='groovy_testing__scott_davis'&gt;Groovy Testing - Scott Davis&lt;/h3&gt;

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

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

&lt;h3 id='keynote__venkat_subramaniam'&gt;Keynote - Venkat Subramaniam&lt;/h3&gt;

&lt;p&gt;Venkat gave the keynote after dinner; an entertaining talk about the pointy-hairness in all of us, not just bosses.&lt;/p&gt;</content>
 </entry>
 
 
</feed>