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 veille1.

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.

  1. Extrait tiré du livre Ensemble c’est tout d’Anna Gavalda []

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é:

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!

Une aide bienvenue pour se certifier SCWCD

Une seconde édition du livre Head First Servlets and JSP est sortie!

Si vous êtes à la recherche d’une aide adéquate pour obtenir le niveau de la certification SCWCD, ce livre est parfait! Cette seconde édition couvre la spécification 5 de Java Entreprise alors que la précédente portait sur la version 1.4. Par contre pour ceux qui sont déjà certifié sur la version 4 je ne pense pas qu’il y ait un grand intérêt à la passer du fait que les ajouts ont surtout été fait au niveau du langage et moins sur les specs Servlet/JSP.

Faisant partie de la série Head First (existe aussi en français sous le nom Tête la Première - cet ouvrage n’est pas traduit), la lecture est non seulement facile, elle aide énormément à la mémorisation et à la compréhension. Les auteurs se sont en effet mis au courant des dernières avancées en recherche cognitive et on peut dire que c’est sacrément efficace!

Et si vous êtes curieux n’hésitez pas à jeter un oeil aux autres livres de la série qui abordent des sujets plus intéressant les uns que les autres!

Package java.lang

La bibliothèque Java est vaste, très vaste. Sans conteste cela lui procure une grande richesse puisque de ce fait il est possible de quasiment tout faire avec. Il devient cependant de plus en plus difficile de s’y retrouver à mesure que le langage évolue. Ces évolutions sont bien régulées par le Java Community Process mais n’empêche que les fonctionnalités sont toujours plus nombreuses!

Je vais tenter par une série de plusieurs articles de parcourir quelques-uns des packages de Java afin de montrer les différentes classes disponibles. Bien sûr ce ne sera qu’un survol mais toujours utile, que l’on découvre le langage ou que l’on ait davantage l’habitude d’utiliser Java (enfin j’espère).

Pour bien commencer, prenons les choses par le début: java.lang. Ce package est automatiquement importé lorsque l’on développe en Java. Toutes les classes présentes dans ce package sont très souvent utilisées dans les programmes et le compilateur nous facilite la vie en faisant lui-même le lien lorsqu’il en rencontre une utilisation.

Wrapper types

On retrouve ainsi la définition des types de Java (Boolean, Byte, Character… et le vénérable Object sans qui rien ne serait possible). On les nomme généralement Wrapper types pour faire ressortir que ce n’est que la correspondance des types natifs (ou primitifs) qui sont utilisés lorsque l’on fait par exemple:

int theResponse = 42;

Lorsque l’on code sur Java à partir de la version 5, une fonctionnalité existante peut faire complètement oublier ce concept: l’autoboxing. En effet, précédemment le code suivant ne compilait pas:

Integer laReponseATteVosQuestion = 42;

Threading

Tous les outils de concurrences ne se trouvent pas dans ce package. Cependant, le socle de base de la programmation multi-threading est intégré dans java.lang. On y trouve la classe de base: java.lang.Thread mais aussi par exemple java.lang.ThreadLocal qui est utilisée afin d’implémenter le pattern Thread Local Session.

On peut très bien n’utiliser que la classe Thread pour les besoins concurrents. Nous verrons cependant lorsque nous aborderons le package java.util.concurrent qu’il existe plusieurs outils supplémentaires qui facilitent la vie du développeur lorsqu’il met le pied dans le monde du multi-threading.

Accès système

Enfin, plusieurs classes de ce package permettent de faire appel au système sur lequel tourne Java.

La classe System contient uniquement des membres statiques permettant par exemple de récupérer le flux de sortie de Java (le flux utilisé pour afficher des données à l’écran, la console), le temps actuel en millisecondes ou en nanosecondes, récupérer une variable d’environnement, enregistrer une propriété système, charger une classe ou une librairie dynamiquement ou encore enregistrer un SecurityManager personnalisé.

La classe Runtime est elle davantage liée au "système" de Java. Il est ainsi possible de l’utiliser afin de récupérer la mémoire disponible dans la machine virtuelle, lancer le Garbage Collector (aussi possible depuis la classe System qui fait en fait une redirection sur la classe Runtime) et enfin avant de mentionner la dernière classe, Runtime permet d’exécuter un nouveau processus système…

La classe Process liée donc à Runtime mais aussi à ProcessBuilder représente un processus natif. Une utilisation de ce genre de classe peut bien évidemment limiter la portabilité de l’application; il faut par conséquent bien réfléchir quant à son utilisation.

Par exemple, pour une application graphique permettant d’exécuter des imports de données sur une base Oracle il existe l’outil bien connu Sql Loader qui permet de charger les donner en ligne de commande. Il sera possible d’appeler directement depuis le code Java l’exécutable d’Oracle de cette manière:

Process p = new ProcessBuilder("sqlldr", "userid=root control=control.ctl").start();

Ensuite les flux de sortie, d’entrée et d’erreur sont disponibles et doivent être récupérés afin de pouvoir communiquer avec le processus lancé.

Autour de tout cela je n’ai pas pris le temps de parler de l’ensemble d’exceptions et d’erreurs se trouvant dans le package mais comme je l’ai dit dans l’introduction, ce n’est et ne sera qu’un aperçu!