La perle
Il y a des livres qui sont simples mais dont la morale peut nous laisser une marque indélébile.
Dans ce genre de lecture, j’ai nommé La Perle de John Steinbeck. Ce livre dépeint une histoire somme toute assez simple d’une famille pauvre vivant dans un petit village. Un malheur arrive lorsque Coyotito, le bébé, se fait mordre par un scorpion. Heureusement Kino, le papa, trouve une perle énorme qui permettra certainement de régler tout les problèmes que cette famille naissante pourrait rencontrer grâce à l’argent que cette perle rapportera. C’est alors que Kino se met à rêver de tout ce qu’il va pouvoir faire avec l’argent qu’il est près d’obtenir. La morale du livre ressort à ce moment-là très bien:
“C’est le fusil qui rompit les digues. C’était l’objet hors d’atteinte, et si Kino pouvait concevoir l’idée d’un fusil, alors il n’y avait plus de limites à ses désirs. Car on dit que l’homme n’est jamais satisfait; qu’une chose lui soit offerte, et il en souhaite une seconde. Cela est dit dans un sens de dénigrement et c’est cependant là une des plus grandes qualités de la race humaine, celle qui la rend supérieure aux animaux, lesquels se contentent de ce qu’ils ont.”
![la perle][3] Cet extrait pousse à la réflexion et c’est ce que j’aime dans la lecture. La lecture permet de s’ouvrir à des choses auxquelles ont n’a pas le temps de réfléchir en regardant un film ou en jouant à un jeu vidéo. En lisant cet extrait on peut se dire que c’est vrai que cette envie d’aller toujours plus loin peut valoir des choses extraordinaires. Rien qu’en pensant à toutes les possibilités offertes depuis la révolution industrielle, c’est remarquable! Par contre il est également possible de réfléchir au sentiment d’insatisfaction qui ressort d’une telle attitude. Aujourd’hui nous pouvons tellement acquérir de choses qu’il devient facile de ne plus apprécier à sa juste valeur les choses que nous possédons déjà ou les choses que nous avons pu faire nous-même. Personnellement, j’aime de temps en temps essayer de sortir de cet environnement publicitaire, marketing, pécuniaire à outrance, afin de profiter des choses qui m’entourent. Et à mon avis c’est quelque chose de bénéfique, d’indispensable pour avoir un sentiment de satisfaction.
Bee
Bee est une application AIR (j’ai décidé de m’y plonger donc). Une fois de plus, l’intégration se fait très simplement. Une fois sur le site proposant l’application un clic et l’application est installé sur votre machine après avoir accepté la licence ainsi que l’accès à vos données.

Cette application vous permet d’éditer votre blog à la manière d’ecto. Bee est moins évolué que celui-ci en fonctionnalités mais au niveau interface ca poutre comme on dit! Des effets de transparences, de fade in/out, d’animation… Tout y est et ca donne vraiment bien! Je continue mon exploration, j’espère bientot créer ma première applic.
Adobe AIR
Un article très intéressant concernant les applications desktop riches (RIA) est parru sur DevX.com
Cet article compare 3 technologies ayant pour but la création de ce genre d’application. Silverlight, Adobe AIR (anciennement connu sous le nom Apollo) et JavaFX sont mis côte à côte pour la création d’un même widget, un chronomètre.
Il est comme toujours évident qu’une technologie ne répondra pas à tous les besoins. Mais concernant le développement d’application riche je me dis que je vais peut-être bien me pencher davantage sur Adobe AIR quant on voit le résultat du chronomètre sous cette technologie et le développement y ayant mené. Ainsi le widget n’a aucune décoration et supporte la transparence. C’est la différence principale mise en avant dans l’article. Peut-être qu’il y a possibilité d’y arriver avec les autres technologies (en Java c’est possible d’ôter la décoration donc en JavaFX sûrement aussi) mais AIR le fait très simplement. Au niveau du déploiement les 3 technologies me semblent défendables; il n’est en tout cas pas difficile d’effectuer cette opération sur aucune des 3 technologies.
LibraryThing
J’ai parlé il y a quelques temps de Delicious Library. Application permettant de gérer votre médiathèque de façon agréable grâce à de beaux effets… Aujourd’hui j’ai découvert LibraryThing. Ce site permet de gérer sa bibliothèque en ligne et d’être lié a une communauté forte de plus de 280'000 membres. Les fonctionnalités sont similaires à Delicious mais il est évident que l’accès au travers de la grande toile apporte quelques avantages. Il est ainsi possible de consulter l’avis des autres membres sur des livres que l’on posséde ou qui sont similaires. On peut également intégrer des groupes d’internautes qui ont les memes gouts que vous pour parler de vos découvertes ou d’échanger tout simplement vos appréciations… Bref le fait de rendre l’application plus sociale est vraiment sympathique…
La communauté de développeurs autour de LibraryThing a l’air bien active. Elle alimente un blog et fournit plusieurs outils sympathique en marge de l’application comme un widget à publier sur son blog personnel ou encore un plugin firefox permettant de faire directement une recherche sur le site à partir d’une sélection de texte.
Les joies de la configuration réseau
/etc/modprobe.c/blacklist : un fichier important! …. La configuration de serveur, stations et autres périphériques est la chose la plus ennuyeuse à mes yeux en informatique. Mais bon il faut bien y passer de temps en temps. J’ai enfin terminé la configuration de mon serveur sous ubuntu feisty. Si vous possédez comme moi un chip sis 191 comme carte ethernet voici quelques notes importantes:
Le driver intégré à la distrib fait arrêter le démarrage de votre os. Il faut donc désactiver le composant depuis le bios. Ensuite pour installer le driver on est obligé, à ma connaissance mais ca peut très bien évoluer, de passer par un driver windows. Il vous faut donc le dowloader depuis le site de sis. Ensuite il va falloir installer ndiswrapper qui permet d’installer le driver:
-
sudo ndiswrapper -i nom_driver.inf
-
sudo depmod -a
-
sudo modprobe ndiswrapper
-
sudo ndiswrapper -m
Voilà ndiswrapper est maintenant configuré. Ce qu’il m’a fallu encore faire que je n’ai pas trouvé sur cette procédure c’est d’ajouter le module sis190 au fichier /etc/modprobe.c/blacklist. Il faut juste ajouter blacklist sis190 et le tour est joué. Sans ajouter cette ligne, ubuntu va tenter de charger ce module pour la carte réseau et va faire planter le démarrage. Après blacklistage, ndiswrapper prend les choses en main et tout fonctionne.
C’était le plus compliqué à trouver mais maintenant c’est tout bon j’ai mon serveur ssh qui tourne dessus et grâce à ce driver il est enfin possible de lire et écrire sur partition ntfs donc je n’ai pas à me casser bonbon à convertir/réorganiser toutes mes partitions… Ouf! Voilà qui est bien, enfin fini… Ah et pis chose rien à voir… Si vous voulez utiliser tomcat sur système Unix (en tout cas sur mac), ajouter bien l’autorisation d’exécution à tous les fichiers .sh sinon vous vous prendrez une erreur concernant une variable BASEDIR… Enfin bon pas toujours logique.
Multithreaded Java GUI Programming
J’ai lu récemment cet article sur InformIT. J’ai cependant une petite précision à faire. Il est en effet important de connaître la structure de swing au niveau threading avant de faire passer une application monothread à une application multithread. Ce n’est pas aussi simple que l’article semble le montrer.
Au départ de toute application, swing ou pas, la machine virtuelle démarre un thread de lancement. Ce thread a pour nom le main-thread, c’est donc au sein de celui-ci qu’est lancé la méthode main de votre application. Ensuite votre code peut initialiser, lancer, tuer des threads à souhait. Mais lorsque vous développez une application graphique avec le framework swing, un thread additionnel est lancé. Il se nomme l’_Event Dispatch Thread (_abbrévié EDT). Ce thread a pour but de gérer les interactions de l’utilisateur et l’affichage des composants graphiques de votre application. Ce qui est important c’est que ce thread n’ait à faire que des tâches très courtes afin que votre application ne gèle pas mais également que tout changement d’apparence de votre application passe par lui.
Si maintenant nous revenons à l’article de Monsieur Morris nous pouvons voir en page 3 que pour lui passer une application swing en multithreading est aussi simple que de créer un thread lors d’un clic de bouton et le lancer. Ce pourrait en effet paraître très facile! Mais il faut faire très attention en suivant cette méthode… En effet si vous mettez à jour votre application depuis le thread lancé il peut vous arriver malheur et ce qu’il fait dans l’article.
En revenant à notre description (très rapide) de l’architecture swing nous nous rappelons de l’EDT. Tout ce qui concerne un changement graphique doit passer par ce thread puisque c’est lui gère tout (redimensionnement, rafraîchissement, disposition…) ! Il existe plusieurs méthodes dans l’API de java qui permettent d’ajouter une tâche à effectuer dans l’EDT: SwingUtilities.invokeLater(Runnable r) et SwingUtilities.invokeAndWait(Runnable r)
Je vous laisse consulter la documentation pour connaître leur spécificités. Tout cela pour dire qu’il ne faut pas oublier de passer par l’EDT pour changer l’aspect de votre application pour ne pas avoir de surprise.
3 applics utiles
Les stations mac sont réellement splendides à mes yeux. L’expérience utilisateur est sans égale grâce aux différends effets de transparence et d’animation. Une toute autre manière de penser que Windows. Il est vrai que Vista comporte également de sympathiques nouveautés mais bon je ne veux pas faire de comparaisons ou de débats mais plutôt parler de quelques applications que je trouve sympathiques sur mac.
Delicious Library
La première d’entre elle se nomme Delicious Library. Cette application permet de gérer votre médiathèque entièrement. Vous pouvez y ajouter vos livres, cd, jeux vidéos et films et ceux-ci prendront place dans votre étagère virtuelle. L’ajout se fait très facilement grâce à la recherche intégrée qui se couple à Amazon (uniquement Canada et France dans la version démo). Mais la première astuce (assez bluffante je dois dire), c’est la lecture de code ISBN grâce à l’iSight! Vous défilez simplement votre livre devant la webcam et hop votre média s’ajoute sur l’étagère! Si vous possédez un lecteur de code barre vous pouvez bien sûr l’utiliser et remplir votre médiathèque en moins de deux de tout ce que vous possédez. L’ajout effectué, la fiche est remplie avec l’avis général des internautes sur cette objet, différentes infos avec en prime une liste d’objets similaires (fort sympathique lorsque l’on a apprécié un bon bouquin par exemple.Delicious vous permet également de gérer une liste d’amis à qui vous auriez prêté des objets de votre collection et qui vous renseigne sur la date de retour prévu.
Parallels Desktop
Parallels Desktop est une machine virtuelle permettant de faire tourner des systèmes opératifs au sein même du votre. Ceci me permet donc de lancer par exemple Windows Xp sur mon Mac. Fort utile pour lancer des démos jouables des jeux qui m’intéressent et qui bien souvent ne tournent pas sur Mac. De plus certaines applics ne sont pas portées sur Mac et donc une licence Microsoft est souvent bien utile. Il existe plusieurs concurrents offrant ce genre de service. J’en ai essayé 2 jusqu’à présent. Pour l’instant je reste sur celui- ci; l’interaction entre la machine virtuelle et mon système hôte (ici mon mac) est à mes yeux plus performante qu’avec le concurrent que j’ai pu essayer (Innotek). Un partage commun est directement accessible, les périphériques sont mieux gérés, DirectX sur la machine virtuelle (indispensable pour les applications graphiques comme les jeux)… Vraiment une application très utile et qui s’intègre très bien à Mac OS. Et encore davantage avec l’application qui suit.
VirtueDesktop
Cette application est simplement un gestionnaire de bureau. Très facile d’accès pour tout utilisateur. Vous aurez donc la possibilité de créer plusieurs bureaux ce qui permet de gérer ingénieusement ces applications. Dans mon cas sur un bureau j’ai mon Mac OS et sur un autre bureau Windows XP. En appuyant les touches _Shift + Ctrl + droite _ou gauche du pavé directionnel vous pouvez passer d’un bureau à l’autre avec une jolie animation (configurable - perso j’ai laissé l’anim cubique) en prime. Ce qui est génial c’est que Parallels peut passer votre machine virtuelle en plein écran, vous pouvez passer donc d’un mac à un pc en une combinaison de touches!
Les deux dernières applics n’ont une interface à proprement parler extraordinaire. VirtueDesktop n’a quasiment pas d’interface mais ces applications et les applications mac en général s’intègrent vraiment bien à l’os. C’est un réel plaisir que de travailler sur un mac. Je deviens vraiment accro à tous ces effets…. Et ne plus voir d’écran bleu, ou de bulle de notification toutes les 2 sec pour me faire savoir que des mises à jours sont prêtes ou que je suis connecté au réseau local…. Ca fait du bien! (P.S : je ne suis point du tout anti-microsoft)** **
Les objets de conditions
La JDK 5 a apporté de nombreuses fonctionnalités au niveau du développement multi-threading. Aujourd’hui j’aimerais discuter un peu des objets de conditions.
Un objet de condition permet de définir une condition (non pas vrai?) à remplir avant de continuer le processus définit par votre programme. Imaginons que vous développiez une application de gestion de stock pour le garage Marielo du centre du patelin. Angelo, le gérant, veut pouvoir gérer son stock depuis la maison mais également que ses employés puissent le mettre à jour directement avec les clients lors d’un devis ou d’une commande spécifique. Maintenant passons par-dessus toute l’analyse, que vous avez d’ailleurs parfaitement effectuée avec Angelo lui-même, pour arriver au coeur de votre application: la méthode removePieceFromStock(Piece p, int quantity). Dans cette méthode l’utilisation d’objets de conditions devient évidente. En effet dans le cas ou plusieurs clients (de votre application donc) appellent cette méthode il vous faudra vérifier que votre stock contient bien le nombre de pièces à commander. S’il s’avère que le nombre de pièces est suffisant vous pouvez alors les retirer. Avant de vérifier le nombre de pièces en stock vous aurez obtenu un verrou sur l’objet courant du fait que cette méthode modifie l’état de votre stock. Maintenant si vous obtenez le verrou pour l’objet et que votre condition échoue… Vous devez libérer le verrou de l’objet afin que le stock puisse à nouveau être fourni en pièce(s) qu’il vous faut.
Avant la JDK 5 la seule possibilité d’utiliser un objet de condition était d’en créer soi-même et de gérer les accès depuis plusieurs threads. Autant dire que sans être un expert du genre les erreurs de conception ou du moins les performances pouvaient s’en ressentir très facilement.
Le package java.util.concurrent.lock fournit 2 classes particulièrement utiles dans notre situation. Je veux parler de Lock et de Condition. L’interface Lock définit un objet de verrou (plusieurs implémentations existent au sein du JDK). La classe Condition quant à elle représente un objet de condition. Un objet Lock comporte de nombreux avantages par rapport à une conception mettant en oeuvre uniquement des méthodes ou des blocs synchronized mais la définition de ces avantages n’est pas le but de ce post. Je vous laisse vous référer à la javadoc pour obtenir une description complète sur ces éléments de la librairie. Sommairement, il faut savoir qu’un objet Lock peut avoir plusieurs Conditions et que ces Conditions permettent de stopper le déroulement de votre programme lorsqu’une condition n’est pas remplie et de reprendre à cet endroit lorsqu’un autre thread signale que la condition peut avoir changé. Le principe est le même que celui des méthodes wait/notify de la classe Thread. Le premier avantage est pour ma part une meilleure lisibilité du code de l’application puisque l’on connaît directement l’objet de la condition à remplir.
Pour finir, voici une solution possible au développement pour Angelo:
public void removePieceFromStock(Piece p, int quantity) {
try {
lock.lock(); //acquiert le verrou
while(getQuantity(p) < quantity)
insuffisantCondition.await(); //libère le verrou
//retire le nombre de
//pièces du stock
} finally { lock.unlock(); //libère le verrou } }
/**
une autre méthode permettra de rajouter des pièces au stock;
dans cette méthode il faudra signaler que la condition change
en appelant la méthode insuffisantCondition.signalAll() ou
insuffisantCondition.signal() ce qui permettra de relancer un
thread en attente sur cette condition - à noter qu'il est
impératif d'obtenir le verrou qui possède la condition afin
de signaler un changement d'état
**/
}
Macbook arrivé!
Quel bonheur!
J’ai donc reçu mon macbook pro jeudi dernier dans l’après-midi. Je l’avais commandé fin août suite à mon embauche chez Logica. J’ai longtemps hésité entre un macbook et un macbook pro mais la taille de l’écran ainsi que la carte graphique a forcé mon choix. J’avais en effet peur qu’un écran de 13" soit un peu short pour du dev et la carte graphique (une GeForce 8600M GT de 256mo) va me permettre de faire de la virtualisation sans problème. La livraison a donc pris du temps, mais l’attente est justifiée lorsque l’on constate la qualité du package. Un emballage splendide et l’intérieur également. Dans ce domaine Apple est vraiment remarquable; c’est beau et ca fait d’autant plus plaisir! Voilà maintenant je n’ai plus qu’à configurer ma station de bureau en mode serveur pour avoir accès à tout mon travail effectué sans tout transférer…. J’adoooorrrrreeeee ca….
Au boulot!
[posted with ecto]
Embauche - Logica
Nous sommes le 23 août 2007 et cela fait maintenant 23 jours que je suis sans emploi. Durant tout ce temps j’ai pu constater combien le métier d’informaticien est recherché! Je me rappelle encore la réunion d’information concernant l’école que j’ai fréquentée…. “Il faudrait couper les nouveaux diplômés en 2 pour combler la demande!”… Eh bien visiblement la demande est toujours forte! En tout cas au niveau développement c’est flagrant.J’ai ainsi pu passer plusieurs entretiens et avoir plusieurs propositions (mandats, contrats temporaires). Content du résultat je n’ai pas fait l’erreur de me jeter tête baissée sur la 1ère offre venue mais j’ai plutôt attendu quelque peu… Bien m’en a fait! J’ai en effet reçu plusieurs coups de fil après avoir posté mon cv sur Monster (vous êtes dans l’info et vous cherchez du boulot? –> monster.ch!) et à ma grande surprise l’entreprise LogicaCMG s’est grandement intéressé à mon profil. Après un contact téléphonique et email j’ai pu passer un entretien détendu et fort sympathique avec eux et à présent mon embauche est en court de finalisation! Conclusion: ne pas se jeter sur la première offre d’emploi venue et rester patient jusqu’à ce qu’une offre vous plaise! Attention à ne pas idéaliser trop non plus (bien que pour moi, je n’aurais jamais imaginé entrer à mon âge dans une boîte du genre de Logica)