jeudi 31 décembre 2009

La suite des manipulations des API #twitter et #Ruby

Dans ce post j'explique comment récupérer les informations publiques d'un utilisateur sur twitter.
Pour cela j'utilise l'API :
"http://twitter.com/users/show.json?user_id=nnnnn"
.

Dans le post précedent j'exposais comment faire correspondre un nom twitter avec l'user_id.



germanlinux: "25286531"
woork: "9689232"


Ces informations sont stockées dans un fichier au format yaml et le programme suivant va l'exploiter comme ceci :

require 'rubygems'
require 'json'
require 'tweet'
require 'net/http'
require 'uri'

twitters = open('radar.yaml') do |input|
YAML.load input
end
my_array = Array.new
twitters.each_value do |id_user|
my_id_user= id_user.to_i
cible = "http://twitter.com/users/show.json?user_id=" + id_user
response = Net::HTTP.get URI.parse(cible)
jo= JSON.parse(response)
my_tweet=Tweet.new do |t|
t.tweet = jo
end
ma_chaine= my_tweet.resume(['screen_name','name','friends_count','followers_count','statuses_count','created_at','profile_image_url?','url?','verified'])
puts ma_chaine
end



La méthode tweet#resume va faire un appel de méthode éponyme pour chaque clé.


def resume(fields)
my_string=""
fields.each do |a_field|
my_string+= self.send(a_field).to_s
my_string+=","
end
my_string
end

Le point d'interrogation ajouté à un nom de méthode permet de retourner un booléen sur la présence ou non d'une valeur associée à une clé. J'implemente ce sucre de syntaxe comme ceci :

def method_missing(m, *args, &block)

meth= "#{m}"
if meth[-1].chr == '?' then
meth.slice!(-1)
if @tweet[meth] then true.to_s else false.to_s end
else
@tweet["#{m}"]
end

end


Les Clés disponibles sont :

#profile_sidebar_fill_color ==> e0ff92
#name
#profile_background_tile ==> false
#profile_sidebar_border_color ==> 87bc44
#created_at ==> Sat Jun 27 12:59:27 +0000 2009
#location ==> Paris
#profile_image_url ==> http://a3.twimg.com
#profile_link_color ==> 0000ff
#url ==> http://
#favourites_count ==> 0
#utc_offset ==> -10800
#id ==> 51431032
#followers_count ==> 565
#protected ==> false
#profile_text_color ==> 000000
#profile_background_color ==> 9ae4e8
#geo_enabled ==> false
#verified ==> false
#notifications ==> false
#description ==>
#time_zone ==> Greenland
#friends_count ==> 5
#statuses_count ==> 0
#profile_background_image_url ==> http://s.twimg.com/a/1261519751/images/themes/theme1/bg.png
#screen_name ==> Er
#following ==> false

L'excécution du programme donne:


germanlinux,eric german,32,29,168,Thu Mar 19 13:01:16 +0000 2009,true,true,false,
Woork,Antonio Lupetti,133,12952,135,Thu Oct 25 17:38:34 +0000 2007,true,true,false

Il ne reste plus qu'a exporter ces lignes dans un tableur pour s'amuser à faire des statistiques.

mercredi 30 décembre 2009

#Ruby #twitter API, Comment recuperer le user_id twitter à partir du nom d'utilisateur

Lorsqu'on travaille avec les API twitter, il faut faire attention aux limitations mise en place par twitter. Des limites existent sur le nombre de requetes venant d'une adresse IP , pour un utilisateur authentifié etc (ici le détail de leur politique). L'idée est d'utiliser les ressources les plus accessibles.

Un certains nombres d'information ne sont disponibles qu'a partir du user_id. cette donnée est numérique et elle n'est pas affichée directement.

Ce programme permet d'effectuer la correspondance entre un nom twitter (screen_name) et son user_id. Il utilise des requetes simples HTTP non authentifiées, sans risque de blocage.
Je remplie un fichier avec des noms twitter , le programme va rechercher la page twitter, la parse et retrouve le user_id. En sortie le programme sauvegarde les information dans un fichier au format YAML.

require 'rubygems'
require 'net/http'
require 'uri'

my_hash =Hash.new
## read standard input
ARGF.each_line do |line|
line.chomp!
cible = "http://twitter.com/" + line
response = Net::HTTP.get URI.parse(cible)
## sorry I have arrived from Perl
response=~ /user_(\d+)/
id_user=$1
my_hash[line] =id_user
end
# dump hash in yaml file
File.open('radar.yaml','w') do |out|
YAML.dump my_hash,out
end


En entrée:

germanlinux
woork


En sortie:

---
germanlinux: "25286531"
woork: "9689232"


L'étape suivante consistera à utiliser ces user_id dans l'API:

http://twitter.com/users/show.json?user_id=nnnn


Mais c'est un autre post.

mardi 29 décembre 2009

Web 2.0 Suicide machine and bigpicture

Je me suis inscrit à Facebbok , myspace , netvibes , linked'in , viadeo, trombi ,twitter. Bref le jeu complet. Je suis ami avec des inconnus, je suis un inconnu pour mes amis. Quand je veux partager un lien , je dois aller le déclarer dans trois sites differents, en espérant ne pas créer de boucle (Twitter pousse sur facebook qui pousse à son tour sur Twitter) . Au secours ! Je n'ai plus de vie sociale, je suis trop occupé à gérer mes reseaux sociaux. je n'exploite plus les liens , je les 're-twitte' . (clic pour agrandir : montage réalisé à partir du site : go2web20. )
web2

Je suis perdu dans les dédales du web 2.0, en espérant que l'élu arrive ! . Le site qui tuera tous les autres. En attendant il existe une alternative, le Web 2.0 Suicide machine; ce site est infernal : après avoir entré ses identifiants , mot de passe de ses comptes faceook, linked'in et twitter , la 'machine' commence par changer vos mots de passe (ah la cruelle) et défait tous vos réseaux sociaux sous vos yeux.

web 2.0 suicide machine - untwitter from moddr_ on Vimeo.

jeudi 24 décembre 2009

Comment nos hommes/femmes politiques maitrisent l'usage des réseaux sociaux


Il n'est pas facile d'apprendre à jongler avec tous ces nouveaux supports.
Certains ministres sont inscrits sur twitter mais sans beaucoup d'activité dessus.
Les contributions ou l'absence de contribution sont visibles pour nmorano , rbachelot laurentwauquiez...nk_m
etc.

Attention en 2012 tout va se jouer sur le Net. Je vais peut etre faire un barometre mensuel en Ruby.

mardi 22 décembre 2009

Pourquoi Google goggle (recherche par photo) n'est pas une innovation anodine


A picture is worth a thousand words.No need to type your search anymore. Just take a picture.


Google a annoncé l'arrivé d'une application innovante pour téléphone mobile : google goggles (lunettes).
Il suffit de prendre en photo, un monument , une couverture de livre, une pochette de DVD et automatiquement la recherche est lancée sur Google. Cette innovation n'est pas si futile que ça.
Vers les années 1940 Alan Turing cherche formaliser ce qui différencie un humain et un ordinateur. De ces travaux sont nés une série de tests dont le captcha: Captcha est l'acronyme de Completely Automated Public Turing test to tell Computers and Humans Apart.

Exemples de captcha :


Certains sont plus simples que d'autres.




Ainsi , l'informatique vient de franchir une nouvelle étape. Les conséquences ne sont pas encore bien connues mais l'avenir s'annonce propice à la :geek world domination


Sinon, il restera toujours le test ultime pour distinguer un homme et une machine:Que regardez vous en premier ? Réponse : Un PC ouvert !

dimanche 20 décembre 2009

Pour noel:un nouveau rubik cube



J'ai trouvé ce cube à la FNAC Noisy, il est noir, gris ,antracite, blanc et argent. Il est très esthétique mais très difficile à manier. Le choix des couleurs induit une difficulté en plus en raison du risque de confusion.

La semaine derniere, j'ai amélioré mon record qu cube 5*5*5 , je suis passé de 18 minutes à 14 Min et 50 secondes. Le record à battre est à moins de deux minutes. Pour le 4*4*4, 5*5*5, 6*6*6 ou le 7*7*7 je procède toujours de la même manière : Comme en mathématique je cherche à ramener le problème à un quelque chose de connu. Ainsi, après avoir reconstituer les centres, j'assemble les bords d'arête. Je me retrouve donc avec un cube 3*3*3 . Mon temps sur un cube de base est au mieux 55 secondes, au plus 3 minutes. Donc sur un 5*5*5 j'ai forcement un temps incompressible de près de 2 minutes. C'est pour cela qu'il faut résoudre un cube comme un physicien: en repartant de zéro, mais le nombre de formule à retenir est multiplié par 10.
A défaut de vitesse , je fais des figures (lien vers l'album).

dscn1211

a) Faire les centres.
La formule pour aligner les centres est facile, il permet de permuter deux centres:
R'FLF'RFL' en visualisant cela donne : je place , je verrouille , je replace je déverrouille.

b) Appareiller les arêtes.
La formule de base résoudre les bords d'arête et le problème de parité :est L'UU L'UU FFL'FF RUUR'UU LL
(L: left , U upface, F frontface, R rigth)
La phrase mnémotechnique est la suivante: Louis Prima et le groupe U2 font un concert:
Louis prima et U2 : Louis prima et U2 , il fait tout Louis prima , il fait tout (FF) L'air est de U2 , la deprime pour U2 , mais Louis Prima est un mec carré. Cette formule fonctionne avec tous les gros cubes.

samedi 19 décembre 2009

N'ayez plus peur de votre boss


Je suis tombé sur cette publicité :
Peur de vous faire prendre par votre boss en train de chatter sur MSN, de regarder des nouvelles photos de vos amis sur Facebook ou même de faire une patience?
Évidement cette situation est exceptionnelle car vous êtes assidus au travail.
Pour un jour d’égarement, voici le bouton panic USB.
Avec une simple pression sur le bouton rouge, une capture d’écran fournie par un CD d’installation ou un de vos fichiers préalablement défini apparaîtra immédiatement sur votre écran. En vente à 19€ sur www.mensway.com

Mais il y a mieux :
Sur le site www.cantyouseeimbusy.com Vous trouverez des jeux masqués sous des applications bureautiques. Ils vous permettent de jouer sans perdre votre crédibilité auprès de vos collègues. Ainsi, vous pouvez vous essayer à l'indemodable 'casse-brique'. La raquette est camouflée en curseur de le glissière horizontale, et les briques déguisées en mots du texte.


Mais au fait C'EST MOI LE BOSS !!!!!!

vendredi 18 décembre 2009

API Twitter et métaprogrammation Ruby appliquée

Twitter fournit une API pour accéder à son flux, son moteur de recherche et aux sujets les plus commentés.
Le flux principal appelé 'firehose' (je traduit comme:bouche d'incendie principale) ne sera accessible qu'au premier trimestre 2010. Mais vous pouvez dès à présent vous amuser avec le robinet du jardin (gardenhose) qui est un échantillon du flux principal.
Une série de module existe pour un bonne palette de langage (dont Erlang ou Ruby).

Voici un exemple de base à faire soi-même.

Pour lire l'échantillon du flux des tweets , il faut lancer une requete HTTP authentifiée et lire les réponses au fil de l'eau. Le moyen le plus simple est d'utiliser curl:

L'exemple qui est donné sur le wiki est :
curl http://stream.twitter.com/1/statuses/sample.json -uYOUR_TWITTER_USERNAME:YOUR_PASSWORD


Le résultat est au format json , en remplaçant l'extension json par xml vous aurez un résultat en XML mais le volume à traiter sera plus important.

Le site twitter est à flux continu, cela veut dire qu'il n'y pas un début et une fin de transaction. Tant que vous restez branché, vous recevrez des données. ATTENTION :TWITTER ne veut pas des petits malins qui :
* Se connectent et se reconnectent aussi tôt
* Utilisent plusieurs connexions (controle sur le user ou sur l'adresse IP).

De même, il n'est pas question d'essayer lire le flux ET de le traiter: il suffit de consulter le speedometre de twitter pour comprendre: 25.000 tweets par minute.
(exemple l'effet mickael Jackson)


On va donc avoir deux parties, un premier programme qui va lire le flux de tweets et un deuxième qui va traiter le résultat.
Ce programme de programme va lire le fichier de l'entrée standard et va afficher les tweets: Nom d'utilisateur, son nombre de followers et le texte du message.

require 'rubygems'
require 'json'
require 'tweet'
p [ JSON.parser, JSON.generator ]
#curl http://stream.twitter.com/1/statuses/sample.json -ugermanlinux:xxxxx > twitter.json

#File.open("twitter.json" ).each_line do |line|
ARGF.each_line do |line|
#$in = STDIN.readlines
#$in.each do |line|
line.chomp!
if (line[-1].chr == "}") then
jo= JSON.parse(line)

#puts jo.inspect

#puts jo.keys.sort
my_tweet=Tweet.new do |t|
t.tweet = jo
# t.userinfo =jo["user"]
end
if (my_tweet.text) then
puts "---"

print my_tweet.user["screen_name"]
print "(#{my_tweet.user["followers_count"]})"
print ":"
puts my_tweet.text
end
end

end



Explications :
* les clauses requires chargent les librairies, la librairie 'tweet' est détaillée plus loin.
* La ligne suivante affiche quels sont les drivers JSON (pour controle)
p [ JSON.parser, JSON.generator ]

Pour ma machine :[JSON::Ext::Parser, JSON::Ext::Generator]
*cette ligne détaille la commande curl à lancer sur une deuxième console , la sortie est envoyée dans un fichier twitter.json.
#curl http://stream.twitter.com/1/statuses/sample.json -ugermanlinux:xxxxxx > twitter.json
La ligne suivante montre l'ouverture d'un fichier nommé , les lignes d'apres deux méthodes pour lire l'entrée STANDARD (STDIN) , ARGF est l'équivalent de l'opérateur 'diamant' de Perl.
#File.open("twitter.json" ).each_line do |line| ##ou 
ARGF.each_line do |line| ## ou
#$in = STDIN.readlines
#$in.each do |line|

La suite est simple, il convient de s'assurer que la ligne JSON est complete (le flot arrive parfois tronqué) , le tweet est parsé de JSON vers un tableau de Hash Ruby . Le tweet doit contenir du texte, pas une mise à jour de compte.

Métaprogrammation.

La métaprogrammation Ruby intervient dans la classe Tweet:

class Tweet
attr_accessor :tweet
# def initialize(tweet)
# @tweet= tweet
# end
def initialize
yield self
end
def method_missing(m, *args, &block)
# puts m
@tweet["#{m}"]
end
def source ##exemple de getter
@tweet['source']
end
end

Normalement il faut écrire des 'getters' pour toutes les clés du hashage du tweet.
Exemple : def source ...

Ici, j'utilise la méthode standard methode_missing. Cette méthode est appelée quand la MRI ne trouve pas la méthode pour une instance. L'appel est intercepté et transformé en clé de hashage. L'économie est une cinquantaine de lignes de code et plus de flexibilité.

La methode initialize combinée avec yield permet une initialisation souple laissée au soin du programme appelant. C'est dans la philosophie du Duck typing.

Les méthodes principales de tweet sont les clés de premier niveau à savoir:

created_at
favorited
geo
id
in_reply_to_screen_name
in_reply_to_status_id
in_reply_to_user_id
source
text
truncated
user

User a son propre jeu de clés (clés secondaires)

created_at
description
favourites_count
followers_count
following
friends_count
geo_enabled
id
location
name
notifications
profile_background_color
profile_background_image_url
profile_background_tile
profile_image_url
profile_link_color
profile_sidebar_border_color
profile_sidebar_fill_color
profile_text_color
protected
screen_name
statuses_count
time_zone
url
utc_offset
verified


Résultats.


Mise en route :

a) lancer sur un terminal la commande curl déjà commentée et rediriger la sortie vers un fichier (ex : t.json)

b) Sur un deuxième terminal lancer : tail -n 1000 -F t.json|json2.rb
(le -n 1000 permet de se remettre au début du fichier , le -F garde le fichier en lecture permanente)


C'est presque aussi émouvantque de voir tomber les tweets avec twitterfall.

(clic pour élargir)

jeudi 17 décembre 2009

Un bricolage sur un coin de table

DSCN0086
Un des premier prototype avec l'ancien nom : Levon et la distribution mandrake.
J'avais déja adopté un numérotation à 3 chiffres.

La mire de la version accélerateur Internet : 6 serveurs en lignes sous Debian.



Ce matin les chiffres sont tombés : 5076 utilisateurs s'étaient connectés hier sur le portail Internet de la DGFiP(ex DGCP), c'est pour nous un jalon. Ce dispositif permet aux partenaires de la DGFiP (ordonnateurs: Maires, Départements , Régions, Etablissemnts Publics) et aux agents d'accéder de manière sécurisé (certificat client) au frontal du système informatique de la DGFiP. Le composant Lemondap est la clé de voute de cet édifice, aidé par apache, Mod-Perl , Perl, memcached et openldap. C'est un reverse-proxy 'tête de pont" qui en fonction de l'URL, mandate des applications métiers. C'est un système global car il couvre les fonctionnalités allant de la délivrance des certificats clients, jusqu'à l'alimentation d'un entrepôt de données avec les log Apache. Cet entrepôt sert de base aux différentes restitutions en mode texte, graphique avec openChart et mail. L'entrepôt de données est basé sur une base PostgreSQL hébergeant des tables dénaturées préfigurant les bases de données vectorielles (voir le concept des bases vectorielles).

Ce projet est né vers 2002 , il a plusieurs branches : Lemonldap::NG (Nouvelle Gendarmerie) basé sur les Threads Perl, Un packaging Interne (basé sur une RedHat) appelé DAC, servant à la télédéclaration (7 millions d'utilisateurs).La version d'origine est là sur le cpan.org
Projet récompensé par un prix:
remiseprix_DSC_2124.jpg_w450.jpg
Je voulais remercier Arnaud, alexandre ,Casimir , le personnel des centres de Lyon, Versailles et Marseille. J'aimerais croire que dans notre nouvelle structure, un tel projet soit encore possible. Mais la réponse ne m'intéresse pas, je suis passé à autre chose. L'économie globale pour le contribuable se mesure en KE (déjà 100 ke pour la partie serveur applicatif).


Que devrait etre une nouvelle version de Lemonldap ?. Déjà le socle resterait du Debian qui est la meilleure distribution avec le meilleur système de package (elle sert de base à UBUNTU) .
Le serveur HTTP serait soit NGINX qui offre la meilleure et la plus simple API C de développement, soit un dérivé de Yaws qui est un serveur HTTP écrit en Erlang.
CouchDB remplacerait le serveur de session memcached.
La partie alimentation de l'entrepôt resterait la même (écrite en C).
Malgré mon changement d'orientation, je reste un développeur dans l'âme. Au lieu d'écrire du code , je rédige des clauses de marché , des notes. Quelque part c'est aussi de la technique. Les leviers du pouvoirs sont ailleurs, sur des terres hostiles et je dois progresser camouflé pour imposer la:

Prochain jalon: 10.000
Heureusement j'ai ce blog comme exutoire....

mercredi 16 décembre 2009

Comment faire un gadget pour googlewave

Comment écrire pour une google Wave ? .
Une application pour googlewave est un fichier XML. Ce fichier contient le plus souvent du javascript.
(clic pour élargir)

Actuellement le moyen le plus simple pour faire un 'gadget' est d'utiliser GWT (Google Web toolkit- en version 2 récemment). GWT permet d'écrire un application en utilisant le langage JAVA. Cette application sera traduite en Javascript/CSS-HTML5.


Pour démarrer GWT il faut:
* Un IDE eclipse
* Le plugin GWT
* les libraires qui vont bien.

Il est conseillé d'investir dans un éditeur d'interface graphique.
Si la programmation et la compilation sont abordables en terme de difficulté. La mise au point reste difficile, un plugin comme firebug est indispensable.

Il y a des discussions sur ce sujet ici.

mardi 15 décembre 2009

Geek culture


(clic pour élargir)
Ce diagramme est difficile à lire et je dois m'atteler à en faire un en français.
Ici un tableau périodique des réseaux sociaux : http://www.rickliebling.com



Avec la légende:
Social Media Behaviours: (These are the positive things you choose to do)

Sh = Share

Mt = Monitor

Fr = Friend

Cv = Converse

Cu = Customize

Li = Listen

En = Engage

Di = Dialogue

Social Media All-Rounders: (These are the people you can find all over the Social Media landscape)

Mc = Mack Collier (The Viral Garden)

To = Todd Defren (PR Squared)

Lo = Lee Odden (Online Marketing Blog)

Dr = Darren Rowse (ProBlogger)

Mj = Mitch Joel (Six Pixels of Separation)

Ds = David Meerman Scott (Web Ink Now)

Pe = Peter Kim (Being Peter Kim)

Bs = Brian Solis (PR 2.0)

Sz = Shel Holtz (A Shel of my Former Self)

Rb = Rohit Bhargava (Influential Markeitng Blog)

Gl = Geoff Livingston (The Buzz Bin)

As = Andy Sernovitz (Damn! I Wish I’d Thought of That!)

An = Andy Beal Marketing Pilgrim

Ad = Andy Beard (Niche Marketing)

Al = Alan Wolk (The Toad Stool)

Cc = C.C. Chapman (The Advance Guard)

Nb = Noah Brier (Noah Brier)

Cr = Connie Reece (Every Dot Connects)

Kp = Katja Presnal (Skimbaco Lifestyle)

Da = David Armano (Logic + Emotion)

Jc = Joel Comm (Joel Comm)

Ls = Liz Strauss (Successful Blog)

Jh = Jackie Huba (Church of the Customer)

Vm = Valeria Maltoni (Conversation Agent)

Cg = Chris Garrett (Chrisg)

Ah = Ann Handley (Annarchy & Marketing Profs)

Jj = Joseph Jaffe (Jaffe Juice)

Ju = Joe Pulizzi (Junta42)

Ng = Nigel Hollis (Straight Talk)

Nh = Neville Hobson (Neville Hobson)

Bl = B.L. Ochman (What’s Next)

Si = Shel Israel (Global Neighbourhoods)

Ni = Nick Burcher (Nick Burcher)

Social Media Tools: (These are the applications and tools essential to Social Media)

De = Delicious

Su = StumbleUpon

Td = TweetDeck

Fe = FeedBurner

Dp = Dopplr

Tu = TinyURL

Tb = Tumblr

Fb = Facebook

Lk = LinkedIn

Te = Technorati

Fk = Flickr

Ms = MySpace

Go = Google

Dg = Digg

Social Media Practices: (Do these to maximize your Social Media experience)

Fl = Follow

Ht = Hashtag

Po = Post

St = Status Update

Sp = Spread

Se = Search

Hp = Hat tip

Fd = Feed

Rt = Retweet

Ud = Update

Cm = Comment

Jn = Join

Up = Upload

Tg = Tag

Tc = Tag clouds

Dm = Direct Message

Rx = Remix

Ln = Link

Mu = Mashup

Sb = Subscribe

Rf = Refer

Sr = Stream

Re = Reply

Rc = Recommend

Sn = Syndicate

Pk = Poke

Pm = Promote

Ib = Imbed

Social Media Live: (Bringing the Social Media experience to the real world)

Pf = Piers Fawkes (Likemind)

Rd = Russell Davies (Interesting)

Cb = Chris Brogan (PodCamp)

Sg = Seth Godin (Seth Live)

Ha = Peter Shankman (Help a Reporter Out)

Facebook People: (Power users of the Social Media Networking platform)

Jp = Jeff Pulver

Zf = Ze Frank

Twitter People: (Masters of leveraging microblogging)

Gk = Guy Kawasaki @guykawasaki

Wl = Gary Vaynerchuk @garyvee

Aa = Aloha Arleen @AlohaArleen

Sm = Scott Monty @scottmonty

Jo = Jeremiah Owyang @jowyang

Sa = Sarah Evans @PRSarahEvans

Sc = Robert Scoble @scobleizer

Zp = Zappos @zappos

Sq = The Real Shaq @THE_REAL_SHAQ

Bo= Barack Obama @barackobama

Pc = Laura Fitton @pistachio

Tm = Warren Sukernek @warrenss

YouTube People: (Pioneers in developing content for social media video)

Ij = iJustine

Jl = Judson Laipply

Blog People: (Consistently intellingent, thought-provoking & educational)

Sy = Shoe Money

Ar = Ad Rants

Mp = Micro Persuasion

Aw = Ads of the World

Sj = Search Engine Journal

Cf = Common Craft

Cp = CopyBlogger

Ba = Brand Autopsy

Sd = Search Engine Land

Dd = Dosh Dosh

Gv = Gaping Void

Ma = Mashable

lundi 14 décembre 2009

La roue de la fortune de google



Une série de conférence à L'EFREI organisée par le club GET-CONF m'a appris beaucoup sur la stratégie de google.

Quel est le cœur de métier de Google ?: c'est son moteur de recherche associé à son service de publicité. C'est sa martingale, et elle est protégée des curieux. Par contre le reste est ouvert à tous le monde et participe à une grande roue de la fortune.
Prenons l'exemple d'ANDROI, l'OS pour les smatphones et de tout se qui est portable embarqué ( gps, autoradio, grille-pain etc) . Il est basé sur Linux, les applications se développent en Java ou en C,C++. Pour créer une application pour android, il ne faut pas grand chose :
* Un IDE comme eclipse avec le plugin pour androi .
* Des librairies.
* Un émulateur de téléphone.

C'est tout , pas besoin d'un vrai téléphone. Pour mettre à disposition une application, un droit d'inscription sur la plateforme google de 25$ est réclamé une fois pour toute.
Pourquoi google , facilite l'accès à Android ?:
1er : Ce n'est pas leur cœur de métier
2eme: Le parc de portable est 4 à 5 fois celui des PC
3eme: Il vont pourvoir drainer les recherches vers leur site.

Ainsi Google mis en marche le concept 'moins cher que gratuit'. Un fabriquant qui veut lancer un nouvel appareil, se verra aidé par google , pour lui le cout 'logiciel' sera négatif. Chaque GPS fonctionnant avec Android , rémunérera indirectement Google à chaque recherche de "Restaurants, Hotels et autres". Google se paiera sur la publicité et la vente d'affichage dans la géolocalisation.

La nombre d'application sous android est d'environ 15.000 contre 100.000 sous iphone. Malgré cet écart, Iphone va perdre la guerre pour une raison bien simple: Son voisin vend la même chose moins cher et arrive à payer les factures. Et en plus Android travaille mieux qu'Iphone, il est multitache. Par le mécanisme de intentions, il est possible de faire communiquer des applications entres elles.

La déferlante d'application pour Android arrive. D'autant qu'un élément va accélérer le processus : le marché toujours juteux des logiciels pour adultes (bref le X) sur smartphone. Apple a d'ailleurs (et c'est une première) autorisé Playboy à lancer une application sur Iphone.

Ainsi Android va bénéficier d'un coup de main inattendu pour tourner la roue de la fortune de google:



Mais google ne pousse pas vraiment à développer un parc d'applications 'autonomes' pour Android. En effet, la fragmentation des supports (avec ou sans clavier,tactile ou non etc) plaide pour un modèle client serveur. L'application sur l'Android ne servirait que de lanceur pour une application hébergée sur App-engine de Google , la boucle est bouclée , la roue peut tourner.


Par comparaison une infographie sur 'filon' Iphone:




samedi 12 décembre 2009

Débat participatif avec le web 2.0

Au mois de mars le Président OBAMA a demandé à son équipe 'Internet' : Je veux organiser un débat participatif, avec des millions d'utilisateurs en ligne. Je veux qu'on puisse poser des questions , les classer puis je répondrais par video. Le défi était énorme car le système devait tenir une charge importante sur un laps de temps bref (1 jour ou 2) , c'est le cauchemar de tous les admins réseaux. La solution est venu de google par l'utilisation de leur outil moderator.
Cette application permet à utilisateur de créer un thème, de poser des questions et de voter pour des questions afin qu'elles soient prises en compte.

Ce système a encaissé plus de 700 connexions/seconde dans le cas d'OBAMA (voir graphisme tiré du site zd.net)


Il est vrai qu'OBAMA a engagé Katie Jacobs Stanton, jusqu'à présent product manager chez Google (dont le projet moderator) au poste de directrice de la participation citoyenne.

Il est possible de poser des questions à nos dirigants par le biais de ce site, mais il n'y pas de garantie de réponse.
65 questions ont été posées au Président Sarkozi par 413 personnes. Elles portent aussi bien sur son épouse , que sur ses projets politiques.






Il existe un autre moyen de collecter l'avis des utilisateurs. Il suffit d'utiliser un 'formulaire' google doc. On fabrique en ligne le formulaire avec des questions, des choix ou des zones libres. Puis l'url est rendue publique afin de permettre aux utilisateurs de remplir le formulaire. Les réponses sont collectées par le biais d'une feuille de calcul associée.




Enfin, il possible d'utiliser un gadget 'yes-no-maybe' dans une google wave :


Dans ce cas,on doit rester cantonné à un faible nombre d'utilisateur.

jeudi 10 décembre 2009

Comment gérer ses posts et ses tweets

J'ai un blog, une compte facebook et twitter. J'explique ici comment gérer tout ce bazar.

Tout commence par le blog.
Le matin je parcours mes sources :
a) reddit
b) digg
c) delicious : ce site est vraiment mon centre névralgique, car je m'en sers pour stocker mes signets.

Je redige un post sur le blog et je programme sa date et son heure de parution.
Je choisie souvent le matin vers 7h00 ou la fin d'après-midi vers 17 h 30.
(clic pour agrandir)


Lorsque bloggy déclenche la publication du Post, le flux RSS est mis à jour.
Facebook et twitterfeed vont scrupter regulierement ce flux RSS, et génère automatiquement une mise à jour de, respectivement, mon statut sur Facebook et sur Twitter.
Twitterfeed permet de vraiment personnaliser la collecte et la génération de ses autres flux: on déclare ses sources et comment formater ses tweets (compression des url,préfixes ou sufixes)
(clic pour agrandir)


Je ne rajoute qu'un préfixe: "Nouveau post:"
(clic pour agrandir)



Ainsi l'info est envoyée à twitter par twifferfeed:
(clic pour agrandir)


Parfois j'ai besoin de programmer la publication de tweet dans la journée. J'utilise le site :twuffer.com :



Il propose un planificateur simple mais efficace.

Voici la panoplie minimale à avoir pour pouvoir participer a la GWD :
La world domination par les Geeks.

Un jour sur Internet

mercredi 9 décembre 2009

La copine de geek idéale ?

Adrianne Curry, America's Next Top Model winner a déclaré : j'aime passer mes dimanches à jouer à WOW nue et défoncée...(article ici).



La réponse est NON : pour plusieurs raisons:

  • En jouant à WOW elle va vous piquer de la bande passante.
  • La voir jouer nue va vous détourner de votre but ultime:Geek world domination (et en plus elle va salir votre coussin brodé TUX. )
  • Jouer défoncé fait perdre des PDV de karma.
  • Elle va piquer vos bières.



Non la copine idéale du geek reste : (version vintage)




ou celle ci version post-moderne (en cours de montage) .





Restons concentrés sur notre but ultime :

mardi 8 décembre 2009

Less is better de david Heinemeier Hansson

Sur le site UX magazine David Heinemeier Hansson, créateur de Ruby on Rails répond à quelques questions, l'article est titré : Less is better.

Dans cet article , il expose sa vision d'un modèle économique simple :
Les entreprises de petite taille peuvent grâce au web, rayonner autant qu'une grosse entreprise. Mais elles ne doivent pas tomber dans le piège de la dispersion: Il faut rester sur son coeur de métier. Et il est étonnant de voir des start-up ne sachant pas exactement quel est leur coeur de métier. Si ton voisin vend la même chose que toi moins cher et arrive à payer ses factures, alors tu es très mal.

Il faut se consacrer sur ses produits et non pas chercher à faire 'à tout prix' plaisir aux utilisateurs pour qu'ils achètent ces produits.
Pour faire connaitre son produit , l'entreprise à deux alternatives: dépenser de l'argent ou partager largement ses connaissances sur le produit.




Cette illustration est tirée du blog : creating_passionate_users

Ainsi d'après lui, l'utilisateur est balancé entre avoir plein de fonctionnalités et pourvoir se servir d'un produit basique, simple d'emploi.


Les développeurs cherchent à sortir le produit qui tue: avec des tonnes de fonctionnalités, capable de s'adapter à tous les usages.
C'est une erreur, l'utilisateur au fond de lui souhaite ne pas se poser des questions ni être confronté à un écran rempli de case à cocher d'option.
C'est pour cela que Rails est le framework le moins paramétrable de sa catégorie, ce n'est plus un défaut, c'est une qualité. Il est prêt à l'emploi tel quel. Rien n'empêche l'utilisateur averti de modifier le comportement, mais sans utiliser une interface graphique d'administration.L'utilisateur doit faire confiance au développeur pour se voir proposer la meilleure composition en fonction de l'utilisation.

Concernant la conduite de projet.

David préconise des cycles de 3 semaines avec une équipe réduite. Une application utilisable doit voir le jour à la fin de ce délais. Puis, les décideurs et les commanditaires doivent se poser la question: est ce qu'on injecte des ressources pour une nouvelle fonctionnalités et repartir pour 3 semaines ou doit on tout arrêter et se contenter de ce résultat ?.

Concernant les spécifications détaillées.

Vouloir décrire dans un document le fonctionnement complet d'une application est illusoire et dangereux. Illusoire car, personne n'est capable ne visualiser et d'imaginer une application tel qu'elle sera dans 6 mois. Dangereux parce qu'il est très facile de modifier quelques lignes dans un document sans mesurer les conséquences sur le développement, si les spécifications sont figées, on assistera à un effet tunnel et l'application ne correspondra plus au besoin réactualisé.

Voir le post dans son contexte d'origine http://germanlinux.blogspot.com/

lundi 7 décembre 2009

Gaspillage :les cartouches d'imprimante.

A l'instant où des gens très savants discutent de l'avenir de notre planète, quelques gestes simples permettent à chacun d'apporter sa petite contribution. Hélas les acteurs économiques ne rament pas forcement dans le bon sens. Cette photo illustre un paradoxe fou ! : Il est moins cher d'acheter une imprimante neuve que des cartouches d'encre. On a toujours la possibilité de recharger ces cartouches, mais souvent l'imprimante détecte cette manœuvre et sciemment dégrade le rendu des impressions. Est ce que le prix des cartouches a augmenté ? Non , mais c'est la quantité d'encre des cartouche qui diminue, ils sont malins! . Et si on arrêtait d'imprimer ?.




Pris sur www.reddit.com

Pour lire le post dans son contexte original: http://germanlinux.blogspot.com/

Jour historique pour le web 2.0 en Italie


Le succès de la manifestation contre Berlosconi organisée par les Internautes italiens marque une étapes importante dans l'utilisation d'Internet et du web 2.0 dans la politique. J'y vois un dérivé de l'histoire de l'arroseur arrosé. L'arroseur imprudent étant l'homme politique web 2.0.
L'élection dOBAMA est sans conteste liée à l'intégration réussie des réseaux sociaux dans sa campagne électorale. Celle de Berlusconi a sa position dominante dans les médias.

En Italie, c'est la plèbe d'Internet qui à réussie son pari en contournant les médias traditionnels.

Tous les hommes/femmes politiques voient Internet et les réseaux sociaux comme le Saint-Graal. Et tous essayent de se forger un vernis d'internaute vieux briscard du Net. Je blogue , tu tweetes , il Facebooke etc. Hélas on ne s'improvise pas du jour au lendemain pro des réseaux sociaux, au contraire le résultat se retourne contre ces amateurs: ils passent pour ces vieux beaux qui veulent se faire passer pour des djeuns.

Tous ont oublié une chose: Barack Obama n'a pas pris le train en marche: c'est un geek (type socialisé-ambitieux : les plus dangereux) , il connait Star trek et le salut à la mode vulcain. Même s'il n'est pas à l'origine de toutes ses contributions sur Internet , il délègue ce qu'il sait faire. Son utilisation d'Internet a été réussie parce qu'il pratique depuis longtemps et il aime ca. Vouloir copier son modèle pour l'exporter en France et le greffer sur un quidam est une erreur.
D'autant que la machine Internet mis en place par OBAMA, ne s'est pas arrêtée après l'élection, au contraire elle continue à tourner mais sous un autre mode: Dans le sens descendant comme des relais locaux au service de sa politique, et dans le sens montant comme apporteur d'idée , bref c'est du XDSL.


Au XXeme siècle , il n'était pas possible de gagner une élection nationale sans l'appui d'un media (TV / presse) , en 2012 Internet sera le 5eme pouvoir.
Ainsi l'élection présidentielle de 2012 est jouée d'avance, la réélection du président actuel est dans le tweet (pardon dans la poche). Je parlais de l'élection USA 2012 tout le monde avait compris...

Les italiens ont prouvé que ces outils peuvent marcher dans les deux sens, et c'est un avertissement lancé à tous les hommes/femmes politiques.

L'heure des geeks a sonné ! Ne nous laissons pas déborder par des beaux parleurs, suivons l'exemple d'OBAMA ! Suivez moi sur twitter pour en savoir plus. Le but ultime étant la domination du monde.

(lien vers ce livre)

dimanche 6 décembre 2009

Tout s'achète meme les followers sur twitter :(

L'objectif de certain utilisateur de twitter est d'avoir un nombre important de 'suiveur' (followers) pour montrer leur influence sur le web. Il existe une méthode rapide d'obtenir des followers : il suffit de les acheter !

Ci joint la pub d'un vendeur de follower :


100 followers coutent 5$,si votre budget le permet, il est possible d'en acheter un gros paquet de 10.000 pour 450$ ! ON vit vraiment une époque formidable.
"Il n'existe que deux choses infinies, l'univers et la bêtise humaine... mais pour l'univers, je n'ai pas de certitude absolue."
(Albert Einstein / 1879-1955)

Cela me permet d'édicter la règle n°2 du bon usage de twitter:

Règle 2 de twitter: pour quelqu'un de normal, on doit avoir un équilibre (corrélation) entre le nombre de followers et le nombre de personne qu'on suit.

samedi 5 décembre 2009

Selenium comme outil de test.

En visite dans un centre de développement de la DGFIP à Caen , j'ai assisté à une démonstration de l'outil SELENIUM dans un environnement JAVA. Il y a peu de temps encore, le quotidien de ces développeurs était constitué de COBOL/GCOS7. Quel chemin parcouru !.

Ce schéma illustre le principe de fonctionnement de Selenium.




Bien que les utilisateurs des applications soient sous IE6|7|8 , le développement est d'abord réalisé pour un client Firefox. Ainsi le débat n'est plus IE6|7|8 vs Firefox mais plutôt IE6|7|8 vs (Firefox et ses plugins) et là, il n'y a pas photo. Le comportement identique d'une application sous différents clients (IE6|7|8,firefox,opera, smartphone) est devenu un problème épineux. Quelques conseils :
  • Utiliser les feuilles de style et surtout s'en servir pour régler le problème du traitement erratique des marges (c'est le principal point de divergence des navigateurs) . Pour cela, en avant toutes choses, il convient de remettre toutes les marges à zéro.
  • Utiliser un javascript le plus standard possible : voir ici des conseils dans se sens (developpez.com).
Selenium permet de générer des scripts unitaires pour différents langages :
dont ruby :test::Unit et RSpec.
RSpec est un système de test basé sur le comportement (behavior). Pour réaliser un projet, il devient courant de 'raconter une histoire' plutot que de parler CU (cas d'utilisation') . Cette technique de narration est plus naturelle pour une MOA.
Avec RSpec cela va se traduire de cette facon :
Vous: j'ouvre un compte (créer) et son solde doit etre à zéro.
Cela va etre transcrit sous cette forme

describe Account, "when first created" do
it "should have a balance of $0" do
.....
end
end


Si tout va bien le rapport d'exécution donnera:

Account when first created
- should have a balance of $0

Cette notion de comportement est un concept qui émerge dans tous les nouveaux langages.

Selenium utilise le HTML comme format d'enregistrement, et le fait de manière très propre. Ainsi est il possible de générer le script d'enregistrement sans l'enregistrer préalablement ! Cela reviendrait à préparer les tests avant l'écriture des écrans de l'application.

61 photos scientifiques



A votre avis qu'est ce qui rend si joyeux ce panel de scientifiques de haut niveau :
Une mesure de dégagement de Méthane d'une vache ?
ou la photo de la premiere collision réalisée par le Grand collisionneur de hadrons (le LHC) du CERN

Toutes ces photos étonnantes sont disponibles sur ce site (lien ici).

Mes préférées sont celles de ces robots 'méduses' et de l'intérieur d'un crane.






Je suis particulièrement rassuré de savoir que nous avons un clavier sur notre cervelle.