jeudi, décembre 22, 2005

Java vers Ruby

Un petit post avant de partir en vacances... Les erreurs à éviter quand on passe de Java à Ruby.
Il y a certains choses avec lesquelles je ne suis pas d'accord (ex: tout sur la même ligne séparé par des points-virgules, beurk, c'est pas lisible du tout!) mais il y en a d'autres interessantes...
Bonnes Fêtes!

jeudi, décembre 15, 2005

Rails 1.0 et autres liens

Vous êtes surement déjà au courant mais Rails 1.0 est sortit! Pas encore eu le temps d'installer/tester mais dès que je peux je m'y met ;)
Sinon voilà quelques liens utiles (certains vu sur la mailing list ruby-fr):
Technorati tags:

jeudi, décembre 08, 2005

[Rails] Faire une redirection

Dans le controleur, une fois les traitements terminés, on veut généralement aller vers une page:
redirect_to(:action => 'display_cart')
ou
redirect_to(:controller => 'admin')

mercredi, décembre 07, 2005

Comment ouvrir et regarder le contenu d'une page html

Voilà un petit script bien simple pour ouvrir une page html et recupérer les lien de type image:
require 'net/http'

h = Net::HTTP.new('www.pragmaticprogrammer.com', 80)
resp, data = h.get('/index.html', nil)
if resp.message == "OK"
  data.scan(/<img src="(.*?)"/) { |x| puts x }
end
J'adore la simplicité de ruby !
Technorati tags:

[Rails] Les clef étrangères - la suite

Dans mon article précédent sur les clefs étrangères dans Rails, j'ai oublié de décrire l'autre partie de la relation 1(user)-n(items)...
Ne vous inquiétez pas, c'est moins compliqué qu'un fichier de mapping hibernate ;)
Il suffit d'ajouter:
class User < ActiveRecord::Base
 has_many :items
end
Grace a ça on peut tout simplement faire dans le test unitaire par exemple:
items(:chat).user.email
ou
users(:julien).items[0].description
Technorati tags:

mardi, décembre 06, 2005

[Rails] Les différences entre les serveurs


Facilité de configuration Vitesse Montée en charge (Scalability)
WEBRick ***** ** *
Apache-CGI **** * **
Apache-fcgi * **** ****
lighttpd-fcgi ** ***** *****

Rem: les caractéristiques de ces serveurs peuvent avoir changées depuis la rédaction de cette article...
Technorati tags:

[Rails] Arborescence de répertoire

Si on lance la commande suivante:
ruby script/generate scaffold Product Admin list show
On obtient les fichiers suivants: Et donc l'arborescence suivante sous app/:
Les fichiers pour les tests unitaires et fonctionnels sont créés sous test/* - ce qui est génial quand on aime faire du TDD(Test Driven Development) comme moi ;)

jeudi, décembre 01, 2005

vendredi, novembre 25, 2005

[Rails] Internationalisation

Dans un autre post, je croyais à cause de cette page (que je vais mettre à jour) que rails n'était pas internationalisable pour l'instant.

En fait c'est faux, apparement c'est déjà fait sous forme de plugins.
J'en ai trouvé 2 (que je n'ai pas testés):

[Rails] Valider un email

Je me doutais bien que quelqu'un l'avait déjà fait mais comme j'ai eu un peu de mal à trouver... voici le lien vers la doc de rails et le bout de code qui va bien (dommage que ce validateur n'existe pas par defaut dans la liste des validateurs):

class User < ActiveRecord::Base
  validates_format_of :email, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/, :message => "est invalide"
end

jeudi, novembre 24, 2005

[Rails] Comment faire un formulaire multipart/form-data

Dans la page rhtml du formulaire:
<%= start_form_tag ({:action => 'index'}, {:multipart => true, :method => 'POST'}) %>
Plus d'informations sur les paramètres de start_form_tag et form_tag
Technorati tags:

mercredi, novembre 23, 2005

[Rails] Les clefs étrangères

Avec Rails la plupart des choses se passent de manière transparente mais dans le cas des clefs étrangères, il y a une petite actuce en plus ;)
Imaginons 2 tables dans la base de données:
products [id, text, ...]
line_items[id, product_id, text, ...]
Il faut 2 choses:
  1. appeller la colonne avec la clef étrangère product_id (en plus de la contrainte dans la basse de données)
  2. ajouter une ligne supplémentaire à la classe: LineItem
class LineItem < ActiveRecord::Base
belongs_to :product
end

[Rails] un (super) petit helper pour les stylesheets css

Bien que je trouve l'idée des css excellente, un jour où l'autre on se retrouve perdu entre tous les styles. Le mieux est de re-organiser les styles entre eux et dans des fichiers séparés...
C'est exactement à ça que sert ce petit script:
def stylesheet_auto_link_tags
  stylesheets_path = "#{RAILS_ROOT}/public/stylesheets/" 
  candidates = [ "#{controller.controller_name}",
                  "#{controller.controller_name}_#{controller.action_name}" ]

  candidates.inject("") do |buf, css| 
    buf << stylesheet_link_tag(css) if FileTest.exist?("#{stylesheets_path}/#{css}.css")
    buf
  end
end
à ajouter dans application_helper.rb. Après il suffit de rajouter dans la page:
<%= stylesheet_auto_link_tags %>
"Automagically" ça va chercher la css qui porte le nom du controller ou du controller_action. Exemple: admin.css
En combinant ça avec la fonction @import dans admin.css:
@import "scaffold.css";
on nage en plein: DRY (Don't Repeat Yourself) - génial :)

lundi, novembre 21, 2005

[Rails] Comment Rails gère les pluriels

Surement LA fonctionnalité de Rails qui m'a le plus impressionnée!!

Rails se base sur des conventions de nommage notament le singulier et le pluriel.
Mais Rails est intellignent! Car il gère aussi les cas particuliers des pluriels (en anglais).

Un tableau extrait de "Agile Web Development with Rails" :
Class NameTable Name
Orderorders
TaxAgencytax_agencies
Batchbatches
Diagnosisdiagnoses
LineItemline_items
Personpeople
Datumdata
Quantityquantities

C'est pour cette raison qu'il vaut mieux, pour les noms des tables et des composants en interne, utiliser des mots anglais pour être sûr de ne pas avoir de mauvaises surprises.
Oiseau/oiseaux risque de ne pas fonctionner à moins que quelqu'un fasse une extension française pour Rails...

Par contre, il semble que les applications Rails ne soient pas encore internationalisable, ca ne devrait pas tarder ;)

Technorati tags:

dimanche, novembre 20, 2005

[Rails] Convention de nommage

Pour les conventions qui concerne Ruby voir mon autre post: Convention de nommage en Ruby.

Les actions suivent la même convention que les variables.
Les noms de tables sont comme les noms de variables mais au pluriel (ex: orders ou third_parties).
Les noms de fichiers comme les noms de variables.

Tableau extrait de "Agile Web Development with Rails" :
Model
Tableline_items
ClassLineItem
Fileapp/models/line_item.rb

Controller
URLhttp://.../store/list
ClassStoreController
Fileapp/controllers/store_controller.rb
Methodlist()
Layoutapp/views/layouts/store.rhtml

View
URLhttp://.../store/list
Fileapp/views/store/list.rhtml (or .xml)
Helpermodule StoreHelper
Fileapp/helpers/store_helper.rb

Technorati tags:

Les conventions en Ruby (la suite)

La suite du premier post sur les conventions de nommage en ruby.
Ce qui se trouve entre {} ou do ... end est un bloc de code.
Par convention on met entre {} quand le code tient sur une ligne.
exemple:
{puts "Hello"}

On utilise do ...end si ça tient sur plusieurs lignes:
do
 puts "Hello"
 puts "World!"
end

Et toujours:FrederickRos dans les commentaires me fait remarquer la page suivante: http://www.rubygarden.org/ruby?RubyStyleGuide

Technorati tags:

vendredi, novembre 18, 2005

Ruby Cheat Sheet

C'est en anglais mais c'est court (6 pages) et simple.
Technorati tags:

Scaffolding

Scaffold par ci, scaffold par là... dans Rails ce terme anglais a beaucoup d'importance! Donc autant savoir ce que cela veut dire: échafaudage. La définition dans wikipédia.

Technorati tags:

jeudi, novembre 17, 2005

Convention de nommage en Ruby

Venant du monde "Java", une des première chose que j'ai cherché à savoir, c'est "Comment nommer mes variables/methodes/classes", histoire de coller à la convention de la communauté ;)

Mais, contrairement à java, j'ai eu du mal à trouver! Ca n'a pas l'air d'être aussi clairement définit...
Heureusement Dave Thomas l'explique dans "Agile Web Development with Rails":

TypeRègleExemple
variable et méthodetout en minuscule et séparé par des underscorepage_number
classe et modulechaque début de mot en majuscule et tout attachéPersonAccount ou Test::Unit

Update: FrederickRos dans les commentaires me fait remarquer la page suivante: http://www.rubygarden.org/ruby?RubyStyleGuide

Technorati tags:

mercredi, novembre 16, 2005

[Rails] La coloration syntaxique pour les fichiers rhtml dans eclipse

Update: Je viens de m'apercevoir que radrails est en version 0.4 et que je n'ai que la version 0.2 et pourtant lorsque j'update mes plugins dans eclipse... la mise à jour ne m'est pas proposée!!

En fait il ont changé leur adresse d'update site mais l'ancienne marche toujours!!!
Donc le nouveau update site de radrails est: http://download.radrails.org/update (l'ancienne était: http://www.radrails.org/update).
Il aurait dû enlever l'ancienne pour au moins avoir une erreur!

Je laisse l'ancien post pour mémoire... mais ca ne sert plus à rien.

Pour l'instant le plugin radrails pour eclipse ne fait pas la coloration syntaxique des fichiers rhtml.
Mais comme ces fichiers ressemblent beaucoup à des jsp, on peut avantageusement utiliser l'editeur de JSP de eclipse webtools (pour cette exemple il vous faut une version de eclipse avec cet éditeur, je vous conseille par exemple la wtp-all-in-one-0.7-win32.zip)
Il y a deux étapes:
  1. File associations
  2. Content type

Ajouter le "File associations":

Ajouter le "Content type":

Et voilà! (dans la outline vous verrez jsp:expression ou scriplet quand vous fait du ruby entre <%...%> mais bon c'est mieux que rien ;)
Technorati tags:

Eclipse et Ruby (RDT, RadRails, les "update sites")

Quand j'ai commencé à apprendre Ruby, j'ai utilisé dans un premier temps FreeRIDE, c'est gentil/pas gros en mémoire et rapide mais pas très beau et limité en fonctionnalités.

Comme j'aime bien eclipse j'ai cherché une plugin pour Ruby et j'ai trouvé rubyeclipse alias RDT :)
J'aime bien (mais le choix de l'IDE est un choix très personnel), le plugin est encore un peu jeune mais la mailling list est très active en ce moment et RadRails ce base dessus.
Malheurseusement les Tests Unitaires dans eclipse avec la version 0.5 de RDT ne foncntionnaient pas, j'ai dû updater ma version avec la dernière nightly build 0.6.xxxx.
Mais j'ai vu que les petits gars de RDT ont des tests unitaires qui sont tous au vert donc je leur fait confiance sur la qualité des nightly builds :)

RadRails est une surcouche graphique pour Rails dans eclipse. Il est encore plus jeune que RDT mais il permet déjà de créer un projet de zéro et de lancer les commandes du type
ruby script/generate ...
au travers de wizards dans eclipse.

La liste des update-site pour eclipse:

Trac

L'équivalent de Bugzilla / Jira / ... en Python (mais utilisé par la communauté Ruby) s'appelle Trac.
Il est plus beau et plus lisible que Bugzilla ... à voir à l'utilisation.

Hieraki

Une application qui a l'air très bien faite pour faire des manuels utilisateurs ou developpeurs (les 2 documentations vraiment indispensables à mes yeux): Hieraki.
Pour se faire une idée, il suffit d'utiliser l'exemple live un peu fouilli à cause des tests de tout le monde (mais surtout avec un peu d'AJAX dans la search box en haut à gauche!!) ou de regarder un des sites en utilisation réel: c'est beau et clair!

lundi, novembre 07, 2005

[Rails] Introduction en français

Pour ceux qui préfère une introduction dans notre bonne vieille langue...

jeudi, novembre 03, 2005

Back to ruby (and Rails)

Allez hop, après quelques mois de pause pour cause de boulot, je me remet un peu à ruby et surtout je commence à apprendre rails pour de bon!

Evidement j'avais déjà fait le classique tutorial video de 15min (excellent pour démarrer!), mais là je dois m'y mettre plus sérieusement vu que julien m'a prété son bouquin "Agile Web Development with Rails" et que je dois lui rendre avant le 10 novembre.
Du coup j'ai plein de sujets très variés mais toujours liés à ruby à traiter dans ce blog! J'ai déjà quelques idées sur les prochains posts...(pas forcément dans cet ordre)
  • Eclipse et Ruby (RDT, RadRails, les "update sites")
  • Les Tests Unitaires en ruby
  • L'héritage
  • Les modules
  • Le mot clef: "require"
  • [Rails] Rails et les checkbox!
  • [Rails] Rails et MySQL
  • [Rails] Les outils pour MySQL
  • [Rails] Quelques critiques de Rails (notament sur le systèmes de "convention over configuration" qui implique certaines choses dont il faut être conscient avant de s'embarquer dans des développements)
  • [Rails] Les bonnes pratiques
  • [Rails] Les conventions de nommages (et les erreurs à éviter...)
Rem: c'est dommage que blogger ne fasse pas de catégories comme dotclear, ça m'aurait simplifié la vie pour mes posts concernant Rails. Je pourrais ouvrir un nouveau blog mais je trouve ça un peu "overkill" juste pour quelques articles sur rails

Les regexp et $

Quelque chose que j'oublie à chaque fois avec les regexp, c'est le nom et les valeurs contenues par les variables "$" après une regexp !!
Exemple:
C:\ruby>irb
irb(main):008:0> line = "xxxRubyzzz"
=> "xxxRubyzzz"
irb(main):009:0> line =~ /Ruby/
=> 3
irb(main):011:0> $`
=> "xxx"
irb(main):010:0> $'
=> "zzz"

lundi, octobre 10, 2005

Ruby au Japon

Il y avait une réunion récemment des rubyist japonnais, RedHanded en fait un petit résumé. Le plus intéressant est la vidéo, bon je comprend pas le japonnais mais c'est marrant :)
Une raison supplémentaire de passer à ruby: c'est dépaysan!

mardi, septembre 27, 2005

Jabber en Ruby

Pour envoyer des messages jabber en ruby, rien ne vaut une petite librairie toute faite: jabber4r. Il suffit de téléchager le .gem, de se mettre dans le répertoire:
gem install jabber4r
et hop suffit de copier coller les exemples...

vendredi, août 26, 2005

Je suis sur Gentoo Forums

C'est marrant en regardant la provenance des gens sur mon site je suis tombé sur quelqu'un qui met un lien vers mon site dans un forum. Je trouve ca sympa qu'on me "cite" :)
Il y a aussi RubyFr, et puis ce blog
On parle de moi sur le blog Play'sWeblog et Play'sWeblog Old aussi.
ps: Voilà mon ego a parlé ;)

mercredi, août 24, 2005

Apprendre ruby en chanson!

C'est vraiment n'importe quoi mais il y a quelqu'un qui a fait des chansons pour apprendre le ruby! http://www.poignantguide.net/sdtrk/ ps: si vous ne pouvez pas le supporter plus de 1 min c'est normal ;)

jeudi, juin 30, 2005

Les blocks c'est fort!

Au début je ne pensais les utiliser trop souvent et en fait on en trouve un peu partout (exemple: IO.foreach).
Je n'ai pas encore eu besoin d'écrire de fonction qui utilise cette fonctionnalité moi même mais j'ai quand meme voulu essayer et il faut bien avouer que c'est sympa!
Ca permet d'injecter des instructions dans une méthode. Comme je ne suis peut être pas assez clair, voilà un exemple:
def yield_back_at_me
  2.times do
    yield
    puts "------"
  end
end

yield_back_at_me {puts "coucou"}
Résultat:
coucou
------
coucou
------

Un fichier ou un répertoire ?

D'abord on va lister ce qu'il y a dans un répertoire:
Dir.foreach("/Temp") {|item| puts item}
Comment savoir si on a trouvé un répertoire ou un fichier ?
Evidement il faut que le répertoire "Temp" et le fichier "temp.txt" existe sur votre disque dur ;)
puts File.file?("/Temp/temp.txt")
puts File.file?("/Temp/.")
puts File.file?("/Temp/")
puts File.file?("/Temp")
Résultat:
true
false
false
false

mardi, juin 28, 2005

Créer et écrire un fichier

Voici 2 manières de créer un fichier et écrire dedans (je ne sais pas laquelle est la meilleure!)
File.open("/mon_chemin/testfile.txt", File::CREAT|File::RDWR) do |aFile|
  aFile << "test"
end
ou
file = File.open("/mon_chemin/testfile.txt", File::CREAT|File::RDWR)
file  << "test"
file.close

vendredi, juin 24, 2005

Aide et Documentation

Comme je ne connais pas encore les methodes et objets en ruby, la documentation de référence est bien pratique.

Une autre astuce bien pratique pour savoir le type de l'objet qu'on manipule:
irb(main):001:0> test = 1
=> 1
irb(main):003:0> test.class
=> Fixnum

jeudi, juin 23, 2005

Afficher toutes les lignes d'un fichier en 1 ligne!

En 1 ligne, comment ouvrir un fichier en lecture, lire chaque ligne, les afficher et fermer le fichier!
IO.foreach("mon_fichier.txt") { |line| puts line }

mercredi, juin 15, 2005

Quelques astuces

Un article interessant en anglais: http://www.magpiebrain.com/archives/2005/06/15/java_to_ruby2
Variables statiques (ou de classes): @@ma_variable
task.completed? renvoie true ou false
"if some_value != 0" equivalent à "unless some_value == 0"

jeudi, avril 28, 2005

attr_reader, attr_writer et attr_accessor

Comme me la fait remarquer Frederick Ros dans les commentaires de une classe simple, on aurait put utiliser un attr_writer au lieu de faire la methode remplaceBonjour. Ben c'est ce que nous allons faire ;)
class BonjourClasse

  attr_writer :bonjour
  
  def initialize
    @bonjour = "bonjour"
  end

  def ditBonjour
    return @bonjour
  end
  
end

classe = BonjourClasse.new
puts classe.ditBonjour
classe.bonjour="test"
puts classe.ditBonjour

Résultat:
C:\ruby\rubyscube>ruby bonjour_classe_attr.rb
bonjour
test

Si on remplace attr_writer :bonjour par attr_reader :bonjour, on obtient:
C:\ruby\rubyscube>ruby bonjour_classe_attr.rb
bonjour
bonjour_classe_attr.rb:17: undefined method `bonjour=' for # (NoMethodError)

mercredi, avril 27, 2005

Une Classe simple

Voila une petite classe simple qui dit bonjour, la variable avec @ est une variable d'instance.
class BonjourClasse

  def initialize(nom)
    @bonjour = "bonjour"
    @nom = nom
  end
  
  def ditBonjourToutLeMonde
    return @bonjour + " tout le monde"
  end
  
  def ditBonjourEtMonNom
    return @bonjour + " " + @nom
  end
  
  def remplaceBonjour=(nouveauBonjour)
    @bonjour = nouveauBonjour
  end

end

classe = BonjourClasse.new("moi")
puts "Pour tout le monde: \t" + classe.ditBonjourToutLeMonde
puts "Pour moi: \t\t" + classe.ditBonjourEtMonNom

classe.remplaceBonjour = "test"
puts "Pour tout le monde: \t" + classe.ditBonjourToutLeMonde

Résultat:
C:\ruby\rubyscube>ruby bonjour_classe.rb
Pour tout le monde:     bonjour tout le monde
Pour moi:               bonjour moi
Pour tout le monde:     test tout le monde

lundi, février 28, 2005

Iterateur

Comment parcourir un tableau ordonné? Par exemple de la manière suivante:
villes = [ "Toulouse", "Paris", "Lille", "Nice" ]
villes.sort.each do |ville|
    puts ville
end
Résultat:
C:\ruby\rubyscube>ruby iterator.rb
Lille
Nice
Paris
Toulouse

Manipulation de tableaux

Excellent, on peut manipuler des tableaux très facilement, exemple:
adresses = [ 
  [ 17, "Boulevard de la Sauvenière" ], 
  [ 2, "Place de la République Française"], 
  [ 19, "Rue de la Renaissance"] 
]
adresses += [ [ 3, "Rue de la paix" ] ]
adresses -= [ [ 17, "Boulevard de la Sauvenière" ] ]
puts adresses.sort

Résultat:
C:\ruby\rubyscube>ruby tableau_sort.rb
2
Place de la RÚpublique Franþaise
3
Rue de la paix
19
Rue de la Renaissance

vendredi, février 25, 2005

Tableau à 2 dimensions

Voila comment parcourir un tableau à 2 dimensions:
nombres = [[0, "zero"], [1, "un"], [2, "deux"], [3, "trois"]]
i = 0
while i < nombres.length
  j = 0
  puts "-> Nombre: "
  while j < nombres[i].length
    puts nombres[i][j].to_s
    j += 1
  end
  i += 1
end

Résultat:
C:\ruby\rubyscube>ruby tableaux_2dimensions.rb
->Nombre:
0
zero
->Nombre:
1
un
->Nombre:
2
deux
->Nombre:
3
trois

Condition if - else

C'est simple voilà comment faire:
puts "Combien font 2 + 2"
resultat = gets.chomp
if (resultat.to_i == 4)
  puts "bon résultat"
else
  puts "mauvais résultat"
end
Rem: on peut aussi utiliser elsif dans certains cas (à utiliser avec parcimonie).

Saisir des données

Pour récupérer les données saisies par un utilisateur:
puts "Quel temps fait-il?"
temps = gets
puts "Je suis content d'apprendre qu'il fait: " + temps

Résultat:
C:\ruby\rubyscube>ruby question.rb
Quel temps fait-il?
beau
Je suis content d'apprendre qu'il fait: beau
Rem: gets.chomp retire le \n (retour charriot) à la fin de la saisie.

Commentaires

Les commentaires en ruby commencent par #, exemple:
print "ligne1\n" # commentaire 1
print "ligne2\n"
# commentaire 2
print "ligne3"

Résultat:
C:\ruby\rubyscube>ruby commentaires.rb
ligne1
ligne2
ligne3

Constantes

Les contantes sont repérées parce qu'elles commencent par une majuscule, exemple:
C:\ruby\rubyscube>irb
irb(main):001:0> Constante = "ma constante"
=> "ma constante"
irb(main):002:0> Constante = "ma nouvelle constante"
(irb):2: warning: already initialized constant Constante
=> "ma nouvelle constante"
alors que dans le code suivant la variable n'est pas une constante donc ça marche:
irb(main):003:0> constante = "ma constante"
=> "ma constante"
irb(main):004:0> constante = "ma nouvelle constante"
=> "ma nouvelle constante"
Donc attention aux majuscules ça a de l'importance... Le mieux c'est de mettre tous les noms des constantes en majuscule, exemple:
irb(main):005:0> CONST = "ma constante"
=> "ma constante"
irb(main):006:0> CONST = "ma constante2"
(irb):6: warning: already initialized constant CONST
=> "ma constante2"

Afficher l'alphabet

Pour afficher l'alphabet sans saisir toutes les lettres:
letter = "a"
26.times do
  print letter + " "
  letter = letter.next
end

Résultat:
C:\ruby\rubyscube>ruby alphabet.rb
a b c d e f g h i j k l m n o p q r s t u v w x y z

Transformation de chaines de caractères

print "Bonjour\n".upcase
print "Bonjour\n".downcase
print "Bonjour\n".next
print "BoNjOuR\n".swapcase
print "Bonjour".reverse

Résultat:
C:\ruby\rubyscube>ruby string_methods.rb
BONJOUR
bonjour
Bonjous
bOnJoUr
ruojnoB

Nombre long et grand

On peut écrire les chiffres long de la manière suivante pour plus de lisibilité:
irb(main):014:0> 192_500_400_300_200_100
=> 192500400300200100
irb(main):015:0> 192_500_400_300_200_100 - 1
=> 192500400300200099

jeudi, février 24, 2005

Interactive ruby shell - IRB

On peut lancer ruby comme une ligne de commande en tapant:
C:/ruby/rubyscube>irb
irb(main):001:0> 1 + 1
=> 2
irb(main):007:0> 3-1
=> 2
irb(main):008:0> 2*2
=> 4
irb(main):012:0> 3.0 / 2.0
=> 1.5
C'est encore mieux que l'option -e!

mercredi, février 09, 2005

De l'interet de l'option -e de ruby pour les batchs

Sous Unix les batch ont des possibilités très étendues mais sous windows on atteind souvent très vite les limites du bon vieux Dos!

Mais on peut profiter de la puissance de ruby pour faire plus de chose dans ses .bat.

Prenons un exemple simple. Notre batch:
@echo off
ruby -e 'print "Voici l\'emplacement de mon jdk: %JAVA_HOME%"'
On obtient:
C:\ruby\rubyscube>batch_option_e.bat
Voici l'emplacement de mon jdk: C:\Sun\Java\j2sdk1.4.2_04

Ca permet de passer des arguments à un programme ruby sans avoir besoin de créer un fichier et de lui passer des paramètres!

Comment publier un lien sur le wiki de Ruby Garden

Si on essaye de taper un lien en http://quelquechose sur la page du wiki de rubygarden on est systématiquement redirigé vers cette page: External links.
Comment faire quand on est débutant en ruby ?!
Créer un fichier wiki_garden_link.rb, par exemple, contenant le code suivant:
  def fix_external_link(url)
    url.sub(/^[^:]+:/) { |p| p.upcase }
  end
  
  print fix_external_link("http://rubyscube.blogspot.com")

Le lancer en faisant sous dos:
C:\ruby\rubyscube>ruby wiki_garden_link.rb
Et voilà suffit mainteant de copier le lien correctement formaté dans la page.

Utilisateurs français

Voici une page avec les utilisateurs français de ruby.
Je l'ai mise à jour pour que les liens vers les sites web externes remarches, la page ne pouvait plus être éditée parce qu'ils avaient mis en place un système anti-spam de wiki.

SyntaxHighlighter pour Ruby

Vu que je compte mettre pas mal d'exemples de code sur ce site j'ai décidé d'utiliser l'excellent javascript: SyntaxHighlighter pour formater le code sur les pages.
Malheursement la syntaxe ruby n'est pas supportée alors je l'ai ajoutée ;)
J'ai envoyé le source au créateur j'espère qu'il va l'intégrer dans le zip à télécharger :)
Si ca interesse quelqu'un je peux lui envoyer par zip la version modifiée.
Envoyez moi un mail à cette addresse (ne soyez pas trop pressé svp, je ne relève pas cette boite tous les jours)

Un petit exemple d'utilisation (ce code est tiré des exemples fournit avec Ruby):
#!/usr/bin/env ruby

require 'logger'

logfile = 'shifting.log'
# Max 3 age ... logShifting.log, logShifting.log.0, and logShifting.log.1
shift_age = 3
# Shift log file about for each 1024 bytes.
shift_size = 1024

log = Logger.new(logfile, shift_age, shift_size)

def do_log(log)
  log.debug('do_log1') { 'd' * rand(100) }
  log.info('do_log2') { 'i' * rand(100) }
  log.warn('do_log3') { 'w' * rand(100) }
  log.error('do_log4') { 'e' * rand(100) }
  log.fatal('do_log5') { 'f' * rand(100) }
  log.unknown('do_log6') { 'u' * rand(100) }
end

(1..10).each do
  do_log(log)
end

puts 'See shifting.log and shifting.log.[01].'
update déc 2007: Je ne l'utilise plus maintenant and syntaxhighlighter à beaucoup changé depuis que j'ai fait ce post...

mardi, février 08, 2005

Bonjour le monde! (super simple)

Avec l'installation de ruby vous trouver plusieurs Hello word! mais on peut faire encore plus simple!

Créer un fichier hello_simple.rb (et oui les fichiers ruby se finissent par .rb !)

Avec bloc note ou quelque chose dans le genre tapez:
print "Bonjour le monde!"
Enregistrer

Hop! sous dos:
C:\ruby\rubyscube>ruby hello_simple.rb

Comme par magie:
C:\ruby\rubyscube>ruby hello_simple.rb
Bonjour le monde!
C:\ruby\rubyscube>

Si c'est pas simple çà!

Installer ruby

Rien de plus simple, un projet RubyInstaller existe juste pour vous simplifer la vie sous Windows!
Vous trouver un installer qui va s'occuper de tout.

Pour des raisons de simplicité je l'ai installé sous c:\ruby (plus rapide à taper sous dos au cas où).

Bienvenue sur Ruby’s Cube

Ce site est consacré à l’apprentissage de Ruby le langage de programmation pas le rubik’s cube ;-)
D’ailleurs si vous vous êtes égaré vous pouvez retrouver votre cube à facette préféré sur ce site.

Plus sérieusement, j’avais besoin de connaître un autre langage que Java notamment pour faire de petits programmes rapidement pour manipuler des chaînes de caractères et du texte.
  • J’ai pensé à Perl mais la synthaxe devient vite complexe.
  • J’ai hésiter entre Python et Ruby, Ruby étant plus récent j’ai opté pour celui-là ! (et voilà)

Ce blog est donc mon évolution au jour le jour dans le monde solitaire des mines de ruby :-)

Vous trouverez des exemples de codes avec des explications.

Pourquoi en français, 3 raisons:
  • j'ai déjà un blog personnel en anglais
  • il y a déjà pleins de très bon sites anglais qui traitent le sujet
  • mon but est de m'amuser et si possible de faire un peu plus connaître Ruby en france

Je vous conseille de connaître plus d'un langage de programmation, pour votre culture personnel mais aussi parce que certains langages sont plus adaptés et plus efficaces que d'autres pour certaines taches.
Ce conseil je l'ai lu dans l'excellent livre Pragmatic Programmer que je vous conseille aussi.

Allez on commence!