When we first announced RHQ, we put the state of our internal svn repository at RHQ, but did not start right away committing new stuff into it.
Last night we switched over to the RHQ svn and added all the stuff that was developed since the first cut over.
So expect lots of changes going into it from now on.
If you don't want to check out the source, but just browse around, you can use the source viewer at http://www.rhq-project.org/svn.php.
Don't forget to checkout the documentation in the forums.
You can also meet developers on #rhq at irc.freenode.net.
Tuesday, February 26, 2008
Tuesday, February 19, 2008
Be careful with @OneToOne and lazy loading
When modelling an entity one sometimes wants to have information in a separate table even if it would exist only one time for a given entity. Think of a 1:0...1 composition. This could be handled as embedded in the primary entity, but perhaps you don't want to do this as the dependent object is huge and you don't always need it. The dependent table could even live in a different table space for that reason. Or just for relational normalization reasons.
For the @xxxToOne relations, JPA 1.0 spec sees Eager loading as default. One can give a *hint* that the dependend end should be lazily loaded, but this is only a hint.
Now when you have an optional @OneToOne relation, Hibernate (at least) needs to do an additional select for that relation to find out if the dependend object is null or not. For a mandatory (1..1) relation it can just install a proxy to lazily load the relation, but this is not possible for 1...0..1.
See e.g. http://www.hibernate.org/162.html for an explanation.
For the @xxxToOne relations, JPA 1.0 spec sees Eager loading as default. One can give a *hint* that the dependend end should be lazily loaded, but this is only a hint.
Now when you have an optional @OneToOne relation, Hibernate (at least) needs to do an additional select for that relation to find out if the dependend object is null or not. For a mandatory (1..1) relation it can just install a proxy to lazily load the relation, but this is not possible for 1...0..1.
See e.g. http://www.hibernate.org/162.html for an explanation.
Thursday, February 14, 2008
Project RHQ is here
At JBossWorld in Orlando, Red Hat anounced together with Hyperic the new Project RHQ. Why do I write about it?
Lets quote from the press release:
Well, I was for over a year working on JON 2.0 and will continue to do so. So this is a big step for me and the others of our team.
The two press releases:
Hyperic press release
Red Hat press release
Code is available at http://www.rhq-project.org/svn.php and anonymous svn access has been set up as well.
Be sure to check out http://www.rhq-project.org/ and start contributing today :-)
Lets quote from the press release:
It is anticipated that the RHQ project will serve as the code base for JBoss Operations Network v2.0 (JON 2.0), due out in the Spring of 2008.
Well, I was for over a year working on JON 2.0 and will continue to do so. So this is a big step for me and the others of our team.
The two press releases:
Hyperic press release
Red Hat press release
Code is available at http://www.rhq-project.org/svn.php and anonymous svn access has been set up as well.
Be sure to check out http://www.rhq-project.org/ and start contributing today :-)
Friday, February 01, 2008
Add mod_jk to the Apache that comes with Tiger
Mac OS X Tiger (and Leopard, perhaps also earlier versions) come with an Apache httpd installed.
If you want to use this as frontend for a Tomcat or JBoss with embedded tomcat, you need to install mod_jk.
The canonical way is to use the macports port. Unfortunately will this a) try to install apache2 and b) fail building (at least for me).
Fortunately there is a blog entry out there that explains how to do it by hand.
Note, that the link to the apache download is outdated. The best is to go to the root of the dowloads and just download the latet version.
When you are using mo_jk in front of a embedded tomcat in JBossAS, you also don't need the workers.tomcat_home directive in the config file.
Ah, and when this works, don't forget to trim down the loglevel in httpd.conf from trace to info. Else you will end up with gigabytes of logs.
If you want to use this as frontend for a Tomcat or JBoss with embedded tomcat, you need to install mod_jk.
The canonical way is to use the macports port. Unfortunately will this a) try to install apache2 and b) fail building (at least for me).
Fortunately there is a blog entry out there that explains how to do it by hand.
Note, that the link to the apache download is outdated. The best is to go to the root of the dowloads and just download the latet version.
When you are using mo_jk in front of a embedded tomcat in JBossAS, you also don't need the workers.tomcat_home directive in the config file.
Ah, and when this works, don't forget to trim down the loglevel in httpd.conf from trace to info. Else you will end up with gigabytes of logs.
JkLogLevel info
Wednesday, January 30, 2008
Ignore target folders in eclipse
In Eclipse when you press Command-Shift-R (Open Resource), you end up seeing the same resource a few times -- when it e.g. gets copied into a location in the workspace by your build tool (e.g. maven, ant).
I was looking for a solution for some time now and way playing with working sets for this purpose.
Rob Mayhew obviously has one:
http://robmayhew.com/eclipse-ignore-folder/
Now the "only" thing left to do is to mark those target directories as derived -- after each clean up of those folders.
Luckily there is a project dash in Eclipse that can use javascript to do this.
Someone on the net even wrote the right script
I was looking for a solution for some time now and way playing with working sets for this purpose.
Rob Mayhew obviously has one:
http://robmayhew.com/eclipse-ignore-folder/
Now the "only" thing left to do is to mark those target directories as derived -- after each clean up of those folders.
Luckily there is a project dash in Eclipse that can use javascript to do this.
Someone on the net even wrote the right script
Sunday, January 13, 2008
Mac apps runtime config
Much of an application on a Mac is configured by a file called Info.plist. You can find the file when
you right click on an application and choose "Show packet content" and descend down in the Content folder.
Apple has a page about all the key/value pairs at http://developer.apple.com/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/PListKeys.html.
I was looking for a way to disable the dock icon and Main menu from a "StatusBarApp" (Apple calls them Agents IIUC). But without knowing the right terminology, this is hard to find :)
you right click on an application and choose "Show packet content" and descend down in the Content folder.
Apple has a page about all the key/value pairs at http://developer.apple.com/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/PListKeys.html.
I was looking for a way to disable the dock icon and Main menu from a "StatusBarApp" (Apple calls them Agents IIUC). But without knowing the right terminology, this is hard to find :)
Tuesday, January 08, 2008
Cocoa: Preferences - and Binding
Since Mac OS X 10.3 there is a new "Binding" mechanism. The idea behind this is to e.g. have an observer pattern for the enablement of GUI elements or to read and store preferences without coding. To use this, you need to pull the NSUserDefaultsController from the controller palette in InterfaceBuilder into your app. In the inspector for a field, you can then go to the "bindings" pane and bind the values (shown here for a NSTextField, but applies to other GUI elements like checkboxes as well):

Bind to: should be set to the NSUserDefaultsController. For the controller key, you can leave the values. Model key path finally contains the key in the preferences. Depending on the kind of GUI element, the right data type will be choosen automatically.
The technique of binding basically allows to provide a preferences panel without any (Objective-C) coding to set and store the values -- very nice.
It is still a good idea to provide defaults for the settings as described in the previous post.
Update: I just found a nice article from Apple describing all this as well.

Bind to: should be set to the NSUserDefaultsController. For the controller key, you can leave the values. Model key path finally contains the key in the preferences. Depending on the kind of GUI element, the right data type will be choosen automatically.
The technique of binding basically allows to provide a preferences panel without any (Objective-C) coding to set and store the values -- very nice.
It is still a good idea to provide defaults for the settings as described in the previous post.
Update: I just found a nice article from Apple describing all this as well.
Friday, January 04, 2008
Cocoa: Preferences
Sometimes you want to save some user preferences for your app. Luckily there is good support for this in Mac OS X.
Perferences are key-value pairs that can be stored in the filesystem. The system works in multiple layers which means that if a key is not found in an upper layer, it will be searched in the layer below. Layers are: command line, application, global, language and default. This is means also that you don't need any additional code to see if a property is given on the command line or in the preferences etc - that is all transparent.
A good idea is to always provide the fallback values, so your code never needs to check if a preferences key is actually present or not.
Before your preferences show up in the Filesystem as user database under your choosen id, you have to fill the program id in Info.plist at:
With the XXX the prefernces store would be ~/Library/Preferences/XXX.plist
An easy approach to set up the defaults if you only have a few preferences items is:
If you have more than a few items, it is easier to provide a defaults file in the app bundle and load this instead:
After this is done, reading preference values is easy:
You might want to use the respective xxxForKey message depending on the type of preferences values.
Storing modified values is equally easy:
The documentation for NSUserDefaults states that it will store the modifications from time to time to the underlying filesystem object, but I found it better to explicitly call
Perferences are key-value pairs that can be stored in the filesystem. The system works in multiple layers which means that if a key is not found in an upper layer, it will be searched in the layer below. Layers are: command line, application, global, language and default. This is means also that you don't need any additional code to see if a property is given on the command line or in the preferences etc - that is all transparent.
A good idea is to always provide the fallback values, so your code never needs to check if a preferences key is actually present or not.
Before your preferences show up in the Filesystem as user database under your choosen id, you have to fill the program id in Info.plist at:
<key>CFBundleIdentifier</key>
<string>XXX</string>
With the XXX the prefernces store would be ~/Library/Preferences/XXX.plist
An easy approach to set up the defaults if you only have a few preferences items is:
NSUserDefaults *preferences = [[NSUserDefaults standardUserDefaults] retain];
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:11] ,@"interval",
@"127.0.0.2" , @"targetAddr",
NO, @"logEvents",
@"osa:@shimoUp.aplescript", @"upScript",
@"osa:@shimoDown.aplescript", @"downScript",
nil ]; // terminate the list
[preferences registerDefaults:dict];
If you have more than a few items, it is easier to provide a defaults file in the app bundle and load this instead:
NSUserDefaults *preferences = [[NSUserDefaults standardUserDefaults] retain];
NSString *file = [[NSBundle mainBundle]
pathForResource:@"Defaults" ofType:@"plist"];
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:file];
[preferences registerDefaults:dict];
After this is done, reading preference values is easy:
NSString *someString = [preferences objectForKey:@"targetAddr"];
int interv = [preferences integerForKey:@"interval"];
You might want to use the respective xxxForKey message depending on the type of preferences values.
Storing modified values is equally easy:
[preferences setInteger:someInt forKey:@"interval"];
[preferences setObject:someString forKey:@"targetAddr"];
The documentation for NSUserDefaults states that it will store the modifications from time to time to the underlying filesystem object, but I found it better to explicitly call
[preferences synchronize] to trigger this.
Friday, December 28, 2007
Cocoa: Timed methods
Sometimes one wants to run a job a regular or scheduled times. One option would be to start a loop that runs until some abort condition is reached and that sleeps after the job is done. This is easily done, but has the big disadvantage to block the GUI while it is sleeping.
A better alternative is to set up a timer that calls you back from time to time. Cocoa offers the
It is actually easy to create the job. First you need to decide which method will be notified. In our example here it is
The code to set up the timer could then look like this:
So this one schedules the execution of the runIt method of the same class the timer is created in, to repeat every 10 seconds.
Simple.
To cancel the timer again, one just has to send it an invalidate method:
I was first experimenting with
A better alternative is to set up a timer that calls you back from time to time. Cocoa offers the
NSTimer class for this. It offers a wealth of methods to set up the timer and insert it into the RunLoop. The timer will then send from time to time a message to a method of your app that does the job.It is actually easy to create the job. First you need to decide which method will be notified. In our example here it is
- (void) runIt (with no arguments).The code to set up the timer could then look like this:
NSTimer *timer;
timer = [NSTimer scheduledTimerWithTimeInterval:10.0
target:self
selector: @selector(runIt)
userInfo:nil
repeats: YES];
So this one schedules the execution of the runIt method of the same class the timer is created in, to repeat every 10 seconds.
Simple.
To cancel the timer again, one just has to send it an invalidate method:
[timer invalidate]I was first experimenting with
scheduledTimerWithTimeInterval:invocation:repeats: but for whatever reason it did not work, even if the timer said it is valid. But the above works well for me and is even easier.
Some Mac coding ... finally
I did some coding on Mac OS X lately. Basically the first time some real stuff besides just firing Xcode and InterfaceBuilder and closing them after some poking around.
At first it feels somewhat strange to code in Objective-C, given that I mostly did Java coding for the last five years, but then it feels good again. I am writing 'again' on purpose, as the whole programing is like it was over ten years ago on the NeXT.
I will try to put some stuff online, as I did fight against some obstacles and want to share the results.
At first it feels somewhat strange to code in Objective-C, given that I mostly did Java coding for the last five years, but then it feels good again. I am writing 'again' on purpose, as the whole programing is like it was over ten years ago on the NeXT.
I will try to put some stuff online, as I did fight against some obstacles and want to share the results.
Saturday, December 08, 2007
Small Applescript to make iTunes play
I recently put my Mac mini into a server room and am running it headless now.
As this one also has the iTunes library and the connection to the stereo, I was using VNC to connect to it and to start and stop iTunes. Of course that is cumbersome.
So I googled a little on "applescript" and "iTunes" and found this wonderful site.
Using the information on it I was able to come up with this script, that I saved as playTunes.scpt
It will play the contents of a playlist called "a_Ungespielt" if iTunes is paused and stop playing otherwise.
I can now just log into the mini and start/stop playing with "osascript playTunes.scpt".
As this one also has the iTunes library and the connection to the stereo, I was using VNC to connect to it and to start and stop iTunes. Of course that is cumbersome.
So I googled a little on "applescript" and "iTunes" and found this wonderful site.
Using the information on it I was able to come up with this script, that I saved as playTunes.scpt
tell application "iTunes"
if player state is paused then
play user playlist "a_Ungespielt"
return "Playing"
else
pause
return "Stopped"
end if
end tell
It will play the contents of a playlist called "a_Ungespielt" if iTunes is paused and stop playing otherwise.
I can now just log into the mini and start/stop playing with "osascript playTunes.scpt".
Saturday, December 01, 2007
Marlene is standing on her own

Marlene is growing well. She is eight months old now and since three weeks, she is able to sit up on her own. She is not yet able to crawl on arms and legs, but she is already moving around quite a bit.
Today she was for the first time able to stand up on her own by holding the bars of her bed and pulling herself up. She was totally happy and excited - as we have been as well
Wednesday, November 21, 2007
Oracle surprise
I was hunting an issue where inserting an empty string (not null in Java, but with String.lenght()==0) resulted in a constraint violation exception. The column was a varchar2 one and indeed marked as not null.
I asked some people that should know (including a former DBA) and everyone told me that "" != null - always.
Digging around I found the following in an Oracle manual:
So in this case "" == null.
It is ok if one knows it and one can work around, but it came as surprise to me and others.
I asked some people that should know (including a former DBA) and everyone told me that "" != null - always.
Digging around I found the following in an Oracle manual:
Note: Oracle Database currently treats a character value with a length of zero as null. However, this may not continue to be true in future releases, and Oracle recommends that you do not treat empty strings the same as nulls.
So in this case "" == null.
It is ok if one knows it and one can work around, but it came as surprise to me and others.
Tuesday, November 20, 2007
Broken ixus
About one and a half years ago I bought myself a Canon Digital Ixus i Zoom. After two weks, the camera was broken, as the lens protection lids were just lying in the lens tube. I had the camera sent to Canon and they repaired it on warranty.
The camera worked well - until recently when I had the same issue again. Googling around indicated that this time the repair would be expensive.

After the camera was just lying around, I thougt "why don't I just remove the broken parts and try if it works again?"
Here is what worked for me.
I take no responsability whatsoever if your camera breaks, you hurt yourself or your dog runs away.
Continue reading at your own risk
So I took tweezers to try to remove them. As this was not soo easy I shaked the lens tube a bit and found out that I could just remove the cover.
The next image shows the parts that fell out

This closeup of the front shows an axis (red), a slider (green) and a hole (blue)

Put the one cover thingy with the hole marked in red on the axis and the hole marked in green on the slidrer. The teeth must be facing the hole marked in blue. Then put the other thingy in place with its little axis in the hole marked in blue and the teeth mathing those of the other one.

The result should look like in the next picture:

Or when you switch the camera on:

Now it is time to clip the grey plastic ring back on. There is basically only one way to do it right:

After that put the metal tube/front cover back on it and carefully apply some preasure to it. Volia the result:
The camera worked well - until recently when I had the same issue again. Googling around indicated that this time the repair would be expensive.

After the camera was just lying around, I thougt "why don't I just remove the broken parts and try if it works again?"
Here is what worked for me.
I take no responsability whatsoever if your camera breaks, you hurt yourself or your dog runs away.
Continue reading at your own risk
So I took tweezers to try to remove them. As this was not soo easy I shaked the lens tube a bit and found out that I could just remove the cover.
The next image shows the parts that fell out

This closeup of the front shows an axis (red), a slider (green) and a hole (blue)

Put the one cover thingy with the hole marked in red on the axis and the hole marked in green on the slidrer. The teeth must be facing the hole marked in blue. Then put the other thingy in place with its little axis in the hole marked in blue and the teeth mathing those of the other one.

The result should look like in the next picture:

Or when you switch the camera on:

Now it is time to clip the grey plastic ring back on. There is basically only one way to do it right:

After that put the metal tube/front cover back on it and carefully apply some preasure to it. Volia the result:
Wednesday, November 14, 2007
Hyperic and Red Hat cooperate
Red Hat / JBoss built the JBoss ON 1.x product on the base of code from Hyperic. Now the two companies
are going to collaborate on that.
Why do I write that? Because I am part of the JBossON team :)
are going to collaborate on that.
Why do I write that? Because I am part of the JBossON team :)
Friday, October 12, 2007
Use == for Enum comparision
I was recently running FindBugs over some Java5 based code and found some places where FindBugs was complaining that two Objects compared with
Closer inspection showed that this have been Enums in most cases. The IDEs did not warn here and maunal code inspection also does not directly show the issue.
Luckily with enums, you can use

Just a small little change in habits, but it helps a lot.
equals() are not of the same type.Closer inspection showed that this have been Enums in most cases. The IDEs did not warn here and maunal code inspection also does not directly show the issue.
Luckily with enums, you can use
== to compare them. And then it gets obvious:
Just a small little change in habits, but it helps a lot.
JIRAClient is cool
Recently we at JBoss® received licenses for JIRAClient. It is a cool desktop app (written in Java) that serves as a frontent to Atlassians JIRA bugtracking sytem. One of the nicest features here is offline mode: JIRAClient is ablw to download issues to its local database, so you can work offline and upload changes later on.
The staff at Almworks is very responsive in the forums and also open to suggestions.
If you are using JIRA on an daily basis, then you should definitively check out JIRAClient.
The staff at Almworks is very responsive in the forums and also open to suggestions.
If you are using JIRA on an daily basis, then you should definitively check out JIRAClient.
Thursday, October 11, 2007
pg_stat_activity is your friend
PgAdmin for postgres has a nice feature called "Server status". It is great if you sit in front of a GUI.
But if you want to do some remote work or tell a customer to report that server status, it is not quite the right thing.
But at the end, pgAdmin is only doing
This will show you all client connections together with the command they are currently executing.
But if you want to do some remote work or tell a customer to report that server status, it is not quite the right thing.
But at the end, pgAdmin is only doing
select * from pg_stat_activity order by procpid;
This will show you all client connections together with the command they are currently executing.
Tuesday, September 11, 2007
NPE due to autoboxing
One of the nice features of Java 5 is autoboxing. I guess everyone remembers the hassle of calling
Now can you guess what the following code does when you call
Yeah, it is throwing a
Unfortunately it seems like FindBugs and other tools are not (yet) able to detect this (actually in my test code, FindBugs was not even able to detect the NPE in teh explicit call).
Integer.intValue() to convert from Integer to int.Now can you guess what the following code does when you call
FB.foo()?
public class FB
{
public void foo()
{
int x;
x = bar();
System.out.println("X is " + x);
}
public Integer bar()
{
return null;
}
}
Yeah, it is throwing a
NullPointerException in the assignment x = bar() because bar() is returning null and the implicit bar().intValue() is thus throwing the NPE. Without autoboxing, this is much more evident.Unfortunately it seems like FindBugs and other tools are not (yet) able to detect this (actually in my test code, FindBugs was not even able to detect the NPE in teh explicit call).
Monday, August 13, 2007
x2svg new release 1.2beta1
Project x2svg just released a new version, 1.2-beta1
Changes are
* Documentation updates
* Changed handling of the property file. See properties.html.
* Fixed a bug where the directory path of the input was appended to the output if only a directory was given for output conversion (x2svg-Bugs-1770327)
* The gui no longer silently swallows errors (x2svg-Bugs-1771512)
* Comments can be added to a diagram e.g. stating the input file or user (x2svg-FR-1770604)
* Improved XSD handling. Recursions are handled and a big Schema from @work can now be parsed. Inheritance is honored.
* Fix for: "The DTDParser was going into an endless loop" (x2svg-Bugs-1766097).
* Added a test suite.
It can be downloaded from the sourceforge download pages at:
http://sourceforge.net/project/showfiles.php?group_id=199130&package_id=236217&release_id=531824
Changes are
* Documentation updates
* Changed handling of the property file. See properties.html.
* Fixed a bug where the directory path of the input was appended to the output if only a directory was given for output conversion (x2svg-Bugs-1770327)
* The gui no longer silently swallows errors (x2svg-Bugs-1771512)
* Comments can be added to a diagram e.g. stating the input file or user (x2svg-FR-1770604)
* Improved XSD handling. Recursions are handled and a big Schema from @work can now be parsed. Inheritance is honored.
* Fix for: "The DTDParser was going into an endless loop" (x2svg-Bugs-1766097).
* Added a test suite.
It can be downloaded from the sourceforge download pages at:
http://sourceforge.net/project/showfiles.php?group_id=199130&package_id=236217&release_id=531824
Saturday, August 11, 2007
Sleepless in Stuttgart - Part III
Over two month have now passed since my last post.
Both Kids are doing fine. Marlene is much more moving around (but still not crawling).
Around six weeks ago we've implemented the 8-o-clock rule for Orlando and since that time we have our evenings back to us.
The rule is very basic: "Orlando is in bed at 8pm and daddy and mommy are out until the next morning". Actually we have tried this several times in the past, but never really succeeded. The big difference now is that he has an analog clock in his room, so he can directly see if the big needle is already at the top and little one on the eight or not. When he is in bed before eight, we still have some time for reading. If he is in late, it is relatively easy to point him to the clock and tell him that it is late now. That system really works well for us.
End of June we did a short trip to the Bodensee (Lake of Constance) where we had a good time altogether. We were staying at a farm with lots of toys for children. Unfortunately Orlando was the only German kid at his age (there was a French girl), so we still were his major friends for playing). Next time we do such a trip, we will try to convince friends to come with us, so that the kids can go playing on their own.
I am having my second month of Elternzeit and am currently discussing the implementation of that with the regional agency, as the law seems to allow to take the Elternzeit only on the n-th month of birth of the child. So if the child is born on 15th of a month, you can only take Elternzeit from a 15th to a 14th on the next month, but not e.g. from 1st to 31th. Unfortunately I didn't know that :-/ Well lets see, what comes ...
Both Kids are doing fine. Marlene is much more moving around (but still not crawling).
Around six weeks ago we've implemented the 8-o-clock rule for Orlando and since that time we have our evenings back to us.
The rule is very basic: "Orlando is in bed at 8pm and daddy and mommy are out until the next morning". Actually we have tried this several times in the past, but never really succeeded. The big difference now is that he has an analog clock in his room, so he can directly see if the big needle is already at the top and little one on the eight or not. When he is in bed before eight, we still have some time for reading. If he is in late, it is relatively easy to point him to the clock and tell him that it is late now. That system really works well for us.
End of June we did a short trip to the Bodensee (Lake of Constance) where we had a good time altogether. We were staying at a farm with lots of toys for children. Unfortunately Orlando was the only German kid at his age (there was a French girl), so we still were his major friends for playing). Next time we do such a trip, we will try to convince friends to come with us, so that the kids can go playing on their own.
I am having my second month of Elternzeit and am currently discussing the implementation of that with the regional agency, as the law seems to allow to take the Elternzeit only on the n-th month of birth of the child. So if the child is born on 15th of a month, you can only take Elternzeit from a 15th to a 14th on the next month, but not e.g. from 1st to 31th. Unfortunately I didn't know that :-/ Well lets see, what comes ...
XO review by a 12 year old
This blog entry contains a review of the XO (the One Laptop Per Child, OLPC) machine.
Interesting read. I wish I could get my hands onto one as well
Interesting read. I wish I could get my hands onto one as well
Must sees in Stuttgart (?)
As you know I am a regular qyper since end of last year. Recently I got asked by another qyper from outside Germany what are the must sees in Stuttgart.
Well, the first solution to this would be to just select the entries with 5 stars. But this still leaves a big chunk of things.
So this is a very subjective list of must sees from my point of view. All urls refer to qype entries:
- TV-Tower: This is located on the top of one of the surrounding hills and was the first all concrete TV-tower in the world. You have a great view from up there. You can get there with Subway U7 from main station.
- Killesberg (+ tower) it is a nice parc with a cool tower there as well. You can get there via U7 as well (in the other direction). When you are up there and are into architecture, then you should also go and see the Weissenhofsiedlung or on Qype
- The Zacke also gives nice views over Stuttgart. Tickets for public transport are vaid here as well.
- The Königsstraße is the main shopping mile and starts at the main station. When you walk this pedestrian zone, you pass by at the châteaus , the new Kunstmuseum (this entry only describes the bar, but the picture shows what to expect) This link is better: http://www.kunstmuseum-stuttgart.de/de/index2.php
Then of course as the City of Mercedes and Porsche there are museums as well:
- Porsche Museum (currently in construction, but the old one is not far away.
- Mercedes Benz Museum
There are plenty more things to see. Check out the Qype listing for Stuttgart
Well, the first solution to this would be to just select the entries with 5 stars. But this still leaves a big chunk of things.
So this is a very subjective list of must sees from my point of view. All urls refer to qype entries:
- TV-Tower: This is located on the top of one of the surrounding hills and was the first all concrete TV-tower in the world. You have a great view from up there. You can get there with Subway U7 from main station.
- Killesberg (+ tower) it is a nice parc with a cool tower there as well. You can get there via U7 as well (in the other direction). When you are up there and are into architecture, then you should also go and see the Weissenhofsiedlung or on Qype
- The Zacke also gives nice views over Stuttgart. Tickets for public transport are vaid here as well.
- The Königsstraße is the main shopping mile and starts at the main station. When you walk this pedestrian zone, you pass by at the châteaus , the new Kunstmuseum (this entry only describes the bar, but the picture shows what to expect) This link is better: http://www.kunstmuseum-stuttgart.de/de/index2.php
Then of course as the City of Mercedes and Porsche there are museums as well:
- Porsche Museum (currently in construction, but the old one is not far away.
- Mercedes Benz Museum
There are plenty more things to see. Check out the Qype listing for Stuttgart
Monday, July 30, 2007
Gui for x2svg
Hi,
project x2svg just released a new version that now contains a simple graphical user interface.
You can download it from Sourceforge.
project x2svg just released a new version that now contains a simple graphical user interface.
You can download it from Sourceforge.
Friday, July 20, 2007
x2svg 1.1 released
Today version 1.1 of x2svg has been released. Notable changes are:
* x2svg can now be run as ant tasks
* more output file types (eps, jpg, png, tiff, pdf) supported
* It is now easier to do mass convertions of svg files or input formats (The svg to xxx converter can be used standalone)
* added an alpha quality XML Schema parser
Check it out and: please give feedback!
* x2svg can now be run as ant tasks
* more output file types (eps, jpg, png, tiff, pdf) supported
* It is now easier to do mass convertions of svg files or input formats (The svg to xxx converter can be used standalone)
* added an alpha quality XML Schema parser
Check it out and: please give feedback!
Tuesday, July 10, 2007
Real Benchmark on Postgres
Sun submitted results of the SpecJAppserver benchmark running on Glassfish and Postgres.
Josh Berkus discusses the results at his blog: http://blogs.ittoolbox.com/database/soup/archives/postgresql-publishes-first-real-benchmark-17470.
The benchmark results can be found here.
Congratulations to the whole team that made this possible. It is a big sign that Postgres is in fact fast (other than what urban legends are always trying to tell).
Of course no one has that configuration 'at home' and I would recommend JBossAS anyway :), but anyway ... :-)
Josh Berkus discusses the results at his blog: http://blogs.ittoolbox.com/database/soup/archives/postgresql-publishes-first-real-benchmark-17470.
The benchmark results can be found here.
Congratulations to the whole team that made this possible. It is a big sign that Postgres is in fact fast (other than what urban legends are always trying to tell).
Of course no one has that configuration 'at home' and I would recommend JBossAS anyway :), but anyway ... :-)
Tuesday, June 12, 2007
Safari 3 (beta) rocks
Apple presented the new Safari version at WWDC yesterday. It is still a beta, but at least on the Mac it makes a great impression. It is blasting fast - if the server on the other side can deliver at that speed :)
There is now also a Windows version available, so PC users can now also use that great browser.
Ah and btw.: It now also has SVG support
There is now also a Windows version available, so PC users can now also use that great browser.
Ah and btw.: It now also has SVG support
Thursday, June 07, 2007
x2svg , first contributor
Today I got an email with patch for x2svg from a user. I am really pleased that finally someone is providing feedback - and then even in such a form.
Monday, May 28, 2007
x2svg 1.0 released
I am happy to anounce the first stable version of x2svg, a tool to
render tree like structures in scalable vector graphics (SVG).
Currently the following three input formats are supported:
- Document Type Definition (DTD)
- Java properties files
- ant build-files
Please check out the release information at Freshmeat.
And as always: please provide me with feedback, bug reports etc.
render tree like structures in scalable vector graphics (SVG).
Currently the following three input formats are supported:
- Document Type Definition (DTD)
- Java properties files
- ant build-files
Please check out the release information at Freshmeat.
And as always: please provide me with feedback, bug reports etc.
Sleepless in Stuttgart - the second month
Marlene is now two month old. I have been at home for a month as paternitiy leave, as this is now quite nicely supported with the new Erziehungsgeld from the Government. Also my team lead at Red Hat was quite forthcoming on this topic.
Nights are getting better and better.; the intervals between feeding Marlene are getting longer and somtimes reach 5 hours already. And even if this is not the case, it is relatively painless, as she seldom fully awakes.
As the days are now longer and the nights shorter, it is rather Orlando who doesn't want to go to bed in the evening and wakes up too early in the morning.
I am back at work since last Wednesday and found my way back into the code. For our JBoss ON, we now have a nice gui based installer which is also I18N'ed with (some) German messages. It's fun to see this.
As written in the previous post I was also able to create a tools to render DTDs in SVG. Even if I don't plan to write a new book in the near future, I am interested in finding a solution that could be used in such a project.
Over the bank holiday a week ago, we made a family trip to the town of Weikersheim, stayed at a Framhouse and made some trips into the surroundings.
Nights are getting better and better.; the intervals between feeding Marlene are getting longer and somtimes reach 5 hours already. And even if this is not the case, it is relatively painless, as she seldom fully awakes.
As the days are now longer and the nights shorter, it is rather Orlando who doesn't want to go to bed in the evening and wakes up too early in the morning.
I am back at work since last Wednesday and found my way back into the code. For our JBoss ON, we now have a nice gui based installer which is also I18N'ed with (some) German messages. It's fun to see this.
As written in the previous post I was also able to create a tools to render DTDs in SVG. Even if I don't plan to write a new book in the near future, I am interested in finding a solution that could be used in such a project.
Over the bank holiday a week ago, we made a family trip to the town of Weikersheim, stayed at a Framhouse and made some trips into the surroundings.
Tuesday, May 15, 2007
Kindergarden Dad
Yesterday I spent the morning at the kindergarden of Orlando. Parents have the possibility to stay there to lurk around and see what the kids are doing. As I am currently at home, I took this opportunity.
And I must say that I don't regret it. It was very interesting. For the start the kids are in the courtyard. At 9:30 they go upstairs in the group room, drink tea, eat some fruit and talk about different things. Then they have one hour / 1:30 from 10am on to play at various places or paint or build things etc. At 11:30am lunch starts where the kids pick the meal themselves. After lunch, they
uncloth, go to the bathroom and then to bed for a little nap.
That was the point in time where I left again.
Orlando was very proud that his dady stayed at the kindergarden.
It's also interesting how children's brains work. They asked "Do you stay in kindergarden today?" Me: "Yes" They: "Then you are a baby, because babies stay in kindergarden". Or course they don't consider themselves as babies :-)
And I must say that I don't regret it. It was very interesting. For the start the kids are in the courtyard. At 9:30 they go upstairs in the group room, drink tea, eat some fruit and talk about different things. Then they have one hour / 1:30 from 10am on to play at various places or paint or build things etc. At 11:30am lunch starts where the kids pick the meal themselves. After lunch, they
uncloth, go to the bathroom and then to bed for a little nap.
That was the point in time where I left again.
Orlando was very proud that his dady stayed at the kindergarden.
It's also interesting how children's brains work. They asked "Do you stay in kindergarden today?" Me: "Yes" They: "Then you are a baby, because babies stay in kindergarden". Or course they don't consider themselves as babies :-)
Thursday, May 10, 2007
x2svg first beta release available
A few days I wrote that I will release my dtd2svg tool as open source.
Meanwhile I refactored the code, fixed some bugs and also wrote a properties parser to visualize properties files.
As there are now not only DTDs accepted, I also renamed the project to x2svg, as I plan to add more parsers in the future.
You can grab the source distribution from here.
To build you also need fop and dtdparser, which need to be present in the lib folder.
Those can be obtained from
Have a look at the readme.html file in the doc/ directory of the distribution about details on how to install and run the tool.
x2svg is released under the LGPL.
Meanwhile I refactored the code, fixed some bugs and also wrote a properties parser to visualize properties files.
As there are now not only DTDs accepted, I also renamed the project to x2svg, as I plan to add more parsers in the future.
You can grab the source distribution from here.
To build you also need fop and dtdparser, which need to be present in the lib folder.
Those can be obtained from
- DTDParser: from Mark Wutkas page at wutka.com. Use the 1.21
version. - FOP: from Apache at xmlgraphics.apache.org. Pick a 0.93 version
Have a look at the readme.html file in the doc/ directory of the distribution about details on how to install and run the tool.
x2svg is released under the LGPL.
Monday, May 07, 2007
SVG on Mac OS X
In a recent post I wrote that Safari on the Mac does not know about svg natively.
Inspired by a blog entry by Jeff Schiller, I just downloaded a nightly snapshot of Webkit, the browser engine behind Safari.
This snapshot is already quite well able to render svg on screen, even if it is not yet complete, as you can see on this chart.
Inspired by a blog entry by Jeff Schiller, I just downloaded a nightly snapshot of Webkit, the browser engine behind Safari.
This snapshot is already quite well able to render svg on screen, even if it is not yet complete, as you can see on this chart.
Sunday, May 06, 2007
Visit to a historic iron mine
Today we made an excurs to an abandonned iron mine in Aalen-Wasseralfingen (around 80km from Stuttgart). The mine itself has been shut down after WWII and is now open for visitors. With little trains one drives into the 400m into the mountain. After a little film about the history of the mine and its general layout, one walks for about 800m through the mine and gets a very good impression why it is a good idea to wear a helmet.
The tour gives a very good impression under what bad conditions our ancestors were pulling iron ore out of the mountains, and it is a perfect occasion to go there when kids start to learn about those things in school.
The tour gives a very good impression under what bad conditions our ancestors were pulling iron ore out of the mountains, and it is a perfect occasion to go there when kids start to learn about those things in school.
Saturday, May 05, 2007
Where does organic food come from?
For quite some time now, we're getting each week a box delivered that contains organically grown fruit and vegetables. Our supplier is a company called Laisacker from about 30km outside of Stuttgart.
A nice thing about the box is that they put each week fruits and veggies from the current season in, which might be items that we would not buy ourselves, but which will always taste very well :) Laiseacker is growing much of the stuff themselves or buying it at regional partners. In total that organically grown food tastes very good.
Yesterday we made an excurison to the company, as they invited their customers to have a peek. For children there have been various stations to play or to get face painted. The adults could drink a coffe and look at how the boxes are packaged.
A nice thing about the box is that they put each week fruits and veggies from the current season in, which might be items that we would not buy ourselves, but which will always taste very well :) Laiseacker is growing much of the stuff themselves or buying it at regional partners. In total that organically grown food tastes very good.
Yesterday we made an excurison to the company, as they invited their customers to have a peek. For children there have been various stations to play or to get face painted. The adults could drink a coffe and look at how the boxes are packaged.
SVG resources
Holger and Juliane have a cool repository of SVG related resources, nice drawings in svg and (gui) components done in XML, XSLT and SVG. Among those are e.g. Login-Boxes rendered in SVG or various versions of bar charts processed in SVG.
All this is available at www.treebuilder.de.
Note that for visiting the site, you need a browser that is svg capable like Firefox or a SVG plugin for the browser (as for Apple Safari).
All this is available at www.treebuilder.de.
Note that for visiting the site, you need a browser that is svg capable like Firefox or a SVG plugin for the browser (as for Apple Safari).
Thursday, May 03, 2007
DTD2SVG reloaded
In a past article I wrote about drawing DTDs in SVG in order to convert them to PDF later.
Recently I found some time to work on this matter again (actually I got inspried to do so as I saw that Batik and FOP are making some progress as well). The code is still somewhat *ehm* ugly, but I think the result is already not bad:

I plan on releasing the code in the open source in the next few weeks, so one can use and adopt it to its own needs. Also one of the more interesting features would be to allow for parsing of XML Schema as well.
Recently I found some time to work on this matter again (actually I got inspried to do so as I saw that Batik and FOP are making some progress as well). The code is still somewhat *ehm* ugly, but I think the result is already not bad:
I plan on releasing the code in the open source in the next few weeks, so one can use and adopt it to its own needs. Also one of the more interesting features would be to allow for parsing of XML Schema as well.
Sunday, April 29, 2007
Sleepless in Stuttgart - the first month
Marlene is now one month old. She and her mom are all right. Nights are as expected 'shorter' than before. Currently Marlene wakes up every two hours and wants to drink. But intervals are starting to get longer.
Also during the day she wants to be close to me or her mom. Luckily we have a baby-sling (see e.g. http://www.didymos.de/english/index_e.htm) so the one looking after her can have both hands free (actually while I a writing this, she is in the baby-sling).
Her older brother Orlando is very excited about his baby sister and likes her very much.
Last wednesday her 3th medical examination ("U3") took place and everything is ok with Marlene.
Stay tuned for another month of "Sleepless in Stuttgart" :-)
Also during the day she wants to be close to me or her mom. Luckily we have a baby-sling (see e.g. http://www.didymos.de/english/index_e.htm) so the one looking after her can have both hands free (actually while I a writing this, she is in the baby-sling).
Her older brother Orlando is very excited about his baby sister and likes her very much.
Last wednesday her 3th medical examination ("U3") took place and everything is ok with Marlene.
Stay tuned for another month of "Sleepless in Stuttgart" :-)
Thursday, March 15, 2007
Nice new Red Hat videos
Yesterday Red Hat Entreprise Linux 5 was released. And for this release, Red Hat also produced some nice new videos, that you can now find on YouTube: http://www.youtube.com/results?search_query=red+hat+real+technology+lesson&search=Search. The videos are also available on Red Hat website
Friday, February 16, 2007
Slides from JUGS Talket online
The (German) slides from my yesterday talk at Java User Group Stuttgart are online at bsd.de/e3fu/ as PDF.
Wednesday, February 14, 2007
Eclipse 3.2.1 performance patch
I was recently complaining that Eclipse is taking a nap after a right-click before displaying the context menu.
When looking for an updated Findbugs plugin the update manager also offered me an update called
"Eclipse Java Development Tools 3.2.1 performance patch (bug: 159325) 1.0.0", which is related to the this bug :
https://bugs.eclipse.org/bugs/show_bug.cgi?id=159325
After installing the Patch, the context menu appears again directly after a right click without any nap.
So this was no problem with the Mac or the Apple VM, but with Eclipse which I only never saw before in Win* times as I was not using such a big workspace together with Eclipse 3.2.1.
According to the bug notes, this is also fixed in 3.3.M2 and - as I understand it - an upcoming 3.2.2 maintenance release.
When looking for an updated Findbugs plugin the update manager also offered me an update called
"Eclipse Java Development Tools 3.2.1 performance patch (bug: 159325) 1.0.0", which is related to the this bug :
https://bugs.eclipse.org/bugs/show_bug.cgi?id=159325
After installing the Patch, the context menu appears again directly after a right click without any nap.
So this was no problem with the Mac or the Apple VM, but with Eclipse which I only never saw before in Win* times as I was not using such a big workspace together with Eclipse 3.2.1.
According to the bug notes, this is also fixed in 3.3.M2 and - as I understand it - an upcoming 3.2.2 maintenance release.
Timestamp comparision oddities
Yesterday a colleague of mine ran into a problem where code like this produced a ClassCastException:
av is a domain class in JPA with endTime like this
and someDate being a java.util.Date.
This just worked on my Mac, but failed for one colleague, while others had no problem.
Looking under the covers turned out that av.getEndTime() actually returned a java.sql.Timestamp, which in java versions between 1.5.0_00 and 1.5.0_06 (including) were suposed to throw a CCE when the argument of compareTo() is a Date. Interstingly before() and after(), which also compare, did not have this restriction.
In Java Version 1.4.x the CCE was also not present and SUN seems to have it changed back to the original behaviour in 1.5.0_07. Unfortunately the manual page was not updated, adding to the confusion.
This blog entry also talks about this problem. Sun has a list of page about incompatibilities where this problem is listed. Unfortunately, the original bug report is not accessible (to me).
Some people argue that one should write own comparators, but I think it is easier to update to a newer version of the JDK. Of course if the software gets shipped to customers, one needs to make sure the customer also has 1.5.0_07 at least.
.. av.getEndTime().compareTo(someDate);
av is a domain class in JPA with endTime like this
@Temporal(TemporalType.TIMESTAMP)
java.util.Date endTime
and someDate being a java.util.Date.
This just worked on my Mac, but failed for one colleague, while others had no problem.
Looking under the covers turned out that av.getEndTime() actually returned a java.sql.Timestamp, which in java versions between 1.5.0_00 and 1.5.0_06 (including) were suposed to throw a CCE when the argument of compareTo() is a Date. Interstingly before() and after(), which also compare, did not have this restriction.
In Java Version 1.4.x the CCE was also not present and SUN seems to have it changed back to the original behaviour in 1.5.0_07. Unfortunately the manual page was not updated, adding to the confusion.
This blog entry also talks about this problem. Sun has a list of page about incompatibilities where this problem is listed. Unfortunately, the original bug report is not accessible (to me).
Some people argue that one should write own comparators, but I think it is easier to update to a newer version of the JDK. Of course if the software gets shipped to customers, one needs to make sure the customer also has 1.5.0_07 at least.
Tuesday, February 13, 2007
Elvis^Wmarcf has left the building
Now it is official. Marc Fleury, founder of JBoss has retired from his position as SVP JBoss division at Red Hat. Many suspected this when he started to take his paternity leave. There are numerous posts around this like e.g. from Sacha Labourey.
I think it is a pitty, as Marc was a brilliant visionaire. I will aways remember when I was at the Advance Training in Paris in 2003. Juha and Adrian were teaching about various aspects (no pun intended) of the system (it was ealy 3.2 time) when Marc was coming into the room, watching the two for a minute and then running to the front of the room, saying "Forget all the bullshit - now we're doing it the AOP way". And then he started to draw on the flip chart his ideas about interceptors, applying pointcuts etc. Many students in the course have been very irritated, but for me this was really great stuff.
As I am a dad myself I can very well undertand that Marc is now taking care of his kids and his other interests. Some have even seen him as DJ Red Baron. And if you want to know what Marf is up to, you can visit his blog, where he can now freely comment on various things. Also something that he couldn't really do as founder of JBoss or SVP at Red Hat.
Marc, I wish you well - hope we meet again.
I think it is a pitty, as Marc was a brilliant visionaire. I will aways remember when I was at the Advance Training in Paris in 2003. Juha and Adrian were teaching about various aspects (no pun intended) of the system (it was ealy 3.2 time) when Marc was coming into the room, watching the two for a minute and then running to the front of the room, saying "Forget all the bullshit - now we're doing it the AOP way". And then he started to draw on the flip chart his ideas about interceptors, applying pointcuts etc. Many students in the course have been very irritated, but for me this was really great stuff.
As I am a dad myself I can very well undertand that Marc is now taking care of his kids and his other interests. Some have even seen him as DJ Red Baron. And if you want to know what Marf is up to, you can visit his blog, where he can now freely comment on various things. Also something that he couldn't really do as founder of JBoss or SVP at Red Hat.
Marc, I wish you well - hope we meet again.
Saturday, February 10, 2007
A totally subjective comparision of Eclipse 3.2.1 and IDEA 6.0.4
As most of the project I am working on are using IntelliJ IDEA, I thought to give it a try as well. This was not easy, as I am a long term Eclipse and derivates (Rational XDE) user. But on my MacBook, Eclipse is often taking naps when e.g. right clicking in the navigator or package view. I find this behaviour very annoying. And yes, I already have 2GB Ram in the box and I am giving Eclise half a gig for the heap, which doesn't need according to this memory usage bar. IntelliJ just feels much snappier.
This are the differences I found so far:
Eclipse:
IDEA:
The comparision ends 0:0. If both were free then I'd just change around all the time. Using IDEA for hacking and Eclipse to find errors in the code
What do you think? And yes, there is also NetBeans. But this is not used in our project and I don't want to go through the process of setting up the project structure in it.
This are the differences I found so far:
Eclipse:
- Better problem view. It shows all errors in the project if I e.g. break a method signature
- Only one version of Ctrl-Space for autocomplete. I don't want to remember if I need to press alt-ctrl-space or shift-ctrl-space etc. for a given situation
- Many more plugins
- Plugins and features are often based on other huge features (e.g. EMF)
- More than one main window. This is cool when you e.g. are working on transitioning a project from EJB2 to EJB3 or spring. On one monitor you have an Eclipse window with the old code and on the other monitor you have the new code. And on both monitors you can use Overview-view or Package explorer for the class just shown. It also helps when you just want to see a referenced class for the code you are working on. Splitting the window in more tab groups isn't the same.
- Quick-fixes seem to do a better work for my typos
IDEA:
- Changelists are an extremely cool feature if you are working at different parts of the project you don't want to commit together
- Snappier than Eclipse (probably because it does no incremental compilation of the entire code base)
- cmd-D in Changes View is very handy to see what one has done to a file.
- Much better code smell detection.
- Nicer UI look and feel (native Mac, I am not talking about some Motif styles etc.
- Commit dialog is better arranged (probably due to the changelists). But the "show me the last commit messages" is hidden (cmd-m)
- If one is programming in an EJB-2 project, Idea is able to follow calls into EJBs, as it knows through ejb-jar.xml which interface classes belong to which EJB. This is extremly helpful. It seems that there is a plugin for Eclipse that can do this as well.
- The "Scope: Problem" view doesn't really work for me. Probably because IDEA does no incremental compile of the sources. If I change a class in the domain (remove a method) then classes in the GUI that access this method are not displayed as having an error until I open them. Eclipse shows me the GUI-classes directly upon save of the domain class.
- Struts support is nice
- Editors for HTML and other 'Web technologies' are better than what you find in a plain eclipse (one can download the WTP stuff to get this as well)
The comparision ends 0:0. If both were free then I'd just change around all the time. Using IDEA for hacking and Eclipse to find errors in the code
What do you think? And yes, there is also NetBeans. But this is not used in our project and I don't want to go through the process of setting up the project structure in it.
EJB3 alpha feature from IBM / Bea compliant
While in the past big blue was not too enthusiastic about EJB3, they now have an alpha version of EJB 3 support online.
It only works with WAS 6.1, but neverthless.
This means that EJB3 support is very widthspread now so that it will definitively become a widely accepted standard.
It is also interesting that vendors that haven't really been on the early adopters radar like SAP have one of the first certified implementations.
[update]
Bea announced that they are now also Java EE 5 compliant. See the post on TheServerSide.com. So Java EE and EJB 3 support by the big vendors is now also coming along. As many others I think this is a good thing even if I would have liked JBossAS to be the first.
It only works with WAS 6.1, but neverthless.
This means that EJB3 support is very widthspread now so that it will definitively become a widely accepted standard.
It is also interesting that vendors that haven't really been on the early adopters radar like SAP have one of the first certified implementations.
[update]
Bea announced that they are now also Java EE 5 compliant. See the post on TheServerSide.com. So Java EE and EJB 3 support by the big vendors is now also coming along. As many others I think this is a good thing even if I would have liked JBossAS to be the first.
Monday, February 05, 2007
Amazon finally has it - or not?
Tuesday, January 23, 2007
Yippie!
I just got a copy of my EJB3 book in my mailbox. It is again a great feeling to actually have the printed copy in the hands.
One can get sort of a feeling when one print it out on the laser printer, but having the real book is still different.
Amazon still shows it as unavailable, but this should change within the next few days. All those who preordered a copy will also soon get it.
I still need to add a few things to the accompanying web page, but I'll do this in the next few days.
Here is a picture with my copy:

Technorati: EJB3
One can get sort of a feeling when one print it out on the laser printer, but having the real book is still different.
Amazon still shows it as unavailable, but this should change within the next few days. All those who preordered a copy will also soon get it.
I still need to add a few things to the accompanying web page, but I'll do this in the next few days.
Here is a picture with my copy:
Technorati: EJB3
Star imports
When pepole asked me why star imports are bad, I didn't really know what to answer. Usually I was talking about parsing time and so.
And actually IDEs like Eclipse or IntelliJ even offer to reorganize individual imports into star imports (I think IntelliJ does this as default).
Today I was doing a bigger refactoring and was moving packages around.
Eclipse is doing a really good job here.
Unfortunately I was getting compile errors afterwards, because the old packages did no longer exist.
The reason behind this is that a refactoring is a textual replacement and not a semantical. Example:
Now you move foo.Foo to baz.Foo. Eclipse adds the new import baz.Foo statement, but does not remove
foo.*, as is does basically not know that foo.* no longer exists (it could analyze all statements in the class and
automatically remove unused imports afterwards though).
And actually IDEs like Eclipse or IntelliJ even offer to reorganize individual imports into star imports (I think IntelliJ does this as default).
Today I was doing a bigger refactoring and was moving packages around.
Eclipse is doing a really good job here.
Unfortunately I was getting compile errors afterwards, because the old packages did no longer exist.
The reason behind this is that a refactoring is a textual replacement and not a semantical. Example:
import foo.*;
public class Bar {
Foo f;
}
Now you move foo.Foo to baz.Foo. Eclipse adds the new import baz.Foo statement, but does not remove
foo.*, as is does basically not know that foo.* no longer exists (it could analyze all statements in the class and
automatically remove unused imports afterwards though).
Monday, January 15, 2007
EJB 3 book, talklets at Stuttgart Java User Group
My EJB 3 book will probably be in stores starting on 26th of this month.
Within the next month, the Java User Group Stuttgart will host two EJB 3 talklets
As usual, everyone is invited to join those sessions.
Technorati: EJB3
Within the next month, the Java User Group Stuttgart will host two EJB 3 talklets
- 25.1.06: Sun evening - presentations about Java SE 6 and EJB 3.0 from a Sun computers perspective.
- 15.2.06: Broader look into EJB 3 - presentation about EJB 3, existing Appserver and some tips and tricks on using EJB 3
As usual, everyone is invited to join those sessions.
Technorati: EJB3
Tuesday, January 09, 2007
Using a printer on the mac from Windows
Recently I was struggling with printing from Win*. Samba was set up nicely, but Win users were not able to print. I tried lots of different things, but no success.
Googling around brought me to http://members.cox.net/18james/osx_printer_sharing.html#ipp
Especially the section about IPP near the bottom was very helpful. With it I was able to configure the Win machines within a few seconds.
As all newer Win* version support this, I'd say this is the recommended way to print from Win* on a printer attached to a Mac.
Googling around brought me to http://members.cox.net/18james/osx_printer_sharing.html#ipp
Especially the section about IPP near the bottom was very helpful. With it I was able to configure the Win machines within a few seconds.
As all newer Win* version support this, I'd say this is the recommended way to print from Win* on a printer attached to a Mac.
Tuesday, January 02, 2007
Samsonite suitcases can break
Do you remember when you first found out that your dad does not know everything or that Santa Claus does not exist?
I hat the same experience when returning from my trip to Philly and saw that two out of three Samsonite suitcases had cracks on the side as you can see here and here.
Unfortunately those suitcases can not be reparied as it seems that single parts are no longer available and the cost of the repair would be higher than that of new suitcases.
I hat the same experience when returning from my trip to Philly and saw that two out of three Samsonite suitcases had cracks on the side as you can see here and here.
Unfortunately those suitcases can not be reparied as it seems that single parts are no longer available and the cost of the repair would be higher than that of new suitcases.
Tuesday, December 05, 2006
EJB 3 book in typesetting phase
It's nearly done .. last night I finished to work in the results of the spell checking.
Now the book is in the typesetting phase after which it will go to the printer.
Expect it to be in a store near you end of January / start of February.
*smile*
Now the book is in the typesetting phase after which it will go to the printer.
Expect it to be in a store near you end of January / start of February.
*smile*
Thursday, November 23, 2006
Final cover of my EJB-3-book online
As I wrote before, the final draft of my book is at dpunkt.
They now also have the final cover design online. Unfortunately, Amazon is no yet this fast as you can see here
They now also have the final cover design online. Unfortunately, Amazon is no yet this fast as you can see here
JBoss World Berlin
I had the luck to be in Berlin at JBossWorld for the last three days. This was a great event. I met many of my colleagues. The party at the eWerk was great and everyone enjoyed the event. The only downside was that I was not able to stay a little longer in Berlin for sightseeing purposes.
There is already some coverage of this event on the net, so I don't duplicate that, but merely link to it:
There is already some coverage of this event on the net, so I don't duplicate that, but merely link to it:
Friday, November 17, 2006
Parallel desktop for Mac, MacBook and special characters
Parallels Desktop for Mac is a great piece of software. You can run every other operating system for i386 architecture (yes includig vista).
On the MacBook, you usually have no external keyboard with a right alt key, so special characters such as
@, \, |, { , } , ... are on a MacBook with a German keyboard not usable on Rev 1970.
The following steps provided by Parallels support (extremly fast answer) allow you to map the
right enter key (of the emulated numeric keyboard) which sits between space and cursor-left to
AltGr like on ordinary pc keyboards.
After this you might reach @ on AltGr+q (German PC keyboard) with AltGr being mapped on this additonal enter key.
A feature version of Parallels Desktop might include a Preferences option to select this behaviour directly in the application.
Thanks again to Parallels support for this fast solution.
On the MacBook, you usually have no external keyboard with a right alt key, so special characters such as
@, \, |, { , } , ... are on a MacBook with a German keyboard not usable on Rev 1970.
The following steps provided by Parallels support (extremly fast answer) allow you to map the
right enter key (of the emulated numeric keyboard) which sits between space and cursor-left to
AltGr like on ordinary pc keyboards.
- Stop any running VMs, close all instances of Parallels Desktop for Mac.
- Launch ?Macintosh HD? - ?Applications? ? ?Utilities? ? ?Terminal?.
- Type the following commands in Terminal, please mind that the system might ask you for the Administrator password after each command ? type it and hit Enter:
- sudo touch /Library/Parallels/.keyboard_config
- sudo chmod 666 /Library/Parallels/.keyboard_config
- sudo echo "numenterisaltgr" > /Library/Parallels/.keyboard_config
- Close the Terminal.
- Launch Parallels Desktop for Mac and check Right Enter key behavior in VM ? everything should work as you?ve set.
After this you might reach @ on AltGr+q (German PC keyboard) with AltGr being mapped on this additonal enter key.
A feature version of Parallels Desktop might include a Preferences option to select this behaviour directly in the application.
Thanks again to Parallels support for this fast solution.
Wednesday, November 15, 2006
Final draft of my ejb3 book at the publisher
I just sent the final draft of my book to the publisher.
Next steps are professional spell checking, type setting and printing. So I expect it to be in stores end on January 2007.
Stay tuned :)
Next steps are professional spell checking, type setting and printing. So I expect it to be in stores end on January 2007.
Stay tuned :)
Thursday, November 02, 2006
Article on 64-bit vms at onjava
Good article about Java EE on 64 bit systems.
http://www.onjava.com/lpt/a/6781
http://www.onjava.com/lpt/a/6781
Wednesday, September 20, 2006
A few helpful java links
Java SE 5 has introduced Annotations, amongst other @SuppressWarnings. This posting on an Eclipse mailing list shows possible values for it.
Joseph Mocker from Sun has collected all the (hidden) options of the Sun Java VM.
Sun has an official page on hotspot VM options as well.
The list of options for the Mac OS X java vm are desribed in the Apple developer resources.
Joseph Mocker from Sun has collected all the (hidden) options of the Sun Java VM.
Sun has an official page on hotspot VM options as well.
The list of options for the Mac OS X java vm are desribed in the Apple developer resources.
Friday, August 18, 2006
Draft of my next book is at the publisher [updated]
I just submitted the draft of my upcoming next book to the publisher to start the review process.
You might wonder what it is about. Well it is about EJB 3.0 and targeted at readers who are already familiar with EJB 2.x and want to know the changes without repeatedly reading things that they already know about.
As there is no final title or cover etc, I can't give them at the moment. Stay tuned, as I will post some more later on.
Dpunkt.verlag is again my publisher, so you might also check out their page about upcoming titles for the anouncement and a link to the final page.
[Update]: Dpunkt has the book description (with the non-final cover) now online
You might wonder what it is about. Well it is about EJB 3.0 and targeted at readers who are already familiar with EJB 2.x and want to know the changes without repeatedly reading things that they already know about.
As there is no final title or cover etc, I can't give them at the moment. Stay tuned, as I will post some more later on.
Dpunkt.verlag is again my publisher, so you might also check out their page about upcoming titles for the anouncement and a link to the final page.
[Update]: Dpunkt has the book description (with the non-final cover) now online
Friday, August 11, 2006
How to outsmart lazy loading
A customer recently had a problem with his O/R mapping framework(*) that all relations between objects/classes were marked to be loaded lazily. Despite this setting, loading a class (either by direct access or via HQL) caused all related classes to be loaded and their related ones as well until the whole graph of attached objects was in memory. The trace of the generated SQL clearly showed this behaviour without any explanation.
Looking at the mapping files, the queries or the java code for the relations brought not explanation. Also the startup of the mapper did not show any errors. The customer even implemented equals() and hashCode().
After having a closer look at the later two methods, the problem came clear: Hibernate did in deed only load the starting class and not the relations (initially). But when putting the entity into the Session, Hibernate has to call equals() or hashcode() for its internal maps. Those two methods now have been implemented my using (amongst other) some relation fields. So in order to compute the hashCode(), the relation had to be loaded (which in turn loaded the next relations, as the hashCode() method on the other classes were implemented in a similar manner).
So actually Hibernate worked as designed :-)
The use of collections within hashCode()/equals() is problematic anyway: a Map uses it to determine the location of the entry. If the hashcode changes this location is no longer correct, which will lead to strange problems.
As a summary: don't only be careful with externally generated primary keys within equals() and hashCode(), but also with using collections.
(*) Actually this was with Hibernate, but the problem can also arise with JDO, JPA etc.
Looking at the mapping files, the queries or the java code for the relations brought not explanation. Also the startup of the mapper did not show any errors. The customer even implemented equals() and hashCode().
After having a closer look at the later two methods, the problem came clear: Hibernate did in deed only load the starting class and not the relations (initially). But when putting the entity into the Session, Hibernate has to call equals() or hashcode() for its internal maps. Those two methods now have been implemented my using (amongst other) some relation fields. So in order to compute the hashCode(), the relation had to be loaded (which in turn loaded the next relations, as the hashCode() method on the other classes were implemented in a similar manner).
So actually Hibernate worked as designed :-)
The use of collections within hashCode()/equals() is problematic anyway: a Map uses it to determine the location of the entry. If the hashcode changes this location is no longer correct, which will lead to strange problems.
As a summary: don't only be careful with externally generated primary keys within equals() and hashCode(), but also with using collections.
(*) Actually this was with Hibernate, but the problem can also arise with JDO, JPA etc.
Tuesday, July 04, 2006
CS Paper Generator
Have a look at the following and create a paper with it if you want a great laugh:
SCIgen - An Automatic CS Paper Generator
SCIgen - An Automatic CS Paper Generator
Wednesday, June 28, 2006
Importing Thunderbird mails in Microsoft Outlook and Outlook Express
It might sound strange, but sometime it is necessary to migrate from Thunderbird to Outlook.
Robert Ploschek explains in his blog how this can be done:
Robert Peloschek aka Unic0der: Importing Mozilla Thunderbird mails in Microsoft Outlook and Outlook Express
This actually works, but is somewhat cumbersome.
I guess if one has access to an imap server, it is easier to move everything onto the imap account and pull it over to outlook from there.
Robert Ploschek explains in his blog how this can be done:
Robert Peloschek aka Unic0der: Importing Mozilla Thunderbird mails in Microsoft Outlook and Outlook Express
This actually works, but is somewhat cumbersome.
I guess if one has access to an imap server, it is easier to move everything onto the imap account and pull it over to outlook from there.
Saturday, May 27, 2006
[mac] OmniGraffle - Diagram successor?
Some of you probably remember the drawing software Diagram on the NeXT computer. Years ago I used that to draw all the graphics for my diploma thesis. Since then I have never found such a good drawing program. Now I stumbled over
OmniGraffle and it looks like this is the successor of diagram. I downloaded the professional version to try it out and the very first steps already look familiar. When you add a few shapes on screen, it just looks good. PDF export works also like a charm and it has a SVG export as well. The latter two are very important for me, as I want the best quality of the drawings when writing a book or an article.
So if you need a drawing program on the mac you should check out OmniGraffle - this is definitively a good option.
OmniGraffle and it looks like this is the successor of diagram. I downloaded the professional version to try it out and the very first steps already look familiar. When you add a few shapes on screen, it just looks good. PDF export works also like a charm and it has a SVG export as well. The latter two are very important for me, as I want the best quality of the drawings when writing a book or an article.
So if you need a drawing program on the mac you should check out OmniGraffle - this is definitively a good option.
Sunday, May 21, 2006
2 cache presentations upcoming at SIG-JBoss
SIG-JBoss of Java User Group Stuttgart will soon have two presentations about caching technologies:
19. Juni, Cameron Purdy: Distributed Caching ... Lessons Learned
13. Juli, Bela Ban: JBossCache
Both presentations will start at 6:30pm and will be hosted at the
VRS building at Kronenstr. 25, Stuttgart.
There will be separate invitations to those events, but: keep an open slot for them in your calendar.
19. Juni, Cameron Purdy: Distributed Caching ... Lessons Learned
13. Juli, Bela Ban: JBossCache
Both presentations will start at 6:30pm and will be hosted at the
VRS building at Kronenstr. 25, Stuttgart.
There will be separate invitations to those events, but: keep an open slot for them in your calendar.
JAVA:JAVA-CAMP2006 - Rootserver
A few guys from Sachsen-Anhalt are doing a Java-Bootcamp.
Check out their webpage.
Check out their webpage.
This sucks
Andy writes in his blog that the mentionned webmail client doesn't suck.
But then
- it is written in Flash!
- is is written in a version of Flash that Andy can not even use on his Linux computer.
I don't get it...
But then
- it is written in Flash!
- is is written in a version of Flash that Andy can not even use on his Linux computer.
I don't get it...
Thursday, May 04, 2006
JBoss 4.0.x plugin for Eclipse WTP [updated]
The Eclipse WTP 1.0 only has a server definition for JBoss 3.2.3 which is quite old (3.2.x is at x=8.sp1 and 4.0.x is at x=4).
The webseite at the following link gives an explanation on how to build a definition for 3.2.5
How to build a JBOSS 3.2.5 Server Definition for Eclipse Web Tools Platform
If you want a definition for 4.0.x, you can just follow the document - it is quite detailed.
I have also provided a org.eclipse.jst.server.generic.serverdefinitions_1.0.0.zip that contains a definition for 4.0.3sp1 as well.
Don't forget to run eclipse -clean or you won't see the fruit of your work.
[Update]
The config is still not yet complete. There are a few libraries missing that are needed for starting the server from within eclipse.
When those are included, there is still a problem with parsing of login-config.xml
As the server starts nicely standalone, this seems to be a eclipse related problem.
The webseite at the following link gives an explanation on how to build a definition for 3.2.5
How to build a JBOSS 3.2.5 Server Definition for Eclipse Web Tools Platform
If you want a definition for 4.0.x, you can just follow the document - it is quite detailed.
I have also provided a org.eclipse.jst.server.generic.serverdefinitions_1.0.0.zip that contains a definition for 4.0.3sp1 as well.
Don't forget to run eclipse -clean or you won't see the fruit of your work.
[Update]
The config is still not yet complete. There are a few libraries missing that are needed for starting the server from within eclipse.
When those are included, there is still a problem with parsing of login-config.xml
org.jboss.security.auth.login.ParseException: Encountered "Was expecting one of:
<EOF>
<IDENTIFIER> ...
As the server starts nicely standalone, this seems to be a eclipse related problem.
Tuesday, May 02, 2006
Hacking JBoss snmp-adaptor
I'v been hacking JBoss snmp-adaptor in the last few days, providing support for
get and set operations. The code currently is only available in cvs head, as it still needs some tweaking. Dimitris set up a forum to discuss the adaptor and a possible mib. Please contribute to the discussion. Tell me / us your needs.
get and set operations. The code currently is only available in cvs head, as it still needs some tweaking. Dimitris set up a forum to discuss the adaptor and a possible mib. Please contribute to the discussion. Tell me / us your needs.
Thursday, April 13, 2006
JBossXB - X/O-Mapping made easy
JBossXB is part of the JBoss application server, but will also be used in other projects. As far as I understand, it will be moved to a "common" paltform, so that it can be used separately. Currently you can find it in jboss-common-client.jar.
If you have a simple structure like
<list-of-foo>
<foo>
<bar>
<baz>
</foo>
<foo>
...
</list-of-foo>
You basically need a POJO for <foo> and a few lines of code to get things parsed into a list with all Foo-objects.
Alexey has quite some documenation on the wiki page for it.
If you have a simple structure like
<list-of-foo>
<foo>
<bar>
<baz>
</foo>
<foo>
...
</list-of-foo>
You basically need a POJO for <foo> and a few lines of code to get things parsed into a list with all Foo-objects.
Alexey has quite some documenation on the wiki page for it.
Monday, April 10, 2006
Is it still April 1st?
Wow, I am confused by the announcement that RedHat is buying JBoss. Does anyone have a clue what this means (other that some VCs get a good bonus on their invested money)?
Sunday, February 26, 2006
Two day course at FHT Esslingen
On March 7th and 8th I'll give a two day course at the University of Applied Science Esslingen (FH Esslingen). Title is "J2EE mit JBoss".
Planned agenda is:
Planned agenda is:
- Software layers and views on them
- Architektur JBoss
- Install, Directories and files
- Lab 1
- Services of a J2EE-Server
- Lab 2
- Intro into EJB 3
- Lab 3
Monday, February 20, 2006
Outdated/incorrect docu is worse than no documentation
I was struggling with this How to use JDBC and transactions in Tomcat with JOTM. JOTM was always throwing java:comp away after the first request (the first lookup went through nicely). Thanks to a bug report from Matt Raible, I found out that carol now needs more options in the property file:
While browsing more tracker items, more and more things come clear.
Please: update the documentation if you make such big changes in a project. Wrong documentation is worse than none.
carol.protocols=jrmp
# do not use CAROL JNDI wrapper
carol.start.jndi=false
# do not start a name server
carol.start.ns=false
# use the apache naming factory
carol.jndi.java.naming.factory.url.pkgs=org.apache.naming
While browsing more tracker items, more and more things come clear.
Please: update the documentation if you make such big changes in a project. Wrong documentation is worse than none.
Saturday, January 28, 2006
EJB3 session visibility
EJB3 started with the claim to reduce the artefacts needed to program with EJBs. Unfortunately if you want to expose a SessionBean locally *and* remotely, you start to either list all business methods in a POJI for the local interface and the same again in an interface for the remote view. If you update the session bean class by a new method, you need to remember to update both interface files (this calls again for generators like Xdoclet ...)
Another variant to acheive the same result is by using the following view pattern:

In this case you only list the business methods in the "Business" interface. IRemote and ILocal are only marker interfaces that just extend the "Business" interface and which carry the respective annotation:
This way extending the session bean by new methods just means to update one additional file. Unfortunately this yields again four artefacts for this task, which is far from simple.
Are there better ways to do this?
Another variant to acheive the same result is by using the following view pattern:
In this case you only list the business methods in the "Business" interface. IRemote and ILocal are only marker interfaces that just extend the "Business" interface and which carry the respective annotation:
package foo;
import javax.ejb.Local;
@Local
public interface ILocal extends Business {
// empty
}
This way extending the session bean by new methods just means to update one additional file. Unfortunately this yields again four artefacts for this task, which is far from simple.
Are there better ways to do this?
Tuesday, January 24, 2006
LaTeX on Rail
Ever wondered how to graphically represent EBNF?
There are some packages out there that can produce so called Railroad diagrams.
Phillips has a package called Elegant (you can see some examples in this document)
Then there is LaTeX-style rail.sty online, where the results are quite ok as well (the png image is scaled to 600pt in width, so the real quality is better) :

So, how does one read the diagram? For the start form left to right :-) Words in rounded boxes are terminals (i.e. words that you put literally in your code) Words in normal boxes are non-terminals that refer to other diagrams. A construct like in the start with "AVG", "MAX", ... is a switch statement, where you can choose one ot the options. You will see that above "DISTINCT" is a line without a box. This means that "DISTINCT" is optional.
And this is basically all about reading those diagrams.
Unfortunately, this package does not directly know about the 'ususal' EBNF syntax ( AggreagateExpression ::= ....), but uses its own, which looks like the following for the above example
Perhaps I am going to write some translator between the formats in Perl ...
There are some packages out there that can produce so called Railroad diagrams.
Phillips has a package called Elegant (you can see some examples in this document)
Then there is LaTeX-style rail.sty online, where the results are quite ok as well (the png image is scaled to 600pt in width, so the real quality is better) :
So, how does one read the diagram? For the start form left to right :-) Words in rounded boxes are terminals (i.e. words that you put literally in your code) Words in normal boxes are non-terminals that refer to other diagrams. A construct like in the start with "AVG", "MAX", ... is a switch statement, where you can choose one ot the options. You will see that above "DISTINCT" is a line without a box. This means that "DISTINCT" is optional.
And this is basically all about reading those diagrams.
Unfortunately, this package does not directly know about the 'ususal' EBNF syntax ( AggreagateExpression ::= ....), but uses its own, which looks like the following for the above example
AggregateExpression : ("AVG" |"MAX" |"MIN" |"SUM")
(
(
'DISTINCT' ? StateFieldPathExpression
) | 'COUNT'
(
'DISTINCT' ? IdentificationVariable
| StateFieldPathExpression
| SingleValuedAssociationPathExpression
)
)
;
Perhaps I am going to write some translator between the formats in Perl ...
Thursday, January 12, 2006
Java Magazin - Internet & Enterprise Technology - Buch-Tipps
German Javamagazin has a review of my JBoss book in the current issue and also online.
Sounds good to me :-)
Sounds good to me :-)
Tuesday, January 03, 2006
Presentation at Hochschule Heilbronn
On 25th of january I will give a presentation at Hochschule Heilbronn. From their website:
Heiko W. Rupp, Autor des ersten deutschsprachigen JBoss-Buches, wird einen Gastvortrag bei uns halten. Thema seines Vortrages im Studiengang Software Engineering: Die interne Architektur von JBoss.
Start 25-01-2006 14:00
End 25-01-2006 15:30
Where A311 - Hochschule Heilbronn
Tuesday, December 27, 2005
I just left project Xdoclet
I just left project Xdoclet. The basic reason for this is that I just lack the time to contribute any more to this. I try to update my JBoss book, write a new book (this is still a secret :-) and I also have to take care some more of my son, who currently is in a somewhat exhausting age. And then I have a day job as well.
In fact I did not contribute anything to the project within the last half year. Also from current employments etc. the need for Xdoclet is somewhat vanishing with with the new Java 5 annotations.
I still think Xdoclet is a very fine thing and it did help me a lot in the past.
So everyone still involved with it: keep up the good work.
In fact I did not contribute anything to the project within the last half year. Also from current employments etc. the need for Xdoclet is somewhat vanishing with with the new Java 5 annotations.
I still think Xdoclet is a very fine thing and it did help me a lot in the past.
So everyone still involved with it: keep up the good work.
Wednesday, December 21, 2005
EJB3 proposed final draft is out
The proposed final draft of ejb3 is out.
You can find it at the jcp page
You can find it at the jcp page
Thursday, November 24, 2005
iX-Conference on Better Software is over
I spent the last two days on the iX-conference on better software in cologne.
This conference had a different target audience than W-Jax where I have been last week.
Two highlights definitively have been the keynotes by Tom de Marco and Nilaus Wirth. De Marco was talking about why some companies are faster than others. Reasons are (amongst others) meetings that are held like ceremonies, intra company email spam or presentations that convey no information at all. He also identified the addiction to status reports as one of the retarding factors. All in all a very good presentation.
Niklaus Wirth, who became professor of computer science a year before I was even born, gave a retrospective of that time and about some values that have been lost. He clearly indicated that a (very) good formation is one of the ways to better sofware.
I my self had the luck to talk about tools that can help building better software, why this fails and what you can do about it. My boss was giving a talk about agile quality management and AspectQ.
One of the results of the many presentations is for me that the human factor is getting more and more important.
Nearly all tracks of the conference have been of high quality. Also the catering was good this time as oposed to last week. I am definitively looking forward to the next iX-Conference.
This conference had a different target audience than W-Jax where I have been last week.
Two highlights definitively have been the keynotes by Tom de Marco and Nilaus Wirth. De Marco was talking about why some companies are faster than others. Reasons are (amongst others) meetings that are held like ceremonies, intra company email spam or presentations that convey no information at all. He also identified the addiction to status reports as one of the retarding factors. All in all a very good presentation.
Niklaus Wirth, who became professor of computer science a year before I was even born, gave a retrospective of that time and about some values that have been lost. He clearly indicated that a (very) good formation is one of the ways to better sofware.
I my self had the luck to talk about tools that can help building better software, why this fails and what you can do about it. My boss was giving a talk about agile quality management and AspectQ.
One of the results of the many presentations is for me that the human factor is getting more and more important.
Nearly all tracks of the conference have been of high quality. Also the catering was good this time as oposed to last week. I am definitively looking forward to the next iX-Conference.
Wednesday, November 16, 2005
W-Jax is over
I've been the last two days at W-Jax conference in Munich. I only took a few sessions as I did quite some talking with conference participants. Overall it was quite interesting and I am sure that I will go to one of the next (W-)Jax conferences as well. In fact I just submitted some proposals for sessions on upcoming Jax in May 2006.
The sessions I participated in were
- EJB 3.0 by Oliver Ihns. At least parts of the presentation seemed to be based on the early draft and not of the public review version. So this might be confusing to some listeners.
- News in JBoss 5 (my own presentation)
- a few keynotes. In one of those, given by a tool vendor, there was the comparision between the software industry and the car industry with its assembly lines. 'd say, that this part of the development process has been solved in it as well. It just means putting software on cd and putting the cd into a nice little card box.
- a session on "why developers can't listen and domain guys can't develop" by two OOse gyus. This was a very good presentation about the needed soft skills in projets. Many projects don't fail because of technical reasons but e.g. because the developer is running in short through a bank where everyone is wearing a suit.
- (partially) in model driven software development by Markus Völter. Markus really has a clue about how to give good presentations. Also the content was very interesting. Unfortunately I had to run off to meet a client offsite.
- "How reliably is WS-reliability" by Marcel Tilly of Innoq. Well, this was hard stuff, but nevertheless interesting. The baseline was that if you want to use an upcoming standard in webservices, use it only if it is supported by IBM and/or Microsoft.
In total the atmosphere of the conference was good and there were intersting sessions and good food :-) The only real bad thing was that the hotel where the conference took place was not able to provide enough stuff to drink. And we are not talking about alcoholic beverages, but about soda water and coke etc.
The sessions I participated in were
- EJB 3.0 by Oliver Ihns. At least parts of the presentation seemed to be based on the early draft and not of the public review version. So this might be confusing to some listeners.
- News in JBoss 5 (my own presentation)
- a few keynotes. In one of those, given by a tool vendor, there was the comparision between the software industry and the car industry with its assembly lines. 'd say, that this part of the development process has been solved in it as well. It just means putting software on cd and putting the cd into a nice little card box.
- a session on "why developers can't listen and domain guys can't develop" by two OOse gyus. This was a very good presentation about the needed soft skills in projets. Many projects don't fail because of technical reasons but e.g. because the developer is running in short through a bank where everyone is wearing a suit.
- (partially) in model driven software development by Markus Völter. Markus really has a clue about how to give good presentations. Also the content was very interesting. Unfortunately I had to run off to meet a client offsite.
- "How reliably is WS-reliability" by Marcel Tilly of Innoq. Well, this was hard stuff, but nevertheless interesting. The baseline was that if you want to use an upcoming standard in webservices, use it only if it is supported by IBM and/or Microsoft.
In total the atmosphere of the conference was good and there were intersting sessions and good food :-) The only real bad thing was that the hotel where the conference took place was not able to provide enough stuff to drink. And we are not talking about alcoholic beverages, but about soda water and coke etc.
Sunday, November 13, 2005
Review of my JBoss book in c't magazine
German c't magazine has a review of my JBoss-Book in its current issue (24/2005) on page 228.
Friday, November 11, 2005
Upcoming speaking engagements
Hi,
I'll give presentations
I'll give presentations
- at W-Jax in Munic on 15.11.2005 14:30 on News in JBoss5
- at iX-Konferenz in Cologne on "Better software quality through tools". This is on 22.11.2005 17:25 (see http://www.ix-konferenz.de/showabstract.php?vid=481&stylesheet=style/konf0502.php)
- FH Rosenheim on 14.12.2005
Wednesday, October 26, 2005
JSE 5 and UML
As Java EE 5.0 is upcoming and Java SE 5 even out for quite some while, I was looking into UML-Tools that would help in reverse engineering those new language features as well. Older Tools from the Pre JSE 5 aera just insist that annotations and generics are errors :)
So I came over Omondo EclipseUML This is nicely integrated into Eclipse 3.1 and builds on GEF and EMF.
And best of all: it is able to export UML-Diagrams as SVG! This is something the good old Together6 was able to do and which Rose and XDE were not able to.
So if you 're looking into UML and Java SE 5, you really should have a look at Omondo EclipseUML
So I came over Omondo EclipseUML This is nicely integrated into Eclipse 3.1 and builds on GEF and EMF.
And best of all: it is able to export UML-Diagrams as SVG! This is something the good old Together6 was able to do and which Rose and XDE were not able to.
So if you 're looking into UML and Java SE 5, you really should have a look at Omondo EclipseUML
Friday, September 23, 2005
Introduction to JBoss Seam
JBoss guys - as I understand mostly Gavin King and Thomas Heute have written an Introduction to JBoss Seam. From a first glance at it this is a real neat document.
It looks like JBoss Seam has a good future to become a de facto standard for webapp development.
The funny part about JBoss Seam is that with it, there will be no more seamless development and integration. Nice marketing trick. Hey, who hat the idea to this name?
It looks like JBoss Seam has a good future to become a de facto standard for webapp development.
The funny part about JBoss Seam is that with it, there will be no more seamless development and integration. Nice marketing trick. Hey, who hat the idea to this name?
Wednesday, September 14, 2005
iPod dropout killer
Lately after the Stuttgart-Lauf, I started again with jogging. I thought that it might be a good idea to have my iPod with me. I had it in my trouser pocket on the backside, as I don't like carrying things in my hand when jogging. After about half an hour, the iPod had some drop-outs which led it into a state where a soft reset was needed or a soft reset did no help and I had to wait until home to plug it into the power supply to do a hard reset.
Since then I bought a sports wrap to attach the iPod to my upper arm. Since I have the sports wrap, I had no more drop-outs on the iPod.
Of course, the iPod shuffle and iPod nano don't need this as they flash based and do not need to access a hard disk to load the songs into memory.
Since then I bought a sports wrap to attach the iPod to my upper arm. Since I have the sports wrap, I had no more drop-outs on the iPod.
Of course, the iPod shuffle and iPod nano don't need this as they flash based and do not need to access a hard disk to load the songs into memory.
Thursday, September 01, 2005
JBoss rock solid under load
In the last days, I was able to run some syntetical load tests on a Sparc V490 with 4 dual-core cpus, having 16GB or RAM and running Solaris 9. As the target system will be JBoss 3.2.6, we tested against this one.
Tests were conducted with JDK 1.4 and JDK 5.0, having a separate machine firing http requests at the JBoss.
JBoss was rock solid, even when the test app first had an error, not removing stateful session beans, thus passivating thousands of beans.
As expected, garbage collector settings have a huge impact on the overall performance. With bad settings we were only able to saturate two cpus, while with the right ones we kept all 8 cores busy.
Also JDK 5.0 performs a lot better than JDK 1.4 (which was expected anyway).
We also found out, that top on solaris has a bug, only displaying at most 999 lwp, even if a process has much more of them.
For someone usually only having one to two cpus at his hands, this was a nice occasion to play with a "big iron" (yeah, I know that this still is a small box).
Tests were conducted with JDK 1.4 and JDK 5.0, having a separate machine firing http requests at the JBoss.
JBoss was rock solid, even when the test app first had an error, not removing stateful session beans, thus passivating thousands of beans.
As expected, garbage collector settings have a huge impact on the overall performance. With bad settings we were only able to saturate two cpus, while with the right ones we kept all 8 cores busy.
Also JDK 5.0 performs a lot better than JDK 1.4 (which was expected anyway).
We also found out, that top on solaris has a bug, only displaying at most 999 lwp, even if a process has much more of them.
For someone usually only having one to two cpus at his hands, this was a nice occasion to play with a "big iron" (yeah, I know that this still is a small box).
Tuesday, August 23, 2005
Job opportunities @ syngenio
My employer, syngenio AG, currently has several job openings in it four branch offices.
Most offerings are around J2EE but also around Lotus Notes/Domino.
So if you know Java, EJB, JBoss, Websphere, portals etc. then come and join us.
The offerings are described on the job page.
We also have an offering for a student worker to support us in project KOMPASS. This is a research project around service oriented architectures and webservices.
Most offerings are around J2EE but also around Lotus Notes/Domino.
So if you know Java, EJB, JBoss, Websphere, portals etc. then come and join us.
The offerings are described on the job page.
We also have an offering for a student worker to support us in project KOMPASS. This is a research project around service oriented architectures and webservices.
Sunday, August 21, 2005
Webservices in JBoss5
In my book I complained that setting up webservices in JBoss4 (and not only there) is soft of a PITA.
Thomas Diesler recently posted about the new Webservices stack for JBoss.
With JBoss5 from CVS (not yet released as alpha) it really is as simple as Thomas described it. Just put a few JSR-181 annotations in your SessionBean, deploy them and you are done.
Thomas: keep up the good work!
Thomas Diesler recently posted about the new Webservices stack for JBoss.
With JBoss5 from CVS (not yet released as alpha) it really is as simple as Thomas described it. Just put a few JSR-181 annotations in your SessionBean, deploy them and you are done.
Thomas: keep up the good work!
Wednesday, August 17, 2005
Next SIG-JBoss meeting
The next SIG-JBoss meeting will take place on 1st september at Alte Scheuer, Stuttgart-Degerloch. The following link lists the aganda:
Java User Group Stuttgart e.V. - Veranstaltungen
Java User Group Stuttgart e.V. - Veranstaltungen
Friday, July 22, 2005
Two days in Nürnberg
The last two days I have been in Nürnberg, doing JBoss consulting for my employer, syngenio.
I have (besides changeing tracks at the main station) never been in Nürnberg before and I am really impressed by their old city centre. Most of it has been rebuilt after WWII, as 90% of it was destroyed in the last months before the end of the war. At the northern end of the city center sits the old emperor castle on the top of a hill. Parts of it are always opened and from up there one has a splendid view on the city centre.
When rebuilding the city, they luckily did not commit too much sins by deconstructing good substance and replacing it by faceless 70th buildings. This propbably is also the reason that you can see many tourists from all over the world.
On the Hauptmarkt there currently is the big football by André Heller. This ball is a marketing instrument for the upcoming soccer world championchips next year in Germany.
The ball is supposed to be shown in twelve German cities until then.
Unfortunately, I can't tell what is in there, as it is only open from 10am to 6pm - business hours :-/
I have (besides changeing tracks at the main station) never been in Nürnberg before and I am really impressed by their old city centre. Most of it has been rebuilt after WWII, as 90% of it was destroyed in the last months before the end of the war. At the northern end of the city center sits the old emperor castle on the top of a hill. Parts of it are always opened and from up there one has a splendid view on the city centre.
When rebuilding the city, they luckily did not commit too much sins by deconstructing good substance and replacing it by faceless 70th buildings. This propbably is also the reason that you can see many tourists from all over the world.
On the Hauptmarkt there currently is the big football by André Heller. This ball is a marketing instrument for the upcoming soccer world championchips next year in Germany.
The ball is supposed to be shown in twelve German cities until then.
Unfortunately, I can't tell what is in there, as it is only open from 10am to 6pm - business hours :-/
Saturday, July 16, 2005
[svg] Inkscape
Inkscape is another svg drawing program. First impressions are quite good. Actually it is a spin-off from Sodipodi, which tries to be more SVG-centric.
Unfortunately it seems to have the same text placement code as Sodipodi, which results in the same svg as described in an earlier blog entry.
Unfortunately it seems to have the same text placement code as Sodipodi, which results in the same svg as described in an earlier blog entry.
Friday, July 15, 2005
Press release about myself
This press release is probably the first one about myself :-) It has been issued by my new employer, syngenio AG, where I am working on JBoss related things like trainings and consulting. The press release can also be found on the press releases page on the syngenio website.
Saturday, July 02, 2005
syngenio summer event
As some already know, I recently joined syngenio AG in Stuttgart after having left Cellent. At syngenio I will work in areas like JBoss training, consulting and support.
This weekend we had a summer event in Imst, Austria, where all syngenio workers came together. Besides eating, drinking, some workshops and talks by members of the board, the main attraction was rafting of the Inn river, which was organized by Lemming Tours.
This raftig tour took about one and a half hours and took us around 14 km by water. This was great fun. On one side the group feeling and on the other side that one safely made it to the finishing point (there was no danger, but I guess everyone was a little bit afraid, as rafting on wild water isn't really a consultants daily job).
So as summary of the summary: great! :-)
This weekend we had a summer event in Imst, Austria, where all syngenio workers came together. Besides eating, drinking, some workshops and talks by members of the board, the main attraction was rafting of the Inn river, which was organized by Lemming Tours.
This raftig tour took about one and a half hours and took us around 14 km by water. This was great fun. On one side the group feeling and on the other side that one safely made it to the finishing point (there was no danger, but I guess everyone was a little bit afraid, as rafting on wild water isn't really a consultants daily job).
So as summary of the summary: great! :-)
Wednesday, June 29, 2005
Eclipse 3.1 is out -- and unavailable
Eclipse 3.1 finally has been released. So far for the good news.
The bad news is that the eclipse download page is unavailable (no obvious mirrors). Searching through mirrors like the German one at fht-esslingen do not yet have the complete download as they seem to compete with downloaders around the world for the sparse capacity out of the main eclipse download page.
Perhaps the eclipse foundation should have asked the NetBSD guys how they do it. At NetBSD, when a release is finished, it will be published on the ftp server where only mirrors can pick it up. Later (after a day or two) the directory is opened for the whole public. This worked for years now.
Perhaps with eclipse 3.2 ...
The bad news is that the eclipse download page is unavailable (no obvious mirrors). Searching through mirrors like the German one at fht-esslingen do not yet have the complete download as they seem to compete with downloaders around the world for the sparse capacity out of the main eclipse download page.
Perhaps the eclipse foundation should have asked the NetBSD guys how they do it. At NetBSD, when a release is finished, it will be published on the ftp server where only mirrors can pick it up. Later (after a day or two) the directory is opened for the whole public. This worked for years now.
Perhaps with eclipse 3.2 ...
Friday, June 24, 2005
1. JUGS SIG JBoss Meeting
Yesterday was the first meeting of the SIG Eclipse within the Java User Group Stuttgart (JUGS).
Thomas Diesler of JBoss, Webservices lead and the person responsible for J2EE 1.4 certification, gave a presentation about the upcoming EJB3 standard and some JBoss specific additions to it (like e.g. Annotations for MBean definitions). He also talked about the upcoming POJO-container that Adrian is currently working on.
After his presentation, we had Pizza, sponsored by Janine Eastwood of JBoss and a Q & A session afterwards.
Later on we talked about the future of the SIG and the interests of the individual SIG members. Next SIG meetings will be on 1.9.2005 and 3.11.2005 again at the Alte Scheuer in Degerloch.
Last but not least there was a vodka tasting organized by the three russian guys from iMedic.
It was a good first meeting with about 50 attendees.
Of course I had a printed copy of my JBoss book with me for attendees to glance at it.
Thomas Diesler of JBoss, Webservices lead and the person responsible for J2EE 1.4 certification, gave a presentation about the upcoming EJB3 standard and some JBoss specific additions to it (like e.g. Annotations for MBean definitions). He also talked about the upcoming POJO-container that Adrian is currently working on.
After his presentation, we had Pizza, sponsored by Janine Eastwood of JBoss and a Q & A session afterwards.
Later on we talked about the future of the SIG and the interests of the individual SIG members. Next SIG meetings will be on 1.9.2005 and 3.11.2005 again at the Alte Scheuer in Degerloch.
Last but not least there was a vodka tasting organized by the three russian guys from iMedic.
It was a good first meeting with about 50 attendees.
Of course I had a printed copy of my JBoss book with me for attendees to glance at it.
Monday, June 20, 2005
Schumi is our hero.
Now, as Ferrari no longer dominates Formula 1, they can only win when fourteen other drivers just don't start, as (amongst others) reported by La Times in Grand Prix Is Where Rubber Meets Road.
So Michael Schumacher only had to compete against the underpowered teams like Minardi and he was even able to win then.
Lets celebrate Schumi and his victory!
NOT!
So Michael Schumacher only had to compete against the underpowered teams like Minardi and he was even able to win then.
Lets celebrate Schumi and his victory!
NOT!
Sunday, June 19, 2005
iX-Eclipse-Conference
Tuesday and Wednesday I have been on the iX-Eclipse-Conference in Heidelberg. Besides giving a talk myself on plugin development, I met some nice people, had fun and did learn quite some new things on Eclipse.
Erich Gamma did a keynote presentation on Eclipse 3.1 news. One of the things I remembered, was his description on how the team made sure that Eclipse 3.1 got faster in respect to 3.0. Basically, they set up a series of unit tests, which measured the runtime of some code and compared it to some reference timing (pseudocode):
So this fitted in the framework, one is used to.
More important, they did learn a lesson: It is not enough to measure things, but to have someone (e.g. the community) to kick ass if there is too much red in the results.
Erich Gamma did a keynote presentation on Eclipse 3.1 news. One of the things I remembered, was his description on how the team made sure that Eclipse 3.1 got faster in respect to 3.0. Basically, they set up a series of unit tests, which measured the runtime of some code and compared it to some reference timing (pseudocode):
public void testFoo()
{
startTimer();
runSomeCode();
endTimer();
commitTimingResultToDatabase();
assertFaster();
}
So this fitted in the framework, one is used to.
More important, they did learn a lesson: It is not enough to measure things, but to have someone (e.g. the community) to kick ass if there is too much red in the results.
Tuesday, June 07, 2005
Apple - Intel deal
In addition to my comment at Otaku, Cedric's weblog: What Steve isn't telling us
I think that Apple just needs some more time to e.g. offer new iBooks that are at least that performant than the average Centrino one, but still consume less energy.
By the way: when do you really need to care about byte ordering anyway? It is mostly only relevant when you want to access hardware directly (i.e. device drivers) or you want to use some assembler code to speed up compilation or when you design a new lower level networking protocol where you want some well known 'on the wire ordering'.
If you just write normal apps in C, Objective C or Java you don't care at all.
And for the other apps it is not that hard as for example NetBSD or mcntp prove.
Universal binaries are available for Mac OS X for the last 10 years. Ok, it was called NeXTStep at that time though :-)
So go and google for 'fat binaries' and 'NeXT' to see what is available.
No one prevents you from supplying an app in three flavours:
- fat
- ppc
- intel
I guess, for Apple this is one of the few ways to survive. With the nice centrino chpisets, even Win* notebooks are not too bad these days. And they are way cheaper anyway.
The porting bit is not too hard if you ever contributed to an OSS like NetBSD. So I beleive that the Mathematica port only took two hours.
I think that Apple just needs some more time to e.g. offer new iBooks that are at least that performant than the average Centrino one, but still consume less energy.
By the way: when do you really need to care about byte ordering anyway? It is mostly only relevant when you want to access hardware directly (i.e. device drivers) or you want to use some assembler code to speed up compilation or when you design a new lower level networking protocol where you want some well known 'on the wire ordering'.
If you just write normal apps in C, Objective C or Java you don't care at all.
And for the other apps it is not that hard as for example NetBSD or mcntp prove.
Sunday, June 05, 2005
Stuttgart-Lauf
Like last year I participated in the Stuttgart-Lauf. This time - again without practicing - I was over two minutes faster on the 7,6km run (which lead to hand measured 44:19).
The event again was great fun, so I will try to participate next year again.
The event again was great fun, so I will try to participate next year again.
Friday, June 03, 2005
Eclipse plugin versions
While preparing my presentation for the upcoming iX-Eclipse-Conference, I also tried 3.1rc1 and thought to switch my example plugin to Java 5.
There currently is a problem when one of the plugins uses Java 2, the export wizard of eclipse doesn't work (See my comment on bug 84767).
But worse than this: there is no environment option to tell a user "this plugin needs Java 5" (98269). There are options for the OS or the windowing system used though.
So the recommendation is either to use a custom build with the right environment set or to restrict plugins to Java 2/JDK 1.4.
There currently is a problem when one of the plugins uses Java 2, the export wizard of eclipse doesn't work (See my comment on bug 84767).
But worse than this: there is no environment option to tell a user "this plugin needs Java 5" (98269). There are options for the OS or the windowing system used though.
So the recommendation is either to use a custom build with the right environment set or to restrict plugins to Java 2/JDK 1.4.
Subscribe to:
Posts (Atom)