glob

Aller au contenu | Aller au menu | Aller à la recherche

lun, 23 juin 2008

Fixtures on Rails 2.1

Suite à mon précédent billet concernant la création d'un jeu de données propre à une migration en utilisant les fixtures ainsi qu'aux nouveautés concernant les migrations dans rails 2.1, quelques ajustements ont du être effectués.

Les fichiers de migrations sont désormais préfixées par un timestamp (exemple : db/migrate/20080618211857_create_admin_user.rb) et non plus par un simple identifiant incrémental. Vos fichiers de fixtures doivent désormais être préfixés par ce même timestamp (exemple : db/fixtures/20080618211857_users.yml).

Voici donc le script lib/create_fixtures.rb mis à jour :

require 'active_record/fixtures'

module CreateFixtures

FIXTURES_LOCATION = File.dirname(__FILE__) + '/../db/fixtures'
MIGRATIONS_LOCATION = File.dirname(__FILE__) + '/../db/migrate'

def self.extended(object)
class << object
alias_method :migrate_without_fixtures, :migrate unless method_defined?(:migrate_without_fixtures)
alias_method :migrate, :migrate_with_fixtures
end
end

private

def current_migration
version = ActiveRecord::Migrator.current_version
index = migration_files.find_index do |f|
version = '%03d' % version if version.to_s.size < 3
f =~ /\/#{version}_/
end
file = index ? migration_files[index + 1] : migration_files.first
file.gsub(/.*\/(\d+)_.*/, '\1')
end

def fixture_files
@fixture_files ||= Dir["#{FIXTURES_LOCATION}/[0-9]*_*.yml"].sort
end

def migration_files
@migration_files ||= Dir["#{MIGRATIONS_LOCATION}/[0-9]*_*.rb"].sort
end

public

def migrate_with_fixtures(direction)
migrate_without_fixtures(direction)
return if :down == direction
migration = current_migration
cnx = ActiveRecord::Base.connection
file = fixture_files.find do |f|
f =~ /\/#{migration}_/
end
return unless file
table_name = file.gsub(/.*\/\d+_(.*)\.yml/, '\1')
Fixtures.new(cnx, table_name, nil, file.gsub(/(.*)\.yml/, '\1')).insert_fixtures
end

end

ActiveRecord::Migration.extend(CreateFixtures)

Note : Cette version est compatible avec les anciennes version de rails.

dim, 27 avr 2008

iSport

Voici une petite appli Web adaptée pour iPhone / iPod Touch : iSport.

Elle permet d'avoir les informations sportives ainsi que les résultats des matchs en direct (pour l'instant, que Fooball, Tennis, Basket US et Rugby).

La chose utilise Ruby, Rails, Hpricot et comme d'habitude : Prototype.

Quelques screenshots pour la peine :

Des retours et / ou commentaires sont les bienvenus !

mar, 15 avr 2008

mount /dev/null

Ce matin un collègue a trouvé un gentil mot de notre administrateur système :

ven, 29 fév 2008

Diff SVN

En regardant le script de davux, permettant la colorisation d'un diff, je me suis dit qu'il devait y avoir une possibilité d'intégrer ça de manière simple à subversion.

Collez ce petit script dans un fichier (nous allons prendre ici /usr/local/bin/colorized_diff) et rendez le exécutable :

#! /bin/sh

plus='^[[0;32m'
minus='^[[0;31m'
diff "$@" | sed 's/^+.*$/'"$plus"'&^[[0m/; s/^-.*$/'"$minus"'&^[[0m/'

Ensuite, modifiez le fichier ~/.subversion/config pour y rajouter ou modifier la ligne suivante dans la section [helpers]:

diff-cmd = /usr/local/bin/colorized_diff

Vous pouvez omettre le chemin (/usr/local/bin) si il est dans votre PATH. Maintenant, un svn diff dans un shell vous affichera les lignes supprimées en rouge et les lignes ajoutées en vert. C'est pas plus mignon ?

Note : ^[ est le caractère d'échappement, vous pouvez le taper dans vim en faisant Ctrl-V puis Echap

mar, 15 jan 2008

Mix Drum 'n' Bass : premiers essais

Depuis un certain temps que j'écoute de la Jungle / Drum 'n' Bass, je me suis dit pourquoi pas essayer de mettre en pagaille réunir mes morceaux favoris en un seul. Non je ne compte pas faire carrière dans la musique, loin de là. Je me suis mis à réaliser ce mix juste pour m'amuser un peu et voir ce que cela pouvait donner.

L'objectif était de pas dépasser les 50 minutes. Le plus dur a été de choisir les pistes (et surtout d'en éliminer) puis à choisir un ordre cohérant et qui passe bien. Au final, je me suis fait plaisir :)

Fini la parlotte, pour écouter c'est ici :

… et pour télécharger c'est là.

Le mix fait 48 minutes et 32 secondes, est au format MP3, et contient 21 pistes :

  1. Cyantific - Cover Story
  2. CLS & Wax - Quite Perfect
  3. Shimon - The Shadow Knows
  4. Sub Focus - Swamp Thing
  5. State Of Mind - Paint The Walls Black
  6. Mazzini - Freak
  7. Sub Focus - Airplane
  8. Matrix & Futurebound - Universal Truth
  9. Sub Focus - X Ray
  10. Muffler - Futureshock
  11. Pendulum - Tarantula (feat. Fresh Pyda And Tenor Fly)
  12. The Qemists - Iron Shirt
  13. Shimon - Drug Mule
  14. Freestylers & Pendulum - Painkiller (Noisia Remix)
  15. The Prodigy - Voodoo People (Pendulum Remix)
  16. Sub Focus - Flamenco
  17. Pendulum - Blood Sugar
  18. The Qemists - Stompbox
  19. The Qemists - Drop Audio
  20. Logistics - Everything Is Illuminated
  21. Matrix & Futurebound - Coast To Coast (feat. Louis Smith)

jeu, 13 sep 2007

Black Label @ Elysée Montmartre

Cette fois, je vais essayer de prévenir avant. Une bonne soirée se profile pour samedi :

mar, 17 juil 2007

Nouvelle venue


Elle s'appelle Guinness ;)

mar, 10 juil 2007

Fixtures on Rails

Il est assez fréquent d'avoir du contenu à pré-remplir dans une base de données lors du déploiement d'une application.

La plupart du temps on se fait un script SQL qui fait les insertions. En Rails, c'est mieux, on mets les insertions dans les scripts de migration et ça roule.

Petit hic, mettons que l'on a beaucoup de données et contenant des champs text, le script de migration va vite devenir illisible. Pour ça il y a les Fixtures. Seulement, ce n'est pas géré par les migrations (de base). Les fixtures sont représentés grâce à des fichiers YAML décrivant vos modèles.

Voilà un petit script à rajouter dans le répertoire /lib/ (nommez-le create_fixtures.rb) :

require 'active_record/fixtures'

module CreateFixtures

FIXTURES_LOCATION = 'db/fixtures'

def self.extended(object)
class << object
alias_method :migrate_without_fixtures, :migrate unless method_defined?(:migrate_without_fixtures)
alias_method :migrate, :migrate_with_fixtures
end
end

def migrate_with_fixtures(direction)
migrate_without_fixtures(direction)
return if :down == direction
version = ActiveRecord::Migrator.current_version + 1
cnx = ActiveRecord::Base.connection
files = Dir["#{FIXTURES_LOCATION}/[0-9]*_*.yml"].each do |file|
next unless file.gsub(/.*\/([0-9]+)_.*\.yml/, '\1').to_i == version
table_name = file.gsub(/.*\/[0-9]+_(.*)\.yml/, '\1')
Fixtures.new(cnx, table_name, nil, file.gsub(/(.*)\.yml/, '\1')).insert_fixtures
end
end

end

ActiveRecord::Migration.extend(CreateFixtures)

Ensuite, rajouter cette ligne dans le fichier config/environment.rb :

require File.dirname(__FILE__) + '/../lib/create_fixtures'

Voilà la chose est en place. Maintenant voyons l'utilisation.

Vous avez juste à créer un répertoire db/fixtures dans votre application et y mettre vos fichiersYAML. Nommez vos fichiers de la sorte :

<numéro_de_migration>_<nom_de_la_table>.yml

Rien de mieux qu'un petit exemple :

$ cat db/fixtures/002_users.yml
admin:
login: admin
hashed_password: d033e22ae348aeb5660fc2140aec35850c4da997
status: administrator

Ici, l'utilisateur administrateur sera directement ajouté à la fin de la deuxième migration. Vous pouvez bien-entendu mettre plusieurs fichiers de fixtures pour une même migration et créer des utilisateurs par exemple après la deuxième ou même la 42e migration.

jeu, 28 juin 2007

Soyons joueurs

Qui a dit que la musique électronique (dont la Drum & Bass) était uniquement sortie des ordinateurs & des platines ?

Petit extrait de Voodoo People en live par Pendulum (un grand nom de la Drum) :

Vive le sport !

lun, 9 avr 2007

Heroes (non pas la série)

James Bond : 77%
Néo (Matrix) : 74%
Indiana Jones : 72%
Maximus (Gladiator) : 71%
Batman / Bruce Wayne : 70%
Hannibal Lecter : 68%
Forrest Gump : 66%
Jim Levenstein (American Pie) : 66%
Tony Montana (Scarface) : 62%
Yoda (Star Wars) : 61%
Eric Draven (The Crow) : 61%
Schrek : 59%

Quel héros de film es-tu ?

A partir de Meuble.

- page 1 de 2