I am one of the lucky guys getting this hyped discontinued tablet from HP at the lowest price. I'll sum up here few things I did on it.

First impressions

I am an iPad owner for almost a year now, so I have my habits and I now know that tablets are mainly useful for consuming content (producing content is not really convenient when you have to use the virtual keyboard). The Touchpad is really what you expect from a tablet, full web consuming, multitasking, flash support, at a really decent speed.

Continuous delivery

After Continuous Integration, this is the word we see on the web these days. Its meaning is really simple, it consists in reducing steps in application deployment. In order to do so a set of tools actually exists, you can use the same PaaS images (thanks to the newcomer Micro Cloud Foundry by VMWare or use a special amazon ec2 instance) to have a development environment similar to production one. And you can use Chef to manage and automate your configuration. While these alternatives are really interesting, I think they are way too powerful and difficult to setup in simple cases.
I will explain my "simple" solution based on maven, shell scripts and hostname detection.

Example release archive

An example is better than a thousand words, you will find an example of my solution in a github repository Easy Release Archive. It is a maven project building a zip artifact containing everything to be deployed, and an example script to setup the Glassfish server.

What is inside ?

To understand how it works, the best thing is to look what's inside.

  • an assembly.xml file describing the files to include and their output name and location.
  • a few scripts in /src/main/resources
    • sanityCheck.sh : helper script sourcing the correct variables depending on the hostname of the machine and ensuring variables are correctly setup
    • setupGlassfish.sh : a sample script used to setup a Glassfish server with its required datasources and other parameters
    • a global folder containing global configuration files
    • a per hostname folder (in my case samva-mbp) containing a shell/envSetup.sh shell script to setup necessary variables and a config folder for special environment configuration files.
  • the pom.xml file describing artifact versions to use in the assembly and the lifecycle to use.

A simple mvn package will build the zip archive with everything described in the assembly.xml file. You will just have to unzip and run the script(s) corresponding to the application deployment for it to be done. You can add this command line to your build server and you will have a simple but powerful continuous delivery system !

I am a daily user of IntelliJ IDEA to edit my Java code and Apache Wicket to write my web application. I decided recently to use IntelliJ's annotations to make my code a little more robust by using @Nullable, @NotNull, @NonNls and @PropertyKey.
In this blog post I explain how to manually add annotation to an external library.

A frequent problem when it comes to internationalisation is proper handling of different charset. When you're using Java and Maven it is relatively easy to set up source encoding to UTF-8, but the frequent point of failure is in the SQL database.
If you use mySQL, and you have latin1 tables, but you should have UTF-8 instead, use this little script to convert from latin1 to UTF-8 :
mysqldump --user=${USER} --password=${PASS} --default-character-set=latin1 --skip-set-charset ${DATABASE} > dump.sql;
sed -r ‘s/latin1/utf8/g’ dump.sql > dump_utf.sql
mysql --user=${USER} --password=${PASS} --execute=”DROP DATABASE ${DATABASE}; CREATE DATABASE ${DATABASE} CHARACTER SET utf8 COLLATE utf8_general_ci;”
mysql --user=${USER} --password=${PASS} --default-character-set=utf8 dbname < dump_utf.sql
Generally speaking, don't hesitate to always put the --default-character-set=utf8 on all the mySQL commands you execute. Don't forget to add at the end of your jdbc connection url the following parameters : "useUnicode=true&characterEncoding=UTF-8" to ensure you connect using UTF-8.