Publié le 30 Avril 2012

Il est très facile de parcourir une liste en java. Pour cela il suffit de récupérer un iterator et d'appeler la méthode next() à chaque iteration:

Iterator<String> iterator = myList.iterator();
while(iterator.hasNext()){
   String item = iterator.next();
   // ....
}

ou encore mieux on peut utiliser un for each où l'iterator n'apparaît plus:

for(String item : myList){
   // ...
}

Mais l'interface Iterator ne fournit qu'une next() (et hasNext()), on ne peut donc pas l'utiliser pour parcourir une liste dans l'ordre inverse.

Heureusement il existe un ListIterator qui permet un parcourir de la liste dans les 2 sens car en plus des méthodes next()/hasNext(), il fournit aussi les méthodes previous()/hasPrevious().

Pour parcourir une liste en partant de la fin, il suffit de l'initialiser pour qu'il pointe à la fin de la liste puis d'utiliser les méthodes previous()/hasPrevious():

ListIterator<String> iterator = myList.listIterator(myList.size()); // On précise la position initiale de l'iterator. Ici on le place à la fin de la liste
while(iterator.hasPrevious()){
   String item = iterator.previous();
   // ...

Voir les commentaires

Rédigé par Bliz

Publié dans #Java

Repost 0

Publié le 27 Avril 2012

cleancode

J'ai maintenant pas mal d'années d'expérience en programmation est ce livre a vraiment changé ma relation au code.

En effet jusqu'à présent, que ce soit lors de mes études ou sur les différents projets sur lesquels j'ai travaillé (y compris avec de grands noms de l'informatique), l'attention est surtout (uniquement) portée sur le fait de générer un code qui fonctionne.

Effectivement c'est un point primordial, mais comme exposé dans ce livre, ce n'est qu'une partie du job. Il faut bien sûr que le code fonctionne mais il faut également qu'il soit maintenable - donc facile à lire et à comprendre - clean, quoi!

Lorsque je travaillais sur un projet de TMA - où l'on doit essentiellement faire évoluer du code existant - nous passion le plus clair de notre temps à analyser le code, puis après à essayer d'implémenter les corrections/évolutions en modifiant le moins de lignes possibles.

Et je ne parle pas que pour moi, tout mon équipe fonctionnait comme ça! Pourquoi ? Parce que nous travaillons avec du "code sale". Personne dans l'équipe ne connassait vraiment le fonctionnement du code existant et essayait ainsi de limiter les impacts.

Bref, tout le contraire de la règle du boy scout préconnisée dans ce livre:

"Toujours laisser le camp plus propre que quand on est arrivé"

Pour revenir à l'enseignement de l'informatique, j'ai toujours appris que le nombre de lignes de commentaires était un gage de qualité du code ... et bien non! J'y pense à 2 fois avant d'écrire un commentaire et le plus souvent j'arrive à modifier mon code pour ne pas écrire le commentaire. Comment ? Simplement avec des noms de fonctions et de variables appropriés, des méthodes simples, etc.

Bref ce livre est plein de bonnes pratiques. Ok c'est souvent du bon sens mais les exemples précis et concrets illustrent bien comment les mettre en pratique.

L'avant-dernier chapitre sur le refactoring de la classe SerialDate de la lib JCommon permet de revoir tous les conseils distillés au cours de ce livre tout en illustrant comment ils peuvent s'appliquer sur un cas réel.

Le dernier chapitre est plein de "petites alertes" qui doivent faire "tilt" quand on les rencontre dans son code - bref, elles permettent de reconnaitre quand quelque chose ne va pas.

Voir les commentaires

Rédigé par Bliz

Publié dans #livres

Repost 0

Publié le 24 Avril 2012

Alors voilà mon problème j'ai besoin de supprimer l'espace qui se trouve autour de mon élément HTML mais j'ai beau mettre tous les padding et les margin à 0. Il y a toujours un espace qui apparaît autour de mon élément.

Quand je vérifie à l'aide de firebug il m'indique bien que les margin et les padding sont à 0!! Bref je commençais à sécher ... jusqu'à je découvre la propriété "border-collapse".

Effectivement mon élément se trouvait dans une table HTML et une petite recherche sur le web indique que la valeur par défaut est : 

border-collapse: separate;

Ce qui signifie qu'il y a 2 bordures séparées (une pour le contenant et une pour le contenu), comme dans une table HTML sans CSS:

border-collapse: separate;

alors qu'avec :

border-collapse: collapse;

les 2 bordures se fondent en une seule:

border-collapse: collapse;

Voir les commentaires

Rédigé par Bliz

Publié dans #CSS

Repost 0

Publié le 20 Avril 2012

Un arbre est une structure qui se prête très bien à un traitement récursif - chaque branche pouvant être considéré comme un arbre de plus petite taille :

void traitementArbre(Node node){
   if(!node.hasChildren()){
      // C'est une feuille -> traitement de la feuille
      System.out.println(node.getValue());
   }
   else{
      for(Node child : node.getChildren()){
         traitementArbre(child);
      }
   }
}

Si l'arbre comprend beaucoup de niveau la pile d'appels peut se remplir rapidement (à chaque appel de la fonction traitementArbre() - le contexte d'exécution est sauvegardé afin de pouvoir reprendre l'exécution du programme à chaque retour de fonction).

C'est pourquoi il est souvent plus efficace (mais un peu moins intuitif) d'effectuer ce genre de traitement de manière itérative. La clé consiste à simuler la pile des appels avec une structure de type pile (ou liste ou tableau).

void traitementArbre(Node racine){
   Stack<Node> stack = new Stack<Node>();
   stack.push(racine);
   while(!stack.isEmpty()) {
      Node node = stack.pop();
      if(!node.hasChildren()){
         // C'est une feuille -> traitement de la feuille
         System.out.println(node.getValue());
      }
      else{
         for(Node child : node.getChildren()){
            stack.push(child);
         }
      }
   }

Voilà la fonction traitementArbre() n'est appelé plus qu'une seule fois pour traiter l'arbre tout entier.

Voir les commentaires

Rédigé par Bliz

Publié dans #Java

Repost 0

Publié le 12 Avril 2012

Cette opération peut s'effectuer en ligne de commande. Il faut donc commencer par ouvrir une fenêtre de ligne de commande:

Menu Démarrer / Exécuter puis saisir "cmd" et valider

Ensuite dans la fenêtre de commande il faut taper:

net start <nom du service>

par exemple pour démarrer openssh:

net start opensshd

et

net stop opensshd 

pour l'arrêter

Voir les commentaires

Rédigé par Bliz

Publié dans #SSH

Repost 0

Publié le 2 Avril 2012

CSS c'est pas trop mon fort mais c'est sympa quand même alors je note les astuces au fur et à mesure que je les découvre.

Aujourd'hui j'ai besoin d'insérer un bouton dans une table. Mon problème c'est que le texte du bouton est trop long par rapport à la largeur de la colonne et du coup il s'étalle sur plusieurs. Ce qui au passage casse toute la mise en page.

Voici le problème pour simplifier:

text trop long qui prend plusieurs ligne

et là magie avec la propriété :

white-space: nowrap;

text trop long qui prend plusieurs ligne

Voir les commentaires

Rédigé par Bliz

Publié dans #CSS

Repost 0