I came across a color chooser that kicks the Swing JColorChooser's booty. It looks great and supports transparency. It's available at colorchooser.dev.java.net and on the developer's blog. It will soon be used in my genome browser. Thanks, Jeremy!
Friday, November 28, 2008
Sunday, November 23, 2008
Tuesday, November 18, 2008
Java in Firefox extension hosed again
A full-featured browser, an XUL front end, and the wealth of libraries available in Java makes for a powerful and flexible combination. The browser extension capability of Firefox, along with LiveConnect has been used by at least three extensions:
- Simile's Piggy Bank, a semantic web browser
- XQuseme, embeds a XQuery engine into the browser
- Firegoose, exchanges data between bioinformatics web sites
Most of what I've figured out about using Java from an extension came from Simile's David Huynh. Sadly, development of Piggy Bank has now "quiesced".
I don't know about the others, but Firegoose is hosed by the latest Java 6 update 10. Apparently, Java 6.10 introduces some significant changes into LiveConnect and the Java browser plugin. It's certainly good that Java in the browser is getting some attention, but I wish Java in a Firefox extension was a supported and regression tested use case (see whining here). The fact that it's such an arcane, unsupported and brittle hack is holding back what could otherwise be a nice technique.
Interest in Java in Firefox extensions appears to exist according to these posts in the MozillaZine Extension Development forum:
- getting java.security.PrivilegedActionException from JAR
- Java Based Extension Development
- Java
- Using java in an Extension, how ?
- Calling JAVA method. Chrome URL
First Problem: The error I get appears to happen when reflectively instantiating a Java array and looks like this:
Error calling method on NPObject! [plugin exception: java.lang.IllegalArgumentException: No method found matching name newInstance and arguments [com.sun.java.browser.plugin2.liveconnect.v1.JavaNameSpace, java.lang.Integer]].
Instantiating the array through reflection was, itself, a work-around for another LiveConnect issue with type conversion between Javascript arrays and Java arrays. It's barfing on line 03 below:
// from http://simile.mit.edu/repository/java-firefox-extension/firefox/chrome/content/scripts/browser-overlay.js _toJavaUrlArray: function(a) { var urlArray = java.lang.reflect.Array.newInstance(java.net.URL, a.length); for (var i = 0; i < a.length; i++) { var url = a[i]; java.lang.reflect.Array.set( urlArray, i, (typeof url == "string") ? new java.net.URL(url) : url ); } return urlArray; }
Update 1: First problem solved easily enough.
var dummyUrl = new java.net.URL("http://gaggle.systemsbiology.org"); var urlArray = java.lang.reflect.Array.newInstance(dummyUrl.getClass(), a.length);
Now, on to more hideousness:
Error calling method on NPObject! [plugin exception: java.security.AccessControlException: access denied (java.lang.RuntimePermission createClassLoader)].
...caused by trying to instantiate a URLClassLoader. The next-generation Java Plug-in, including in update 10, makes changes to the security policy such that calls from Javascript to Java are uniformly treated as untrusted.
Update 2: A Work-around!
A post on the java.net forum has a work-around. You can disable the "next-generation plug-in" through the Java control panel. Under the Advanced tab, open Java Plug-in, deselect Enable the next-generation Java Plug-in, then, restart Firefox. There is a bug filed whose comments seem to suggest that it will be addressed in a future release of the Java Plug-in.Update 3: According to this thread on java.net, a fix is on the way in Java SE 6 update 12. Thanks, Sun!
More references:
Thursday, November 13, 2008
SQLiteJDBC from Xerial
Monday, November 10, 2008
Clean code, properties, and patterns
Friday, November 07, 2008
Clay Shirky on Econ-Talk
Clay Shirky appeared on the excellent podcast Econ-Talk, to which I've become hopelessly addicted. (My geekosity knows few bounds.) He was hawking his book Here Comes Everybody.
Shirky is a great thinker about what makes the social aspects of technology tick. His current theory goes something like this: There is a cognitive surplus brought about the increasing amount of leisure time in modern industrialized societies. For a generation, that surplus has been dissipated through the artifice of television. Now, that surplus is being put to use. Open source software, tagging, Wikipedia, and other social web phenomena are the early results.
The question now is, what happens when someone figures out how to move this phenomena out to the physical world. Someone posted this quote in the comments section to the podcast:
The effect of a newspaper is not only to suggest the same purpose to a great number of persons, but to furnish means for executing in common the designs which they may have singly conceived.
-Alexis de Tocqueville