Affichage des articles dont le libellé est javascript. Afficher tous les articles
Affichage des articles dont le libellé est javascript. Afficher tous les articles

samedi 22 décembre 2018

Quand la loi d'ATWOOD se vérifie une nouvelle fois: Javascript

La loi d'Atwood se formule de la manière suivante: toute application qui peut être écrite en JavaScript, sera finalement écrite en JavaScript
ici un lien vers un article précédent sur le sujet.

Cette loi est a nouveau vérifiée aujourd'hui et d'une façon forte.

En effet , Martin Fowler a sorti la deuxième edition de son livre incontournable :

Refactoring

Improving the Design of Existing Code

Dans la première édition ,les exemples de ce livre étaient en Java.

The book is written using Java as its principle language, but the ideas are applicable to any OO language.

Dans la nouvelle édition; les exemples sont en ..Javascript.



Now, Fowler has thoroughly updated his book to reflect modern programming techniques.


Tous les développeurs se doivent d'avoir ce livre en bonne place sur leur bureau.

refectoring, testing, refactoring, testing, GOTO début.

“Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” 
—M. Fowler (1999)



samedi 9 avril 2016

La loi de Jeff ATWOOD sur le #javascript se vérifie tous les jours

Jeff Atwood est une légende du développement, co-fondateur du site stackoverflow
Il rédige régulièrement des billets sur son blog : coding horror.


Dans un de ses articles il énonce sa loi :  toute application qui peut être écrite en JavaScript, sera finalement écrite en JavaScript. Ou formulée autrement : tout programme quelque soit son langage d'écriture finira par être porté en javascript.

C'est un corollaire au principe du langage 'faible' de Tim Berners-Lee. Dans cette publication , le créateur du WEB énonce la règle du langage faible : Il recommander ne pas utiliser un langage puissant pour diffuser de l'information.
Un langage qui encapsule et protège les données ferme la porte à la réutilisation des algorithmes et des données.

La loi d'ATWOOD dresse le constat que le javascript est devenue le langage universel du WEB. Un navigateur et du javascript peuvent remplacer n'importe quelle application. Il est même possible de se passer de serveur ou d'internet. article :JavaScript:The Lingua Franca of the Web

Et c'est vrai qu'il est plaisant pour un ancien comme moi de retrouver dans son navigateur les jeux qui ont jalonnés mes débuts: exemple prince de perse dans son navigateur ou encore l'éternel DOOM.




Cette loi a encore été vérifiée lors du hackathon « codeimpot » où un projet a fait tourner la calculette impots dans un navigateur par  une traduction en javascript du langage M.
Tous les projets ont utilisés AngularJS pour l'affichage.


Il est même possible grace au javascript de transformer son navigateur en serveur web.
Ce  module    installe un serveur web nodeJS dans votre navigateur qui peut a son tour répondre à des requêtes HTTP.


En conclusion : autant écrire les applications directement en javascript afin d'éviter d'avoir à les traduire plus tard.

mardi 22 décembre 2015

Petit exercice pour bien comprendre la programmation en javascript


Connaitre la syntaxe du javascript est une chose mais en saisir les subtilités (asynchrone, callback, programmation fonctionnelle)  en est une autre.


L'exercice suivant est synthèse de ce qu'il faut comprendre de la programmation asynchrone.

Prenons l'exemple d'une boucle 'for'


for (var a = 0 ;a < 5 ; a++)
 { console.log("valeur de a sync:" , a); }

L'affichage donnera

valeur de a sync: 0
valeur de a sync: 1
valeur de a sync: 2
valeur de a sync: 3
valeur de a sync: 4

Pas de surprise , ici toutes instructions sont synchrones

Si on introduit la notion d'asynchronisme par le biais d'une temporisation:
(avec une délais de 100 ms et 1 ms)

for (var a = 0 ;a < 5 ; a++)
 { setTimeout(function(){ console.log("valeur de a async 100:" , a);}, 100); }

for (var a = 0 ;a < 5 ; a++) { setTimeout(function()
 { console.log("valeur de a async 1:" , a);}, 1); }

Le résultat sera cette fois plus étonnant:
(extrait)
valeur de a async 1: 5
valeur de a async 1: 5
valeur de a async 1: 5
valeur de a async 1: 5
valeur de a async 1: 5
valeur de a async 100: 5
valeur de a async 100: 5
valeur de a async 100: 5
valeur de a async 100: 5
valeur de a async 100: 5

Deux phénomènes:  un normal (a) et un moins intuitif (b).
a) Les lignes relative à la temporisation la plus faible se présentent en premieres alors qu'elles sont les dernières invoquées.
C'est le principe de l'asynchronisme: Le système n'attend pas le retour de l'instruction (appel de fonction)  pour passer à la suivante.

b) La valeur du compteur est bloqué à 5. 
Dans la cause se niche toute la subtilité d'un système asynchrone: l'appel de la fonction  embarquée dans le timer se fera avec le contexte du moment de l'exécution. A la sortie de la boucle 'for' la valeur de 'a' est 5 et donc les 5 appels de fonction déclenchées par le timer se feront avec un même contexte 'a=5'  

Comment obtenir une sortie conforme à nos  attentes : en utilisant les closures (fermetures).
Une closure permet de conserver le contexte au moment de l'appel de la fonction.

exemple ici :

for (var a = 0 ;a < 5 ; a++)  { 
  setTimeout(function(){ 
    var i = a;
    console.log("valeur de a async 100  avec param :" , i);}, 100);    
}

La variable 'a' est bien déclaré au niveau du 'FOR' et appelée dans le corps d'une fonction imbriquée dans la boucle. Mais le résultat n'est pas probant:

valeur de a async 100  avec param : 5
valeur de a async 100  avec param : 5
valeur de a async 100  avec param : 5
valeur de a async 100  avec param : 5
valeur de a async 100  avec param : 5

Pourquoi ? :  Pour 2 raisons :

a) Les 5 closures partagent le même contexte donc il 'est normal d'avoir 5 fois la même valeur.
b) La fonction est littéralement appelée après la boucle 'for' : il est trop tard, le contexte a été perdu.

La solution: appeler la closure dans le 'for' et avec les 5 contextes 
Pour cela le programme est modifié comme ceci:

for (var a = 0 ;a < 5 ; a++)
 { setTimeout(function(a){ 
   console.log("j appelle le constructeur de fonction avec",a);
   return function () { 
                       var i = a;
                        console.log("valeur de a async 1000 avec closure :" , i);}
    }(a), 1000);
 }
En plus de la closure, on ajout un constructeur de fonction.
Dans le 'for' , on passe en paremètre au timer , non pas une fonction à executer mais une fonction qui retourne une fonction à exécuter. C'est le point fort de ce type de langage de considérer les fonctions comme des données (entier, chaine etc) .

Pour que le contexte soit conservé en l'état pour les 5 itération, la fonction de construction est appelée immédiatement par l'utilisation des  doubles parenthèses et d'un paramètre  à la fin de sa définition " }(a), 1000);".

Le résultat est maintenant correct 

j appelle le constructeur de fonction avec 0
j appelle le constructeur de fonction avec 1
j appelle le constructeur de fonction avec 2
j appelle le constructeur de fonction avec 3
j appelle le constructeur de fonction avec 4
valeur de a async 1000  avec closure : 0
valeur de a async 1000  avec closure : 1
valeur de a async 1000  avec closure : 2
valeur de a async 1000  avec closure : 3

valeur de a async 1000  avec closure : 4

Ce mécanisme est couramment utilisé par jquery, c'est la base d'une programmation correcte en javascript.

Pour aller plus loin :  La magie des closures.

vendredi 20 juin 2014

Les vues avec angularjs

Dans cette video et dans les slides , une présentation de la gestion des vues dans angularjs.
C'est la technique de base pour réaliser des SPA (application d'une seule page)


Pour cela , il faut récupérer l'extension  angular-route sur le site d'angularJS.

Le code est simple:

Une video est associée à la présentation (disponible ici)


Le serveur web est porté par Sinatra:


Quelques lectures:



samedi 14 juin 2014

Suite et fin de la vidéo de présentation d'angularJS

Je termine ma présentation d'AngularJS par une application minimaliste.


Au passage je fais une petite démonstration de l'IDE  Brackets.

Pour bien commencer : 2 livres gratuits consacrés à AngularJS


Les slides de support de la video sont :




La video est sur youtube: lien ici



lundi 9 juin 2014

Une introduction à angularJS et aux Single Page Application

J'étais parti pour faire une video sur AngularJS mais j'ai éprouvé la nécessité de remettre cette technologie dans un cadre plus général de développement des applications.

J'expose le système courant du templating coté serveur et coté client.
Templates coté client 

Avec ici la synthèse:


Mais le plus important est de replacer le phénomene des SPA: Single Page Application dans le contexte. REST , MVVM (angularJS ) , SPA et NoSQL sont autant des pièces d'un même puzzle.

Pourquoi des applications de ce type:

  • Pour des raisons Economiques: les coûts sont partagés , elles sont scalables, elles sont simples.
  • Pour la simplicité des solutions misent en oeuvre.

 Au premier abord toutes ces notions semblent très compliquées, mais en commençant doucement par des exemples simples, tout devient possible.

En conclusion: ce n'est pas un simple mouvement de mode. Ces évolutions touchent la manière de faire des applications, de conduire des projets.

Le support des slides de la video est ici:lien



Sur youtube : la video est diffusée a cette adresse.

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.




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/



samedi 10 novembre 2012

Un système d'exploitation en javascript

Sur le site https://blog.netbsd.org/tnf/entry/kernel_drivers_compiled_to_javascript l'auteur explique comment il utilise javascript pour emuler un microkernel NetBSD.
En clair: comment disposer dans son navigateur EN LOCAL d'un véritable système d'exploitation.

La démo est ici:http://ftp.netbsd.org/pub/NetBSD/misc/pooka/rump.js/

L'écran se présente comme ceci:



La commande help donne le résultat suivant:


 Ici , nous sommes en présence non pas d'un webos (Système d'exploitation DISTANT sur le web) mais bien d'un OS_in_web : un OS (operatic system) dans le navigateur.

Pour quels usages ? : Un bureau hybride : je récupère mon bureau distant ,(webos) je me déconnecte  et je peux continuer  à travailler sans réseau , à la prochaine connexion je synchronise le tout.


vendredi 20 juillet 2012

Express pour Node.je et Sinatra

Express est un framework MVC pour Node.js.  C'est donc du javascript (ou du coffeescript).



Express revendique clairement sa filiation avec Sinatra pour Ruby.




Et c'est vrai que l'analogie est frappante :


Coté Sinatra :




Au delà de cette simple comparaison, Sinatra et Express appartiennent bien à la même famille des DSL dans le domaine d'application de la couche WEB.

1) Le domaine d'application de Sinatra.


Sinatra permet offre un langage de manipulation de la couche web middleware.  Ruby possède une couche middleware très puissante appelée Rack.


Rack permet de faire le lien entre une requête HTTP  entrante (url, méthode et parametre) et des objets Ruby. Il est possible d'agencer à sa guise la pile de traitement d'une requete WEB.

Sinatra offre un langage permettant de travailler directement avec ces couches.

2) Le domaine d'application d'Express


Express tout comme Sinatra permet de manipuler facilement le middleware pour Node.js appelé 'connect.js'.


Express ne fournit pas directement un DSL comme dans Sinatra. Il permet en revanche de réaliser très facilement pour Node.js des applications WEB en mode MVC.

3) Les deux modes d'utilisation de Sinatra.


Sinatra fonctionne sous deux modes:

Le mode 'classique' 

L'application tient dans un fichier et elle est écrite avec le DSL.


Le mode modulaire.


L'application peut être répartie dans plusieurs fichiers.  Il est possible d'avoir plusieurs applications pour un seul interpréteur Ruby actif. En revanche on ne pourra pas faire appel directement au DSL, il faudra passer par des méthodes.

Aucun mode n'est meilleur que l'autre. C'est vraiment deux usages différents. Dans les deux cas, le développeur pourra intervenir sur l'agencement de la couche middleware.
Dans les deux modes, il est possible et recommandé d'isoler les vues dans des sous-répertoires.


4) Les deux mode d'utilisation d'Express


Express lui aussi propose deux usages.

Le mode simple


Comme pour Sinatra, l'application tient dans un fichier et liste les actions à mener pour chaque url.



Ici un exemple en coffeescript.

Le mode MVC


Un appel à la commande express 'mon_appli' génère une arborescente qui ressemble  à celle  d'une grosse application Sinatra.


Par défaut Expres utilise le système de template 'jade' mais il est possible de choisir son moteur des template. Pour ma part , j'utilise 'ejs' qui se rapproche beaucoup de 'erb' pour ruby.

Dans les deux modes, le développeur garde la possibilité de modifier la couche middleware.



En conclusion: Sinatra est a réserver pour les petite applications, après il vaut mieux passer à Rails.

Express, lui prend en charge tout l'aspect serveur WEB (cache , session )  qui n'existe pas en l'état dans Nodes.js  Express sert souvent de base pour d'autres frameworks.
je prépare une série de vidéos sur le thème d'express, rendez vous sur twitter.





 

lundi 14 mai 2012

Les frameworks de test #javascript

Petite infographie sur les outils de test en javascript

Le projet 'mocha' est actuellement celui qui offre le plus de fonctionnalité

Liens
mocha http://visionmedia.github.com/mocha/
jasmine  http://pivotal.github.com/jasmine/
expresso http://visionmedia.github.com/expresso/

Le projet  js-test-driver ne figure pas sur le schéma car il n'est pas nativement en javascript.

mercredi 25 avril 2012

Lire un fichier ligne à ligne en #javascript - #coffeescript

Lire un fichier texte ligne à ligne n'est forcement quelque chose de naturel avec javascript  (coffeescript):
Ci dessous un exemple complet:

La lecture se fait de manière asynchrone par l'ouverture d'un stream en lecture. L'avantage de se mode de fonctionnement est qu'il permet de traiter des gros fichiers, seul un tronçon de fichier transite en mémoire.

La traduction en javascript donne:

jeudi 5 avril 2012

Les tendances #javascript : librairies , #mvc et #livres

Sur ce pdf : lien ici.......... titré : The modern developer story, l'auteur Björn Ekengren, dresse un état des lieux du javascript et de son écosystème.

J'ai extrait 3 diapos :

Sur les performances de javascript.





Sur la popularité des librairies clientes : vainqueur par KO jQuery





Sur les frameworks MVP:

Backbone.js  se détache par rapport à ember.js (sproutcore)



Sur les ouvrages:

 on retrouve la liste des classiques javascript , mon conseil personnel sera l'achat de ce livre:
Async JavaScript  de Trevor Burnham


Good hacking.

dimanche 19 février 2012

3 conseils de survie pour la programmation asynchrone


Basculer vers le coté obscur de la programmation asynchrone avec node.js  n'est pas sans danger.
Voici trois conseils de jeidi ou de ninja.

Conseil 1: Asynchrone tu penseras
 En asynchrone l'enchaînement des opérations n'est pas linéaire. Pour dérouler les opérations A,B,C dans cet ordre vous aurez le choix entre 2 techniques:
1) L'imbrication des callback .
La dernière instruction de la fonction A appellera la fonction B , la fonction B à son tour appellera C dans sa dernière instruction.

Cette méthode a deux limites. 
a) Il faut s'assurer que la fonction A utilise des composants synchrones afin d'éviter que la fonction B démarre avant la réponse de la fonction A.
b) L'imbrication des fonctions au delà de 3 niveaux rend le code difficile à lire.

2) la gestion des enchaînements par événement.
La fonction B démarrera à la réception d'un événement déclenché par la fonction A.
Cette  approche est peut être moins performante mais permet de rendre le code plus lisible en évitant l'imbrication des fonctions.

Conseil 2: Synchrone  tu anticiperas
Une fonction asynchrone bien écrite se comportera toujours de manière asynchrone. Ce n'est pas forcement le cas de toutes les librairies.  Une fonction asynchrone peut  réagir comme une fonction synchrone dans certaines circonstances comme par exemple :
Utilisation d'un cache
Erreur de connexion
Prenons l'exemple d'une requete sur une base de données: normalement il est sensé s'ecouler un certain nombre de cycle avant d'obtenir la réponse. Ces cycle correspondant à une tour de la boucle de traitement est appelé 'tick'. Si la fonction de requete à mis en cache la réponse, elle pourra réponde dans le même cycle comme une fonction synchrone. Aussi , il est recommandé de placer au plus tôt et au plus près   les 'listeners' . Dans le même ordre d'idée, on évitera les appels chainés de méthode.  On peut se trouver dans le cas  d'appels de méthode sur des objets non encore instanciés.
exemple :
var client = net.connect(8124, function() {
    console
.log('client connected');
    client
.write('world!\r\n');
});
(code tiré de :Understanding process.nextTick()  )
Ici la l'objet client utilisé dans le callback peut ne pas etre crée si la connexion est  immédiate (meme tick).
 Une API  asynchrone bien écrite peut éviter un comportement synchrone en utilisant la fonction nextTick().  Cette fonction déporte l'exécution d'une fonction au prochain cycle.
Exemple dans socket.js :


    // Handle errors from any source (HTTP client, stream, etc)
    var errorListener = function(e) {
        process.nextTick(function() {
            self.emit('wserror', e);

Le développeur reporte l'émission du signal d'erreur au cycvle suivant afin de laisser au programme appelant le temps d'installer les listeners.

ici d'autres exemples pour jouer avec l'instruction nextTick. Il est à noter que  l'instruction setTimeout avec une durée de 0 a le même effet.


Conseil 3: comprendre le fonctionnement de variables.
En javascript  c'est  au moment ou la variable est sollicitée que le contenu est fixé. Au déclenchement  d'un callback , il utilisera la valeur actuelle des variables. C'est pour ca qu'on trouve souvent des installation de callback sur le schéma suivant: appel immédiat à une fonction avec une variable  , cette fonction installera le callback avec la variable passée en paramètre

for(var i = 0; i < 5; i++) {
 (function(i) {
  setTimeout(function() {console.log('st2:'+i)}, 0);
 })(i);
}
Resulting in 0, 1, 2, 3, 4.

samedi 14 janvier 2012

Du code bien expliqué avec docco.coffee #javascript

Pour expliquer le contenu d'un programme, il n'y rien de mieux que les annotations en marge du listing.  Cette opération est maintenant automatique avec l'utilitaire docco.coffee. Il fonctionne  avec node.js, il utilise la librairie python 'pygments'.


Il fonctionne très simplement:  docco *js ou docco *coffee ,  va créer un répertoire 'docs' qui contiendra une page HTML.

Tout ca donne vraiment envie d'écrire de la doc.




vendredi 13 janvier 2012

Comment PHP a sauvé le #web de #Free mobile





A l'annonce des offre Free , des centaines de milliers d'internaute se sont rués sur le site web de mobile.free.
Celui-ci s'est très vite trouvé saturé et en rupture de charge. Les petits curieux qui analysent les pages web et qui s'intéressent aux architectures web  avaient remarqué que les pages étaient délivrées par un framework JAVA/J2E  (présence des cookies avec des sessions typiques) . Lorsque le site a été de nouveau opérationnel, les cookies par magie relevaient du architecture PHP.
Un des moyens mis en oeuvre par les équipes Free pour augmenter les capacités d'accueil du site (scalabilité) à donc été de remplacer des parties entières de JAVA/J2E par du PHP.

Relevé sur les forums:


Cependant, nous avons pu remarquer encore quelques dysfonctionnement dans le processus d’inscription, et pour cause… Le site a semble t’il été entièrement réécrit dans la nuit !
Ce tour de force rendu semble t’il indispensable par l’incapacité à relever l’ancienne plateforme tournant sous Java, et qui désormais est en PHP.


 ----------------------------------------------------------------------------------------------------------
 (fin de citation)

Une application PHP sera nativement plus performante qu'une application JAVA/J2E pour les raisons suivantes:


  • Le serveur applicatif Apache (langage C) qui sert les pages PHP est plus fiable et puissant que n'importe quel Tomcat. La 'scalabilité' est plus facile à réaliser avec Apache/PHP qu'avec JAVA/J2E. Il est recommandé de placer un apache devant un ou plusieurs  tomcat pour cela (voir aussi le sujet des ressources non java:js,css) .
  • Une architecture PHP like est plus simple et coute moins cher.
  • Une application PHP utilise aussi la programmation objet mais sans ses dérives : des soit-disant experts on convaincu les crédules : la programmation objet doit forcement se traduire en plusieurs couches.  (voir des articles sur la notion de  principes SOLID)
  •  Les développeurs sont meilleurs en PHP

Avant les programmeurs PHP étaient considérés comme des amateurs. Maintenant la tendance s'inverse: Les meilleurs programmeurs se trouvent dans les communautés PHP, Ruby , Python , javascript et les C like.
 Peut importe le langage , l'essenciel est l'algorithmie.
Les entreprises pragmatiques preferent  utilser l'algorithmie  plutot que des dollars pour augmener les performances de leur site.
 Les plus gros sites WEB (facebook, twitter ) ont bien compris cette démarche.

Alors si au détour d'une réunion vous entendez quelqu'un qui explique doctement "que les applications JAVA/J2E sont plus robustes et plus scalables que les autres." , ne cherchez pas à argumenter, vous risquez de l'instruire.

Au commencement était le verbe ...  mais à la fin il y a toujours un developpeur qui se tape le boulot et qui sait ce qui est bon.


Pour le reste, Le grand architecte divin reconnaitra les siens.













dimanche 1 janvier 2012

Qui a peur de #node.js , #javascript ?

Le projet node.js est un recent et provoque pas mal de bruit sur le Net.
Le sommet de la polémique a été atteint par cet article: node.js est il un cancer  ?.
La discussion a continué sur reddit.com  avec des échanges vifs. Pourquoi un tel déchaînement de passion.

Pour rappel : qu'est ce que node.js.

Node.js est l'habillage du moteur d'exécution du javascript utilisé par Chrome. Ce moteur s'appelle V8. Il est en C et en javascript. Chrome s'en sert pour exécuter le javascript coté client. Ryan Dahl et ses amis lui ont  ajouté quelques librairies afin d'obtenir un produit autonome node.js. C'est une machine virtuelle comme la JVM sur laquelle vient s’exécuter du javascript. Un des créateurs du V8 était aussi concepteur de la JVM.
Les principes de node.js sont simples :

  • La  gestion dans  boucle sans fin des évènements
  • Une facilité de mise en oeuvre  de  programmation asynchrone
  • Un seul processus , pas de multi-thread 





Est il dangereux d'installer node.js sur un serveur. 
La réponse est NON.

Le coeur de node.js , le moteur V8 est déjà présent coté client. Les failles de sécurités sont rapidement corrigées.
Par comparaison il est plus risqué d'installer sur un serveur les services suivants :
- Un serveur apache
- Un serveur Tomcat (les failles des JVM sont les plus dangereuses)
- Un webmin , un serveur telnet ou FTP

Alors pour pourquoi tant de réticence ? 

En premier lieu, le langage javascript. Tous les admin UNIX (moi le premier) ont au cours de leur carrière utilisé ou côtoyé du javascript pourri, récupéré par copier/coller sur un site de bidouilleur.
Les vrais développeurs javascript sont rares. Ce langage est souvent utilisé comme quelque chose de deuxième zone. Ce phénomène s'inverse et le javascript est maintenant à l'honneur.
L’hégémonie de la partie client.  
Le MVC serveur était jusqu’à présent le composant principal d'une application. Il était rentable d'investir dans l'ingénierie de ces composants. Hélas, les smartphones , les tablettes, le cout du SI  et tout simplement le bon sens sont venues perturber ce bel équilibre. Le MVC passe de l'autre coté.
L'effort du  développement porte sur le coté client. C'est tout simplement  cette partie qui offre le plus de rentabilité (ROI).  Non seulement le javascript est le seul langage universel coté navigateur (client) mais en plus maintenant il cherche à envahir les serveurs. On pourrait avoir un seul langage de bout en bout (serveur _ client).

La puissance que procure node.js

Il est possible en dix lignes de javascript d’écrire un programme qui embarque les couches réseaux d'un serveur web, la gestion de la délivrance du contenu et la configuration du serveur. Node.js reproduit même le système des 'pipes' des commandes unix : on va lire un fichier et brancher sa sortie sur le flux de réponse du client. Tout ceci est possible parce node.js transgresse un 'dogme'  UNIX : l'organisation en couche. Ryan Dahl veut faire de l'informatique simple et bon marché. Idem pour  la programmation objet qui  a été détournée de son objectif. Faire de l'objet revient à faire des couches. Et comme dans la vie courante , chacun essaye de refiler sa m.... à une autre couche. Voila pourquoi des choses comme node.js , jquery ,javascript , coffeescript et Rails font peur: ils sont simples, puissants  et ne coûtent pas cher. Les apparatchiks sont inquiets.. pour leur mur de berlin


















 








samedi 31 décembre 2011

comparaison frameworks #javascript : infographie

Sur ce site une infographie qui compare la popularité des différents framework javascript. Résultat : jQuery vainqueur par KO.

Free Web Resources
Javascript Frameworks and jQuery Infographic is brought to you by WebAppers.com

vendredi 23 décembre 2011

5 tendances pour 2012 #nodejs #html5 #javascript


La fin d'année arrive avec son lot de prédiction, de tendance pour l'année 2012.
Je vais faire ici ma liste des 5 tendances qui vont  dominer ou non l'année qui arrive.
Par honnêteté je réaliserai l'an prochain à la même époque un bilan.

Tendance 1: De plus en plus de chose font se faire en javascript coté client. HTML5 annonce une mutation sur la manière de faire des applications. jQuery, Backbone , batman  seront les valeurs montantes. Les raisons de ce phénomène ?:
a) La fragmentation des postes clients (pc, tablettes, smartphone)
b) les couts de traitement coté serveur vous sont facturés cash (cloud computing, serveur , salle machine)

Tendance 2: amaigrissement des frameworks : c'est le corollaire du point 1. Les serveurs ne sont que des distributeurs  de données , en JSON si possible,  avec une simplification à l’extrême. Une application métier  sera l’agrégation de mini-services hétérogènes.

Tendance 3: Les entreprises vont continuer à investir dans les réseaux sociaux (Facebook pour ne pas le citer). Après les pages de groupe ou de fan, l'étape suivante est la création par les entreprises d'applications intégrées à Facebook. La force de Facebook n'est pas son contenu mais son architecture. C'est  une architecture ouverte qui permet à chacun de développer des applications qui viennent s'intégrer à Facebook (exemple ici avec Rails) .

Tendance 4: Virage de Twitter, l'usage que je préfère est le partage de lien. Il permet de savoir que telle ou telle personne   est en cours de lecture d'un document. Delicious remplissait ce role mais depuis peu , il se tourne vers la curation de contenu, dommage. L'autre usage de twitter est la recherche d'information en continu. 2012 sera une année charnière pour twitter qui doit dégager une logique économique ou etre mangé par un gros (Facebook , microsoft ou google)

Tendance 5: Les bases de données NoSQL. Les volumes de données explosent et les entreprises ne savent plus les analyser (moins de 10 % de données sont exploitées) . Les bases NOSQL ne vont pas résoudre ce problème mais ne font que le repousser.


Les conséquences de tout ca:

Croissance de javascript et HTML5 dans les systèmes d'information. Javascript va prendre pied sur le coté serveur avec la révolution de node.js. Node.js permet à un développeur moyen de programmer des services asynchrones repoussant très loin les limites: en temps de crise , l’intelligence remplace l'argent. Dans le monde JEE scalabilité est synonyme d'achat de serveur, c'est la fin d'une époque.

Seuls les framework qui  anticiperont ce mouvement vont tirer leur épingle du jeu: parmi ceux ci :Rails.

Posez vous cette question: c'est le framework qui est à votre service ou vous qui êtes à son service.


samedi 19 novembre 2011

Conférence sur coffeescript

Dans cette vidéo,  David Kinney de Redpoint Technologies présente les avantages de coffeescript.
J'ai réalisé le montage suivant à partir de sa présentation :
Dave met en parallèle la grosse bible : guide définitif de javascript et le petit fascicule sur les bons morceaux de javascript. C'est vrai qe javascript PLUS que tous les autres langages est une arme dangereuse à ne pas mettre en toutes les mains.


La preuve cette petite expérience:
Sur une console lancer  le calcul : '10' + '4'  puis '10' -'4'
Le résultat est là:


node
console.log('10' + '4')
104
console.log('10' - '4')
6



Surprenant !


Aussi coffeescript permet d'éviter la plupart des pièges de javascript tout en générant du javascript propre.

En plus il fournit des opérateurs qui simplifie la vie comme par exemple le '?'

Sa présentation se termine par l'intégration dans  rails 3.1 de coffeescript

La video :

CoffeeScript: A New Brew by David Kinney, Redpoint Technologies from ChicagoRuby on Vimeo.