Recommend Me


Jeudi 28 août 2008

RubyFlow Fr

Classé dans : Ruby, RubyFrance, Web — greg @ 22:29

Il y avait RubyFlow, grâce à l’association RubyFrance il y a maintenant RubyFlow Fr

Vous ne pourrez pas dire que vous ne saviez pas…

• • •

Mercredi 27 août 2008

(FOP + Ruby) / Rjb

Classé dans : Java, Projets, Ruby — greg @ 14:30

Je travaille en ce moment, dans le cadre de mon boulot, sur la mise en place d’une plateforme documentaire. L’idée étant d’être capable de générer de la documentation sous format HTML et PDF.

J’utilisais déjà FOP pour ce travail, mais en “solo”. Le besoin maintenant implique un travail d’équipe avec plusieurs rédacteurs, correcteurs, relecteurs… Nous avions déjà une XSL permettant de passer de XML vers FO, et on pourrait croire qu’un simple gestionnaire de version compléterait simplement cet existant pour permettre un travail de groupe.

Ce n’est pas aussi simple que cela. En effet, nous voulons que la documentation soit générée sur le serveur ou sont placés les documents XML. Facile direz vous. Oui, mais il faut en plus pouvoir contrôler comment se passe la “fabrication” des documents. Pouvoir les visualiser… Et même, pouvoir en corriger certaines parties, et cela, sans obliger ceux qui interviennent ponctuellement sur les documents (correcteurs, relecteurs en particulier) à ne pas être obligés de se plonger dans une syntaxe XML obscure et rebutante. Pour cela une petite interface Web est apparue comme une bonne solution. J’en reparlerai plus tard, mais nous avons même une solution simple permettant de modifier en WYSIWYG un fichier XML…

Venons-en au fait… Vous vous en doutiez, mais cette interface (et tout le reste de la plateforme) est faite en Ruby (je me demande bien avec quoi ?). Et très rapidement j’ai eu besoin de pouvoir générer les documents via FOP depuis des scripts Ruby. Pour cela RJB est mon ami. Voici ce que donne le source ExampleXML2PDF.java proposé par Apache une fois passé dans les mains du couple Ruby-RJB :

require ‘rubygems’
require ‘rjb’

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# export CLASSPATH=~/Downloads/fop-0.95/build/fop.jar:\
#   ~/Downloads/fop-0.95/lib/xmlgraphics-commons-1.3.1.jar:\
#   ~/Downloads/fop-0.95/lib/commons-logging-1.0.4.jar:\
#   ~/Downloads/fop-0.95/lib/commons-io-1.3.1.jar:\
#   ~/Downloads/fop-0.95/lib/avalon-framework-4.2.0.jar:\
#   ~/Downloads/fop-0.95/lib/batik-all-1.7.jar

class Fop
  def initialize( classpath = nil )
    # The ‘-Djava.awt.headless=true’ parameter is due to the "Can’t start the AWT" error on Mac.
    # I hope it do not affect others environments.
    Rjb::load( classpath, [‘-Djava.awt.headless=true’] )

    @jFile = Rjb::import( ‘java.io.File’ )
    @jFileOutputStream = Rjb::import( ‘java.io.FileOutputStream’ )
    @jBufferedOutputStream = Rjb::import( ‘java.io.BufferedOutputStream’ )

    # jTrasnformer = Rjb::import( ‘javax.xml.transform.Transformer’ )
    @jTransformerFactory = Rjb::import( ‘javax.xml.transform.TransformerFactory’ )
    # jSource = Rjb::import( ‘javax.xml.transform.Source’ )
    # jResult = Rjb::import( ‘javax.xml.transform.Result’ )
    @jStreamSource = Rjb::import( ‘javax.xml.transform.stream.StreamSource’ )
    @jSAXResult = Rjb::import( ‘javax.xml.transform.sax.SAXResult’ )

    @jFOUserAgent = Rjb::import( ‘org.apache.fop.apps.FOUserAgent’ )
    @jFopFactory = Rjb::import( ‘org.apache.fop.apps.FopFactory’ )
    @jMimeConstants = Rjb::import( ‘org.apache.fop.apps.MimeConstants’ )
    # jFop = Rjb::import( ‘org.apache.fop.apps.Fop’ )
  end
 
  def xml2pdf( xmlFile, xslFile, pdfFile )
   
    # Setup directories
    baseDir = @jFile.new( "." )
    outDir = @jFile.new( baseDir, "out" )
    outDir.mkdirs()
   
    # Setup input and output files
    xml = @jFile.new( baseDir, xmlFile )
    xslt = @jFile.new( baseDir, xslFile )
    pdf = @jFile.new( outDir, pdfFile )
   
    # configure fopFactory as desired
    fopFactory = @jFopFactory.newInstance( )
    foUserAgent = fopFactory.newFOUserAgent( )
   
    # Setup output
    out = @jFileOutputStream.new( pdf )
    out = @jBufferedOutputStream.new( out )
   
    # Construct fop with desired output format
    fop = fopFactory.newFop( @jMimeConstants.MIME_PDF, foUserAgent, out )
 
    # Setup XSLT
    factory = @jTransformerFactory.newInstance( )
    transformer = factory.newTransformer( @jStreamSource.new( xslt ) )
   
    # Set the value of a <param> in the stylesheet
    # transformer.setParameter( "versionParam", "2.0" )
   
    # Setup input for XSLT transformation
    src = @jStreamSource.new( xml )
   
    # Resulting SAX events (the generated FO) must be piped through to FOP
    res = @jSAXResult.new( fop.getDefaultHandler( ) )
   
    # Start XSLT transformation and FOP processing
    transformer.transform( src, res )
   
    # Close output file
    out.close( )
  end
end

if $0 == __FILE__
  fop = Fop.new
  fop.xml2pdf( "xml/pdf/index-pdf.xml", "xsl/XML2PDF.xsl", "doc.pdf" )
end

• • •

Mardi 26 août 2008

La couleur de l’Ajax…

Classé dans : AJAX, Projets, Ruby, Web, bivouac — greg @ 18:44

Dans un post du mois d’aout, Nicolas disait voir rouge… Et bien j’aime la couleur !

Dans un autre poste, plus ancien, Sunny nous proposait de redécouvrir cursor:progress.

Et bien je me suis amusé à marier les deux via un plugin Bivouac (non encore disponible) :

Ajax::Responders.register( {
  :on_create => function {  
    e = $class-(‘body’)
    e.first().addClassName(‘loading’)
  },
  :on_complete => function {
    if Ajax[:activeRequestCount] == 0
      e = $class-(‘body’)
      e.first().removeClassName(‘loading’)
    end
  }
} )
• • •

Fin des vacances…

Classé dans : Famille, Friend, Important, Photo, Tout et rien — greg @ 0:15

Et ce fut le grand retour au boulot… Quoi qu’il en soit, ce temps de repos fut fort agréable…

Je ne suis pas de nature à vous montrer des photos de tonton DD à la plage ou la cousine Berth mangeant une galette à la crêperie du port, mais voici tout de même une petite sélection de photos prises cet été.



Bonne reprise à tous.

• • •

Samedi 2 août 2008

Exemple ProtoChart’s Tent…

Classé dans : Uncategorized — greg @ 15:21

Le blog deensoft propose un petit tutoriel d’utilisation de ProtoChart.

J’ai fait quelques corrections dans le plugin ProtoChart’s Tent. Voici le code à utiliser dans votre vue Bivouac pour obtenir le même résultat.

  1. #
  2. #  Project ProtoChartTest
  3. #
  4. #  Created using bivouac on Thu Jul 31 19:35:10 +0200 2008.
  5. #  Copyright (c) 2008 __My__. All rights reserved.
  6. #
  7.  
  8. module ProtoChartTest::Views
  9.   def pc_test
  10.     h1.header { "ProtoChart’s Tent example" }
  11.  
  12.     div :id => "chart", :style => "width:500px;height:300px"
  13.    
  14.     protochart( "chart",
  15.       "Ajaxian" => [[1, 996], [2, 1162], [3, 102], [4, 491], [5, 75]],
  16.       "Ajax" => [[1, 307], [2, 2184], [3, 436], [4, 304], [5, 152]],
  17.       :xaxis => {
  18.         :min => 0,
  19.         :max => 6,
  20.         :ticks => [
  21.           [0, ""],
  22.           [1, "Good"],
  23.           [2, "All"] ,
  24.           [3, "Avg Month"],
  25.           [4, "Great"],
  26.           [5, "Best"],
  27.           [6, " "]
  28.         ]
  29.       },
  30.       :legend => { :show => true },
  31.       :points => { :show => true },
  32.       :lines => { :show => true }
  33.     )
  34.    
  35.   end
  36. end
  37.  
• • •

Vacances

Classé dans : Important, Musique, libre — greg @ 14:48

Ça y est, je suis enfin en vacances pour trois semaines… J’en profite pour vous faire écouter ce qui va bercer mes trajets vers la plage…

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