<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0">

<channel>
	<title>Code Hangover</title>
	
	<link>http://blog.codehangover.com</link>
	<description>Go ahead, have another</description>
	<lastBuildDate>Tue, 22 Mar 2011 15:49:48 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/CodeHangover" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="codehangover" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">CodeHangover</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Track every Build Number with Maven</title>
		<link>http://blog.codehangover.com/track-every-build-number-with-maven/</link>
		<comments>http://blog.codehangover.com/track-every-build-number-with-maven/#comments</comments>
		<pubDate>Sat, 09 Oct 2010 16:42:54 +0000</pubDate>
		<dc:creator>MikeNereson</dc:creator>
				<category><![CDATA[Software Tools]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[build number]]></category>

		<guid isPermaLink="false">http://blog.codehangover.com/?p=584</guid>
		<description><![CDATA[Need to differentiate between build numbers? Let Maven do the work for you.]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://blog.codehangover.com/track-every-build-number-with-maven/";</script><h4>Problem</h4>
<p>You need to differentiate between build numbers. For example, you&#8217;ve just redeployed your application and need to ensure that the new version is what you are viewing. Or, you need to keep track of how many times you build. There could be many reasons why you want to know the build number that you are on. I use it for reporting bugs against specific builds.</p>
<h4>Solution</h4>
<p><code>maven-buildnumber-plugin</code>. This Maven2 plugin will generate a unique build number each time your build your project. You can even configure which maven phase triggers the increment of the number. This plugin can also fetch data from SVN to ensure that a team of developers all get unique build numbers.</p>
<p>As a bonus, it generates a buildNumber.properties file so that you can read in this build number from anywhere in your project. Here is how I use the plugin.</p>
<p>First, update your <code>pom.xml</code>. You need to setup the build trigger.</p>
<pre class="brush: xml; title: ; notranslate">

&lt;build&gt;
  &lt;plugins&gt;
    &lt;plugin&gt;
      &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
      &lt;artifactId&gt;buildnumber-maven-plugin&lt;/artifactId&gt;
      &lt;version&gt;1.0-beta-3&lt;/version&gt;
      &lt;executions&gt;
        &lt;execution&gt;
          &lt;phase&gt;validate&lt;/phase&gt;
          &lt;goals&gt;
            &lt;goal&gt;create&lt;/goal&gt;
          &lt;/goals&gt;
        &lt;/execution&gt;
      &lt;/executions&gt;
      &lt;configuration&gt;
        &lt;doCheck&gt;true&lt;/doCheck&gt;
        &lt;doUpdate&gt;false&lt;/doUpdate&gt;
        &lt;format&gt;${version}.{0,number}&lt;/format&gt;
        &lt;items&gt;
          &lt;item&gt;buildNumber0&lt;/item&gt;
        &lt;/items&gt;
      &lt;/configuration&gt;
    &lt;/plugin&gt;
  &lt;/plugins&gt;
&lt;/build&gt;
</pre>
<p>Now, you&#8217;ll need the build number and append it to your artifact&#8217;s final name. Add this to your <code>pom.xml</code></p>
<pre class="brush: xml; title: ; notranslate">
&lt;build&gt;
  &lt;finalName&gt;
    ${project.artifactId}-${project.version}.{buildNumber}
  &lt;/finalName&gt;
&lt;/build&gt;
</pre>
<p>Now you&#8217;re package goal will output a file named</p>
<p><code>projectname-1.0.1.war</code></p>
<p>This is a great start and now you can differentiate each and every build. However, I need to take this a step further.</p>
<p>I need to see the version on my application&#8217;s index page. To do this, I use an ant filter to write the version and timestamp to a version.html file, and then copy it to my project&#8217; web app directory.  Add this to your <code>pom.xm</code>.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;build&gt;
  &lt;plugins&gt;
    &lt;plugin&gt;
      &lt;artifactId&gt;maven-antrun-plugin&lt;/artifactId&gt;
      &lt;executions&gt;
        &lt;execution&gt;
          &lt;phase&gt;compile&lt;/phase&gt;
          &lt;configuration&gt;
            &lt;tasks&gt;
              &lt;!-- versioning --&gt;
              &lt;echo message=&quot;[build version]&quot;/&gt;
              &lt;delete file=&quot;target/projectname/version.html&quot;/&gt;
              &lt;tstamp&gt;
                &lt;format property=&quot;rightNow&quot; pattern=&quot;d MMM yyyy&quot; locale=&quot;en&quot;/&gt;
              &lt;/tstamp&gt;
              &lt;copy todir=&quot;target/projectname&quot;&gt;
                &lt;fileset dir=&quot;src/main/webapp&quot;&gt;
                  &lt;include name=&quot;version.html&quot;/&gt;
                &lt;/fileset&gt;
                &lt;filterset&gt;
                  &lt;filter token=&quot;VERSION&quot; value=&quot;${buildNumber}&quot;/&gt;
                  &lt;filter token=&quot;BUILTON&quot; value=&quot;${rightNow}&quot;/&gt;
                &lt;/filterset&gt;
              &lt;/copy&gt;
              &lt;echo message=&quot; version is ${buildNumber}&quot;/&gt;
            &lt;/tasks&gt;
          &lt;/configuration&gt;
          &lt;goals&gt;
            &lt;goal&gt;run&lt;/goal&gt;
          &lt;/goals&gt;
        &lt;/execution&gt;
      &lt;/executions&gt;
    &lt;/plugin&gt;
  &lt;/plugins&gt;
&lt;/build&gt;
</pre>
<p><code>Version.html</code> is simple.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;p class=&quot;version&quot;&gt;Version: @VERSION@&lt;/p&gt;
&lt;p class=&quot;built&quot;&gt;Built on: @BUILTON@&lt;/p&gt;
</pre>
<p>Finally, in my index page&#8230;</p>
<pre class="brush: xml; title: ; notranslate">
&lt;jsp:include page=&quot;/version.html&quot;/&gt;
</pre>
<p>Almost everything you want to know about this plugin can be found on the plugin&#8217;s site: <a href="http://mojo.codehaus.org/buildnumber-maven-plugin/">http://mojo.codehaus.org/buildnumber-maven-plugin/</a></p>
<h4>Alternatives</h4>
<p>As an alternative to writing and importing <code>version.html</code>, you can read <code>buildNumber.properties</code> in an MVC controller and put the version in your page model. This is what I for my login pages. I use a java class to read the build number, format it, and cache it. I start the first build number at <code>00100</code>, then format that to <code>0.1.0</code>. So the next build is <code>00101</code> which gets displayed as <code>0.1.1</code>.</p>
<h4>Update:Tips</h4>
<p>Here is a usage tip. You can move the create goal into a build profile so that the build number only increments in specific situations. I use a profile for my Continuous Integration builds so that our version increments only when Hudson builds our apps. This also makes it possible to synchronize our Hudson build numbers to our module versions.</p>
<h4>Feedback</h4>
<p>What do you use to track build numbers? How do your format it?</p>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li><a href="http://blog.codehangover.com/new-and-unknown-java-libraries/" title="New and Unknown Java Libraries">New and Unknown Java Libraries</a></li><li><a href="http://blog.codehangover.com/propertyplaceholderconfigurer-with-default-values/" title="PropertyPlaceholderConfigurer with Default Values">PropertyPlaceholderConfigurer with Default Values</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.codehangover.com/track-every-build-number-with-maven/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>.Net Data Provider Overview</title>
		<link>http://blog.codehangover.com/net-data-provider-overview/</link>
		<comments>http://blog.codehangover.com/net-data-provider-overview/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 20:40:07 +0000</pubDate>
		<dc:creator>Welzie</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[data provider]]></category>
		<category><![CDATA[database]]></category>

		<guid isPermaLink="false">http://blog.codehangover.com/?p=563</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://blog.codehangover.com/net-data-provider-overview/";</script>Summary
This is a high level summary of the basic .Net API’s for interacting with a database.  This includes a short description of each and how they relate to each other.  As a developer with mainly a Java and PHP background I was unclear about how ADO.Net related to OleDb and I had no [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://blog.codehangover.com/net-data-provider-overview/";</script><p><strong>Summary</strong><br />
This is a high level summary of the basic .Net API’s for interacting with a database.  This includes a short description of each and how they relate to each other.  As a developer with mainly a Java and PHP background I was unclear about how ADO.Net related to OleDb and I had no idea what was meant by the term “.Net Data Provider”.  I created this because the msdn documentation is HEAVILY focused on ADO.Net and does not give a clear picture of how the many namespaces, interfaces, and classes interact.  Please add comments to correct or enlighten.  Note at this time the relation of .Net Providers to Nhiberante, LINQ to SQL, and Entity Framework is not covered in this post.</p>
<p><strong>.Net Data Provider</strong></p>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/library/a6cd7c08(v=VS.71).aspx">http://msdn.microsoft.com/en-us/library/a6cd7c08(v=VS.71).aspx</a></li>
<li>A .NET Framework data provider is used for connecting to a database, executing commands, and retrieving results. Those results are either processed directly, or placed in an ADO.NET DataSet.<br />
What that actually means is that a .Net Data Provider implements the interfaces defined in the System.Data namespace.</li>
<li>A .Net Data Provider is similar to a JDBC driver in Java</li>
<li><a href="http://en.wikipedia.org/wiki/Java_Database_Connectivit">http://en.wikipedia.org/wiki/Java_Database_Connectivity</a></li>
</ul>
<p><strong>System.Data</strong></p>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/library/system.data.aspx">http://msdn.microsoft.com/en-us/library/system.data.aspx</a></li>
<li>This page contains text that makes you believe that ADO.Net is the CORE part of .Net data access, however the reality is that ADO.Net is the highest level of data access and is built upon the .Net Data Providers that implement the interfaces in the System.Data.
</li>
<li>
In my opinion it almost seems like microsoft is trying to hide how database connections work, so that users are trapped using controls provided by visual studio.</li>
<li>This namesapce contains the Interfaces that need to be defined by ALL .Net Data Providers</li>
<li>Core Interfaces
<ul>
<li>IDbConnection</li>
<li>IDbCommand</li>
<li>IDataAdapter</li>
<li>IDataReader</li>
</ul>
</li>
</ul>
<p><strong>Four examples of System.Data Implementations</strong></p>
<ul>
<li>The below namespaces include classes that implement the core “.Net Data Provider” interfaces defined in System.Data</li>
</ul>
<table cellspacing="0" cellpadding="0">
<tr>
<td>
<p><strong>System.Data.SqlClient</strong>
</td>
<td>
<p><strong>System.Data.OleDb</strong>
</td>
<td>
<p><strong>System.Data.Odbc</strong>
</td>
<td>
<p><strong>IBM.Data.DB2.iSeries</strong>
</td>
</tr>
<tr>
<td>
<p><a target="_blank" href="http://msdn.microsoft.com/en-us/library/system.data.sqlclient.aspx"><br />
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.aspx</a>
</td>
<td>
<p><a target="_blank" href="http://msdn.microsoft.com/en-us/library/system.data.oledb.aspx">http://msdn.microsoft.com/en-us/library/system.data.oledb.aspx</a>
</td>
<td>
<p><a target="_blank" href="http://msdn.microsoft.com/en-us/library/system.data.odbc.aspx">http://msdn.microsoft.com/en-us/library/system.data.odbc.aspx</a>
</td>
<td>
<p><a target="_blank" href="<br />
http://www-03.ibm.com/systems/i/software/access/windows/dotnet/index.html">http://www-03.ibm.com/systems/i/software/access/windows/dotnet/index.html</a>
</td>
</tr>
<tr>
<td>
<p><strong>Core Classes</strong></p>
<ul>
<li>SqlConnection</li>
<li>SqlCommand</li>
<li>SqlDataAdapter</li>
<li>SqlDataReader</li>
</ul>
</td>
<td>
<strong>Core Classes</strong></p>
<ul>
<li>OleDbConnection</li>
<li>OleDbCommand</li>
<li>OleDbDataAdapter</li>
<li>OleDbDataReader</li>
</ul>
</td>
<td>
<strong>Core Classes</strong></p>
<ul>
<li>OdbcConnection</li>
<li>OdbcCommand</li>
<li>OdbcDataAdapter</li>
<li>OdbcDataReader</li>
</ul>
</td>
<td>
<p><strong>Core Classes</strong></p>
<ul>
<li>iDB2Connection</li>
<li>iDB2Command</li>
<li>iDB2DataAdapter</li>
<li>iDB2DataReader</li>
</ul>
</td>
</tr>
</table>
<p><strong>ADO.Net</strong></p>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/library/27y4ybxw(v=VS.71).aspx">http://msdn.microsoft.com/en-us/library/27y4ybxw(v=VS.71).aspx</a></li>
<li>ADO.Net is a database query and manipulation API built on top of the basic .Net Data Provider classes.  ADO.Net focuses on disconnected, multi-tier database interaction.  In my opinion the core ADO.Net classes should be in a separate namespace like System.Data.ADO just for the sake of clarity.</li>
<li>Core Classes
<ul>
<li>DataSet</li>
<li>DataTable</li>
<li>DataColumn</li>
<li>DataRelation</li>
</ul>
</li>
</ul>
<p><meta name="google-site-verification" content="Bq6Rop8-8fI5Z9VNovhl3nMfaY4Tlit0AxjXWZcFKwM" /></p>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.codehangover.com%2Fnet-data-provider-overview%2F&amp;title=.Net%20Data%20Provider%20Overview" id="wpa2a_2"><img src="http://blog.codehangover.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li><a href="http://blog.codehangover.com/php-framework-comparison/" title="PHP Framework Comparison">PHP Framework Comparison</a></li><li><a href="http://blog.codehangover.com/read-html-with-java-then-7-fun-things-to-do-to-it/" title="Read HTML with Java &#8211; Then 7 Fun Things to do to It">Read HTML with Java &#8211; Then 7 Fun Things to do to It</a></li><li><a href="http://blog.codehangover.com/list-of-version-control-web-sites/" title="List of Version Control Web Sites">List of Version Control Web Sites</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.codehangover.com/net-data-provider-overview/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Strange Loop 2010 – Early Bird Registration</title>
		<link>http://blog.codehangover.com/strange-loop-2010-early-bird-registration/</link>
		<comments>http://blog.codehangover.com/strange-loop-2010-early-bird-registration/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 18:53:09 +0000</pubDate>
		<dc:creator>Welzie</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[strange loop]]></category>

		<guid isPermaLink="false">http://blog.codehangover.com/?p=555</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://blog.codehangover.com/strange-loop-2010-early-bird-registration/";</script>The early bird registration is about to end for the Strange Loop 2010 conference.  This is the second year of the conference.  The first year was awesome, hopefully they can only make it better.
Go to the site to see the speaker list, because it&#8217;s too long to list here.
http://strangeloop2010.com/speakers?
Early bird registration for Strange [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://blog.codehangover.com/strange-loop-2010-early-bird-registration/";</script><p>The early bird registration is about to end for the Strange Loop 2010 conference.  This is the second year of the conference.  The first year was awesome, hopefully they can only make it better.</p>
<p>Go to the site to see the speaker list, because it&#8217;s too long to list here.</p>
<p><a href="http://strangeloop2010.com/speakers?">http://strangeloop2010.com/speakers?</a></p>
<p>Early bird registration for Strange Loop is open until 8/6/10. Don&#8217;t miss out &#8211; sign up now for just $150 through Aug. 6th.<br />
Prices:</p>
<ul>
<li>Early bird &#8211; $150 (till Aug 6th)</li>
<li>Regular &#8211; $190 (till Oct. 1st)</li>
<li>Late &#8211; $250</li>
</ul>
<p>Strange Loop 2009 posts<br />
<a href="http://blog.codehangover.com/strange-loop-2009-day-1/"><br />
http://blog.codehangover.com/strange-loop-2009-day-1/</a><br />
<a href="http://blog.codehangover.com/strange-loop-2009-day-2/"><br />
http://blog.codehangover.com/strange-loop-2009-day-2/</a><br />
<a style="color: white; font-size: 8;" href="http://blog.codehangover.com/php-framework-comparison/">php</a></p>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.codehangover.com%2Fstrange-loop-2010-early-bird-registration%2F&amp;title=Strange%20Loop%202010%20%26%238211%3B%20Early%20Bird%20Registration" id="wpa2a_4"><img src="http://blog.codehangover.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li><a href="http://blog.codehangover.com/strange-loop-2009-day-2/" title="Strange Loop 2009 &#8211; Day 2">Strange Loop 2009 &#8211; Day 2</a></li><li><a href="http://blog.codehangover.com/strange-loop-2009-day-1/" title="Strange Loop 2009 &#8211; Day 1">Strange Loop 2009 &#8211; Day 1</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.codehangover.com/strange-loop-2010-early-bird-registration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NHibernate 2 Beginner’s Guide – Book Review</title>
		<link>http://blog.codehangover.com/book-review-nhibernate-2-beginners-guide/</link>
		<comments>http://blog.codehangover.com/book-review-nhibernate-2-beginners-guide/#comments</comments>
		<pubDate>Wed, 09 Jun 2010 04:31:22 +0000</pubDate>
		<dc:creator>Welzie</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[book review]]></category>
		<category><![CDATA[NHibernate]]></category>

		<guid isPermaLink="false">http://blog.codehangover.com/?p=542</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://blog.codehangover.com/book-review-nhibernate-2-beginners-guide/";</script>Book on Amazon
Finally someone has written an in depth beginners book for nhibernate.  Nhibernate 2.0 Beginners Guide written by Aaron Cure is just that and more.  Wow do I sound like a car salesman.  I was a little disappointed when I read Nhibernate In Action last year, because it was more of a reference than [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://blog.codehangover.com/book-review-nhibernate-2-beginners-guide/";</script><p><a style="padding: 0 10px 10px 10px; float: right" href="http://www.amazon.com/gp/product/1847198902?ie=UTF8&amp;tag=1410softwarec-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1847198902"><img src="http://img101.imageshack.us/img101/9956/nhibernate2guide.jpg" border="0" alt="" /><br />
<span style="font-size: 8pt;">Book on Amazon</span></a></p>
<p>Finally someone has written an in depth beginners book for nhibernate.  Nhibernate 2.0 Beginners Guide written by Aaron Cure is just that and more.  Wow do I sound like a car salesman.  I was a little disappointed when I read <a id="rkhb" title="Nhiberate In Action" href="../nhibernate-in-action-book-review/" target="_blank">Nhibernate In Action</a> last year, because it was more of a reference than a tutorial.  This book is definitely what the title states, which is a beginners guide.  The book contains step by step examples of how to find, setup, and use nhibernate.  I highly recommend this book to anyone wanting to learn nhibernate.  By the way I think all .netters should do just that.</p>
<p><strong>Pros</strong></p>
<ul>
<li>love the beginning paragraphs
<ul>
<li>In simple terms, NHibernate does all the database work, and we reap all the benefits! Instead of writing reams of SQL statements or creating stored procedures that &#8220;live&#8221; in a different place than our code, we can have all of our data access logic contained within our application.<br />
With a few simple &#8220;tricks&#8221; that we&#8217;ll discuss in Chapter 4, Data Cartography, not only will our queries be effective, but they will also be validated by the compiler. Therefore, if our underlying table structure changes, the compiler will alert us that we need to change our queries!</li>
</ul>
</li>
<li>starts slow, which is perfect for a &#8220;beginners&#8221; book.  lots of hand holding and explanations of basics.  this is truly meant for somehow with no experience with <a id="l6an" title="ORMs" href="http://en.wikipedia.org/wiki/Object-relational_mapping" target="_blank"><span>ORMs</span></a>.</li>
<li>clearly shows you how to use log4net!  great bonus in a nhibernate book.</li>
<li>briefly mentions all the major players in the nhibernate world, which is great for demonstrating options
<ul>
<li>Examples: fluent nhibernate, nhibernate.burrow, castle, spring <span>ioc</span>, etc.</li>
</ul>
</li>
</ul>
<p><strong>Cons</strong></p>
<ul>
<li>book uses basic <span>aspx</span> pages with custom controls in the examples.  I firmly suggest ASP.Net MVC over <span>webforms</span>.  But it may be too much to learn at one time if you aren&#8217;t familiar with either <span>nhib</span> or MVC.  So learn one first and then learn the other.  You won&#8217;t regret it.</li>
<li>most examples are in c# and vb.net.  that&#8217;s good or bad depending on your opinion of vb.net.</li>
<li>No <a id="p5oq" title="HQL" href="http://nhforge.org/doc/nh/en/index.html#queryhql" target="_blank"><span>HQL</span></a> examples.  All query examples use the Criteria class.  This isn&#8217;t totally bad especially for beginners, but <span>HQL</span> should have at least been mentioned.</li>
</ul>
<p><strong>Chapter Notes</strong></p>
<ul>
<li>chapter 1
<ul>
<li>clearly denotes which version of <span>nhib</span> the book uses and where to get it
<ul>
<li>Even explains the <span>nhib</span> release verbiage of &#8220;generally available&#8221;</li>
</ul>
</li>
<li>shows basic examples of mapping file and how it relates to <span>POCOs</span>.  Good stuff for a <a id="b6sw" title="ORM" href="http://en.wikipedia.org/wiki/Object-relational_mapping" target="_blank">ORM</a> newbie.</li>
</ul>
</li>
<li>chapter 2
<ul>
<li>good advice for designing your database in logical way that avoids data duplication.</li>
<li>clear steps to download and setup a database using sql server express
<ul>
<li>Does mention that <span>nhib</span> works in almost any database, however all the book examples use sql server express</li>
</ul>
</li>
<li>nice explanation of how tables relate to your classes</li>
<li>great introduction to <span>OTM</span>, <span>MTO</span>, <span>MTM</span>, and <span>OTO</span> relationships</li>
<li>good summary of left joins and how joins matter in queries for the different relationship types</li>
</ul>
</li>
<li>chapter 3
<ul>
<li>starts creating a simple class library application.  clear steps and good examples.</li>
<li>even addresses the somewhat hated <span>nullable</span> types and how to handle database columns that need to be mapped to types that can be null.</li>
</ul>
</li>
<li>chapter 4
<ul>
<li>nice explanation of what mapping means in terms of <a id="t.5g" title="ORM" href="http://en.wikipedia.org/wiki/Object-relational_mapping" target="_blank">ORM</a> software and how it functions as the glue that binds your objects to the database.</li>
<li>summary and examples of the most common used mapping types</li>
<li>gives examples of two mapping styles
<ul>
<li>xml
<ul>
<li>lists the two main complaints which are.. 1) too much xml 2) xml files are not compiled, so you don&#8217;t find bugs until run time.</li>
<li>provides great tip of adding the hibernate <span>XSD</span> to  your project so that visual studio will provide code completion for you and validate your mapping files.</li>
<li>important info about how to make sure the xml mapping files are compiled into your <span>dll</span></li>
</ul>
</li>
<li>fluent nhibernate
<ul>
<li>short example given that shows how using the &#8220;side&#8221; project <a href="http://fluentnhibernate.org/" target="_blank">http://fluentnhibernate.org/</a> can work without the xml mapping files.</li>
<li>pro is that mappings have to be compiled, so bugs/typos are found earlier</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>chapter 5
<ul>
<li>creates console application to test the <span>nhib</span> code</li>
<li>shows step by step how to add references to the <span>nhib</span> <span>dlls</span> that you need to download</li>
<li>good definition of what a <span>nhib</span> session is and how it relates to an actual database session</li>
</ul>
</li>
<li>chapter 6
<ul>
<li>why you should and how to use log4net with your <span>nhib</span> project</li>
<li>excellent and thorough tutorial for using log4net</li>
</ul>
</li>
<li>chapter 7
<ul>
<li><span>nhib</span> config details</li>
<li>mentions how easy it is to change databases by simply changing one config line</li>
<li>shows how to config <span>nhib</span> in an app.config or web.config</li>
</ul>
</li>
<li>chapter 8
<ul>
<li>provides example of Singleton DOA pattern</li>
<li>shows example of using a structure that holds all the column/property names for a class/entity.  this is done so that the column names in the structure can be used in criteria queries.  all this effort is done to avoid run time exceptions.  seems like a waste of time to me because you if you don&#8217;t update your structure every time your db is updated then you will still get <span>runtime</span> errors.</li>
<li>query examples using Criteria (at this point all examples have been using Criteria, none in <span>HQL</span>)</li>
</ul>
</li>
<li>chapter 9
<ul>
<li>in depth examples showing how to create custom controls to display data retrieved using nhibernate</li>
</ul>
</li>
<li>chapter 10
<ul>
<li>shows how to implement the login controls with nhibernate</li>
</ul>
</li>
<li>chapter 11
<ul>
<li>covers 11 code generation tools used to limit manual boiler plate coding.  I actually hadn&#8217;t heard of many of the ones listed.  Great bonus chapter.</li>
<li><span>nhib</span>-gen, <span>mygeneration</span>, <span>NGen</span> NHibernate Code Generator, and T4 <span>hbm</span>2net seem promising</li>
<li>these tools create everything from <span>POCOs</span> to <span>DAOs</span> to services.</li>
</ul>
</li>
</ul>
<p><img class=" zzvvvhvfecitsllxgenl zzvvvhvfecitsllxgenl zzvvvhvfecitsllxgenl zzvvvhvfecitsllxgenl zzvvvhvfecitsllxgenl zzvvvhvfecitsllxgenl zzvvvhvfecitsllxgenl zzvvvhvfecitsllxgenl zzvvvhvfecitsllxgenl zzvvvhvfecitsllxgenl" style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=1410softwarec-20&amp;l=as2&amp;o=1&amp;a=1847198902" border="0" alt="" width="1" height="1" /></p>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.codehangover.com%2Fbook-review-nhibernate-2-beginners-guide%2F&amp;title=NHibernate%202%20Beginner%26%238217%3Bs%20Guide%20%26%238211%3B%20Book%20Review" id="wpa2a_6"><img src="http://blog.codehangover.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li><a href="http://blog.codehangover.com/nhibernate-in-action-book-review/" title="NHibernate in Action &#8211; Book Review">NHibernate in Action &#8211; Book Review</a></li><li><a href="http://blog.codehangover.com/outliers-a-non-technical-book-every-freelancerdeveloper-should-read/" title="Outliers &#8211; A non technical book every freelancer/developer should read">Outliers &#8211; A non technical book every freelancer/developer should read</a></li><li><a href="http://blog.codehangover.com/configuring-nhibernate-in-a-multiple-project-layout/" title="Configuring NHibernate in a Multiple Project Layout">Configuring NHibernate in a Multiple Project Layout</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.codehangover.com/book-review-nhibernate-2-beginners-guide/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Managing Unmapped Tables with Hibernate</title>
		<link>http://blog.codehangover.com/536/</link>
		<comments>http://blog.codehangover.com/536/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 03:30:42 +0000</pubDate>
		<dc:creator>RyanStewart</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Hibernate]]></category>

		<guid isPermaLink="false">http://blog.codehangover.com/?p=536</guid>
		<description><![CDATA[It's very handy to have all your extra SQL managed by Hibernate. All you have to do is point Hibernate at a database, tell it to create your schema, and all your tables, views, stored procedures, etc. will appear.]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://blog.codehangover.com/536/";</script><p>There&#8217;s an underused feature of Hibernate that I&#8217;ve been using recently called &#8220;<a href="http://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html#mapping-database-object">auxiliary database objects</a>&#8220;. With these guys, you can finally let Hibernate manage all of your schema creation and deletion. No more using Hibernate to generate mapped tables and then coming behind with another tool to finish the job.</p>
<p>A good example of where this is useful is in the fairly common case of using Quartz for scheduling with a JDBC job store. Quartz provides a SQL script for generating its tables. Before auxiliary database objects, the most common way to get the Quartz tables into the database was to include a separate *.sql file in your build and run it using Ant&#8217;s sql task or some other SQL executor. Setting it up this way means there are two steps to either creating or dropping your schema: the Hibernate schema export and the Ant task. That ties this mechanism specifically to your build, eliminating a very useful feature of Hibernate.</p>
<p>With auxiliary database objects, you can include the Quartz create and drop scripts directly in your Hibernate mappings and have Hibernate run those scripts along with its normal schema export. Then there&#8217;s only one step to creating and dropping your schema, and more importantly, Hibernate is completely in control of the schema. This gives you the immense benefit of being able to set the SessionFactory&#8217;s &#8220;hbm2ddl.auto&#8221; property to &#8220;create&#8221; and run an in-memory database&#8211;like the awesome <a href="http://www.h2database.com/">H2 database</a>&#8211;for development and unit testing, and the schema will be generated for you on startup. This is what you lose if you have scripts outside of Hibernate.</p>
<p>Auxiliary database objects have actually been around for a few years, but it only made it into a general availability release a year and a half ago with version 3.2.6.GA. Below are a couple of simple examples on how to use them.</p>
<p>Besides Quartz tables, I&#8217;ve used auxiliary database objects to make a fake &#8220;dual&#8221; table. It&#8217;s common to use the &#8220;<code>select * from dual</code>&#8221; query on Oracle databases as a validation query for your connection pool. When you run a different database for development, like H2 or MySQL, you&#8217;ll have to manually add a dual table so that your validation queries won&#8217;t fail. Here are the two ways that you can do that using Hibernate&#8217;s auxiliary database objects:</p>
<p>First, you can embed the SQL directly in the mapping file:</p>
<pre>&lt;hibernate-mapping&gt;
    &lt;database-object&gt;
        &lt;create&gt;
            create table dual (x int);
        &lt;/create&gt;
        &lt;drop&gt;
            drop table dual;
        &lt;/drop&gt;
        &lt;dialect-scope name="org.hibernate.dialect..." /&gt;
    &lt;/database-object&gt;
&lt;/hibernate-mapping&gt;</pre>
<p>Note that you can have zero to many of the dialect-scope elements, indicating what database platforms this database object applies to. Listing zero dialects means apply to all databases.</p>
<p>The second way to do it is to implement the <a href="http://docs.jboss.org/hibernate/stable/core/api/org/hibernate/mapping/AuxiliaryDatabaseObject.html">AuxiliaryDatabaseObject</a> interface. To make it simple, use the <a href="http://docs.jboss.org/hibernate/stable/core/api/org/hibernate/mapping/AbstractAuxiliaryDatabaseObject.html">AbstractAuxiliaryDatabaseObject</a> subclass:</p>
<pre>public class SampleObject extends AbstractAuxiliaryDatabaseObject {
    public String sqlCreateString(...) {
        return "create table dual (x int)";
    }

    public String sqlDropString(...) {
        return "drop table dual";
    }
}</pre>
<p>Then you have to specify your class in your mapping file, like so:</p>
<pre>&lt;database-object&gt;
    &lt;definition class="rds.hibernate.AuxDBObjectTest" /&gt;
    &lt;dialect-scope name="org.hibernate.dialect..." /&gt;
&lt;/database-object&gt;</pre>
<p>The examples should be pretty self explanatory. Create statements are run after Hibernate&#8217;s own generated create statements, and drop statements are run after Hibernate&#8217;s generated drop statements. I&#8217;ll make one additional recommendation: while it&#8217;s technically possible to put multiple SQL statements separated by semicolons in a single create or drop block, it&#8217;s best to only put one. There are two reasons for this. First, multiple statements in a single block won&#8217;t work with Oracle, so if any of your target environments are Oracle, that&#8217;s right out. The second reason is that Hibernate runs each create and/or drop using one JDBC Statement, so if you pack 100 create statements into one create block, and one of them fails, then none of the other 99 will take affect, either. If, on the other hand, you use one statement per block, you guarantee that all statements will run, and only the ones that fail will not take effect.</p>
<p>That&#8217;s all! It&#8217;s very handy to have all your extra SQL managed by Hibernate. All you have to do is point Hibernate at a database, tell it to create your schema, and all your tables, views, stored procedures, etc. will appear.</p>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li><a href="http://blog.codehangover.com/php-framework-comparison/" title="PHP Framework Comparison">PHP Framework Comparison</a></li><li><a href="http://blog.codehangover.com/read-html-with-java-then-7-fun-things-to-do-to-it/" title="Read HTML with Java &#8211; Then 7 Fun Things to do to It">Read HTML with Java &#8211; Then 7 Fun Things to do to It</a></li><li><a href="http://blog.codehangover.com/list-of-version-control-web-sites/" title="List of Version Control Web Sites">List of Version Control Web Sites</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.codehangover.com/536/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>If You Want to Have Cities You’ve Got to Build Roads</title>
		<link>http://blog.codehangover.com/if-you-want-to-have-cities-youve-got-to-build-roads/</link>
		<comments>http://blog.codehangover.com/if-you-want-to-have-cities-youve-got-to-build-roads/#comments</comments>
		<pubDate>Sun, 13 Dec 2009 19:20:10 +0000</pubDate>
		<dc:creator>MikeNereson</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[97Things]]></category>
		<category><![CDATA[entrepreneur]]></category>
		<category><![CDATA[freelance]]></category>

		<guid isPermaLink="false">http://blog.codehangover.com/?p=530</guid>
		<description><![CDATA[I wrote this for consideration for the upcoming 97 Things Every Programmer Should Know book. I particularly like to apply this phrase in every-day software development and could easily apply it to entrepreneurship.]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://blog.codehangover.com/if-you-want-to-have-cities-youve-got-to-build-roads/";</script><p>I wrote this for consideration for the upcoming <a href="http://programmer.97things.oreilly.com/wiki/index.php/97_Things_Every_Programmer_Should_Know">97 Things Every Programmer Should Know</a> book. Alas, I didn&#8217;t submit it before the deadline. I&#8217;m OK with that that because I had another submission that I think has a good chance to make it in the book.</p>
<p>I particularly like to apply this phrase in every-day software development and could easily apply it to entrepreneurship.</p>
<blockquote><p>The city of Rome has a history of over two and a half thousand years. The city was the center of the Roman Empire and was the capital of the civilized world. It supported hundreds of thousands of inhabitants only by providing the proper foundation for the city. Its roads.</p>
<p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; font-family: Verdana, Arial, Helvetica, sans-serif; color: #222222; font-size: 11px;">The roads of the Roman city were essential for the growth of the Empire. These roads were used to move goods and services enabling its citizens to prosper. The Roman armies used these roads to defend the Roman territories and to conquer new lands. The roads provided a network for information to be gathered and disseminated. The Roman roads were critical in for its expansion. Roads were the foundation of this great city.</p>
<p>When you think of Rome, you don&#8217;t think about its roads. But what would Rome have been without its roads. How big could it have grown? How could the armies defend the Empire? The Roman roads were required for the city to thrive. The roads are not what made the city great, but were what made the city&#8217;s success a possibility.</p>
<p>Every organization has its roads and your organization is no exception. What infrastructure have you put in place to foster the growth of your business and lead to its success? Do you have any infrastructure at all? How far can your organization proceed without this infrastructure?</p>
<p>Perhaps for you this is how you communicate. Not just among your team but with your organization, with your customers, and with your community. It could be how you notify your users of new features, how your users submit bugs, or how your managers communicate deadlines.</p>
<p>Maybe its not communication but your product management. From your code repositories and automated build processes to your deployment and monitoring suites. These might be the factors that contribute to the ultimate success of your organization. Without the proper infrastructure in place the city will fail or cease to grow. Without the roads Rome could not prosper and without a strong foundation your organization will fail or hit a wall.</p>
<p>If your users can not submit bugs they will be forced to use your product day after day with known issues. They will become frustrated and find alternative software. If your organization can not communicate its goals and strategies with you then you can not support your organization and so it will fail.</p>
<p>Find out what it is the supports your organization and fortify it. Be aware of its presence and its importance.</p>
<p>With that said, also consider this: the Roman&#8217;s roads played an important part in the Roman military defeat by offering avenues of invasion to the barbarians.</p></blockquote>
<p>From <a href="http://programmer.97things.oreilly.com/wiki/index.php/If_You_Want_to_Have_Cities_You've_Got_to_Build_Roads">If You Want to Have Cities You&#8217;ve Got to Build Roads</a></p>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li><a href="http://blog.codehangover.com/outliers-a-non-technical-book-every-freelancerdeveloper-should-read/" title="Outliers &#8211; A non technical book every freelancer/developer should read">Outliers &#8211; A non technical book every freelancer/developer should read</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.codehangover.com/if-you-want-to-have-cities-youve-got-to-build-roads/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Outliers – A non technical book every freelancer/developer should read</title>
		<link>http://blog.codehangover.com/outliers-a-non-technical-book-every-freelancerdeveloper-should-read/</link>
		<comments>http://blog.codehangover.com/outliers-a-non-technical-book-every-freelancerdeveloper-should-read/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 06:40:59 +0000</pubDate>
		<dc:creator>Welzie</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[book review]]></category>
		<category><![CDATA[freelance]]></category>

		<guid isPermaLink="false">http://blog.codehangover.com/?p=508</guid>
		<description><![CDATA[Review of the book Outliers "The Story of Success" by Malcolm Gladwell.  The book is NOT a 12 steps to success type book. Gladwell presents the theory that success is not a trait or a gene that only some people have.  Also comments about how these ideas relate to software development.]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://blog.codehangover.com/outliers-a-non-technical-book-every-freelancerdeveloper-should-read/";</script><p><a style="float: right" href="http://www.amazon.com/gp/product/0316017922?ie=UTF8&#038;tag=1410softwarec-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0316017922"><img border="0" src="http://img709.imageshack.us/img709/2888/outliers.gif"><span style="font-size: small;"><br />
<span style="font-size: 8pt;">Book on Amazon</span></a></p>
<p><a href="http://www.amazon.com/gp/product/0316017922?ie=UTF8&#038;tag=1410softwarec-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0316017922">Outliers &#8220;The Story of Success&#8221;</a> by Malcolm Gladwell is a popular book.  I heard about the book in a freelance discussion group at a developer conference.  I quickly ordered a used copy from Amazon.  It&#8217;s popularity became very apparent when multiple people, that saw me reading it in an airport terminal, asked if it was any good because they had heard it was.  My answer is yes.  The book has been reviewed many times (795 on amazon alone) so to avoid duplicate statements I will give my brief summation along with my comments about how the theories in the book apply to software development.  If you have read the book please comment with your thoughts.  If not I suggest you do because it&#8217;s a quick, thought provoking read.</p>
<p>
<span style="font-weight: bold">Summary:</span>  The book is NOT a 12 steps to success type book, I really hate those books.  Gladwell presents the theory that success is not a trait or a gene that only some people have.  Gladwell proposes that there are no simple rags to riches stories where a person builds an empire solely on their own.  With scientific studies and research to back up the theories Gladwell explores how opportunities and advantages provide the gateway to success.
</p>
<ul>
<li>10,000 hours (very popular topic from the book)</li>
<ul>
<li>No one succeeds without many, many hours of preparation.  No one.</li>
<li>Examples from <a target="_blank" href="http://en.wikipedia.org/wiki/Bill_Joy">Bill Joy</a>(co founded Sun) to The Beatles are given.</li>
<li>My thoughts: Turn off the xbox360 and the TV and learn a new language, framework, or pattern.  Then repeat.</li>
</ul>
<li>Luck</li>
<ul>
<li>Some people that prepare will be rewarded with incredibly rare opportunities.</li>
<li>My favorite example in the book is a list of the richest people ever.  A large number were from a 10 year period in the mid 1800&#8217;s.  That time period gave a few lucky individuals the opportunity to become tycoons because of culminating economic and technical advances.</li>
<li>My thoughts: So if you are not lucky enough to be learning the types of technical skills that will benefit you, then take it upon yourself to make your own luck and find a position that will.</li>
</ul>
<li>IQ is not all you need</li>
<ul>
<li>The book covers in depth the story of Chris Langan who has an IQ of 195, but has never attained a college degree or high profile professional career.</li>
<li>My thoughts: To succeed in software development you need communication skills, imagination, and technical skills(IQ).  You need to know how to inform/educate non technical people and how to debate effectively with colleagues.</li>
</ul>
<li>It takes a village</li>
<ul>
<li>No body makes it alone.  We all need support from family, friends, and colleagues.</li>
<li>Every freelance book or article I read says to have a partner.</li>
</ul>
<li>Love what you do</li>
<ul>
<li>Great quote from the book: &#8220;Hard work is a prison sentence only if it has no meaning&#8221;</li>
<li>My thoughts: You know if you love your job or not.  Stop thinking about finding a satisfying job.  Update your resume and go find a job you will love.  It won&#8217;t find you, unless you are one of those really lucky people the book mentions.</li>
</ul>
</ul>
<p>Another excellent review of Outliers: <a target="_blank" href="http://www.markhneedham.com/blog/2009/01/06/outliers-book-review/">http://www.markhneedham.com/blog/2009/01/06/outliers-book-review/</a></p>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li><a href="http://blog.codehangover.com/book-review-nhibernate-2-beginners-guide/" title="NHibernate 2 Beginner&#8217;s Guide &#8211; Book Review">NHibernate 2 Beginner&#8217;s Guide &#8211; Book Review</a></li><li><a href="http://blog.codehangover.com/if-you-want-to-have-cities-youve-got-to-build-roads/" title="If You Want to Have Cities You&#8217;ve Got to Build Roads">If You Want to Have Cities You&#8217;ve Got to Build Roads</a></li><li><a href="http://blog.codehangover.com/nhibernate-in-action-book-review/" title="NHibernate in Action &#8211; Book Review">NHibernate in Action &#8211; Book Review</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.codehangover.com/outliers-a-non-technical-book-every-freelancerdeveloper-should-read/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Software Review: ForeUI Prototyping Tool</title>
		<link>http://blog.codehangover.com/foreui-review/</link>
		<comments>http://blog.codehangover.com/foreui-review/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 18:55:53 +0000</pubDate>
		<dc:creator>AdamHorky</dc:creator>
				<category><![CDATA[Software Tools]]></category>
		<category><![CDATA[balsamiq]]></category>
		<category><![CDATA[foreui]]></category>
		<category><![CDATA[mockup]]></category>
		<category><![CDATA[prototype]]></category>

		<guid isPermaLink="false">http://blog.codehangover.com/?p=502</guid>
		<description><![CDATA[I was looking for a good prototyping tool the other day and I came across ForeUI. This little gem packs quite a punch. Whether you want to create mockups of a desktop application or a web application, ForeUI has everything you need. A six minute demo of the application can be found here. ForeUI is available for Windows, Mac, Linux, or Solaris.]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://blog.codehangover.com/foreui-review/";</script><p>I was looking for a good prototyping tool the other day and I came across <a id="hh:e" title="ForeUI" href="http://www.foreui.com/">ForeUI</a>. This little gem packs quite a punch. Whether you want to create mockups of a desktop application or a web application, ForeUI has everything you need. A <a title="demo" href="http://www.foreui.com/demos/demo11/" target="_blank">six minute demo</a> of the application is available<a id="qpdh" title="here" href="http://www.foreui.com/demos/demo11/"></a>. ForeUI is available for Windows, Mac, Linux, or Solaris.</p>
<p>The canvas where all the work is done is called a plot. Each plot can have 1 or more pages of mockups, similar to Microsoft Excel workbooks. To assist with prototyping of cross-platform applications, the mockups can be drawn in four different modes &#8211; Hand Drawing, Wire Frame, Windows XP, and Mac OS X. The canvas width and height can be adjusted and can even be made to look like wrinkled paper for that real hand-drawn prototype look.</p>
<p>Just about anything your imagination can come up with, can be mocked up. The palette comes with over 40 widgets and whatnots that can be used to mockup anything from a simple windows application to a complicated web site. Frequently used mockups such as dialogs and navigation panes can be saved as custom widgets in the palette. Go check out some <a title="tour" href="http://www.foreui.com/tour.htm" target="_blank">screenshots and samples</a> of the software in action<a id="zg:7" title="here" href="http://www.foreui.com/screenshot/screenshot4.png"></a>. Anything placed on the canvas can have an action associated with it. This allows for the creation of an interactive mockup that can be used to simulate what the application will do in a real environment.</p>
<p>Plots can be exported as an image, PDF, or DHTML. A plot can be ran as a slideshow. In slideshow mode, the mockup can be marked up with a red pen. This mode is good for demonstrations and team discussions. Plots can also be run in a simulation mode. In simulation mode, a new window is opened in the default web browser. If any actions were setup for the mockup, such as clicking buttons and activating menus, those things can be interacted with in the browser window.</p>
<p>At $79 for a single user license, ForeUI is a great deal. There are also pricing plans for multiple users. A <a title="trial" href="http://www.foreui.com/download.htm" target="_blank">7 day trial</a> can be downloaded for evaluation.</p>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li><a href="http://blog.codehangover.com/php-framework-comparison/" title="PHP Framework Comparison">PHP Framework Comparison</a></li><li><a href="http://blog.codehangover.com/read-html-with-java-then-7-fun-things-to-do-to-it/" title="Read HTML with Java &#8211; Then 7 Fun Things to do to It">Read HTML with Java &#8211; Then 7 Fun Things to do to It</a></li><li><a href="http://blog.codehangover.com/list-of-version-control-web-sites/" title="List of Version Control Web Sites">List of Version Control Web Sites</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.codehangover.com/foreui-review/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Strange Loop 2009 – Day 2</title>
		<link>http://blog.codehangover.com/strange-loop-2009-day-2/</link>
		<comments>http://blog.codehangover.com/strange-loop-2009-day-2/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 23:09:53 +0000</pubDate>
		<dc:creator>Welzie</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[polyglot]]></category>
		<category><![CDATA[strange loop]]></category>

		<guid isPermaLink="false">http://blog.codehangover.com/?p=482</guid>
		<description><![CDATA[My notes and thoughts about day two of strange loop 2009.]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://blog.codehangover.com/strange-loop-2009-day-2/";</script><p>My notes and thoughts about day two of <a href="http://thestrangeloop.com/">strange loop 2009</a>.</p>
<p>Also be sure to check out my <a href="http://blog.codehangover.com/strange-loop-2009-day-1/">Day one notes.</a></p>
<h4>jQuery &#8211; Matt Taylor</h4>
<ul>
<li><a href="http://weblog.dangertree.net/">http://weblog.dangertree.net/</a></li>
<li>Showed numerous examples how easy jQuery makes it to select and edit HTML elements. Made me realize I should use jQuery even in small apps.</li>
<li>Also showed examples of the jQuery AJAX functionality</li>
</ul>
<h4>Mobile Development 101</h4>
<ul>
<li><a href="http://www.slideshare.net/michael.galpin">http://www.slideshare.net/michael.galpin</a></li>
<li><a href="http://fupeg.blogspot.com/">http://fupeg.blogspot.com/</a></li>
<li>This session was full which doesn&#8217;t surprise me since mobile development is about to get easier thanks to Android.</li>
<li>Started off going how to develop apps for the iPhone
<ul>
<li>The emulator and development software only run on a Mac</li>
<li>Has to be written in Objective C
<ul>
<li>I wanted to throw up when I saw the <a href="http://en.wikipedia.org/wiki/Objective-C">objective c</a> examples</li>
<li>No garbage collection. Memory is limited on phones so this is an important issue.</li>
<li>Maybe I&#8217;m just to much of a simpleton, but I really don&#8217;t ever want to write any objective C</li>
</ul>
</li>
<li>MVC framework &#8211; cocoa touch</li>
<li>No background processing on iphone</li>
</ul>
</li>
<li>Android
<ul>
<li>Can run any language that is built on the JVM</li>
<li>XML format for UI develoment</li>
<li>Does not use standard MVC pattern.  Uses something called <a href="http://developer.android.com/guide/topics/fundamentals.html#acttask">Activities </a>and <a href="http://developer.android.com/guide/topics/fundamentals.html#ifilters">Intents</a>.</li>
<li>There are multiple android emulators</li>
</ul>
</li>
<li>Mobile dev best practices (not specific to android or iphone)
<ul>
<li>Need lean web services</li>
<li>Limit network traffic</li>
<li>Limit audio/video/images</li>
</ul>
</li>
<li>Mobile Web Application
<ul>
<li>Alternative to writing an iPhone/Android app</li>
<li>A lot of phones have the same browser now</li>
<li>Some mobile browsers leak memory</li>
</ul>
</li>
</ul>
<h4>Entrepreneur Talk &#8211; Panel Discussion</h4>
<ul>
<li>This book was mentioned, <a href="http://www.amazon.com/gp/product/0316017922?ie=UTF8&#038;tag=1410softwarec-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0316017922">Outliers: The Story of Success</a> </li>
<li>Someone said that you need irrational arrogance to start your own company.</li>
<li>Another person said that start ups are all offense and no defense.  Just keep putting stuff out, early and often</li>
<li>The idea was presented that everyone has risk even the person working for a company because you can be fired at any time</li>
<li>The current work culture is sort of like having one client at a time because developers change jobs so often.</li>
</ul>
<h4>Polyglot Grails &#8211; Jeff Brown</h4>
<ul>
<li><a href="http://www.nofluffjuststuff.com/conference/speaker/jeff_brown">http://www.nofluffjuststuff.com/conference/speaker/jeff_brown</a></li>
<li><a href="http://javajeff.blogspot.com/">http://javajeff.blogspot.com/</a></li>
<li>You can use many languages with Grails.  Jeff even gave an example of Grails with a simple language he created</li>
<li>methodMissing(string name, args) is a very interesting feature of Groovy</li>
</ul>
<h4>Minimalism &#8211; Alex Payne</h4>
<ul>
<li><a href="http://twitter.com/Al3X">http://twitter.com/Al3X</a></li>
<li><a>http://al3x.net/books_talks.html</a></li>
<li>Interesting talk about little m minimalism and how it be applied to code</li>
<li>Alex made a few comments about how programming is a young field</li>
</ul>
<p><a href="http://thestrangeloop.com/sessions/slides">List of slides on strangeloop.com</a><br />
<a href="http://thestrangeloop.com/sessions">Day two sessions<br />
<img style="border: none;" src="http://img18.imageshack.us/img18/6359/strangeloop2.gif" alt="" /></a></p>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li><a href="http://blog.codehangover.com/strange-loop-2009-day-1/" title="Strange Loop 2009 &#8211; Day 1">Strange Loop 2009 &#8211; Day 1</a></li><li><a href="http://blog.codehangover.com/strange-loop-2010-early-bird-registration/" title="Strange Loop 2010 &#8211; Early Bird Registration">Strange Loop 2010 &#8211; Early Bird Registration</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.codehangover.com/strange-loop-2009-day-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Strange Loop 2009 – Day 1</title>
		<link>http://blog.codehangover.com/strange-loop-2009-day-1/</link>
		<comments>http://blog.codehangover.com/strange-loop-2009-day-1/#comments</comments>
		<pubDate>Sat, 24 Oct 2009 05:27:56 +0000</pubDate>
		<dc:creator>Welzie</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[polyglot]]></category>
		<category><![CDATA[strange loop]]></category>

		<guid isPermaLink="false">http://blog.codehangover.com/?p=463</guid>
		<description><![CDATA[Below are my overall topics/themes I took away from the conference and some interesting points from each talk I witnessed along with links to the speaker’s site and slide show if availabe.]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://blog.codehangover.com/strange-loop-2009-day-1/";</script><p>A new developer conference has started in St Louis this year named <a href="http://thestrangeloop.com/" target="_blank">Strange Loop</a>.  Normally I don&#8217;t go to developer conferences because they are either in a different country or on the coasts.  This one was close by in St Louis, MO.  And from the quality of speakers and diverse sessions I predict next years conference will sell out very quickly unless they increase the capacity.  Below are my overall topics/themes I took away from the conference and some interesting points from each talk I witnessed along with links to the speaker&#8217;s site and slide show if available.<br />
<br/><br />
<a href="http://blog.codehangover.com/strange-loop-2009-day-2/">Day two</a></p>
<h4>Strange Loop Thoughts Overall</h4>
<ul>
<li>open source, open source, open source</li>
<ul>
<li>every talk envolved open source.  The FUD around open source is finally withering away.</li>
</ul>
<li>DRY constant theme</li>
<li>Mobile development is upon us and will be for maybe ever</li>
<li>Scala, Clojure, Groovy are HOT languages on the JVM</li>
<li>Great conference that covered many relevant topics</li>
<li>All the talks were technical, no boring management oriented sales pitches</li>
</ul>
<h4>Functional Ruby &#8211; Dean Wampler</h4>
<ul>
<li><a href="http://deanwampler.com/" target="_blank">http://deanwampler.com/</a></li>
<li><a href="http://polyglotprogramming.com/papers">Link to slide show</a></li>
<li>I atteneded this talk because I&#8217;m interested in the functional programming line of thought.  And I don&#8217;t get to see much ruby code.</li>
<li>Recommends learning a functiona programming language: Scala, Hascal, Cojure</li>
<ul>
<li>Multiprocessor systems are making it more important to use threads.  Threads and synchronizaton is hard to get right.  So functional languages that have immutable objects/values are easier because immutable objects/values don&#8217;t require synchronization.</li>
</ul>
<li>Try to avoid a bloated domain objects that have numerous properties to fullfill multiple requirements for different use cases.  Have smaller objects for seperate uses.</li>
</ul>
<h4>Polyglot Programming &#8211; Dean Wampler</h4>
<ul>
<li><a href="http://polyglotprogramming.com/papers">Link to slide show</a></li>
<li>polyglot programming: using more than one programming language.  Not like using CSS, JS.  But like using Groovy and Java or Groovy and Clojure.</li>
<li>Dean thinks that Scala could become very popular in the future</li>
<ul>
<li>Hybrid object and functional language</li>
<li>Multiple cpus is driving the need for functional languages</li>
</ul>
<li>Mentioned the famous quote: &#8220;Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.&#8221;<br />
&#8211;  Antoine de Saint-Exuper</li>
</ul>
<h4>Griffon (Swing just got fun again) &#8211; James Williams</h4>
<ul>
<li><a href="http://jameswilliams.be/blog/entry/index">http://jameswilliams.be/blog/entry/index</a></li>
<li><a href="http://groovy.codehaus.org/Griffon">http://groovy.codehaus.org/Griffon</a></li>
<li>Mentioned that the swring application framework is dead</li>
<li>Griffon is the unofficial grails for the desktop</li>
<ul>
<li>It really did looks rails like from the project layout to the build process</li>
</ul>
<li>Suggested Groovy In Action for anyone that wanted to earn Groovy</li>
</ul>
<h4>Future of Java &#8211; Bob Lee</h4>
<ul>
<li><a href="http://crazybob.org">http://crazybob.org</a></li>
<li>Writes his talks in Java. I&#8217;m serious.  Here is the SVN repo for his talks
<ul>
<li><a href="http://crazybobs-talks.googlecode.com/svn/trunk/">http://crazybobs-talks.googlecode.com/svn/trunk/</a></li>
</ul>
</li>
<li>Talked about how/why he wanted better resource management in Java.</li>
<li>Said he searched the JDK and found that 74 out of 110 the JDK has leaks for a certain IO functionality.</li>
<li>Talked about his work on JSR-330 dependency injection in JDK
<ul>
<li>@Inject annotation</li>
</ul>
</li>
<li>New quicksort that was developed for Android JVM (Harmony)</li>
</ul>
<p><br/><br />
<a href="http://blog.codehangover.com/strange-loop-2009-day-2/">Day two</a><br />
<br/><br />
<a href="http://thestrangeloop.com/sessions">Day One Sessions<img style="border: none;" src="http://img16.imageshack.us/img16/1298/strangeloop1.gif" alt="" /></a></ul>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li><a href="http://blog.codehangover.com/strange-loop-2009-day-2/" title="Strange Loop 2009 &#8211; Day 2">Strange Loop 2009 &#8211; Day 2</a></li><li><a href="http://blog.codehangover.com/strange-loop-2010-early-bird-registration/" title="Strange Loop 2010 &#8211; Early Bird Registration">Strange Loop 2010 &#8211; Early Bird Registration</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.codehangover.com/strange-loop-2009-day-1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

