<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">Bruce Grant's Tech Blog</title>
  <subtitle type="html">
   Bruce Grant's technical blog
  </subtitle>
  <updated>2010-03-16T18:56:21Z</updated>
  <id>http://www.bxgrant.com/blog/1</id>
  <link rel="alternate" type="text/html" hreflang="en" href="http://www.bxgrant.com/blog/1"/>
  <link rel="self" type="application/atom+xml" href="http://www.bxgrant.com/blog/1/atom"/>
  <icon>http://www.bxgrant.com/static/images/BxLaf/logo.png</icon>
  <rights>Copyright (c) www.bxgrant.com</rights>
  <generator uri="http://www.bxgrant.com" version="1.0">
     BX Blog Engine 1.0
  </generator>
  <entry>
    <title>Building a Jar  and Including Classes from Dependencies using Maven</title>
    <link rel="alternate" type="text/html" href="http://www.bxgrant.com/entry/88"/>
    <id>http://www.bxgrant.com/entry/88</id>
    <updated>2010-02-24T14:49:30Z</updated>
    <published>2010-02-24T11:09:08-07:00</published>
    <author>
      <name>Bruce Grant</name>
      <uri>http://www.bxgrant.com/blog/1</uri>
    </author>
    
    

    <content type="html" xml:lang="en" xml:base="http://www.bxgrant.com/blog/1">
      &lt;div class=&quot;bxWikiDocBody&quot;&gt;I finally figured out how to build a jar file using Maven that will include the class files from dependent jars in the resulting jar I build.&lt;br /&gt;
&lt;br /&gt;
There's a Maven plugin named shade that will include all the classes from all dependent jar files by default.&lt;br /&gt;
&lt;br /&gt;
Here's my pom.xml file that makes it happen.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bxWikiCalloutCode&quot;&gt;&lt;div class=&quot;codeBody&quot;&gt;&lt;div class=&quot;calloutText&quot; style=&quot;&quot;&gt;&lt;a name=&quot;shade&quot; name=&quot;pom.xml1Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;&amp;nbsp;1&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml1&quot;&gt;&amp;lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; &lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml2Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;&amp;nbsp;2&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml2&quot;&gt;xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml3Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;&amp;nbsp;3&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml3&quot;&gt;  xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 &lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml4Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;&amp;nbsp;4&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml4&quot;&gt;             http://maven.apache.org/maven-v4_0_0.xsd&quot;&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml5Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;&amp;nbsp;5&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml5&quot;&gt;  &amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml6Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;&amp;nbsp;6&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml6&quot;&gt;  &amp;lt;groupId&amp;gt;mygroupname&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml7Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;&amp;nbsp;7&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml7&quot;&gt;  &amp;lt;artifactId&amp;gt;myartifactname&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml8Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;&amp;nbsp;8&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml8&quot;&gt;  &amp;lt;version&amp;gt;1.0&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml9Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;&amp;nbsp;9&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml9&quot;&gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml10Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;10&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml10&quot;&gt;  &amp;lt;properties&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml11Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;11&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml11&quot;&gt;    &amp;lt;final.jar.name&amp;gt;myjarfilename&amp;lt;/final.jar.name&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml12Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;12&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml12&quot;&gt;  &amp;lt;/properties&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml13Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;13&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml13&quot;&gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml14Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;14&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml14&quot;&gt;  &amp;lt;build&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml15Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;15&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml15&quot;&gt;    &amp;lt;plugins&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml16Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;16&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml16&quot;&gt;      &amp;lt;plugin&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml17Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;17&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml17&quot;&gt;        &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml18Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;18&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml18&quot;&gt;        &amp;lt;artifactId&amp;gt;maven-shade-plugin&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml19Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;19&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml19&quot;&gt;        &amp;lt;version&amp;gt;1.3.1&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml20Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;20&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml20&quot;&gt;        &amp;lt;executions&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml21Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;21&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml21&quot;&gt;          &amp;lt;execution&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml22Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;22&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml22&quot;&gt;            &amp;lt;phase&amp;gt;package&amp;lt;/phase&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml23Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;23&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml23&quot;&gt;            &amp;lt;goals&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml24Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;24&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml24&quot;&gt;              &amp;lt;goal&amp;gt;shade&amp;lt;/goal&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml25Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;25&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml25&quot;&gt;            &amp;lt;/goals&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml26Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;26&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml26&quot;&gt;            &amp;lt;configuration&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml27Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;27&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml27&quot;&gt;              &amp;lt;finalName&amp;gt;${final.jar.name}&amp;lt;/finalName&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml28Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;28&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml28&quot;&gt;              &amp;lt;artifactSet&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml29Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;29&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml29&quot;&gt;                &amp;lt;excludes&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml30Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;30&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml30&quot;&gt;                  &amp;lt;exclude&amp;gt;server.policy&amp;lt;/exclude&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml31Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;31&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml31&quot;&gt;                &amp;lt;/excludes&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml32Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;32&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml32&quot;&gt;              &amp;lt;/artifactSet&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml33Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;33&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml33&quot;&gt;            &amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml34Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;34&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml34&quot;&gt;          &amp;lt;/execution&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml35Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;35&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml35&quot;&gt;        &amp;lt;/executions&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml36Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;36&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml36&quot;&gt;      &amp;lt;/plugin&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml37Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;37&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml37&quot;&gt;    &amp;lt;/plugins&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml38Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;38&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml38&quot;&gt;  &amp;lt;/build&amp;gt;&lt;/span&gt;
&lt;a name=&quot;shade&quot; name=&quot;pom.xml39Link&quot; /&gt;&lt;span class=&quot;rowNum&quot;&gt;39&lt;/span&gt;&lt;span id=&quot;shade&quot; name=&quot;pom.xml39&quot;&gt;&amp;lt;/project&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div id=&quot;shade&quot; name=&quot;pom.xmlCopy&quot; style=&quot;display:none&quot;&gt;&amp;lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; 
xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
  xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 
             http://maven.apache.org/maven-v4_0_0.xsd&quot;&amp;gt;
  &amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;
  &amp;lt;groupId&amp;gt;mygroupname&amp;lt;/groupId&amp;gt;
  &amp;lt;artifactId&amp;gt;myartifactname&amp;lt;/artifactId&amp;gt;
  &amp;lt;version&amp;gt;1.0&amp;lt;/version&amp;gt;

  &amp;lt;properties&amp;gt;
    &amp;lt;final.jar.name&amp;gt;myjarfilename&amp;lt;/final.jar.name&amp;gt;
  &amp;lt;/properties&amp;gt;

  &amp;lt;build&amp;gt;
    &amp;lt;plugins&amp;gt;
      &amp;lt;plugin&amp;gt;
        &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;
        &amp;lt;artifactId&amp;gt;maven-shade-plugin&amp;lt;/artifactId&amp;gt;
        &amp;lt;version&amp;gt;1.3.1&amp;lt;/version&amp;gt;
        &amp;lt;executions&amp;gt;
          &amp;lt;execution&amp;gt;
            &amp;lt;phase&amp;gt;package&amp;lt;/phase&amp;gt;
            &amp;lt;goals&amp;gt;
              &amp;lt;goal&amp;gt;shade&amp;lt;/goal&amp;gt;
            &amp;lt;/goals&amp;gt;
            &amp;lt;configuration&amp;gt;
              &amp;lt;finalName&amp;gt;${final.jar.name}&amp;lt;/finalName&amp;gt;
              &amp;lt;artifactSet&amp;gt;
                &amp;lt;excludes&amp;gt;
                  &amp;lt;exclude&amp;gt;server.policy&amp;lt;/exclude&amp;gt;
                &amp;lt;/excludes&amp;gt;
              &amp;lt;/artifactSet&amp;gt;
            &amp;lt;/configuration&amp;gt;
          &amp;lt;/execution&amp;gt;
        &amp;lt;/executions&amp;gt;
      &amp;lt;/plugin&amp;gt;
    &amp;lt;/plugins&amp;gt;
  &amp;lt;/build&amp;gt;
&amp;lt;/project&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;copyCalloutCode&quot;&gt;&lt;a href=&quot;javascript:BxUtil.copyToClipboard('shade&quot; name=&quot;pom.xmlCopy')&quot; style=&quot;color:#21206b&quot;&gt;Copy&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;clear:both&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;clear:both&quot;&gt;&lt;/div&gt;&lt;script type=&quot;text/javascript&quot;&gt;var _shade&quot; name=&quot;pom.xmlRow;&lt;/script&gt;&lt;/div&gt; 	      &lt;p&gt;&lt;b&gt;Tags: &lt;/b&gt; 
	  	    &lt;a href=&quot;/tag/1/java&quot; rel=&quot;tag&quot;&gt;java&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/Maven&quot; rel=&quot;tag&quot;&gt;Maven&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/jar&quot; rel=&quot;tag&quot;&gt;jar&lt;/a&gt;      
	      &lt;/p&gt;

    </content>
  </entry>
  <entry>
    <title>Old World and New World Web Apps</title>
    <link rel="alternate" type="text/html" href="http://www.bxgrant.com/entry/87"/>
    <id>http://www.bxgrant.com/entry/87</id>
    <updated>2010-02-18T13:12:04Z</updated>
    <published>2010-02-18T10:18:43-07:00</published>
    <author>
      <name>Bruce Grant</name>
      <uri>http://www.bxgrant.com/blog/1</uri>
    </author>
    
    

    <content type="html" xml:lang="en" xml:base="http://www.bxgrant.com/blog/1">
      &lt;div class=&quot;bxWikiDocBody&quot;&gt;A veritable cornucopia of web application approaches and frameworks, some old school and some new school, confuse even the most experienced.  This article attempts to delineate the most popular of the approaches and the reasons why one would adopt one over another for a project.&lt;/div&gt; 	      &lt;p&gt;&lt;b&gt;Tags: &lt;/b&gt; 
	  	    &lt;a href=&quot;/tag/1/java&quot; rel=&quot;tag&quot;&gt;java&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/web+application&quot; rel=&quot;tag&quot;&gt;web application&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/python&quot; rel=&quot;tag&quot;&gt;python&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/ruby&quot; rel=&quot;tag&quot;&gt;ruby&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/MS+ASP&quot; rel=&quot;tag&quot;&gt;MS ASP&lt;/a&gt;      
	      &lt;/p&gt;

    </content>
  </entry>
  <entry>
    <title>Adopting JPA, JSF and JBoss Richfaces</title>
    <link rel="alternate" type="text/html" href="http://www.bxgrant.com/entry/86"/>
    <id>http://www.bxgrant.com/entry/86</id>
    <updated>2010-02-17T14:26:25Z</updated>
    <published>2010-02-13T09:25:30-07:00</published>
    <author>
      <name>Bruce Grant</name>
      <uri>http://www.bxgrant.com/blog/1</uri>
    </author>
    
    

    <content type="html" xml:lang="en" xml:base="http://www.bxgrant.com/blog/1">
      &lt;div class=&quot;bxWikiDocBody&quot;&gt;It's time to move bxgrant.com forward in time with JPA, JSF and JBoss Rich Faces.  This article explains how I've begun the effort by migrating to JPA from iBatis and highlites the benefit of clean, simple, enterprise architectures which make doing this piece-meal update possible.  Look for future articles on JSF and Richfaces&lt;/div&gt; 	      &lt;p&gt;&lt;b&gt;Tags: &lt;/b&gt; 
	  	    &lt;a href=&quot;/tag/1/ORM&quot; rel=&quot;tag&quot;&gt;ORM&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/JPA&quot; rel=&quot;tag&quot;&gt;JPA&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/Richfaces&quot; rel=&quot;tag&quot;&gt;Richfaces&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/JSF&quot; rel=&quot;tag&quot;&gt;JSF&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/Open+JPA&quot; rel=&quot;tag&quot;&gt;Open JPA&lt;/a&gt;      
	      &lt;/p&gt;

    </content>
  </entry>
  <entry>
    <title>Simplified Enterprise Java Web Site</title>
    <link rel="alternate" type="text/html" href="http://www.bxgrant.com/entry/85"/>
    <id>http://www.bxgrant.com/entry/85</id>
    <updated>2010-02-17T14:24:26Z</updated>
    <published>2010-01-18T18:02:02-07:00</published>
    <author>
      <name>Bruce Grant</name>
      <uri>http://www.bxgrant.com/blog/1</uri>
    </author>
    
    

    <content type="html" xml:lang="en" xml:base="http://www.bxgrant.com/blog/1">
      &lt;div class=&quot;bxWikiDocBody&quot;&gt;I've been meaning for years to document how I created my web site using enterprise Java tools and design patters but still kept things simple and fast to develop.  This article describes the approach I've taken to solving common problems of persistence, separation of cross-cutting concerns, scalability and UI.&lt;/div&gt; 	      &lt;p&gt;&lt;b&gt;Tags: &lt;/b&gt; 
	  	    &lt;a href=&quot;/tag/1/java&quot; rel=&quot;tag&quot;&gt;java&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/application+server&quot; rel=&quot;tag&quot;&gt;application server&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/architecture&quot; rel=&quot;tag&quot;&gt;architecture&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/web+site&quot; rel=&quot;tag&quot;&gt;web site&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/database&quot; rel=&quot;tag&quot;&gt;database&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/ORM&quot; rel=&quot;tag&quot;&gt;ORM&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/DAO&quot; rel=&quot;tag&quot;&gt;DAO&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/Spring&quot; rel=&quot;tag&quot;&gt;Spring&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/iBatis&quot; rel=&quot;tag&quot;&gt;iBatis&lt;/a&gt;      
	      &lt;/p&gt;

    </content>
  </entry>
  <entry>
    <title>Java UI Frameworks</title>
    <link rel="alternate" type="text/html" href="http://www.bxgrant.com/entry/84"/>
    <id>http://www.bxgrant.com/entry/84</id>
    <updated>2010-02-11T14:10:14Z</updated>
    <published>2010-01-02T12:03:27-07:00</published>
    <author>
      <name>Bruce Grant</name>
      <uri>http://www.bxgrant.com/blog/1</uri>
    </author>
    
    

    <content type="html" xml:lang="en" xml:base="http://www.bxgrant.com/blog/1">
      &lt;div class=&quot;bxWikiDocBody&quot;&gt;This article provides a high-level review of three  Java UI frameworks I've used and explains the basic approach, positive and negative qualities of each - Apache Tapestry, Apache Velocity and Sun Java Server Faces.&lt;/div&gt; 	      &lt;p&gt;&lt;b&gt;Tags: &lt;/b&gt; 
	  	    &lt;a href=&quot;/tag/1/java&quot; rel=&quot;tag&quot;&gt;java&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/UI+Framework&quot; rel=&quot;tag&quot;&gt;UI Framework&lt;/a&gt;      
	      &lt;/p&gt;

    </content>
  </entry>
  <entry>
    <title>The Last Mile of Software Delivery</title>
    <link rel="alternate" type="text/html" href="http://www.bxgrant.com/entry/51"/>
    <id>http://www.bxgrant.com/entry/51</id>
    <updated>2009-11-08T10:19:39Z</updated>
    <published>2009-11-08T09:40:47-07:00</published>
    <author>
      <name>Bruce Grant</name>
      <uri>http://www.bxgrant.com/blog/1</uri>
    </author>
    
    

    <content type="html" xml:lang="en" xml:base="http://www.bxgrant.com/blog/1">
      &lt;div class=&quot;bxWikiDocBody&quot;&gt;This article delineates the many tasks necessary for releasing a high-quality software product that are often overlooked during software planning phases.&lt;/div&gt; 	      &lt;p&gt;&lt;b&gt;Tags: &lt;/b&gt; 
	  	    &lt;a href=&quot;/tag/1/software+methodology&quot; rel=&quot;tag&quot;&gt;software methodology&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/process+engineering&quot; rel=&quot;tag&quot;&gt;process engineering&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/software+development&quot; rel=&quot;tag&quot;&gt;software development&lt;/a&gt;      
	      &lt;/p&gt;

    </content>
  </entry>
  <entry>
    <title>Adding Discipline to Scripting Languages</title>
    <link rel="alternate" type="text/html" href="http://www.bxgrant.com/entry/17"/>
    <id>http://www.bxgrant.com/entry/17</id>
    <updated>2009-03-13T22:28:49Z</updated>
    <published>2009-03-13T17:10:22-07:00</published>
    <author>
      <name>Bruce Grant</name>
      <uri>http://www.bxgrant.com/blog/1</uri>
    </author>
    
    

    <content type="html" xml:lang="en" xml:base="http://www.bxgrant.com/blog/1">
      &lt;div class=&quot;bxWikiDocBody&quot;&gt;The power, flexibility and development velocity of modern scripting languages makes them attractive to software engineering managers everywhere.  If your project only lives a few years then very little if any discipline is really needed.  However, if your product is successful and you have not instituted sound engineering practices from the get-go you may find yourself in a world of hurt with code that is brittle, difficult to maintain and that actually impedes your ability to make quick changes.  This article provides a few simple tips based on my experience creating two large, enterprise-scale systems using two very different scripting languages: JavaScript and Lua.&lt;/div&gt; 	      &lt;p&gt;&lt;b&gt;Tags: &lt;/b&gt; 
	  	    &lt;a href=&quot;/tag/1/scripting+languages&quot; rel=&quot;tag&quot;&gt;scripting languages&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/lua&quot; rel=&quot;tag&quot;&gt;lua&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/javascript&quot; rel=&quot;tag&quot;&gt;javascript&lt;/a&gt;      
	      &lt;/p&gt;

    </content>
  </entry>
  <entry>
    <title>Reviewing the Accurev Source Code Management System</title>
    <link rel="alternate" type="text/html" href="http://www.bxgrant.com/entry/14"/>
    <id>http://www.bxgrant.com/entry/14</id>
    <updated>2008-05-09T14:13:19Z</updated>
    <published>2008-05-09T09:00:50-06:00</published>
    <author>
      <name>Bruce Grant</name>
      <uri>http://www.bxgrant.com/blog/1</uri>
    </author>
    
    

    <content type="html" xml:lang="en" xml:base="http://www.bxgrant.com/blog/1">
      &lt;div class=&quot;bxWikiDocBody&quot;&gt;This article reviews the Accurev Source Code Management system, comparing it to the more well known Subversion product.  It explores how a commercial product such as Accurev can remain viable in a version control world largely dominated by open source products.&lt;/div&gt; 	      &lt;p&gt;&lt;b&gt;Tags: &lt;/b&gt; 
	  	    &lt;a href=&quot;/tag/1/source+code+management&quot; rel=&quot;tag&quot;&gt;source code management&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/subversion&quot; rel=&quot;tag&quot;&gt;subversion&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/accurev&quot; rel=&quot;tag&quot;&gt;accurev&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/review&quot; rel=&quot;tag&quot;&gt;review&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/comparison&quot; rel=&quot;tag&quot;&gt;comparison&lt;/a&gt;      
	      &lt;/p&gt;

    </content>
  </entry>
  <entry>
    <title>Forwarding a Remote Port to a Local Port using SSH</title>
    <link rel="alternate" type="text/html" href="http://www.bxgrant.com/entry/12"/>
    <id>http://www.bxgrant.com/entry/12</id>
    <updated>2008-05-07T10:35:38Z</updated>
    <published>2008-05-07T10:35:38-06:00</published>
    <author>
      <name>Bruce Grant</name>
      <uri>http://www.bxgrant.com/blog/1</uri>
    </author>
    
    

    <content type="html" xml:lang="en" xml:base="http://www.bxgrant.com/blog/1">
      &lt;div class=&quot;bxWikiDocBody&quot;&gt;This article provides a simple example of using SSH to forward web content from a port on a remote server to a port on a local computer and view the content in the local web browser.  It's not meant to be a comprehensive guide on ssh or port forwarding.  Instead, it's meant for the relative Linux novice who needs to figure out how to do simple port forwarding.  A basic knowledge of using ssh to log into a server is required.&lt;/div&gt; 	      &lt;p&gt;&lt;b&gt;Tags: &lt;/b&gt; 
	  	    &lt;a href=&quot;/tag/1/linux&quot; rel=&quot;tag&quot;&gt;linux&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/ssh&quot; rel=&quot;tag&quot;&gt;ssh&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/port+forwarding&quot; rel=&quot;tag&quot;&gt;port forwarding&lt;/a&gt;      
	      &lt;/p&gt;

    </content>
  </entry>
  <entry>
    <title>Toward the Singularity - Welcome the Memristor</title>
    <link rel="alternate" type="text/html" href="http://www.bxgrant.com/entry/10"/>
    <id>http://www.bxgrant.com/entry/10</id>
    <updated>2008-05-12T08:08:41Z</updated>
    <published>2008-05-01T15:58:34-06:00</published>
    <author>
      <name>Bruce Grant</name>
      <uri>http://www.bxgrant.com/blog/1</uri>
    </author>
    
    

    <content type="html" xml:lang="en" xml:base="http://www.bxgrant.com/blog/1">
      &lt;div class=&quot;bxWikiDocBody&quot;&gt;HP has created what some believe to be the fourth fundamental electrical circuit element called a &lt;a href=&quot;http://www.nytimes.com/2008/05/01/technology/01chip.html?em&amp;ex=1209787200&amp;en=c4345e5bcda95925&amp;ei=5087%0A&quot;&gt;memristor&lt;/a&gt;. Whether you believe we're headed toward the &lt;a href=&quot;http://en.wikipedia.org/wiki/Technological_singularity&quot;&gt;Singularity&lt;/a&gt; or not, advancements such as these at the nano level continue to support Moore's Law and the idea of &lt;a href=&quot;http://en.wikipedia.org/wiki/Accelerating_change&quot;&gt;accelerating change&lt;/a&gt;.  The memristor HP created is only fifteen nanometers wide and could get as small as four nanometers.  &lt;br /&gt;
&lt;br /&gt;
The memristor works like this:  flow charge in one direction across the memristor and resistance increases and then flow charge in the other direction and it decreases.  The amount of increase or decrease is proportional to how much charge flows across it.  Why is that so amazing and what does it let us do?  What's so cool is that after the charge is applied to the memristor the amount of resistance left tells us how much charge flowed across it: that's persistent memory in case you haven't figured it out yet.  What that lets us do is create computers that have memory that persists like human memory persists.  Again, one step closer to the Singularity?&lt;/div&gt; 	      &lt;p&gt;&lt;b&gt;Tags: &lt;/b&gt; 
	  	    &lt;a href=&quot;/tag/1/memristor&quot; rel=&quot;tag&quot;&gt;memristor&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/accelerating+change&quot; rel=&quot;tag&quot;&gt;accelerating change&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/technological+singularity&quot; rel=&quot;tag&quot;&gt;technological singularity&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/moore's+law&quot; rel=&quot;tag&quot;&gt;moore's law&lt;/a&gt;&amp;nbsp;      
	  	    &lt;a href=&quot;/tag/1/integrated+circuits&quot; rel=&quot;tag&quot;&gt;integrated circuits&lt;/a&gt;      
	      &lt;/p&gt;

    </content>
  </entry>
</feed>
