NormandyJUG - et de cinq !

20 janvier 2010

Cette fois ci je m’y suis pris assez tôt pour vous faire un compte-rendu de la réunion du mois de janvier du NormandyJUG.

Le changement d’année s’est accompagné d’un changement de décors puisque cette réunion a eu lieu à l’UFR Sciences et Techniques du Madrillet. Cette soirée avait de quoi plaire avec le thème Java EE 6 et Glassfish. Initialement, la réunion devait s’organiser ainsi :

Au final, il s’est avéré que les deux présentations ont fusionnées et nos deux intervenants ont alterné les présentations des nouveautés de Java EE 6 au travers d’une quinzaine de démonstrations qui tournaient sur Glassfish.
Pour ceux qui ont raté l’événement, Java EE 6 est sorti le 10 décembre 2009 et regroupe actuellement 28 spécifications. Cette nouvelle version apporte sont lot de nouveautés qui raviront de nombreux développeurs parmi les suivantes :

  • Le prunning indique qu’une spécification peut disparaitre dans une prochaine version de Java EE.
  • Les profiles définissent des sous-ensembles ou sur-ensembles de JEE (un peu comme le fait JME). Aujourd’hui, il existe le profile Web Profile.
  • Les EJB Lite.
  • La normalisation du nommage JNDI.
  • Tout est Managed Bean. Avec Managed Bean 1.0 n’importe quel objet est une sorte de POJO EE qui autorise des concepts fondamentaux : cycle de vie, injection et intercepteurs.
  • La mise à jour majeure de JPA 2.0 apporte des améliorations essentielles :
    • Mapping de liste de type simple
    • Embeddable récursif
    • Amélioration de la gestion des Maps
    • Enrichissement du JPQL
    • Normalisation du persistence.xml
    • Lock pessimiste
    • Une criteria API (enfin !)
    • Cache
    • Etc…
  • Servlet 3.0 n’apporte pas grand chose de nouveau :
    • Annotations
    • Extensions via des fragments ou une API
    • API de configuration
    • FileUpload
    • Support de la sécurité
  • Quelques nouveautés intéressantes dans EJB 3.1 :
    • Intercepteurs configurable comme ça se fait en AOP
    • Interface optionnelle pour les EJBs locaux
    • EJBs asynchrones
    • Paquetage dans un WAR possible pour EJB Lite
    • Un nouveau Timer Service qui reprend les bonnes idées de cron
    • EJB Singleton
    • Une container API pour disposer d’un conteneur embarqué
  • JSF 2.0 :
    • Utilisation des facelets
    • Pas de dépendance avec Servlet 3.0
    • Les fichiers de configurations deviennent optionnels
    • Composants et composants composites
    • Amélioration des traces d’erreur
    • Standardisation de l’Ajax via le JavaScript et les tags
    • Bean Validation
    • Template
  • Bean Validation 1.0 permet d’écrire des règles métier une seule fois et de les utilise partout (couche JPA et JSF aujourd’hui). Des règles simples sont pré-définies mais il est possible de créer ses propres règles personnalisées.
  • REST n’a pas été oublié avec JAX-RS 1.1. Tout se fait simplement avec des annotations (comme les web services) : support des mimes types, paramètres, EJB, …
  • Le CDI/DI permet de réaliser un couplage lâche avec un typage fort. Cette spécification définie également la notion de porté en introduisant une nouvelle : la conversation. Cette dernière permet de résoudre la problématique de scénario concurrent sur une interface web (ie pour une utilisation multi-fenêtre ou multi-onglet).

Même si je ne suis pas un très grand fan des annotations, je dois avouer que cette nouvelle version de Java EE est très séduisante et donne envie de passer le plus rapidement possible sur un serveur d’application implémentant Java EE 6.

J’ai essayé d’être le plus concis possible mais il y a tellement de chose qui ont été présentées… J’espère vous avoir donné également envie d’utiliser Java EE 6. Je tiens enfin à saluer Antonio et Alexis pour leur bonne humeur et la qualité de leur prestation !

NormandyJUG - ça fait quatre ?

15 janvier 2010

Je vais arrêter de m’excuser pour le retard… Je souhaite juste vous faire un retour rapide sur la réunion du mois de décembre du NormandyJUG.

Cette réunion a eu lieu comme lors de la précédente réunion à l’eXia/CESI. C’était une soirée assez variée puisque trois thèmes bien différents ont été abordés :

La présentation d’Android était faite pour les personnes qui ne connaissaient pas la plate-forme Android. Un état de l’art des différents smartphones a été fait. Puis l’environnement de développement a été décrit dans ses grandes lignes.

La seconde partie avait pour titre : “GWT avancé“. Malgré qu’il était mal en point, Youen a tenu à présenter la nouvelle version de GWT. Je vous passe le nouveau Development mode et l’UiBinder pour vous expliquer un peu la raison d’être de GWT 2.0 : l’optimisation des temps de chargement. En effet, une application GWT devient très vite très grosse. Or, toute l’application est chargée dès la première page. Ce qui peut alors prendre un certain temps. La communauté a demandé de trouver une solution à ce problème. Et Google a proposé une solution : le code splitting. Afin de pouvoir découper le code d’une application en plusieurs morceaux, il faut procéder à un découplage du code. C’est pourquoi l’Event Bus a été ajouté est recommandé dans GWT 2. Alors que nous avons l’habitude d’utiliser le modèle de conception MVC, l’Event Bus permet de mettre en place le modèle de conception : le MPV. Ce modèle donne les bonnes pratiques pour réaliser un couplage faible et donc de réduire les dépendances entre les composants.

Enfin, la dernière partie était une très bonne présentation de ce qu’est et permet de faire JSF. Je peux même dire que cette présentation de JSF 2.0 m’a presque réconcilié avec JSF. Je m’étais arrêté à la version 1.2 assez rapidement par déception. Je pense tout de même que ce framework reste à destination d’applications de type back-office.

Cette nouvelle réunion du NormandyJUG est passée à deux doigts de se transformer en réunion Google… Heureusement que JSF était là pour rattraper le coup ! ;)

Android - avoir accès à une carte mémoire dans l’émulateur

14 janvier 2010

Cette application utilise la carte mémoire insérée dans le téléphone. C’est souvent le cas pour stocker des fichiers volumineux ou des fichiers que l’utilisateur est susceptible de vouloir récupérer. Lors du développement d’une application pour Android, les premiers tests se font dans l’émulateur. Or par défaut, l’émulateur n’a pas accès à une carte mémoire. Bien entendu, les auteurs du SDK pour Android ont prévu cette utilisation.

La carte mémoire sur Android est un système de fichier à part entière. Il faut donc créer une image de système de fichier qui sera utilisée par l’émulateur. Pour celà, placez-vous dans le sous-répertoire tools du SDK et exécutez la commande suivante :

mksdcard.exe -l mysdcard 128M sdcard.img

Cette commande a créé l’image d’une carte mémoire de 128Mo. L’image se trouve dans le sous-répertoire tools avec le nom sdcard.img mais peut être placée là où vous le souhaitez.

Une fois l’image créé, il faut indiquer à l’émulateur de l’utiliser. Lancez Eclipse et allez dans “Run configurations…”. Sélectionnez la configuration de votre application et allez dans l’onglet “Target” ou “Emulator” puis saisissez l’option suivante dans le champ “Additional Emulator Command Line Options” :

-sdcard <SDK_INSTALL_DIR>toolssdcard.img

N’oubliez pas de remplacer <SDK_INSTALL_DIR>\tools\ par le chemin complet du répertoire où se trouve l’image que vous avez créé. Cliquez sur “Apply” puis “Run”. Laissez l’émulateur se lancer et vous verrez qu’il y a une carte mémoire de 128Mo dans votre émulateur Android maintenant. ;)

A vos développements !

Débloquer son téléphone Android avec le code PUK

13 janvier 2010

Vous avez bloqué votre téléphone Android en saisissant plusieurs fois un code PIN erroné ?

Pour le débloquer, vous avez besoin de votre code PUK. Si vous ne l’avez pas, vous pouvez le demander à votre opérateur mobile. Sur l’écran de saisie du code PIN, saisissez la séquence suivante :

**05*<Code PUK>*<Nouveau Code PIN>*<Confirmation Nouveau Code PIN>#

Essayez de mémorisez votre nouveau code PIN maintenant ! ;)

HTC Hero - tout sur le mode root avec Android

12 janvier 2010

Les utilisateurs et bidouilleurs Android ont la possibilité de passer en mode root ou rooter leur téléphone. A quoi cela peut-il bien servir ? Ce mode permet d’accorder aux applications les droits du super-utilisateur comme sur les systèmes Unix ou GNU/Linux. Cela ouvre des nouvelles perspectives aux applications (accès aux ressources sécurisées, overclocking/downcloking, etc…). L’activation des droits root pour toutes les applications peut faire peur. Heureusement, il existe une application, nommée Superuser, qui permet de demander l’autorisation sur le téléphone à chaque fois qu’une application nécessite l’utilisation des droits root.

Passer en mode root

Afin de passer en mode root, vous devez avoir le SDK pour Android d’installé sur votre machine et le “Débogage USB” doit être activé sur le téléphone.

Branchez au moyen du cable USB votre téléphone sur votre ordinateur. Passez le téléphone en mode fast boot (allumez le téléphone en maintenant la touche Retour appuyée).

Copiez dans le sous-répertoire tools du SDK le fichier recovery-RA-hero-v1.5.2.img et le fichier Superuser.apk. Allez dans ce répertoire et exécutez la commande suivante pour charger l’image du recovery :

fastboot boot recovery-RA-hero-v1.5.2.img

Le téléphone va se lancer avec un nouveau menu. Toujours sur votre machine, exécutez les commandes suivantes :

adb shell mount /system
adb shell cat /system/bin/sh /system/bin/suadb shell chmod 4755 /system/bin/su

adb push Superuser.apk /system/app/

adb shell reboot

Voila, votre téléphone est rooté ! :)

Annuler le mode root

Et maintenant ? Si vous souhaitez revenir en arrière et unrooté votre téléphone, c’est tout à fait possible. Pour celà, redémarrez en fast boot, chargez l’image du recovery puis exécutez les commandes suivantes :

adb shell mount /system
adb shell rm /system/app/Superuser.apkadb shell rm /system/bin/su

adb shell reboot

C’est bon, votre téléphone n’est plus rooté. Sans regret ? :P

Pour finir

Je ne saurais que trop vous recommander de faire une sauvegarde votre système avant de faire ce genre de manipulation. Car même si la modification est aisée et simple, une erreur est si vite arrivée !

Je tiens également à remercier Artisan numérique pour son article sur le mode root qui explique plus en détail la procédure. De plus, si vous cherchez des informations dans ce domaine, n’hésitez pas à faire un tour dans le forum HTC Hero sur XDA.

Enfin, sachez qu’il existe une méthode alternative pour passer en mode root. Cette méthode utilise l’application FlashRec et n’a pas besoin du fast boot (qui est bloqué sur certaines versions du HTC Hero).

Emulateur Android avec une ROM personnalisée

11 janvier 2010

L’émulateur Android est plutôt bien fait. Cependant, il donne des conditions de test assez simples dans le sens où l’environnement est restreint (pas de Market par exemple) et surtout sans aucune personnalisation (comme la couche HTC Sense ou autre). C’est pourquoi, il peut s’avérer très utilise de pouvoir lancer une ROM personnalisée dans l’émulateur d’Android.

Prenons l’exemple de la ROM Cyanogen. Je pars du principe que le SDK pour Android est déjà installé et fonctionnel.

Allez dans le sous-répertoire tools du SDK et exécutez la commande suivante :

android list target

Vous devriez avoir un résultat de ce type :

Available Android targets:

id: 1 or "android-2"

Name: Android 1.1

Type: Platform

API level: 2

Revision: 1

Skins: HVGA (default), HVGA-L, HVGA-P, QVGA-L, QVGA-P

id: 2 or "android-3"

Name: Android 1.5

Type: Platform

API level: 3

Revision: 1

Skins: HVGA (default), HVGA-L, HVGA-P, QVGA-L, QVGA-P

id: 3 or "android-4"

Name: Android 1.6

Type: Platform

API level: 4

Revision: 1

Skins: HVGA (default), QVGA, WVGA800, WVGA854

Notez l’id de Android 1.5 qui correspond à la version d’Android de la ROM Cyanogen. Dans cet exemple l’id vaut 2.

Maintenant saisissez la commande suivante en remplaçant le 2 par la valeur de l’identifiant que vous avez noté :

android create avd -n cyanogen365 -t 2

Le programme vous demande si vous souhaitez personnaliser le profile matériel de l’émulateur. Si vous ne savez pas de quoi il en ressort, laissez la réponse par défaut (no). Le profile de l’émulateur est créé.

Récupérez la ROM Cyanogen. Décompressez-la. Vous obtenez un fichier system.img. Copiez ce fichier dans le répertoire .android\cyanogen365.avd qui se trouve dans votre répertoire utilisateur (C:\Documents and Settings\<user>\ sur Windows XP ou C:\Users\<user>\ sur Windows Vista).

Maintenant, il ne vous reste plus qu’à lancer l’émulateur avec la commande suivante :

emulator -avd cyanogen

Le chargement de l’émulateur est un peu lent la première fois mais c’est normal. Une fois démarré, vous pouvez constater que c’est la version Cyanogen qui tourne dans l’émulateur. ;)

Pour ceux qui utilisent Eclipse pour le développement Android, notez qu’il est possible de créer le profile de l’émulateur et de lancer ce dernier à partir d’Eclipse.

Je n’ai pas réussi à démarrer avec succès la ROM du HTC Hero. Que ce soit la ROM officielle ou bien celle générée à partir de mon téléphone. Si quelqu’un a des informations sur le sujet, ça m’intéresse énormément car ce serait très pratique de pouvoir tester certain développement avec la couche HTC Sense via l’émulateur (et donc sans risquer de le faire sur le téléphone).

Je vous laisse vous amuser avec les ROMs personnalisées ! :)

Eclipse & Maven - Nexus Indexer vide avec le plugin m2eclipse

5 janvier 2010

Je viens d’installer Eclipse 3.5, plus connu sous le nom de Galileo, et le plugin m2eclipse permettant de gérer des projets Maven. Lors de la création d’un nouveau projet Maven, il m’était impossible de sélectionner un archétype car la liste “Nexus Indexer” était vide.

Heureusement, il existe une solution à ce problème. Allez dans le menu “Window” et cliquez sur “Show view > Other…”. Ensuite sélectionnez “Maven > Maven Indexes” et cliquez sur “OK”. Une nouvelle vue “Maven Indexes” s’affiche. Elle doit alors contenir deux dépôts : workspace et local. Faites un click-droit sur cette vue et cliquez sur “Add Index”. Mettez la valeur http://repo1.maven.org/maven2/ pour le champ “Repository URL et central pour “Display name (optional)”. Enfin, cliquez sur “OK”. Eclipse va alors lancer le traitement “Updating indexes”. Une fois ce traitement terminé, vous pourrez créer un nouveau projet Maven et sélectionner un archétype puisque la liste “Nexus Indexer” ne sera plus vide.

Vous pouvez continuer à vous amuser avec Maven sur Eclipse !

Menu caché dans Android

4 janvier 2010

Ce n’est ni un secret, ni une exclusivité mais comme tout le monde ne le sait pas encore, il est intéressant d’expliquer comment accéder à ce menu caché.

Pour cela, il suffi d’ouvrir l’application de téléphonie et de composer le numéro suivant : *#*#4636#*#*. Un nouveau menu s’affiche automatiquement. Il permet de consulter des informations sur l’état du téléphone et de la batterie. Bien d’autres codes secrets pour Android ont été découverts depuis…

NormandyJUG - la troisième…

17 décembre 2009

C’est avec un énorme retard que je voulais vous présenter la troisième réunion du NormandyJUG qui a eu lieu au mois d’octobre. :-/

Cette réunion a eu lieu dans un nouvel endroit. En effet, l’eXia/CESI nous a accueilli au sein de leurs locaux. Cette soirée proposait un unique programme : les outils de construction. Trois outils étaient présentés lors de cette session :

  • Maven par Arnaud Héritier
  • Ivy par Xavier Hanin (initialement mais il s’est excusé)
  • Easy Ant par Jean Louis Boudart
  • Gradle par Grégory Boissinot

Que faut-il retenir de ce comparatif ?

“Le produit du code source (ici il faut entendre les binaires) est tout aussi important que le code source lui-même !”

Maven reste sûrement l’outil le plus mature et le plus complet. Le projet a su tirer partie des erreurs faites lors de sa première version. De plus, la communauté des utilisateurs étant plutôt conséquente, le retour d’expérience est non négligeable.

Easy Ant propose une solution entre Ant et Maven. Il permet de faire à peu près la même chose que Maven mais avec la souplesse de Ant. Effectivement, Maven imposse un cadre qui peut parfois être frustrant. Cependant, c’est aussi sa force. Je pense que Easy Ant est plus à destination des tous petits projets car plus rapide et moins lourd à mettre en place.

Quant à Gradle, il est a réserver pour le moment pour les expérimentations. En effet, il n’est pas encore mature. Il a pour objectif de réunir les bonnes pratiques de construction à la Maven et la gestion de dépendance à la Ivy. L’un de ses avantages est de pouvoir être utilisé en tant qu’application autonome (contrairement à Maven).

Tout ça pour dire que c’est à vous de faire votre marché parmis ces outils. Je pense que Maven est un cran au dessus à partir du moment où l’on est près à accepter ses contraintes et l’investissement pour sa mise en place. ;-)

Le Bon Coin bientôt sur Android ?

16 décembre 2009

Qui ne connait pas le site de petites annonces Le Bon Coin ? Je ne vais pas vous faire une présentation de ce site mais plutôt vous expliquer comment j’en suis venu a créer une application pour ce site.

Le Bon Coin est un site de petites annonces qui fonctionne très bien pour trois raisons :

  • Il est très simple (une annonce créée sans aucune inscription et en quelques clics).
  • Il met en relation des particuliers sans aucune contrainte (contrairement aux systèmes basés sur les enchères).
  • Il met en relation des personnes proches (d’un point de vue géographique).

Du coup, ce site est devenu incontournable pour le marché de l’occasion. Je me retrouve régulièrement à consulter les petites annonces sur mon téléphone portable. Or, il faut avouer que même si les butineurs qui tournent sur les derniers smartphones sont très agréables à utiliser, les sites web visités ne sont toujours pas adaptés à ces terminaux. Je voulais donc une interface pour Le Bon Coin adaptée à mon téléphone.

De plus, lorsque je fais une recherche sur Le Bon Coin, je fais toujours une recherche sur mon département, voir sur ma ville ou au pire dans ma région. La sélection de la région puis du département est donc une perte de temps pour l’utilisateur. Comme Android est capable de localiser notre position, pourquoi ne pas intégrer cette fonctionnalité afin de ne plus avoir à sélectionner la zone géographique sur Le Bon Coin ?

C’est à partir de ces deux constats qu’est née l’idée de créer une application Android pour consulter les petites annonces disponibles sur Le Bon Coin.

L’application est actuellement fonctionnelle et en phase test. Elle permet de faire une recherche sur le site Le Bon Coin et de consulter les annonces disponibles avec les fonctionnalités suivantes :

  • Localisation de la position de l’utilisateur laissant le choix de faire une recherche dans la ville, le département, la région, les régions voisines ou la France
  • Possibilité de choisir une catégorie et une sous-catégorie d’annonce
  • Indicateur des annonces urgentes
  • Consultation du détail de l’annonce sur le site Le Bon Coin
  • Affichage des 50 premières annonces correspondantes à la recherche

Voici ci-dessous une capture d’écran de l’affichage des petites annonces :

LeBonCoin pour Android

En appuyant sur une annonce, le navigateur se lance et ouvre la page de détail de l’annonce disponible sur le site officiel Le Bon Coin.

Pour information cette application sera gratuite et n’a aucune vocation commerciale. Elle a été créée à titre personnel afin de répondre à un besoin (et aussi pour se faire la main sur le développement d’application pour Android ;-) ). L’application et son auteur ne sont aucunement liés avec le site de petites annonces Le Bon Coin. Pour rappel, ce n’est pas l’application officielle Le Bon Coin.

Contactez-moi si vous souhaitez obtenir un accès à la version beta et tester dès à présent cette application. En espérant qu’elle sera utile à d’autres personnes qu’à moi. :-)