Recent Posts
Archives

Archive for the ‘General’ Category

PostHeaderIcon How to compile both Java classes and Groovy scripts with Maven?

Case

Your project includes both Java classes and Groovy scripts. You would like to build all of them at the same time with Maven: this must be possible, because, after all, Groovy scripts are run on a Java Virtual Machine.

Solution

In your pom.xml, configure the maven-compiler-plugin as follows:
[xml] <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<compilerId>groovy-eclipse-compiler</compilerId>
<source>1.6</source>
<target>1.6</target>
</configuration>
<dependencies>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-eclipse-compiler</artifactId>
<version>2.8.0-01</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-eclipse-batch</artifactId>
<version>2.1.5-03</version>
</dependency>
</dependencies>
</plugin>[/xml]
With such setup, default compiler (which cannot compile Groovy scripts parallelly of Java sources) will be replaced with Eclipse’s one (which can).

PostHeaderIcon Comment desactiver le NFC sur une carte bancaire?

Disclaimer: tout ce qui suit dans cet article est presente a des fins informatives. Toute action que vous pourrez entreprendre sera a vos risques et perils, et pourrait endommager votre carte de credit.

Cas

Les grandes banques francaises ont mis en place le NFC, ou “paiement sans contact” pour les marketteux. Les nouvelles cartes de credit, emises depuis fin 2012 apparemment, sont toutes equipees du NFC. Quel est le probleme? Eh bien tout simplement que la mise en place du NFC sur les cartes bancaires n’a pas ete securisee… Il s’agit d’un echec cuisant de la part des societes editrices (Visa, Master Card, etc.), qui n’ont pas ete capables d’entourer leur projet d’un peu de rigueur, technique et fonctionnelle, assurant un minimum de securisation : on ne demande pas non plus un coffre fort, mais juste qu’un quidam dans le metro ne puisse pas chipper les numeros de carte bleue des autres voyageurs.
Plus de details concernant les failles du NFC dans ces liens:

De mon cote, apres avoir joue avec du code librement telechargeable sur le net (comme readnfccc) sur mon telephone (un Nexus S de base avec “lecteur” NFC), la decision a ete claire, nette et immediate: pas de NFC sur ma carte!

J’ai donc informe mon banquier de mon refus il y a quelques mois. Las, lors du renouvellement de ma carte, la nouvelle comportait bien du NFC. J’ai bataille avec mon banquier, et j’ai meme demarre les demarches pour fermer mon compte. Cependant, meme s’il est desactive (Boursorama par exemple le propose), le module NFC sera present sur les cartes de toutes les banques. J’etais donc bien ennuye et j’ai donc refuse d’activer ma carte pendant plusieurs mois.

Trois choix s’offraient alors a moi: capituler en rase campagne, vivre de cheques et d’especes, ou bien faire le travail de messieurs les banquiers et securiser moi-meme ma carte: geek power!

Bobine, induction… Physique du NFC

En resume: la carte bancaire contient une puce NFC (je dirais meme RFID, mais je ne suis pas sur de mon coup), branchee a une bobine electrique plate, egalement integree a la carte bancaire. Lorsque la carte bancaire se trouve soumise a un champ magnetique, un courant est cree par induction (vecteur F = q * produitVectoriel(vecteur vitesse, vecteur champ magnetique), d’apres mes souvenirs).

Par consequent, pour desactiver le NFC, il suffit de detruire la puce NFC ou de casser l’induction, en coupant la bobine.

Suppression du NFC

Puce

La premiere solution est mentionnee par plusieurs sites americains: en effet, sur les cartes US (le “paiment sans contact” s’y appelle “PayWave”), il n’y a qu’une bande magnetique, et l’emplacement de la puce NFC est visible a l’oeil nu en inclinant la carte: la surface de la carte y est legerement creusee. Il suffit alors de detruire ou retirer la puce NFC, avec un cutteur, un compas, ou tout autre objet tranchant.

Sur une carte francaise cela n’est pas possible: en effet, nos cartes de credit comportent une puce (utilisee pour le paiment chez les commercants) en plus de la bande magnetique (utilisee pour les retraits d’especes en agences). Or, la puce NFC est physiquement superposee a la puce propre a la carte… Donc, a moins d’y aller au microscope, impossible de detruire la puce NFC sans rendre la carte inutilisable pour les achats.

Bobine

Reste donc la faille de la bobine.

La premiere etape consiste a reconnaitre le parcours de la bobine dans la carte, et identifier un endroit d’incision. Pour cela, se mettre dans le noir complet et utiliser une source de lumiere puissante, type torche. Le flash du Nexus S n’est pas parfait, mais il donne de bons resultats.
La photo suivante donne une idee du parcours de la bobine sur une carte Visa factice delivree par BNP Paribas:


Parcours de la bobine NFC (lien Google+)

Attention! les circuits varient selon les banques, les societes emetrices des cartes, voire meme le type de carte (Electron, classique, Gold, Black).

Il convient donc de couper le circuit en un endroit, quelconque, tout en prenant soin de ne pas toucher a la bande magnetique ni a la puce de la carte.

Dans l’image suivante est representee (en rouge gras) l’incision que j’ai faite a la carte, a l’aide d’une bete paire de ciseaux: du cote droit de la carte, d’une largeur de 10mm, parallelement a la longueur, et a un niveau de 38mm en partant de la base de la carte.


Incision dans la bobine NFC d’une carte de credit (lien Google+)

Pour rappel, une carte de credit standard obeit a la norme ISO-7810 ID-1 et sa taille est de 86mm sur 54mm.

Conclusion

Apres cette operation chirurgicale -n’exagerons pas non plus-, j’ai pu verifier que le NFC etait totalement desactive, mais que les retraits d’especes ainsi que les paiements classiques chez les commercants, c’est-a-dire en assurant un contact physique et en entrant le code PIN, continuaient a fonctionner en France. Pour l’heure, je n’ai teste ni aux USA ni en Inde :-D, mais j’ai bon espoir qu’il n’y ait pas de souci.

Toute personne de tendance paranoiaque en terme de securite informatique pourra egalement calfeutrer sa carte bancaire dans une feuille d’aluminium hermetique, operant l’effet d’une cage de Faraday.

Cela etant, je reste stupefait par l’enorme echec de Visa et Master Card dans la mise en place du NFC. Un tel manquement aux regles de securite elementaires est consternant. Comment peut-on pretendre developper le commerce en laissante beantes de telles failles de securite?

De meme, je reste stupefait de la legerete avec laquelle les banques traitent ce scandale du NFC: il est du ressort des banques de detail de fournir des moyens de paiement un minimum securises. A tout le moins, on aurait attendu des banques qu’elles laissent le choix d’avoir une carte avec ou sans NFC, et non d’imposer d’office un choix plus que contestable. Ce n’etait pas a moi de securiser ma carte, c’etait a ma banque de m’en fournir une suffisamment blindee ; de plus, je doute de la capacite de Mme Michu d’effectuer les memes operations que moi.

Bref: carton rouge pour toutes les institutions impliquees dans la diffusion des cartes NFC!

PostHeaderIcon How to know which versions of Xerces and Xalan are run in the JDK?

Run this command:

[java]java com.sun.org.apache.xalan.internal.xslt.EnvironmentCheck[/java]

PostHeaderIcon (long tweet) How to make ChromeOS work in VirtualBox without Wifi?

Case

How to make ChromeOS work in VirtualBox without Wifi, ie on an ethernet/wired local network, or even offline?

Quick Fix

Shutdown the VM > Select it > Settings > Network > Advanced > Adapter Type > select “Paravirtualized Network (virtio-net)”

PostHeaderIcon (long tweet) Virtual Box / PAE processor

Case

On booting ChromeOS Vanilla within Virtual Box, I got the following error:
[java]This kernel requires the following features not present on the CPU: pae
Unable to boot – please use a kernel appropriate for your CPU.[/java]

(Actually, the problem occured with ChromeOS but may have appened with another system)

Quick Fix

In Virtual Box, select the VM > Settings > Processor > check “Enable PAE/NX”.

PostHeaderIcon (long tweet) A story of return in try/catch/finally

A short reminder: in a try/catch/finally section, the block in the finally is always executed. “Always” means “even if a return statement is reached in the try or catch“.

A short piece of code shows more than a long speech. The following JUnit test ends with no error:
[java]package com.stepinfo.poc.cartography;

import org.junit.Test;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotSame;

/**
* Created with IntelliJ IDEA 12 "Leda" CE
* User: Jonathan LALOU
* Date: 08/Apr/13
* Time: 22:41
*/
public class TestTryCatchFinally {

public static final String TRY = "try";
public static final String CATCH = "catch";
public static final String FINALLY = "finally";

private String tryVersusFinally() {
try {
return TRY;
} catch (Exception e) {
return CATCH;
} finally {
return FINALLY;
}
}

private String catchVersusFinally() {
try {
throw new RuntimeException();
} catch (Exception e) {
return CATCH;
} finally {
return FINALLY;
}
}

@Test
public void testTryFinally() {
assertNotSame(TRY, tryVersusFinally());
assertEquals(FINALLY, tryVersusFinally());
}

@Test
public void testCatchFinally() {
assertNotSame(CATCH, tryVersusFinally());
assertEquals(FINALLY, catchVersusFinally());
}
}
[/java]

PostHeaderIcon (long tweet) java.lang.SecurityException: Prohibited package name

Case

Here is a case of stupid error. I started up a new project in IntelliJ IDEA, laying on a Maven archetype. On launching the first unit test, I got the following error:
[java]Cannot instantiate test(s): java.lang.SecurityException: Prohibited package name: java.lalou.jonathan.multiposts[/java]

Quick fix

As you may have noticed, the package name was prefixed with java.… which is prohibited by the JDK. An immediate fix is to restore a package name not starting with java..

The code in the JDK is explicit: the exception with such a message is raised in a unique occasion:
[java] if ((name != null) && name.startsWith("java.")) {
throw new SecurityException
("Prohibited package name: " +
name.substring(0, name.lastIndexOf(‘.’)));
}
[/java]

PostHeaderIcon Retour sur Devoxx FR 2013

J’ai eu la chance d’assister a la derniere journee de DevoxxFR a Paris, le vendredi 29/03/2013, pour le compte de mon employeur StepInfo, sponsor de l’evenement. Voici quelques impressions en vrac

General

  • C’est bien organise, il y a du monde, et excepte au moment du depart au niveau des vestiaires, il n’y a pas eu de gros souci de logistique.
  • Les entreprises sponsors ont joue le jeu 😉
  • Que ce soit au niveau des stands ou des conferences, la domination des Mac est ecrasante! Google a reussi a mettre en valeur ses ChromeBooks, mais j’ai vu peu de Windows et encore moins de Linux.
  • J’ai pu assister a 4 conferences, toutes interessantes, mais d’un niveau heterogene, je reviens dessus plus en detail ci-dessous.

IDE Java : astuces de productivité pour le quotidien

La conference est animee par Xavier Hanin (@xavierhanin). Il y presente les trois IDE phares du monde Java: NetBeans, Eclipse et IntelliJ IDEA.

Maitrisant plutot bien IDEA, je n’ai pas appris de choses fondamentales sur mon IDE, si ce n’est le raccourci Ctrl+Shift+A pour afficher les intentions. J’ai connu NetBeans a ses debuts (Forte puis Sun ONE), mais j’en ai totalement perdu la maitrise depuis des annees. Quant a Eclipse, il m’arrive de le lancer quelques fois par an pour des problematiques clients specifiques, mais je suis contraint d’avoir recours a la souris en quasi-permanence ; sous IDEA c’est tres rare.

Un “sondage” assez grossier des personnes dans la salle a donne des resultats interessants: ~15% des developpeurs presents utilisent NetBeans, ~25% IDEA et ~90/95% Eclipse.

Quick Start avec le Cloud Google

La conference est animee par Didier Girard de SFEIR et Alexis Moussine-Pouchkine de Google France. Les principaux outils de Google pour le cloud sont presentes, en prenant pour hypothese de creer une startup: une solution “a l’ancienne”, avec serveurs d’applications, gestion materielle etc. est avancee, avant de ceder la place a une solution entierement sur le cloud de Google.

En un mot: c’est tres convaincant.
Je regrette que le sujet n’ait pas ete elargi vers des solutions cloud alternatives, comme celle d’Amazon.

The Spring Update: Looking at Spring 3.1, 3.2, and 4.0

La presentation est menee par Josh Long de SpringSource. On se rend compte tres rapidement que ne serait-ce que pour la qualite du show, nous les Francais (voire les Latins) nous sommes largement en dessous de la qualite des Anglo-Saxons.

Josh enonce ses concepts, donne des exemples, met l’eau a la bouche. Au bout de 50′ de conference, je n’ai plus qu’une envie: retourner coder avec les dernieres versions de Spring!

Parmi toutes les nouveautes, j’en retiens deux:

  • l’AnnotationConfigApplicationContext, qui m’evitera de taper d’ecrire un bloc comme:[xml]    <context:component-scan annotation-config="true" base-package="lalou.jonathan.beans"/>[/xml]
  • l’integration future des websockets d’HTML5 pour obeir a la norme JEE7 d’ici la fin de l’annee.

Ce dernier point m’interesse particulierement, en raison d’un projet sur lequel je travaille actuellement, et dont nombre de problemes seraient resolus par les websockets de JEE7. Theoriquement, et potentiellement, d’ici la fin de l’annee 2013, nous pourrions integrer une brique “Spring JEE7” avec websocket au sein d’un WebSphere 8 (donc non JEE7-compliant), au lieu d’etre dependant dans la prochaine release du serveur d’applications d’IBM.

Josh:

Entre HPC et big data: un case study sur la simulation du risque de contrepartie

C’est la conference dont j’ai vu le moins le rapport avec Devoxx, mais ayant passe 7 ans dans la finance de marche j’y ai trouve mon interet. En passant, j’y ai vu le seul PC sous Windows de toutes les conferences :-D.

Le theme de cette conference est: comment deporter une partie du calcul intensif de Monte-Carlo du CPU vers les GPU? Ces derniers ont une taille et une structure de memoire radicalement differente de celles des CPU (CPU+RAM pour etre plus precis). Les GPU permettent d’effectuer des masses de calcul en un temps bien plus faible (jusqu’a 99% de gain) qu’en architecture classique, moyennant une reecriture du code C en un autre langage adapte, par exemple OpenCL.

Les deux speakers, de Murex, sont Adrien Tay Pamart (visiblement pas tres a l’aise en mode geek) et Jonathan Lellouche pour la partie technique.

Durant les questions, l’existence de ponts Java vers OpenCL, comme JavaCL est evoquee. Il est dommage de ne pas avoir plus de temps pour creuser ce theme.

5 ans et 500 releases en 50 minutes !

La presentation est dirigee par Freddy Mallet  et Olivier Gaudin de Sonar.

La demonstration est rudement bien faite. Les dirigeant de SonarSource retracent, dans un ordre plus ou moins chronologique, les problemes, ou les impediments a-t-on envie de dire, rencontres en 5 ans sur Sonar.
Quelques themes forts: le context switching est une plaie, on ne gere pas une entreprise commerciale avec des clients comme un simple projet open source, etc.

En guise de conclusion

Devoxx a repondu aux attentes que j’avais en y entrant:

  • une journee de formation intensive et motivante
  • revoir des “anciennes tetes”
  • echanger des cartes de visite

Qu’il me soit donc permis ici de remercier StepInfo pour m’avoir permis d’acceder a cette journee, ainsi que les organisateurs de Devoxx pour le travail qu’il ont accompli.

Vivement DevoxxFR 2014!

PostHeaderIcon Maven: How to use jars in a lib/ folder?

Case

I have to work on an “old-school” project: without Maven (and even without integration within Eclipse). The JARs depended on by the application are located in a lib/ folder. Besides, I cannot add JARs to company repository.
How to integrate Maven with this lib/ folder?

Solution

First of all, you have to enable the support of Maven within IntelliJ IDEA: select the project > right click > add framework support > select Maven.

Create a pom.xml and complete the main information.
Identify the JARs which are relatively common (eg those available in http://repo1.maven.org/maven2/), and add them as dependencies.

Now, you still have to deal with “uncommon” JARs

Quick and (very) dirty

The quickest way is to add the JARs as dependencies, declared with scope system, eg:
[xml]<dependency>
<groupId>unknownGroupId</groupId>
<artifactId>someArtifactId</artifactId>
<version>someVersion</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/foo.jar</systemPath>
</dependency>[/xml]

The main drawback of this dirty solution is that when you generate your archive, the JARs depended on with scope system will not be exported… Quiet a limitation, isn’t it?

(A bit) Slower and (far) cleaner

You have to declare a “remote repository”, of which URL is local, such as:
[xml]<repository>
<id>pseudoRemoteRepo</id>
<releases>
<enabled>true</enabled>
<checksumPolicy>ignore</checksumPolicy>
</releases>
<url>file://${project.basedir}/lib</url>
</repository>[/xml]

Then, declare the dependencies like:
[xml]<dependency>
<groupId>UNKNOWN</groupId>
<artifactId>foo</artifactId>
<version>UNKNOWN</version>
</dependency>[/xml]
Move and/or rename the JARs, for instance from lib/foo.jar folder to the actual one, such as lib/UNKNOWN/foo/foo-UNKNOWN.jar.

Now it should be OK ;-).
In my case I prefered to add Maven Assembly plugin with the goal jar-with-dependencies, to be sure to build a unique JAR with complete exploded dependencies.

PostHeaderIcon Tutorial: a Windows XP as guest VM in Virtual Box

Target and Constraints

I need a Windows XP running as a virtual machine (VM).  Don’t think of using your former OEM licence, it won’t work: Windows checks and makes a difference between OEM and other licences.

Microsoft provides VHD files: you can consider them as “virtual” HDD. Officially, these VHD files are intented at developpers to test their websites on various Windows (XP to Seven) and Internet versions (6 to 9).

The VHD files provided for Windows XP need a licence key to be activated, and therefore have two main drawbacks:

  1. after three days and/or three reboots, the system will allow you to log in anymore. That’s quiet a limitation :-(.
  2. But wait, there’s even worse: the VHD file provided by Microsoft will be completely disabled on February 14th, 2013!

At last, I stress on having an absolutely legal solution, since it will be deployed both on personnal (Ubuntu) and professional (Windows 8 ) desktop computers. I do not want to waste my time playing hide and seek with authorities.

Prerequisites

In this post I will assume you are a bit familiar with working on VirtualBox. If you are not, then browse the web, ask Google, RTFM, or, at last, leave a message in the comments, I’ll try to figure out a moment to write a short tutorial.

Operations

Classic

  • Create a VM within VirtualBox
  • Name it “Windows XP” for instance
  • Set the VHD file as the one downloaded and unzipped above.

Specific

  • Run the VM. You must log in as IEUser. The default password is Password1 (on French keyboards: Pqsszord&)
  • Do not validate the licence.
  • The VM will require CmBatt.sys(and possibly another one):
    • On host system: mount SP3 iso device > CD/DVD Devices> Choose a virtual CD/DVD virtual file > select WinXP SP3 ISO (xpsp3_5512.080413-2113_usa_x86fre_spcd.iso)
    • On guest system: run the CD, eg: Windows+E > D:\ > Autoplay > Install. All the files will be unzipped in a folder such as C:\1a2b3c4d5e... (with hexadecimal value).
    • In the frame asking for CmBatt.sys, select it in C:\1a2b3c4d5e...\i386
  • Windows XP will ask for drivers and try to download them. But the ethernet card has not yet been installed!
    • On host system:
      • Mount the  ethernet_drivers_for_WinXP_VirtualBox.iso (cf. above for details)
      • Devices > Install Guest Additions > accept all
    • On guest system: manually install drivers for ethernet card.
  • In order to bypass the limitation of February 14th,
    • if you read this post after February 14th, 2013: set the system time to January 1st 2013 for instance (I didn’t test ; it should work)
    • disable time synchronization between host and guest systems, eg:[java]$VIRTUALBOX_HOME/app32/VBoxManage setextradata "Windows XP" "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 1[/java]

Now everything should work. I suggest to take a snapshot ;-), and then to revert to it as often as needed.

Conclusions

Officialy, the VHD files provided by Microsoft are intented at developpers who need test their websites on obsolete and out-of-date browsers like Internet Explorer. But you can imagine many other usages. On my side, the interest is to have VM as a module in a complete integrated testing environment and in the frame of a software forge.

My opinion? The solution provided by Microsoft does exist, it’s better than nothing ; anyway, implementing it is a far hard matter. Limitations and complexity of install spoil the user experience. It’s a pity, because the idea of VHD is great, but does not match that of precompiled open source Virtual Boxes: http://www.virtualboxes.org