Java

I’ve written before that my feelings for technology are strong and passionate. I regard Apple with a nearly perfect halo of saintly perfection despite all the Chinese workers committing suicide and some of Apple’s darker acts in regards to the iOS App Store, but despite all that they are still as pure as driven snow in my eyes.

Not so with Sun Microsystems’ Java. It’s not that I hate Java in and of itself, actually I appreciate Java for what it has accomplished with the tools available. What I hate is tangential but squarely placed against Java. Here at work we have two really big monolithic database systems. The first is our in-house alumni database, Millennium. The second is SunGard’s Banner Student Information System.

What do these two pieces of software have to do with Java? Well, that’s the core of my agony. The two have to be used at the same time, but one needs Java 1.5.10 and the other 1.6.3. It’s impossible to expect people to understand Java versioning and when they accidentally upgrade their Java installation with 1.6.3 or later for Banner use, their Millennium client goes completely out-of-spec and makes their lives a living hell, mostly with stupid script errors as code written against 1.5.10 scrambles at the cliffs-of-insanity of 1.6.3 or later.

What is our solution? It’s ugly but it works. We split the software by virtualized operating system. Two XP’s running side-by-side, one with Java 1.5.10 the other with Java 1.6.3. It isn’t elegant, and it starts me thinking about why exactly Java is in any of these products to start with. For Banner it’s pretty clear, Banner is written against Oracle and the client software is exceptionally poor, it’s called jInitiator and I feel ill and tremble even when contemplating it. It’s the kind of software that I fantasize about staking to the earth and watch the sun rise as it burns and screams, hissing and spitting giant gobs of ichor everywhere as it slowly burns to dust.

Millennium isn’t as bad, but there is Java still. Why? It could be wholly a W3C compliant application, I mean, that’s where it’s headed, and if you want fancy bits you could always use JavaScript or even AJAX tricks to do the same things that they have Java doing. Thankfully I’ve bullied the authors into promising that by version 9 of the software, that Java will be a sad sorry memory.

So it’s not really that I’m angry at Java, but I am angry at these companies that write in ways that permanently fix a version of Java on a machine and that only invites issues like viruses, security breaches, and these horribly gross incompatibilities and there is nothing I can do to address them other than apply virtualization technology like a cure-all salve. It’s quite like hunting fleas with a BFG. Annoying.

So for those out there who are thinking about using Java to make your software shiny or somehow cute, just skip it. Your customers won’t really appreciate what neat shiny you can bring to the table and the admin tasked with keeping it all together will thank you for one less versioning nightmare to have to deal with. I blame Java because without it, my life would be much easier. One just has to wait for things to get better, at least there is hope.

 

Williamsburg – November 15th 2010

Today was the official beginning of the Sage Millennium Symposium. This is the direct result of all of the user base griping about how we missed this place and how we wish we had a little conference all on our own, like the way it used to be. Much like a magic genie, Sage granted us our wish and here we are again, for my coworkers who joined me in this trip it’s old-hat to them, it’ll be my first time staying at Kingsmill Resort.

We arrived last evening and I found this place to be very expansive, definitely charming, and a great place to “Get away from it all”. The price tag, well, that’s definitely on the high side, but the quality is unmistakably there. My room is laid out very spaciously and everywhere they could have skimped out they did not, which earns my respect.

Last night we went to the Red White and Blue, which is a Blues-themed Memphis style BBQ Rib restaurant in Williamsburg. The food was okay, the ribs were done well. What more can you ask for while traveling into a tourist trap?

Overnight everything went well, my iPad doubled as a noisemaker/alarm clock very nicely as well as a book, a newspaper, a game of Uno and a window into the world of all my collected RSS feeds that I aggregate through Google Reader.

In the morning we all visited Colonial Pancake House. We’re in the middle of Pancake House Central and this one got a 5-star review so we decided to give it a shot. There wasn’t much that was remarkable about the place, the food was good, the atmosphere was what you’d expect and the prices were fair.

After breakfast we talked for a little while and then my coworkers settled on hitting the local outlet mall. I didn’t have anything else better to do since the meat of the convention wasn’t due to begin until 2pm, so I tagged along. We found it easily enough as the two coworkers who had been here before knew the path to the outlet mall very well. I pulled in and parked, scanned the shops and immediately noticed the kitchen outlets, which are (I think) identical to the ones in Michigan City. We only had an hour and then one of my coworkers who knew I was fond of Under Armour pointed out that UA had a factory store in this particular outlet mall. UA is kind of like my Kryptonite, I’m quite fond of their clothing and seeing the store put a foolish grin, even for a short flash, on my face. As we walked along everyone sort of split up and went their separate ways. I joined my boss on a search for a replacement tote-bag to replace the flimsy bag provided by Sage when we registered the night before. We weren’t able to find anything for her and as we walked we met up with our other coworkers and while they went looking in a nearby shop I decided since there was only about twenty minutes left that I should at least check out the UA shop. It only took me ten minutes to pick out some things I liked and went to try them on. I did buy some Under Armour, but it was on the clearance rack, $10 off plus 20% after that so I wasn’t feeling too upset about the cost. Under Armour is mighty expensive stuff, but it’s durable and it’s one of my few vices that I get to indulge in from time to time.

Afterwards we put all our winnings in the back of the rental SUV and headed back to Kingsmill. We heard the welcome song-and-dance from Sage regarding their database software, Millennium, which powers our alumni and donor record database.

Sage laid out the Millennium roadmap for us, telling us what to expect in the future and some of us were mildly jilted that they delayed the “Rip out that damned Java!” request we lodged with them last year. Now we’ll have to wait for version 8 to roll around, we’re currently on 7.6.1 and we’re dallying with the notion of upgrading to 7.7.1 or 7.8, maybe on the outside chance, 7.8.2. This software is very competent at what it does, there have been some missteps and from what I can perceive they essentially rushed a RDBMS product into a “web enabled” paradigm by using shortcuts. In the short-term this worked great, they were able to convert their Windows only application interface with one that worked via a web-browser. On closer inspection this greatness tarnishes because you can only use IE6 or IE7 on Windows XP, not Windows 7. (Windows Vista works, but it’s abomination, so we don’t speak it’s name). The key sticking point is that the software relies in very specific and vital parts on loading the Java runtime library. In ways, they cheated. They got a product rushed to market and it worked well as long as you had all these backup-singers in place to provide the parts to make the entire production work. This would be not-an-issue if it wasn’t for the fact that in order to use this core-to-our-business-case software, we are effectively stuck using Java 1.5.11. This in and of itself isn’t harmful, but this old copy of Java is vulnerable and opens up computers to a heaping batch of security vulnerabilities, add to that damning fact that another piece of software we use, BSR’s Banner requires an updated jInitiator and JDK update which forces a machines JRE to the most updated version, breaking Millennium. So we have two products we need so that we can do our jobs and Java is the pinion of suck that we’re stuck upon. Removing Java is only the first step, as they really ought to only push their web-based product (and it’s the only thing that they can really push, so get to it!) and that product really ought to be W3C compliant. If that was the case then all my users could have the freedom to select whatever operating system they liked to interface and use the database. They could use Chrome on Ubuntu or even Safari on the Mac. The benefits of switching out Java for AJAX and Javascript are pretty compelling, even as such that by doing so they would effectively enable other non-Java OS’es to be able to login, such as iPhones, iPads, Galaxy Tabs, and Androids. Technically one of our staff could query our database on a color Nook. It’s not the particular devices that I’m in love with (despite the fact that I am quite smitten with my iPad) but rather that standards are respected, that the software follows a logical and plain design and works well, simply.

After the chat and the disenchantment discovering the delay with tearing out Java we waited around for the Welcome Bash at 5:30pm. Sage puts this welcome on whenever they have an event like this one, open bar, nibbly bits, the works. I chatted with a new Millennium client that’s coming out of Boston, MA. The school starts with a B, I’m terrible with names unless I have business cards and as dumb luck would have it, I totally forgot to bring business cards with me on my travels this week. Duh. We waited and schmoozed until about 7pm when we had to gather everyone up and head to an Italian restaurant here in Williamsburg called Donelos or something. We did more eating, more chatting, and only now did I have any time to myself. I was going to call Scott and relate to him the days events and then I looked down at my watch and felt wrong to make a call after 9pm. So, instead of a call, I thought I would write a blog entry and share this with all of you. Tomorrow we’ll have presenters and I’ll write a lot of ‘neat ideas’ that ‘I’m definitely going to get to work on’ until I actually get to work and that occupies all my time and this entire batch of ‘neat ideas’ falls by the wayside. It always seems to happen this way. When I don’t have life pushing me around I can get all creative and clever with the database, but without fail, life butts in and I’m right back where I started.

On high notes, I have discovered Whitley’s Virginia Peanuts. These are hand-picked giant peanuts in a variety of preparations. I ended up buying two little 16oz. sacks, one Honey Roasted and the other Honey Toffee. They will serve as snacks during this week when I can’t get free of my meetings and end up missing the snacks they lay out for us just outside our meeting halls. These peanuts are exceptionally good and the lady in the little shop we went into had a great sense of humor.

I’m thinking about contacting my family out here and see if they’re available Tuesday or Wednesday night, perhaps I can manage to get the rental SUV for the night so I can get down to VA Beach and then back up again, we’ll see how my coworkers feel and if my family has time.

I say hello, I say goodbye…

For a few months I’ve used an app called Platypus on my Mac to create a pseudo-app that bundles a bash shell script which instructs my Mac to open various applications that I want to use during the day. What I want is very specific, I want to be able to login quickly to a idle Mac, but I want to have one icon to click on to start an entire host of applications, if I want to. The overall solution would of course be to mark every app as “Open on Login” but I don’t want them all to open each and every time I log-in, I’m picky. The bash script uses the open command to open applications. This command works well enough, but it leaves my screens littered with open application windows. This is not exactly what I want. I want all my applications to be opened, then I want them to be hidden. Cake and eat it too.

This morning, on a lark, I investigated alternatives to using Platypus. I know there is AppleScript, but I never really delved very deeply into the language. A little browsing and some tinkering and I have exactly what I want:

tell application “Mail” to activate
tell application “Firefox” to activate
tell application “iTunes” to activate
tell application “/Applications/Yahoo! Messenger.app” to activate
tell application “Stickies” to activate
tell application “Remote Desktop” to activate
tell application “Server Admin” to activate
tell application “Evernote” to activate
tell application “iCal” to activate
tell application “iChat” to activate
delay 0.5
tell application “Finder” to set visible of process “Mail” to false
tell application “Finder” to set visible of process “iTunes” to false
tell application “Finder” to set visible of process “Yahoo! Messenger” to false
tell application “Finder” to set visible of process “Stickies” to false
tell application “Finder” to set visible of process “Remote Desktop” to false
tell application “Finder” to set visible of process “Server Admin” to false
tell application “Finder” to set visible of process “Evernote” to false
tell application “Finder” to set visible of process “iCal” to false
tell application “iChat”
set minimized of window “bluedepth@gmail.com” to true
set minimized of window “andymchugh@atlas.dev.wmich.edu” to true
set minimized of window “AIM Buddy List” to true
set minimized of window “andy.mchugh@chat.facebook.com” to true
end tell

This script, shoved into an Application icon opens up every app I want in the morning, then hides them, except for iChat, it minimizes every window but my Bonjour list. I discovered that if I accidentally have a volume open when I run the script and there is an application in the volume and I ask that it be activated, the Mac is confused and asks me to pick the application from the list – so for Yahoo I had to explicitly state which one I wanted. Not a bug, just me being lazy.

The flipside of this also occurred to me. In the evenings I want to close all my applications. I could of course rely on the log-out procedure to do all the mopping up but there are some apps I use, like GroupWise and VirtualBox that can upset the log-out sequence. This script unmounts all volumes and then quits all open applications. That way I close all my apps before I log-out. Again, with the lazy:

tell application “Finder”
set bootDisk to name of startup disk
set otherDisks to every disk whose (name is not bootDisk)
repeat with myDisk in otherDisks
try
eject myDisk
end try
end repeat
end tell

tell application “System Events” to set the visible of every process to true
set white_list to {“Finder”}
try
tell application “Finder”
set process_list to the name of every process whose visible is true
end tell
repeat with i from 1 to (number of items in process_list)
set this_process to item i of the process_list
if this_process is not in white_list then
tell application this_process
quit
end tell
end if
end repeat
on error
tell the current application to display dialog “An error has occurred!” & return & “This script will now quit” buttons {“Quit”} default button 1 with icon 0
end try

Yay for Lazy! 🙂