Recommend Me


Jeudi 22 janvier 2009

Trier en tenant compte des accents…

Classé dans : Ruby — greg @ 21:31

Aujourd’hui, une personne demandait sur la mailling list Rails comment trier des chaînes de caractères contenant des accents.

En effet…

["az","aea","aéb"].sort
# => ["aea", "az", "aéb"]

La solution (la plus simple ?) consiste à remplacer les lettres accentuées par leur équivalent sans accent et à faire le tri sur les chaînes ainsi transformées. Pour cela nous utiliserons le fait que la méthode String.sort peut prendre en paramètre un bloc permettant de préciser la méthode de comparaison entre deux éléments. Donc; imaginons que nous ayons une méthode String.no_accent, nous pouvons donc faire cela :

["az","aea","aéb"].sort { |x, y| x.no_accent <=> y.no_accent }

Malheureusement, la méthode String.no_accent n’existe pas… Et bien, créons là :

class String
  def no_accent
    self.tr_s( ‘ÁÀÂÄÃÅÇÉÈÊËÍÏÎÌÑÓÒÔÖÕÚÙÛÜÝáàâäãåçéèêëíìîïñóòôöõúùûüýÿ’,
               ‘AAAAAACEEEEEIIIINOOOOOUUUUYaaaaaaceeeeiiiinooooouuuuyy’ )
  end
end

puts ["az","aea","aéb"].sort { |x, y| x.no_accent <=> y.no_accent }
# => ["aea", "aéb", "az"]

Une autre solution consiste à passer par les entités html :

class String
  def no_accent
    require ‘rubygems’
    require ‘htmlentities’
   
    HTMLEntities.new.encode( self, :named ).gsub( /\&([A-za-z])(?:acute|cedil|circ|grave|ring|tilde|uml)\;/, \1 ).gsub( /\&([A-za-z]{2})(?:lig)\;/, \1 ).gsub( /\&[^;]+\;/, )
  end
end

["az","aea","aéb"].sort { |x, y| x.no_accent <=> y.no_accent }
# => ["aea", "aéb", "az"]

Et enfin il y a la solution qui utilise unicode :

$KCODE = ‘u’
 
class String
  def no_accent
    require ‘rubygems’
    require ‘unicode’
 
    Unicode.normalize_KD(self).unpack(‘U*’).select{ |cp|
      cp < 0×0300 || cp > 0×036F
    }.pack(‘U*’)
  end
end
 
["az","aea","aéb"].sort { |x, y| x.no_accent <=> y.no_accent }
# => ["aea", "aéb", "az"]
• • •

Lundi 19 janvier 2009

soapUI pour Mac

Classé dans : Java, MacOSX, Tout et rien — greg @ 20:42

MAJ — Désolé, j’avais oublié de vous mettre les liens de téléchargement :

Il y a quelque mois, je vous proposais d’utiliser soapUI sous forme de .app sur Mac.

Depuis nous sommes passés à la version 2.5. Et je n’avais pas pris le temps de refaire le .app. En effet jusqu’à maintenant j’utilisais le Jar Bundler de MacOSX pour générer des .app à partir de .jar. Cette solution à l’avantage d’être simple, malheureusement il n’est pas possible de sauvegarder un quelconque projet et il faut donc tout refaire à chaque fois.

Je me suis donc amusé à écrire un petit script shell qui permet facilement de recréer le .app de soapUI :

#!/bin/bash
# Make SOAP-UI.app

MKSOAP_UI_APP_VERSION="0.0.1"

echo "soapui.app generator for Mac"
echo "Version "$MKSOAP_UI_APP_VERSION
echo "Copyright (c)2009 - Gregoire Lejeune"
echo

echo -n "Chemin d’accès au répertoire de soap-ui : "
read SUI_PATH

echo -n "Version : "
read SOAPUI_VERSION

rm -rf SoapUI.app

# Creation de l‘arborescence du .app
mkdir -p SoapUI.app/Contents/MacOS
mkdir -p SoapUI.app/Contents/Resources/Java

# Copy de JavaApplicationStub
cp /System/Library/Frameworks/JavaVM.framework/Versions/Current/Resources/MacOS/JavaApplicationStub SoapUI.app/Contents/MacOS

# Creation du PkgInfo
echo "APPL????" > SoapUI.app/Contents/PkgInfo

# Mise en place du Info.plist…
cat <<EOF > SoapUI.app/Contents/Info.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
<plist version="0.9">
<dict>
  <key>CFBundleName</key>
  <string>SoapUI</string>
  <key>CFBundleVersion</key>
  <string>$SOAPUI_VERSION</string>
  <key>CFBundleAllowMixedLocalizations</key>
  <string>true</string>
  <key>CFBundleExecutable</key>
  <string>JavaApplicationStub</string>
  <key>CFBundleDevelopmentRegion</key>
  <string>English</string>
  <key>CFBundlePackageType</key>
  <string>APPL</string>
  <key>CFBundleSignature</key>
  <string>????</string>
  <key>CFBundleInfoDictionaryVersion</key>
  <string>6.0</string>
  <key>CFBundleIconFile</key>
  <string>soapui.icns</string>
  <key>Java</key>
  <dict>
    <key>MainClass</key>
    <string>com.eviware.soapui.SoapUI</string>
    <key>JVMVersion</key>
    <string>1.5+</string>
    <key>ClassPath</key>
      <array>
EOF

# …et copie des fichiers .jar
for f in $SUI_PATH/lib/* $SUI_PATH/bin/*.jar
do
  FILENAME=`basename $f`
  cp $f SoapUI.app/Contents/Resources/Java
  if [ "${FILENAME##*.}" = "jar" ]
  then
    echo "      <string>\$JAVAROOT/$FILENAME</string>" >> SoapUI.app/Contents/Info.plist
  fi
done

cat <<EOG >> SoapUI.app/Contents/Info.plist
      </array>
    <key>Properties</key>
    <dict>
      <key>apple.laf.useScreenMenuBar</key>
      <string>true</string>
    </dict>
  </dict>
</dict>
</plist>
EOG

# Ajout de l’icone
cp soapui.icns SoapUI.app/Contents/Resources

# Ajout de l‘attribut "bundle" pour le .app
/Developer/Tools/SetFile -a B SoapUI.app

# That’s all folks !
echo "Done."

Après le lancement de ce script, on vous demandera de donne le chemin vers le répertoire des binaires (jars) de soapUI et le numéro de version.

Pour l’icône, j’ai pris le .ico dans les sources et je l’ai passé à img2icns.

• • •

Dimanche 18 janvier 2009

Java ma poule !

Classé dans : Java — greg @ 21:50

C’est vrai qu’à part une poule, je ne vois pas bien ce que ça peut-être ;)

• • •

Lundi 12 janvier 2009

NXC Mate 0.1.0-alpha

Classé dans : NXT, Projets — greg @ 9:58

Je vous l’avais promis, mon bundle pour NXC est disponible. Enfin, pas officiellement, mais vous pouvez tout de même le télécharger.

Il y a maintenant la complétion sur l’ensemble du langage, quelques snippets, la coloration syntaxique et deux commandes : l’une pour la compilation et l’autre pour la compilation et l’installation.

Amusez-vous !

• • •

Dimanche 11 janvier 2009

Oups ! (résolu)

Classé dans : Google — greg @ 19:34

[Update] Si vous rencontrez ce souci, il semble que le simple fait de supprimer tous ses cookies et relancer son navigateur résolve le problème…

• • •

GemViz

Classé dans : Projets, Ruby — greg @ 17:38

David Rupp vient d’annoncer, sur son blog, la mise à disposition de gemviz ce petit gem permet de créer le graph des dépendances d’un gem. Pour cela il utilise ruby-graphviz.

• • •

Mardi 6 janvier 2009

Sad day

Classé dans : People — greg @ 16:54

En effet, cela fait aujourd’hui 10 ans que l’immense Michel Petrucciani est mort. C’est une journée idéale pour (re) écouter September Second, Besame Mucho ou la Brasilian Suite

• • •

Jeudi 1 janvier 2009

NXC Mate

Classé dans : NXT, Projets, TextMate — greg @ 14:57

En ce premier jour de janvier, je vous souhaite avant tout une très bonne année.

Les festivités étant (malheureusement) terminées, il est temps de reprendre une activité normale ;) Cependant je ne vous ai pas parlé de ce que le père Noël avait dans sa hotte. Me concernant, il a eu la bonne idée de déposer dans mes chaussures quelques briques NXT.

Il existe de nombreuses solutions pour programmer ces petites briques. Classiquement vous pouvez utiliser NXT-G, mais comme vous pouvez le voir, il existe de nombreuses autres solutions. Et bien qu’il existe un module ruby, je préfère largement la solution NXC.

NXC (Not eXactly C) est livré avec un compilateur (nbc) et un outil d’installation (nxtcom). Ces outils existent pour Windows, Linux et Mac. Sous Windows, le projet propose Bricx Command Center, un environnement de développement dédié pour NBC/NXC. Sous Mac et Linux il faudra vous contenter de la ligne de commande. Et bien soit, je me suis donc amusé à faire un bundle pour TextMate. Ce module apporte la coloration syntaxique du code, de nombreuses snippets et quelques commandes.



Je rendrai cela disponible dans quelques jours…

• • •

Mardi 16 décembre 2008

Utiliser before à la place de before_filter dans Bivouac

Classé dans : Camping, Projets, Ruby, bivouac — greg @ 12:16

Dans un article précédent, je vous avais montré comment utiliser before_filter dans Bivouac. before_filter ayant été remplacé, dans la dernière version de Bivouac, par la solution proposée par Magnus Holm, voici comment modifier cet exemple pour qu’il fonctionne en version 0.4.0.

La seule modification concerne le controller. En effet, vous pouvez supprimer tout ce qui à trait à la gestion du filtre, soit la classe AdminCheckLogin et l’appel à before_filter :

module TestFilter::Controllers
  # …

  class AdminCheckLogin
    def self.filter( state )
      if state[:user].blank?
        return AdminLogin
      else
        return nil
      end
    end
  end
end

before_filter AdminCheckLogin, :only => [AdminHome]

A la place de tout cela, vous devez ajouter, ou vous voulez, le code suivant dans votre projet :

module TestFilter
  before :AdminHome do
    if @state[:user].blank?
      redirect R(Controllers::AdminLogin)
    end
  end
end  

Comme vous pouvez le voir, l’appel à before se fait dans le module TestFilter et non dans le controller directement. Il faut donc faire attention lorsque vous faire la redirection !

• • •

Lundi 15 décembre 2008

Bivouac 0.4.0

Classé dans : Camping, Projets, Ruby, bivouac — greg @ 20:46

La version 0.4.0 de Bivouac vient d’être mise en ligne.

Rappelons, pour les nouveaux, que Bivouac est un générateur “rails like” pour Camping.

Au programme de cette nouvelle version :

  • Support de Camping >= 1.9 ! A ce sujet je vous conseille d’installer la version de Magnus Holm.
  • Correction d’un bug dans options_for_javascript
  • Dans environment.rb, address a été remplacé par host
  • Camping n’ayant plus de dépendance avec markaby, cette dépendance a été ajoutée dans bivouac
  • Ajout de l’option :ieOnly à javascript_include_tag
  • postamble.rb est deprecated
  • script/plugin et la classe Bivouac::Plugin ont été modifiés afin de supporter la nouvelle tache Rakefile plugin:update
  • Le controller Not Found a été mis à jour
  • Remplacement de before_filter par la solution de Magnus Holm
  • Le générateur view fait un retour en force !
  • Ajout du générateur helper
  • Upgrade de Script.aculo.us en version 1.8.2
• • •
« Page précédentePage suivante »
Powered by: WordPress • Template adapted from the Simple Green' Wench theme - RSS