Recommend Me


Jeudi 11 juin 2009

Fin… et suite…

Voilà, le temps et venu. Je ferme définitivement ce blog pour me consacrer pleinement au suivant.

See you there.

• • •

Jeudi 12 février 2009

Anatomie et projets

Classé dans : Camping, Erlang, Mixr, NXT, Projets, Ruby, SOAP::LC, Shoes, TextMate, bivouac — greg @ 20:03

Voici une des parties les plus intimes de mon anatomie :



Si je vous montre cela, c’est pour vous prouver que mon activité cérébrale se porte bien avant de vous annoncer qu’il est temps pour moi de mettre fin à certains de mes projets.

En effet, aujourd’hui je maintiens, plus ou moins activement, 9 projets différents :

Certains de ces projets ont trouvé un public, d’autre pas, bref, la vie normale. Quoi qu’il en soit, c’est plus une question de temps, mais je ne peux plus m’en occuper avec la même passion qui m’animait au début de chacun de ces développements. Je vais donc mettre fin à certains pour me concentrer sur d’autres.

Le plus difficile à été de décider d’arrêter Bivouac. En effet, ce projet m’a énormément appris, et bien qu’il ait même permis la mise en production de quelques réalisations qui ont aujourd’hui un large public, il y a un moment ou il faut être franc avec soi même et revenir à ses premières amours !

Mes regrets seront moins forts, mais Ruby/XPath et Ruby/Ivy vont aussi être délaissés.

Les autres continueront à évoluer, mais à des vitesses très différentes.

Ruby/XSLT et Ruby/GraphViz ne devraient évoluer qu’au rythme des demandes de corrections et des patchs que l’on m’envoie.

NabHasShoes et un pur amusement et ce sont mes enfants qui commanderont son évolution.

NXC Mate évoluera en fonction des demandes, mais surtout du temps que je passe à me détendre ;)

mixr et SOAP::LC seront les deux grands gagnants et je vais y consacrer une bonne partie de mon temps libre.

Et le reste ? Parce qu’il y a un reste. Et bien il va arriver. Je ne peux pas en dire grand-chose pour le moment, car j’ai un travail et 6 enfants qui m’occupent la plus grande partie de mon temps. Mais si j’arrête certains projets, c’est parce que je me concentre sur de nouvelles choses avec la ferme intention d’en faire faire profiter ceux qui y trouveront un intérêt…

• • •

Mercredi 26 novembre 2008

ErlyBird 0.17.0

Classé dans : Erlang — greg @ 0:54

La version 0.17.0 de ErlyBird, le plugin Erlang pour Netbeans est disponible.

Je l’ai testé avec NetBeans 6.5… Pas de problème.

Commencez par télécharger ErlyBird. Décompressez l’archive. Puis dans Netbeans, choisissez Tools -> Plugins. Dans l’onglet Downloaded cliquez sur Add Plugins…. Sélectionnez l’ensemble des fichiers .nbm puis cliquez sur Install. Une fois l’IDE redémarré, modifier le chemin vers erl dans les options.

Attention, lorsque vous allez créer votre premier projet, Netbeans va indexer toutes les librairies OTP. Si vous avez un vieux bouzin, ça peut prendre du temps.


ErlyBird

• • •

Jeudi 6 novembre 2008

R12B-5

Classé dans : Erlang — greg @ 16:38

Erlang R12B-5 est disponible !

• • •

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() );
  }
}

• • •

CEAN

Classé dans : Erlang — greg @ 18:46

Le CEAN nouveau est arrivé… Il est tout beau, tout chaud !

• • •

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
• • •

Tiny Tiny Erlang Web Server

Classé dans : Erlang, Projets, Web — greg @ 0:42

Depuis quelques jours je m’amuse avec Erlang. Je vous livre mon “hello world”.

Ce n’est pas très beau, on peut certainement faire beaucoup mieux. Mais ça fait “Hello world” ;)

  1. -module(rserver).
  2. -author(’gregoire.lejeune@free.fr’).
  3. -compile(export_all).
  4.  
  5. start_server(Port) ->
  6.   {ok, ListenSocket} = gen_tcp:listen(Port, [binary, {packet, 0}, {active, false}]),
  7.   io:format("** Server Started~n"),
  8.   loop(ListenSocket).
  9.  
  10. loop(ListenSocket) ->
  11.   case gen_tcp:accept(ListenSocket) of
  12.     {ok, Socket} ->
  13.       spawn(fun() ->
  14.         handle_connection(Socket)
  15.       end),
  16.       loop(ListenSocket);
  17.     {error, Reason} ->
  18.       io:format("Error: ~p~n", [Reason])
  19.   end.
  20.  
  21. handle_connection(Socket) ->
  22.   try communication(Socket)
  23.   catch
  24.     error:Reason ->
  25.       {gen_tcp:send(Socket, io_lib:format("Error: ~p~n", [Reason]))}
  26.   end,
  27.   ok = gen_tcp:close(Socket).
  28.  
  29. communication(Socket) ->
  30.   {ok, Binary} = gen_tcp:recv(Socket, 0),
  31.   % Do some stuff with Binary
  32.   {ok, [R|Z]} = regexp:split( binary_to_list(Binary), "\r\n" ),
  33.   {ok, [M,F,P]} = regexp:split( R, " " ),
  34.   case F =:= "/" of
  35.     true -> File = "index.html";
  36.     false -> {ok, File, _} = regexp:gsub(F, "^/", "")
  37.   end,
  38.   {WD, JJ, MD, AA, HH, MN, SS} = get_local_time(),
  39.   case file:read_file(File) of
  40.     {ok, Html} ->
  41.       gen_tcp:send(Socket, io_lib:format("HTTP/1.1 200 OK~nDate: ~s, ~p ~s ~p ~p:~p:~p GMT~nServer: Rserver/1.0.0~n~n~s", [WD, JJ, MD, AA, HH, MN, SS, binary_to_list(Html)]));
  42.     {error, _} ->
  43.       gen_tcp:send(Socket, io_lib:format("HTTP/1.1 404 Not Found~nDate: ~s, ~p ~s ~p ~p:~p:~p GMT~nServer: Rserver/1.0.0~n~n~s", [WD, JJ, MD, AA, HH, MN, SS, "<html><body>404 error</body></html>"]))
  44.   end.  
  45.  
  46. %%%%%%%%%%%%%%%%%%%%%%%%%%%
  47.  
  48. day(0) -> "Mon";
  49. day(1) -> "Tue";
  50. day(2) -> "Wed";
  51. day(3) -> "Thu";
  52. day(4) -> "Fri";
  53. day(5) -> "Sat";
  54. day(6) -> "Sun".
  55.  
  56. month(1) -> "Jan";
  57. month(2) -> "Feb";
  58. month(3) -> "Mar";
  59. month(4) -> "Apr";
  60. month(5) -> "May";
  61. month(6) -> "Jun";
  62. month(7) -> "Jul";
  63. month(8) -> "Aug";
  64. month(9) -> "Sep";
  65. month(10) -> "Oct";
  66. month(11) -> "Nov";
  67. month(12) -> "Dec".
  68.  
  69. get_local_time() ->
  70.   D = calendar:local_time(),
  71.   [{{AA,MM,JJ},{HH,MN,SS}}] = calendar:local_time_to_universal_time_dst(D),
  72.   WD = day(calendar:day_of_the_week(AA, MM, JJ)),
  73.   MD = month(MM),
  74.   {WD, JJ, MD, AA, HH, MN, SS}.
• • •
Powered by: WordPress • Template adapted from the Simple Green' Wench theme - RSS