Posts
The State of Software
In a recent thread on the Pragmatic Programmer mailing list, Dave Stagner said:
[….] I think most software hovers near the border between “barely works” and “almost works”.
Comments: [dave] - Aug 1, 2007 So much for my 15 minutes of fame. :}
read morePosts
On Architecture: The dubious joy of system architecture revision
Lately, I have had the rather dubious pleasure of reviewing some of our existing systems and find a plan for improving the maintainability of these systems. I have not done much work like this before, and I came in unprepared for the experience.
Most systems that have been maintained for a number of years have a maddening complexity, especially if they include a range of technological elements. Cramming the systems into my head completely enough to not make recommendations that are counter productive when they are faced with reality requires me to digest a lot of detailed information from many sources.
read morePosts
Drinking from the Java firehose: A manager's primer to Java projects
Updated (again) based on comments from helpful readers
Recently, I have discovered that managers who come into Java projects are totally unprepared for the reality that they face. Some programming environments have been basically stable for decades. COBOL has been stable from before most of us were born! But Java is different.
There are a few things you need to understand about Java. First of all, Java is not a programming language.
read morePosts
A Theoretical Model for Estimation and Risk Management
How do you control an agile project? I have had many discussions with people lately about how to manage the budget and estimation of an agile project. The following post argues that a project with a business case of $20 million should deliver in steps of no more than $500,000. The argument is sadly only based on “common sense”, and not on actual project experience. (There are too few Agile managers in Oslo)
read morePosts
Ron Jeffries: Features, not tasks
Ron Jeffries reminds us: “… hours aren’t burndown. Accomplishments are. A team that focuses on hours isn’t focusing on getting things done.[…] The point […] is getting backlog items done, not getting tasks done” This really cannot be said too often!
Via Jason Yip
read morePosts
Colorless Green Ideas Sleep Furiously
This phase has been stuck in my head lately: Colorless green ideas sleep furiously. It was first used by the linguist Noam Chomsky as an example of a sentence that is grammatically correct, yet has no meaning.
Interestingly, in 1985 this was taken up as a challenge. The result was a literary competition to write a short text that gives the sentence meaning. Before you continue reading, think for a while about how the sentence could have meaning.
read morePosts
commons-logging: you're on notice!
Hey, commons-logging team, you’re on notice!
Here is a dump of the Maven 2 dependencies from the project I use for my article on embedded integration testing:
no.brodwall.demo:web-demo:war:1.0-SNAPSHOT org.springframework:spring:jar:2.0.1:compile _commons-logging:commons-logging:jar:1.1:compile_ avalon-framework:avalon-framework:jar:4.1.3:compile javax.servlet:servlet-api:jar:2.5:test **_javax.servlet:servlet-api:jar:2.5:compile_** logkit:logkit:jar:1.0.1:compile log4j:log4j:jar:1.2.12:compile Never mind the fact that commons-logging was meant to be a thin facade on top of other logging frameworks. commons-logging 1.1 actually include compile dependencies on: log4j, servlet-api, avalon-framework, and logkit! servlet-api!?! WTF!?
Maven 2 is extremely susceptible to bad POMs because dependencies are resolved transitively.
read morePosts
Superceeded Article: Embedded Web Integration Testing with Jetty
Do you speak test? In that case: Hello web application:
public class WebIntegrationTest extends net.sourceforge.jwebunit.WebTestCase { public void testIndex() { beginAt("/index.html"); assertTextPresent("Hello world"); } private org.mortbay.jetty.Server server; protected void setUp() throws Exception { server = new org.mortbay.jetty.Server(0); server.addHandler( new org.mortbay.jetty.webapp.WebAppContext("src/main/webapp", "/my-context")); server.start(); int actualPort = server.getConnectors()[0].getLocalPort(); getTestContext().setBaseUrl("http://localhost:" + actualPort + "/my-context"); } } This code runs with no application server, no separate deployment step, just like that.
If this looks interesting, see my full-sized article on java.
read morePosts
The java.util.Map DAO
The more I code, the fewer dependencies I am willing to create.
For example, I used to have a common super interface that all persistent objects must inherit from in order to have an id-field. I used to have a common DAO interface that all DAOs implemented. But these add hard dependencies in my code.
Hiding the super interface for all entities was easy. Doing away with the DAO is harder.
read morePosts
The coolest Eclipse plugin ever!
I have just one thing to say: w00t!
Failing unit test Unit test succeeds Thanks to Litrik de Roy Litrik used my C code to control the lights of the Dell XPS computer and integrated them into an Eclipse plugin. Coolest plugin EWAR!!one!! See more about it on the project blog.
Comments: [Stein Kåre Skytteren] - Jan 10, 2007 Wow… I just got to have one of those… :-)
Johannes Brodwall - May 12, 2007 Hi, hong.
read more