Proof of concept

A lot of expensive software I worked with turned out to be of not that great value. Always, that software was supposed to solve some domain-specific problem: setting up a adsl-network, classifying products for webshops, etc. What was promised to the customer, was software that is supposed to work out-of-the box, with only some simple configuration. However, as always that turned out not to be the case. Besides often complicated configuration, a lot of extra custom development was needed.

In the end we (the team I was part of) always got a working solution. More often, that software was more a hindrance then a help. Often I wished we used software that didn’t try to solve a problem, but just was general purpose, like Spring, Hibernate, MySQL, JBoss, etc. Also software as expensive as that of Oracle (Bea), Microsoft, IBM can be of value.
The main difference between supposedly configure-and-be-ready-software: that software doesn’t give customers the idea that he only has to configure the software and have it running.

Often better, as a customer: hire good people (or a good company), have them choose the best tools and have them create the solution.

This entry is inspired by why a PoC is better than a RFP Process, which in turn was based on the article Don’t RFP, Just DIY . Stated was, a RFP very often does not result in an end-result the customer envisioned. I can’t agree more. In the end, good software is created by good people, not by good tools. Good people can create good solutions even with mediocre tools, but better solution are built by great (at least better) tools.

Interview on Scala

I just saw the very interesting and inspiring interview on the emerging programming language Scala. Normally, I don’t like interviews alot (I rather read), but I got this link recommended by a collegue. The interview is with Martin Odersky, someone who I didn’t know but apparently worked on the creation of Scala, at his university in Switzerland.
I was already very interested on Scala, but the few things I have with the language was downloading the Scala plugin for Eclipse and playing with the interpreter. I created a Hello World program, but that’s not alot.
I am very keen on writing some useful program with it. Unfortunately, I don’t have that much time and it’s a bit hard to find the discipline in the evening and weekends to work on learning a new language.
The article is quite inspiring, and informative. Scala, resembles Haskell a lot, a purely functional language. I used the language a lot at my university. I hated it and loved it, as the language has many fine features, but it’s also very hard to develop anything practical. One of the nice (and hard) features of Haskell are, you’ll need to write only few lines of code to perform already quite a lot.
Popular demonstrations in Haskell are display of recursive functions, like Fibonacci. Let’s try this in Scala, to create a function that produces the n’t number of a Fibonacci row. With a bit of help of the web on the syntax of Scala (lots of tutorials) and the definition of Fibonacci (sigh), I produced this:
package gerbrand;

object TestMe {
def fib(n : Int):Int =
if (n==0)
1
else if (n==1)
1
else
fib(n – 2)+fib(n-1)

def main(args : Array[String]) : Unit = {
print (“Fibonacci: “)
for (n <- 0 to 10)
print (fib(n)+” “)
}
}

Looks pretty neat. The syntax is quite different from Java (it’s also a completely other language), but the program still runs inside the JVM. Java classes, components can be accessed from Java, so you can also use that).

There’s a link to a book on Scala. I’m tempted to buy it, unfortunatelly there’s only an online, and it’s still work in progress.
I wondered if there’s already a Scala on Rails. After some very short searching, I found Lift (also mentioned in the interview).  Looks cool from what I see in the code. Unfortunatelly, I can’t get the samples to run, seems the Maven repositery seems currently to miss jetty and the scala repository seems down. Let’s try tomorrow.

Apachecon, build and -management with Ant, Ivy, Maven security with Triplesec

Here’s an more detailed story on ApacheCon! I write the article in English, as some of my colleagues are be interested. The company being quite international, many of my colleagues don’t speak Dutch.

I’ve seen a lot of interesting lectures (and spoke interesting people). Very interesting were lectures about Ant, Maven and Ivy, all build- and package-management tools.
Everyone in software development with or involving Java most likely knows Ant, and probably uses it too. At Thursday there was a lecture about Extending Ant, with custom tasks.
You can build custom tasks, using scripting-languages available for java, like Jython, JRuby or Groovy, by using the scriptdef task. Then your custom task can be used from within your Ant file. Along with the built-in API of Ant, you can do complex operations as well in your Build-files.
Of course, if you start developing software in Ant, you need to create unit-tests for the code as well. You can do this with the antunit task.

I had created some nice sample code, unfortunately, it was lost because of the way the visual editor of my weblog works. However, on the website of Ant you can find fine tutorials, which make the sample code not necessary anyway.
I also saw an introductionairy lecture on Maven. I know Maven a little, but it’s not used in my project very extensively.
Finally I saw a lecture on Ivy. Similar to Maven, Ivy seems especially useful, if you already have a lot of Ant tasks. Unlike Maven, Ivy is only a package-management tools, but not a build-tool.
In the Q&A sessions after the lectures, the question arose, Maven or Ivy? It depends (how cliche) on the situation. Ivy has as great advantage it works as a plugin for Ant, and provides depency-tracking only. If you already have an extensive build-system with Ant, Ivy can be easier to introduce than Maven.
However, if you’re just starting or only have a few Ant-scripts, Maven seems the best way to go: everything is working out-of-the-box. Maven’s use of plugins, rather then scripts forces your build-environment to be more structured.

Finally, I also went to a lecture on TripleSec. This project was very promising and interesting. Everyone probably has a dozen security related passes (bank, acces, library, etc.) and one or more authentication systems like for online-payment, remote access etc. What the project promised was a uniform and easy way to add dongle- or ‘digipass’ like security to your application.
Once installed, a user can login using his mobile phone. When the user logs in for the first time, a tiny java-application using SMS is installed on the telephone (after confirmation of the user of course). Using the application the user can generate a key to login. When the user logs in for a second time, she can use the same application to generate a new code, without the need to download the application again.
All in all, you can have security that is similar to the system banks use, dongles using a telephone. It’s cheaper to develop, and the user doesn’t need to carry a lot of devices to login.

All in all, very interesting lectures. So, this article was in my draft for a long time. Inspired by an article on RET, I decide to publish it!