RSS Feed

Archive de January, 2012

NormandyJUG – annotations

23 January 2012 par SeB Pas de commentaire »

Mardi dernier, j’ai assisté lors de la session du NormandyJUG à la présentation d’Olivier Croisier sur les annotations. Autant le dire tout de suite : je ne suis pas fan des annotations. J’ai beaucoup de mal avec cette mode de mettre des éléments de configuration dans du code source. On nous rabâche depuis des années que le code source doit être réutilisable et donc générique. Or que depuis l’apparition des annotations, je vois beaucoup de code contenant du paramétrage. On se retrouve donc avec des binaires liés à un environnement. :-(

Néanmoins, c’est sans apriori que je me suis rendu à cette session. Espérant, apprendre quelque chose et peut-être changer d’avis. ;-)

Introduction

En regardant en arrière, on se rend compte qu’XDoclet est l’ancêtre des annotations. Ce système utilisait déjà une méthode de paramétrage et/ou injection/génération de code à partir d'”@” dans la JavaDoc. Cette implémentation avait deux défauts :

  • tout n’est pas documentable dans le langage Java
  • la documentation disparait à la compilation

Voilà pourquoi la création des annotation était nécessaire.

Afin d’assurer une compatibilité du byte code avec le Java <=4, l’implémentation des annotations réutilise les concepts existants dans la langage d’une façon parfois déroutante…

Annotations personnalisées

Pourquoi ?

  • remplacer les fichiers de configuration
  • simplifier le code avec la meta-programmation
  • ajouter des règles de compilation

Caractéristiques

  • un champ d’action
  • une durée de vie (source, compilation, exécution)

La compilation

Les annotations permettent de réaliser un plugin pour le compilateur (Java >=6) via les Pluggable Annotation Processor. Ceci permet entre autre de casser le build. Ce qui peut de révéler très pratique pour faire respecter des best pratices de développement. ;-)

Pourquoi ?

  • La génération de ressources
    • La configuration
    • Les classes
    • La documentation
  • L’amélioration du compilateur
    • Norme de codage
    • Message d’erreur

A ce stade de la présentation, Olivier met en garde l’utilisation de certain framework tel de Lombok qui a quelques contraintes tel que la dépendance de la compilation. En effet, votre compilateur doit être supporté par le projet. Comme toujours, c’est à vous d’estimer le ratio entre risques et avantages.

Comment ?

Ces annotations sont implémentées via AbstractProcessor. Une API permet de faire de l’introspection et découvrir dynamiquement les annotations. Nous avons le droit à une petite démo avec le  SerializableClassesProcessor.

Le runtime

Pourquoi ?

  • Le mapping
  • Les POJO
  • La configuration et/ou les frameworks

Notre intervenant nous illustre cela avec un CSVReader.

Aller plus loin…

Pour nous montrer ce qu’il est possible de faire avec les annotations, notre invité nous présente alors son proof of concept d’injection d’annotations : AnnotationInjector. Il nous avoue que c’est un framework assez sympa à réaliser mais qu’il n’a pas encore trouvé son utilité ! :-D

La conclusion

Une session très enrichissante qui ma réconcilié avec les annotations ! J’éviterai toujours les éléments de configuration dans le code (surtout s’il est lié à un environnement tel que développement, recette ou production). Néanmoins, j’ai déjà testé les Annotations Processor. Et les sembles prometteuses. :-)

La session se termine par une présentation de seren. Cet outil, réalisé par Olivier Crosier, a pour objectif d’optimiser les temps de traitement de la sérialisation et de désérialisation.

Si ce compte-rendu vous a donné envie de vous mettre aux annotations, sachez que la présentation et le code source est disponible sur GitHub.

 

ezShare – la partage facile et rapide sous Android

5 January 2012 par SeB Pas de commentaire »

Sous Android, il existe un système de communication entre les applications extrêmement simple : les Intents. Sans rentrer dans les détails techniques, cela permet à une application d’envoyer des données qu’elle génère vers une autre application pour qu’elle les traite.

A quoi cela peut servir ?

  • A ne pas réinventer la roue : si une application existe déjà pour recadrer une photo, pour envoyer un mail ou poster une vidéo, pourquoi réécrire la fonctionnalité ?
  • A laisser le choix à l’utilisateur. En effet, le système Android est capable de déterminer si plusieurs applications répondent à la même fonctionnalité et dans ce cas, l’utilisateur est invité à choisir son application préférée.

Cette mécanique est très fortement inspirée des programmes GNU en ligne de commande. Chacun réalise une seule et unique tâche. Ensuite, il est possible d’enchainer le traitement de ces programmes avec des “pipes” pour réaliser des traitements complexes.

Pourquoi est-ce que je vous parle de cela ? Et bien parce que sous Android, une des fonctions élémentaires et largement répandue est le partage. Elle est souvent représentée avec les icônes suivants :

La fonction partage est présente partout ! Que ce soit dans le navigateur, l’explorateur de fichiers, dans YouTube, sur le Market, dans Google Reader, dans la Galerie ou encore l’application Photo… De même, il existe une multitude d’applications capables de partager du contenu (texte, fichier multimédia, etc…). Vous pouvez trouver les applications mails (E-mail, gmail, etc…), de messageries (SMS/MMS), de réseaux sociaux (Facebook, Twitter, Google+, etc…), les clients de blog (comme WordPress), le Bluetooth, Chrome to Phone, etc…

Tout ça pour dire que j’utilise beaucoup cette fonction :

  • Je prends une photo ou visionne une vidéo insolite que j’envoie à des proches.
  • Je trouve une application sympa que j’envoie à des utilisateurs Android.
  • Je lis un article technique que je transfère à d’autres développeurs.
  • Je découvre un article sympa que je partage avec un groupe de personnes qui partage un même centre d’intérêt.

Rapidement, je me suis rendu-compte que je partageais souvent avec un groupe de personne. Ce n’était pas toujours le même groupe de personne. Tout dépend du contexte. Or, la saisie de toutes les adresses mail ou numéros de téléphone est une étape très fastidieuse.

C’est alors que m’est venu l’idée de taguer mes contacts avec des libellés. Ainsi, il suffi de choisir une liste de tags avant de choisir l’application de partage pour pré-remplir automatiquement la liste des destinataires (correspondant aux tags sélectionnés) de l’application de partage. ezShare est alors né ! :-)

Il y a une version gratuite complètement fonctionnelle et une version payante apportant quelques éléments plus pratiques :

  • Inclusion des buttons vers l’application de partage directement dans ezShare (au lieu de repasser par la fenêtre de sélection)
  • Plus de paramètres (comme pour les destinataires des emails en copie cachée)
  • La conservation de la dernière sélection de libellés
  • Un meilleur support des applications de partages (comme Handcent SMS ou GO SMS Pro)

Version LITElien direct Market (mobile) | lien direct Market (PC)

Version PROlien direct Market (mobile) | lien direct Market (PC)

Et maintenant ? Partagez !