Pomme Courge Mobylette

jeudi 16 avril 2009

Ecrire dans la console eclipse

Lorsque l'on crée un plugin eclipse, le comportement par défaut est d'ouvrir une MessageBox sur une action. Pourquoi ne pas, à la place, écrire dans la console ? Parce que c'est tout de suite un peu plus compliqué.

Lire la suite

samedi 11 avril 2009

Comment bien trier en java

Trier est un besoin régulier dans de nombreux programmes. C'est aussi toute une série d'algorithmes plus ou moins ragoutants que l'on apprends en école, avant de laborieusement les appliquer. Java, comme de nombreux langages de programmation, vient avec une méthode de trie dans son API. Ici, elle est dans la classe java.util.Collections.

Lire la suite

mardi 10 mars 2009

Comment debugger avec un canard

Voici une methode géniale pour debugger vos programme, le debugging au canard en plastique, et en voici les étapes :

  1. Achetez, volez, recuperez, mendiez, enfin obtenez un canard en plastique (modele de bain).
  2. Placez le canard sur votre bureau, et prevenez le que vous allez lui lire du code, afin qu'il accepte de passer un peu de temps avec vous.
  3. Expliquez au canard ce que le code est supposé faire, et expliquez lui votre production ligne par ligne.
  4. Au bout d'un moment, you direz au canard ce que vous etes censé faire, alors que ce n'est pas ce qui est écrit. Le canard restera serein, ravi d'avoir pu vous aider.

Ca marche a chaque fois. Neanmois, si vous n'avez pas de canard sous la main, un collegue peut faire l'affaire.

traduit depuis ce message

samedi 7 février 2009

Eclipserie : plug-in et bundle

J'attaque quelques billets sur la programmation de plug-ins sous éclipse. C'est un peu mon travail actuel. Pas de gros trucs, je pense, mais un peu de présentations et de techniques de base pour mettre le pied à l'étrier.

Avant tout, un petit point. Chaque plug-in sous eclipse est indépendant du point de vu de ses ressources (avec un petit iota sur les dépendences). Donc chaque plu in a son propre système de chargement de ressource, son propre classloader. Inutile de demander a charger une classe qui est dans un autre plug-in dont on ne dépend pas, ça ne marche pas.

Il y a donc un bundle par plug-in. Il y a deux façons de les récuperer. Soit on passe par l'activator de son propre plugin pour récupérer le bundle :

		Bundle bundle = Activator.getDefault().getBundle();

La seconde solution est lorsque l'on a besoin de récupérer le bundle d'un autre plugin pour utiliser une des classe qu'il propose en service (attendez de voir le chapitre sur les extensions points, ça sera plus clair. Dans ce cas, il faut demander a la plateforme de récupérer le bundle correspondant à ce plugin:

		Bundle bundle = Platform.getBundle("org.eclipse.ui");

Une fois qu'on a ce bundle, on peut enfin l'utiliser pour manipuler les ressources d'un plug in voisin. Par exemple un plugin qui fourni des services via un extension point que j'ai publié.

vendredi 5 septembre 2008

Cri de colere

Heureusement qu'eclipse est gratuit, ca ferai bien chier de payer pour une saloperie pareil, incapable de garder correcte un environnement de dev, qui perds ses dependances au reboot, et avec des messages d'erreur dans le code testé digne d'un débile leger....

eclipse pas causant

jeudi 4 septembre 2008

Java, les visibilités et disgressions sur le sujet

Java, comme de nombreux langages objets, introduit la notion de visibilité pour les éléments dans une classe. Public, protected et private, que signifient elles ? Dans quels cas doit ont utiliser l'une ou l'autre. Et pourquoi en java, parlons nous d'une quatrième qui n'a pas de mot clef associé (et s'appelle package ou friendly suivant la littérature) ?

Lire la suite

vendredi 22 février 2008

De l'interêt des approches génératives

Soit un projet java 1.4 de 160 KLOC. Mission du jour, le faire basculer sur java 5 et avoir des listes fortement typées, des List<Truc> au lieu de List.

Durée de modification manuelle de code : 2 heures.

J'ai simplement modifié mes templates de génération. Pour chaque élément de modèle, j'ai une description (dans un langage type JSP) de comment il doit se générer, à quoi cela doit ressembler. Ils me servent à générer les signatures de méthode, mais aussi leur contenu, dont une description haut niveau est contenu dans le modèle.

Durée totale de régénération du projet : 12 heures .... Bon, c'est peut être optimisable. Dans le même temps, ça faisait des mois que j'avais pas lancé ça, je vais pas y passer des heures sur un truc rarement lancé.

mercredi 13 février 2008

Etendre UML : les profils

J'ai déjà expliqué la brique de base de l'extension UML : le stéréotype. Mais il y a une notion plus générale dans les extensions UML : le profil, ou "UML profile" en anglais.

Un profil est un regroupement d'extensions UML destinée à un domaine particulier, que ce soit technique ou business. Ce profile contiendra des stéréotypes ajoutant de la sémantiques (et des données) aux éléments UML, mais aussi (suivant l'outils), des éléments UML dédiés à cette modélisation, comme des types de base.

Pour que ce soit plus clair, je vais prendre l'exemple des EJB. Dans les EJB, il y a des métadonnées rajoutées aux classes sous forme d'annotations java. Lorsque l'on a un EJB entity (donc avec persistance), il va falloir exprimer des choses sur ses relation. La relation "Many-to-Many" est-elle inversé (méta-attribut de type booléen), quel est le type de cascade lors de liens entre objets (méta-attribut de type énuméré). Pour exprimer ça en UML, cela donne la création d'un stéréotype <<ManyToMany>>, et sur ce stéréotype deux attributs que sont inverse et cascade. Pour typer cascade, il y aura en plus un énuméré CascadeType ayant pour littéraux ALL, PERSIST, MERGE, REMOVE et REFRESH.

Maintenant, les outils UML n'offrent pas tous la même finesse de définition de profils. Pour certains, on ne peux que rajouter des stéréotypes sous formes de champs textes, mais à l'autre bout, comme prévu dans la norme UML d'ailleurs, un profil est un package, et peut donc techniquement apporter tout ce qu'un package peut contenir.

samedi 19 janvier 2008

Etendre UML : Les stéréotypes

UML est un langage permettant de modéliser des systèmes d'information. La version standard est très passe partout, et permet déjà une modélisation poussée. Mais il y a des cas où on se retrouve avec des besoins spécifiques dans la modélisation. Que ce soit pour des raisons techniques ou méthodologiques

Technique, parce que certains éléments UML vont avoir une particularité du point de vue de leur utilisation. Ce la peut être via un framework par exemple : une classe sera implémentée par un EJB, une autre sera supportée par le mécanisme de sérialisation.

Méthodologique, parce qu'un élément peut avoir un rôle particulier du point de vu de la méthodologie utilisée pour la conception. Dans le cadre d'une méthode SOA, cela peut être la mise en avant d'un service par rapport au reste de l'application.

Pour ces besoins spécifiques, UML a introduit un concept appelé le stéréotype. Il permet, rajouté à un élément, de sous-classer celui ci pour le spécialiser, comme on dériverais une classe existante. Voici un exemple avec l'artifact. L'artifact est un élément UML représentant un élément externe, souvent un fichier. Sauf qu'ici, on veut le caractériser plus finement comme étant un fichier jar, et en plus ayant une classe principale. Pour cela, je crée un stéréotype, et l'applique sur mon élement artifact qui représente mon fichier jar. Le stéréotype apporte en plus une information complémentaire (l'attribut main-class), spécifique a ce nouteau type.

modelisation et utilisation d'un stereotype

On voit sur ce schéma la notation d'un steréotype. Comme un keyword, il s'agit du nom du stereotype encadré de "<<" et de ">>".

A retenir: le stéréotype est la brique d'extension de base d'UML, pour spécialiser un élément UML vers quelque chose de plus fin.

jeudi 1 novembre 2007

Migration de gallery V1 vers gallery V2

ma gallery d'images personnelle commençait à se faire vieille. Manque de fonctionnalités flagrante (principalement pas de captcha anti-bots qui commençait à me pourrir certains commentaires), look un poil vieillot. Il était temps de bouger. Par chance, ma debian fourni le choix entre gallery1 et gallery2. En ce matin de jour férié, je me suis lancé. apt-get install gallery2.

Pour commencé, j'ai installé gallery2 en parallèle du 1. Afin de la configurer a vide déjà. Le wizard de configuration se lance pour la configuration de base, et à la fin, j'avais une gallery en état de marche. Je me logge en administrateur, et là, tout en bas, un petit bouton : "importer depuis gallery V1". Je fais, je lance sélectionne le tout, et après un bon quart d'heure, j'ai récupéré mes albums, avec les commentaires, et toutes mes photos à jours.

A partir de là, ce n'est plus que de la configuration simple. choix d'un thème, réinsertion de mes pubs dans les pages (le système de template est super clair au passage). Juste un truc à penser dans les redirections pour garder les anciennes urls.

Ayé, j'ai une nouvelle gallery toute propre et toute belle :)

dimanche 28 octobre 2007

RUP : méthode utilisant UML

Comme je l'ai déjà expliqué, UML n'est pas une méthode, mais un langage permettant d'exprimer des systèmes. Nulle part, c'est expliqué comment faire avec UML comment faire pour construire un système. Comparaison gratuite : un tournevis permet de monter l'armoire ikea, mais ne diras pas comment le faire. C'est pour cela qu'il y a des processus de développements qui utilisent UML comme notation.

Le RUP (Rational Unified Process) est le plus connu de ces processus. Sorti chez rational à l'époque, il est maintenant dans le giron d'IBM. Il s'agit d'un processus de développement destiné au développement logiciel, qui, par certains cotés, est proche des méthodes agiles, à savoir que l'on se concentre sur ce qui est d'un intérêt direct pour le client et qu'il s'agit d'un processus itératif, et surtout guidé par les risques.

Dans le RUP, le développement logiciel se divise en 4 phases

L'inception est une phase de vérification du projet. On doit comprendre le système à construire, identifier les risques (techniques ou non) et en déduire les coûts et les méthodes de développement précis à appliquer. A la fin de cette phase, on sait ce que l'on va faire, et quels sont les outils que l'on va utiliser. On sait également quels sont les risques, risques que l'on tacheras d'éliminer dès que possible.

L'élaboration. Seconde phase, raffinant la première, allant plus loin dans les détails. Cette phase aboutiera à la conpréhension fine des exigences, à la suppression des risques en concevant et en implémentant l'architecture de référence. C'est une phase où une première version du soft gros grain, ou l'élaboration d'un prototype vont permettre d'investiguer sur les risques techniques pour les réduire.

La construction. C'est la phase d'implémentation proprement dite. C'est ici que l'on développeras toutes les fonctionnalités du projet, en utilisant un certains nombre d'itérations fonctionnelles, le logiciel devenant de plus en plus riche fonctionnellement au fur et à mesure des versions.

La transition. On prépare le logiciel à sortir. Ce n'est pas parce qu'il est écrit que tout s'arrête. Il faut encore préparer la documentation, former les utilisateurs, préparer les outils marketings au besoin. Cette phase permet également de préparer les prochaines évolutions liées à la maintenance du logiciel. La phase de transition dure donc toute la vie du logiciel une fois celui-ci réalisé.

Pour en savoir plus sur le RUP, je conseilles le livre "guide pratique du RUP", par Per Kroll et Philippe Kruchten. Ecrit par les auteurs du RUP, ce livre montre son application dans des applications d'exemple. Simple à lire, très didactique, une vraie réussite... mais introuvable. Et non, je ne vend pas le mien.

vendredi 19 octobre 2007

L'outil du programmeur : le debugger

Il y a un outil que j'ai jamais utilisé pendant mes études d'informatique. Et a priori, vu le nombre de personnes que je vois débuguer au print dans les forums, je suis très loin d'être le seul. C'est un manque courant. On voit les gens rajouter des quantités de traces monstrueuses et les éplucher pour retrouver d'où viens leur problème.

Et le nombre de traces peut être assez impressionnantes. Sans compter que certains bugs peuvent être influencés par des traces (on a tous vu des printf planter un programmes pour cause de mémoire corrompue plus avant).

D'où cet article sur comment utiliser un debugger, pour mieux comprendre ce qui se passe. Je montre avec Eclipse sur un programme java, mais le principe est le même pour tous les langages, seul l'outil change.

Lire la suite

vendredi 29 juin 2007

Eclipse 3.3 (europa) est sorti

Eclipse, la plate forme logicielle d'IBM est sortie en version 3.3. Bien que se présentant pas défaut sous la forme d'un IDE java, cet outil est un outil beaucoup plus complet, permettant le développement d'application clientes d'entreprises, notamment grâce à ses nombreux framework ouverts, comme RCP pour la structure applicative, EMF pour la gestion des modèles de donnée, GEF/GMF pour les affichage de données graphiques.

Lire la suite

mardi 5 juin 2007

Nouvelle méthode pour définir un nombre aléatoire

random number

source : http://xkcd.com/

mercredi 16 mai 2007

Qu'est-ce qu'EMF ?

Toute personne travaillant autour d'eclipse a déjà entendu parlé d'EMF, au moins par sa fréquence de mise à jour. Mais quel est donc cet EMF (pour Eclipse Modeling Framework), à quoi cela sert-il, et qui a besoin de l'utiliser ?

Lire la suite