dimanche 30 janvier 2011

Quel est le langage le plus adapté pour du script


Le site scriptometer qui compare les capacités de scripting des langages, classe en numero 1: sh et en 2 eme ruby ! (3 eme Perl , 5eme Python , 28 eme Java ...)

Ici en java un exemple de programme qui ne fait rien :
public class smallest { public static void main(String[] args) { } }

La même chose en ruby :'NEANT'

Lire les arguments de la ligne de commande :
En java
public class argv {
public static void main(String[] args) {
if (args.length > 0) System.out.println(args[0]);
}
}

En ruby
puts ARGV[0]
En python
import sys; print sys.argv[1]

samedi 29 janvier 2011

Cucumber, RSPEC :Comment une rondelle de concombre peut changer votre vie



Si Ruby on rails connait un succès croissant, c'est grace notamment à sa capacité à s'intégrer dans des démarches agiles de gestion de projet. Je connaissais pour la pratiquer (à ma façon) la méthode TDD : conduite du développement par les tests. Dans cette technique le développement du produit commence par la réalisation de tests (unitaires,d'intégration et fonctionnels) avant toutes choses. Le cadriciel Rails intègre nativement tout ce que vous avez besoin pour couvrir ces trois volets de test. Rails propose en plus l'utilisation des fixtures (garnitures) pour remplir ou manipuler les données de tests. le TDD propose des objets 'fictifs' mock ou stub afin de retarder le développement en 'dur' des objets.

J'ai souvent entendu parlé de RSPEC , un environnement de test offrant des techniques de développement basées sur le comportement de l'utilisateur (des histoires) : Behaviour DD (BDD).
La lecture de ce livre m'a ouvert des nouveaux horizons



Un fichier RSPEC (Ruby spécification) va décrire des évènements , des actions ou des états et comment le système doit réagir vis à vis de ces situations. RSPEC utilise un DSL (langage spécifique à un domaine) orienté développeur. Les RSPEC seront traduits en assertions de test.

 2 describe Game do
3 describe "#start" do
4 it "sends a welcome message" do
5 output = double('output')
6 game = Game.new(output)
7
8 output.should_receive(:puts).with('Welcome to Codebreaker!')
9
10 game.start
11 end
12
13 it "prompts for the first guess"
14 end


Ce livre consacre plusieurs chapitres à un projet appelé : cucumber (concombre). Cucumber est le projet qui réalise le rêve de tous les développeurs: il traduit les spécifications de votre client(sponsor-moa etc) en test de comportement (RSPEC :la synthèse des 3 types de test) .

Ici le DSL est orienté client (MOA). Le client va décrire avec ses mots des situations. Exemple:


Feature: code-breaker starts game

As a code-breaker
I want to start a game
So that I can break the code

Scenario: start game
Given I am not yet playing
When I start a new game
Then I should see "Welcome to Codebreaker!"
And I should see "Enter guess:"
Cucumber va traduire les termes :'given', 'when' 'then' en scénario de test de type RSPEC.
Ce DSL existe en version française.

(ressource: http://blog.octo.com/cucumber-pour-les-railers/)



Pour terminer, il convient de signaler que cucumber fonctionne avec watir et selenium qui sont deux outils complémentaires de test fonctionnel


(synthèse des composants: cliquer pour agrandir)



Il est plaisant de voir ces outils envahir le monde Java. C'est par ce moyen que Ruby
penetre dans les entreprises.

vendredi 28 janvier 2011

Les ventes de livre au format électronique en plein essort



Amazon a annoncé que pour la première fois de son histoire, le nombre de vente de livre au format électronique a dépassé celui des versions imprimées des livres de poches.
(en moyenne 115 pour 100)
http://mashable.com/2011/01/27/kindle-books-outselling-paperbacks/

mercredi 26 janvier 2011

Administration d'une application Rails avec typus


Typus est un gem pour le cadriciel Ruby on Rails qui permet simplement de définir des rôles et des permissions sur une application notamment pour les applications CRUD. Typus se définit comme : "Admin Panel for Ruby on Rails applications". Le lien vers github est ici.
La démo en ligne est ici.
Les permissions sont gérées par des ACL stockées dans des fichiers YAML.

mardi 25 janvier 2011

Visualiser votre réseau social sous LinkedIn





Le labo de LinkedIn met un votre disposition un outil permettant de visualiser le maillage de son réseau social.
Le lien est ici.
Le préalable est bien sur d'etre un utilisateur de LinkedIn.

lundi 24 janvier 2011

Validité d'un numero de carte de crédit

Une méthode pour vérifier la validité d'un numero de carte bancaire est exposée sur cette infographie trouvé sur le site :http://www.labnol.org/home/understand-credit-card-numbers/18527/

Cette méthode est PUBLIQUE , il n'y à rien de malicieux dans cet article.

Cet algorithme est utilisé sur la plupart des sites de commerce pour un premier contrôle de validité avant la sollicitation du gestionnaire des paiements

Le principe est simple;: on groupe les chiffres deux à deux en partant de la droite.
On double le premier de la paire et on lui ajoute le second.
On ajoute tous les chiffres. Le numéro de carte est valide si la somme est divisible par 10.
exemple avec un numéro réduit :
93 15 => (9*2 + 3) et (1*2 + 5) = 21 et 7 => 2+1+7 = 10 (c'est un numéro valide de carte bancaire, à compléter avec les autres chiffres) )

exemple complet avec un numéro de carte invalide
4417 1234 5678 9112:

Step 1: 8 4 2 7 2 2 6 4 10 6 14 8 18 1 2 2
Step 2: 8+4+2+7+2+2+6+4+1+0+6+1+4+8+1+8+1+2+2 = 69
Step 3: 69 % 10 != 0





La solution en ruby est :

puts eval( ARGV.join.gsub(/(\d)?(\d)(?=(?:\d\d)*\d$)/) do
"#{$1 + '+' if $1}#{($2.to_i * 2).to_s.split('').join('+')}+"
end ) % 10 == 0 ? "Valid" : "Invalid"

Solution trouvée sur http://www.rubyquiz.com/quiz122.html

lundi 17 janvier 2011

Deux projets majeurs dans linux magazine



Dans le numéro (134) de janvier 2011 de Linux Mag, deux articles méritent une attention particulière.

SONAR

Le projet SONAR (lien ici) qui permet de mesurer la qualité du code. En partant d'une charte de bonnes pratiques, le système verifie le respect de ces normes dans le code. Il est utilisé principalement pour des projets JAVA ou PHP.
Le détail qui tue dans l'article: pour la partie restitution (web) , SONAR utilise Ruby on Rails...

Pour ma part ma vision du bon code est la suivante:




Puppet


Le projet Puppet (lien ici) gère de manière centralisée des configurations de machine. Il utilise des templates 'erb' comme patron. Bref Puppet est un projet en Ruby.
(erb: Embedded RuBy ).

2011

2011 sera l'année du Cloud et donc de ruby qui couplé à Rails s'impose comme la solution simple de déploiement dans un nuage.