lundi 30 novembre 2009

jeudi 26 novembre 2009

f.... les programmeurs: tous des impolis

Les programmeurs en Perl sont les plus grossiers de tous : la preuve ce graphisme trouvé sur reddit.com

En réalisant une recherche sur le mot 'fuck' croisée avec le type de langage de programmation on arrive à cette dure réalité. Je comprends pour Perl , encore plus pour Haskell. Les programmeurs Ruby et Erlang sont eux polis.


mercredi 25 novembre 2009

Les objets et les classes en Ruby

Le langage Ruby offre des possibilités de méta-programmation importantes.
Il exploite au mieux la souplesse que lui confère son caractéristique de langage interprété. Ce concept est poussé dans se que l'on appelle le 'duck typing' : le typage canard. A l'inverse de Java qui propose un typage dynamique, Ruby met en avant le typage dynamique. Ce n'est pas votre typage qui dicte votre comportement mais l'inverse. si marche comme un canard et si tu nage comme un canard , alors tu peux etre comme considéré un canard. Le duck typing va plus loin que ca, car il permet de modifier des comportements en cours d'exécution.

Commençons par la mise en place des objets en Ruby.
Si je pars des déclarations suivantes:

class Ma_class
def ma_methode
@x1= 1
end
end

Par irb -r maclasse.rb

Je teste :

objet1= Ma_class.new
=> #

objet1.ma_methode
=> 1
objet1.instance_variables
["@x1"]
p objet1
<Ma_class:0xb7c8483c @x1=1>

ainsi un objet est une référence vers une classe et un tableau associatif de variables. Tant qu'une variable n'est pas initialisée ou utilisée , l'objet n'en fait pas mention.

On peut continuer à explorer le contenu des objets et des classes par les méthodes :
class , superclass ou instance_methods(false)
Ici le 'false' indique de ne lister que les methodes propres à une classe (non héritées) . La méthode included_modules liste les modules utilisés.


Cela donne :

Ma_class.superclass
=> Object

> Ma_class.class

=> Class

> Ma_class.instance_variables

=> []

Class.superclass

=> Module

Module.class

=> Class

> Module.superclass

=> Object

Ma_class.instance_methods(false)

=> ["ma_methode"]

Object.class
=> Class



En remontant toute la chaine on obtient le schéma suivant:(clic pour élargir)




Il n'y a pas de grande difference en ruby entre une classe et un module. Tous les deux sont implémentés de la même façon. Par contre il n'est pas possible d'instancier un module. Les modules sont utilisés pour gérer des espaces de nommage et surtout pour réaliser du 'mixing' cad : Ajouter d'autres comportements (classes) à des classes. Exemple : dans une classe l'ajout de 'include enumerable' lui fournit une vingtaine de méthodes supplémentaires.

La méthode ancestors donne:

Ma_class.ancestors

#=> [Ma_class, Object, Kernel]

Que vient faire Ici Kernel ? . En fait ruby ajoute une pseudo classe équivalente au module kernel. Pour trouver une méthodes, ruby parcours le chemin 'rigth and up' (A droite et en haut) , les modules sont mappés sur des pseudos classes afin de se trouver sur le chemin de recherche des méthodes.

En ruby 1.9 le système est légèrement modifié par l'introduction d'une classe
'BasicObject' au sommet de la pile.

Il reste à résoudre le mystère suivant: Où sont stockés les méthodes singletons ?
La réponse srea donné sur un post consacré aux Eigenclasses en ruby.

Pour voir le post dans son contexte :http://germanlinux.blogspot.com/2009/11/les-objets-et-le-classes-en-ruby.html

mardi 24 novembre 2009

A quoi sert Facebook, le web 2.0 dans une entreprise ?



(clic pour agrandir)


Parmi les outils ou les services mis en avant par le web 2.0 quels sont ceux susceptibles de servir au sein d'une entreprise ?

Commençons par la couche réseau avec Internet.

Internet.

Dans beaucoup d'administration ou d'entreprise l'accès du personnel sur Internet est vu comme une activité chronophage et donc doit être réduite au minimum. Pour cela, la plupart des organisations utilisent des proxy combinés avec des listes blanches ou noires de sites WEB.
Il n'est pas rare de rencontrer des responsables décrétant: Internet ne sert à rien à mes collaborateurs ou à moi !.

De nos jour avec la banalisation du wifi ou des smartphones (y compris en mode routeur), la surveillance des accès va devenir obsolète. Et plutôt que de chercher à empêcher les gens d'aller folâtrer (butiner) , peut être faudrait-il les 'manager'. Pensez vous que les gars de google, ont le nez en l'air à buller ? Et pourtant c'est ce qu'ils font: 20 % du temps de travail doit être consacré à des activités ou des recherches personnelles. IBM applique les mêmes principes: les employés de cette firme sont encouragés à s'occuper pendant leur temps de travail du site web de leur association des Pécheurs à la mouche du Loiret ou de tout autre chose comme l'animation de forum. Pour arriver à ce résultat, il faut que le personnel ai des objectifs mesurables, basés sur des indicateurs de réalisation. Souvent le terme 'manager' est synonyme de: je fixe des grandes lignes et l'équipe se débrouille pour que le paquebot arrive à bon port (§ le Titanic) . Bon , je m'éloigne du sujet....

Conclusion : Internet pour tous et pareil pour tous. (Il existait au XIX et au XX siècle du mobilier distinct en fonction de son grade dans l'administration, heu ... encore au XXIeme) .


Facebook.

Facebook ne peut pas servir à grand chose pour une entreprise. Je suis chaque fois surpris par le temps que peuvent perdre les gens sur les jeux ou les tests proposés par Facebook. J'ai envi de leur dire d'utiliser des vrais jeux à la place des trucs bricolés à la va-vite en flash.

Et c'est peut être cela qui fait la force de Facebook : s'en servir comme un 'hub' (une ossature) pour brancher des applications métiers (une doc existe, ici, décrivant le développement d'une application en Ruby on Rails pour facebook) .

Ainsi Facebook serait le portail de branchement des applications métiers. Avec en plus la possibilité de 'marquer' (comme on marque un ami sur une photo) un document pour attirer l'attention d'un collègue sur le sujet. En temps réel, on serait averti qu'un collaborateur à marqué un document à votre attention.

Les réseaux sociaux professionnels (comme linked In, viadeo) .

Ce type de produit rentre plus dans un usage de gestion de son parcours professionnel.

Les blogs et les wikis

Le wiki est indispensable dans le processus de réalisation de documentation et d'appropriation (captation) de l'information. Des centaines d'informations transitent devant nous, ou à travers nous et il faut pouvoir les fixer pour les utiliser. Le wiki doit être de type tout ou rien : Pas de gestion de groupe avec des droits différenciés, pas de pages cachées ou protégées que du basique, ou alors se tourner vers un CMS.

Agenda partagé et webmail.

L'agenda partagé idéal, permet d'agréger plusieurs agendas, d'être accessible depuis tous les réseaux (smartphone) et d'envoyer des mails ou des SMS de rappel; Je reçois par exemple tous les matins un mail ou un SMS de l'agenda google avec mes rendez vous de la journée.

Messagerie instantanée.

Je l'ai testée à mon bureau mais sans vraiment de résultat concluant. Seule celle de gmail , parce qu'elle est inclue dans le navigateur est peut être efficace. Je reste circonspect sur l'utilité et pour un usage professionnel.

Travail collaboratif.

J'ai testé Etherpad et Google-wave. Pour ce dernier, la pénurie de compte est un frein à un usage plus large, mais le principe est extrêmement prometteur. Etherpad permet bien avant Google-wave de tester en réel ce type de travail collaboratif. C'est la préfiguration du travail de demain.

Twitter.
Twitter est le 'chainon' de tous les autres composants. Plus que l'usage que l'on peut en faire (indiquer ce que l'on fait' ) , c'est la technologie proposée qui est intéressante. Qui peut revendiquer de véhiculer plusieurs millions de messages à la minute ?. Le branchement sur le canal d'information est très simple à réaliser. Des nouveaux métiers vont émerger. S'il ne fallait retenir qu'une seule technologie, ce serait celle-ci.


Les Flux RSS.


La question ne se pose même pas. Tous les Intranets devraient proposer des abonnements à des flux (internes ou externes). Le portail métier serait un mélange de Facebook et de Netvibes.


Mon bureau de demain :


Celui d'aujourd'hui(vue de dessus).
dscn1457

Vue de dessous (ps: casimir n'est là que pour brancher sa machine)
dscn1455


Voir le message dans son contexte :http://germanlinux.blogspot.com/2009/11/quoi-sert-facebook-le-web-20-dans-une.html

Le temps béni , où on pouvait draguer des filles avec un simple PC sous le bras

Ces photos son issues des classeurs Flickr de Steve. Ce site possède des photos de pub très vintages.


Retro Computing

Vintage Computing

Retro Computing


Bill Gates for Tandy 2000


pour le message dans son contexte d'origine:http://germanlinux.blogspot.com/2009/11/le-temps-beni-ou-on-pouvait-draguer-des.html

lundi 23 novembre 2009

Rosy ma nouvelle copine sur google wave

Je commence tout juste à comprendre le fonctionnement de Google wave.Voici quelques essais :
Twitter.
J'arrive à synchroniser une wave avec twitter , par l'ajout du contact tweety-wave@appspot.com dans mon carnet d'adresse. Par contre je n'ai pas réussi à configurer Bloggy.


Gadgets.
J'ai ajouté un jeu d'echec par un clic de la pièce de puzzle dans la barre de composant, qui ouvre une boite de dialogue pour renseigner une URL (ici : http://gerculanum.appspot.com/gadgets/com.example.chessgadget.client.ChessGadget.gadget.xml . )

Le jeu d'échec :Clic pour agrandir


Traduction simultanée.

Mais le plus fort reste l'ajout du contact Rosy : aunt-rosie@appspot.com dans une wave.
Après avoir choisi le langage (ici anglais), rosy traduit en temps réel vos phrases.

Ici : Clic pour agrandir





Attention , il ne faut pas confondre Rosy avec Roxy , il y du surf , de la vague mais la ressemblance s'arrête là.

mercredi 18 novembre 2009

Crible d' Eratosthène en Erlang (nombres premiers)



Sur le wiki du langage GO de Google, se trouvait un exemple de proggramme qui utilisait le crible d' Eratosthène pour générer la liste des nombres premiers.

Cet exemple utilisait un chainage de filtre, le nombre à tester est injecté dans le premier filtre de la chaine. Chaque filtre teste le reste de la division de ce nombre par un nombre premier déjà trouvé. En cas d'échec, le filtre envoie le nombre à tester au filtre suivant ainsi de suite jusqu'au dernier filtre.

A la fin de ce dernier filtre, et en cas d'échec, le nombre est qualifié de premier et devient le filtre suivant en étant ajouté en bout de chaine.

La réalisation en GO commence par la création d'une fonction générateur.
Sous cette forme:

09 // Send the sequence 2, 3, 4, ... to channel 'ch'.
10 func generate(ch chan int) {
11 for i := 2; ; i++ {
12 ch <- i // Send 'i' to channel 'ch'. 13 } 14 }


Et ici une version plus élaborée:

10 func generate() chan int {
11 ch := make(chan int);
12 go func(){
13 for i := 2; ; i++ {
14 ch <- i 15 } 16 }(); 17 return ch; 18 }

En Erlang , le programme occupe plus de ligne. Il est de bonnes pratiques de scinder les programmes en composants de supervision et composants de traitement. J'ai aussi réalisé deux versions de la même fonction.
  • generator_async/3 : Cette fonction envoie en flot continu la série de nombre.
  • generator_sync/3 : Cette version n'envoie un nombre que sur demande du superviseur

Le superviseur lance le processus 'generateur' et va communiquer avec lui par un canal , comme en GO. En Erlang ou en Haskell ,les boucles for,while n'existent pas vraiment elles sont remplacées par des appels récursifs.


Le module principal superviseur:

-module (crible).
-export ([main/0,main2/0]).
loop2(Pid) ->
receive
ok -> ok;
Number -> io:format(" ~w~n",[Number]),
Pid ! next,
loop2(Pid)
end.
loop() ->
receive
ok -> ok;
Number -> io:format(" ~w~n",[Number]),
loop()

end.




main()->
_Pid =spawn(prime,generator_async,[self(),0,60000]),
loop(),
ok.
main2()->
Pid =spawn(prime,generator_sync,[self(),0,60000]),
Pid ! next ,
loop2(Pid).


Le module qui génère la suite des nombres:


-module (prime).
-export ([generator_async/3,generator_sync/3]).

generator_async(Canal,Compteur,Maximum) when Compteur == Maximum -> Canal ! ok;
generator_async(Canal,Compteur,Maximum) ->
Cpt= Compteur +1,
Canal ! Cpt,
generator_async(Canal,Cpt,Maximum).

generator_sync(Canal,Compteur,Compteur) -> Canal ! ok;
generator_sync(Canal,Compteur,Maximum) ->
Cpt= Compteur +1,
receive
next -> Canal ! Cpt ,
generator_sync(Canal,Compteur+1,Maximum)
end




J'ai utilisé ici une 'garde' dans la déclaration de fonction


generator_async(Canal,Compteur,Maximum) when Compteur == Maximum -> Canal ! ok;


C'est une condition de reconnaissance de la fonction.

Cette variante fait la même chose :

generator_sync(Canal,Compteur,Compteur) -> Canal ! ok;


Ici la variable Compteur est branchée avec le deuxième parametre d'appel de la fonction. Puis une autrre affectation de la variable Compteur est tentée avec le 3eme parametre. Si les deux valeurs sont égales le motif sera reconnu, sinon on passe à la forme d'appel suivante.

Ce système est basé sur le fait qu'il n'est pas possible de modifier le contenu d'une variable dans les langages fonctionnels.
ex : A=1 puis A=3 ou A=A+1

Pour debugger le programme en Erlang , il faut le compiler avec l'option :
erlc +debug_info

Puis lancer le shell Erlang (erl )

Sur le prompt lancer le debugger graphique par

debugger:start().


Choisir par le menu module, la liste des programmes à debugger.
Grace à ce système, il est possible de voir le contenu de messages ou l'état des variables.

Copie d'écran du debugger Erlang


Conclusion : La fonction qui utilise des echanges synchrones entre le superviseur et le composant générateur est 3 fois plus rapide que l'asynchrone.

Il est possible d'utiliser une seule ligne pour générer des séries de nombre par le système des listes "comprehensions". Ces listes injectent des données un peu à la manière de notre générateur.
Cela donnerait un ligne comme ca:

[ListePremier || Nombre <- Lists:seq(2,99999), is_prime_number(Nombre)].

Pour voir le post dans son contexte original http://germanlinux.blogspot.com/2009/11/crible-d-eratosthene-en-erlang-nombres.html

Dix ans , 7 minutes

Les dix dernières années résumées en 7 minutes: c'est sur Newsweek:


Le site est souvent saturé.

Sinon cette photo est elle aussi un bon raccourci:


Adresse du blog pour voir le message dans son contexte :http://germanlinux.blogspot.com/2009/11/dix-ans-7-minutes.html

mardi 17 novembre 2009

La memoire des pages WEB

Il existe une machine à remonter le temps|web. Le site waybackmachine archive les différentes versions d'un site.

Le site de yahoo en 1997 était comme ceci :



Puis comme cela en 2004 :



Celui d IBM france de 1999 , Nous sensibilisait sur le passage à L'euro.




William Leymergie etait encore jeune en 1998 (enfin presque)




Et quelle belle infographie en 2003



Je me demande ce qu'a pu devenir cette start-up

Un moteur de recherche de séquences de films


A force d'écrire des choses horribles ...les choses horribles finissent par arriver. En terminale, Mr Ferrara , notre professeur de mathématiques , crucifiait nos démonstrations par cette réplique, extraite du film 'Drole de Drame' de Marcel Carné, inscrite dans la marge. Avec le recul , je crois qu'il avait tort , ce n'étaient pas des choses horribles, c'etait tout bonnement de la science fiction. Quel plaisir de revoir des extraits de ce film culte de 1937 avec michel Simon. Tout cela est possible grace au site: Vodkaster qui permet de visionner des milliers d'extraits de films, d'envoyer ces propres extraits et de creer des listes de diffusion.
C'est un véritable moteur de recherche du cinéma.

Autres répliques cultes :

  • MATRIX
Il y a une différence entre connaître le chemin, et arpenter le chemin. (en) There's a difference between knowing the path and walking the path.
  • Dangereuse sous tous rapports:
Je préfère être un chien vivant qu'un lion mort
(Un chien vivant vaut mieux qu’un lion mort.Jérémie 31,31-34 - Hébreux 5,7-9 - Jean 12,20-33)
  • Bienvenue à Gattaca
"Je n'ai jamais économiser mes forces pour le retour"

vendredi 13 novembre 2009

Go: Un nouveau langage par Google

Google communique sur son nouveau langage maison : GO.
Avant même le lancement du projet, le sujet a déclenché une polémique sur web en raison de son appellation déjà utilisée par une autre équipe:
Voir le fil de discussion ici:



Go est un langage compilé comme le C ou le C++. Il est aussi orienté traitement concurrent (dans le sens de parallélisation des traitements) comme Erlang. Ainsi les processus dialoguent entre eux par des 'Channels' ex:
chan1 <- "exemple"

Ici la chaine "exemple" est envoyée à un autre processus branché en entrée du canal "chan1"

On utilise le mot réservé 'go' pour lancer un processus , avec souvent comme paramètre le canal à brancher en entrée et en sortie :
ex:
go ma_fonction(ch_in, ch_out,un_paramètre)
Ici ma_fonction pourra lire des données à partir de ch_in et écrire des données en sortie sur ch_out

i := <-ch_in; // Receive value of new variable 'i' from 'ch_in'. ch_out <- i // Send 'i'

Les nostalgiques du Pascal retrouveront le signe ':=' qui ici permet la déclaration et le chargement d'une variable: c'est l'initialisation.

Le blog du langage go (golang) propose une illustration des processus concurrents basée sur la recherche des nombres premiers par le Crible d'Ératosthène


C'est un excellent exercice à faire en Erlgan, sur lequel je vais passer plusieurs soirées.




Le langage est fortement typé, avec des types basiques permettant de construire des structures.
Il est possible de manipuler des types originaux comme les 'channel' (type chan) et les slices : tranches de tableau. A noter qu'il n'existe que les boucles 'for' , pas de 'while' ou de 'do'.

Je suis un peu déçu de l'ensemble. Maintenant que je connais mieux les langages fonctionnels, je persiste à croire qu'il faut éviter de partager des ressources si on désire vraiment paralléliser les processus. Pour cela comme dans les langages fonctionnel il ne faut pas d'effet de bord.
Le caractère immuable des variable en Haskell ou en Erlang est très déconcertant mais c'est solution la plus simple.

Pour terminer, je suis très étonné de google sorte un nouveau langage alors que le gourou du Python est son employé. Et que dire de cette remarque relevée sur le site de Google: depuis 10 ans aucun langage ne s'est distingué.. Merci Guido.“No major systems language has emerged in over a decade, but over that time the computing landscape has changed tremendously. "

dimanche 8 novembre 2009

Dimanche 08/11 :golf

L'hiver arrive : greens d'hiver , pas de chariot et départs sur tapis:


J'ai essayé les nouveaux bois de Seb , ici le bois 5.


Photo002

Photo016


Pour Seb : bois 5 direct sur le green:


Par deux fois :




Ce n'est pas sur le golf de la poudrerie que l'on trouvera le trou le plus extraordinaire du monde. Il faut pour cela aller en afrique du sud pour avoir le 19ème trou… de l’extrême !







Pour voir le message dans son contexte: blog eric german germanlinux.

vendredi 6 novembre 2009

1961: le premier ordinateur qui chante

On sait enfin pourquoi l'ordinateur HAL 9000 du film 2001 Odyssée de l'espace de stanley Kubrik chantait la chanson 'Daisy' :




La réponse est sur donnée par cette autre video de 1961 (la date indiquée sur la vidéo est fausse) qui illustre la première chanson programmée sur un ordinateur.




A.C Clarke avait rendu une visite au laboratoires BELL, où il avait assisté à cette démo sur un IBM 704

Plein de lien vers de la doc Java et Ruby on Rails

Etes vous :

JAVA ?
















OU BIEN
Ruby ?























Si vous été plutôt java le site objij est pour vous : plus de 100 tutoriels JAVA à votre disposition.

Si vous été Ruby on Rails ce site fera votre bonheur: il référence des liens vers de la documentation.


Moi j'ai choisi.

Projet SQUALE : mesurer la qualité du code


Toutes les entités qui développent du code sont confrontées à deux enjeux:

a) Planifier et respecter les délais de mise en œuvre des projets informatiques. Ce n'est pas rien , moins de 30% des projets arrivent à terme en respectant les 3 'C' : Contenu , calendrier, coût. Et plus de 25 % des projets sont purement et simplement abandonnés.

B) Développer du code de qualité. Les mentalités ont évoluées, et maintenant il est admis par tous qu'un code de bonne qualité est un des facteurs de réussite d'un projet.

Il existe des méthodes pour mesurer la qualité d'un code, encore faut il un tableau de bord permettant d'agréger les résultats. C'est le but du projet opensource 'SQUALE' (Software QUALity Enhanceme) .
Le portail squale permet de mesurer 6 facteurs :
  • capacité fonctionnelle
  • architecture
  • évolutivité
  • maintenabilité
  • réutilisabilité
  • fiabilité



Avec un niveau de détail très fin :






Le projet squale utilise trois composants: Une base de données pour stocker les informations collectées. Un serveur web pour le portail et enfin une série d'utilitaires (squalix)
pour mesures la qualité du code.








































Le projet propose des modèles définissant la notion de qualité du code ((ISO-9126,GQM, McCall) Mais il est possible d'enrichir le produit avec des modules tiers . Squale supporte nativement le JAVA mais peut traiter aussi les langages COBOL , C, PHP, .NET.
Squale est avant tout une plateforme d'intégration où viennent se brancher les modules tiers à partir du moment où ils respectent le modèle de données du produit.

Enfin squale met à disposition des fonctions d'audit de code avec notamment la possibilité de suivre dans le temps l'évolution des résultats d'audit.

En conclusion : pourvu qu'il ne fouille pas dans mon code..

mercredi 4 novembre 2009

Une devinette


Petite devinette au sujet de l'image ci-contre:
Cette image est :
  • Un dessin réalisé par ma fille en CM2
  • Le logo d'un nouveau jeux sur WII
  • Le boss du niveau 65 de DOOM II (hyper difficile à tuer)
  • Le logo de l'association pour la dépénalisation de la culture des champignons de Paris sur balcon.
  • Le logo de la version 6 du langage post-moderne Perl

Indice: la solution est dissimulée dans les ailes.

mardi 3 novembre 2009

La planète Ruby et Rails: Le discours de l'état de l'oignon

Le titre du post est directement inspiré d'une présentation réalisée par Larry Wall sur l'état de l'art du langage Perl: "State of the Onion 2000".
J'ai téléchargé un livre blanc sur l'écosystème de Ruby et Rails sur le site infoether(gratuit).









Cette brochure aborde tous les composants de Ruby on Rails avec tout d'abord 'Ruby'.

1) Ruby.
Sa communauté de développeur est en hausse (1 million) et devrait atteindre le chiffre de 4 millions en 2013 . Ce langage est qualifié comme 'l'ami' du développeur. Il est vrai que les pratiquants sont souvent enthousiasmés par ce langage.

Il existe maintenant plusieurs machines virtuelles pour Ruby:



Tout d'abord celle du maitre : MRI : Matz's Ruby Interpreter (version 1.9 ) , elle est utilisée par défaut sur machine Linux.


Jruby: sponsorisée par SUN : elle permet d'utiliser du Ruby sur une JVM java.


IronRuby:sponsorisée par Microsoft :elle permet d'inclure du Ruby dans une architecture .NET


MacRuby : C'est un portage de Ruby sur Max OS X qui permet aux programmes ruby de tirer parti au maximun des architectures Mac.

Et encore deux autres : MaGLev et Rubinius.

La liste des grandes compagnies informatiques actives dans le domaine Ruby est :
  • Sun
  • Microsoft
  • Apple
  • IBM (driver ruby pour ses bases de données)
  • SAP : les produits de SAP sont des progiciels paramétrables , mais de plus en plus ses clients désirent des adaptations fines . Ces modifications sont lourdes et complexes à réaliser. Ici l'idée du laboratoire de SAP est de faire de Ruby le langage de développement embarqué dans leurs solutions.

Ainsi pour beaucoup d'acteur, Ruby, Ruby on Rails représente un contrepoids , une alternative utilisable face à Google et Python.


2) Rails.

Ruby on Rails en perçu par le marché comme le complément indispensable des gros frameworks J2EE . La répartition au sein d'une entreprise de 20% Rails et 80 % J2EE est une bonne estimation. Les dernières manifestations Ruby on Rails ont montrées une grosse percée de ces technologies dans le monde de l'entreprise.
'Better,faster,cheaper' (Meilleur,plus rapide, moins cher) est la phrase qui revient le plus souvent lors de ces conférences.

Une rumeur tenace concernant la tenue du framework à la montée en charge collait à la peau de Rails. Les mésaventures de Twitter en étaient à l'origine. C'était surtout un problème global d'architecture applicative. De fait Twitter a abandonné en partie Rails pour développer son propre langage et sa propre base de données. Twitter explose les échelles de références en termes de message,de connexion ou d'utilisateur.
Ruby on Rails couplé au serveur Mongrel et nginX forment un attelage solide pour supporter la charge. Mais il faut pour cela se faire assister par un expert en architecture Rails.

3) Le Cloud computing.

Le segment de prédilection de Ruby on Rails est le cloud computing. Des sociétés naissent tous les jours dans se domaine (Engine Yard , Heroku, amazon S3 ,rackspace) . Rails a un avantage certain sur ses concurrents: l'industrialisation du déploiement des applications. Le framework a été pensé dans ce sens dès sa conception.
Le cloud computing sera Ruby on Rails ou ne sera pas (eg)

4) Le reste de l'écosystème.

Il existe plusieurs framework avec Ruby l'un d'eux est destiné à la VoIP et ToIP (voix /téléphone sur IP) : Adhearsion




Adhearsion is a new way to write voice-enabled applications. It's not just an API or library — it's a fully-featured framework

Adhearsion est une nouvelle manière d'écrire des applications de voix sur IP. Ce n'est pas une simple API mais une infrastructure complète(compatible avec Asterix).


Enfin , il existe un portage de Ruby sur smartphone de type:
Symbian et ........... android de Google.




lundi 2 novembre 2009

Ruby , Ruby on Rails deux hommes et un même combat.



J'ai lu sur un blog un article humoristique sur : la brève histoire 'bidon' des langages informatiques. Sur ruby l'auteur écrit :

1995 - Yukihiro "Mad Matz" Matsumoto creates Ruby to avert some vaguely unspecified apocalypse that will leave Australia a desert run by mohawked warriors and Tina Turner. The language is later renamed Ruby on Rails by its real inventor, David Heinemeier Hansson. [The bit about Matsumoto inventing a language called Ruby never happened and better be removed in the next revision of this article - DHH].

Ce qui donne en résumé :

1995 - Yukihiro "Mad Matz" Matsumoto crée Ruby pour éviter une apocalypse .... La langue est rebaptisée Ruby on Rails par son véritable inventeur, David Heinemeier Hansson. [La mention sur Matsumoto inventeur d'une langage appelé Ruby n'a jamais eu lieu et il sera préférable de la supprimer dans la prochaine révision de cet article ].
Ce trait d'humour met l'accent sur une grosse injustice. Tout le mode parle de Rails en oubliant de préciser 'Ruby on Rails' . Certains décideurs pensent même que Rails est un langage.

Sans Ruby, il n'y aurait pas le Rails actuel, et sans Rails il n'y aura pas de Ruby actuel ni cette prévision 4 Millions de développeurs Ruby en 2013. C'est un peu la quadrature du cercle. Mais au lieu que cela soit un problème, c'est au contraire une force supplémentaire.

Matz est quelqu'un de très simple qui ne comprend toujours pas pourquoi certains le considèrent comme un gourou. David,lui, est souvent sollicité pour poser pour des couverture de magazine, mais il n'a pas pris la grosse tête pour autant. Ils forment une sorte de couple équilibré où chacun a trouvé son espace. Tous les deux ont démontré qu'il y avait autre chose de plus important que l'informatique où que leurs travaux.

Il existe des programmeurs qui font du Ruby sans faire de Rails. Qui passent du temps pris sur leur vie de famille à évangéliser, organiser des rencontres ou des apéros Ruby. Alors s'il vous plait, en guise de marque de respect ne dite plus Rails mais Ruby on Rails.

Un autre couple célèbre est celui formé par cette fois des frères ennemis (dans le bon sens du terme) Larry Wall le père du langage Perl et Guido van Rossum 'dictateur bienveillant à vie' du langage Python (il travaille chez Google) . Leur rivalité existe et reste très bienveillante. Ils ont été tous les deux chahutés par le vent du sillage de Ruby on Rails. Larry s'est mis à apprendre le japonais pour essayer de comprendre la manière de penser de Matz. Et je n'ai pas encore entendu Guido promouvoir Ruby comme 3 eme langage pour les API Google.

Et n'oublions pas notre objectif : La domination du monde:

dimanche 1 novembre 2009

Dimanche .. golf

Le matin au golf de la poudrerie avec Seb:

Un birdie pour Seb ... Enorme
mais pas sur ce trou




IMAGE_031.jpg

IMAGE_032.jpg