Frans Bouma's blog

Generator.CreateCoolTool();

Syndication

News




    Add to Technorati Favorites

About me

Fun stuff I created

My work

January 2007 - Posts

Software Architecture Workshop in Arosa: back to reality

Last week I had the privilege to spend 5 days in Arosa, Switzerland, among a group of people who were way more smarter than I am, for the annual Software Architecture Workshop (SAW). The SAW in Europe is an initiative of Jimmy Nilsson, and uses the Open Spaces methodology to let the participants discuss all kinds of topics during a set of parallel tracks. This year, the organization was done by Beat Schwegler of Microsoft. From the Netherlands, Paul Gielens, Arjen Poutsma (of Spring framework fame) and myself were present. The SAW is an invite only event.

What was so great about the event was that all 40 participants were considered equal and everyone was able to setup a session about a topic (related to software architecture of course) in the slots on the parallel tracks. It was a blast, I can tell you. Not only was it great to finally meet Jimmy Nilsson, Mats Helander, Sebastian Ros and others in person but the event itself was awesome as well, with every session giving you a big set of ideas, insights and visions on new directions in software architecture and software engineering. Because a lot of the participants (I think 25-30 people of the 40 people participating) were Java oriented architects, as a .NET software engineer I learned a lot of new insights in how things are done on other side of the fence and also how they look at how software should be archtectured.

Mats Helander describes on his weblog one of the sessions, which was about O/R mapping. The participants who were working on O/R mapper frameworks agreed on the fact that it's not about O/R mapping anymore, it's about managing domain objects/entities in a complete system. Mats explains it better than I do so please pay his article a visit .

So what did we discuss, which topics were hot? Of course TDD/Agile, however this year DSL's were the core topic in many sessions. It's amazing how much you can do with them and how little current technology actually lets you use them and combine them at full power. Other topics were Behavior Driven Development (BDD) presented by Dan North, Event Driven Architecture, code generation, Service Oriented Architecture, REST, Aspect Oriented Programming, Visualization of metrics related to the state of the software, Domain Driven Design and many more.

Eye openers, an example
One of the things that really made me sit there thinking how I could have been so stupid all these years was a session initiated by Dr. Kresten Krab Thorup, about Performance Metrics, what to accept as the 'acceptable 0-level' and how to measure these performance metrics during software development and after deployment. What was so great about Kresten's approach was that he had build a framework (using AOP) into the actual enterprise application so at any given moment fine grained call graphs, performance metrics for every call etc. (think in the graphs you obtain from a profiler). could be obtained from a live running system. The idea is that a big service consuming applications are only truly 'done' when they're deployed which means that any measurement of performance before that point is relatively meaningless.

Because the performance metrics could be obtained at any given moment, so after deployment but also during unit-testing with for example continuous integration, a live visualization could be made with comparisons of older metrics, e.g. graph comparisons of current performance mentrics data and the data from last week. Because the data was fine grained, great insight was obtained in where the hotspots in the live system were located and thus how to fix them properly. Don't consider the Windows performance counters useful in this case, you really need information about which code actually is taking which amount of the available performance, resources etc.

How many of you decides to build in such a framework so these performance metrics can be obtained later on? And how many of you are actually willing to give in some performance, say 10%, to get the right data to really be able to optimize the whole system properly? I bet not a lot. But think about it for a second... : have you ever even thought about this to build this in from the start? I haven't, but after I was confronted with the brilliance of the idea and the big help it can be for enterprise applications, I can't imagine you wouldn't build it in.

The whole idea is also a great example of how AOP can help you with the engineering of the software you have to create: the performance metrics logic isn't part of the business domain of the enterprise application however it is part of the whole system when the system is live. This is also an example how much more mature the Java world sometimes is compared to the .NET world: AOP and more in particular Dependency Injection and byte code manipulation at runtime are part of every day's life however in .NET land, AOP is a technique used by a relatively small group of people, and byte code manipulation at runtime isn't that easy as Microsoft more and more closes the door on this instead of embracing it in full and making it a first class citizen at the CLR level.

It was a great week and my head still hurts of how many awesome new things I've learned. I hope to formulate them in some blogposts in the weeks to come.

Posted Sunday, January 21, 2007 6:19 PM by FransBouma | with no comments

AssemblyFileVersions: 2.0.0.071005 is bad, but 2.0.0.061005 is good

I was unhappily surprised this morning when I compiled a new build of an assembly and changed the assembly file version attribute from 2.0.0.061005 to 2.0.0.070105: I got this wicked warning from the C# compiler:

warning CS1607: Assembly generation -- The version '2.0.0.070105' specified for the 'file version' is not in the normal 'major.minor.build.revision' format

Err... huh? So I tried with just the '6' changed into '7', and that was enough to create this warning. The documentation on this error is of course as always pretty helpful:

Al.exe detected ill-formed version information specified with the /fileversion or /productversion options.

Looking up the AssemblyFileVersionAttribute's constructor, I see:

The file version is normally a string of four numbers, separated by periods, reflecting the major version number, minor version number, build number, and revision number; for example, "1.0.4309.00". If version is not in this format, a compiler warning occurs, and the results displayed in the file properties dialog are unpredictable. Wildcards are not supported.

So also not any sign of "'whoa, dude, you really think we're going to accept numbers higher than '70000' ?"-related remarks. If someone knows why this warning is showing up, please let me know. Oh, it's not the '0' in front of the 7, as that 0 was also there with 061005, which was apparently acceptable. 2.0.70105.0 also is wrong, so it's apparently a rule somewhere that revision numbers have to obey a secret rule: "Thou Shall Not Make Revisions with Numbers Higher than 70000"... well, what about a revision number that's related to say... a date?

Update: I had a little brainwave and realized: the darn number has to fit in 16 bits!. So I tried 65535, and it was an acceptable number, but 65536 isn't. . Welcome to the 64bit era!

Posted Friday, January 05, 2007 12:49 PM by FransBouma | 4 comment(s)

I'm tagged and happy newyear!

First of all: Happy New Year!

Sahil Malik tagged me so here are the 5 useless, braincell destroying trivia about me you probably didn't nor wanted to know!

  1. My first program was a solver for a*x^2 + b*x + c = 0 on an MSX in MSX basic. That's right, my first program was completely useless and written in MSX Basic ('MicroSoft eXtended Basic') on my Toshiba HX-10 MSX computer with a whopping 64KB ram and an 8bit Z80 CPU, back in 1986. My brother and I were newspaper boys for a couple of years before we could affort this fine piece of Japanese computer hardware.
  2. I can't sing. It's forbidden by law that I even stand close to a microphone so I won't be able to torture others with the horrible notes I produce when I try to sing. Luckily, I love metal music and enjoy torturing others by hammering power riffs on my electric guitars.
  3. For years I hated databases Back on the university (in the netherlands, it's called a Hogeschool, it's on the level of US colleges, B.sc. degree) I really hated databases and everything that was related to it. Probably because of the teachers I had, who all had the magical gift of bringing everyone into a deep sleep within seconds. After graduation however, I saw how cool databases really are and that they actually are everywhere, even in 3D engines.
  4. My favorite writer is Richard North Patterson. Although I recently read a great novell by John Katzenbach, I still find the work of Richard North Patterson the best I've read in years.
  5. I love debugging. I really do. That might sound strange, but debugging is something I find similar to solving a complex puzzle: there's a solution, and it's my job to find that solution in the shortest time possible. A software engineer who loves debugging might also sound like that the software engineer builds in bugs just to have an excuse to debug later on , however I find the quality of work one can produce the top priority, so no worries there: in contrast, what I really hate are bugs in my software when it's out in the open, as I find it a signal I wasn't paying enough attention to get rid of the particular bug.

The 5 persons I'm tagging are: Jeroen van den Bos, Paul Gielens, Jimmy Nilsson, Roy Osherove and Dennis van der Stelt.

Posted Tuesday, January 02, 2007 2:23 PM by FransBouma | with no comments

More Posts