mercredi 12 décembre 2012

La librairie D3.js pour la visualisation des données: nouvelle réference

Jusqu’à présent Jasper-report régnait en force sur les solutions de visualisation de données dans le monde du décisionnel opensource.

 Une restitution Jasper-report  est construite sur le serveur puis elle est envoyée au client.
Or, la visualisation est avant tout une affaire de client. C'est bien l'utilisateur via son navigateur qui  doit pouvoir   manipuler et enrichir les  données. Aussi logiquement, le javascript prend toute son importance comme acteur majeur dans la chaîne  des restitutions.

Plusieurs bibliothèques sont présentes sur ce domaine. Mais dans lot une librairie se dégage : d3.js

Comme jquery dans le domaine de la navigation  d3.js prend le chemin de devenir le composant de référence.

(illustration tirée d'une présentation de d3.js lien ici)


Il est à la base du projet ndvd3.js .



Ou encore rickshaw


D'autres liens ici.




samedi 8 décembre 2012

La carte Hadoop pour ne pas se perdre dans le bigdata

J'ai assisté à une réunion du HUG_France : Hadoop user group.  Un des conférenciers était Ted Dunning de la société MapR.

Pour clarifier les chose , j'ai fait cette carte d'Hadoop représentant les principaux composants.






L'état de l'art à ce jour:
Il est possible de stocker des gros volume de données structures ou non sur un système de fichier distribué.  Il est possible de réaliser des opérations BATCH distribuées de sélection et de réduction sur ces données.
L'enjeu actuel est la recherche et le la restitution en temps réel dans ces gros volumes (Big Data).
Un contournement peut etre fait par des exports de données d'Hadoop vers des modes de stockage et de restitutions plus rapides: exemple  mongodb.







mardi 4 décembre 2012

Quand la démocratie s'inspire du logiciel libre

Légifrance a ouvert un espace de partage sur la forge github :https://github.com/legifrance




Cette diffusion trouve une suite dans l'article 'faire la loi ensemble' d  

Pour résumer:  des communautés se réunissent autours des logiciels libres, elles orientent les développements: elles travaillent ensembles pour le meilleur:    peut on appliquer ce dispositif  à un système politique ?



lundi 3 décembre 2012

Javascript: l'invité d'honneur de la conférence javaone 2012

La grande messe java organisée par oracle  s'est déroulée au mois d'octobre 2012  à San Francisco. Cette année l'invité d'honneur de la javaone était le javascript...

Nashorn.


Le rhinocéros est mort !  Oracle ne supportera plus le projet rhino qui permettait d'exécuter du javascript sur une JVM java.



Vive le rhinocéros teuton: Oracle a porté sur les fonts baptismaux le projet Nashorn (rhinocéros en allemand) . Ce projet reprend les grande lignes de Rhino. (sauf peut être les termes de la licence)



C'était aussi le nom d'un véhicule anti-char allemand de la 2eme gerre mondiale.

Quelle est la cible ? .
 Oracle a fait la part belle à HTML5  et javascript pendant sa kermesse.



Les conférences consacrées à Nashorn ont mis en vedette une librairie : node.jar (pas en opensource à ce jour)
Cette librairie permet de faire tourner un programme javascript destiné à Node.js sur une JVM.

JSON


Le JSON aura à présent une place d'honneur dans le langage Java.
Rappel : JSON = (JavaScript Object Notation)



D'autres éléments de la galaxie Java ont été évoqués :


  • Le langage SCALA.
  • La machine virtuelle JRuby pour le langage Ruby.


Concernant l'orientation Elastic Cloud de java, il faudra attendre la version 1.8 de l'an prochain.



Moi, j'étais déjà passé à Java 2 en 1998  (non pardon en java 1.2  ;-)) )
Cette ouvrage ne parlait du web qu'au travers des applets... , je dois bien être le plus vieux programmeur Java du quartier.




Ne parlons plus de javascript mais de Ecmascript c'est plus sur !


Les liens ici 
http://www.developpez.com/actu/48326/JavaOne-2012-Oracle-presente-la-specification-JSR-353-l-API-Java-pour-la-manipulation-avec-souplesse-du-format-JSON/

http://pragprog.com/magazines/2012-11/the-javaone-snooze

http://www.developpez.com/actu/48218/JavaOne-2012-Oracle-sort-la-Preview-de-NetBeans-7-3-et-devoile-Easel-une-extension-pour-la-creation-des-clients-RESTful-JavaScript/



dimanche 25 novembre 2012

Utilisation de la librairie async.js pour Node.js

Dans un environnement synchrone classique, les fonctions s’enchaînent les une a la suite des autres de manière linéaire.

Avec Node.js doté d'un système d'entrée-sortie  non bloquant et asynchrone, les choses ne se déroulent pas toujours dans l'ordre souhaité.

Soit par exemple 3 fichiers: un petit , un moyen et un gros fichier.

Le programme ci-dessous en coffeescript va lire les 3 fichiers:

Le résultat d'exécution sera:

>coffee async1.coffee 
traitement termine
 Je termine de lire le petit fichier
 Je termine de lire le moyen fichier
 Je termine de lire le gros fichier


Deux remarques:
Le display de la dernière ligne s'affiche en premier . 
Les fonctions se terminent dans un ordre différent de leur appel: celle relative au fichier le plus petit , appelée en dernier se termine la première.

Tout cela est normal dans une logique asynchrone: Toutes ces appels de fonctions sont réalisés dans le même cycle d'exécution du moteur Node.js. Node.js n'attend pas la fin de l’exécution de la fonction pour passer à la suivante.

Pour enchaîner l’exécution des fonctions dans un ordre précis il faudrait re-ecrire le programme comme ceci:
Avec cette fois le résultat suivant:


> coffee async2.coffee
traitement termine
 Je termine de lire le gros fichier
 Je termine de lire le moyen fichier
 Je termine de lire le petit fichier

Chaque fonction appelle la fonction suivant dans sa dernière instruction. On se retrouve alors à devoir gérer des callbacks imbriqués dans des fonctions. Le programme perd en lisibilité.

Il existe une librairie très populaire dans la sphère de Node.js : async.js. qui prend en charge ce type de problème.
Ce module disponible par la commande  npm install async. permet de gérer plus facilement l'ordre d’exécution des fonctions.

Dans cet exemple, on utilise deux formes d'appel : le mode en série et parallèle.
Dans le  mode en série (serial),  async.js va attendre la fin de chaque fonction pour lancer la suivante.

remarque1 : async.js appelle vos fonctions en ajoutant une fonction de retour en paramètre  ce parametre ne sert qu'a un usage interne à async.js
(midf = (callback)-> fs.readFile 'middle_file', (err,data) => ...)

remarque2: la méthode toString appliquée à une fonction permet de lister le source de la fonction
 (console.log callback.toString() ...)
   
Think asynchrone ...



samedi 24 novembre 2012

Qu'est ce qu'un websocket

Les websockets sont un nouveau mode d'échange  d'information entre un client (navigateur) et un serveur, défini par la RFC 6455.

Source http://fernetjs.com/wp-content/uploads/2012/11/cables21.jpg

Le dialogue ente le client et le serveur commence par un échange HTTP ou HTTPS puis se continu en mode WS ou WSS (Web Socket et Web Socket Secure).


source:http://warmcat.com/websocket-lifecycle.png

Ce mode d'échange est Bidirectionnel : Le serveur peut pousser des informations au client (ce que ne permet pas directement le HTTP) . C'est le protocole d'avenir des applications web ou non web.

http://websocket-sample.googlecode.com/svn/trunk/images/ws_vs_http.png

Pour tester les websockets: avec Node.js , rien de bien compliqué:
npm install socket.io  
D'autant que les websockets sont adaptées à un fonctionnement de gestion d’évènement asynchrone non bloquant (Comme Node.js) 

Pour Ruby et Rails il existe un gem fournissant un serveur de websocket : em-websocket
En résumé: plus de souplesse , plus rapide moins verbeux, les  websockets sont les invités privilégiés  des smatphones ou des tablettes pour des applications interactives.

vendredi 23 novembre 2012

Comment enregistrer son terminal avec la commande script

Pour réaliser des screencasts , j'utilise Kazam  , mais il y plus simple: la commande script

La page de manuel de la commande script
La syntaxe de lancement est la suivante: 
script -t session1 2>session1.time


Et pour rejouer la session :
scriptreplay session1.time session1


Ce dispositif est plus léger qu'une vidéo et consomme moins de ressource.


Marcin Kulik a eu une idée géniale : proposer un système de partage pour ces enregistrements en mode console: c'est l'objet du site ascii.io

Pour simplifier cette tache , le site propose de telecharger une nouvelle  commande asciiio
(installation de la commande :curl -sL get.ascii.io | bash)

Cette commande se charge de tout: enregistrement et publication sur le site de partage.

(mon essai en bas à droite)
Pour réaliser son site l'auteur a utilisé du python, du bash , du ruby et nodes.
Mes screencasts sont ici sur slideshare.

good hacking