Choices and innovation

May 15, 2007

Yesterday, I discovered that there is a free Java hosting service: MyJavaServer. The service includes a Resin server with Java 6. It has a really cool way of registering by giving the registrant a (relatively simple) programming task, a smart way to ensure that people don’t just register for fun. The problem is: the service does not seem to work anymore. I was afraid so, Java hosting, in general is expensive and rightly so, because it also means more maintenance work. I remember having to rent a dedicated Linux server that I had to administrate myself just to install JBoss and Tomcat. I spent more time just making sure to keep up with the security of the system, and when I came back from a longer vacation, I found that my server had been hacked and messed up. That’s why you should be nice to your network administrator, they save you a lot of time and work to focus on the central task.

I definitely don’t insist on a service which is completely for free, but for development purposes, I’d prefer something that is cheap enough, like 5 bucks a month. That’s another reason why PHP, Python, Perl and Ruby are so popular: it is much cheaper for a private person to get an application online (besides the obvious difference in the learning curves of course). I use hosting services for demoing and testing, and I don’t make any money of it directly, so I really need a very affordable service. The only choice I have is Ruby on Rails which is not a bad alternative, but it would be great to have something in the price range of Rails or PHP based offers with a full Java EE stack.

I appreciate services like Sourceforge and RubyForge to give developers  free Subversion hosting and related service, which means I can use their network administration services for free, and their service is friendly and fast enough. I can’t emphasize it enough, so to these services and their sponsors: Thanks for doing this ! By doing this, you offer developers  the opportunity to experiment, learn and innovate (well, I am probably not that innovative, ha !).

Back to It seems this issue is already known since last year and they say it is due to Resin and Java 6 integration problems. I won’t complain, it was mainly run by one person. To offer something free, there must be some form of motivation, be it constructive feedback or funding (that’s a kind of feedback as well). Maybe (and hopefully) one day, it will be back, maybe one day, someone else will offer an affordable hosting service with a full JavaEE stack.  Until then – I’ll stick to Ruby on Rails.

Goodbye CVS

May 15, 2007

Today I finally migrated the ZMPP repository to Subversion. It was my only maintained project in a CVS repository. Subversion definitely is an improvement over CVS. I like the way how it handles directories much better, and the possibility to add embedded links is very useful. Another reason is TortoiseSVN, I simply love this frontend to Subversion, better than any other frontend I have used. The nearly seamless integration into Windows is great. The only thing I would love to see is availability of TortoiseSVN on a Linux desktop.

Subversion support in NetBeans is very good as well, but I keep doing things like tagging/branching and creating links in TortoiseSVN.

CVS has served me well, but if you have used Subversion, it’s hard to go back. I am still using it at work and it’s unlikely that the projects there will ever be migrated. That’s fine, because CVS works. For my private needs, I want to use one system only, so I go with the best available for my needs.

Eclipse RCP – like it or not

May 10, 2007

At work, I am enhancing an Eclipse RCP application now. I thought it is a good opportunity to see what I have been missing by mainly programming in Swing. About three weeks into the project, I can say that it was in fact pretty easy to understand at the beginning. The layout management cost me a little while to understand. I also had get to used to the fact that a lot of constants are defined in the SWT.* manner (SWT.LEFT, SWT.BORDER, SWT.V_SCROLL,…). I just don’t see any logical relationship between those constants other than that they belong to SWT. Well however, probably it is easier that way for most people (not having to remember the logical context), at least it is somehow C(++)-ish.

I consider myself a pragmatist, so if a tool does the job, I don’t think too much about it. I like Eclipse’s architecture, how Eclipse plugins are written and how this process is supported by pretty good tools. However, I still can’t see the advantage of RCP/SWT. I get OutOfMemoryErrors every day, which takes down not only my application, but the whole Eclipse IDE (kind of reminds me of the times when applications took down the whole operating system), I can hardly remember this kind of thing happening to me using Swing other than programming a non-terminating loop (this does not happen too often). Another annoying thing is that exceptions thrown in my plugins seem to be swallowed somewhere in the platform.

I found a comment on the Eclipse news board here:

I'm curious as to why the workbench is catching and (apparently) ignoring exceptions that are causing my plug-in to be unable to successfully create pages in a multi-page editor. Seeing the exception and stack trace would be extremely helpful in diagnosing the problem, but for some reason the exception is being silently ignored.

and the answer to this is:

As far as I know, exceptions are logged to your target runtime workspace's

.metadata/.log file. To see stuff in your console, you want to add

-consoleLog as a 'Program Argument' in the 'Arguments' tab of your PDE

launch configuration.

The biggest issue besides those OutOfMemoryErrors I have with RCP/Swing is flexibility. Example: at the moment (Eclipse 3.2), TableViewers allow cell editors to be defined by column and not by row, which is pretty limiting in our case, where the users are used to spreadsheet-like interfaces. I should point out that this issue seems to have been addressed in 3.3. Another question is: Why in the world do I have to create a specific version for Windows one for Linux, one for Solaris etc. I really feel like I am back to C/C++ here (especially with those OutOfMemoryErrors 🙂 – I know I am stressing it here).

Probably I am just expecting too much. Because everywhere I can read how much cooler/easier (have your favorite buzzword here) SWT/RCP is compared to Swing, I thought it must be somehow on the same level. As any developer, I’d be happy to use whatever does the job and gets it done quicker, since I don’t work for Sun or IBM, I have no cultural pressure here, either.

RCP/SWT works ok when I want to create an “Eclipse Workbench”-ish user interface (which I often don’t). At this point, I can’t really understand the hype surrounding it, especially those quotes made by people who claim to have been experienced Swing developers and converted. I don’t see how that is easier, or more powerful, but in my opinion, it contributed to creating a lot of FUD about Swing, client sofware development in Java and Java in general. Java is a fantastic platform to create client applications, just no one seems to see it and just talk about how complicated user interface programming is in Java. This is because user interface programming in general is a hard task. Just placing a few buttons here and some icons there doesn’t make a good interface.

I know that there will substantial improvements to the Eclipse RCP framework since there is a huge interest and investment in it (even though I could have lived without this reinvented wheel in this case) and if the project calls for it, I will use it. But for now I have to ask: Where’s the benefit ?