Disparition de why et Ma présence online

lipsum.rb

legoLe Lorem Ipsum est simplement du faux texte employé dans la composition et la mise en page avant impression. Le Lorem Ipsum est le faux texte standard de l’imprimerie depuis les années 1500, quand un peintre anonyme assembla ensemble des morceaux de texte pour réaliser un livre spécimen de polices de texte. Il n’a pas fait que survivre cinq siècles, mais s’est aussi adapté à la bureautique informatique, sans que son contenu n’en soit modifié. Il a été popularisé dans les années 1960 grâce à la vente de feuilles Letraset contenant des passages du Lorem Ipsum, et, plus récemment, par son inclusion dans des applications de mise en page de texte, comme Aldus PageMaker.lipsum.com

Télécharger…

require 'net/http'
 
require 'rubygems'
#I_KNOW_I_AM_USING_AN_OLD_AND_BUGGY_VERSION_OF_LIBXML2=true
require 'nokogiri'
 
# This class allow you to retrive "lorem ipsum" placeholder text from lipsum.com.
# 
# == What is "lorem ipsum"?
# 
# "Lorem Ipsum is simply dummy text of the printing and typesetting industry. 
# Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, 
# when an unknown printer took a galley of type and scrambled it to make a type 
# specimen book. It has survived not only five centuries, but also the leap 
# into electronic typesetting, remaining essentially unchanged. It was 
# popularised in the 1960s with the release of Letraset sheets containing Lorem 
# Ipsum passages, and more recently with desktop publishing software like Aldus 
# PageMaker including versions of Lorem Ipsum." (from lipsum.com)
# 
# == Synopsys
# 
#   require 'lipsum'
# 
#   t = Lipsum.new( )
#   t.paragraphs[3]
#   
#   puts t
# 
# === Initialization
# 
#   Lipsum::new( start = true )
#   
# If start is set to true, the placeholder text will start with 'Lorem ipsum 
# dolor sit amet...'.
# 
# === Create paragraphs, words, bytes or lists
# 
#   Lipsum.paragraphs[size]
#   Lipsum.words[size]
#   Lipsum.bytes[size]
#   Lipsum.lists[size]
#   
# With those methods, you can create placeholder texts with size `size'
# 
# === Print
# 
#   Lipsum.to_s
#   Lipsum.to_html
# 
# You can just 'puts' the Lipsum instance to print the text version. If you want 
# an html version, use Lipsum.to_html
# 
# == Requirements
# 
# This lib require nokogiri : http://nokogiri.rubyforge.org/nokogiri/
# 
# == Licence
# 
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see http://www.gnu.org/licenses/.
class Lipsum 
  class AllTypes #:nodoc:
    def initialize(start)
      @amount = 1
      @what = nil
      @start = start
    end
 
    def [](n)
      @amount = n
      generate
    end
 
    def to_s
      r = ""
      Nokogiri::XML.parse(@lorem_ipsum.to_s).xpath('/div[@id="lipsum"]/p').each do |p|
        r << p.content.to_s.strip << "\n\n"
      end
      r
    end
    alias_method :to_string, :to_s
 
    def to_html
      Nokogiri::XML.parse(@lorem_ipsum.to_s).xpath('/div[@id="lipsum"]/p').to_s
    end
 
    private
 
    def generate
      opts = {'amount' => @amount, 'what' => @what}
      opts['start'] = 1 if @start
      response = Net::HTTP.post_form(URI.parse('http://lipsum.com/feed/html'), opts)
      html = Nokogiri::HTML.parse(response.body)
 
      @lorem_ipsum = html.xpath('//div[@id="lipsum"]')
    end
  end
 
  class Paragraphs < AllTypes #:nodoc:
    def initialize(start)
      super(start)
      @what = "para"
    end
  end
 
  class Words < AllTypes #:nodoc:
    def initialize(start)
      super(start)
      @what = "words"
    end
  end
 
  class Bytes < AllTypes #:nodoc:
    def initialize(start)
      super(start)
      @what = "bytes"
    end
  end
 
  class Lists < AllTypes #:nodoc:
    def initialize(start)
      super(start)
      @what = "lists"
    end
 
    def to_s
      r = ""
      Nokogiri::XML.parse(@lorem_ipsum.to_s).xpath('/div[@id="lipsum"]/ul').each do |ul|
        r << ul.content.to_s.strip.split(/\n/).map { |x| "* " << x }.join( "\n" )
        r << "\n\n"
      end
      r
    end
 
    def to_html
      Nokogiri::XML.parse(@lorem_ipsum.to_s).xpath('/div[@id="lipsum"]/ul').to_s
    end
  end
 
  def initialize(start = true)
    @start = start
  end
 
  # Create paragraphs
  def paragraphs
    @lipsum = Paragraphs.new(@start)
  end
 
  # Create words
  def words
    @lipsum = Words.new(@start)
  end
 
  # Create bytes
  def bytes
    @lipsum = Bytes.new(@start)
  end
 
  # Create lists
  def lists
    @lipsum = Lists.new(@start)
  end
 
  # Retrieve text
  def to_s
    @lipsum.to_s
  end
  alias_method :to_string, :to_s
 
  # Retrieve test in HTML format
  def to_html
    @lipsum.to_html
  end
end
 
if __FILE__ == $0
  t = Lipsum.new(true)
  t.paragraphs[4]
  puts "TEXT :"
  puts t
  puts "HTML :"
  puts t.to_html
end

GemMenu 1.0-1000 (Sparkle inside)

GemMenuJe viens tout juste de tagger la version 1.0-1000 de GemMenu qui est donc la première version officielle. Vous pouvez la télécharger sur la page GitHub du projet.

Cette version contient diverses petites améliorations, donc l’ajout (nécessaire) de Sparkle. J’avais déjà présenté la mise en place de ce framework dans une application Cocoa. Sachez que ce que j’avais écrit à l’époque reste parfaitement valable avec RubyCocoa. Si vous voulez vous en convaincre, vous pouvez également regarder ce tutoriel de Konrad M. Lawson qui présente cela de façon un peu plus détaillée.

Je me suis rendu compte, lors de ce weekend, que j’avais d’énormes lacunes dans l’utilisation de Git. Ceci au point d’avoir réussi (je n’ai toujours pas compris comment !) a me retrouver avec des conflits de versions, alors que je suis le seul à travailler sur les sources ! L’ami Olivier devrait bientôt installer un serveur Git sur un de nos serveurs afin de me permettre de jouer avec et essayer de me perfectionner, car je dois vous avouer que je me suis fais de grosses frayeurs.

SoapUI-3.0.1.app

appleLes amis de chez eviware ont fait un effort en sortant la version 3.0 de SoapUI avec une App Mac. Malheureusement, ils ont un peu compliqué la méthode. Tout d’abord, ils nous obligent à passer par un installeur. Ce qui pour un MacUser est une aberration1. En effet, rien ne vaut le drag’n'drop pour installer un simple .app. De plus, ils utilisent xulrunner ce qui me semble un peu overkill par rapport à une simple utilisation de JavaApplicationStub. Bref, vous l’aurez compris, je ne suis pas conquis par leur solution et j’ai donc continué à utiliser la mienne dont vous pouvez télécharger le DMG.

1 Le terme est certe un peu fort !

GemMenu 1.0.0

projetsJe viens de mettre en téléchargement la version 1.0.0 de GemMenu. Au programme des modifications, vous verrez que j’ai ajouté une petite animation sur l’icône lors de la recherche des gems à mettre à jour. De plus, vous trouverez dans les préférences une nouvelle option permettant de demander le lancement automatique de l’application lors du démarrage du système.

Je ne suis toujours pas satisfait de la méthode utilisée pour faire la mise à jour des gems. Comme je vous l’avais dit, je suis passé d’une solution utilisant ROSXAuth à une solution utilisant un appel AppleScript et je n’aime pas non plus… Je vais donc passer un peu de temps à trouver une solution satisfaisante, mais en attendant, si l’un d’entre vous à une idée ou une piste à me donner, je prends avec plaisir. Il faut simplement garder en tête que la mise à jour des gems doit pouvoir se faire avec les privilèges administrateur.

Autre sujet de réflexion à l’ordre du jour : le passage de RubyCocoa à MacRuby. Je n’ai encore rien décidé à ce sujet et me suis simplement contenté de faire des tests qui m’ont fortement conquis. Non seulement il semble indéniable que MacRuby est bien plus rapide, mais en plus je trouve que c’est bien plus agréable à utiliser parce que beaucoup plus proche de la syntaxe de Cocoa. Je vais m’amuser à faire une version de GemMenu avec MacRuby et j’aviserai. Il y a cependant un gros poids dans la balance. RubyCocoa est installé en standard depuis MacOSX 10.5, toute la question et maintenant de savoir ce qu’il en sera avec la 10.6. Allons-nous assister à un putsch de MacRuby dans léopard des neiges ? La encore je suis curieux de connaître votre avis…

Deux petites remarques efin. Tout d’abord, bien que numérotée 1.0.0, cette version de GemMenu reste une beta avec les risques que cela comporte ;) Enfin, vous remarquerez que je n’ai pas mis à jour le repository des sources. Ceci est dû au fait que mes amis de chez Orange, à qui j’ai confié le soin de m’équiper en ADSL, sont incapables de trouver le problème qui affecte ma connexion depuis une semaine :/

Ouverture des propositions pour RubyConf 2009

Les propositions de conférences (Call for Proposals) pour RubyConf 2009 sont désormais acceptées, et ce jusqu’au 21 août 2009. Pour formuler une proposition, vous devez vous créer un compte sur rubyconf.org.

RubyConf 2009 aura lieu les 19, 20 et 21 novembre 2009 au Embassy Suites Hotel du San Francisco Airport, en Californie (USA). Plus de détails sur le site officiel.

Open-notification v0.1.0 est sortie

Il y a maintenant un mois, j'ai commencé à jouer avec nanite. Pour essayer un peu cette technologie, j'ai réaliser une mini application en sinatra et un agent nanite qui envoi des notifications par Jabber.

De fil en aiguille, le code s'est agrémenté et est surtout passé à Merb avec un système de persistance en CouchDB.

L'idée de base est extrêmement simple, gérer plein de notification de tous type. Il existe déjà ce genre de système comme messagepub. Mais là ca sera open source.

Open notification sort donc en version 0.1.0 pour sa première version. Le code sera mis sous licence AGPLv3. Il est composé d'un agent nanite qui gére l'envoi des notifications jabber et d'une application avec Merb/CouchDB.

La méthode de déploiement est assez compliqué je l'avoue car il n'y a aucune documentation. Cela arrivera dans les prochaines versions.

Une version complête est utilisable par tout un chacun sur open-notification.com. Ce service n'a pour l'instant aucune pérennité. Mais on verra dans le futur ce que ca donnera.


Article original écrit par Cyril Mougel et publié sur Shiny happy people coding | lien direct vers cet article | Si vous lisez cet article ailleurs que sur Shiny happy people coding, c'est qu'il a été reproduit illégalement et sans autorisation.