Le pousseur de fenêtre

Pour changer une fenêtre de place, il faut habituellement cliquer dans la barre de titre, puis maintenir cliqué, et bouger la souris : cela change la fenêtre de place.

Il est inutile de procéder autrement. Donc le jinutilitaire le fait ! Sur le principe suivant : lorsque la souris entre dans la fenêtre, celle ci se déplace pour que son bord se cale sur la souris.

Voici le jnlp qui va bien pour expérimenter la chose (pour fermer la seule solution est ALT-F4), le code source brut, et le code source colorié.

Il n’y a rien de très subtil dans le code du pousse fenêtre ; tout est basé sur un MouseInputAdapter, qui repère les déplacements de la souris, et repousse la fenêtre.

Rien n’est parfait en ce bas monde, et il y a quelques difficultés non résolues, qui le seront peut être plus tard.

Effets du defaultLookAndFeelDecorated

Effets du defaultLookAndFeelDecorated


La première est que dans une fenêtre, on ne reçoit pas les événements souris sur la barre de titre, à moins d’imposer les décorations du look and feel java. On agit là dessus par JFrame.setDefaultLookAndFeelDecorated. Je l’ai mis à true.

Et puis… il n’y a pas de tests (on verra plus tard).

Et puis… c’est pas très fluide (on verra plus tard).

Et puis… si on arrive au bord de l’écran ? (plus tard)

Et puis… s’il n’y a pas de souris ? (jamais)

Et puis… ça sert à rien (jamais).

Laissez un commentaire

Hacking Maven

À un niveau de technique, on ne sait plus si ce qu’on fait est utile ou pas. C’est le cas aujourd’hui. Donc cela va parfaitement pour le jinutilitaire.

J’utilise Maven pour organiser mes développements. Pour ces projets, j’utilise plein d’autres projets bibliothèques, des dépendances que j’inscris comme telles dans Maven, dans ce qu’on appelle le pom.xml.

Mais je n’arrive pas à tout faire avec Maven ; pour les déploiements par exemple j’utilise Ant. Il faut que je re-indique alors mes projets bibliothèques. C’est un peu fastidieux.

Il existe (si vous suivez) un autre utilitaire pour indiquer ces dépendances, qui s’appelle Ivy, qui s’associe bien à Maven, mais pour les dependances il faut tout re-écrire C’EST LA BARBE !

J’ai cherché mille choses, posé mille questions sur les forums, rien.

Et j’ai fini par me décider à écrire mon petit utilitaire (cela faisait longtemps), pour transformer automatiquement (ou presque) le jargon maven en jargon ivy, à partir du code source de Maven lui même et son javadoc.

Et l’étonnement m’a pris, cela est quasi-facile !

Voici le programme qui m’affiche les dependencies d’un pom.xml en deux coups de cuillère à pot (quasi mieux que Maven lui même, d’ailleurs) :

package jinutilitaire.lecoinmaven;

import java.io.FileReader;
import java.util.List;
import org.apache.maven.model.Dependency;
import org.apache.maven.model.Model;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;

public class Coin 
{
    public static void main(String[] args) throws Exception
    {
      MavenXpp3Reader xppread;
      Model model;
      List dependencies;
      
      xppread = new MavenXpp3Reader();
      model = xppread.read(new FileReader("/ici/le/path/pour/le/pom.xml"));
      dependencies = model.getDependencies();
      for (Object o : dependencies)
      {
        Dependency dep;
        
        dep = (Dependency)o;
        System.out.printf(
                "%n", 
                dep.getGroupId(), 
                dep.getArtifactId(),
                dep.getVersion());
      }
    }
}

Hahurissant ! 3 lignes de code ! Dans l’univers d’aujourd’hui c’est exceptionnel ! En plus le code de Maven semble super bien conçu, facile à comprendre, bien qu’il n’y ait pas beaucoup de doc… donc un Bon Point Pour Maven.

Pour que ça marche inclure le $MAVEN_HOME/lib/maven-2.0.9-uber.jar dans le classpath.

Laissez un commentaire

Tester Hello Swing après avoir dormi

L’idée naturelle pour tester notre Hello Swing est de se dire : Le logiciel de test va lancer l’appli puis regarder si ça s’est affiché. Nous allons essayer de la faire.

Mais si l’on comprend que l’on va afficher et immédiatement après regarder s’il y a quelque chose, cela va foirer : entre une commande d’affichage, et l’affichage lui même, il y a toujours un délai de réaction.

Mais combien de temps ? En général, pas très long. On peut considérer que, si au bout de 1 seconde, rien ne s’est affiché, c’est qu’il y a un problème quelque part.

Voilà pourquoi, après avoir lancé la commande d’affichage, nous allons attendre, nous endormir, 1 petite seconde, et alors seulement regarder si l’affichage a eu lieu.

Voici le code :

  public void testApparitionDeLaFenêtre() throws Exception
{ Object oreiller; Frame[] apparues; HelloWorld.main(null); oreiller = new Object(); synchronized (oreiller) { oreiller.wait(1000); } apparues = Frame.getFrames(); Assert.assertEquals(1, apparues.length); apparues[0].dispose(); }

Nous testons simplement qu’au bout de 1 seconde il y a une fenêtre.

Cette forme simple n’oblige à aucune modification du code d’origine.

Mais elle est fragile devant de possibles évolutions : si notre appli est utilisée dans le cadre d’autres applis, par exemple ? (il y aurait alors un nombre indeterminé de fenêtres).

Pour exécuter le test, cliquez ici : launch.jnlp (ouvrez au préalable la console JWS pour voir le résultat).

pour avoir les sources et le reste, cliquez ici.

Laissez un commentaire

Tester Hello Swing, encore de la philosophie

Nous avons donc décidé de faire un logiciel de test automatique de Hello Swing.

Cependant, nous devrons en afficher quelque part le résultat. Où ?

La première idée est de placer le résultat dans une fenêtre… comme pour Hello Swing. Mais là, nous tournons en rond. Nous voulons prouver que une fenêtre s’affiche, en en affichant une autre… Pour être crédible, il faut que notre test utilise quelque chose de plus simple pour afficher ses résultats, ou au moins une autre technologie.

Un fichier ?… peut être… Malheureusement, la technique utilisée pour Hello Swing, à savoir Java Web Start, ne laisse accès aux fichiers que pour les applications signées, et la nôtre ne l’est pas.

Afficher dans le navigateur web ?… peut être… Par Java Web Start, nous pouvons afficher une page dans le navigateur par défaut.

vue de BarreBisVoici une petite application qui présente la chose : la BarreBis, dont vous trouverez les sources ici. Entrez une URL dans le champ de saisie, et la page appelée s’affichera dans le navigateur par défaut. Et si vous tapez javascript:alert(« Reussi »), une popup contenant le message Reussi pourra éventuellement s’afficher – si le navigateur par défaut est configuré : le mien, Konqueror, affiche le résultat d’une recherche Google !

Afficher dans une console ?…. Il existe bien une console avec Java Web Start. Il faut la faire démarrer manuellement, en lançant la commande javaws -viewer, puis onglet Avancé / Console Java / Afficher la console., À partir de là, tout ce qui est envoyé par System.out est tracé sur cette console.

Comme, de toutes façons, le test nécessite à minima une démarche de surveillance de la part du testeur humain, cette console de Java Web Start me semble être le plus facile, et le programme de test l’utilisera.

Laissez un commentaire

Tester Hello Swing

Voilà, nous avons grâce à cet article une magnifique fenêtre affichant Hello World. Maintenant, il faut vérifier que cela fonctionne.

On dit, quelques fois, qu’il faut construire les tests avant de faire le logiciel. J’aurais dû, peut être. À ma défense, je répondrais que faire le test de Hello World avant l’écriture de ce programme relève de l’impossible : soit on a appris à programmer avec Hello World, et donc on ne peut pas écrire de tests avant, puisqu’on ne sait pas, soit on sait, et forcément on sait que c’est déjà fait, puisque ce programme a été écrit il y a au moins 30 ans !

On peut dire aussi : Pourquoi tester, de toutes façons, ça se voit ? L’idée est ici de faire tourner le logiciel, et de voir s’il fonctionne.

Pour tout le monde, du moment que l’on voit ce que l’on attend, c’est bon. De plus, cela donne une place à l’être humain, et cela lui permet d’avoir d’autres idées. Il pourrait dire, par exemple : L’aspect de votre Hello Worl est vraiment nul, vous pourriez faire un peu de design. Un programme de test automatique ne pourra jamais dire ça.

Mais, d’un autre point de vue, il peut être intéressant de trouver les moyens d’automatiser les tests. Par exemple, si on a Hello World, Hello Mister, Hello Miss… 1.000 comme cela ? Si on trouve le moyen de vérifier automatiquement qu’ils marchent bien, et cela n’empêche nullement d’en regarder certains. Et on ne fait que reculer pour mieux sauter : de toutes façons, il faut bien que quelqu’un regarde le résultat… des tests. Le regard est une attitude fondamentale pour parvenir à la réussite d’un logiciel, à bien des niveaux, dans bien des domaines.

Bon, et comment on fait pour tester ce Hello World ?… On verra dans le prochain billet.

Laissez un commentaire

Hello Swing

Il s’agit de faire Hello World en swing. Swing est le paquetage java pour faire des fenêtres, boutons, etc. Ce n’est pas la chose dansante que tout le monde connait.

Pour commencer les trucs inutiles, cela me semble bien indiqué, puisque ce programme est fait depuis belle lurette.

Voici le fil à couper le beurre que je viens d’inventer :
public class HelloWorld
{
public static void main(String[] args) throws Exception
{
EventQueue.invokeAndWait(new java.lang.Runnable()
{
public void run()
{
JFrame frame;

frame = new JFrame();
frame.add(new JLabel(« Hello World »));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}

(qui me permet de découvrir que WordPress ne rend pas comme je voudrais les balises code)

Et voyez ce que cela donne en cliquant ici.

Merveilleux, non ?… Que peut-on faire comme commentaires là dessus ?…

Laissez un commentaire

Hello world!

Welcome to WordPress.com. This is your first post. Edit or delete it and start blogging!

… lorsque l’on crée un blog avec WordPress, le système fournit automatiquement un premier billet intitulé Hello world! – celui que vous lisez en ce moment. Ce Hello world est une pratique très courante, pour enseigner un langage informatique : il est supposé très simple d’afficher un texte à l’écran, et cette simplicité permet à un novice d’écrire un premier programme, et d’apprendre les rudiments d’un langage.

Bien sûr, ce n’est pas forcément simple, où la simplicité cache des fois des choses compliquées, mais dans tous les cas cela permet un premier contact.

Et puis, quel plaisir lorsque l’on aborde un développement que d’arriver à un résultat rapide ! C’est un peu comme le My Tailor Is Rich pour apprendre l’anglais. Il y a un aspect un peu ludique, qui titille la curiosité.

À part cela, Hello World ne sert à rien.

J’aimerais que ce blog soit un peu comme ça : des programmes qui ne servent à rien, un peu amusants, mais qui examinent un aspect particulier de la programmation. Voilà pourquoi j’ai laissé le Hello World de WordPress, ainsi que le premier commentaire, que le système insère automatiquement aussi. À partir de là, on verra ce que les choses deviendront.

Comments (1)