Pages

Friday, June 27, 2008

JAZOON 2008, Post Mortem

I think that JAZOON'08 was a real success and this conference has a lot of potential in the future! We have to give a credit to Jürg Eberhard, Christian Frei and the rest for the outstanding organization!
What I really liked about the conference is that many presenters talked about the real projects and proposed solutions, instead of just talking about the standards, methodologies, frameworks, etc.
I would suggest this conference to my colleagues. Furthermore, the location is just right - Zürich - one of the nicest cities I have visited so far!

Long live JAZOON!

JAZOON 2008, Day 3

The keynote was given by Joshua Bloch, Principal Engineer at Google. In Effective Java Reloaded he presented some chapters from the 2nd edition of his book Effective Java. Joshua talked about generics, enums and concurrency.
After the talk he was signing the book, Effective Java - 2nd Edition, which was exclusively available at Jazoon'08. So now I have a pleasure happy to own the book signed by Joshua Bloch! :)


After I've got my book signed I went to listen about the new features in Eclipse 3.4. After the release of Ganymede, there are some very cool features which I probably would like to see in IntelliJIDEA too! :)

Next, Dan Allen was continuing with Seam Framework related talk It's evolution, baby! Bijection deplaces dependency injection. It is a very promising concept on bi-directional dependency management which is widely used in even the simplest Seam web applications.

Later, Heinz Kabutz has shocked crowd with his blizzard talk about threading in Java - The Secrets of Concurrency. No one couldn't even ask a question! :)
Here's one useful idiom that I managed to put down:
while(!Thread.currentThread().isInterrupted){
try {
Thread.sleep(100);
} catch(InterruptedException e){
Thread.currentThread().interrupt();
break;
}
}
It is funny that "idiom" and "idiot" are quite close - Heinz said :)
The last session I attended The Closures Controversy by Joshua Bloch. To be honest, I like closures ... outside Java! Really, if one is really eager to use these fancy syntactical constructs - there's JRuby, Groovy or Scala available - use them!
Here's just some of the facts I picked up from the presentation. Closures are/have:

  • hard to read

  • produce cryptic error messages

  • don't interact well with autocompletion

  • have two kinds of returns, whereas the real meaning of the return keyword has changed

  • unclear semantics

  • not thread safe


What is really wrong with the inner classes compared to closures? Only that you do not have to make a new class and don't have to create it with the new keyword? I think that inner classes are still better from what we could see with Java closures. Closures are for dynamic languages which can be used in conjunction with Java! So I'm strongly opposed to the idea of including this feature into Java language. Java has to stay clean! Unfortunately it has already been rubbished with the spoiled implementation of generic types :(

Wednesday, June 25, 2008

JAZOON 2008, Day 2

On the second day of JAZOON ...

The opening session

Rethinking Enterprise by Ted Neward (Neward & Associates) was a great introduction to the day! He pointed out the things that I'm talking about to all my relatives and friends - the education system sucks! The problem is that almost everything that we learn in school we forget. And this is just because of the system - we are presented with some theory and then we are tested on that theory using some problem statement, and after that - nobody cares.
One great statement I put down - "The problem and its solution are never apart". And this statement actually describes the problem above - at schools we are never forced to think beyond the theory which we just learned.
This was also a funny talk with some jokes about the "long-haired guy". This is a good one - Ted said (jokingly of course):
I know how to make copy-paste in PowerPoint, because I am an architect!
.


Open Architecture by Roy T. Fielding (Day Software). This was a little boring talk, but to say the least it was truly right talk. I mean all the things that Roy was talking about are valid I think - of how the open architecture matters for open source software, how the ecosystems work, etc.
Now I know what the Conway's Law is.
Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization's communication structure.

And also after Roy's talk I would like to try what can Apache Sling do.

Spring Framework 2.5 - Selected New Features, Juergen Hoeller (SpringSource). This was a neat overview of Spring's AOP and the new features that can be implemented with Java annotations. Basically I could read everything he talked about in the web, but it is quite nice to get it to know from "the source".

Then I attended the session called Stacking the deck by integrating Spring beans and Seam components by Dan Allen (TetraTech, Inc.). The point was that we can use Spring in co-operation with Seam in order to wire up JSF pages to the underlying beans, and this avoid using the expression language (EL). The talk was quite interesting and very technical too. It seems to me that the sessions that are somehow related to JBoss are the most interesting ones @ JAZOON.

JSR-303: From a world of Constraints to Constrain the world by Emmanuel Bernard (JBoss). Again, the JBoss related topic was just the right session to choose. Emmanuel was talking about the beans validation (JSR-303) which can be implemented using Java annotations. He also pointed out that there should be a clear separation between bean validation and conversion (and I do agree on that).

I noticed that theres a huge trend for most of the topics - the Java annotations. Almost in every presentations the authors wanted to implement things using annotation-based configuration. Perhaps, this is the real hype of meta-programming in Java community.

An interesting type of presentations is the one where the author is presenting a deployed solution and talking about the problems he faced while implementing the system. At the talk called Distributed client/server Java Persistence by Alexander Snaps (Axen/Alten Group) the author was presenting his solution for offline clients with centralized database. He also mentioned a new framework he implemented for this purpose - Hölchoko (need to have a look on it).

And the last session I attended was Cluster your POJOs with PojoCache by Bela Ban (JBoss). This was just perfect as always :).

Tuesday, June 24, 2008

JAZOON 2008, Day 1

The first day @ JAZOON is complete!

The opening session.

  • At the talk called The Challenge of Scalable Languages, Martin Odersky (the creator of Scala) was talking mainly about Scala language and how does it relates to Java. Explaining some of the design decisions for Scala (at last, I've got the answer for the silly declaration construct in Scala, i.e. var x: Int). There are many nice features in Scala I think. But I do not really understand why the operator overloading is brought in again?! Operator overloading was the feature that Java designers wanted to get rid of after C++, because when you read the A+B you cannot be sure weather the operands are really numbers.


  • Simon Phipps was talking about The Adoption-Led Market. He started with Sun's relation to open-source, continuing with open-source history and licensing. This was a good talk with a lot of funny stuff in it. The only question to Sun is that if Sun is so opened to open-source software, why did to closed the source of MySQL engine??


  • Next, Rod Johnson expressed a lot of criticism in respect to J2EE, JCP, etc in his talk Where will Tomorrow's Innovation Come From in Enterprise Java. For sure, he didn't forget to mention the Spring Application Platform :)


Next, Dmitri Buzdin was talking about his experiences with GWT adoption. I piked up that there are some difficulties with GWT, specially for developers who have less experience.

Against all odds - efficient Rich GUI development in Java. This was a talk about the rich UI development for a company called APG that is dealing with billboarding. The current solution was implementing Oracle Forms technology and as Forms is being deprecated, they decided to implement the rich client in Java with Swing.
So basically they were talking about the rewrite of UI without touching the back-end. As the result there's the direct connection from client to the database. I'm not sure how scalable new solution is, but the technology used for implementation is what amazed me the most. The UI is being generated based on meta-data described with some DSL. The framework used for this is the openArchitectureWare. The guys were claiming that this way they increased the development speed compared to the Oracle Forms. I think that the complete solution is a real crap. I can tell why. First, while the demo failed, they showed us the code - it was half-german, half-english code there, i.e. some methods were named in German which I think is a rally bad practice. Secondly, the technology stack which lead from the specification to the implementation is very unclear: if there will be an error, the application developer will be seeking for the problem all the day long instead of writing the real code. And last but not least, they did not finalize the project yet, so it was a little bit too early to talk about its success. I think even if the project gets finalized, if future the cost of maintaining this piece of software will be inadequate.
Perhaps I'm too rude in expressing my opinion to the solution some people may think is really good. May be it is just that I do not understand the MDA really well. So probably I'll take a look at it if it happens that I have nothing else to do :)

AJAX Push for Revolutionary Enterprise Applications presented by Micha Kiener (mimacom ag) and Ted Goddard (ICEsoft Technologies Inc.) was a nice presentation I enjoyed. The technology presented is quite innovative and it looks like pushing a new wave in the area of Web 2.0 application development. The keywords: Ajax Push, Comet, "Reverse Ajax", ICEFaces, Edoras, Servlet 3.0.

The NetBeans Day @ JAZOON

The real name for the event was NetBeans Day - Get to know the only Java IDE you need. I didn't expect it to be very interesting but at the end of the day I can say that there were a lot of good things to pick up from this tutorial. So what was it really about:

  • NetBeans new and Cool by Romal Strobl. At the talk Roman showed what are the new things that were added to NetBeans 6.1 and some tricks and tips how to use the IDE. From my point of view, NetBeans is just copying the best features from IntelliJIDEA and eclipse. The IDE looks nice, the features are reasonable, but isn't it plagiarism in respect to the other IDE vendors?! FWIW, personally I do like NetBeans even more that eclipse.

  • Isolating Performance Bottlenecks and Memory Leaks by Peter Gassmann. This was an in-depth review of NetBeans Profiler which is really easy to use, and specially with Java 6. I have to give it a try! :)

  • SwingApplication Framework and Beans Binding by Roman Strobl. This was about JSR-295 (Beans Binding) and JSR-296 (Swing Application Framework). In fact both of this specs look promising in sense of desktop application development. There's a very good suport for that in NetBeans also, which is cool! But what disturbs me is that in the resource injection, which is claimed to be "automatic", you have to write some code (e.g. call a method setName(String) for a Swing component that needs some some configuration. In my opinion this is not really automatic way to do things and there should be more elegant solution. Writing your own Java code to make things work "automatically" - this is kind of a stupid thing.

  • Incorporating Animation and Media using JavaFX by Rags Srinivas. I cannot tell why but I still being skeptic about JavaFX. It looks lika Sun is positioning JavaFX as a technology for cross-client UI development. That's OK. But as a language, JavaFX looks very odd. For small UIs it may be a nice tool, but I doubt that for the larger apps it will be very complicated to use and the code will be hard to follow. The technology is still in development and Sun promised to finalize it by the end of the year.

  • NetBeans Mobility by Roman Strobl. This is the most interesting feature in NetBeans perhaps that I have seen this time. Constructing the application workflow visually using NetBeans is something I was really missing at the days when I did some J2ME development. Definitely, if I'd had to develop and application for mobile phone today, I'd used NetBeans just for this feature! A very nice feature of NetBeans Mobility Pack is that it provides some basic support for game development, and this is something that I was missing the most!

Roman Strobl was the guy who made the day. The presentations were very well prepared and we gotta thank Roman for that :). The only thing that I would suggest is to add more live coding to the presentations.
So to conclude, I'm quite satisfied with the sessions and I've picked up some useful stuff as well.

Thursday, June 19, 2008

Java on Windows: Windows RegOpenKey(...) returned error code 2.

So we faced a strange warning message being pumped out to the console after deploying a brand new Java application to a Windows machine.
Jun 19, 2008 3:19:20 PM java.util.prefs.WindowsPreferences openKey
WARNING: Could not open windows registry node Software\JavaSoft\Prefs at
root 0x80000002. Windows RegOpenKey(...) returned error code 2.
Jun 19, 2008 3:19:20 PM java.util.prefs.WindowsPreferences WindowsRegOpenKey1
WARNING: Trying to recreate Windows registry node Software\JavaSoft\Prefs at root 0x80000002

After a quick search in google, I found that It might be a bug concerning the restricted users on Windows. There's two options to solve this problem:

  • Add use privileges, as described here.

  • Or, move to Java 5

I think we'll migrate to Java 5 :)

Wednesday, June 11, 2008

GSOC2008: GWT magic - Deferred Binding and Generators

While reading the book further, I realized that I do not need any special library for plugging new content editors to Guvnor.

Currently, the editors are instantiated via EditorLauncher class, which provides several static methods for working with the editors. Now, we could actually remove the static property, change EditorLauncher to be interface and instantiate EditorLauncher like this:
EditorLauncher launcher = (EditorLauncher) GWT.create(EditorLauncher.class)

This will actually force the EditorLauncher implementation to be generated at the compile time using our generator (which would be subclassed from com.google.gwt.core.ext.Generator). This cool feature of GWT is called deferred binding ...
... which works by resolving and inserting the required class during compile time instead of runtime, as is the case in the Java language.

Basically, the need for any external library is diminishing in this case.

Tuesday, June 10, 2008

GSOC2008: Reflection Libraries for GWT

GWT Reflection appeared to have GPL licence and thus cannot be incorporated into Drools code base :(
I've found another library which has the support for introspection/reflection of Java beans - Gwittir, which comes with LGPL, and thus can only be included as a jar, but actually it doesn't provide the functionality that could provide us the features for plugging the content editors via Java Reflection API. So anyway we need to extend it.
I think I better go my own path and re-implement the code generation myself. There are 2 reasons for that: I will have the better understanding of the mechanisms behind GWT, and also improve my commit rate for the project :)

Monday, June 9, 2008

Sunday, June 8, 2008

GSOC2008: GWT Reflection for Pluggable Content Editors in Guvnor

GWT Reflection is a cool project which inspired Mike for the idea of pluggable content editors for Guvnor (aka JBoss Drools BRMS). The challenge is that the content editors are selected on the client side and therefore we couldn't use Java's reflection API in order to enable the plug-in functionality. But with the GWT Reflection we can probably get as close as possible. GWT Reflection does a lot of what we need but most probably we'll need some more features and therefore I'm integrating it into Guvnor's codebase at the moment. I hope I will have some basic workflow ready next week. Stay tuned! :)

Disqus for Code Impossible