Java why doth I loathe thee

I’m working on a new project that will be written in Java and have a JSON REST-like api. For the project we’re investigating RESTEasy. I proceed to download the zip file (ugh) and look inside. That’s when I remember why I loathe Java so much.


[jesusr@... ]$ unzip -v ~/Download/resteasy-jaxrs-1.1.GA-all.zip | awk '{print $8}' | grep "\.jar$"


resteasy-jaxrs-1.1.GA/lib/activation-1.1.jar
resteasy-jaxrs-1.1.GA/lib/apache-mime4j-0.6.jar
resteasy-jaxrs-1.1.GA/lib/async-http-jbossweb-1.1.GA.jar
resteasy-jaxrs-1.1.GA/lib/async-http-servlet-3.0-1.1.GA.jar
resteasy-jaxrs-1.1.GA/lib/async-http-tomcat6-1.1.GA.jar
resteasy-jaxrs-1.1.GA/lib/commons-codec-1.2.jar
resteasy-jaxrs-1.1.GA/lib/commons-httpclient-3.1.jar
resteasy-jaxrs-1.1.GA/lib/commons-logging-1.1.1.jar
resteasy-jaxrs-1.1.GA/lib/FastInfoset-1.2.7.jar
resteasy-jaxrs-1.1.GA/lib/guice-1.0.jar
resteasy-jaxrs-1.1.GA/lib/jackson-core-asl-1.0.1.jar
resteasy-jaxrs-1.1.GA/lib/jackson-jaxrs-1.0.1.jar
resteasy-jaxrs-1.1.GA/lib/jackson-mapper-asl-1.0.1.jar
resteasy-jaxrs-1.1.GA/lib/javassist-3.6.0.GA.jar
resteasy-jaxrs-1.1.GA/lib/jaxb-api-2.1.jar
resteasy-jaxrs-1.1.GA/lib/jaxb-impl-2.1.10.jar
resteasy-jaxrs-1.1.GA/lib/jaxrs-api-1.1.GA.jar
resteasy-jaxrs-1.1.GA/lib/jboss-common-core-2.2.10.GA.jar
resteasy-jaxrs-1.1.GA/lib/jboss-logging-spi-2.0.5.GA.jar
resteasy-jaxrs-1.1.GA/lib/jbosscache-core-3.0.3.GA.jar
resteasy-jaxrs-1.1.GA/lib/jcl-over-slf4j-1.5.8.jar
resteasy-jaxrs-1.1.GA/lib/jettison-1.1.jar
resteasy-jaxrs-1.1.GA/lib/jgroups-2.6.7.GA.jar
resteasy-jaxrs-1.1.GA/lib/jsr250-api-1.0.jar
resteasy-jaxrs-1.1.GA/lib/jta-1.1.jar
resteasy-jaxrs-1.1.GA/lib/jyaml-1.3.jar
resteasy-jaxrs-1.1.GA/lib/mail-1.4.jar
resteasy-jaxrs-1.1.GA/lib/resteasy-atom-provider-1.1.GA.jar
resteasy-jaxrs-1.1.GA/lib/resteasy-cache-core-1.1.GA.jar
resteasy-jaxrs-1.1.GA/lib/resteasy-guice-1.1.GA.jar
resteasy-jaxrs-1.1.GA/lib/resteasy-jackson-provider-1.1.GA.jar
resteasy-jaxrs-1.1.GA/lib/resteasy-jaxb-provider-1.1.GA.jar
resteasy-jaxrs-1.1.GA/lib/resteasy-jaxrs-1.1.GA.jar
resteasy-jaxrs-1.1.GA/lib/resteasy-multipart-provider-1.1.GA.jar
resteasy-jaxrs-1.1.GA/lib/resteasy-spring-1.1.GA.jar
resteasy-jaxrs-1.1.GA/lib/resteasy-yaml-provider-1.1.GA.jar
resteasy-jaxrs-1.1.GA/lib/scannotation-1.0.2.jar
resteasy-jaxrs-1.1.GA/lib/sjsxp-1.0.1.jar
resteasy-jaxrs-1.1.GA/lib/slf4j-api-1.5.8.jar
resteasy-jaxrs-1.1.GA/lib/slf4j-simple-1.5.8.jar
resteasy-jaxrs-1.1.GA/lib/stax-api-1.0.jar

Why oh why do Java projects have to include every library they use? I already have a version of commons-codec on my machine. Why do I need yet another? As a Linux user, I’m used to downloading software that requires the libraries it needs to be installed, either by manually building the required libraries or using RPM to install the software and its dependencies. Java is in desperate need of an RPM like dependency manager for deploying software because having to include a copy of every single library and version you need is down right ridiculous.

I know many will argue that ‘we certify the project against version X of library Y, any other version might break’. That’s a bigger problem in the Java community where they commonly break ABI/API compatibility even in point releases. For example, a library called jfreechart once removed an entire package in a point release: 0.9.20 to 0.9.21. This required our code to be recompiled against the newest one. That is just silly and shouldn’t be allowed. In the C world that would get you banned from writing C libraries.

</rant>

enV Touch!

I got my new phone today. I replaced my Samsung SCH-U740 flip phone

with a new enV Touch.

env-touch

The phone has a bright touch screen which is pretty easy to use. I like how it has a touch screen QWERTY keyboard when you turn the phone horizontal. You can also open it to get a physical QWERTY keyboard.

So far it’s a great upgrade over the Samsung which has been extremely reliable for the past 2 years. Hell the phone is still in great shape. I highly recommend the enV Touch.

Happy Birthday, Spacewalk!

It’s amazing how fast time flies. A year ago today, we announced project Spacewalk.

Spacewalk

In that year, we’ve had five releases on three Linux versions: RHEL 5, CentOS 5, and Fedora 10. Currently we’re working on getting Spacewalk 0.6 ready for Fedora 11. Want to help? Check us out on #spacewalk and #spacewalk-devel on freenode or contact us on spacewalk mailing list.

We also added quite a few features to the project:

If you would like to try it check out the HowToInstall wiki page.

New phone

I ordered Liz a new phone today. Her old Virgin Mobile phone was out dated and we were spending quite a bit of change lately on that plan. After much going back and forth on whether to switch us both to AT&T Wireless or to just add her to my existing Verizon Wireless plan, based on who we call it made more sense to stay with Verizon.

What did she get? an LG env3 in Slate Blue, and it should be here tomorrow.

lg-env3

For comparison, here’s the old phone:

Zero Gravity Water Bubble


This is a cool video, especially the end part.

Shuddle [sic] service

On Thursday (June 4th), I scheduled an appointment with a nearby Mazda dealer via email (using their web form). I scheduled the appointment for today (June 10th). As of Wednesday morning I had not heard anything so I assumed my appointment was not confirmed so I drove straight to work.

During my morning routine email checking I see an email from the dealer confirming my appointment. I got the email at 5:44pm on Tuesday evening. It’s a bit annoying they would wait that long to confirm an appointment for the following day. But what really got me was the horrendous spelling and punctuation of the email I received. Based on the email alone, I wonder if I really want to take my car there for service.

shuddle

I think I’ll try another dealer nearby.