Alan Burlison's Work Related Ramblings

All | General | Java | NetBeans | Perl | Solaris
« Previous month (Dec 2005) | Main | Next month (Feb 2006) »

20060227 Monday February 27, 2006

Jenny Pope: Missing in Ecuador

I was driving to band practice tonight and an item came on Radio Four about Jenny Pope, a lady from Mossley who has gone missing in Ecuador. She was last heard from while she was in Banos, Quito on 9th January and shortly afterwards her bank account was systematically emptied. I don't know her personally but a lot of my friends in the Manchester drumming community do, and we had a big busk in Manchester a couple of weeks ago to try to help raise awareness (and money!). We managed to bring in £300 in a couple of hours, thanks to the kindness of the people of Manchester. The Manchester police were on the radio this evening saying that they were sending a couple of officers out to Ecuador to help in the search for her. Fingers crossed that they manage to make some progress, everyone who knows the family is obviously very concerned about her.

Posted by alanbur ( Feb 27 2006, 10:21:13 PM GMT ) Permalink Comments [0]

20060219 Sunday February 19, 2006

JNI_OnUnload(): mostly useless

I've been writing a JNI wrapper that requires the creation of a native thread and I've set things up using a JNI_OnLoad() function to initialise the DLL and create an event handling thread thread. I also used the JNI_OnUnload() function to kill the thread and clean up the DLL, but what was puzzling me was that although JNI_OnLoad() was being called OK, JNI_OnUnload() was never being called, and because the thread was attached to the JVM via a call to AttachCurrentThread(), the JVM would never exit as it still had an active thread. A simple workaround was to attach the thread to the JVM as a daemon thread using AttachCurrentThreadAsDaemon as daemon threads don't keep the JVM alive, but that still meant the DLL wasn't being cleaned up properly.

Google revealed a post on the Java Forums which explained that the ClassLoader was keeping a reference to the class containing the native code wrapping the DLL, and that was preventing the JNI_OnUnload() function from being called. The post also explains that if you make a call to System.runFinalizersOnExit() then the finalizer for the ClassLoader will be called on exit and that in turn will call the native code's JNI_OnUnload() method, and a simple experiment proves that is indeed the case. However the System.runFinalizersOnExit() method is deprecated:

This method is inherently unsafe. It may result in finalizers being called on live objects while other threads are concurrently manipulating those objects, resulting in erratic behavior or deadlock.

In light of this it appears that although JNI_OnLoad() is useful, JNI_OnUnload() is less than useful. There is a workaround, which is to register a native exit callback using Runtime.addShutdownHook() and do the cleanup that way, but it's kind of broken that JNI_OnUnload() doesn't actually do what it is supposed to, and even more odd that the JNI documentation is completely silent as to why it doesn't actually work. I think I feel a bug report coming on ;-)

Posted by alanbur ( Feb 19 2006, 12:11:26 AM GMT ) Permalink Comments [0]

20060218 Saturday February 18, 2006

Bypassing those annoying website registration forms

Picked this tip up off slashdot - some websites (e.g. the Washington Post) insist on making you register to read their content, even if the content is actually free - the assumption is that they only want the registration so they can harvest your email address and use it for marketing purposes, and as someone who gets huge volumes of spam already (despite 500+ a day caught by the corporate filters, 40-50 still get through) I'm very loathe to give out my email address when I don't have to. Although there are services such as BugMeNot which allow you to create a throw-away email address for registration and to look up already registered addresses, the webmasters of the sites that require registration cotton on to these pretty fast and block them.

However, these selfsame sites obviously want google to index them, so they allow the google search robot in without requiring registration. Enter the User Agent Switcher plugin for Firefox. I've used this in the past to get access sites that insist you use Internet Explorer to view them, but you can add an entry to make your browser look like it is the google bot. In the Description field put whatever you want to identify the entry, and in the User Agent field put the string googlebot/2.1 (+http://www.google.com/bot.html), you can leave the rest of the fields empty. Switch to the new User Agent string and hey presto, all that content you couldn't previously access is visible. Unlike the disposable email address arms race, I don't see how this can be circumvented without making the content invisible to Google as well.

Posted by alanbur ( Feb 18 2006, 05:58:18 PM GMT ) Permalink Comments [6]

20060214 Tuesday February 14, 2006

JSlider oddity - setFont() is ignored

Despite what you might expect, the labels on a JSlider ignore any font that you specify with setFont(), at least in the Windows L&F. Most odd.

Posted by alanbur ( Feb 14 2006, 11:21:11 AM GMT ) Permalink Comments [3]

20060207 Tuesday February 07, 2006

OpenSolaris buzzes Red Hat

I was reading Roumen's post on the current upsurge in Yahoo search requests ("search buzz") for NetBeans noticed by Tim O'Reilly. The answer to that question is quite simple - NetBeans 5.0 has just been released, and most excellent it is too. However what caught my eye was the last paragraph of Tim's post where he notes that OpenSolaris and Red Hat are neck and neck in the Yahoo search engine popularity stakes. Bearing in mind OpenSolaris has come from zero to neck and neck with Red Hat in such a short time, it appears that Jonathan's predictions weren't that far off base after all.

Posted by alanbur ( Feb 07 2006, 05:49:32 PM GMT ) Permalink Comments [0]

20060202 Thursday February 02, 2006

Oooh! Shiny! ... NetBeans 5.0

I've been very happy with NetBeans 4.1, but I've been keeping an eye on all the new stuff in NetBeans 5.0 with anticipation, especially the new Mattise GUI designer. Over the last couple of days I've been knocking together a simple Java GUI and today I finally cracked, and I grabbed a copy of 5.0 from the internal staging servers rather than waiting for the public release of 5.0 and having to fight my way through the download crowds - hey, working for Sun has to have some benefits, right? ;-)

First impressions are very favorable - having already used NB4.1 a fair bit, NB5.0 feels very familiar from the start - which is a good thing - I get very tetchy when stuff is moved around just for the hell of it between releases of a product. There's a lot of nice usability touches in there - there's an Options dialog that allows you to set the most common preferences quickly and easily, and at last you can edit your code templates easily - it always bugged me that I had to hand-edit the banner blocks in each of the generated files. The new CVS stuff seems to just work - I pointed it to a project of mine on sourceforge and it synced up with no tweakage required.

One of the most noticeable features is the new Matisse GUI designer. I'd already done some outline design in my app and I expected I'd have to throw it all away and start over, but it turns out you can pretty easily retrofit existing GUI designs to use Matisse - I'd been using the GridBag layout manager, and to switch to Matisse I just had to right-click on the layout manager icon in the Navigator pane and select 'Free layout'. Once that's done you can start dragging your components around Matisse-style - nice!

I also pulled down the profiler and mobility packs and tested out an existing MIDP application which all worked fine. The only thing I'd forgotten to do was to pull down a copy of cpptask so I could build the JNI code I have in one of my Win32 projects. I've only given the tyres a cursory kick so far, but I like what I see.

Whilst I was looking around for the the install images I found one of the internal wikis where the team were discussing categories of developers who might use NetBeans, and I think I'm in the 'tough nut to crack' category, i.e. someone who uses mainly vi and make for development. I must admit I was initially sceptical about NetBeans, having had some *bad* experiences in the past with IDEs that were anything but what their names suggested, but I'm a firm convert, and NetBeans is now my prefered environment - I just wished it handled C with the same degree of cleverness as it does Java ;-)

Nice work and kudos to the NetBeans community!

Posted by alanbur ( Feb 02 2006, 01:08:51 AM GMT ) Permalink Comments [0]