Recommend Me


Mardi 22 avril 2008

Article dans GLMF #105

Classé dans : Projets, Ruby — greg @ 18:40

Je ne l’ai pas encore eu entre les mains, mais vous trouverez un nouvel article sur Ruby dans le GNU Linux Magazine France #105 du mois de mai.

Cette fois-ci, je vous explique comment créer un mini moteur de recherche avec Ferret et Mongrel.

L’idée n’est pas tant de rentrer dans les détails de ces deux librairies, mais surtout de montrer qu’avec peu de lignes nous pouvons faire de belles choses…

Bonne lecture à tous et surtout n’hésitez pas à faire vos remarques ici ou par mail.

[Mise à jour]

Il y a un petit bug dans le script de la page 90, à la ligne 39. Voici le script corrigé :

  1. require ‘digest/md5′
  2. require ‘net/http’
  3. require ‘uri’
  4.  
  5. require ‘rubygems’
  6. require ‘hpricot’
  7.  
  8. class WebIndexer
  9.  
  10.   def initialize
  11.     @pagesMD5 = Array::new( )
  12.   end
  13.  
  14.   def indexer( uri )
  15.     puts "Indexation de #{uri}"
  16.   end
  17.  
  18.   def crawler( uri )
  19.     # Récupération de la ressource
  20.     url = URI.parse( uri )
  21.     response = Net::HTTP.get_response( url )
  22.    
  23.     # Récupération du contenu de la page
  24.     pageContent = response.body
  25.    
  26.     # Calcul du MD5 de la page
  27.     pageDigest = Digest::MD5.hexdigest( pageContent )
  28.     if @pagesMD5.include?( pageDigest )
  29.       return
  30.     end
  31.     @pagesMD5 << pageDigest
  32.  
  33.     # Indexation
  34.     case response.content_type
  35.       when "text/html"
  36.         indexer( uri )
  37.        
  38.         # Parcour des liens
  39.         pageDocument = Hpricot( pageContent )
  40.         (pageDocument/"a").each do |element|
  41.           href = element[‘href’]
  42.           if /#{url.host}/.match( href )
  43.             href += "/" if URI.parse( href ).path == ""
  44.             crawler( href )
  45.           else
  46.             puts "\t[INFO] - Ignore #{href} : Host not match!"
  47.           end
  48.         end
  49.       when "text/plain"
  50.         indexer( uri )
  51.       else
  52.         puts "\t[IGNORE] - #{uri} : Not Text or HTML!"
  53.     end
  54.   end
  55. end
  56.  
  57. site = WebIndexer.new( )
  58. site.crawler( ARGV[0] )
• • •

Vendredi 11 avril 2008

mod_rails

Classé dans : RoR, Ruby, Web — greg @ 20:24

Passenger, le mod_rails pour Apache est disponible…

Phusion Passenger — a.k.a. mod_rails — makes deployment of applications built on the revolutionary Ruby on Rails web framework a breeze. It follows the usual Ruby on Rails conventions, such as “Don’t-Repeat-Yourself”.

Une bonne âme pour tester sur Mac ?

• • •

Tiny tiny serveur…

Classé dans : Ruby, Web — greg @ 9:47

Avec Thin :

ruby -rubygems -e‘require"thin";include Thin;Server.new(
"0.0.0.0",3000){map("/"){run Rack::File.new(".")}}.start’

Avec Mongrel :

ruby -rubygems -e‘require"mongrel";include Mongrel;HttpServer.new(
"0.0.0.0",3000).register("/",DirHandler.new(".")).run.join’

Avec WEBRick :

ruby -rwebrick -e‘include WEBrick;s=HTTPServer.new(:Port=>3000)
trap("INT"){s.shutdown};s.mount("/",HTTPServlet::FileHandler,".");s.start’
• • •

Jeudi 10 avril 2008

Bivouac 0.2.2 et Backpack 0.1.0

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

La version 0.2.2 de bivouac est disponible. C’est au tour du postamble d’avoir été totalement réécrit. Grâce à cela il est maintenant possible de choisir le serveur à utiliser (WEBRick, Mongrel ou Thin). De plus, vous pouvez binder le serveur sur le port et l’IP de votre choix lors du lancement :

$ ruby script/server -h
Usage: server [thin|mongrel|webrick] [option]
  -p port                : Runs Bivouac on the specified port (default 3301)
  -b ip                  : Binds Bivouac to the specified ip (default 0.0.0.0)
  -d start|stop|restart  : Make server run as a Daemon.

Enfin, Bivouac::Template#copyTemplate et Bivouac::Template#template ont été modifiés afin de permettre leur utilisation par backpack.

Backpack, justement, fait son apparition. Il vous permet de générer simplement le squelette d’un plugin pour bivouac.

$ backpack –help
Usage: backpack [options] plugin_name
backpack is a plugin generator for bivouac

Specific options:
    -g, –generator NAME:TYPE,…    Generator list. TYPE must be ‘view’ or ‘controller’
    -c, –no-controller-helpers      Do not create controller helper
    -v, –no-view-helpers            Do not create view helper

Common options:
    -?, –help                       Show this message
    -V, –version                    Show version

C’est un sous-projet non inclu dans bivouac, a installer donc :

sudo gem install backpack
• • •

Mercredi 9 avril 2008

Perdu par forfait !

Classé dans : Friend, Tout et rien — greg @ 11:27

07042008.jpeg

• • •

Mardi 8 avril 2008

Ice Age 3

Classé dans : Important — greg @ 23:06

• • •

Dimanche 6 avril 2008

Ruby/GraphViz 0.8.1

Classé dans : Projets, Ruby — greg @ 18:56

C’est au tour de Ruby/GraphViz d’être mis à jour et de passer en version 0.8.1

• • •

Ruby/XSLT 0.9.6

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

Je viens juste de mettre en ligne la version 0.9.6 de Ruby/XSLT.

Pas de changement, mais plusieurs corrections de bugs principalement liées à des fuites de mémoire.

• • •

Vendredi 4 avril 2008

Bivouac 0.2.1 et iUI’s Tent 0.0.2

Classé dans : Camping, Projets, Ruby, Web, bivouac — greg @ 19:45

Nouvelle version Pour Bivouac et son plugin iPhone/iPod Touch : iUI’s Tent… Essentiellement de la correction de bug, mais également la détection du user-agent dans iUI’s Tent avec possibilité de rediriger l’utilisateur vers une page “alternative” s’il n’utilise pas le bon device

• • •

Mercredi 2 avril 2008

I love PHP!

Classé dans : Ruby — greg @ 23:00

Comment écrire 3 fois “Hello World!” en Ruby :

3.times do
  puts "Hello World!"
end

Et en PHP ?

<?php
include_once dirname(__FILE__) . "/../../thesis-r1779/runtime/src/r2p.php";

do {
  $_r2p_tmp_0 = 3;
  global $_r2p_block_10;
  $_r2p_block_10 = r2p_define_block(‘_r2p_function_10′, array(3, -1));
  function _r2p_function_10($positional, $rest) {
    global $_r2p_block_10;
    list($r2p_self, $params) = r2p_block_enter($_r2p_block_10, $positional, $rest, R2P_ASSIGNMENT_LHS_TYPE_PARALLEL);
    $_r2p_tmp_8 = r2p_call($r2p_self, ‘puts’, r2p_string(‘Hello World!’));
    if (r2p_exception_needs_handling()) {
      return;
    };
    $_r2p_tmp_9 = $_r2p_tmp_8;
    r2p_block_leave();
    return $_r2p_tmp_9;
  };
  r2p_call_with_block($r2p_self, $_r2p_tmp_0, ‘times’, $_r2p_block_10);
  if (r2p_exception_needs_handling()) {
    break;
  };
} while (false);
if (r2p_exception_needs_handling()) {
  r2p_toplevel_exception_handler();
}
?>

Ha, mais non ! Je ne me moque pas, la preuve ;)

• • •
Page suivante »
Powered by: WordPress • Template adapted from the Simple Green' Wench theme - RSS