- page 1 de 13

UTF-8 pour le chinois : il parait que ça marche

UTF-8 Alors alors, peut-on écrire du chinois avec de l'UTF-8 ? La réponse est : OUI !

Par contre, c'est un chinois simplifié qui ne contient donc pas tous les caractères chinois. Si on ne souhaite pas fricoter avec l'unicode, on peut aussi utiliser son homologue chinois (c'est-à-dire l’équivalent de l'UTF-8 (standard international) version chinoise. Bizarre non ?) : GB18030. Mais la encore, c'est du chinois simplifié. Pour avoir du chinois traditionnel, il faut faire face à Big5 (je trouve que le nom en jette !).

Tout ceci explique pourquoi la classe Locale de Java (qui permet de gérer la langue à utiliser) définit le racourci : Locale.TRADITIONAL_CHINESE et Locale.SIMPLIFIED_CHINESE.

Pour info, Google.ch utilise l'UTF-8 et après quelques minutes de surf sur des sites chinois (avec une collègue chinoise qui m'a montré tout ça), il y a des sites en UTF-8 et des sites en GB18030.
J'aurai peut-être l'occasion de tester ça d'ici 3 semaines, si c'est le cas je confirmerai ou infirmerai ce billet.

Pour aller plus loin

Fichier de configuration SSH

SSH SSH est tout de même un protocole vraiment formidable pour accéder à un serveur distant. Une petite ligne de commande, un mot de passe (et/ou une clef publique) et hop, c'est comme si on était sur la machine qui se situe parfois à je ne sais quelle distance de nous, le tout sécurisé ! Que demander de plus ?
Cela dit, si vous êtes comme moi, vous en avez peut-être légèrement marre de taper la ligne de commande de connexion :
ssh username@monhostquiestparfoisuneadresseIPcompliquee
Ou pire s'il faut préciser une clef DSA ou RSA :
ssh -i cheminversmaclefengeneralpastrescourt/maclef username@monhostquiestparfoisuneadresseIPcompliquee

Lire la suite »

Bosser chez Google

Google !

Vu tous les (projets de) rachats d'entreprises effectués par Google ces derniers temps, je me dis qu'il y a deux solutions pour bosser là bas :

  • Réussir tous ses entretiens d'embauche chez Google (vu les questions posées, c'est mal barré !)
  • Faire partie d'une boîte innovante et à la pointe, touchant à la gestion ou l'analyse de données (le multimédia c'est à la mode !), et qui ne serait, si possible, pas mécontente d'être rachetée

La deuxième méthode est presque plus grisante, non ?

Edit : Petit résumé des achats estivales de Google sur Zorgloob : Liste de shopping Google

Tester l'égalité de 2 variables sous Maven

Instinctivement pour tester l'égalité de deux variables sous Maven, moi j'écrirai :

<j:if test="${var1 == var2}">
	<echo message="var1 égale var2" />	
</j:if>

Mais visiblement sous Maven, ça ne marche pas comme ça ! Le code suivant renverra un résultat pour le moins aléatoire. Du coup, en réfléchissant et en parcourant la Toile (qui est très pingre à ce sujet), je me suis mis à écrire :

<j:if test="${var1.equals(var2)}">
	<echo message="var1 égale var2" />	
</j:if>
<j:if test="${var1.equals('test')}">
	<echo message="var1 égale 'test'" />	
</j:if>

Et la, ahah : ça marche ! Pour comparer deux variables ou une variable et une valeur.
Pour comparer deux valeurs, il faut se rabattre sur le classique :

<j:if test="${'valeur1' == 'valeur2'}">
	<echo message="valeur1 égale valeur2" />	
</j:if>

Et pour comparer deux variables dont la première contient des points (ex : ma.variable) : bah on peut pas. Il faut renommer sa variable sans point. Bizarre, mais c'est le seule solution que j'ai trouvé pour l'instant.

<j:set var="maVariable" value="${ma.variable}" />
<j:if test="${maVariable.equals('test')}">
	<echo message="ma.variable égale 'test'" />	
</j:if>

Et voilà le travail ! Pour information, j'utilise ici le plugin jelly:core, je l'ai donc déclaré au début de mon fichier maven.xml :

<project  xmlns:j="jelly:core">...</project>

Lister, ajouter, modifier, supprimer des variables d'environnement sous Windows

Comme tous les OS (à ma connaissance), Windows possède des variables d'environnement qui sont accessibles pour tout le système. Par exemple : USERNAME contient le nom du user connecté, COMPUTERNAME contient le nom de l'ordi, OS le nom de l'OS.

Lister les variables d'environnement

Dans une console Windows (Menu démarrer > Excécuter > cmd, ou sur un dossier Clic droit > Open Command Windows Here), il suffit de taper set pour voir la liste des variables d'environnement actuelle.
Donc, le code ci-dessous :

set

Affiche par exemple :

ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\Maridat\Application Data
CommonProgramFiles=C:\Program Files\Fichiers communs
COMPUTERNAME=gfhhfgfd
ComSpec=C:\WINDOWS\system32\cmd.exe
FILE_SERVER=BK01
FP_NO_HOST_CHECK=NO
HOMEDRIVE=C:
HOMEPATH=%%% JAVA_HOME=C:\programs\jdk1.6
JBOSS_HOME=C:\programs\jboss-4.0.3SP1
LOGONSERVER=\\S083
OS=Windows_NT Path=C:\oracle\product\10.2.0\client_1\bin;C:\WINDOWS\system32;...:C:\programs\putty;
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 6 Model 23 Stepping 10, GenuineIntel
ProgramFiles=C:\Program Files
...

Voir la valeur d'une variable

Voir la valeur d'une variable est très facile :

set NOM_DE_LA_VARIABLE

Donc l'exemple ci-dessous affichera : C:\Program Files

set ProgramFiles

Modifier la valeur d'une variable

set NOM_DE_LA_VARIABLE=valeur

L'exemple suivant modifie la valeur de JAVA_HOME

set JAVA_HOME=C:/programs/jdk1.7

Pour rappel, on peut afficher la valeur d'une variable dans une ligne de commande en l'entourant de pourcentage : %VARIABLE%. Ce qui nous permet de prendre connaissance de ce bout de code utilisé fréquemment et permettant de modifier la valeur de la variable d'environnement PATH.

set PATH=%PATH%C:/nouveau/chemin;

Supprimer une variable d'environnement

Rien de place simple, il suffit de lui transmettre une valeur vide :

set MA_VARIABLE=

Documentation et tutoriel Hibernate

Hibernate est un framework utilisé en Java EE permettant de gérer ce que l'on appelle la "persistance des objets" en une base de données.
En français courant : en Java on travaille sur des objets, on réfléchit avec des objets et en général on souhaite pouvoir stocker quelques uns de ces objets quelque part. Pour se faire, on utilise le plus souvent une base de données et celle-ci est rarement une BDD objet (car trop compliqué, pas performant et patati et patata) mais plutôt une BDD relationnel (c'est-à-dire : pas objet). Hibernate permet de faire le lien entre Java et la BDD en facilitant les accès via HQL (d'habitude on utilise le SQL pour accéder à une BDD relationnel, HQL utilise une syntaxe similaire mais manipule des objets), et surtout en faisant en sorte que Java n'ai qu'à traiter des objets. Bref, Hibernate fait gagner un temps fou au développeur, tout en lui permettant de se concentrer d'avantage sur l'essentiel.

J'ai découvert des documentations et des cours Hibernate 2 et Hibernate 3 sur le "site Internet" de M. Masssat, un enseignant-chercheur à Marseille. Je les consulte de temps en temps et c'est du tout bon.

Et M. Massat fournit aussi quelques autres liens vers des infos sur Tomcat, JSP, ... : Le coin des docs...

Merci à lui et bonne lecture !
Au passage, dans mon bouquin sur Java EE 5, l'auteur parle de JPA. JPA est apparu avec Java EE 5 et a le même rôle qu'Hibernate sauf qu'il est intégré nativement à Java. Les développeurs de Sun se sont inspirés du travail effectué sur Hibernate (ainsi que d'autres frameworks faisant la même chose) et ont standardisé la chose. A ma connaissance, JPA commence à être utilisé de plus en plus massivement, donc à mon avis, ça vaut le coup de s'y intéresser. J'écrirai peut-être un de ces quatre sur Hibernate ou JPA. (ou les deux)

Calculer la durée d'un script ou d'un programme Java

Combien de fois vous est-il arriver de chercher à connaître la durée d'un script, d'une action ou d'un morceau de code ? Franchement, ça m'est arrivé relativement souvent, à tel point d'ailleurs que le code de base que j'ai créé pour démarrer un nouveau projet de site Internet en PHP, affiche par défaut en bas de page le temps de chargement.
En Java, il existe une classe nommée Timer dans le package com.ge.tools qui permet de calculer facilement la durée d'un script. Deux méthodes sont à utiliser :

  • getTempsTotal : renvoie la durée en milliseconde depuis la déclaration du Timer
  • getTempsIntermediaire : renvoie la durée en milliseconde depuis le dernier appel à getTempsIntermediaire ou à la déclaration du Timer si aucun appel à getTempsIntermediaire effectué précédement

Dans l'exemple ci-dessous, j'utilise en fait getTempsTotalFormate et getTempsIntermediaireFormate qui renvoie la durée au format plus lisible : h:min:s,ms.

Timer timer = new Timer();
System.out.println("Sleep 1000ms...");
Thread.currentThread().sleep(1000);
System.out.println("Temps intermédiaire 1 : "+timer.getTempsIntermediaireFormate());
System.out.println("Temps total 1 : "+timer.getTempsTotalFormate());
System.out.println("Sleep 1000ms...");
Thread.currentThread().sleep(1000);
System.out.println("Temps intermédiaire 2 : "+timer.getTempsIntermediaireFormate());
System.out.println("Temps total 2 : "+timer.getTempsTotalFormate());

Ce qui affiche au bout de 2s :

Sleep 1000ms...
Temps intermédiaire 1 : 0:0:1,0
Temps total 1 : 0:0:1,0
Sleep 1000ms...
Temps intermédiaire 2 : 0:0:1,0
Temps total 2 : 0:0:2,0

Maven et les variables d'environnement

Encore un petit petit peu de Maven pour aujourd'hui. Lorsque j'ai fait mes recherches sur la dates, j'ai cherché quelques temps (sans succès) au niveau des variables d'environnement. Du coup, je sais que, sous Maven, pour récupérer les variables d'environnement (JAVA_HOME, MAVEN_REPO, ...) il faut préciser le nom du tableau permettant de les récupérer :

<property environment="env" />

Puis d'utiliser : ${env.JVA_HOME}.

Dans le même esprit, le MavenPropertiesGuide fournit une liste des variables Maven prédéfinies. Voilà qui peut être utile !

Ant et la date

Décidement, en ce moment, je m'amuse avec les dates ! Aujourd'hui c'est au tour d'Ant de passer au crible. Dans le fichier de configuration de Maven, voici ce que j'utilise :

<ant:tstamp>
	<format property="dateDuJour" pattern="yyyy-MM-dd" />
</ant:tstamp>
<echo message="Nous somme le : ${dateDuJour}"/>

Ce qui affiche : 2010-07-08.
En lisant un article sur le site de Gadberry (article parlant des dates avec Ant) et surtout la doc Ant sur tstamp, on peut voir qu'on peut bien sûr préciser un format comme on veut (ex : yyyy-MM-dd hh:mm), ou utiliser les formats prédéfinis :

  • DSTAMP : yyyyMMdd
  • TSTAMP : hhmm
  • TODAY : MMMM dd yyyy
<ant:tstamp />
<echo message"${DSTAMP}" />
<echo message"${TSTAMP}" />
<echo message"${TODAY}" />

Ce qui affiche : 20100708, 1715 et 2010 07 08.

Maven Ant et scp

Ant Dans la société où j'effectue mon stage actuellement, on utilise Maven. Je ne vais pas détailler maintenant ce "truc" parce que j'en serai bien incapable mais en gros Maven est un projet d'Apache qui fournit : des normes, des méthodes de build automatisées et peut-être d'autres choses. Hum, on va dire ça comme ça !
On utilise Maven avec Ant pour builder, et on peut donc utiliser toutes les commandes d'Ant dans les fichiers de configuration de Maven, enfin en théorie. Une des méthodes que l'on utilise fréquement sous Maven est la méthode deploy. Cette méthode copie les jar générés (oui, oui, je fais du Java !) à l'endroit que l'on a configuré, généralement en utilisant copy d'Ant. Du coup, moi ce qu'on m'a demandé de faire c'est de créer une méthode deployProd qui copie les jar sur le serveur distant de production. L'idée est donc d'utiliser scp (la commande de copie en SSH en shell) et non plus copy. Les problèmes commencent à ce niveau là et sont sûrement dû au fait que je travaille sous Windows et non sous Linux...

Avant de commencer : j'utilise Maven 1 et je crois qu'on utilise une architecture assez bizarre, mais je n'ai pas suffisement d'expérience pour aller plus loin.

Lire la suite »

- page 1 de 13

Thème GlossyBlue adapté par Pixials modifié par BN - Propulsé par Dotclear
Fil des billets Administration