samedi 28 février 2009

vendredi 27 février 2009

La video de la clavicule

Bon, j'ai récupéré mon bras droit (il fonctionne mieux qu'avant)  et la vidéo de ma chute.
On peut dire que tout finit bien et donc rire volontiers en regardant cette vidéo:






dimanche 8 février 2009

Fiat Lux


La page d'accueil



Un jeu flash qui ressemble à 'incredible Machine' : electro box (ici le lien vers le jeu)
Il faur raccorder un appareil éléctrique à un générateur en utilisant des pièces intermédiaires.

mardi 3 février 2009

Les deux pilliers du succés de Google: map et reduce

Je suis tombé sur une série d'article concernant Google. Comment google réalise l'analyse du contenu du web ?.

Il y a deux possibilités :
Avoir un gros programme qui traite toutes les données ou plusieurs petits programmes qui traitent en même temps les informations.
c'est cette dernière solution qu'utilise google et qui a fait son succès.

On utilise pour cela des principes simples :
- Les données à analyser sont copiées sur des baies de fichier partagées .
- Des milliers de petits programmes s'exécutent en parallèle sur chaque noeud (fonction 'map')
- Les résultats sont agrégés par une fonction de réduction 'reduce'

Exemple : compter des mots dans un texte

Fonction map
(noeud 1)
mot <=> cardinalité
linux 12
processeur 2
web 10
...............
(noeud 2)
mot <=> cardinalité
linux 8
processeur 0
web 3
...............
Par application de la fonction 'reduce' on obtient :
mot <=> cardinalité
linux 20 (12+8)
processeur 2 (2+0)
web 13 (10+3)
...............

L'ensemble du processus est piloté par un programme de surveillance qui relance les programmes défectueux.

Pour du traitement massif d'information, les programmes ne doivent pas hésiter à 'sauter' les lignes erronées.
Ce document ici http://labs.google.com/papers/mapreduce.html expose le processus utilisé par google

Les fonctions map et reduce peu presentes dans des langages impératifs (sauf Ruby ou Python) sont la base des langages fonctionnels.
La fonction reduce possède des synonymes comme 'fold' , 'inject' ou encore 'accumulate'.

Un programmeur élévé aux langages impératifs choisira naturellement de faire un gros programme qui réalisera les traitement en une seule passe. Par contre un pseudo développeur (comme moi) aura tendance à appliquer intutivement les principes de la programmation fonctionnelle. C'est pour cela que j'ai investi dans des livres sur le langage fonctionnel Haskell.