Stackoverflow en version publique

L’info cours sur la toile: l’ouverture d’une nouvelle plateforme programming Q&A complètement ouverte et gratuite.

Cette nouvelle plateforme a pour nom stackoverflow et a été initiée par (non des moindres) les auteurs des blogs Coding Horror et Joel on Software, j’ai nommé Jeff Atwood et Joel Spolsky.

Ce genre de plateforme tient son existence principalement à la communauté qui la suit. Dès lors j’espère vraiment que soutient il y aura et que le genre de “souci” que Joel décrit dans son billet disparaîtra bel et bien, autrement dit, dès qu’une question se profile… Je ne tape non plus google.com (avec ses inconvénients lors de questions précises..) mais plutôt stackoverflow.com!

L’idée est très bonne et les initiateurs sont des gars très talentueux, on peut donc se dire qu’on est entre de bonnes mains et que si espoir il devait y avoir, on est en tout cas bien parti pour que ça prenne bonne forme.

A ma première impression, je vois un design épuré, une navigation conviviale et rapide. Je vois également que les auteurs s’impliquent au niveau du contenu de la plateforme et ca c’est plutôt pas mal…

Il ne reste donc plus qu’à voir comment va réagir la communauté et si l’engouement passé, un réel groupement de développeurs va venir enrichir le contenu de ce:

synthesize aspects of Wikis, Blogs, Forums, and Digg/Reddit in a way that is somewhat original

On croise les doigts!

Netbeans et PHP

Non je n’ai toujours pas jeté un oeil au support PHP (ni python d’ailleurs) proposé par Netbeans. Et pourtant j’encourageais à le faire il y a peu….

Bref c’est pas grave, une séance de rattrapage est proposée par les éditeurs de Netbeans TV avec ce screencast:

En moins de 10 minutes, on y aborde l’intégration d’un projet PHP (wordpress) couplée à la gestion de sa base de données (MySQL) mais aussi du debugging et la traditionnelle completion syntaxique.

Ca vaut vraiment le coup de le visionner en plus accompagné par un accent indien toujours aussi sympa!

Les atouts de Flex selon Ward

Une interview très intéressante à lire si vous vous intéressez au développement Flex mais que vous ne savez pas trop quels en sont les avantages.

James Ward répond au CEO d’EffectiveUI en mentionnant par exemple deux cas d’utilisations en entreprise. Il met également en avant les résultats d’une étude en cours d’élaboration par les gaillards d’Adobe : 30% de temps de gagné en choisissant Flex! Certainement à prendre avec des pincettes. MAIS! Oui mais.. Quelques lignes plus haut, Ward explique que le temps perdu à débugger de l’AJAX, on le récupère directement sur Flex puisque le framework gère lui-même les communications client/serveur. Or… Le temps de débuggage quantifié est égal à… 30%!

Vous en avez marre de débugger de l’AJAX? Il serait peut-être temps de jeter un oeil à Flex…

Thinking in Flex!

Toujours dans l’actualité Flex, le blog Code moi un mouton nous apprend une bonne nouvelle:

Scoop: James Ward et Bruce Eckel (l’auteur de Thinking in Java) préparent un livre de 120 pages qui s’adresse à tous les développeurs qui souhaitent apprendre Flex. Ca sent le best-seller…

Pour ceux qui ont parcouru Thinking in Java (j’ai pu faire mes débuts avec cet excellent bouquin) et qui souhaite en apprendre un peu plus sur Flex, je sens que ca va être le point de départ idéal! Je me réjouis!

Et pour finir en beauté avec le monde Flash/Flex (du moins avec ce post), voici le dernier clip de Radiohead réalisé en flash et ce sans caméra(!):

Quelques explications ici et ici.

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.

http://python.org/images/python-logo.gifDé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!

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!

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!

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!

L’union fait la force

Il est toujours intéressant de parcourir du code source créé par d’autres personnes, c’est à mes yeux une excellente formation pour devenir un bon développeur. Je peux le vérifier en ce moment puisque je travaille sur la résolutions d’incidents sur une application web ayant pour base principale Struts.

J’ai été vraiment impressionné par le nombre de classes utilisées simplement pour supporter les opérations ajout, récupération,mise à jour et suppression de données (CRUD). A la décharge de l’équipe ayant créé cette application, il faut avouer que le modèle de Struts encourage à créer une classe par action.

Personnellement, je pense que la philosophie objet est respectée si l’on décide de regrouper les opérations CRUD dans une seule et même classe. Le nombre de classes va ainsi diminuer et rendre plus de clarté à l’environnement et l’objectif de chaque classe sera toujours bien défini.

De plus pour ne rien gâcher, Struts propose lui-même cette solution! La classe DispatchAction permet en effet au développeur de regrouper plusieurs actions en une-seule. Cette classe se trouvant dans la hiérarchie de la standard Action n’ est donc pas très différente de celle-ci.

En reprenant ce qu’explique la javadoc de cette nouvelle recrue, voici comment doter davantage de fonctionnalités à une action:

Le résultat devient tout de même beaucoup plus agréable! La productivité va également sûrement être favorisée du fait qu’il n’y aura plus à jongler entre plusieurs classes pour changer d’opération sur un certain objet… Et le développeur qui devra passer plus tard sur un code plus compact en sera très reconnaissant

Amazon Web Service

Les applications aujourd’hui connectées à Internet peuvent interroger des services web afin d’obtenir des données externes aux objets de l’application. Il est ainsi possible d’interroger des miliers de bases de données en ligne.

Nous avions par exemple vu l’application Delicious Library. L’appel d’un service web se fait au moment où on lance une recherche à propos d’un média. En entrant un simple mot vous obtenez une liste de livre, cd, dvd ou encore de jeux vidéos correspondant à votre recherche. L’application utilise le service web de la plateforme amazon et par cet article je vais démontrer la facilité avec laquelle il est possible d’interroger se service web en Java. C’est parti!

Lire la suite

Java et le web 2.0

Un article intéressante concernant java et les appels asynchrones est consultable sur developerwors.

Il met bien à l’index les lacunes de l’architecture Servlet de Java en ce qui concerne le buzz du moment : le web 2.0. Mais ce qu’il y a d’intéressant c’est que l’article propose des pistes sur lesquelles se diriger lorsque l’on veut créer une gestion asynchrones de requêtes. Il est parlé entre autre de du projet Apache MINA , SEDA, mais également du pattern COMET. Très bon tour d’horizon et d’idées à consulter. Un benchmark est de plus utilisé afin de prouver l’apport des appels asynchrones par rapport à la démarche synchrone traditionnelle à Java. Il propose de nombreuses ressources; à aller consulter!

Pour info l’article parle également de 2 solutions proposées par les conteneurs Tomcat et Jetty qui permettent une communication asynchrone : Apache Tomcat 6 Comet API et Jetty Continuations.

Page suivante →