Wednesday, February 20, 2013

Hunt the Wumpus

From the screen snapshot... what is wrong?

ok... it is using maven... what else?

ever seen a C: on a unix... good times!,  apparently the tests build this out.   Let's hope the day gets better than this :)

Tuesday, February 19, 2013

Java 6 End of Life

It may be important to note for companies running on Java, that Java 6 (probably the most common JVM platform for most of my enterprise customers) will reach it's EOL this month, Feb 2013.

Time to be moving to Java 7 if you haven't yet!

Thursday, February 7, 2013

New Year Commitments

Looking to recommit to this tech blog... so what to expect from 2013


  1. looking forward to a new year with NFJS
  2. Poland YAY!  love Poland!
  3. JavaZone 2013 in Oslo
  4. UberConf 2013
that's what is scheduled currently

Blog Posts

I'm going try to post more frequently... and probably on themed subjects... are couple that come to mind:
  1. Lessons from clients:)  
  2. Tech Review or highlight of components / frameworks
If you have suggestions... please post.

Currently looking at writing a book on Spock as well... so we will see.

Technical Nugget

if you haven't noticed... take a look at asciidoc and asciidoctor.   All my tech writings and book will be written in asciidoc this year :)  In addition to all readme files on github, thanks to the githubbers and Dan Allen!

Predictions for the year

Java 8 release YAY!
Mobile security will become an issue
Asciidoc takes over as the preferred markup

Sunday, September 2, 2012

JavaZone 2012

If you are looking for one of the top Java conferences, you need to take a look at JavaZone in Oslo, Norway.   Having been there a number of times over the last several years and comparing it to other Java conferences... It is top notch!   I'll be speaking there again in a couple of weeks and I'm certainly looking forward to it!

If you can sneak away... this is the one to come to!

Hope to see you there!

Monday, May 28, 2012

The Key Tenets - 7 Years after The Internet Services Disruption

October 28 2005 Ray Ozzie, having recently joined Microsoft (msft) at the time, put together an interesting manifesto with the subject title of "The Internet Services Disruption", with the purpose of "get all of us roughly on the same page".  For currently undisclosed reasons,  I had reason to review this document and found it completely fascinating.  Ray's foresight and ability to forecast the future is just amazing.   Although his writing was made public (good for us all), it was intended to inspire and position MSFT for it's next great phase.   Let's look at each of the key tenets Ray outlined and see who in our industry has the upper hand.

1.  The power of the advertising-supported model
Is MSFT winning here... definitely not.   Winners in this category are Google, making money off   Facebook making money on ads based again on high traffic visitations.  While these two companies are making good money with this concept, the company to watch is Apple.  Why?  Apple is actually empowering developers with this ad-support model through iAd.  Like ads or not... Apple is enabling developers to provide solutions free to consumers and are paid through ad hits.    There has also been a resent uptick in the number of ads off services like Hulu and youtube.   So there is no question that Ray nailed this tenet.

2. The effectiveness of a new delivery and adoption model
While Ray describes this in a try before you buy, and a readership and review model,  while being valid it is ubiquitous, so it is hard to give any one company brownie points for this.  Most of the good companies have their share of fan boys, VIP programs and evangelist (in the which MSFT does a stellar good at),   I would like to take this concept a little deeper.   New delivery... and delivery of what.  Considering operating systems and software, everyone is going disc-less.  Delivery of updates are internet provided.   But lets talk content... There is a new delivery mechanism for content... how do you watch your movies, how to you read your books, how do you get your music?   Where is MSFT in this space?  No where to be found.   Who owns this space?  Well... depending it seems divided between Amazon, NetFlix AND the big one?  Apple.   Apple hits gold stars in this category up and down their product like.  In fact one could say that the adoption of an iPod or iPad is a gateway into the full Apple stack.

3. The demand of compelling, integrated user experiences that "just work"
While I could go into detail and beat around the bush... this statement screams Apple.   While apple costs more in some cases, they are uncompromising and focus on the user experience.  They have all the advantages in this category as well.  they own the full tech stack... they don't have to make it work on a billion devices... they have theirs.

I consider myself a technologist and I don't "belong" to a specific tech group.  I see value in a number of camps.   The take away for me... is how insightful Ray was almost 7 years ago.  He nailed it.  It is too bad that MSFT doesn't seem to be paying attention to him. 

Thursday, April 5, 2012

Getting the Spock out of a Gradle War

I recent ran into a interesting situation, for which I thought it would be worth sharing. I have a new project with the following build needs: Java, Spring MVC and Spock Testing. The problem is simple... The WAR build in gradle was building a WAR file that included the Groovy libraries. This project has no need for groovy at runtime. Groovy is needed because I'm using Spock for my testing.

Gradle and providedCompile

In older versions of Gradle it was commonly necessary to manage the jars in the lib directory. In the maven world, there is a dependency scope of "provided". This scope basically means that the dependency will be provided on the server classpath, however for the purposes of compiling the code in the project it is necessary. From a WAR perspective it means use this dependency for compile, but do not include it in the lib directory of the WAR. Gradle within the last year has added the same feature as providedCompile or providedRuntime. In my project I have this very need with the servlet-api, shown below.
dependencies {
compile "org.springframework:spring-webmvc:$springVersion"
compile 'javax.servlet:jstl:1.2'
providedCompile 'javax.servlet:servlet-api:2.5'

Spock dependencies and Gradle

As Spock is a groovy testing tool, it is no surprise that Spock requires groovy. This requires a couple of well documented configurations in your gradle file. First, you'll have to add the groovy plugin. Second you have to set as a dependency the groovy version. But wait!!! The dependency for groovy doesn't have a scoping ability. This is area where the "model" of gradle breaks down a little bit IMO. Ideally you would be interested in expressing in the model that there are "testing" needs... and those testing needs require groovy and spock dependencies.
apply plugin: 'groovy'

def spockVersion = '0.5-groovy-1.8'
def springVersion = '3.1.0.RELEASE'

dependencies {
groovy 'org.codehaus.groovy:groovy-all:1.8.3'
testCompile 'junit:junit:4.8.1'
testCompile "org.spockframework:spock-core:$spockVersion"
testCompile "org.spockframework:spock-spring:$spockVersion"
With this groovy dependency any build of WAR will result in a the groovy-all-?.?.?.jar file being added to the the WEB-INF/lib directory. The problem is I have no current interest in having groovy in production for this project. What to do? What to do?

Gradle Doc to the Rescue

I find that a large number of people (usually new to gradle) struggle with discovering how to resolve such a problem. The best starting point for getting to know gradle is the gradle user guide documentation, but the best starting point to use as a reference is the gradle dsl documentation ( Hopefully it is obvious that what we want to change is the build of the WAR. So lets look at the War task. Here we see all of it's properties... which includes the classpath property. The documentation for this property clearly states that this property affects the WEB-INF/classes and the WEB-INF/lib. Diving deeper into that property we see the default behavior which is:
project.configurations.runtime - project.configurations.providedRuntime
So our logical solution would be to include a war task configuration for the building of the classpath like this:
war {
classpath = classpath - project.configurations.groovy

Happy Coding! and may your builds never fail!

Sunday, March 18, 2012

Speak at the 33rd Degree

I will be speaking in Poland this month at the 33rd. It looks like a great conference line up and Krakow is wonderful.