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 endSi vous avez des idées pour le rendre plus court (mais toujours lisible)... les commentaires sont les bienvenus ;)
jeudi, décembre 21, 2006
Renommer ses divx en ruby
Un moteur de templates en 5 min!
- Copier/coller pendant 10 min (argh...)
- Utiliser un éditeur (vim, emacs, ultraedit etc..)
- Un petit script ruby
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!
# 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
mercredi, novembre 29, 2006
Des sites français en Rails !
lundi, novembre 27, 2006
vim vs emacs ;)
lundi, novembre 20, 2006
Créer une application rails pour une base de données existantes
ActiveRecord::Base.pluralize_table_names = falseSi dans ma base, j'ai une table files_index:
>ruby script/generate scaffold FilesIndexDans app/models/files_index.rb, ajouter:
class FilesIndex < ActiveRecord::Base set_primary_key "file_id" end
jeudi, novembre 09, 2006
Activerecord et les clef étrangère (foreign key)
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
Le retour du blogger
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 ;)
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.comCHANGELOG
= 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
Type SQL | Classe Ruby |
---|---|
int, integer | Fixnum |
decimal, numeric | Float |
interval, date | Date |
clob,blob,text | String |
float, double | Float |
char, varchar, string | String |
datetime, time | Time |
boolean | compliqué... |
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
<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
<%= link_to 'Identification', :action => 'login'%>Et d'avoir la méthode login dans le controleur correspondant...
[Rails] Le controleur
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
- 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 BDD | Model de champs | Exemple |
---|---|---|
datetime | xxx_at | last_edited_at |
date | xxx_on | send_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 simple quote est utilisé tel quel.
[Rails] Trouver une ligne unique dans la base de données
def login(name, password) find(:first, :conditions => ["name = ? and password = ?", name, password]) end
Installer un environnement Ruby / Rails / Eclipse sous windows
[Rails] Liste de sélection
<% options = Order::PAYMENT_TYPES select('order', 'pay_type', options) %>
- order = objet / table
- pay_type = attribut / colonne
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 railsgem 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
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
<%=sprintf("%0.2f", prix);%>Ou encore mieux utiliser un helper déjà contruit dans Rails, exemple:
<%=number_to_currency(prix, {:unit => "£", :separator => ",", :delimRem: Attention je n'ai pas testé toutes ces options.=> "",:precision => 2})%>
Rem2: il est possible de voir tous les helpers disponibles dans le svn.
[Rails] Pourquoi je recopie le livre de Dave Thomas ?!
vendredi, juin 16, 2006
Syntaxe RDoc
* 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 fontTechnorati tags: ruby rdoc
mardi, mai 16, 2006
Les idioms
- http://www.rubygarden.org/ruby?RubyIdioms
- http://www.glue.umd.edu/~billtj/ruby.html
- http://www.rubygarden.org/faq/dispatch.cgi?controller=main&action=index
- http://en.wikipedia.org/wiki/Ruby_programming_language
- http://www.zenspider.com/Languages/Ruby/QuickRef.html
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
- EvaluatingRuby de Martin Fowler
- Are you sure you want to be mainstream? de DHH
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.
Mon Hackathon (suite)
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 :)
mercredi, mai 10, 2006
Mon Hackathon
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
jeudi, avril 27, 2006
[Rails] Structure des répertoires (bis)
j'aime pas copier/coller c'est mal! mais là ça s'impose!
mercredi, avril 05, 2006
[Rails] Cedric Beust à propos de Rails
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...
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 ;)
[Rails] Hébergement Rails
ps: La page concernant l'offre rails est un peu difficile à trouver je trouve...
Le bureau virtuel avec Fold
La démo live est disponible.
Et le blog du developpeur du principal.
Tout ca fait avec RubyOnRails évidemment ;)
mardi, mars 28, 2006
[Rails] Find by {inserer le nom du champs ici}
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!
[Rails] Comment avoir la liste des taches rake
> 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.
[Rails] changer la taille d'un text area
<%= text_area 'user', 'address', :rows => 2 %>
lundi, mars 27, 2006
Mon "Opinion Forum System" à moi
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
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).
lundi, mars 13, 2006
Transformer des logs du garbage collector en fichier csv
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] ...
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
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
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!
mardi, février 28, 2006
[Rails] La structure des répertoires
Bien pratique!
[Rails] Ajax Scaffold
On démarre tout de suite et on fait de l'ajax sans avoir à taper plein de code. Génial!
[Rails] Première RailsConf
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
lundi, février 20, 2006
[Rails] Pourquoi Rails ne génère pas les clefs étrangères ?
C'est étonnant mais DHH nous donne l'explication: Choose a single layer of cleverness.
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.
vendredi, février 03, 2006
Traiter des fichiers Microsoft Office (Word, Excel....) avec du ruby
lundi, janvier 30, 2006
Un jolie site de doc pour ruby
elsif ou elseif ?
Test d'un object "nil"
object = nil if(object) puts 'on ne voit pas ce message' endSi 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"); }
dimanche, janvier 29, 2006
[Rails] Les mots clefs a ne pas utiliser (c.à.d 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
mardi, janvier 24, 2006
[Rails] Connaître la configuration exacte (versions etc...) de mon projet
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
lundi, janvier 23, 2006
Problème de connection MySQL 4.1
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
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!
vendredi, janvier 20, 2006
[Rails] Mettre un encoding différent dans rails
before_filter :set_charset def set_charset @headers["Content-Type"] = "text/html; charset=iso-8859-1" endQuelques liens interessants sur le sujet:
jeudi, janvier 19, 2006
Les conséquences de la guerre des brevets dans IE
vendredi, janvier 13, 2006
[Rails] Video bien sympa
source:weblog.rubyonrails
jeudi, janvier 12, 2006
Comment me mettre en colère - radrails update site
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