Monthly Archives: March 2009

meet the experts

Knowledge Leadership is one of the core values of codecentric and a high standard for each of our team members. By introducing the 4+1 week, with one day for training and innovation each week, we have established a competitive advantage and with over 30 days of training we are far ahead of our competition. A year ago we have introduced so called “Friday Meetings” for internal knowledge transfer. Every last friday of a month we do an internal workshop with at least two presentations of our experts – or we invite an external speaker. This friday Mr. Wittwer from oose will present about “Agile Project Management”. Topics are in the areas of Java, Open Source, Architecturr, Agility and Performance. The big success of the “Friday Meetings” is both a result of the quality of the presentation and the open discussions we have after the meetings. Customers that joined our meetings also enjoyed the experts and the codecetric atmosphere. So in the last weeks we have asked ourselves: “Shouldn’t we make this concept open for public?” This idea resulted in “meet the experts” – a professional version of our “Friday Meetings” with the same values and principles. Every three month we will invite the best experts for a special topic – with a total of four presentations. After theses sessions we will organize an Open Space. An Open Space will give the attendees an opportunity to introduce new topics and problems, so that newly build groups can discuss these topics in separate locations. Beside the unique presentations of “meet the experts”, the event will give you the opportunity to talk with all the experts and to expand your network. Therfore we will provide our nice office in “Old Court of Solingen” and will have a catering team take care of all attendees the whole day and night. We have a lot of agile spaces in our offices, which include a very good library (see picture) and a lot of meeting space with whiteboards and flipcharts. Bibliothek im Dachgeschoss The first “meet the experts” will be held on 26th of June with “Performance” as it’s topic. We already can confirm that Dr. Heinz Kabutz, the Java Specialist and Kirk Pepperdine from javaperformancetuning.com will join us and present on performance topics. In addition to that Alois Reitbauer from dynaTrace and I will hold a presentation. Together with Alois I am writing the Java Performance Antipatterns articles that are published in the Java Magazin. We also hope that a lot of performance experts of our customers and other companies will join us, so that we’ll have good dicussions and an interesting Open Space. meet the experts - performance We hope to welcome you on our first “meet the experts” and we suggest to register quickly as the number of seats is limited. This year we plan two additional “meet the experts” – at the 4th of September for Agility and at 13th of November for Architecture topics. We would be very happy to get your feedback about what you think about “meet the experts” and which topics and experts you would like to see at these special events.

Mirko Novakovic

 

codecentric @ TheServerSide Java Symposium

tssjs1

tssjs2

TheServerSide is one of the big conferences in Java server technologies. Also in this year codecentric is on site to take away the newest technology trends. The conference, as in last year, takes place at the Caesars Palace Hotel in Las Vegas (Nevada, USA) – a very impressive City.

The technologies presented in the sessions are not as spectecular as expected and don’t show much new things. Most of it is well known and was shown on most previous conferences. Further on trends are scripting (Groovy, JavaScript inclusive GWT or JSON), cloud computing and SOA. For example Spring 3.0 is not very revolutionary. The most new features are part of the Spring-MVC project and not the Spring core. The bigger new feature is the posibility to configure the application programaticaly with new annotations like @Configuration and @Bean. For details see the blog of Jürgen Höller

The news that IBM is planning to buy Sun impressed Rod Johnson (SpringSource) to include this in his keynode. On his opinion such an acquisition would not have any influences on the Java technology world.

Furthermore he presented his theory that software complexity goes along with the economy. Also as the length of women’s skits goes along with economy. The more critical the economy is, the shorter the skirts are. Cite: “… I don’t think this actual recession is real, when I look across the streets of Las Vegas …”. The actual recession is a positive state for open source software. Open source is simpler and cheaper than poprietary software and should be the choose of today. Further on he sayed, that the traditional application server is going to die, because the trends are simplification of structures and configuration. Simpler servers as tomcat will get more popular, while it is popular anyway.

To burn down complexity is the moment of truth …

Thomas Bosch

 

SVN Rule: Don’t commit on a tag – unless it is not a tag!

Imagine yourself committing your sources to your subversion repository after a hard day’s work and having this message pop up:

svn-tag

Yikes! You are pretty sure you did modify the correct files and did not mess up your trunk/tag SVN meta files (again).

Relax, most probably it’s just your Subversive plug-in playing tricks on you. We recently updated one of our customer’s development environment to Ganymede with Subversive as the Subversion plug-in and encountered no problems so far. The only oddity that surfaced quite fast was this message.

Taking a closer look we noticed that Subversive’s method to check whether you are on a tag or not is not as smart as you might expect. Every time you try to commit something that has the string “tags” in it, subversive will complain. We have packages that contain JSP tags (com.acme.tags.FooTag), and every time we try to commit a change this warning pops up.

Obviously this is nothing to be afraid of, just confirm your commit and you are good to go. If you want to know why this irritating behaviour occurs, read on.

This part of the CommitAction class is responsible for the nag-screen:

if (SVNUtility.isTagOperated(allResources)) {
	TagModifyWarningDialog dlg = new TagModifyWarningDialog(this.getShell());
	if (dlg.open() != 0) {
		return;
	}
}

SVNUtility.isTagOperated() checks for the kind of the “root” of the resource to be committed.

if (((IRepositoryRoot)SVNRemoteStorage.instance().asRepositoryResource(resources[i]).getRoot()).getKind() == IRepositoryRoot.KIND_TAGS) {
	return true;
}

I put “root” in quotations, because one could argue what a “root” really is. Just ask yourself what the root of “/usr/local/share/svn/trunk/com/acme/tags/FooTag.java” is. I’d say it’s “/” or “/usr/” from a file system or “/trunk/” from a repository point of view. But SVNRepositoryResource.getRoot() thinks different:

public IRepositoryResource getRoot() {
	if (this.root == null) {
		IRepositoryResource parent = this;
		while (!(parent instanceof IRepositoryRoot)) {
			parent = parent.getParent();
		}
		this.root = (IRepositoryRoot)parent;
	}
	return this.root;
}

SVNRepositoryLocation.getParent() returns a specific object if the last segment of the URL path contains one of SVN’s keywords:

Path urlPath = new Path(url);
String name = urlPath.lastSegment();
 
if (location.isStructureEnabled()) {
	if (name.equals(location.getTrunkLocation())) {
		return new SVNRepositoryTrunk(location, url, SVNRevision.HEAD);
	}
	if (name.equals(location.getTagsLocation())) {
		return new SVNRepositoryTags(location, url, SVNRevision.HEAD);
	}
	if (name.equals(location.getBranchesLocation())) {
		return new SVNRepositoryBranches(location, url, SVNRevision.HEAD);
	}
}

Subversive treats the first occurrence as the root. Because of the package name name.equals(location.getTagsLocation()) matches and a SVNRepositoryTags object is returned.

Funny thing is that the SVNRepositoryTags class (which is of IRepositoryRoot.KIND_TAGS, of course) extends SVNRepositoryRootBase which implements IRepositoryRoot. Here we go, the while loop’s condition of getRoot() is no longer met, so it returns the current IRepositoryResource which leads to the positive return value of SVNUtility.isTagOperated() – even tough we a not working on a SVN tag.

This is a minor problem, because it just leads to a warning, not an error. IMHO going down all the way of the urlPath could solve to problem. The last occurrence of an instance of IRepositoryRoot should be used rather than the fist. This would also work for repositories regardless of the repository layout (global vs. per project trunk/tags/branches). Subversion implementations should not interfere with package layouts, even if SVN keywords are used.

Nick Prosch

 

© 2010 codecentric