mardi, mai 22, 2007

RailsConf 2007

Il y a un "je ne sais quoi" de différent dans ces conférences Rails par rapport à JavaOne ou ApacheCon ;)
ps: Un petit troll pour le plaisir :D
ps2: N'empeche j'aurai bien aimé être à l'une de ces conf, je dois être jaloux ;)
Technorati tags:

dimanche, mai 20, 2007

Tutorial sur les Caches dans Rails (où on apprend que IBM se met à Ruby)

Un bon article sur l'utilisation des différents caches dans Rails. Concernant l'article, l'auteur ne se limite pas qu'à Rails mais couvre aussi l'utilisation d'Apache pour ne pas servir certains fichiers et délester le server Mongrel d'un certains nombres de requêtes. C'est plutôt une vue d'ensemble mais ca permet de se faire une petite idée des optimisations possibles...

Mais ce que je trouve intéressant c'est que IBM s'interesse à Rails. J'entend souvent l'argument que Rails va remplacer Php. Je trouve que c'est réducteur, au contraire Rails a également pour cible et utilisateurs tous les "déçus" de Java dans les entreprises qui trouvent que pour faire des choses simples il faut trop souvent sortir l'artillerie lourde....

IBM est l'entreprise typique qui cible les sociétés plus ou moins grosses, que des articles apparaissent sur son site à propos de rails montre 2 choses d'après moi:
  • plus de "décideurs" vont entrendre parler de rails
  • IBM doit penser qu'il y a de l'argent à se faire dans ce secteur
Ruby/Rails ne remplacera surement pas Java dans l'entreprise mais je pense qu'il y a une petite place au soleil à se faire ;)

Technorati tags:

jeudi, mai 10, 2007

SAP4Rails

Si ça: sap4rails, c'est pas "entreprisey" ;)
Pour une explication plus complète et intéressante de "entreprisey", je conseille l'article de Martin Fowler (Le guru barbu).
disclaimer: je ne connais rien a S.A.P
Technorati tags:

mardi, mai 08, 2007

Les ventes de livres toujours à la hausse

O'Reilly avait déjà plublié un état des ventes de livres (notamment concertant Ruby) l'année dernière, voilà une petite mise à jour pour l'année en cours... et ça continue :)

lundi, avril 23, 2007

Lightweight people vs Diligent people

Au début on se dit "tiens encore une de ces videos/présentation power point" et puis en fait elle est assez drôle...
Technorati tags:

jeudi, mars 08, 2007

Créer un classpath automatiquement

# generate env.bat with all lib/*.jar

classpath=""
Dir["lib/*.jar"].each do |filename|
  classpath << filename + ';'
end
classpath << "bin"

File.open("env.bat", File::CREAT|File::RDWR) do |aFile|
  aFile << "SET CLASSPATH=" + classpath
end
Technorati tags:

jeudi, décembre 21, 2006

Renommer ses divx en ruby

On m'a mis au défit de faire un script pour renommer un ensemble de divx dont le nom de fichier ressemble à [qqchose]01[autrechose]02[encore_qqchose].[une_extension]:
require 'ftools'
require 'fileutils'

from_directory = "divx"
to_directory = "divx_renamed"
extentions = %w{.srt .avi .mov .wmv}
prefix = "lost"
pattern = /[0-9]{2}/

Dir.mkdir(to_directory) unless File.exist?(to_directory)

Dir.foreach(from_directory) do |filename|
  fullpath = from_directory + '/' + filename
  file_ext = File.extname(fullpath)
  if (File.file?(fullpath) && extentions.include?(file_ext))
    puts "Changing: " + filename + "..."
    # *[0-9]{2}*[0-9]{2}.ext
    basename =  File.basename(fullpath, file_ext)
    basename =~ pattern
    season = $&
    # match against the rest of the basename
    $' =~ pattern
    episode = $&
    new_basename = prefix + "-s" + season + "-e" + episode
    puts new_basename
    File.copy fullpath, to_directory + '/' + new_basename + file_ext
  end
end
Si vous avez des idées pour le rendre plus court (mais toujours lisible)... les commentaires sont les bienvenus ;)
Technorati tags:

Un moteur de templates en 5 min!

Problème: J'avais besoin de faire n fichiers dont le nom changeait à chaque fois en fonction d'une variable, la même variable était réutilisé dans mon fichier.
Solution:
  • Copier/coller pendant 10 min (argh...)
  • Utiliser un éditeur (vim, emacs, ultraedit etc..)
  • Un petit script ruby
Typiquement c'est un cas d'utilisation d'un template. En java j'aurait du créer un projet, choisir entre Velocity, FreeMarker, ajouter la lib etc... trop long! Le copier/coller était plus rapide.
Mais en ruby, 1 fichier ruby et une petite astuce que m'a passé edlapoignée ;), il m'a fallu 5 min chrono! J'adore Ruby!
Créer 4 fichiers (recette-tomate.xml, recette-carotte.xml, recette-navet.xml, recette-laitue.xml) avec le nom du légume qui change à l'intérieur du fichier:
# beaucoup plus de valeurs dans la realite...
legumes = ["tomate","carotte","navet","laitue"]

legumes.each do |legume|
  File.open("recette-#{legume}.xml", File::CREAT|File::RDWR|File::TRUNC) do |file| 
    content = <<EOF
<?xml version="1.0"?>

<recettes>
    <recette>
        <ingredient>#{legume}</ingredient>
    </recette>
</recettes>
EOF

file << content
  end
end
Technorati tags:

mercredi, novembre 29, 2006

Des sites français en Rails !

Voilà qui va rassurer les DSI sur la viabilité de ruby on rails, les deux sites suivants ont été fait avec ce framework:
Technorati tags:

lundi, novembre 27, 2006

vim vs emacs ;)

La guerre sans-fin la plus inutile du monde a trouvée un nouveau champs de bataille Ruby ;) (dédicace spéciale à philou et jb)
vim vs emacs
Technorati tags:

lundi, novembre 20, 2006

Créer une application rails pour une base de données existantes

Commencer par désactiver la pluralization (je trouve ça plus simple), dans config/environement.rb, ajouter:
ActiveRecord::Base.pluralize_table_names = false
Si dans ma base, j'ai une table files_index:
>ruby script/generate scaffold FilesIndex
Dans app/models/files_index.rb, ajouter:
class FilesIndex < ActiveRecord::Base
  set_primary_key "file_id"
end
Technorati tags:

jeudi, novembre 09, 2006

Activerecord et les clef étrangère (foreign key)

Si vous voulez utilser activerecord sur une base de données existante et qui ne suit pas les conventions "activerecord", vous aurez surement besoin de spécifier le nom de la clef étrangère, voilà comment faire:
class Task < ActiveRecord::Base
  set_table_name "tasks"
  set_primary_key "task_id"
  
  has_many :task_logs, :foreign_key => "task_log_task"
end
class TaskLog < ActiveRecord::Base
  set_table_name "task_log"
  set_primary_key "task_log_id"
  
  belongs_to :task, :foreign_key => "task_log_task"
end
Technorati tags:

Le retour du blogger

Après une petite pause me voici de retour ;)
Comme je l'explique dans mon autre blog, j'ai toujours un petit truc, un article ou un lien à partager avec les copains (et tout ceux que ca peut interesser) mais je trouve que je recois trop de mails donc rss c'est la solution.
On va voir un blog que si on considère qu'on a le temps alors que les mails c'est très intrusif. Je ne considère pas que ce que je raconte soit si indispensable que je doive l'envoyer à tout le monde systématiquement ;)
So lets'go blogging !
Technorati tags:

samedi, juillet 01, 2006

La pause du blogger!

Comme je l'explique sur mon autre blog, j'ai de plus en plus de mal a concilier toutes mes activitées et les blogs (116 posts depuis le début quand même)... donc j'ai décidé de faire une petite pause blogger (peut-être que je reprendrai à la rentrée qui sait...).

Mais avant cette pause, je vais poster tous les articles drafts que j'ai dans les placards... donc attendez-vous à une avalanche de posts dans les prochains jours.
Certains ne sont peut-être pas à jour vu que je les avais écrit quand j'ai lu "agile web dev with rails" version 1 mais je trouve dommage de les avoir écrit et de ne pas les publier ;)

Si vous voyez un article faux ou incorrect n'hésitez pas à laisser un commentaire ;)

Allez bonnes vacances!

vendredi, juin 23, 2006

Comment faire de la documentation en ruby avec RDoc et Rake

C'est très simple, il suffit de créer un fichier Rakefile et de mettre:

# Generate the RDoc --------------------------------
Rake::RDocTask.new { |rdoc|
  rdoc.rdoc_dir = 'doc'
  rdoc.title    = project_title
  rdoc.options << '--line-numbers' << '--inline-source' << '-A cattr_accessor=object'
  rdoc.rdoc_files.include('README', 'CHANGELOG')
  rdoc.rdoc_files.include('lib/**/*.rb')
  rdoc.rdoc_files.include('examples/**/*.rb')
}
Les fichiers README et CHANGELOG sont importants mais simple à faire... (il suffit de suivre la syntaxe de RDoc).
Voilà 2 exemples de ce qu'on peut mettre dedans:
README
== Google Calendar
The Google Calendar project provides 
* Export features (text file, simple html page or excel files), 
* Ruby api's to connect to google calendars 
* A plugin for Ruby On Rails.

== License
GoogleCalendar for Ruby is released under the Apache license.

== Support
http://rubyforge.org/projects/googlecalendar/

== Author
Benjamin Francisoud  - http://rubyscube.blogspot.com
CHANGELOG
= Versions

=== 0.0.2 (June 16th, 2006)
* Refactor googlecalendar to a single rb file
* Add Rakefile
* Add Gem, Zip, Tar packaging
* Add RDoc

=== 0.0.1 (Mai 11th, 2006)
* Started project

= About Versioning
* Version number: major.minor.build
* Compatible release (increment the build number)
* Backward compatible, new feature release (increment minor number)
* Backward incompatible release (increment the major number)


Finallement, le plus important, il suffit de lancer la commande:
>rake rdoc et hop plein de jolies pages html de doc api référence ;)

jeudi, juin 22, 2006

[Rails] Table de correspondance type Ruby et type MySQL

Table de correspondance type Ruby et type MySQL:
Type SQLClasse Ruby
int, integerFixnum
decimal, numericFloat
interval, dateDate
clob,blob,textString
float, doubleFloat
char, varchar, stringString
datetime, timeTime
booleancompliqué...

Cas particulier du Boolean: le problème c'est que pour Ruby tout ce qui n'est pas nil ou la constante false est interprété comme true. Donc si la colonne contient 0 pour dire false, ruby va croire que c'est vrai...
Pour interpréter 0 comme false, il faut ajouter ? à l'attribut, exemple: user.admin? avec admin un colonne type TINYINT.

[Rails] La couleur 1 ligne sur 2

Dans Rails pour avoir la couleur, une ligne sur deux, il faut faire dans la vue:
<table%>
<% odd_or_even = 0  
5.times do  
odd_or_even = 1 - odd_or_even %>
<tr class="Ligne<%=odd_or_even%>"%><td%>XXX</td%></tr%>
<%end%%>
</table%>
Avec dans la css:
.Ligne0 {background-color:gray;}
.Ligne1 {background-color:white;}
Mais je trouve que c'est mieux fait dans JSF... Rem: odd_or_even est possible grâce à l'ajout des méthodes even? et odd? à Fixnum.

[Rails] Les liens

Pour faire un lien avec Rails il suffit d'utiliser "link_to", exemple:
<%= link_to 'Identification', :action => 'login'%>
Et d'avoir la méthode login dans le controleur correspondant...

[Rails] Le controleur

l'URL: http://localhost:3000/user/login Correspond au controleur: app/controlers/user_controller.rb
  • user = UserController
  • login = la méthode login dans UserController

Simple n'est ce pas?

[Rails] Sessions

Les sessions fonctionnent comme en Java - J2EE (pour ceux qui connaissent). Depuis un controleur:

session[:user] = User.new # pour creer l objet
session[:user] #pour l'utiliser

On peut utiliser la ligne suivante pour récupérer l'objet et le créer s'il n'existe pas:

session[:user] ||= User.new

Attention, comme dans une appli J2EE, il vaut mieux ne pas trop mettre d'objet en session...

switch , case, when

Ca! C'est quelque chose que je ne trouve pas cool du tout en ruby! Dans tous les languages que je connais (java, javascript, C++...) on utilise switch/case:

public class Test {

 public void test(int key) {
  switch (key) {
  case 1:
   System.out.println("1");
   break;
  default:
   System.out.println("default");
   break;
  }
 }
}

Et en Ruby c'est case/when:
def switch_test(count)
  case(count)
    when 0: puts "zero"
    when 1: puts "un"
    else puts "else"
  end
end

switch_test(1)
switch_test(0)
switch_test(4)

Résultat:
un
zero
else

Je ne trouve pas ça plus clair et surtout je vais me mélanger avec les autres languages à tous les coups!

Itération dans une table de Hashage

def print_hash
  personnes = {{1, "maurice"}, {2, "marcel"}}
  
  personnes.each do |num, prenom| 
    puts num
    puts prenom
  end
end

print_hash

[Rails] Validation

Dans la rails la validation est très simple, il suffit d'aller dans son objet métier, par exemple dans : app/models/livre.rb:

class Product < ActiveRecord::Base
  validates_presence_of :isbn
  validates_length_of :isbn, :maximum => 10, :message => 'max 10 char'
  validates_numericality_of :prix
  validates_uniqueness_of :titre
  validates_format_of :image_url, :with => %r{^http:.+\.(gif|jpg|png)$}i, message => 'doit être un URL ou une image GIF, JPG ou PNG'

protected
def validate
  errors.add(:prix, 'doit être positif') unless prix.nil? || prix > 0.0
end

Pour plus d'informations: HowtoValidate
Ou alors: la liste des validateurs.
Et si ça suffit pas, on peut créer nos propres règles (voir la fonction validate).

YAML Ain't Markup Language

YAML est utilisé dans Rail pour la configuration des bases de données.
  • avantages: plus clair que xml et moins limité que les .properties
  • inconvénient: il y a moins de librairies/outils pour parser ce genre de documents que XML - mais une seule bonne librairie ruby suffit ;)

[Rails] Les conventions de nommage - la suite

Par convention dans les applications Rails:

Type de colonne dans la BDDModel de champsExemple
datetimexxx_atlast_edited_at
datexxx_onsend_on

Conséquence: si on crée une colonne "created_at" dans une table, elle est automatiquement remplie!

La différence entre simple quote et double quote

Le texte entre double quote est interprété. Les \n sont transformés en retour chariot etc...
Le texte entre simple quote est utilisé tel quel.

Définir un tableau de constantes

[tableau].freeze

[Rails] Trouver une ligne unique dans la base de données

Dans le controleur:
def login(name, password)
 find(:first, :conditions => ["name = ? and password = ?", name, password])
end

Installer un environnement Ruby / Rails / Eclipse sous windows

Comme je suis feigant et que d'autres l'on déjà expliqué, il suffit de suivre le lien (et de comprendre l'anglais):

[Rails] Liste de sélection

Dans la vue:
<% 
options = Order::PAYMENT_TYPES
select('order', 'pay_type', options)
%>
  • order = objet / table
  • pay_type = attribut / colonne
Dans app/models/Order.rb:
PAYMENT_TYPES = [['check', 'check'], ['Credit card', 'cc'], ['Master Card', 'mc']].freeze

[Rails] Gérer les utilisateurs et l'identification / login

Dans pratiquement toutes les applications sur lesquels j'ai travaillé il y avait un système d'identification/login.

Plutôt que de réinventer la roue, Rails propose des générateurs à télécharger pour générer ce genre de code avec tous les aspects sécurités déjà géré: encoding des mots de passes.... Cool!

Vous pouvez trouver pleins d'autres liens plus à jour sur mon del.icio.us

[Rails] Updater Rails

Pour updater Rails c'est à la fois simple et compliqué :( Pour updater Rails en lui-même c'est simple, il suffit de lancer la commande:

gem update rails
gem propose d'updater les dépendances, il suffit de dire [Y].

Par contre l'application rails généré avec Rails 0.9, devrait continuer à fonctionner.
Mais si on génère une nouvelle application de zéro avec Rails 0.14 et qu'on fait un diff entre l'appli généré de zéro en 0.9, on va voir qu'il y a beaucoup de changements!!!

Donc en ce qui concerne la mise à jour de l'appli généré, il suffit de chercher parmis les taches rake pour trouver des taches qui simplifie la migration des versions de rails

Mais il faudra aussi penser à enlever les méthodes deprecated qui ont été généré avant l'update... pour plus de propreté ;)
Exemple:

render_partial 'form'
est deprecated et est remplacé par
render(:partial => ...)
Par exemple si le generateur de code n'est pas encore à jour et génère toujours du code deprecated...

[Rails] Les helpers

Les méthodes ajoutées dans app/helpers/utilisateur_helper.rb sont disponibles dans les vues du controleur: utilisateur_controller.rb. C'est à dire app/views/utilisateur/*.rhtml

Si on place une méthode dans application_helper.rb, cette méthode est disponible pour toutes les vues (exemple: un formateur de numéro de téléphone français...).

Les méthodes qui finissent en ! ou ?

En Ruby, par convention, les méthodes qui finissent en ! ou ? veulent dire quelque chose de particulier:

  • ? = la méthode renvoie un boolean
  • ! = la méthode fait quelque chose de destructif (vider une liste, renplacer une partie de la valeur passée en paramètre...)

[Rails] Gestion des erreurs

Comment afficher des messages d'erreur? Dans le controleur:

def mon_action
 flash[:notice] = 'Invalid product'
end

Dans la vue:

<%=@flash[:notice]%>

[Rails] Objets en session

Dans Rails si on met un objet en session, il faut bien penser à le déclarer dans app/controllers/application.rb, exemple:

class AdminController < ApplicationController
 model :cart
 model :line_item
end

[Rails] Les paramètres de requètes

On a souvent besoin d'utiliser des paramètres entre les pages et le controller, comment faire en Rails ?
Dans la vue:

<%=link_to 'Ajouter un utilisateur', {:action => 'add_user', :id => user}, class => 'mon_style'%>


Dans le controller:

def add_user
 user_id = params[:id]
end

[Rails] Afficher 1 liste de ligne de la base de données

Dans app/models/Utilisateur.rb
class Utilisateur < ActiveRecord::Base
 def self.utilisateurs_actifs
  find(:all, :condition => "actif == 1", :order => "date_creation desc")
 end
end

Utilisation:
Dans le app/controllers/utilisateur_controller.rb
def mon_action
 @utilisateurs = Utilisateur.utilisateur_actifs
end

Dans app/views/utilisateur/mon_action.rhtml
<ul>
 <% for utilisateur in @utilisateurs %>
 <li><%=utilisateur.nom%></li>
 <%end%>
</ul>

[Rails] Formater les chiffres décimaux

Dans la vue on peut utiliser:
<%=sprintf("%0.2f", prix);%>
Ou encore mieux utiliser un helper déjà contruit dans Rails, exemple:
<%=number_to_currency(prix, {:unit => "£", :separator => ",", :delim => "",:precision => 2})%>
Rem: Attention je n'ai pas testé toutes ces options.
Rem2: il est possible de voir tous les helpers disponibles dans le svn.

[Rails] Pourquoi je recopie le livre de Dave Thomas ?!

Parce qu'il est super bien fait! Le mieux c'est de l'acheter pour vous rendre compte par vous même ;) http://www.pragmaticprogrammer.com/titles/rails/index.html

vendredi, juin 16, 2006

Syntaxe RDoc

J'ai eu un peu de mal à la trouver alors je mets le lien ici vers la doc sur la syntaxe d'un fichier RDoc: http://www.ruby-doc.org/stdlib/libdoc/rdoc/rdoc/files/rdoc/markup/simple_markup_rb.html Les plus intéressants :
* this is a list with three paragraphs in the first item. This is the first paragraph.
*word* displays word in a bold font
_word_ displays word in an emphasized font  
+word+ displays word in a code font
Technorati tags:

mardi, mai 16, 2006

Les idioms

Une petite liste de ressources pour connaitre les us et coutumes en Ruby:
Quelques exemples très simple:
  • Renvoi la valeur de a sauf si a est false ou nil dans ce cas renvoi b
a || b
  • Donne la valeur b à a , si a n'est pas définit
a ||= b

jeudi, mai 11, 2006

Ruby et Rails 2 articles très interessants

Je viens juste de lire ces 2 articles que j'ai trouvé très interessants: J'aime bien ce petit extrait:
Too many things are hard to judge that way - hence we spend so much of our time on client projects being slowed down by technology that sounded good on a golf course.
Technorati tags:

Mon Hackathon (suite)

Voilà un petit aperçu du résultat d'une nuit de Hackathon: GoogleCalendar
Le plugin rails fonctionne, la librairie ruby standalone aussi mais c'est encore assez limité et il faudrait que je réorganise les fichiers (j'ai fait quelques copier/coller pour aller vite...).
Je verrai plus tard pour faire une vrai annonce :)

[Rails] Les différents types de relations dans active record

Technorati tags:

mercredi, mai 10, 2006

Mon Hackathon

J'en parlais avec des personnes du boulot, ça fait depuis que je suis étudiant que j'ai plus codé comme un malade pendant toute la nuit!
Ce soir j'arrive pas à dormir alors je vais essayer de tenir le coup juste au petit matin...
Résultat: on verra demain matin :)

lundi, mai 08, 2006

[Rails] Première Conférence Rails Europe

Première conférence ruby on rails, clairement destinée aux entreprises vu le prix prohibitif, n'empêche c'est une bonne nouvelle pour la visibilité de rails dans le monde de l'entreprise surtout en Europe :)
Technorati tags:

jeudi, avril 27, 2006

[Rails] Structure des répertoires (bis)

Dans un post précédent je pointais sur une cheatsheet intéressante pour rails. Malheureusement le site est down de temps en temps (en ce moment il remarche par exemple).
Pour éviter le problème, je la recopie dans ce post ;)
j'aime pas copier/coller c'est mal! mais là ça s'impose!
Technorati tags:

mercredi, avril 05, 2006

[Rails] Cedric Beust à propos de Rails

Cedric Beust a fait un excellent post concernant Rails qui vaut le coup d'être lu.
Tout comme moi il adore rails mais il craint que cela ne prenne pas dans les entreprises...
Evidemment je ne peux pas prévoir l'avenir mais je pense qu'il y a une bonne probabilité que ca fonctionnne...
Je recopie mes commentaires sur son post ici:

First, Thanks for this post and I'd like to say: I do agree with almost all of your arguments.

But ;) not on the conclusions...

Well I'm not a fortune teller ;)

> First of all, Ruby.
Ruby (advanced features) are complex but ruby leverage the learning curve. You can start by learning few tricks and then get better by the time... Back then when I learned Java it was more painfull :( (I started with Jtable in a swing applet, arg! bad memories!)

> Anyone who wants to succeed in the Web arena must (...) convince programmers
I think the blog video did just that ;)
> (...) also be an easy sell to their management.
Something that must be done and will be hard but the fact that many rails developpers are coming from j2ee and are well known architects will surely help...
take a look at gary's post http://www.jroller.com/page/dgeary?entry=tipping_rails

> Ruby on Rails itself.
Magic is good because it makes developpers more productive which is something your pointy haired boss will surely like ;)

> Still no credible IDE.
I'm not a vi/emacs addict at all!
But you must have missed something call "radrails".
It's an amazing plugin who just won an eclipse award (http://www.radrails.org/blog/show/56)
Take a look at it ;)

> Fanaticism
I hope I'm not like one of those lisp guys ;)
I agree that staying humble is the way to go since rails is not perfect either

> Crowd of a single mind.
There are other inovative web frameworks (http://code.whytheluckystiff.net/camping/)
But The fact that one of them is the reference is a breath of fresh air coming from J2ee (I think there are to many of them out there).
Also this didn't bothered the ASP developpers to have only one option during all the last past years...

> Enterprise capabilities and scalability unclear.
I found some amazing numbers about the shift to rails (http://weblog.rubyonrails.org/articles/2006/02/01/secrets-behind-ruby-on-rails-the-numbers)
400 000 Downloads
550 develppers / 50 countries
25000 Agile web dev with rails books sold
(http://radar.oreilly.com/archives/2005/12/ruby_book_sales_surpass_python.html)
o'reilly ruby books sales up to +1552% since last year
more than python book sales

About performances see the great post of Justin Gehtlan (http://blogs.relevancellc.com/articles/2005/04/04/some-numbers-at-last)
who wrote http://www.oreilly.com/catalog/bfljava/
The numbers are amazing too!
He just changed is blog look, the post is just one big block :(

> Lack of support from Internet Providers
Rails is young but I sure it will come at time goes by... you already have http://www.typhon.net/en/ if you're looking for one ;)

When I can choose between java and rails, I personnaly take rails because I don't want to use my spare time on configuring hibernate mapping files and making yet an other ant file ;)

Technorati tags:

[Rails] Hébergement Rails

Si vous chercher à héberger une application rails, il existe cette société qui fait de l'hébergment Rails: http://www.typhon.net/fr/OffreRails.
ps: La page concernant l'offre rails est un peu difficile à trouver je trouve...
Technorati tags:

Le bureau virtuel avec Fold

Je suis pas super fan des bureaux virtuels et autres pages portail, mais techniquement c'est bien fait: fold
La démo live est disponible.
Et le blog du developpeur du principal.
Tout ca fait avec RubyOnRails évidemment ;)
Technorati tags:

mardi, mars 28, 2006

[Rails] Find by {inserer le nom du champs ici}

Je viens de découvrir un truc génial (encore un):
Ceux qui ont fait des appli qui accèdent à la base de donnée auront surement déjà au besoin d'ajouter des méthodes du genre Adresse.findByCodePostal(codepostal).
Evidement à chaque fois on a jamais celle qui nous faut... avec hibernate le code est relativement simple à écrire. Mais avec Rails c'est encore plus simple! Il n'y a pas besoin de l'écrire!

Imaginons que j'ai une table items avec comme colonne "title", "quantity", "price"...
J'écris directement (dans mon test unitaire par exemple):
  Item.find_by_title('test title')
  Item.find_by_quantity(8)
  Item.find_by_price(123.45)

En fait les find_by_xxx() sont créées à la volée! C'est génial! Il suffit que mon champs existe en base et la méthode correspondante existe toute seule!
Technorati tags:

[Rails] Comment avoir la liste des taches rake

J'oublie toujours la commande, alors je me la marque ici une bonne fois pour toute:
> rake --tasks

rake add_new_scripts          # Add new scripts to the application script/ directory
rake apidoc                   # Build the apidoc HTML Files
rake appdoc                   # Build the appdoc HTML Files
rake clear_logs               # Clears all *.log files in log/
rake clobber_apidoc           # Remove rdoc products
rake clobber_appdoc           # Remove rdoc products
rake clobber_plugindoc        # Remove plugin documentation
rake clone_schema_to_test     # Recreate the test database from the current environment's database schema.
rake clone_structure_to_test  # Recreate the test databases from the development structure
rake create_sessions_table    # Creates a sessions table for use with CGI::Session::ActiveRecordStore
rake db_schema_dump           # Create a db/schema.rb file that can be portably used against any DB supported by AR.
rake db_schema_import         # Import a schema.rb file into the database.
rake db_structure_dump        # Dump the database structure to a SQL file
rake default                  # Run all the tests on a fresh test database
rake drop_sessions_table      # Drop the sessions table
rake freeze_edge              # Lock this application to the Edge Rails (by exporting from Subversion).  Defaults to svn HEAD; do 'rake free
VISION=1234' to lock to a specific revision.
rake freeze_gems              # Lock this application to the current gems (by unpacking them into vendor/rails)
rake load_fixtures            # Load fixtures into the current environment's database
rake migrate                  # Migrate the database according to the migrate scripts in db/migrate (only supported on PG/MySQL). A specific
an be targetted with VERSION=x
rake plugindoc                # Generate documation for all installed plugins
rake prepare_test_database    # Prepare the test database and load the schema
rake purge_sessions_table     # Drop and recreate the session table (much faster than 'DELETE * FROM sessions')
rake purge_test_database      # Empty the test database
rake reapidoc                 # Force a rebuild of the RDOC files
rake reappdoc                 # Force a rebuild of the RDOC files
rake recent                   # Run tests for recentprepare_test_database
rake stats                    # Report code statistics (KLOCs, etc) from the application
rake test_functional          # Run tests for test_functionalprepare_test_database
rake test_plugins             # Run tests for test_pluginsenvironment
rake test_units               # Run tests for test_unitsprepare_test_database
rake unfreeze_rails           # Unlock this application from freeze of gems or edge and return to a fluid use of system gems
rake update_javascripts       # Update your javascripts from your current rails install.

rem: Ce n'est uniquement valable pour rails mais pour tous les rake.
Technorati tags:

[Rails] changer la taille d'un text area

Petite astuce toute simple: "Comment changer la taille d'un text area dans rails?"
<%= text_area 'user', 'address', :rows => 2  %>
Technorati tags:

lundi, mars 27, 2006

Mon "Opinion Forum System" à moi

Je suis dégouté, j'avais une super idée de forum très web2.0 et puis voilà que quelqu'un a eu la même: Opinion Forum System
Je crois que je le ferais quand même... à 1 mois près, juste parce que j'ai pas eu le temps de m'en occuper...
Par contre j'ai rien vu concernant les licences et ça a l'air d'être un site perso qui héberge le site...
Si je fais une jolie licence GNU ou Apache ou un truc dans le style je pourrai toujours me démarquer!

[Rails] Nouvelle stratégie de test dans Ruby on rails

Voilà un post interessant de Mike Clark (celui qui a implémenté les tests dans Rails) qui explique quelles modifications il a apporté aux tests pour que ceux-ci passent plus vite.
Il a tout simplement fait un "rollback" à la fin de chaque test, ça évite d'avoir à supprimer les données insérées :)
Pour ceux qui connaissent ca ressemble à la stratégie utilisé dans les Tests de Spring Framework (AbstractTransactionalDataSourceSpringContextTests).
Technorati tags:

lundi, mars 13, 2006

Transformer des logs du garbage collector en fichier csv

Voici un petit script qui permet de transformer les logs obtenus en passant les paramètres "-verbose:gc -Xloggc:/temp/jvm.log" à la jvm en java pour voir l'utilisation de la mémoire.
Les logs obtenus ressemblent à ça:
0.000: [GC 508K->138K(1984K), 0.0042681 secs]
0.074: [GC 650K->251K(1984K), 0.0030702 secs]
0.198: [GC 763K->305K(1984K), 0.0035574 secs]
0.272: [GC 817K->465K(1984K), 0.0033527 secs]
0.320: [GC 976K->523K(1984K), 0.0020841 secs]
...
0.557: [Full GC 1489K->1015K(2112K), 0.0256656 secs]
...
Cette version est plus compacte mais moins facile à lire (à mon avis) que la seconde, on split la ligne en utilisant plusieurs séparateurs: K ou [GC ou ( ou -> ...
def change_to_csv(csv_file, line)
  puts(line)
  # 0.000: [GC 508K->138K(1984K), 0.0042681 secs]
  # 0.563: [Full GC 1488K->1005K(2112K), 0.0253077 secs]
  array = line.split(/(:)|( \[GC )|( \[Full GC )|(->)|(\))|(K)|(\()/)
  time = array[0]
  puts("time: " + time)
  before_gc = array[4]
  puts("before_gc: " + before_gc)
  after_gc = array[8]
  puts("after_gc: " + after_gc)
  
  csv_file << (time + ";" + before_gc + ";" + after_gc + ";\n")
end

File.open("jvm.csv", File::CREAT|File::RDWR) do |csv_file|
  csv_file << ("time;before_gc;after_gc;\n")
  IO.foreach("jvm.log") { |line| change_to_csv(csv_file, line) } 
end
La seconde version où on split au fur et à mesure (par dicotomie en quelque sorte):
def change_to_csv(csv_file, line)
  puts(line)
  # 0.000: [GC 508K->138K(1984K), 0.0042681 secs]
  # 0.563: [Full GC 1488K->1005K(2112K), 0.0253077 secs]
  split_time = line.split(':')
  time = split_time[0]
  puts("time: " + time)
  rest = split_time[1]
  split_gc = rest.split('->')
  before_gc = split_gc[0].split('GC ')[1].split('K')[0]
  puts("before_gc: " + before_gc)
  after_gc = split_gc[1].split('K')[0]
  puts("after_gc: " + after_gc)
  
  csv_file << (time + ";" + before_gc + ";" + after_gc + ";\n")
end

File.open("jvm.csv", File::CREAT|File::RDWR) do |csv_file|
  csv_file << ("time;before_gc;after_gc;\n")
  IO.foreach("jvm.log") { |line| change_to_csv(csv_file, line) } 
end
Dans les deux cas on cherche un fichier jvm.log et on fait un fichier jvm.csv qui resemble à ça:
time;before_gc;after_gc;
0.000;508;138;
0.073;650;251;
0.200;763;305;
0.274;817;465;
0.322;976;523;
0.379;1035;537;
0.408;1049;722;
0.426;1234;802;
0.433;1298;837;
...
Il y a plus qu'à le passer dans excel et hop de jolies courbes!
Rem: je l'ai écrit rapidement, on peut surement faire plus élégant, mais mon but était l'efficacité et pour ça ruby est génial ;)
Technorati tags:

mardi, février 28, 2006

[Rails] Quoi de neuf dans Rails 1.1

Plein de bonne choses dans Rails 1.1 - cf la liste complète.
Technorati tags:

[Rails] La structure des répertoires

Une petite cheatsheet (anti-sèche) pour savoir à quoi servent les répertoires de rails.
Bien pratique!
Technorati tags:

[Rails] Ajax Scaffold

Le célèbre Scaffold de rails a été porté en Ajax.
On démarre tout de suite et on fait de l'ajax sans avoir à taper plein de code. Génial!

Source: Julien (en parlant d'ajax suivez son tour d'horizon des frameworks ajax ;) )
Technorati tags:

[Rails] Première RailsConf

Cela faisait quelques temps que je n'avais posté :)
Voilà quelques news rapides.
La première RailsConf (c'est à dire Conférence Rails) va se tenir au Canada avec des invité de choix!
  • Dave Thomas
  • David Heinemeier Hansson
  • Paul Graham
  • Martin Fowler
C'est bon signe pour Rails et Ruby!
Technorati tags:

lundi, février 20, 2006

[Rails] Pourquoi Rails ne génère pas les clefs étrangères ?

Et bien c'est un choix, pas une limitation! et oui!
C'est étonnant mais DHH nous donne l'explication: Choose a single layer of cleverness.
D'une manière générale c'est une discussion interéssante sur la place des bases de données dans le développement d'un projet moderne:
And realize that my opinions are confined to dealing with application databases (and that doing integration through the database belongs in a time where Beverly Hills 90210 was a hit show on TV). Hopefully that calmed you down again.
Technorati tags:

vendredi, février 03, 2006

Traiter des fichiers Microsoft Office (Word, Excel....) avec du ruby

Je n'ai pas eu l'occasion de l'essayer pour l'instant mais un jour où l'autre on est confronté à la génération ou la lecture de fichiers word ou excel...
Donc c'est intéressant de savoir que POI de apache a été porté en Ruby! (Youpi!)
Technorati tags:

lundi, janvier 30, 2006

Un jolie site de doc pour ruby

Le site de doc pour ruby a fait peau neuve. C'est jolie et clair j'aime bien :)
Vu sur o'reilly
Technorati tags:

elsif ou elseif ?

J'ai eu besoin d'utiliser un "elseif" en ruby et j'ai été étonné de découvrir qu'en ruby (apparement comme en perl), ça s'écrit "elsif"... pourquoi pas mais bon j'aurai préféré "elseif" et apparement je suis pas le seul! cf ce mail sur la mailing list ruby-talk.
Technorati tags:

Test d'un object "nil"

Un petit truc qui a l'air de rien comme ça mais qui est bien pratique:
  object = nil
  if(object)
    puts 'on ne voit pas ce message'
  end
Si un objet et nil, le test est false.
Ca veut dire que ce n'est plus la peine de faire comme en java:
  Object object = null;
  if(object!=null) {
    System.out.println("on ne voit pas ce message");
  }
Technorati tags:

dimanche, janvier 29, 2006

[Rails] Les mots clefs a ne pas utiliser (c.à.d les mots réservés)

Un petit script pour connaître les mots réservés:
>ruby -r config/environment -e 'print Object.constants.sort.join(", ")'
Résultat:
ARGF, ARGV, ActionController, ActionMailer, ActionPack, ActionView, ActionWebSer
vice, ActiveRecord, ActiveSupport, ArgumentError, Array, BREAKPOINT_SERVER_PORT,
 Base64, BasicSocket, Benchmark, Bignum, Binding, Buffering, Builder, CGI, CGIMe
thods, CROSS_COMPILING, Class, ClassInheritableAttributes, Comparable, Condition
Variable, Config, Continuation, Controllers, DRb, DRbIdConv, DRbObject, DRbUndum
ped, Data, Date, DateTime, Delegater, Delegator, Dependencies, Deprecated, Diges
t, Dir, ENV, EOFError, ERB, Enumerable, Errno, Exception, FALSE, FalseClass, Fcn
tl, File, FileTest, FileUtils, FireRuby, Fixnum, Float, FloatDomainError, Forwar
dable, GC, Gem, HTML, Hash, HashWithIndifferentAccess, IO, IOError, IPSocket, IP
socket, IndexError, Inflector, Integer, Interrupt, Kconv, Kernel, LoadError, Loc
alJumpError, Logger, MailHelper, Marshal, MatchData, MatchingData, Math, Method,
 MissingSourceFile, Module, Mutex, Mutex_m, NIL, NKF, NQXML, NameError, Net, Nil
Class, NoMemoryError, NoMethodError, NotImplementedError, Numeric, Object, Objec
tSpace, Observable, OpenSSL, OrderedOptions, PLATFORM, PStore, ParseDate, ParseE
rror, Pathname, Precision, Proc, Process, Queue, RAILS_CONNECTION_ADAPTERS, RAIL
S_DEFAULT_LOGGER, RAILS_ENV, RAILS_ROOT, RAILTIES_PATH, RELEASE_DATE, REXML, RUB
Y_PLATFORM, RUBY_RELEASE_DATE, RUBY_VERSION, Racc, Rails, Range, RangeError, Rat
ional, Regexp, RegexpError, RuntimeError, SOAP, STDERR, STDIN, STDOUT, ScanError
, ScriptError, SecurityError, Set, Signal, SignalException, SimpleDelegater, Sim
pleDelegator, SingleForwardable, Singleton, SizedQueue, Socket, SocketError, Sor
tedSet, StandardError, String, StringIO, StringInput, StringOutput, StringScanne
r, Struct, Symbol, SyntaxError, SystemCallError, SystemExit, SystemStackError, T
CPServer, TCPSocket, TCPserver, TCPsocket, TMail, TOPLEVEL_BINDING, TRUE, Text,
Thread, ThreadError, ThreadGroup, Time, TimeZone, Timeout, TimeoutError, Transac
tion, TrueClass, TypeError, UDPSocket, UDPsocket, URI, UnboundMethod, VERSION, W
in32API, XML, XMLEncoding, XMLParser, XMLParserError, XMLRPC, XSD, XmlSimple, YA
ML, ZeroDivisionError, Zlib
Vu sur: Gotcha du wiki ruby on rails
Technorati tags:

mardi, janvier 24, 2006

[Rails] Connaître la configuration exacte (versions etc...) de mon projet

Voilà le genre de petite pépite cachée dans rails, ceux qui vécu le "Jar Hell" apprécieront:
C:\developpement\workspaces\workspaceRuby\projet>ruby script/about
About your application's environment
Ruby version                 1.8.2 (i386-mswin32)
RubyGems version             0.8.10
Rails version                1.0.0
Active Record version        1.13.2
Action Pack version          1.11.2
Action Web Service version   1.0.0
Action Mailer version        1.1.5
Active Support version       1.2.5
Application root             C:/developpement/workspaces/workspaceRuby/projet
Environment                  development
Database adapter             mysql
Technorati tags:

lundi, janvier 23, 2006

Problème de connection MySQL 4.1

Je viens juste d'avoir un problème avec Ruby / ActiveRecord / MySql 4.1 sous Windows XP!! J'en fait un post parce que c'est assez vicieux. Voilà le code de mon script, il est supposé se connecter à une table de la base de donnée et faire un select dedans:
require "rubygems"
require_gem "activerecord"

# probleme de mysql
# http://jeroen.concept-q.biz/files/
ActiveRecord::Base.establish_connection(
     :adapter  => "mysql",
     :host     => "mysql.machine",
     :username => "user",
     :password => "password",
     :database => "dotproject")
     
class TaskLog < ActiveRecord::Base 
 set_table_name "task_log"
 set_primary_key "task_log_id"
end

task_logs = TaskLog.find(:all, :conditions => "task_log_creator = '49'")
for task_log in task_logs
 puts task_log.task_log_id
end

Voilà le genre de messages que j'avais:
Mysql::Error: Lost connection to MySQL server during query: 
SELECT * FROM task_log WHERE (task_log_creator = '49')  (ActiveRecord::StatementInvalid)

Ce code fonctionnait sur ma base de donnée en local mysql 5.0 mais pas sur la base distante en 4.1!!!
Solution:J'ai trouvé la solution sur le wiki de rails mais elle ne me plait pas trop :(
Il faut télécharger msvcr70.dll et mysql-ruby-win32.rar > ...mysql-4.1.15\mysql.so.
Les mettre sous:
  • C:\ruby\lib\ruby\bin\msvcr70.dll
  • C:\ruby\lib\ruby\1.8\i386-mswin32\mysql.so
et ca fonctionne.
ATTENTION:C'est clairement une bidouille, dans mon cas c'est juste un petit script pour moi. J'éviterai de faire ca en production dans un autre cas!
Technorati tags:

vendredi, janvier 20, 2006

[Rails] Mettre un encoding différent dans rails

Par défaut l'encoding dans rails est mis à utf-8. Pour le changer de manière globale il suffit de rajouter ces quelques lignes dans controllers/application.rb:
  before_filter :set_charset
  
  def set_charset
    @headers["Content-Type"] = "text/html; charset=iso-8859-1"
  end
Quelques liens interessants sur le sujet:
Technorati tags:

jeudi, janvier 19, 2006

Les conséquences de la guerre des brevets dans IE

Un article intéressant de julien sur les conséquences de la guerre des brevets dans IE surtout au niveau des animations flash.
Technorati tags:

vendredi, janvier 13, 2006

[Rails] Video bien sympa

Voilà une vidéo bien sympathique qui explique le cheminement de php/java vers rails et le fonctionnement de rails (pourquoi, comment...)
source:weblog.rubyonrails
Technorati tags:

jeudi, janvier 12, 2006

Comment me mettre en colère - radrails update site

Ca y est radrails m'a mis en colère! Ca fait la deuxième fois qu'ils changent leur update site!!! S'il y a bien un truc à ne pas changer c'est ça!
Résultat j'étais pas au courant des updates! Heureusement je me suis pas fait avoir une deuxième fois... je me suis douté qu'après 2 mois aucune mise à jour c'était louche!
Maintenant c'est: http://radrails.sourceforge.net/update
Technorati tags:

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!