Stout Systems Email not displaying correctly? View it in your browser.
Most Significant Bits | News and Information for High-Tech Professionals

In this issue:
Will IT Lead the Comeback?
We've Updated StoutSystems.com
Improving Java Software Builds with Mavin - Part 1
Stout Systems Enteres the iPhone Market With Its First App

Fall 2009


734.663.0877
stoutsystems.com

Will IT Lead the Comeback?
by John W. Stout

It has never been my habit to dwell on economic news. Frankly, I never considered that I could rely much on standard news reporting anyway. A news writer too often relies on what others have said in lieu of personal observation and research, so facts that get relayed in news reports—when you can trace down the source—turn out to be opinions or misunderstandings.

One interesting item that I’ve seen popping up in economic publications, Kiplinger’s among them, is that information technology will be one of the key industries to lead an economic comeback. It’s an encouraging report, and, although the methods of this leadership and who in the industry will really provide that leadership are subject to opinion, it’s worth further comment.

Having been in the IT business for a long time, and having grown a viable company through many economic environments, it remains clear to my staff and to me that fundamentals of business and career success do not change much with the environment. Those fundamentals apply if you are an IT team member or team leader, C-level executive or administrator. The emphasis on money as an economic indicator is often misplaced. Productivity is a far better economic indicator. As such, personal productivity, as obvious as it may or may not be, is the keystone of economic success.

For a software developer, that means generating a flow of rock solid, maintainable code.

For a hiring manager, an effective management process that keeps communication flowing through the team is essential to productivity. An efficient hiring process that identifies and selects best-match candidates without wasted effort supports that.

For someone involved in IT sales or proposal writing, upfront qualification of customer interest and capability is essential. How much time and money is wasted in preparing proposals that will never be accepted? I hear about companies that have “lots of proposals out” to potential customers, without any advance notion of how the customer will respond. I wonder how much effort and cost went into preparing those proposals versus the understanding of the customer’s actual needs and ability to act on the proposal.

Aside from personal responsibility, IT productivity depends on a few factors:

  • Effective training of technical people, either by school-based education, certification or boot camp.
  • Aligned individual efforts through the right level and methodology of project management.
  • Open communication within teams and with customers.
  • Use of metrics that measure productivity. On this latter point, we maintain weekly productivity metrics for every individual and division within our company; these are monitored and used to identify and rectify areas of concern—as well as to spot heroic work. Feel free to contact me if you want more information about we what do in that regard.

John W. Stout is the founder and president of Stout Systems. With 30 years’ experience in the computer industry in a variety of roles, he is an advocate of the effective communication of technology issues and objectives. Email john@stoutsystems.com.

We've Updated StoutSystems.com
by Nick Staroba

What does Stout do?
How does Stout do it differently?
Who are the people of Stout?
What's happening at Stout and in the local industry?
How can I find out about potential job openings through Stout?
How can I find candidates for employment through Stout?

At Stout Systems, people are often asking me these questions. Being a relatively new employee though, I’ve often had to defer to my coworkers to get them answered.

Not anymore. Over the past few weeks I’ve had them all answered. Peg Bogema, our Vice President of Operations, and I embarked on a task to revamp our Web presence to make it easier for our clients and candidates to get the information they need. We spent a lot of time asking ourselves and the people we work with these very questions in order to find out the best way to make our message available.

What we came up with is a site that is as direct as we could get in answering those questions. Take a look at the navigation:

Navigation: What, How, Who, News, For Candidate The new site includes specific project descriptions that cover much of the work we’ve done in recent years. From embedded systems to Java development, we’ve got the information online. As always, job openings and candidate listings are available as well as our online newsletters, company blog, user group and IT event calendars.

The site can be found at http://stoutsystems.com/ and feedback can be sent to info@stoutsystems.com. We would love to hear what you think of the update.

Nick Staroba does graphic and Web design for Stout Systems. Nick also handles all of Stout Systems’ social media activities. You can follow his tweets at http://twitter.com/nickstaroba/.

Improving Java Software Builds with Maven – Part 1
by Robert Shanahan

This is a two-part article. Part 2 will be in an upcoming newsletter.

Maven provides a comprehensive approach to managing software projects. From compilation, to distribution, to documentation, to team collaboration, Maven provides the necessary abstractions that encourage reuse and take much of the work out of project builds.

For more information about Maven, visit the Maven Web site at http://maven.apache.org/.

In this article we'll explore configuring and running Maven.

Internal Repository

Maven depends on repositories for storing and managing Java build artifacts. The Maven community provides public repositories for common libraries, such as log4j, junit, etc. The Maven runtime will cache these artifacts to a local repository when you declare them as dependencies in a project and you can install/deploy build artifacts to your own local repository, but others cannot access your local repository. Hence the need for an internal repository, which is similar to a public repository—both use webdav—except that you can publish to it!

Currently there are not many production quality repository apps, which made the selection easier. For me it came down to two choices: Archiva and Artifactory. Artifactory won—it just works. Artifactory listens on port 8081 and can be browsed at http://:8081/artifactory.

Login with admin/password and create a non administrator user account for Maven or Eclipse plugin command line client access to Artifactory; for the sake of configuration examples to follow, the user name repouser and password repopasswd are used.

Add the following xml snippets to your $M2_HOME/conf/settings.xml file to configure your local Maven environment to use Artifactory.

Insert this after <servers> tags.

<server>
 <id>my-repo-releases</id>
 <username>repouser</username>
 <password>repopasswd</password>
</server>
<server>
 <id>my-repo-snapshots</id>
 <username>repouser</username>
 <password>repopasswd</password>
</server>

Insert this after the <profiles> tag.

<profile>
 <id>myprofile</id>
 <repositories>
  <repository>
   <id>central</id>
   <url>http://localhost:8081/artifactory/repo</url>
   <snapshots>
    <enabled>false</enabled>
   </snapshots>
  </repository>
  <repository>
   <id>snapshots</id>
   <url>http://localhost:8081/artifactory/repo</url>
   <releases>
    <enabled>false</enabled>
   </releases>
  </repository>
 </repositories>
 <pluginRepositories>
  <pluginRepository>
   <id>central</id>
   <url>http://localhost:8081/artifactory/repo</url>
   <snapshots>
    <enabled>false</enabled>
   </snapshots>
  </pluginRepository>
  <pluginRepository>
   <id>snapshots</id>
   <url>http://localhost:8081/artifactory/repo</url>
   <releases>
    <enabled>false</enabled>
   </releases>
  </pluginRepository>
 </pluginRepositories>        
</profile>

And replace commented <activeProfiles> (if exists, otherwise simply add at end of settings.xml).

<activeProfiles>
 <activeProfile>myprofile<activeProfile>
</activeProfiles>

The following (simpler) addition to settings.xml is intended to accomplish the same purpose as the profile/activeProfile combo, but it doesn't work in all versions of Maven (need to test 2.1.0).

<mirrors>
 <mirror>
  <id>maven.mirror.com</id>
  <name>My Maven Proxy</name>
  <url>http://localhost:8081/artifactory/repo</url>
  <mirrorOf>*</mirrorOf>
 </mirror>
</mirrors>

Alternatively, each project's pom.xml file can override the default repo with essentially the same bit of xml. Insert the following into project's pom.xml (within <project> tags):

<repositories>
 <repository>
  <id>central</id>
  <url>http://localhost:8081/artifactory/repo</url>
  <snapshots>
   <enabled>false</enabled>
  </snapshots>
 </repository>
 <repository>
  <id>snapshots</id>
  <url>http://localhost:8081/artifactory/repo</url>
  <releases>
   <enabled>false</enabled>
  </releases>
 </repository>
</repositories>
<pluginRepositories>
 <pluginRepository>
  <id>central</id>
  <url>http://localhost:8081/artifactory/repo</url>
  <snapshots>
   <enabled>false</enabled>
  </snapshots>
 </pluginRepository>
 <pluginRepository>
  <id>snapshots</id>
  <url>http://localhost:8081/artifactory/repo</url>
  <releases>
   <enabled>false</enabled>
  </releases>
 </pluginRepository>
</pluginRepositories>

Command Line Options

The general flow of Maven is: clean (only if necessary), compile, test, package, install, deploy.

clean
Removes any previously compiled classes.

compile
Compiles all the classes.

test
Runs junit or testng tests via SureFire plugin.
Use mvn test or to run isolated tests use mvn test -Dtest=NameOfTestClass.

package
Compiles and creates the appropriate file for the plugin target.
-Jar plugin -> jar file.
-War plugin -> war file.
-Ear plugin -> ear file.

install
Installs the jar file into your local Maven repository.

deploy
Installs artifacts into repository or an application to an app server.

Adding a 3rd Party Jar to the Internal Repository

Some 3rd party jars are not available in the public repos. Resist the temptation to create a lib folder for your project. Maintaining a hybrid approach to dependency management more than defeats the advantage of Maven. Instead, deploy the 3rd party jar to the internal repository.

Download the 3rd party jar. If the jar name does not currently conform to Maven file naming standard, change its name accordingly. For example, if the file name is foo.jar and the version is 1.2.2, then rename the jar to foo-1.2.2.jar. Deploy the jar to the internal repository with the following command line:

C:\data\temp>mvn deploy:deploy-file -DgroupId=foo \
	-DartifactId=bar \
	-Dversion=1.2.2 \
	-Dpackaging=jar \
	-Dfile=foo-1.1.1.jar \
	-DrepositoryId=cim.releases \
	-Durl=http://localhost:8081/artifactory/3rdp-releases@repo

Alternatively, you can upload or import artifacts via the Artifactory user interface.

Deploying a Utility Jar to the Internal Repository

Common utility libraries developed by your development team should be regarded no differently than 3rd party libraries. Versioned utility jars should be declarable as dependencies in pom.xml files just like any 3rd party jar.

The Maven install goal will make a jar available to all projects on a single workstation, but the deploy goal must be used to install it into the internal repository. Add the following to your utility jar's pom.xml.

<distributionManagement>
 <repository>
  <id>my-repo-releases</id>
  <!-- id must match settings.xml: servers/server/id -->
  <name>Releases</name>
  <url>http://localhost:8081/artifactory/libs-releases@repo</url>
 </repository>
 <snapshotRepository>
  <id>my-repo-snapshots</id>
  <!-- id must match settings.xml: servers/server/id -->
  <name>Snapshots</name>
  <url>http://localhost:8081/artifactory/libs-snapshots@repo</url>
 </snapshotRepository>
</distributionManagement>

Run the Maven build with the deploy goal to install the jar into internal repository.


Maven and Eclipse

Maven Plugin for Eclipse

Maven functionality can be integrated into Eclipse via the m2eclipse plugin. You can find more information about the plugin here:

http://m2eclipse.codehaus.org/.

To install and configure the plugin, add the following to your Eclipse update sites:

http://m2eclipse.sonatype.org/update/.

Impedance Mismatch

Beyond simple projects, Eclipse and Maven don't integrate very well. The problem is rooted in the fact that Maven projects are typically organized in a hierarchical manner, whereas Eclipse project structure is flat. In other words, Maven allows project nesting and Eclipse doesn't. There is a workaround, but it requires some manual intervention.

The general approach is outlined here:

http://maven.apache.org/plugins/maven-eclipse-plugin/reactor.html.

More specifically, follow these steps to enable Eclipse to handle a nested, multi-module Maven project:

1. Check out the parent module (top level project) into your workspace or create a Maven multi-module project if starting from scratch.

2. If the Eclipse .project, .classpath, etc. files are not checked into Software Configuration Management (SCM), run mvn eclipse:eclipse to create .project, .classpath, etc. files in the sub-modules.

3. Switch to the Java perspective in Eclipse.

4. Select the parent module and hit F5 to refresh.

5. Choose File->Import..., Existing Projects into Workspace, and browse into one of the sub-modules under the parent module.

6. Select the sub-module, make sure Copy projects into workspace is not checked and click Finish.

7. Repeat steps 5 and 6 with the other sub-modules.

The submodules will appear as projects in the Eclipse Package Explorer. Changes made to code in these projects will be reflected in the parent project since projects were not copied.

Bootstrap the Build

You can run the Maven command from within Eclipse but it is usually faster from the command line. For bootstrapping only, disable tests.

mvn install -Dmaven.test.skip=true

What's Next

In part 2 we'll discuss how to streamline dependency management of multi-module projects including JEE projects. Stay tuned.

Robert Shanahan is an independent consultant currently in the role of Chief Architect for Alas Software. Robert brings his clients more than 20 years of software development experience and expertise. Among Robert's primary responsibilities at Alas are establishing technology, architecture and development standards, ensuring product quality and coherency across the Alas software product line. Prior to engaging with Alas in 2007, Robert served in a variety of technology leadership positions, including Chief Architect for Document Processing Systems and Technology Director for Cambridge Technology Partners. Robert is a graduate of the University of Michigan, a member of the World Wide Institute of Software Architects and an active supporter of open source software initiatives. Email rshanahan@gmail.com.

Stout Systems Enters the iPhone Market With Its First App

Stout Systems has officially entered the iPhone application development market with its first offering released to the iTunes Store. Called iSoBusy, the application is a tongue-in-cheek twist on a traditional mobile phone app theme: the “fake phone call” that gives a user an exit strategy from dull or uncomfortable situations. iSoBusy features over twenty uniquely silly pre-recorded fake callers including Mom, Obsessive Boss, Unemployed Brother-in-law, Football Fan and Dry Cleaner Calling About That Stain.

This is a new direction for us, said John W. Stout, President of Stout Systems. Our primary focus, of course, is still and will continue to be on expert level software and systems consulting services for our customers. Those customer services expanded to include the iPhone application development starting in 2009. At the same time, the idea for an app of our own, in the entertainment sphere, is just fun.

VolumeOne culture and entertainment magazine states that iSoBusy is already the best-ranked application of its kind.

Stout Systems developed iSoBusy in partnership with marketing guru David Brier and his company DBD International. Information about the application can be found at http://isobusy.com/.


NOTICES

Stout Systems now provides IT job openings and candidate listings via RSS. Stay current by subscribing today at http://stoutsystems.com/rss/.

Our IT job openings page can be found at http://stoutsystems.com/openings/.

Our IT candidate page can be found at http://stoutsystems.com/tech_talent/.

You received this newsletter because you have contacted us regarding
Stout Systems recruiting, networking or contract software development services.

Copyright © 2009 Stout Systems Development Inc. All Rights Reserved. Trademark & Legal Notice