Wednesday, February 25, 2009

FindBugs review

Lured by the promise land of a code base free of any problem I have decided to give a try to FindBugs on my freshly updated I-build.
Unfortunately FindBugs did not leave to the expectation since it failed with an NPE, which you would admit is rather ironic for such a tool...
Anyway, last time it worked for me (a few months back) my experience was in the end not really more useful than today's one since the tool returned a plethora of false positive hiding the real bugs it may have found. After talking to colleagues, we all came to the same conclusion, it could be useful if it had more reasonable defaults. Oh well...

Thursday, February 19, 2009

Thoughts on Bespin and Eclipse

I'm really stunned by the quite opposite reactions that the Mozilla and the Eclipse communities are having about Bespin.
On the one hand it is like Bespin is the best thing since sliced bread, ("hey look now I have a cool editor in my web browser") on the other a quite mixed reaction is coming ("why the heck would I want to ever do this", "where is my code completion, type hierarchy", etc.)
Honestly I'm not really surprised by this reaction from the eclipse community especially when you have been around long enough to remember the early days of CDT and the complaints it was receiving because it was not up to the task in comparison to JDT... or more recently on other fronts when you see bugs titled like "XYZ sucks", and the difference in participation on a new effort. Feels like our community is spoiled.

So where do I stand on Bespin? Well somewhere in the middle. I'm not impressed by the overall Bespin concept because it only solves one little part of the problem of creating an IDE: the snappy text editor and the collaboration. I like it, I like the fact that it is done with HTML5 canvas, the way the extensibility is working to invoke commands, etc. However when it comes down to running a full fledged IDE, I'm skeptical. Not about the abilities of the browser or canvas to scale (remember that a few years back Java was declared dead for rich client apps?), but simply because I know what it takes to have all the features that make you so productive in Eclipse. Most of them can't just work of one or two source files at least to give you assistance to the degree you are used to. We can probably get the information back from the server, but would it get back fast enough; we could have less precise operations, but are we ready to go with this?

All that said, I believe that there is a place where a Bespin based IDE (or the like) can be useful as a lightweight tool to do a quick task... (peer programming like scenarios, just need to fix a typo in the file, provide translation, etc.). But I don't think we are quite there yet, and there is a lot of cool problems to solve. For example the model as to where the resources being edited are coming from is unclear. One possibility is to assume that everything I need is already available on a remote server "on the cloud" (or my buddy's machine) then I can just edit this. Now, if my principal model is to work in a regular IDE and try to use my web IDE to just perform some mundane tasks, then the overhead of locating and opening the file would rather be low (Unless of course I can directly edit the code straight out of the code repository and put it back there on save (see lower)).

So what would I want to see / do / explore?
  • Explore with running a more complete headless Eclipse in the cloud. 
There I'm curious about the response time to get the result of for example a code completion, browsing type hierarchy, over the wire when hosted on a real cloud service. From there, I would want to see if any benefit can be had in having a caching proxy / partial replica of what's running on the cloud (and probably and augmented version of this with more functionality) on the user's machine so we can have better response time. For example maybe my server on the cloud does not offer completion, or type hierarchy browsing, but this can be done through my local server. Also this would solve the disconnected mode enigma with IDE based browsers.

  • Following this, is offering an "upgrade" path from the browser to the local experience. 
This addresses the case where I've started doing this mundane task but it turns into a bigger thing than expected and I need a complete IDE.

  • Making the workspace cloud friendly. 
When I hear cloud, I hear scalability, 100s of machines running my app. However I don't believe that our current workspace format is really that replication friendly. Do we need this? I don't know.

  • Explore DVCS as the underlying storage of a workspace. 
Would the usage of a DVCS server help in solving the remote server / local proxy synchronization that would result in a proxying solution mentioned earlier? Would that also facilitate handling a case where multiple people would work on the same workspace at the same time? And also does that make the workspace more cloud friendly

  • Could Bespin provide the web browser implementation of the eclipse app model (aka 20 things). 

  • Explore single sourcing (generative technique, model based, ...) of commands to make it easy to target both the we-based and client-based IDEs

  • Finally and unrelated to all that is to see if we can have an SWT for HTML5 canvas. 
Given that canvas seems rather new, it could bring to the browser fans the maturity of SWT and it could be a good space to win esp. if we want to ease single sourcing.

Caveat, this is just the fruit of my imagination as I have not been involved in the Mozilla/Eclipse meeting.