Recherche

Coder's IO

1000 et un tips en Java

 

Je vous propose un pointeur vers un site décrivant tout un ensemble de tips sur le langage Java. 
Vous trouverez des informations diverses : 
– La définition du mot-clé volatile,
– L’ensemble des méthodes de conversion de type en Java,
– L’ordre d’initialisation des différents parties d’un programme,
– Des détails sur le casting
– etc

L'organisation du site est originale. En effet, les informations sont organisées sur la base d'un template javadoc.

Ce site s’adresse aussi bien aux développeurs débutants qu’aux développeurs séniors.

Aussi vous trouverez des examens d’entrainement au SJCP.

Ce site est à conserver dans ses favoris pour trouver une réponse ponctuelle à une question ou tout simplement pour découvrir des aspects du langage pour sa culture personnelle. 

#java #tips

Android 4 : Les fondamentaux du développement d’applications Java

 

Début juillet, +Nazim Benbourahla ressortait de l’ombre, en effet depuis quelques temps les articles se faisaient rares sur son blog. 
Nazim revient pour annoncer la publication de son livre courant septembre 2012.
Cet ouvrage traitera naturellement d’Android dans sa version 4. Il s’adressera principalement aux débutants souhaitant se perfectionner ainsi qu'aux personnes souhaitant découvrir la plateforme.

La version de base utilisée sera Ice Cream Sandwich en incluant toutes les nouveautés de la dernière version : Jelly Bean.

Voici les grands chapitres que vous pourrez trouver dans ce livre : 

-Chapitre 1 : La plateforme Android
-Chapitre 2 : Environnement de développement
-Chapitre 3 : Principe de programmation
-Chapitre 4 : Ma première application – HelloAndroid
-Chapitre 5 : Débogage et gestion des erreurs
-Chapitre 6 : Création d’interfaces simples
-Chapitre 7 : Communication entre vues / applications
-Chapitre 8 : Personnalisation et Gestion des évènements
-Chapitre 9 : Création d’interfaces avancées
-Chapitre 10 : Persistance de données
-Chapitre 11 : Gestion et partage de données
-Chapitre 12 : Traitement en tâche de fond
-Chapitre 13 : Google Map et Géolocalisation
-Chapitre 14 : Téléphonie
-Chapitre 15 : Accès au matériel

Vous trouverez plus de détails sur le lien fourni dans l’article. On peut constater que les sujets abordés couvrent un spectre assez large.

Il ne reste qu’à patienter… 🙂

#java #livre #android #v4  

ELT : Un terminal dans Eclipse

 

Le 18 juillet dernier, +Alex Ruiz  (développeur chez Google et co-auteur du framework Fest assert ) postait un billet sur son blog pour annoncer la sortie de la première version d’un nouveau plugin. 
Ce nouveau plugin, destiné à Eclipse, a pour objectif de fournir une terminal au sein de l’IDE.
Ce terminal permettra l’exécution de ligne de commande. 

Pourquoi ce projet ?

L’idée première est de répondre à un besoin récurrent qu’il a, lui et ses collègues, en travaillant chez Google. 
En effet, dans le quotidien d’un Googler, l’utilisation de la ligne de commande est très fréquente. Ceci oblige à avoir en permanence une flopée de fenêtres ouvertes et de devoir jongler avec. Comme il l’écrit dans son billet, l’expérience utilisateur n’est pas bonne du tout.
Aussi, les terminaux standalone ne supportent pas le copier/coller, ce qui n’est pas très pratique…

Voila donc les raisons qui ont motivé Alex Ruiz et ses collègues à créer ce plugin.

Qu’est ce qu’il apporte en plus d’être intégré à Eclipse ?

– Reconnaissance des caractères d’échappement ANSI
– Colorisation syntaxique
– Ouverture rapide d’un terminal sur un répertoire donné
– Personnalisation des couleurs du terminal (fond et texte)
– Gestion des liens hyper-textes.

Le petit bémol…

Ce plugin est supporté uniquement sous Linux et MacOs X. Bien que je ne sois pas le défendeur de windows, cela reste néanmoins en entreprise l’OS le plus répandu. 
Cette limitation est induite par l’un des projets sur lequel repose ce plugin : CDT.

Les bases du plugin

Ce plugin repose sur deux projets Eclipse : 
– Eclipse CDT
– Eclipse Target Management

L’utilisation de ces projets n’est que partielle. En effet, les auteurs du plugin ont préféré forker les projets plutôt que de les utiliser comme dépendances. La raison de ce choix est d’intégrer uniquement les fonctionnalités les plus utiles pour le projet ELT.

Les fonctionnalités reprises respectivement sont le pseudo-terminal PTY et l’émulateur de terminal.

La version minimum requise d’Eclipse est la 3.7.

#java #eclipse #plugin #ELT

Java : Breaking news

 

Entre hier et aujourd’hui, deux annonces importantes ont été faites par Mark Reinhold autour de la future release du JDK : JDK8.

Report de Jigsaw à JDK9

La première annonce concernait le report du projet Jigsaw qui devait faire partie des nouvelles fonctionnalités importantes lors de la prochaine release du JDK8. 

Dans un billet sur son blog, Mark Reinhold explique au travers de 5 points, les raisons de ce report : 
– Goal : les objectifs du projet Jigsaw
– Progress : L’état d’avancement du projet
– Bake time : Les contraintes et la date de livraison
– Schedule vs feature : Faire un choix
– Keep the beat : Le choix de la sagesse.

Pour résumer, le réalisation d’un projet introduisant la modularisation est une entreprise qui aura beaucoup d’impact sur l’écosystème de Java.

L’importance de ces impacts, ainsi que le délai pour réaliser la phase de test et de non régression risque de faire prendre du retard à la sortie de la nouvelle mouture.
Oracle ayant défini un rythme de livraison d’une nouvelle release tous les deux ans, la société a pris l’option de dé-scoper et reporter ce projet à la version suivante du JDK, sans gaîté de cœur.

Vous trouverez plus de détail sur le pointeur suivant : http://mreinhold.org/blog/late-for-the-train

Désignation des membres de l'Expert Group de la JSR 337

La deuxième annonce concerne la désignation des membres du groupe d’expert sur la JSR 337 (JavaTM SE 8 Release Contents). 
Ces experts devront créer une première ébauche de la spécification et la soumettre à la communauté.

Aujourd’hui, les membres sont : 
Andrew Haley de Red Hat
Steve Poole d’IBM
Mark Reinhold d’Oracle
Un membre non encore défini de chez Google.

Les prochaines étapes sont définies selon le planning suivant : 

juillet 2012 : Formation du groupe d’expert : Done! 
septembre 2012 : Early draft review
janvier 2013 : Public review
juin 2013 : Proposed final draft
août 2013 : Final release

Vous trouverez plus de détails sur le pointeur suivant : http://openjdk.java.net/projects/jdk8/spec/

En théorie, avec l'annonce du report de Jigsaw, le calendrier fixé devrait pouvoir être respecté. 

A suivre donc…

#java #jigsaw #report #jcp #java8

GAG : Google Annotation Gallery

 

Quel développeur n’a jamais été confronté à du code lui faisant ressentir les plus vives émotions sans pouvoir les partager de manière formelle ?
Ces émotions peuvent aller de la simple satisfaction d’avoir écrit un code parfait à l’envie de tordre le cou à l’auteur des milliers de lignes incompréhensibles que l’on doit débugger.

Aujourd’hui, cela est possible. Grâce au projet GAG, plus sérieusement Google Annotation Gallery, vous allez pouvoir annoter votre code ainsi que celui sur lequel vous allez devoir intervenir.
Vous allez pouvoir communiquer vos sentiments et vos pensées à l’aide d’un jeu d’annotations.

Ces annotations sont reparties selon 5 groupes : 
– disclaimer
– enforceable
– literary
– remark
– team

Certaines de ces annotations peuvent fournir un comportement au prix d’un peu de configuration et de la librairie gag-agent.

Je vous invite à découvrir l’ensemble des annotations disponibles et d’exprimer vos émotions à vos collègues 🙂

Attention toutefois à certains comportements d’annotation en environnement de production !

#java #gag #google #detente #émotion

IntelliJ 12 Leda – EAP

 

Un billet sur le Confluence d’IntelliJ IDEA a été publié aujourd’hui indiquant la mise à disposition de la prochaine version de l’IDE en early access program.

A travers ce type d’accès, JetBrains veut susciter l’échange avec les utilisateurs d’IntelliJ afin d’avoir leurs avis et leurs propositions. Cette démarche vise à permettre aux développeurs d’avoir une influence sur le contenu de la (des) version(s) à venir…

La version 12 EAP a été releasée le 4 juillet 2012. Le petit nom de cette nouvelle mouture est Leda.

Son utilisation est limitée à 30 jours après la date de release.

Les release notes de la v12 sont disponibles ici : http://confluence.jetbrains.net/display/IDEADEV/Leda+120.11+Release+Notes

En lien dans ce post, le détail de l’ensemble des évolutions et correctifs à venir.

Alors, n'attendez pas, téléchargez la version EAP et influencez le futur d’IntelliJ 😉

#java #release #intellij #ide

Java au quotidien épisode 1 : Comparaison en chaîne

 

Aujourd’hui je vais vous présenter une classe bien pratique permettant d’implémenter une méthode equals ou compareTo de manière élégante (enfin je trouve).

Guava propose dans sa librairie une classe permettant de faire de chaîner des comparaisons de manière “fluent”.

Généralement, on redéfinit la méthode equals d’une entité afin de pouvoir la rendre comparable.
Pour se faciliter la tâche, on peut avoir recours aux outils fournis pour nos IDEs pour générer rapidement le code nécessaire.
Voila ce que pourrait être le résultat pour la classe MyEntity

public class MyEntity {
    
    private Long id;
    private String name;
    private String lastname;
    private Date birthday;
    private String country;

   @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        MyEntity myEntity = (MyEntity) o;

        if (birthday != null ? !birthday.equals(myEntity.birthday) : myEntity.birthday != null) return false;
        if (country != null ? !country.equals(myEntity.country) : myEntity.country != null) return false;
        if (id != null ? !id.equals(myEntity.id) : myEntity.id != null) return false;
        if (lastname != null ? !lastname.equals(myEntity.lastname) : myEntity.lastname != null) return false;
        if (name != null ? !name.equals(myEntity.name) : myEntity.name != null) return false;

        return true;
    }

On peut constater que le code devient assez verbeux et par conséquent pas très lisible. Bien évidemment la sémantique de la méthode equals() est simple, donc on comprend assez facilement le code.

En aparté : Si l’on envoie à Sonar cette classe dans l’état, celui-ci va râler en vous indiquant que ce n’est pas bien d’écrire des structures conditionnelles sans accolades (et je partage son point de vue 😉 )

Donc pour améliorer la lisibilité (et faire plaisir à Sonar), nous allons, à l’aide de la classe ComparisonChain, clarifier tout ça.

Voila ce que donnerait l’implémentation : 

   @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        MyEntity myEntity = (MyEntity) o;

       return ComparisonChain.start().compare(birthday,myEntity.birthday)
                .compare(country, myEntity.country)
                .compare(id, myEntity.id)
                .compare(lastname,myEntity.lastname)
                .compare(name,myEntity.name).result() == 0;
      }

Personnellement, je trouve la deuxième version plus claire et plus concise.

La classe ComparisonChain propose un fonctionnement type lazy. C’est à dire que l’évaluation s’arrêtera à la première différence trouvée (même comportement que la première version).
Il faut noter que la classe ComparisonChain ne supporte pas les comparaisons sur les références nulles, néanmoins des champs représentant l’identité d’un objet ne devraient pas être null.

En regardant la documentation, vous trouverez d’autres méthodes permettant d’affiner la comparaison.

  #java #guava #comparaison

Guava  13.0

 

Il y a quelques semaines, nous parlions de la version 12…

Le rythme des releases de l’API Guava est soutenu. Il y a peine 2 mois la version 12.0 pointait le bout de son nez. Le 26 juin dernier, la version 13 a été mise à disposition.

Cette nouvelle version est disponible sur le repository Maven Central. Il suffit juste de mettre à jour le numéro de version.

Vous avez la possibilité de voir au travers d’un rapport créé par JDiff, les différents changements opérés sur l’API (lien accessible via le pointeur en bas de la page)

De manière synthétique, une ‘quick list’ des changements :

18 fixes ont été livré dans cette version. Ils concernent principalement : 
– la correction de defect,
– l’amélioration de performance,
– Enrichissement de la Javadoc,
– des améliorations de manière générale.

3 méthodes ont été dépréciées : 
– Iterators.skip
– les méthodes statiques de la classe Equivalence.
– Files.getDigest() et ByteStreams.getDigest() ont été remplacés.

Pas mal d’ajout de nouvelles méthodes sur l’API (voir le lien de l’article pour voir le détail)

D’autres ont été promues via l’annotation @Beta.

Quelques changements significatifs pourraient motiver certains pour mettre à jour leur pom.xml et vous tenter de passer à la version 13 ?

#java #guava #guava13 #release

Groovy Web console

 

Connaissez-vous Groovy ?
Groovy est un langage de programmation pouvant tourner sur la JVM. Il est orienté objet.
Il est inspiré des langages comme Python, Ruby, Smalltalk. Il est spécifié par la JSR242.

La syntaxe est très proche de celle de Java. 
Groovy peut s’exécuter à la volée ou alors être pré-compilé en byteCode.

L’objet de cet article n’est pas de vous présenter le langage Groovy, mais de vous faire part d’un outil mis à disposition sur le Cloud autour de ce langage.

L’outil en question est la Console web Groovy.
Comme son nom l’indique, c’est une console accessible via un navigateur. Elle a pour objectif de pouvoir écrire des scripts, de les exécuter et d’obtenir le résultat directement sur le web.

Le principal avantage que je vois avec cette console est de pouvoir s’initier au langage sans avoir les soucis de mise en place d’un environnement. 
Une chose vraiment confortable est la colorisation syntaxique directement à la saisie du code dans la console.

Pour bien démarrer et pouvoir profiter de nombreux exemples, il est possible d’avoir accès à l’ensemble des scripts déjà écrits sur la console. Par conséquent, il est aussi possible d’enregistrer ses propres scripts et de les partager.

L’application supportant cet outil est hébergée sur un serveur Google App Engine. 
Le code source de l’application est accessible depuis GitHub.

Pour ceux qui n’ont jamais essayé ce langage : plus d’excuse maintenant 🙂

#java #console #groovy #web

Propulsé par WordPress.com.

Retour en haut ↑

Concevoir un site comme celui-ci avec WordPress.com
Commencer