Netbeans et Python
Netbeans est déjà un excellent IDE pour le langage Java, C/C++ et Ruby. Il est certainement trop peu utilisé (moi y compris) face au quasi standard Eclipse… Mais l’actualité récente le concernant devrait encourager plus d’un à au moins l’essayer. Ses créateurs lui ajoutent en effet régulièrement le support de nouveaux langages.

Déjà avec la sortie de la version 6, Netbeans a apporté un support à JavaScript largement apprécié par la communauté.. La version 6.5 prédit le support de Php et avant-hier, InfoQ a diffusée l’annonce du support prévu de Python!
Prenant forme d’un projet opensource, il est possible de retrouver les développeurs de ce projet sur le site: https://nbpython.dev.java.net/ … Vous noterez que leur logo est bien laid :) Excellent nouvelle que voilà, je me réjouis de voir ce que cela va donner. C’est en tout cas une raison de plus de tester Netbeans. Python est un langage qui monte avec constance et qui, comme le mentionne l’article d’InfoQ, passe gentiment devant Perl. De plus, ce qui n’est pas négligeable c’est que ce langage est très agréable à utiliser et possède une forte communauté. Pour preuve Google a récemment lancé sa plateforme AppEngine basée sur ce langage.
Si vous ne connaissez pas encore ce langage, jetez-vous dessus! Le meilleur départ: Dive Into Python. Dernière chose, Sun a lancé en parallèle un nouveau Developper Center sur ce qui tourne autour de python, à ne pas manquer!
Wiiiiiii
Nous avons fait le grand pas de nous acheter une Wii! Après la déception de ne pas avoir réussi à m’en procurer une sur Qoqa, c’est fait, nous avons craqué face à ce système de consommation!
La Wii parce que Nintendo, la Wii parce que Zelda le jeu qui m’a le plus marqué (Ocarina of Times sur N64). La Wii parce que Wii Remote. La Wii parce que console virtuelle, parce que moins cher, parce que fun, parce que, parce…. Bref, la Wii!
… J’ai déjà casser un verre en jouant au bowling mais que c’est fun!… Certainement qu’à l’avenir donc nous trouverons ici et là quelques tests..
Lectures #5
La lecture est une passion pour moi, j’adore me plonger dans toutes sortes d’histoires. Ces temps-ci je suis passé par des styles très différents comme va le montrer mes différentes critiques:
For one more day - Mitch Albom
Ce récit m’a beaucoup touché. L’histoire raconte la relation d’un homme avec sa mère et rejoint le style de L’Enfant d’Hiroshima que j’avais également beaucoup apprécié. Les histoires entre un enfant et sa mère m’ont toujours passionné et ému. Je ne suis pas sûr de savoir pourquoi mais ce qui est sûr c’est que j’aime me remémorer mes moments à moi avec ma maman… Et c’est sûr que ce genre de récit aide à s’en rappeler! Bref, après avoir lu cette histoire on est un peu plus déterminé à profiter de l’instant présent et à faire plus attention aux gens qu’on aime et à leur montrer qu’on les aime justement… Je ne peux que conseiller cette lecture, un 5/5!
Les robots - Isaac Asimov
On passe dans un style complètement différent! Livre à grand succès et lu par une grand public amateur de SF, j’y avais jusqu’alors échappé mais me réjouissais grandement de le lire. La seule chose que je peux dire c’est que je l’ai dévoré et que l’histoire m’a pationné, mais malheureusement allez savoir pourquoi je ne me rappelle plus trop pourquoi. Voilà ce que c’est que de ne pas écrire tout de suite les critiques de ses lectures! Je conseille aussi cette lecture à 4/5. Je me rappelle juste avoir eu un ou deux passage un peu longuet…
Le maître de Garamond - Anne Cuneo
Après avoir parlé récemment de cette lecture sur un aspect particulier, je peux juste dire que cette lecture est un moment vraiment agréable passé au contact de personnes ayant vécu au 16ème siècle aux débuts de l’imprimerie. On y retrouve des valeurs que j’apprécie beaucoup: abnégation, curiosité, fidélité. Ceux qui aiment les récits historiques seront servis avec cette oeuvre d’Anne Cuneo. J’ai bien envie de parcourir le reste de ses oeuvres.
Hackers & Painters - Paul Graham
On est plus dans un recueil d’essais technologiques et psychologiques avec ce livre… Quand je disais que je suis passé par plusieurs styles ces temps… Paul Graham est un homme très intelligent et cela se ressent tout au long du livre. Ce livre est davantage ciblé à un public d’informaticien mais par-ci par-là des textes deviennent accessibles à tout un chacun (je pense par exemple à What You Can’t Say ou encore How to Make Wealth) et font bien réfléchir, j’adore! Tous les essais contenus dans le livre sont en ligne sur le site de Paul Graham: http://www.paulgraham.com/articles.html Appréciation: 5/5
Neverwhere - Neil Gaiman
J’ai été un peu déçu par la lecture de ce roman SF de l’auteur de Stardust (dont j’ai d’ailleurs adoré l’adaptation au cinéma). C’est l’histoire d’un gars qui passe d’un instant à l’autre de la vie d’un fonctionnaire sans histoire à une vie de quête dans un monde qu’il ne connaissait même pas: le Londres d’en-dessous. On découvre alors un monde imaginaire mais loin de ce que je recherche dans ce genre de roman: l’évasion! Pas facile d’expliquer pourquoi je n’ai pas été embarqué mais cela doit se résumer au fait que je n’avais tout simplement pas l’envie d’y être. Un peu simplet mais par exemple par rapport au Robots, je crois qu’il y avait trop d’abstrait dans ce roman. Je dois être un poil trop pragmatique pour être emporté par ce genre d’oeuvres… Et pourtant j’ai adoré la série d’Arthur de Marion Zimmer Bradley donc aller savoir, faut pas chercher… Je note 3/5 car c’est quand même assez bien écrit.
Gros problème - Dave Barry
Je termine par le non des moindres Gros problème: une comédie carrément hilarente! Dave Barry est un chroniqueur pour le Miami Herald entre autre et je ne sais plus trop comment mais c’est comme ça que je l’ai découvert. Il est très connu et apprécié aux Etats-Unis. Si on est fan de l’humour british c’est un must du genre. C’est une histoire tellement rocambolesque et absurde: à mourir de rire! Je me rappellerai encore longtemps du chien appeuré par un gros crapaud dans sa gamelle! Rien que d’y penser j’ai envie de rire… Enfin bref le seul point négatif dans tout ça c’est qu’il y a trop peu de livre de lui!! Je le note sans conteste 5/5. … Je n’en ai pas le temps maintenant mais je recommande aussi la lecture d’Ensemble c’est tout de Gavalda… Tous mes livres (depuis quelques mois) sur librarything: http://www.librarything.fr/catalog/poxd
Structure and Interpretation of Computer Programs
J’ai recommencé la lecture de Structure and Interpretation of Computer
Programs et à l’image d’Eli Bendersky je me fixe les objectifs
suivants:
-
Lire le livre (ça doit être la 3ème fois que je le recommence ;) )
-
Visionner les vidéos du cours
-
Faire le maximum des exercices contenus dans le livre
-
Je mets cet objectif entre parenthèse: faire l’un des assignements du cours
Ce livre introduit de nombreux concepts et a été utilisé jusque très récemment par le MIT comme support de cours. Grâce à cette lecture, j’espère développer ma compréhension des langages fonctionnels mais aussi atteindre les attentes du livre, expliquées dans la préface:
First, we want to establish the idea that a computer language is not just a way of getting a computer to perform operations… Programs must be written for people to read, and only incidentally for machines to execute. Second, the techniques used to control the intellectual complexity of large software systems
Tout ce qui se rapporte à cet exercice se trouvera sous la catégorie SICP; en mettant cela par écrit, j’espère me donner du courage et atteindre une bonne fois pour toute cet objectif! Go!
Le maître de Garamond
Je parlerai bientôt des différends bouquins que j’ai pu lire ces derniers temps mais là il me faut absolument faire mention du livre que je viens de terminer: Le maître de Garamond.
Je voulais particulièrement parler de deux choses concernant cette oeuvre d’Anne Cuneo.. Mais il y a trop à dire, je vais me focaliser déjà sur la première.
L’usage de la mémoire… Internet va-t’il nous rendre stupide?
Oudin, tel est le nom d’un personnage de l’histoire. Ancien saltimbanque, il se lie avec un imprimeur grâce à Garamond, le narrateur de l’histoire. Oudin possède plusieurs caractéristiques particulières mais l’une d’elles est des plus étonnante et m’a fait réfléchir. Il est capable dans l’histoire de réciter des contes, des conversations, des tirades, des événements de mémoire avec infiniment de détails. Je dis que cela m’a fait réfléchir mais Antoine Augereau le maître de Garamond fait cette réflection avant moi lorsqu’il dit:
C’est parce que nous venons d’un monde où l’imprimerie n’existait pas encore… Nous étions forcés d’exercer notre mémoire. Maintenant, pour vous, c’est la belle vie. On imprime les choses, et puis on peut les laisser s’estomper. On n’a plus qu’à consulter les livres…. Plus il y aura de livres, moins il y aura d’Oudin.
Qu’est-ce que dirait ce Maître Augereau maintenant! Nous avons accès à tellement d’information grâce aux livres mais surtout grâce à Internet! J’ai d’ailleurs déjà vu sur le net certains avancer qu’il n’y a même plus besoin de livre pour apprendre tant Internet nous donne accès à tout ce qu’on veut (mais bon le confort n’y est pas encore…). Au vu du contraste entre les capacités d’Oudin mises en avant dans ce roman et les capacités de mémoire de chacun aujourd’hui (enfin dans cette assertion je ne peux que me baser sur ma propre mémoire ;) ) on peut facilement arriver à ce genre de questions: exerçons-nous donc encore notre mémoire, ou du moins l’utilisons-nous efficacement? Arrivera-t-il un jour où les livres ou Internet nous auront rendus incapables d’user de cette mémoire? C’est un raisonnement assez paradoxale mais encore aujourd’hui j’ai pu lire un article intéressant à ce sujet dans la tribune de Genève: Le Web nous rend-il incapables de lire? Cet article fait mention d’un essai publié récemment ayant pour titre «Google nous rend-il bêtes?» («__Is Google Making Us Stupid»). L’article nous informe par exemple comment Platon avait le même genre d’idée que Maître Augereau mais lui à propos de l’écriture:
A mon avis certains sont assez répulsifs au changement. Internet c’est vrai peut très bien changer nos habitudes de lecture mais est-ce pour autant que l’on deviendrait moins intelligent? Comme toute nouveauté, il faut savoir s’en servir et à mon avis Internet n’est qu’un nouvel outil à disposition de tous les curieux de la planète! L’article se veut d’ailleurs rassurant de par sa conclusion:
N.B.: Quelques astuces pour améliorer sa mémoire et en savoir plus sur le sujet: cliquez ici.
Building GWT Comet based web app using Grizzly Comet
J’ai parlé il y a quelque temps des difficultés de Java à fournir la possibilité de mettre en place une architecture web riche… JavaOne étant terminé, on retrouve maintenant ici et là les différentes présentations disponibles sur le net et concernant ce sujet d’actualité, l’une d’elles semble être particulièrement intéressante. J’ai nommé: Writing Real-Time Web Applications, Using Google Web Toolkit and Comet. Il est possible de retrouver les slides de la présentations en cliquant sur ce lien. La présenation se base sur l’utilisation de l’outil de google GWT et du serveur de Sun GlassFish couplé à Grizzly Comet. Enjoy!
Package java.lang.reflect
Après avoir substantiellement passé en revu le package java.lang, je vais me porter sur java.lang.reflect durant ce post. Comme son nom l’indique, nous retrouvons dans ce package tout l’attirail nécessaire pour jouer avec la reflection. Autrement dit, en ciblant un objet donné, nous pourrons découvrir chacun de ses membres.
A quoi ça sert ?
Concrètement, la reflection trouve son utilité par exemple dans les éditeurs de développement (IDE). Comme l’image ci-dessous le montre, ces outils nous permettent de découvrir la structure d’une classe mais aussi où est-ce qu’elle se trouve dans la hierarchie objet. Ceci souvent au moyen d’un arbre et ce que ce soit en cours de développement mais encore, de manière avantageuse, en cours de débugage.

Il existe d’autres utilisations à la reflection comme par exemple dans les processus de sérialisation, dans l’utilisation d’objets métiers distribués (EJB), les containers web et d’inversion de contrôle etc. Mais dans la pratique comment font donc ces IDE pour nous décrire la structure de nos objets? C’est ce que nous allons découvrir maintenant avec la suite de cet article.
Les classes de bases
En plus des classes se trouvant dans ce package, il nous faudra également
faire appel à une classe étant dans le package java.lang: Class. Je n’en
avais pas encore parlé, voici donc le moment venu… Class représente une
classe (ou une interface) tournant dans la machine virtuelle. Les objets Class
sont créés automatiquement par la JVM au moyen du ClassLoader (faisant
aussi parti du package java.lang) au chargement. Il nous faut en premier lieu
utiliser cette classe avant de pouvoir profiter du contenu de
java.lang.reflect: Class lClazz = Class.forName(className); Suite à
l’exécution de cette ligne de code nous pouvons être certains qu’un objet
Class correspondant est créé. En effet, le ClassLoader ne va pas charger
toutes les classes de la librairie (ouf!) mais uniquement celles qui sont
utilisées dans l’application.

Comme exemple j’ai créé une petite application1 listant tous les membres d’une classe entrée par l’utilisateur.
Comme vous pouvez le constater dans les sources après avoir l’objet Class tout est accessible grâce aux classes Constructor, Field, Method et Modifiers de l’API java.lang.reflect. A noter que grâce à la reflection, il est possible de contourner les modificateurs d’accès! Pour davantage d’informations, je vous invite à lire Accès privé… pas tant que ça.
Voilà pour les bases de la reflection. Maintenant un peu plus intéressant, découvrons l’utilisation des Proxy et leur importance au sein d’un certain framework.
Proxy
La classe Proxy offre la possibilité de créer des proxy dynamiques. Autrement dit, elle permet d’ajouter une couche entre un objet target et son créateur. Pourquoi rajouter une couche direz-vous… Eh bien pour le découvrir entrons dans les entrailles du framework Spring2. L’un des modules de Spring permet de faire de la programmation par aspect (AOP pour Aspect Oriented Programming) ce qui offre la possibilité de créer des classes avec une meilleure granularité. Voici par exemple la configuration XML permettant d’afficher un message sur la console avant l’appel de certaines méthodes:
<bean id="kwikEMart"
class="org.springframework.aop.framework.ProxyFactoryBean">
<!-- interface interface implémentée par l'objet _target_ -->
<property name="proxyInterfaces">
<value>org.poxd.store.KwikEMArt</value>
</property>
<property name="interceptorNames">
<list>
<value>welcomeAdvice</value>
</list>
</property>
<property name="target">
<ref="kwikEMartTarget"/>
</property>
</bean> `
Nous n’avons ici qu’une partie du travail à effectuer mais il y a ce qu’il nous faut. Ce bout de code XML permet à Spring de créer un ProxyFactoryBean. Cette classe offre la possibilité d’ajouter des interceptors dans le workflow de votre application. Dans notre cas, le bean correspondant à welcomeAdvice sera appelé (suivant une règle définie ailleurs) par exemple avant l’invocation de la méthode start de notre application pour afficher un message de bienvenue_._

A la base nous avons toujours notre classe ne contenant aucun appel à welcomAdvice. C’est Spring qui va rajouter cet appel avant de poursuivre avec la classe que nous avons développé au départ. Pour ce faire, Spring utilise un Proxy. L’image ci-contre démontre bien le fonctionnement. Avant que le proxy invoke l’objet target il peut faire n’importe quelle opération (dans notre cas appeler welcomeAdvice)! Et de notre côté, l’architecture n’est pas touchée, nos classes ont un focus bien défini.
Voilà en pour ce qui concerne le package java.lang.ref. En attendant que je me penche sur une partie du JDK, les commentaires sont les bienvenus!
-
Vous pouvez retrouver le code source en cliquant ici – code de démo, entrez dans le champ texte par exemple org.poxd.Reflect ou n’importe quelle classe du JDK ↩︎
-
Pour une description de ce framework, consultez la section About du site www.springframework.org ↩︎
Apprendre l'anglais
Les cours d’anglais sont peut-être éloignés et vous avez envie de vous y replonger?
J’ai le privilège actuellement de suivre un cours d’anglais par téléphone. Mon employeur a la bonté de m’offrir cette prestation en partenariat avec goFluent. Je dois dire qu’avoir des conversations uniquement en anglais fait progresser, c’est réellement utile. Malheureusement tout le monde n’a pas un employeur aussi sympa et non plus les moyens de s’offrir un telle prestation…
Il existe cependant sur la toile plusieurs ressources extrêmement utiles pour s’améliorer:
-
De nombreux podcats gratuits: il n’y a qu’à taper english learn dans le champ de recherche sous iTunes et une longue liste va s’afficher. Personnellement j’aime beaucoup English as second language podcast_ _qui propose 2 podcasts par semaine avec 2 formule: l’_English Cafe _(sujets à propos de la vie aux Etats-Unis) et un podcast traitant d’un sujet en particulier (talking about prices, going into the military, etc.). Il est également facile de trouver des podcasts pour améliorer son vocabulaire ou sa grammaire… Really usefull!
-
Afin de lier l’utile à l’agréable, je trouve sympa de faire des mots croisés en anglais. Et on peut en trouver pour tous les niveaux sur le net! Par exemple, comme mon niveau est moyen pour l’anglais courant, en ce moment je consulte ce site: http://www.crosswordsite.com/usbeginner.shtml
-
Enfin pour apprendre une langue, le plus important est de la parler! Et à ce sujet j’ai reçu un mail hier concernant Polyglot. Polyglot est une communauté ayant pour but de rassembler ses membres et de simplement faire converser tout le monde, autour d’un verre, dans n’importe quelle langue parlée par les membres de cette communauté. Le premier rassemblement des membres suisses à lieu aujourd’hui à Genève! J’espère vraiment que cette idée va se poursuivre.
Voilà trois moyens offerts gratuitement par Internet pour apprendre l’anglais. Pas belle la vie? Vous connaissez d’autres bon plans? N’hésitez pas à laisser un commentaire.
Je suis un intello!
Avant de me croire prétentieux, qu’est-ce qu’un intello? Peut-être que la définition qui suit ne convient pas à ce terme quoiqu’il en soit je l’aime beaucoup:
Être intello ça veut dire aimer s’instruire, être curieux, attentif, admirer, s’émouvoir, essayer de comprendre comment tout ça tient debout et tenter de se coucher un peu moins con que la veille ((Extrait tiré du livre Ensemble c’est tout d’Anna Gavalda)).
Cette définition fait abstraction de la notion d’intelligence. Tout le monde peut faire preuve de curiosité c’est l’une des seules justices de ce monde, par contre curiosité n’est pas égale à intelligence et malheureusement (ou heureusement peu importe) chacun ne naît pas avec le même capital et les mêmes possibilités.
Mais lorsqu’à l’école un bambin balançait “oh l’intello” il ne voulait pas dire “oh mais comme il est curieux mon camarade”… Mais bien plutôt “celui-là il me gonfle il sait tout!” Dans ce sens la définition ci-dessus n’est peut-être pas adéquate mais qu’elle se rapporte à intello ou n’importe quelle autre expression, je voulais la partager car je l’apprécie beaucoup.
Teach Yourself Programming in ten years
Je suis retombé récemment sur cet article extrêmement intéressant: Teach yourself programming in ten years. Passé l’introduction, Peter Norvig expose plusieurs points qui selon lui sont la recette du succès pour devenir un bon programmeur. Peter Norvig est actuellement Directeur de Recherche chez Google US, il est donc légitime de faire confiance en ses dire. Les voici en résumé:
- Avoir du plaisir! Programmer parce qu’on aime ça. Et le faire avec suffisamment d’envie pour pouvoir le faire encore dix après.
- Avoir un échange avec d’autres programmeurs. Lire le code d’autres développeurs . Et aujourd’hui avec la multitude de projets open sources (qui a dit Java?) il n’y a pas d’excuse pour trouver du code écrit par des professionnels.
- Coder, coder, coder et encore coder! En effet, n’oublions pas que c’est en forgeant que l’on devient forgeron.
- Obtenir un titre universitaire permettra de postuler sur des emplois demandant un papier et permettra également d’avoir une compréhension plus profonde du sujet. Cependant l’expérience ne s’acquiert ni en lisant des livres, ni en assistant à des cours. Il est donc possible de devenir un programmeur professionnel en ayant uniquement une formation de base et en développant ses compétences par la pratique. L’expérience de Peter Norvig nous apprend que l’un des meilleures programmeurs qu’il ait eu l’occasion d’embaucher était de niveau pré-universitaire (l’un des créateurs de netscape entre autre).
- Travailler avec d’autres programmeurs
- Travailler sur des projets _après _d’autres programmeurs.
- Apprendre au moins une demi douzaine de langages. Un supportant l’abstraction de class (Java, Python..), un supportant l’abstraction fonctionnelle (Lisp, Haskel), un supportant l’abstraction syntactique (Lisp), un supportant les spécifications déclaratives (C++ templates), un supportant les coroutines (Scheme) et enfin un supportant le parallélisme (Sisal).
- Prendre part dans l’effort de standardisation d’un langage. Même dans un contexte local, sur un projet personnel par exemple.
J’ai pris la liberté de ne pas mentionner tous les points mentionnés dans l’article. Mais rien qu’avec cette liste, il y aura certainement toujours quelque chose à faire, à améliorer. C’est aussi cela qui est passionnant avec l’informatique. Se dire que l’on n’aura jamais fait le tour du sujet, qu’il sera toujours possible d’en apprendre et de nourrir abondamment sa curiosité… Ca ca me plait!