dimanche 28 février 2010

Comment tester du #javascript

Le javascript devient un composant incontournable dans les applications WEB. Il y avait deux freins à son utilisation:
* La faiblesse des moteurs d'exécution du code : performance et normalisation
* La mise au point et les tests.

Sur le premier points les choses ont changées. La puissance des moteurs javascript a été multiplié par 100 , on arrive aussi à une standardisation du javascript.

Concernant les tests ,la plupart des librairies proposent des solutions intégrées. On peut citer QUnit livré avec jquery ou encore scriptaculous.
Il existe une librairie screw indépendante de toutes ces implémentation. Elle utilise la syntaxe des tests basés sur le comportement comme RSPEC. Il est possible de tester le bon comportement d'une fonction mais aussi la chaine d'appel de la fonction comme si l'utilisateur avait réalisé une action.

samedi 27 février 2010

Comment #twitter peut gagner de l'argent ? votre avis.

Twitter fort de ses 50 millions de tweet/jour 10 millions d'utilisateurs (chiffre à réactualiser) commence à vouloir développer une activité lucrative. L'infrastructure twitter est des plus simple : c'est juste un gros serveur de messagerie et une base de données de type clé-valeur (hashtag) . La société twitter propose déjà des services d'amplification de notoriété aux entreprises. Elle souhaite dans un futur proche vendre des espaces publicitaires sur son moteur de recherche et peut etre faire comme google, mettre aux enchères des mots-clés (ici hashtag). Mais on voit bien que le système a des limites. Que peut faire twitter pour gagner de l'argent ?:
* Diffuser des tweets publicitaires: très vite des filtres pare-pub se mettront en place dans les clients dédiés.
* Vendre des informations sur les utilisateurs: c'est une piste sérieuse, qui sera confirmée si twitter affine les profils utilisateurs (age, sexe, profession )
* Proposer une version entreprise de son produit: C'est pour moi, une voie royale car son infrastructure est à la fois simple et terriblement efficace. On pourrait imaginer une version sur étagère (autonome) ou une version cloud 'SAAS' pour une entreprise.

Dans le fond l'usage initial de twitter est limité: informer de son activité par un message de 140 caractères ses 'suiveurs'. C'est plus le 'tuyau' et sa gestion qui fait la force de twitter.
Un tweet pourrait encapsuler les alertes ou les remontées des équipements de supervision ou bien encore remplacer l'appel à des web services. France Télécom aime à dire :nous sommes assis sur une mine de cuivre en faisant référence à son reseau. Twitter, lui est pour l'instant sagement installé dans son nid.

Londres : le plus grand panneau de signalisation du monde



Nokia a installé le panneau indicateur le plas grand du monde à l'occasion du lancement de son nouveau service de geolocalisation.

Cette installation éphémère a été placée au coeur de Londres. Les passants pouvaient grâce à leur telephone interagir avec le panneau



La video

The World's Biggest Signpost from adghost on Vimeo.



source : bit rebels

lundi 22 février 2010

Plaquettes (cheatsheet) #haskell , #uml #jquery et #ruby


J'adore les plaquettes plastifiées présentant toutes les options possibles, on peut s'en servir comme aide-mémoire, soutasse. Autant de connaissance dans un si petit volume, c'est magique.
Un site ici http://www.cheat-sheets.org/ qui centralise ces aide-memoires.

dimanche 21 février 2010

Suite de Fibonacci : quelle est la meilleure illustration ?

Wikipedia:















Ou celle de digg ?

outil de blog en #ruby pour les #geeks : #jeckill


Jeckill est un outil pour générer des pages d'un blog ou d'un simple site WEB. L'idée principale est d'utiliser un bon vieux vi ou emacs pour écrire ses articles puis de lancer en ligne de commande 'Jeckill' pour qu'il habille les textes dans des pages statiques. Jeckill ira mettre automatiquement à jour votre site. Il est possible d'utiliser Github (forge à base de git: définition wikipédia ) comme hébergeur.
L'auteur du projet est Tom Preston-Werner (aka mojombo)

Un autre framework #ruby : #padrino-framework

Padrino est un framework qui comble le vide entre Sinatra qui est un microframework et Rails qui est la solution complète de framework.
(ici le site Padrino)
Padrino s'appuie sur une architecture Sinatra (post ici:http://germanlinux.blogspot.com/2010/01/interface-sinatra-en-ruby-pour-twitter.html) . Ce qui est réalisé conventionnellement avec Rails (route,controleur) est ici à prevoir par le développeur.
Les points forts de Padrino :
* Il est multi-application : il est facile de 'monter' une application dans une arborescence. Un gros projet est découpé en sou- ensembles, qui seront agrégés dans Padrino.
* Il fournit des générateurs pour des taches d'administrations simples, incluant l'authentification des utilisateurs.

Pour suivre Padrino sur twitter.

samedi 20 février 2010

Répartition de charge #apache , #nginx et #tomcat

On dispose de plusieurs solutions pour répartir le trafic HTTP sur plusieurs serveurs WEB.


  • Par DNS
C'est la solution la plus simple, la moins onéreuse mais aussi la moins efficace.
En faisant correspondre plusieurs adresses IP à une entrée DNS, une répartition de type round-robin (tourniquet) sera réalisée par le serveur DNS. Mais cette répartition ne tient pas compte des stratégies de cache des DNS intermédiaires et du cache client. De plus la gestion des pannes d'un des serveurs n'est pas prévue.
  • Par un frontal Apache.
Il est courant de placer devant plusieurs serveur WEB un Apache fonctionnant en reverse proxy. Cette architecture peut avoir plusieurs objectifs : répartir la charge entre les serveurs applicatifs et servir de frontal à des serveur des servlets hébergés par TOMCAT.



Le module d'apache mod_proxy_balancer est actuellement le système le plus abouti pour réaliser cette tache.
Il propose une répartition allant du simple round-robin jusqu'à des algorithmes basés sur la charge réelle, la pondération des serveurs et des tables d'association.
Il permet aussi l'affinité des sessions: je commence sur un serveur et je reste collé sur ce serveur durant toute ma session (mode sticky sessions)

Un page d'administration est proposée par ce module:



Site de référence ici.


  • Par un frontal NGiNX.

Le serveur NGiNX se positionne comme une alternative à Apache. Ce serveur est très compact, il fait appel à un code C très optimisé. Il est le 3eme serveur web utilisé dans le monde:

Apache 664,576 66.89% 665,593 66.98% 0.09
Microsoft 175,278 17.64% 172,983 17.41% -0.23
nginx 40,084 4.03% 42,105 4.24% 0.20


Il est original par sa conception même : il basé sur un traitement asynchrone des requêtes, une requête n'étant pas traitée par un process mais par plusieurs en parallèle.

Il propose des modules tiers permettant de mettre en place du load-balancing.

Des modules messageries (imap,pop, SMTP) le transforme en proxy mail très efficace.

  • Par un répartiteur de charge opensource HAproxy



Ce projet est porté par le francais Willy Tarreau.
Cette solution est utilisée par des Banques et des administrations.

  • Par un répartiteur de charge commercial.

Des boitiers dédiés de type ALTEON placés en frontaux vous offrent differentes stratégies de répartitions: round-robin, par table associative (hash) , par poids des serveurs, par charges etc. avec toujours l'option d'affinité pour les sessions.

  • Conclusion.
Il existe d'autres solutions comme par exemple 'pound' qui est une système minimaliste écrit en 'C' mais qui date un peu.
Il y a aussi des fonctions de répartition prévues par mod_jk



Il est là aussi possible de définir l'option d'affinité des sessions. Toutefois, il est préférable d'utiliser mod_proxy_balancer qui est plus récent que mod_jk.

D'une manière générale l'affinité des sessions se gère par un cookie placé par le serveur applicatif web et propre à chaque serveur. Ce cookie est intercepté par le frontal qui s'en sert pour savoir à quel serveur envoyer la requête.

jeudi 18 février 2010

Mixer #haskell #Erlang #Java dans #Ruby

Il est possible de s'amuser à faire interagir un programme Ruby avec d'autres langages.

Avec Haskell.
Le projet Hubris se veut un pont entre ruby et Haskell. Il s'utilise en mode inline ou sous forme d'appel de module.

require 'hubris' # best line ever

class Target
hubris :inline =>"triple::Int->Int; triple n = 3*n"
end

t = Target.new
puts t.triple(10)
=> 30
Un article sur http://www.engineyard.com/blog/2010/a-hint-of-hubris/ détaille son utilisation.

Avec Erlang.

Le projet erlectricity permet de communiquer avec un process Erlang.
Le projet présente un exemple d'un simple programme de type 'echo'


require 'rubygems'
require 'erlectricity'

receive do |f|
f.when([:echo, String]) do |text|
f.send!([:result, "You said: #{text}"])
f.receive_loop
end


end

Avec du C.
(tiré de rmag numero 5)
Il faut se munir des fichiers sources Ruby . Et construire un répertoire sous la forme:

rmag/
rmag.c # source code extconf.rb # ruby file to create makefile
example.rb # a simple script to show our ext
LICENSE # license
README # some info

Le rmag.c devra commencer par la ligne magique:

#include “ruby.h”

Le fichier responsable de la création du makefile contiendra:

require 'mkmf'
ext_name = 'Rmag'
create_makefile(ext_name)


Avec Java.

Il faut utiliser la machine virtuelle Jruby et inclure le module

# This is the 'magical Java require line'.
require 'java'

A partir de là il est possible d'écrire des lignes en java.

frame = javax.swing.JFrame.new("Window") # Creating a Java JFrame
label = javax.swing.JLabel.new("Hello")


exemples à prendre sur le wiki de jruby.

lundi 15 février 2010

Robot en légo pour resoudre un rubik's cube

Des Légo (mindstorm) + une camera + des lignes de codes + Rubik'scube = CubeStormer

bref,un jeu d'enfants !

samedi 13 février 2010

Les applications de gestion grignotent le secteur du décisionnel



(jasper ireport)

L'informatique décisionnelle a toujours été considérée comme un monde à part, avec ses éditeurs institutionnels (COGNOS/ SAS / BO / Microsoft)qui se partagent un filon hight-tech. Le décisionnel était le secteur informatique qui transformerait le plomb en or, aussi bien du point de vue des éditeurs que des clients. Ces dernières années, la frontière entre application de gestion et application décisionnelle est devenu floue. Le besoin de restitutions des applications de gestion a été comblé par l'utilisation des outils de restitutions livrés avec les suites décisionnelles. Ces suites étant fermées, c'est par terra de terra que des données ont été transférées ou même dupliquées vers des entrepôts de données uniquement pour des besoins de restitutions. Le mouvement est en train de s'inverser pour des raisons économiques : le décisionnel coute cher et stratégiques: d'autres secteurs empiètent sur ces terres.


Lorsqu'une application de gestion a besoin de restitutions nombreuses ou complexes, elle se heurte à l'organisation de ses données orientée gestion et non pas restitution. Il y a plusieurs solutions de contournement:
Sans duplication des données
* Faire cohabiter un deuxième modèle de données dans la même base. Ce deuxième modèle hébergera des tables en étoiles ou en flocon. Cette architecture est lourde et impacte directement les données de gestion.
* Faire héberger le modèle en étoile sur un deuxième serveur en utilisant des dblink (supportés par oracle et PostgreSQL )

Avec duplication des données.
* Utiliser des tables dénormalisées CAD qui ne respectent pas les trois formes normales , elles sont appelées aussi : tables dégénérées , dénaturées. Elles permettent de s'affranchir des jointures et introduisent de la redondance pour accélérer les restitutions.
* Utiliser des base de données clé/valeur au lieu d'un SGBDR. Le modèle en étoile est remplacé par un table unique entièrement indexée :solution basée sur couchdb , mongodb


Ces systèmes seront complétés par des outils de restitutions comme jaspereport , openflashchart et maintenant google chart.

(google)


(jasper ireport)



Il existe une nouvelle solution à tester : la base de données virtuelle. C'est ce que propose le projet TEIID de jboss.



Il permet d'offrir une vue différente et virtuelle de votre modèle de base de données.

En conclusion: les éditeurs de l'informatique décisionnelle ont mangé leur pain blanc. Leurs concurrents sont : SAP , leader de la gestion RH qui se lance dans une stratégie d'encerclement : réseaux sociaux, administration et BI. Mais aussi Google , qui maitrise tous les maillons de la chaine: stockage , moteur ,restitutions.
Pris en tenaille, les utilisateurs ont tout intérêt à se tourner vers des solutions opensource comme penthao , spagoBI ou jasper.

jeudi 11 février 2010

Connaissez vous la stratégie RSP pour gerer ses taches ?


RPS est le sigle du jeu Rock - Scissors - Paper (caillou, ciseaux, papier) sur l'illusatration la version 'avancée' avec spock et lézard en plus.
Dans notre cas de figure cela va être : Caillou, gravier et sable.

Si vous avez un bocal pouvant contenir exactement: 3 cailloux, quelques graviers et une poignée de sable. Il ne sera possible de faire rentrer ces trois composants que dans l'ordre suivant: du plus gros au plus petit : cailloux - gravier - sable.
Tout ceci est transposable à des tâches à réaliser dans une journée. Le procrastinateur que je suis aura tendance à commencer à l'envers : par le sable. En fin de journée des cailloux ne rentreront pas. Et ces taches lourdes seront reportées au lendemain.

Face à cette situation il a deux stratégies:
* Utiliser des techniques de gestion de tache : GTD, POMODORO , Seinfeld Calendar (des posts détaillerons ces méthodes)
* Casser les cailloux pour les transformer en gravier , puis le gravier en sable.

mardi 9 février 2010

Comment choisir son Single Sign On (SSO)

On distingue généralement deux types de SSO: les SSO coopératifs et les SSO préemptif
Les SSO coopératifs sont des serveurs d'authentification qui délivrent des tickets directement à des utilisateurs ou indirectement à des proxy (mandataires) . Ces tickets sont à présenter aux applications qui les valideront auprès du serveur d'authentification.
Après validation l'utilisateur est connecté directement à l'application.

Les SSO préemptifs sont des pare-feux applicatifs , qui se placent devant les applications à protéger. Les flux utilisateurs doivent être dirigés vers ces équipements par le biais d'une résolution DNS ou par routage. Tous les flux (pages HTML, CSS, images) passent par ce dispositif. Les flux utilisateurs sont arrêtés , analysés puis le SSO activera ses fonctionnalités de Reverse proxy pour solliciter les applications à la place des utilisateurs.

Avantages serveur SSO coopératifs :
* Simples à mettre en ouvre
* Point de contrainte ou de contention faible
* Fonctionnent en natif sur plusieurs domaines
* Evolution vers la fédération d'identité
* Peu intrusifs vis à vis des applications
* Standardisés

Inconvénients
* Pas de gestion centralisé du time-out
* Pas de filtrage des flux applicatifs
* Pas de propagation d'habilitation

Avantages serveur SSO préemptifs :
* Centralisation pour filtrage des flux
* gestion centrale du time-out
* Propagation des habilitations
* Sécurisation des flux
* Mandataire

Inconvénients
* Complexe à mettre en place
* Fragilise l'architecture: SPOF
* Impact sur les performances
* Pas de gestion multi-domaine simple
* Impact sur la construction d'une application
* Non standard


Alors quel SSO choisir ?

La réponse est fonction du type d'architecture applicatives: SOA ou ROA (orientée ressource : REST) , de besoins de connexion depuis l'extérieur.
Il reste une solution : le lemonldap-CAS qui fait à la fois serveur CAS et Rupture de Flux permettant ainsi de mixer les applications.





Synthèse : clic pour élargir

lundi 1 février 2010

En quoi ce jour (le premier fevrier 2010) est spécial

Grace à twitter j'ai appris que ce jour est spécial.En effet nous sommes aujourd'hui le 01/02/2010 soit le 01022010 (sans les séparateurs).
A l'envers cela donne 01022010 soit le 01/02/2010. Cette date est un palindrome.

Certains y verront comme un signe néfaste:


D'autre comme y verront un encouragement: