un annuaire universel basé sur dns et adressable depuis les smartphones
Je suis un peu sur le cul sur ce coup la et voilà un bel article plus complet
Je suis un peu sur le cul sur ce coup la et voilà un bel article plus complet
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à
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.
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.
Un tip relativement vieux mais toujours bon à savoir
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
avec un nom pareil difficile de pas poster dessus, un plugin vim pour emuler le fabuleux cmd-T sous vim
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'
Je me demande comment j’avais pu passer à côté de ça. A laisser tourner dans un screen pour avoir un oeil sur son system