November 22, 2011

How to Install Swedish BankID on Ubuntu 11.10 64-bits

First download the Swedish BankID program from https://install.bankid.com/.

Unzip the file.

Install BankID

The last part is only for 64-bit OS and that is to simulate your 32-bit Firefox pluging to run on your 64-bit OS. To do that you need the ia32-libs and nspluginwrapper packages. On a clean installed computer they are not installed.

To install them

Then install the BankID plugin in Firefox.

Now restart Firefox and test your plugin via https://install.bankid.com/

To read more in depth of the installation, see http://ubuntu-se.org/wiki/NexusPersonal.

November 21, 2011

Can Programmers Learn Something from Industrial Design?

Another interest of mine is design and art. Which I will not write more about on this technical blog, but I recently got aquinted with the designer Dieter Rams (http://en.wikipedia.org/wiki/Dieter_Rams) who is interesting in many ways, but one thing that I think is of interest to share on this blog is his famous:

Ten Principles for Good Desing


1. Good design is innovative.

2. Good design makes a product useful.

3. Good design is aesthetic.

4. Good desing makes a product understandable.

5. Good design is unobtrusive.

6. Good design is honest.

7. Good design is long-lasting.

8. Good desing is thorough, down to the last detail.

9. Good design is environmentally-friendly.

10. Good design is as little design as possible.

Where my favourite is the last ”Good design is as little design as possible.”. Like James Bond would have said it ”Less is more.” Or maybe as a programmers would have put it ”KISS”.

You can read more of these principles here http://www.vitsoe.com/en/gb/about/dieterrams/gooddesign.

Is Oracle Making any Progress with Pushing Java Forword?

Well in one sense, Oracle have managed to release a new Java version 7, but there are still some differences to solve to make the work go faster and smother.

Read more about the Java 7 ballot
http://jcp.org/en/jsr/results?id=5111

and for the Java 8 ballot release.
http://jcp.org/en/jsr/results?id=5112

One can clearly see that the fighting of lawyers are still going on for the license of Java. I hope they solve it and comes to an agrement so that the evolving of Java progresses faster, than it has since Java 5.

For history of previous Java releases, please read
http://magnus-k-karlsson.blogspot.com/2010/10/jaoo-day-4-java-future-at-oracle.html

How to Disable the Overlay Scrollbar in Ubuntu 11.01 and 11.10

How to Disable the Overlay Scrollbar in Ubuntu 11.01 and 11.10

I like the new look of Unity, but there is one thing that keeps bugging me and that is the new Overlay Scrollbar. To remove it, do the following from the Terminal.

First you need to become root

Then export the following setting:

Last reboot and voilà the classical scrollbar is back.

February 28, 2011

Java Bug hangs the JVM

I'm not sure about publishing bugs, but I guess it's already out there and there is also a patch available. The problem is in java.lang.Double and the handling of maximum doouble value, i.e. 2.2250738585072012e-308. The following code will send the older JVM to an infinitive loop.

Ok, but is this really a problem? Yes, it is for Java server connected to Internet. Let's imagine a Bank Server written in Java and exposed/available from the Internet. And you can be quite certain there will some fields taking double as input. These html fields are all Strings, but when processing at the server they are parsed to Double. And this is a typical exploit scenario a hacker can use for hanging the server/DoS attack.

The solution is either patching your current JVM version or upgrading to the latest JVM, i.e. Java 6 Update 24.


http://blogs.oracle.com/security/2011/02/security_alert_for_cve-2010-44.html

This bug is foremost for server application, since desktop application can always be restarted, but if you want to upgrade your desktop java version, please go to http://java.com/.

February 23, 2011

Best Practice Aspect-Oriented Programming with JBoss AOP

In my recent project I have been working with JBoss AOP. There have been some pitfalls, I have fallen into and in this blog I will share those you.

First of all. Do not choose aspect-oriented programming to solve everyday Java problems. Example of good cases are:
  • Logging
  • Caching
  • Security
  • Error Handling
But why does AOP does not suites to solve common Java problem? Lets look at an example with Spring and AspectJ.

The Logic class:
The Aspect class: Boilerplate XML configuration files

And now call it
The problem with the code above, is that in FooPojo there is no hint at all, that other code will be called. This can be very confusing for a junior programmer and also to a much more skilled programmer that is not familiar with AOP. So how to make AOP more clearer and more understandable? The answer is to look at other framework and how they have solved it. Take for example Spring. They use AOP very heavily under the hood, to solve common tasks as marking classes as transactional (@Transactional). And in J2EE, Oracle uses also Annotation, e.g. in JAX-WS they have the method Annotation @WebMethod, to signal that a method is a Web Service method. So lets copy that pattern, to write your own Annotation, as marker in the code that you want to apply apsect-oriented programming to. Our own Annotation, to trigger Aspect:
Our Aspect. Here we use interface implementation. This solution works on JBoss 4.3.0 - 5.1.0:

The JBoss AOP configuration file, META-INF/jboss-aop.xml

Now lets create a Test class, that we annotate with our own Annotation:

And a Unit Test to verify it is working.

And here is the maven pom.xml

To make the example complete, we also need to supply a log4j configuration file.


To run/debug this inside Eclipse we need to copy the argLine from the maven pom file to the unit test file configuration.



For more about JBoss AOP Maven plugin , see http://community.jboss.org/wiki/JBossAOPMavenPlugin.