The Caribbean Weblog

"This blog is continuing @ http://christophemaximin.com "

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

jeudi 28 septembre 2006

Bon ok, redéfinition du terme BTS IG

BTS IG (brevet de technicien supérieur en informatique gestion) => Formation à l'utilisation des logiciels (pourris) Microsoft (plus les autres).

Genre je n'ai que ça à faire de me ramener pour faire du ms-dos, qui n'est rien d'autre que la *HONTE* de l'informatique moderne... misère...

EDIT 09/01/07 : Lisez les commentaires.

lundi 18 septembre 2006

Confessions

Aujourd'hui, cet après-midi pour être exact, j'ai touché à un Windows. Du Windows 2000 même.

Pire.
J'ai fait du Visual Basic.

(J'ai honte.)

Edit: Je précise que j'y ai été forcé, c'était dans le cadre de mon BTS Info...

dimanche 17 septembre 2006

lilo n'est plus.

23:18 -christel(i=christel@freenode/staff/gentoo.christel)- [Global Notice] On the 12th September Rob Levin, known to many as Freenode's lilo, was hit by a car while riding his bike. He suffered head injuries and passed away in hospital on the 16th. For more information please visit #freenode-announce

Tristesse, tristesse, tristesse...
Et dire que je lui avait parlé pour la dernière fois le 4 septembre, à peine 10 jours avant sa disparition...

Merci encore pour tout, lilo.

dimanche 10 septembre 2006

ELER

i'm with those guys

Rails : helper : Marqueur Adsense

Poser des adsense n'aura jamais été aussi facile, exemples d'utilisation :

  1. wadsense([468,60], 'borddemer')
  2. wadsense([250,250], 'pleinair', {:crit => 1234567890})
  3. wadsense([728,90], %w(000000 000000 FFFFFF 999999 CCCCCC))
  4. wadsense([250,250], %w(pleinair borddemer), {'multipreset' => true}) # faire alterner des présets
  5. wadsense([468,60], '["000000","336699"];["000000","FFFFFF"];["FFFF00","0000FF"];["FFFF00","0000FF"];["000000","336699"]'.split(';'))

Comme d'habitude, placez le dans app/helpers/application_helper.rb afin de le rendre accessible à toutes les vues (de tous les controlleurs).

  def wadsense(format, colorset, options = {})
    # déclarations de set de couleurs
    soc =
    {
      'pleinair' => %w(FFFFFF FFFFFF 0000FF 008000 000000),
      'borddemer' => %w(336699 FFFFFF 0000FF 008000 000000),
    }
    
    # et / ou gérer les multi set prédéfinis
    if colorset.is_a?(Array) and options[:multipreset] != true
      rsoc = colorset
    elsif colorset.is_a?(Array) and options[:multipreset] == true
      rsoc = []
      5.times do |i|
        rsoc[i] = ''
        j = 0
        colorset.each do |coset|
          if j == 0
            rsoc[i] << %(["#{soc[coset][i]}",)
          elsif j == colorset.length
            rsoc[i] << %("#{soc[coset][i]}"])
          else
            rsoc[i] << %(",#{soc[coset][i]}")
          end
          j += 1
        end
      end
    elsif colorset.is_a?(String)
       rsoc = soc[colorset]
    end
    # ne pas ajouter de " autour de la couleur si
    # il sagit de couleurs tournantes
    rso = []
    rsoc.each do |color|
      rso << %("#{color}") unless color.include?('[')
    end
    # écriture de la variable
    adsense = <<EOF
    #{'<p style="text-align:center">' if options[:center]}
    <script type="text/javascript"><!--
    google_ad_client = "pub-000000000000000";
    google_alternate_ad_url = "http://your.domain.name.com/google_adsense_script.html";
    google_ad_width = #{format[0]};
    google_ad_height = #{format[1]};
    google_ad_format = "#{format.join('x')}_as";
    google_ad_channel = "#{options['crit']}";
    google_color_border = #{rso[0]};
    google_color_bg = #{rso[1]};
    google_color_link = #{rso[2]};
    google_color_url = #{rso[3]};
    google_color_text = #{rso[4]};
    //--></script>
    <script type="text/javascript"
      src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
    </script>
    #{'</p>' if options[:center]}
 EOF
    adsense
  end

jeudi 7 septembre 2006

Consécration :

melissa

Le très respectueux Kineda viens de consacrer Melissa T. 'Hottest News Anchor on TV'.
Et vous voulez que je vous dise ? C'est plus que justifié. N'est-ce pas ?
Et c'est en écrivant ce post que je me rends compte qu'elle n'est pas seulement connue aux États-Unis, mais aussi un peu partout en Europe, et même au Japon.

Très belle performance, mais dis nous, comment fais-tu ?


mardi 5 septembre 2006

Mort du Crocodile Hunter - Shit Happens

BRISBANE, Australia (CNN) -- "Crocodile Hunter" Steve Irwin, the Australian naturalist killed by a stingray on Monday, was videotaped pulling a poisonous barb from his chest just before he died, according to news reports.

http://us.cnn.com/2006/SHOWBIZ/TV/09/05/irwin.death/index.html

Aussi prévisible que cela puisse être, cela reste dommage.

lundi 4 septembre 2006

Rails : Afficher l'age de quelque chose

RubyLogo Tout cela parce que time_ago_in_words ne permet pas de choisir le format du renvoi (jours, mois ou années), il renvoie par minutes, heures, et jours au maximum

Le but de l'exercide étant d'afficher l'age de quelqu'un en partant de sa date de naissance dans un champ MySQL nommé 'birthdate', au format DATE.

  1. Installer le très bon plugin units : gem install units
  2. Inclure la lib dans le controller souhaité (ou dans app/controllers/application.rb pour une inclusion globale) : require 'units/standard'
  3. Dans le view, il ne nous reste plus qu'a écrire : <%= (Time.now - person.birthdate.to_time).to_seconds.to_years.round %> years old

Voilà.

EDIT: et pour ceux qui me demanderaient pourquoi je dois le passer en secondes, je ne sais pas.

Re.

enfin.

dimanche 3 septembre 2006

WTF ?!

== USD to EUR (USDEUR=X) ==

Taux USD/EUR

vendredi 1 septembre 2006

Ruby on Rails : Françisation de error_messages_for

PS: je viens de trouver (presque) vraie une solution à ce problème, tout est disponible sur ce site : http://www.railtie.net/articles/2006/01/26/enhancing_rails_errors De ce fait, la suite de l'actuel billet est tout à fait obsolète

Le français, c'est chiant.

Rails est plein de helpers, tous utiles mais avec une belle partie destinée à un public anglophone/américain.
Aujourd'hui, je me suis attelé à faire une version française de error_messages_for, qui permet de gérer les apostrophes, féminins et les pluriels des champs, plus le pluriel du titre du formulaire, tout en gardant vos validates_* dans votre model.
Vous devez donc ajouter ceci dans vos helpers (dans app/helpers/application_helper.rb de préférence).
Cette fonction est utilisable de cette façon :
<%= error_messages_for_fr 'commande', :feminin => true, :femff => ['taille','famille'], :plurff => ['termes_du_contrat'] %>

Toutes les nouvelles options sont facultatives :

  • :feminin : Si le formulaire est féminin => "Cette commande ne peut être enregistré à cause d'une erreurs"
  • :femff : Feminin for fields : un array contenant tous les champs féminins ne commençant pas par une voyelle : => "La taille est est invalide"
  • :plurff : Pluriel for fields : un array contenant tous les champs dont le premier mot est pluriel ne commençant pas par une voyelle : => "Les termes du contrat doi(ven)t être accepté(s)"

Alors oui, on peut faire mieux pour optimiser le bon français et éviter les parenthèses comme dans le dernier exemple, mais je ne souhaitais pas sursursurcharger la fonction plus qu'elle ne l'est déjà...

Vu que je suis relativement nouveau à ruby, le code est surement améliorable.

 def error_messages_for_fr(object_name, options = {})
    # gestion  du <h2> à partir de
    # /usr/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_view/helpers/active_record_helper.rb
    retour = error_messages_for(object_name, options)
    cecette = (options[:feminin] == true) ? 'Cette' : 'Ce'
    esup = (options[:feminin] == true) ? 'e' : ''
    retour.gsub!(/(\d+) (\w+) prohibited this .+ from being saved/,"#{cecette} #{object_name.humanize.downcase} ne peut être enregistré#{esup} à cause \\1 \\2")
    retour.gsub!('1 error','d\'une erreur')
    retour.gsub!(/(\d+) errors/,"de \\1 erreurs")
    retour.gsub!('There were problems with the following fields:','Les champs suivants posent problème&nbsp;:')
    # gestion du sous-titre à partir de
    # /usr/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/validations.rb
    preversion = [ "is not included in the list", "is reserved", "is invalid", 
    "doesn't match confirmation", "must be accepted", "can't be empty", 
    "can't be blank", "is too long \(maximum is (\d+) characters\)", 
    "is too short \(minimum is (\d+) characters\)", "is the wrong length \(should be (\d+) characters\)", 
    "has already been taken", "is not a number" ]
    postversion = [ "n'est pas dans la liste", "est réservé(e)", "est invalide", "ne corresponds pas à la confirmation", 
    "doi(ven)t être accepté(s)", "ne peut être blanc", "ne peut être vide", 
    "est trop long (le maximum étant de \\1 caractères)", "est trop court (le minimum étant de \\1 caractères)", 
    "est de taille incorrecte (devrait être de \\1 caractères", "est déjà pris", "n'est pas un nombre" ]
    preversion.each_index {|w|
      retour.gsub!(/#{preversion[w]}/, postversion[w])
    }

    retour.gsub!("<li>","\n<li>")
    @options = options
    def feminiser(str, ret = nil)
      @options[:femff].each {|x|
        ret = str.gsub(/<li>#{x.humanize}/i, "<li>La #{x.humanize.downcase}")
      } if @options[:femff]
      ret
    end

    def plurieliser(str, ret = nil)
      @options[:plurff].each {|x|
        ret = str.gsub(/<li>#{x.humanize}/i, "<li>Les #{x.humanize.downcase}")
      } if @options[:plurff]
      ret
    end

    def apostropher(str, ret = nil)
      ret = str.gsub(/<li>([aeiouy]+)/i,"<li>L'\\1")
      ret
    end

    double = retour
    double.split("\n").map {|z|
      y = (z.include? '<li>') ? z.downcase : z
      unless y == feminiser(y) or y == plurieliser(y) or y == apostropher(y)
        y.gsub!(/<li>(.+)/,"<li>Le \\1")
      else
        y = feminiser(y) if feminiser(y)
        y = plurieliser(y) if plurieliser(y)
        y = apostropher(y) if apostropher(y)
      end
      retour.gsub!(z,y) if y
    }
    retour
  end

Pages: