Removing entries from a Map in Java

Today, I ran through some code iterating over a Java map to remove outdated values. I found the way it was done utterly disgusting. Yet, thinking it through, I would probably have done it the same way a couple of years ago.

As a consequence, I thought it would be a good idea to share the solution I now use.
Continue reading Removing entries from a Map in Java

Forcing latest rendering engine in Internet Explorer

Internet Explorer and compatibility modes… I already posted about that topic earlier.

Yet, I recently began trying out Bootstrap (as you may have noticed if you keep an eye on Keyboard Playing’s homepage, or if you tried to have a look at the About or cyChop page which appear in the top menu) and discovered a new <meta /> tag in it. This was the right way to do it…

Replacing something dirty with something clean

Last time, I wrote (inspired from a French blog post) that to force IE, a sufficient way was to force a version number higher than any IE existing yet:

This works. Yet, there is a cleaner way to do this:

There are two interesting things:

  • IE=edge will force Internet Explorer to use the latest rendering engine available;
  • chrome=1 tells that if Google Chrome Frame is installed, it should be used to render the page.

Of the place of the tag in page [Update 2013-12-04]

When running a page through IE with the compatibility mode active, you can meet this warning:

This simply means IE already began rendering your HTML and cannot change the mode it chose. To prevent this, just remember: <meta/> tags should always be at the top of the <head/> section. No other tag before all <meta/> have been written.

Still getting better

Don’t want to add this header to all your pages? If you use a .htaccess file (or even better, if you have access to your Apache configuration file), you can set your server to send this instruction along with the HTTP headers (as I have done on Keyboard Playing, and should extend to the blog soon). It will then automatically apply to all the pages of your website.

Here is the code you would need to apply:

There, you’re all set!

(edit: a reader highlighted the fact that, as of IE11, IE has no longer ‘MSIE’ in its user agent, but is using ‘Trident’ instead)

Unit-testing a REST-client Spring bean

I guess a bit of context is required here: I had to implement a Spring bean which should be able to call a distant REST service, with high availability constraints. One of them was that even if distant service was down, the bean should return a result and not an Exception.

Of course, I wanted to ensure my bean behaved the right way, no matter what future evolutions would bring. Unit-testing then. Since it is a Spring bean, using Spring test. But then an awful question: how do I simulate a call to a distant servlet in a Sprint test context?

The REST-client bean

Something very basic, using Apache’s httpclient to retrieve a stream. See the example:

Here the Maven dependency for httpclient:

And finally the bean initialization in the Spring application context:

From the real thing to the unit-tests

Of course, since the URL is set in the Spring context, it easy to map to another one in the test context. Yet, I must have something listening to the test URL.

Something inside my test context, since I do not want to depend onto another server. Using Spring remoting? Start an embedded Jetty? Those seemed possible, but uselessly complicated.

For the first time, I asked for Stackoverflow’s help, and it came to me with the hints I needed to google out the pieces I was missing.

Unit-testing using a light embedded application server

I was recommended to use javax.xml.ws.Endpoint with a JAX-RS annotated-class. The second part was what I aimed at from the beginning, using Jersey. However, Endpointquickly proved designed for use with SOAP services, not REST.

I kept searching for something similar and found an example of how to use Jersey classes with a Grizzly embedded server. It is acutally dead simple.

Write a fake REST service

There are a-many tutorials about Jersey, I will let you find the one fit for you if need be.

Here is my fake service, yet. As I wanted to test the behaviour of my bean with several HTTP error status codes (401 if my request is incorrect, 404 if the distant service is down, 500 if I break it down, …), I decided that the passed parameter would be parsed to cause this status code if beginning with 10, 20, 30, 40 or 50. If it is any use to you, you are welcome to copy it (though it is quite basic, but quite enough for my unit-tests).

Publish to a server

How difficult can it be to write a server? Very little, actually, if you know which server to call. I chose Grizzly. See below.

As for publication to the server, the highlighted line does most of the work.

 Start the server in the Spring context

Basically, all you have to do is to is set the bean with a URL and call the start() method. Translated for your context, it looks like the following:

 Almost done!

Now, when your Spring test context starts, a Grizzly server is started and listens on http://127.0.0.1:8088

Plus, a webservice is deployed onto it. The Path annotation tells us it will be made available at http://127.0.0.1:8088/hello

OK, so we just have to initialize our to-be-tested REST-client bean with the correct URL for the service:

You’re good to go and test all the cases you want to!

Which dependencies should I use?

Right, I almost forgot I myself had some troubles figuring out which dependencies to use…

You might want to declare some repositories too:

 And what about SOAP?

Well, for SOAP, you can apply quite alike-looking practices, using javax.xml.ws.Endpoint instead of a Grizzly server, and the J2EE JAX-WS annotations instead of Jersey.

Use attributes and interfaces on Java enums

Most Java developers know of Java enums. Most developers also know that each field of an enum can define its own methods. But even most of those who know that are not aware they can define a contract each field of the enum must implement.

It might seem a useless piece of information. Yet, in my own case, it was really useful to me… Continue reading Use attributes and interfaces on Java enums

Centering a dynamic-width block on a web page with CSS

I was trying in designing a new home page for Keyboard Playing that implied CSS centering. And I succeeded. It even passes the W3C validation services (for now that is; it may change next time I tinker with it).

Yet, my layout put me in some difficulty until I found a way to do it. Basically, I wanted a keyboard (did not even think of a link with the name) of buttons leading to various links, but this keyboard had to be centered in page. And I wanted this centering to be dynamic.

I found a way. I am not proud of it since, though the W3C validator acknowledges it, IE7 does not. Well, it is not beautiful but can be used anyway.

So, read this post if you want some advice… Continue reading Centering a dynamic-width block on a web page with CSS

How to make a portable LaTeX editor

$\LaTeX$ (or more generally $\TeX$) is a wonderful tool when it comes to writing reports. I already wrote about how to use Eclipse with a few plugins to have a portable $\LaTeX$ editor.

There was a limitation however: though I hinted that some compilers exist in a portable version, I used TeXlipse with an installed MiKTeX. Now, a friend of mine required an editor to fine-tune something I prepared, and I did not wish to force a full installation.

So, here is how I prepared a portable $\TeX$ editor on a USB stick in half an hour (most of which was spent downloading), which shall work on any Windows machine. Continue reading How to make a portable LaTeX editor

IE8 and the compatibility mode

Well, working on a GWT/GXT application right now, and the latest challenge was to ensure compatibility in Internet Explorer 8. If most GWT components behave quite well in all browsers, GXT introduces some problems through permitting things IE cannot understand.

But once the GXT source code is correct, layout and CSS problems remain. Internet Explorer, or the nightmare of any web developer…

Yet, playing with the development tools and available compatibility modes, I found out that IE7’s compatibility mode introduces problems which are ruled out through using IE8’s engine. So, the only thing left to do was to forbid IE8 to use the compatibility mode, so that users do not have to tinker with settings the way I did.

Specify the compatibility mode in IE8

Quite simple actually. IE does not use comments this time, but a real <meta /> tag. I still find it ugly, but it is better nonetheless.

So, for people who must force Internet Explorer to behave like an older version, you just have to insert this tag inside your <head>:

Forbidding compatibility mode in IE8

That is all fair and well, but for those who remember, I aimed exactly at the contrary: not forcing the compatibility mode but preventing it instead.

Well, this actually is just as easy:

Forcing the compatibility mode to the latest version

This tip can be used to make Internet Explorer use the latest known version, and thus anticipate future versions of the browser. It looks quite like the precedent:

And in IE9+?

I actually have no idea, as my own concerns were with IE8 (for now).

Logically, the forcing the compatibility mode should work as long as the browser include this compatibility. As for forbidding it, the second tip is quite clear.

If you have any tip about compatibility mode in IE, just share it with us!

(inspired from a French post: http://nukium.com/developpement-php/interdire-le-mode-de-compatibilite-ie7-dinternet-explorer-8-ie8/)

GWT and Maven: create a project and run it in hosted mode

Title is explicit: how to create a GWT project with Maven? Nothing fancy here, just taking the sample project the Eclipse GWT plugin generates and turning it into a Maven project.

All sources presented in this post can be obtained from my Github.

As for the steps to follow,  Continue reading GWT and Maven: create a project and run it in hosted mode