Java

Missing in Action from EclipseCon 2011

EclipseCon 2011 started today, with an awesome program of events going on over the week. I’ve attended the previous four instances of the conference, and had the signal honour to have been the Program Chair for EclipseCon 2010. Now, alas, I’ve lapsed. Instead of getting a nice easy job after my release from Progress last year, I’ve foolishly decided to startup a software business with a couple of guys. I hope this adequately explains my somatic non-presence at this years showcase of what’s wonderful in the Eclipse world. For example - if I was in California today, I would not have been able to load the mobile part of our product on the phone of a friend-of-a-friend who just happens to be attending a concert with the CEO of a division of a large cellphone company, with instructions to show it to this CEO and get a meeting for us. But if I was in California today, I would be enjoying beers with lots of people that are much smarter and much more dedicated than me.

It’s always a tradeoff.


Now that I have a brand new ‘user’ perspective, and am on the outside looking in, there are a few items within the Eclipse Ecosystem that are particularly interesting.

  • EGit - I’m using git exclusively now for source code control, and having good support is very important. I think that the real decision-maker on using git all the time are hosting services like Heroku and Nodester adopting git push workflows for application deployment.
  • DSL-based mobile device project scaffolding - projects like Applause and Applitude, both based on Xtext and mobl, based on Spoofax, can give you a chunk of starting point code to get your mobile application up and running on the cheap. I haven’t taken as much time to study these as I want to - a future blog entry I think.
  • Orion - when I first saw the Bespin project, which then merged with Ace and is now the development-as-a-service Cloud9 IDE, it failed to stir me. However, when I started doing some node.js project experiments, then the option of being able to edit your JS code through the browser suddenly had more appeal, precisely because now you can edit server code. It will be worth a blog entry in its own right at some point (aside - Mr. Orion, @bokowski, just linked to another one, Akshell, a minute ago)


I just realized the other day that the last piece of Java/Eclipse a programming I did was in July 2010. Since then I’ve been in this dual world of the mobile app developer - programming native code on iOS devices, programming Rails 3 and node.js on the server end of things, pushing data into PostGIS and Redis. I didn’t think I would end up here, but it’s been fun so far :) As to the future, I’ve refused to plan anything beyond world domination for the moment. But maybe I can get an Orion talk accepted for EclipseCon Europe

MyEclipseCon Tuesday

Talk about a late blog entry. I’m just enjoying this EclipseCon too much. Here’s my plan for Tuesday, that is today.

Keynote

Oracle will be (were) here to tell us about the future of Java. Multiple modularity systems (sigh) with some kind of paste on top to hide which one you are using, a nice JavaFX authoring tool that will allow you to create vibrating animated rockets and JDK 7 to be shipped as fast as possible.

Tutorial

It was a tough choice again - Server-side Web Applications, Anatomy of e4, Getting Started with EclipseRT, all sounded great, but I’m currently in the JDT Fundamentals tutorial, learning about the three pillars of JDT (java model, search engine, AST), the APIs of each and how to use them. It’s not by any means trivial, but it is definitely very cool. They have given so much thought to performance and cost of usage in the APIs. Kudos.

I made this choice because part of the work we did in Progress on a UI for Apache Camel included an Eclipse view that rendered the Camel route, based on the content of a Java editor where the developer was using the fluent builder APIs. We did this by walking the JDT AST and constructing a model that could be rendered. The result was a better user experience for people using Java as the route definition language - they could simply glance at the diagram of the route to ensure that the Java they were writing was correctly expressing their intent. I didn’t write this code, but I’d like to know how it works, and this JDT tutorial might help me with that (partial ASTs FTW, I think).

Talks


My first choice is Textual Modeling Tools: overview and penalty shoot-out. This is a comparison study of a number of text modeling tools. Top tip to presenters in the future - more of this kind of thing, please. Comparison studies are extremely valuable for developers and product managers that need to make technology choices. It’s even more important in a big wide space like the Modeling Project where there are many projects that appear to have overlapping capabilities.

Second talk - Documentation: Single-Sourcing, Crowd-Sourcing And Other Voodoo. Documentation is the Achilles heel of many Open Source projects. In a sweeping generalization, I hereby declare that developers like to focus on code and tests, and not so much the explanations in natural language. Couple this with a ‘read the code’ type of arrogance that sometime pops up and you have a project that has a serious bar to entry for new contributors. One thing that might help stave off that kind of situation is to have a very functional way to contribute documentation, thought out as a first-order plan rather than an afterthought, which permits the spreading of a wide net and makes it really really easy for contributors to add snippets and fix issues. Maybe there will be some solutions in this talk.

Talk three - one of those rarely-observed Extended Talks - OSGi Best and Worst Practices. I’ve been looking over zx’s shoulder as he has been putting this together and it looks like there is a bit of presentation zen going on with good dollop of humour as well as good, solid information, so looking forward to it.

Note to presenters: the primary purpose of a presentation is to entertain, the secondary purpose is to inform. Let’s face it - if you are not entertaining the crowd, they are going to get up and leave before you get a chance to give them data.

Talk number four is another Extended Talk, and it is definitely going to be Graphiti - The Graphical Tooling Infrastructure Speaking Plain Java. I am totally looking forward to this, because I’m a bit excited about this project and can’t wait to get my hands on it :)

Talk five - I can’t believe there will be this many talks - I’m not so sure about. Using JPA in OSGi might be the one - I have seen so many developers in trouble trying to get this running it would be good to know how to do it. The Towards Contributors Heaven: from CVS and SVN to EGit/JGit talk will be interesting, but I think I know that well enough. How to make a framework plugin that doesn’t suck could be good too - the speaker has a lot of experience in developing Eclipse tools. I don’t know if he will be wearing his Superman shirt for this gig, however.

Panels


I’ll be on the Build and Continuous Integration with Eclipse panel.

Unconference


I think I’ll do an Unconference presentation this evening, what topic, I don’t know just yet. Will decide during the Reception ;-)

Javapolis 2007 - The Techie Bits

mpis300x400.jpg

I’m just back from Javapolis in Antwerp. Javapolis is a conference put together by the BEJUG, Antwerp is a big city in Belgium and the second largest seaport in Europe . For a conference put together by a group of folks that are not pro conference makers, it was pretty impressive. The fact they have kept the price down to less than €300 is particularly amazing.

I was there to check out the conference, but even more importantly to get to have a chat with some of our new committers on the Eclipse SOA Tools Project. We’ve had a number of new components just added to source control (more about that in another entry) and now I was getting the chance to meet some of these developers for the first time. Even better, I got to hang out with Bruce Snyder, open source aficionado extraordinaire, and Stephen McNamara, a buddy of long standing and enterprise survivor.

First off the bat I had a chat with Mark Little whom you may know from JBoss ESB and the world of transactions in general. We marvelled at how world+dog is currently refactoring their {insert runtime tech of choice} to be composed platforms using OSGi bundles. This is going to be very interesting as it will open up the containers, which will hopefully bring more control to the customer platform developers on the one hand, and introduce with the other a whole raft of new interoperability issues :)

James Gosling’s keynote was a round-up of everything that has happened in Java land for the last year. It’s easy to see where his interest lies - realtime java and the spread of java-controlled devices, using SunSpots and similar tech. He also spoke of the mobile services architecture (JSR248) and how that was to be a “grown-up CLDC”. I polled a few individuals over the next few hours and there was a keen interest in seeing how Google and the OHA will eat Sun’s lunch on this one.

Key point for me was that mobility is coming of age at last, something like 2 years after we pulled our enterprise-mobility product. Timing is everything after all.

Netbeans 6 hit the presses during the week, and James was keen to point out some of the new and shinies in the bag. Enhanced mobility support was one thing, an holistic Java model that makes for keen context-sensitive refactorings, REST service development tools and advances in report design and generation were some of the things he mentioned. I’ll be looking at the REST tools, because we are developing REST tools in STP too, but the Eclipse refactoring and reporting facilities seem to be at least a couple of years ahead in terms of feature comparison. I’ve not using the mobility gear in Netbeans or Eclipse, so no comment on that.

He also mentioned JavaFX, and later on in the week I attended a talk/demo on it. It looked faintly interesting until I spoke to the guy sitting next to me. He had attended a talk at OSCON where the JavaFX demo was followed up by a Flex demo which blew it out of the water totally - the SUN demo person looked pretty squirmy by his account. Flex is very very impressive, but perhaps JavaFX may beat it on the phones.

ow2stand500x277.jpg

The guys from OW2 had a talk about all of the stuff that they have and how it can all be linked together. It had BPM, BAM, SOA, portals, workflow, monitoring and all other aspects of the enterprise buddha nature. My poor brain filled up early in the talk, so I will need to look into it in bite-size chunks later. I'm delighted that Eclipse STP counts among its committers a number of individuals that are involved in the OW2 community-- Christophe Hamerling, Adrian Mos, Andrea Zoppello, to name but a few and of course Alain Boulze, who is an STP PMC member.

In between the corridor work I managed to get to a few more talks. I experienced a good quality brain melt at Joshua Bloch's closures talk and attended a very informative talk on JSR311 and REST from Paul Sandoz. Andrea Zoppello did a very interesting demo on going from BPMN to runtime monitoring at the Eclipse stand and I got to catch up with the Eclipse stalwarts Wayne Beaton and Ralph Müller. In the photo below you can see the inimitable Bruce Snyder being totally mobbed by adoring geek fans after his talk on ServiceMix and Camel. [Note - picture is blurry due to awesome flux of worshippon particles]

ow2stand500x313.jpg

If you are in the market for a Java conference, and a bit short on budget, Javapolis is well worth your while, methinks. I would just ask them to do two things for next year - first, open up the program to allow submissions from whoever wants to submit java related stuff; second, put some evaluation sheets out there guys! That panel with Bloch, Gafter, Gosling, et alii was really really terrible! Having Bloch and Gosling waffle on about unsigned int for nearly 20 minutes was a total waste of time. Got to hand the beachball of blame to the moderator there - should have put the squeeze on them, Carl!

For photos, hit Flickr with a keyword search on JavaPolis.

An Infestation of Snails (was: Java Annotation Madness)

I was just reading an article on JPA, posted on TheServerSide. In it we see a simple 'real-world' example - a mocked-up blog application. The object model looked fine, the DB schema representation looked fine, but then I got to see the Java, annotated JPA-stylee.


import javax.persistence.*;

@MappedSuperclass
@EntityListeners({ModelListener.class})
public abstract class ModelBase {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="id")
    private Long id;

    @Version
    @Column(name="version")
    private Integer version;

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="created_by_user_id")
    private User createdByUser;

    @Temporal(value = TemporalType.TIMESTAMP)
    @Column(name = "date_created", nullable = false)
    private Date dateCreated;

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="updated_by_user_id")
    private User updatedByUser;

    @Temporal(value = TemporalType.TIMESTAMP)
    @Column(name = "date_updated", nullable = false)
    private Date dateUpdated;
    // methods removed for readability (LOL)
}

I got a bit of a chuckle out of the comment at the end of class declaration, but my overall feeling was one of giddiness at the sight of Annotations Gone Mad. It's fashionable, it appears, to bang in as many annotations as possible in Java 'frameworks'. If you have dealt with debugging C# webservices clients, you might recall the brain damage that was introduced when trying to fish through dozens of C# annotations in the generated code. Is this going to happen all over again, but for Java this time?

My particular complaint is not about using annotations, which I do think are wickedly useful for getting rid of the omnipresent and immiscible configuration APIs in thousands of products. Being able to inject values into class members is brilliant. There are even some gnarly uses where annotation declarations may themselves have annotations (go look at the Apache Camel source code). But using annotations to tie Java programs to what are irreducible and unmappable resources - ports, URLs, even DB tables - doesn't make a lick of sense to me.

Update: Benson Margulies has given this condition a name - an infestation of snails (@) - in a cxf-dev posting. This is so good I had to change the name of this entry.