about

rss

running glassfish gem on osx

There’s a nice project to run a rack application(Rails,Merb…) on glassfish out there. Alas on osx there’s a couple of missing java dependencies while running it: ‘java.lang.TypeNotPresentException: Type javax.xml.stream.XMLInputFactory not present’

The solution comes from the stax package of fink.

> fink list stax
Information about 7824 packages read in 11 seconds.
 i   stax    1.2.0-1    The Streaming API for XML

> fink install stax
> export CLASSPATH=`cat /sw/share/java/classpath`:$CLASSPATH
> jruby -S glassfish /path/to/rack/app

et voilà

idgen32 wrapper: un generateur d'entier uniques

Un petit projet que j’ai mis sur github: idgen32. Il s’agit d’un wrapper autour d’un lib disponible sur OpenBSD dont voici la manpage et un peu plus d’explication sur ce post d’undeadly . Bien pratique pour générer des ids a priori unique pour une même machine.

fast_xs: la génération xml dans rails jusqu'a 10 fois plus rapide

Pour un raison qui m’échappe, cette extension pourtant inclue dans Rails depuis la 2.1 n’a pas été vraiment rendue la publicité qui devrait être la sienne.

D’après les bench réalisés ça et la sur le web on obtient pourtant des bonds de performance plutôt impressionnants en installant le gem fast_xs.

send_file, x_sendfile et Content-Length bug

Le header http X-Sendfile permet de décharger avantageusement mongrel du service des fichiers statiques au profit du serveur apache frontal.

Le soucis c’est que rails écrase bêtement le header Content-Length qui donne la taille du fichier envoyé. Ce qui est dommage parce qu’on se retrouve du coup avec un fichier coupé.

Le problème a été soulevé dans un ticket fermé depuis mais malheureusement toujours valide

reste donc à monkey patcher ce problème (il est déjà patché dans la head de rails depuis le 15/08/08):


    class AbstractResponse
      private
      def set_content_length!
        self.headers["Content-Length"] ||= body.size unless body.respond_to?(:call)
      end
    end

A oui…et pour ceux qui galèrent à compiler le module x_sendfile apache sur Léopard. Pensez à activer l’architecture 64 bits sous peine de voir apache refuser le module:

sudo apxs -cia -S CC=’gcc -arch x86_64’ mod_xsendfile.c

Script pour récuperer les nightly de webkit

Parce que le web inpector des nightly de safari ressemble de plus en plus à Firebug et que passer les test acid3 c’est quand même un peu la classe, ca vaut le coup de se tenir à jour dans les versions nightly de webkit.

Voilà un petit script a placer dans la crontab pour automatiser tout ca.


#!/usr/bin/env ruby -wKU
require 'open-uri'
require 'logger'
require 'tempfile'

require 'rubygems'
require 'hpricot'
require 'curb'
require 'facets/progressbar'
require 'plist'

log = Logger.new(STDOUT)
log.level = Logger::WARN

filename="" 

doc = Hpricot(open("http://nightly.webkit.org/"))

webkit_dmg = (doc/'.latest-build a').first.attributes['href']

curl = Curl::Easy.new(webkit_dmg)

pbar = ProgressBar.new( "getting webkit", 100 )

Tempfile.open('latest_webkit') do |output|

  filename = output.path

  old_on_body = curl.on_body do |data| 
    result = old_on_body ?  old_on_body.call(data) : data.length
    output << data if result == data.length
    result
  end

  old_on_progress = curl.on_progress do |dl_total, dl_now, ul_total, ul_now|
    pbar.set(dl_now*100/dl_total)
  end
  curl.perform
end

pbar.finish

log.debug 'Mounting image'
result = Plist::parse_xml(`hdiutil attach #{filename} -plist`)

#default
volume = "/Volumes/WebKit" 

#try to find it though
result['system-entities'].each do |hash|
  volume = hash['mount-point'] and break if hash.has_key? 'mount-point'
end

log.debug "volume: #{volume}" 

log.info "moving webkit to Applications" 
FileUtils.mv('/Applications/WebKit.app','/Applications/OldWebKit.app')

begin
  FileUtils.cp_r(File.join(volume,'WebKit.app'), '/Applications', {:remove_destination => true} )
  FileUtils.rm_rf('/Applications/OldWebKit.app')
rescue => e  
  FileUtils.mv('/Applications/OldWebKit.app','/Applications/WebKit.app')
  log.error e
end

log.info 'Sucess'

Fuzzycom le tumblelog de Vincent Hellot