Recommend Me


Vendredi 12 décembre 2008

Nab Has Shoes 0.3.1

Classé dans : Linux, Mac, Projets, Ruby, Shoes, Windows — greg @ 19:36

Pour fêter la sortie de Nab Has Shoes 0.3.1, je viens d’ouvrir le projet sur rubyforge qui vient donc compléter la page sur The ShoeBox.

Have fun !

• • •

Jeudi 11 décembre 2008

Nab Has Shoes on the box

Classé dans : Projets, Ruby, Shoes — greg @ 19:32

Nab Has Shoes est désormais disponible sur The ShoeBox

• • •

Mardi 2 décembre 2008

Documenter avec Ruby

Classé dans : Java, Langage, Projets, Ruby — greg @ 21:00

Je viens de terminer la première partie de ce qui est certainement la plus grosse documentation que j’ai pu écrire dans ma vie. Je n’en dévoilerai pas plus sur le contenu, car il s’agit d’un travail pour mon employeur, sachez simplement qu’il s’agit d’une documentation d’API à destination de développeurs pour les technologies Windows DLL, Framework MacOSX, .Net, Java et SOAP. Ce qui m’intéresse ici est plutôt de vous parler de la méthode employée.

L’ensemble représente pour le moment 6 documents : 4 Quick Start, un document de référence technique (il en reste 3 à écrire) et un document de cas d’utilisations. Le tout représente plus de 450 pages et nous devrions dépasser les 1600 pages quand les trois derniers documents seront rédigés.

L’ensemble a été écrit en XML ce qui présente l’énorme avantage de pouvoir partager des paragraphes, voir des chapitres, entre plusieurs documents. De plus, l’écriture de cette documentation ce faisant à plusieurs, nous utilisons subversion comme repository de sources, impossible — ou tout au moins inutile — avec un document Word ou OOo. Chacun peut ainsi travailler sur une partie précise de la documentation sans perturber les autres. Nous utilisons CruiseControl.rb pour l’intégration continue.

Nous avons un ensemble de feuilles de styles permettant de générer des versions HTML (une page et multi-pages) et du PDF via FOP.

A l’origine nous utilisions ANT pour générer les documents, mais tout cela est en train de migrer vers Rake. Non seulement l’utilisation de FOPJava avec Ruby est très simple mais en plus cela nous permet de migrer tout un ensemble de scripts sous Ruby/Rake. En effet, nous avons plusieurs scripts pour nous aider. L’un par exemple utilise RubyDiff pour rechercher des différences, entre deux versions d’APIs, et génère automatiquement de nouvelles entrées dans la doc. L’utilisation de REXML nous permet de modifier de la documentation automatiquement, ou de générer de nouvelles pages à partir de templates XML, souvent avec l’aide d’Erb. Tout cela est en train d’être réuni dans un Rakefile. Bien entendu chaque action automatisée est journalisée et peut être rejouée, supprimée, remplacée… Ainsi pour la constitution de la trame du document, chacun peut savoir ce qui a été fait. Cela complété avec les possibilités offertes par SVN fait que nous pouvons à tout moment revoir l’ensemble de l’histoire de la fabrication de cette documentation. Bien entendu la conformité de l’ensemble est validée à chaque étape…

• • •

Dimanche 30 novembre 2008

Cornerstone

Classé dans : Mac, Projets — greg @ 21:05

Utilisateur de Zsh, je traîne une configuration de cet irremplaçable shell depuis maintenant 10 ans. 10 ans de constantes évolutions qui me permettant d’utiliser la “ligne de commande” à une vitesse qui me donnerait presque envie d’encadrer mon .zshrc dans mon salon ;)

Pour tout ce qui concerne mes projets, j’utilise subversion et mon .zshrc fourmille de fonctions et autres alias qui me permettent de tagger, copier, commiter, merger… mes sources avec une amusante facilité…

Quoi qu’il en soit, un bon outil graphique est parfois fort agréable. Ainsi j’ai abandonné Vim pour Textmate, diff pour Changes, Linux pour MacOSX

Je n’avais rien trouvé de satisfaisant pour subversion, et bien Conerstone m’a convaincu. Non seulement ce client SVN est graphiquement excellent, mais en plus il est d’une simplicité déconcertante et c’est un véritable tout-en-un. Vous ne regretterez pas vous 69 USD.

• • •

Jeudi 13 novembre 2008

Bivouac 0.4.0-RC1

Classé dans : Projets, Ruby, Web, bivouac — greg @ 20:27

Je viens de commiter dans le repository de bivouac la release candidate 1 de la version 0.4.0.

Au programme pas mal de changements :

  • Support de Camping >= 1.9
  • Ajoute de l’option :ieOnly au helper javascript_include_tag
  • postamble.rb est définitivement abandonné
  • script/plugin et la classe Bivouac::Plugin class ont été modifiés afin de supporter une nouvelle tache Rakefile : plugin:update
  • Mise à jour du controller “Not Found”
  • Remplacement de before_filter par la solution proposée par Magnus Holm
  • Le générateur view fait son come-back
  • Ajout du générateur Helper
  • Ajout des render xml, json et javascript

Bien entendu il y a également les traditionnelles corrections de bug.

Notez enfin que l’exemple de blog fourni dans les sources a été totalement réécrit sur le modèle proposé par Magnus dans Camping.

Blog

La mise ne ligne de la version 0.4.0 devrait suivre dans peu de temps. Je voudrais refaire une passe sur les plugins avant…

• • •

Mardi 4 novembre 2008

Mixr et Perl

Classé dans : Mixr, Perl, Projets — greg @ 20:23

Allez, ce soir on fait du Perl

  1. use MixrClient;
  2.  
  3. $p = MixrClient->new( "localhost", 9900 );
  4.  
  5. print "Store key => value : ";
  6. if( $p->store( "key", "value" ) ) {
  7.   print "ok!\n";
  8. } else {
  9.   print "error!\n";
  10. }
  11.  
  12. print "Store cle => valeur : ";
  13. if( $p->store( "cle", "valeur" ) ) {
  14.   print "ok!\n";
  15. }   else {
  16.   print "error!\n";
  17. }
  18.  
  19. print "Get key = ";
  20. my $r = $p->get( "key" );
  21. print $r . "\n";
  22.  
  23. print "List of keys : \n";
  24. @keys = $p->keys();
  25. foreach $k ( @keys ) {
  26.   print "- $k\n";
  27. }
  28.  
  29. print "List of values : \n";
  30. @keys = $p->values();
  31. foreach $k ( @keys ) {
  32.   print "- $k\n";
  33. }
  34.  
  35. my %h = $p->to_hash();
  36. while(($k, $v) = each(%h)) {
  37.   print "$k => $v\n";
  38. }
  39.  
  40. print "Delete cle : ";
  41. print $p->delete( "cle" )."\n";
  42.  
  43. print "Is empty : ";
  44. if( $p->is_empty() ) {
  45.   print "yes!\n";
  46. } else {
  47.   print "no!\n";
  48. }
  49.  
  50. print "Has key ‘key’ : ";
  51. if( $p->has_key( "key" ) ) {
  52.   print "yes!\n";
  53. } else {
  54.   print "no!\n";
  55. }
  56.  
  57. print "Has key ‘cle’ : ";
  58. if( $p->has_key( "cle" ) ) {
  59.   print "yes!\n";
  60. } else {
  61.   print "no!\n";
  62. }
  63.  
  64. print "Clear !\n";
  65. $p->clear();
  66.  
  67. print "Is empty : ";
  68. if( $p->is_empty() ) {
  69.   print "yes!\n";
  70. } elsif( not $p->is_empty() ) {
  71.   print "no!\n";
  72. }
• • •

Lundi 3 novembre 2008

Mixr et Java

Classé dans : Erlang, Java, Mixr, Projets — greg @ 19:17

Je vous avais promis du Java… En voici

import net.rubyfr.MixrClient;
import java.io.*;

public class Test {
  public static void main( String arg[] ) {
    MixrClient p = new MixrClient();
    System.out.println( p.store( "cle", "valeur" ) );
    System.out.println( p.get( "cle" ) );
    System.out.println( p.store( "key", "value" ) );
   
    System.out.println( "hasKey( cle ) = " + p.hasKey( "cle" ) );
    System.out.println( "hasKey( truc ) = " + p.hasKey( "truc" ) );
   
    System.out.println( "hasValue( value ) = " + p.hasValue( "value" ) );
    System.out.println( "hasValue( truc ) = " + p.hasValue( "truc" ) );
   
    System.out.println( "empty : " + p.isEmpty() );
   
    System.out.println( "Liste des clés : " );
    String[] k = p.keys();
    System.out.println( k.length );
    for( int x = 0; x < k.length; x++ ) {
      System.out.println( k[x] );
    }
   
    System.out.println( "Liste des valeurs : " );
    String[] v = p.values();
    System.out.println( v.length );
    for( int x = 0; x < v.length; x++ ) {
      System.out.println( v[x] );
    }
   
    System.out.println( "DELETE cle : ");
    System.out.println( p.delete( "cle" ) );
   
    System.out.println( "Taille : " + p.length() );
   
    System.out.println( "CLEAR" );
    p.clear();
   
    System.out.println( "Liste des valeurs : " );
    String[] w = p.values();
    System.out.println( w.length );
    for( int x = 0; x < w.length; x++ ) {
      System.out.println( x + " : " + w[x] );
    }
   
    System.out.println( "empty : " + p.isEmpty() );
  }
}

• • •

Mardi 28 octobre 2008

Utiliser Mixr avec PHP

Classé dans : Mixr, PHP, Projets — greg @ 20:54

Je viens d’ajouter dans le repository de Mixr une classe cliente pour PHP.

Elle n’est pas encore aussi complète que la version Ruby, mais vous pouvez déjà en faire quelque chose :

  1. <?php
  2. require ‘mixr_client.php’;
  3.  
  4. $p = new MixrClient();
  5. echo $p->store( "k1", "v1" )."\n";
  6. echo $p->get( "k1" )."\n";
  7. echo $p->store( "k2", "v2" )."\n";
  8. print_r($p->to_hash());
  9. print_r($p->keys());
  10. print_r($p->values());
  11. echo $p->delete( "k2" )."\n";
  12. print_r($p->keys());
  13. print_r($p->values());
  14. $p->clear();
  15. if( $p->is_empty() == true ) {
  16.         echo "Mixr vide !\n";
  17. }
  18. ?>

Bon, je n’ai pas fait de PHP depuis des lustres… Si ça ce voit, n’hésitez pas à me le dire ;)

Bon, demain je vais faire du Java…

• • •

Jeudi 23 octobre 2008

Mixr

Classé dans : Erlang, Mixr, Projets, Ruby — greg @ 0:41

Il n’y a pas que des désavantages à avoir des enfants qui boivent un biberon vers 2h du matin et d’autres qui collectionnent la gastro. En effet, cette soirée de veillée m’a permis de développer un nouveau petit projet : Mixr.

Mixr is a tiny memory object caching system

La partie serveur est écrite avec erlang (vous pourrez pas dire que je ne vous avais pas prévenu !). Coté client, le gem s’accompagne bien entendu d’une classe pour Ruby, mais je n’exclue pas, à la prochaine otite de vous proposer une classe pour PHP, Perl ou Python…

Bon…

sudo gem install mixr
• • •

Jeudi 16 octobre 2008

Tiny Tiny Erlang Web Server v0.2.0

Classé dans : Erlang, Projets, Web — greg @ 23:16

J’ai fait quelques modifications dans mon mini serveur HTTP.

En effet, il nécessite maintenant la création d’un fichier de configuration sur le format suivant :

{port, 9900}.
{rootdir, "/Users/greg/wwwroot"}.

Comme vous pouvez le voir, vous pouvez spécifier le port d’écoute du serveur et le DocumentRoot.

Le code est ici ou la.

Voici également un petit script pour démarrer facilement ce server :

  1. #!/usr/bin/env bash
  2. erlc rserver.erl
  3. erl -noshell -s rserver start -s init stop
• • •
« Page précédentePage suivante »
Powered by: WordPress • Template adapted from the Simple Green' Wench theme - RSS