<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="fr-FR" xmlns="http://www.w3.org/2005/Atom">
  <title>XykoX - Home</title>
  <id>tag:blog.xykox.net,2009:mephisto/</id>
  <generator version="0.8.0" uri="http://mephistoblog.com">Mephisto Drax</generator>
  <link href="http://blog.xykox.net/feed/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="http://blog.xykox.net/" rel="alternate" type="text/html"/>
  <updated>2009-09-09T16:51:08Z</updated>
  <entry xml:base="http://blog.xykox.net/">
    <author>
      <name>jimi</name>
    </author>
    <id>tag:blog.xykox.net,2009-09-09:10</id>
    <published>2009-09-09T16:44:00Z</published>
    <updated>2009-09-09T16:51:08Z</updated>
    <link href="http://blog.xykox.net/2009/9/9/solimap" rel="alternate" type="text/html"/>
    <title>Solimap</title>
<content type="html">
            &lt;p&gt;Juste pour faire un peu de pub à un développeur RoR, et pour son bébé qui est joliment fait pour un principe aussi vieux que le  Web : &lt;a href=&quot;http://www.solimap.com/&quot;&gt;Solimap un site d&#8217;annonces diverses&lt;/a&gt;. Du mashable, du RubyOnRails mais ça on ne le voit pas, de la transparence, simple et propre.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.xykox.net/">
    <author>
      <name>jimi</name>
    </author>
    <id>tag:blog.xykox.net,2009-09-09:9</id>
    <published>2009-09-09T13:52:00Z</published>
    <updated>2009-09-09T14:03:28Z</updated>
    <category term="Configuration"/>
    <category term="Web Dev"/>
    <link href="http://blog.xykox.net/2009/9/9/iconv-et-r-sultats-variables" rel="alternate" type="text/html"/>
    <title>Iconv et r&#233;sultats variables </title>
<content type="html">
            &lt;p&gt;Arrg, il faut lire les pages de manuel en entier &#8230; iconv et toutes les wrapper dérivés sont influencé par les variables d&#8217;environnement LANG, LC_ALL, LC_CTYPE, LC_MESSAGES.&lt;/p&gt;

&lt;p&gt;Par exemple :&lt;/p&gt;

&lt;pre class=&quot;brush: plain;&quot;&gt;
$ echo éà | LANG=fr_FR.UTF-8 iconv -f UTF-8 -t ascii//translit
ea
$ echo éà | LANG=C iconv -f UTF-8 -t ascii//translit
??
&lt;/pre&gt;

&lt;p&gt;Et comme bien sûr iconv est très bien documenté, il va sans dire que ça été facile de trouver cette bizzarie.&lt;/p&gt;

&lt;p&gt;Donc comme on dit dans ces cas là, ce n&#8217;est pas un bug mais une fonctionnalité, à voir chez debian :
&#8221;&lt;a href=&quot;http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=376272&quot;&gt;Libc6: //translit fails with cyrillic and others&lt;/a&gt;&#8221;&lt;/p&gt;

&lt;p&gt;Et bien sûr quand vous lancez votre application rails avec Webrick dans votre environnement où LANG=fr_FR.UTF-8&lt;/p&gt;

&lt;pre class=&quot;brush: plain;&quot;&gt;
$ script/server 
&lt;/pre&gt;

&lt;p&gt;Et d&#8217;un autre via passenger et que LANG est initialisé à &#8220;C&#8221;, alors on perd son temps à chercher le problème dans rails ou passenger.&lt;/p&gt;

&lt;p&gt;RTFM !&lt;/p&gt;

&lt;p&gt;J&#8217;aurais bien aimé utiliser iconv avec la locale fr_FR, mais comme j&#8217;utilise iconv pour mes permaliens qui ont été généré avec sans locale (LANG=C), alors pour éviter les problèmes, je force l&#8217;appli à utiliser LANG=C dans mon config/envirronment.rb&lt;/p&gt;

&lt;pre class=&quot;brush: ruby&quot;&gt;
...
ENV['LANG'] = 'C'
...
&lt;/pre&gt;

&lt;p&gt;jusqu&#8217;au prochain problème &#8230;&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.xykox.net/">
    <author>
      <name>jimi</name>
    </author>
    <id>tag:blog.xykox.net,2009-08-26:8</id>
    <published>2009-08-26T10:38:00Z</published>
    <updated>2009-08-26T12:58:40Z</updated>
    <category term="rails"/>
    <category term="Web Dev"/>
    <link href="http://blog.xykox.net/2009/8/26/railsengines-2-3-suite" rel="alternate" type="text/html"/>
    <title>RailsEngines 2.3 (suite)</title>
<content type="html">
            &lt;p&gt;La solution dans &lt;a href=&quot;/2009/8/25/engines-2-3&quot;&gt;l&#8217;article précédent&lt;/a&gt; ne me plaisait pas, alors j&#8217;ai fais ma solution &#8230; bon j&#8217;avoue j&#8217;ai pas cherché s&#8217;il existe déjà une solution prête à l&#8217;emploi.&lt;/p&gt;

&lt;p&gt;Personnellement, je préfère que config. reload_plugins soit à false. Mais je ne veux pas mettre dans mes plugins un bout de code qui dépend plus de l&#8217;application et du contexte (development/production) que du plugin lui même.&lt;/p&gt;

&lt;p&gt;Je pourrais mettre reload_plugin à true, oui mais je n&#8217;ai pas forcément envie de recharger toute la masse de plugin à chaque requête.&lt;/p&gt;

&lt;p&gt;Dans un premier temps, on va ajouter une directive de configuration à savoir &lt;em&gt;reloadable_plugins&lt;/em&gt;, et on va la traiter au moment du chargement des plugins. Voici le code :&lt;/p&gt;

&lt;pre class=&quot;brush: ruby;&quot;&gt;
Rails::Configuration.class_eval do
  attr_accessor :reloadable_plugins

  def initialize_with_reloadable_plugins
    initialize_without_reloadable_plugins
    self.reloadable_plugins = default_reloadable_plugins
  end

  def default_reloadable_plugins
    []
  end

  alias_method_chain :initialize, :reloadable_plugins
end

Rails::Plugin::Loader.class_eval do
  def add_plugin_load_paths_with_reloadable_plugins
    load_path = add_plugin_load_paths_without_reloadable_plugins
    plugins.each do |plugin|
      if configuration.reloadable_plugins.include?(plugin.name.to_sym)
        ActiveSupport::Dependencies.load_once_paths -= plugin.load_paths
      end
    end
    load_path
  end
  alias_method_chain :add_plugin_load_paths, :reloadable_plugins
end

&lt;/pre&gt;

&lt;p&gt;qu&#8217;on va mettre dans &lt;em&gt;lib/configuration_reloadable_plugins.rb&lt;/em&gt; par exemple.&lt;/p&gt;

&lt;p&gt;Ensuite ajouter dans le fichier &lt;em&gt;config/environnement.rb&lt;/em&gt;, juste après le boot.rb (l&#8217;ordre est important)&lt;/p&gt;

&lt;pre class=&quot;brush: ruby;&quot;&gt;
  ...
require File.join(File.dirname(__FILE__), 'boot')
require File.join(File.dirname(__FILE__), '../vendor/plugins/engines/boot')
require 'lib/configuration_reloadable_plugins'
  ...
&lt;/pre&gt;

&lt;p&gt;Et toujours dans &lt;em&gt;config/environnement.rb&lt;/em&gt; on indique les plugins à recharger :&lt;/p&gt;

&lt;pre class=&quot;brush: ruby;&quot;&gt;
...
Rails::Initializer.run do |config|
  config.reloadable_plugins = [ :foo, :bar ]
  config.reload_plugins = false 
  ...
end
...
&lt;/pre&gt;

&lt;p&gt;Et pour vérifier  que c&#8217;est bon :&lt;/p&gt;

&lt;pre class=&quot;brush: ruby;&quot;&gt;
$ script/console
&gt;&gt; ActiveSupport::Dependencies.load_once_paths.select{ |p| p =~ /foo/ }
=&gt; []
&lt;/pre&gt;
          </content>  </entry>
  <entry xml:base="http://blog.xykox.net/">
    <author>
      <name>jimi</name>
    </author>
    <id>tag:blog.xykox.net,2009-08-25:6</id>
    <published>2009-08-25T18:24:00Z</published>
    <updated>2009-08-26T10:47:07Z</updated>
    <category term="rails"/>
    <category term="Web Dev"/>
    <link href="http://blog.xykox.net/2009/8/25/engines-2-3" rel="alternate" type="text/html"/>
    <title>RailsEngines 2.3</title>
<content type="html">
            &lt;p&gt;Les problèmes avec rails 2.3 continuent.&lt;/p&gt;

&lt;p&gt;J&#8217;utilise depuis longtemps le plugin &lt;a href=&quot;http://www.rails-engines.org/&quot;&gt;rails-engines&lt;/a&gt; qui permet de transformer une application en un plugin.&lt;/p&gt;

&lt;p&gt;Et nouveauté de la version 2.3 de rails, RailsEngine y a été incorporé. Mais comme certains plugins qui ont été incorporé (has_finder, globalize, &#8230;) à chaque fois ce n&#8217;est pas complètement, bref il faut quand compléter les fonctionnalités en installant le plugin engine expurgé du code commun avec rails.&lt;/p&gt;

&lt;p&gt;Mais bon ça bug encore, on obtient un :&lt;/p&gt;

&lt;pre&gt;
A copy of X has been removed from the module tree but is still active!
&lt;/pre&gt;

&lt;p&gt;ou bien un &lt;/p&gt;

&lt;pre&gt;
can’t dup NilClass
&lt;/pre&gt;

&lt;p&gt;uniquement en mode dev &#8230; grrr&lt;/p&gt;

&lt;p&gt;Alors heureusement, d&#8217;autres sont passé par là et certains ont déjà &lt;a href=&quot;http://strd6.com/?p=250&quot;&gt;résolu le problème&lt;/a&gt; en ajoutant un &lt;em&gt;unloadable&lt;/em&gt; dans la classe concernée&lt;/p&gt;

&lt;pre class=&quot;brush: ruby;&quot;&gt;
class Toto
  unloadable
end
&lt;/pre&gt;

&lt;p&gt;That&#8217;s it !&lt;/p&gt;

&lt;p&gt;&lt;em&gt;UPDATE&lt;/em&gt; :&lt;/p&gt;

&lt;p&gt;En lisant les commentaires en fait ce n&#8217;est pas la bonne solution. En fait il faut lire la doc, enfin la doc dans le code :) dans railties/lib/initializer.rb :&lt;/p&gt;

&lt;pre&gt;
    # Enables or disables plugin reloading.  You can get around this setting per plugin.
    # If &lt;tt&gt;reload_plugins?&lt;/tt&gt; is false, add this to your plugin's &lt;tt&gt;init.rb&lt;/tt&gt;
    # to make it reloadable:
    #
    #   ActiveSupport::Dependencies.load_once_paths.delete lib_path
    #
    # If &lt;tt&gt;reload_plugins?&lt;/tt&gt; is true, add this to your plugin's &lt;tt&gt;init.rb&lt;/tt&gt;
    # to only load it once:
    #
    #   ActiveSupport::Dependencies.load_once_paths &amp;lt;&amp;lt; lib_path
    #
&lt;/pre&gt;

&lt;p&gt;C&#8217;est clair ! soit d&#8217;office vous ne voulez pas du tout recharger les plugins (reload_plugin à false), et seulement certains (ceux que vous développez par exemple) alors il faut mettre dans le init.rb : &lt;/p&gt;

&lt;pre class=&quot;brush: ruby;&quot;&gt;
# config/environments/development.rb
config.reload_plugins = false

# plugin's init.rb : remove plugin from unloadable list
ActiveSupport::Dependencies.load_once_paths -= load_paths
&lt;/pre&gt;

&lt;p&gt;soit l&#8217;inverse vous voulez que tous les modules soient rechargeable (reload_plugins à true), sauf certains :&lt;/p&gt;

&lt;pre class=&quot;brush: ruby;&quot;&gt;

# config/environments/development.rb
config.reload_plugins = true

# plugin's init.rb : add plugin in unloadable list
ActiveSupport::Dependencies.load_once_paths += load_paths

&lt;/pre&gt;

&lt;p&gt;&lt;em&gt;UPDATE 2&lt;/em&gt;
ou alors encore mieux voir l&#8217;article sur &lt;a href=&quot;/2009/8/26/railsengines-2-3-suite&quot;&gt;l&#8217;extension pour rails&lt;/a&gt;&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.xykox.net/">
    <author>
      <name>jimi</name>
    </author>
    <id>tag:blog.xykox.net,2009-08-25:5</id>
    <published>2009-08-25T18:11:00Z</published>
    <updated>2009-08-26T07:10:57Z</updated>
    <category term="rails"/>
    <category term="Web Dev"/>
    <link href="http://blog.xykox.net/2009/8/25/divers-probl-mes-avec-rails-2-2" rel="alternate" type="text/html"/>
    <title>Divers probl&#232;mes avec Rails 2.2+ </title>
<content type="html">
            &lt;p&gt;Ah les joies de se mettre à jour et son code à l&#8217;occasion &#8230; Oui depuis longtemps je trainais avec rails 1.2.6 (oui je sais ça commence à dater mais j&#8217;ai mes raisons). Il me tardait donc de pouvoir utiliser les nouvelles versions de rails avec son lots d&#8217;améliorations.&lt;/p&gt;

&lt;p&gt;Bon tout d&#8217;abord grosse surprise un bug uniquement présent en development, et pour cause il concerne le système de déchargement/rechargement du code de l&#8217;application.&lt;/p&gt;

&lt;p&gt;ça donne soit un&lt;/p&gt;

&lt;pre&gt;
stack level too deep
&lt;/pre&gt;

&lt;p&gt;ou alors un pénible&lt;/p&gt;

&lt;pre&gt;
vendor/rails/activerecord/lib/active_record/attribute_methods.rb:142:in `create_time_zone_conversion_attribute?'
vendor/rails/activerecord/lib/active_record/attribute_methods.rb:75:in `define_attribute_methods'
vendor/rails/activerecord/lib/active_record/attribute_methods.rb:71:in `each'
vendor/rails/activerecord/lib/active_record/attribute_methods.rb:71:in `define_attribute_methods'
vendor/rails/activerecord/lib/active_record/attribute_methods.rb:242:in `method_missing'
&lt;/pre&gt;

&lt;p&gt;Le problème semble être valable depuis rails 2.2 et toujours pas corrigé. Il &lt;a href=&quot;https://rails.lighthouseapp.com/projects/8994/tickets/1339&quot;&gt;semble que ce ne soit pas une priorité car le problème se pose uniquement en mode development. &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Donc la solution est de patcher rails en attendant. &lt;a href=&quot;https://rails.lighthouseapp.com/projects/8994/tickets/1339/a/75832/AR_dev_mode_reloading.diff&quot;&gt;Patch&lt;/a&gt; qui se trouve dans le ticket chez &lt;a href=&quot;https://rails.lighthouseapp.com/projects/8994/tickets/1339&quot;&gt;lighthouseapp&lt;/a&gt; :&lt;/p&gt;

&lt;pre class=&quot;brush: ruby;&quot;&gt;
if ENV['RAILS_ENV'] != 'production'
  class ActiveRecord::Base
    class_eval do
      def self.reset_subclasses
        nonreloadables = []
        subclasses.each do |klass|
          unless ActiveSupport::Dependencies.autoloaded? klass
            nonreloadables &amp;lt;&amp;lt; klass
            next
          end
          klass.instance_variables.each { |var| klass.send(:remove_instance_variable, var) }
          klass.instance_methods(false).each { |m| klass.send(:undef_method, m) unless m =~ /^id(=$|\?$|$)/ }

        end
        @@subclasses = {}
        nonreloadables.each { |klass| (@@subclasses[klass.superclass] ||= []) &amp;lt;&amp;lt; klass }
      end
    end
  end
end
&lt;/pre&gt;

&lt;p&gt;Voilà et maintenant ça roule on peut développer en paix. &lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.xykox.net/">
    <author>
      <name>jimi</name>
    </author>
    <id>tag:blog.xykox.net,2009-08-20:7</id>
    <published>2009-08-20T08:01:00Z</published>
    <updated>2009-08-26T08:04:52Z</updated>
    <category term="rails"/>
    <category term="Web Dev"/>
    <link href="http://blog.xykox.net/2009/8/20/with_scope-joins" rel="alternate" type="text/html"/>
    <title>with_scope &amp; joins</title>
<content type="html">
            &lt;p&gt;Dans rails, on trouve des pépites et &lt;a href=&quot;http://ryandaigle.com/articles/2006/07/20/a-rails-feature-you-should-be-using-with_scope&quot;&gt;with_scope&lt;/a&gt; en est une. Une vieille pépite et toujours pas finie, je serais tenté de dire.&lt;/p&gt;

&lt;p&gt;Par exemple, il &lt;a href=&quot;http:&quot; /&gt;ne tient pas compte de la clause :order&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;De mon côté, j&#8217;ai besoin d&#8217;un ordre précis pour faire le &lt;em&gt;merge&lt;/em&gt; de mes  jointures.&lt;/p&gt;

&lt;p&gt;Prenons l&#8217;exemple suivant :&lt;/p&gt;

&lt;pre class=&quot;brush: ruby;&quot;&gt;
class Dumb
  class &amp;lt;&amp;lt; self

    def foo_bar
      with_scope(:find =&gt; { :join =&gt; &quot;INNER JOIN bar ON bar.id=foo.bar_id&quot;}) do
        want_foo
      end
    end

    def want_foo
        with_scope(:find =&gt; { :join =&gt; &quot;INNER JOIN foo ON foo.id=dump.foo_id&quot;}) do
        # do your stuff
        ...
        end
    end

  end
end
&lt;/pre&gt;

&lt;pre class=&quot;brush: sql;&quot;&gt;
 ... INNER JOIN bar ON bar.id=foo.bar_id INNER JOIN foo ON foo.id=dump.foo_id ...
... ActiveRecord::StatementInvalid: Mysql::Error: Unknown column 'foo.bar_id' ..
&lt;/pre&gt;

&lt;p&gt;On souhaite avoir l&#8217;ordre inversé genre :&lt;/p&gt;

&lt;pre class=&quot;brush: sql;&quot;&gt;
 ... INNER JOIN foo ON foo.id=dump.foo_id INNER JOIN bar ON bar.id=foo.bar_id  ...
&lt;/pre&gt;

&lt;p&gt;Voici la solution :&lt;/p&gt;

&lt;pre class=&quot;brush: ruby;&quot;&gt;
    ...
    do_reverse_merge_joins do
      def foo_bar
        with_scope(:find =&gt; { :join =&gt; &quot;INNER JOIN bar ON bar.id=foo.bar_id&quot;}) do
          want_foo
        end
      end
    end
    ...
&lt;/pre&gt;

&lt;p&gt;et le patch ou l&#8217;extension comme vous voulez (testé pour rails 2.3)&lt;/p&gt;

&lt;pre class=&quot;brush: ruby;&quot;&gt;
ActiveRecord::Base.class_eval do
  class &amp;lt;&amp;lt; self
    def merge_joins_with_reverse(*joins)
      merge_joins_without_reverse(reverse_merge_joins? ? joins.reverse : joins)
    end
    alias_method_chain :merge_joins, :reverse

    def do_reverse_merge_joins(&amp;block)
      set_reverse_merge_joins
      result = yield
      reset_reverse_merge_joins
      result
    end

    def reset_reverse_merge_joins
      set_reverse_merge_joins(nil)
    end

    def set_reverse_merge_joins(value = true)
      Thread.current[:&quot;#{self}_reverse_merge_joins&quot;] = value
    end

    def reverse_merge_joins?
      Thread.current[:&quot;#{self}_reverse_merge_joins&quot;]
    end

  end
end
&lt;/pre&gt;
          </content>  </entry>
  <entry xml:base="http://blog.xykox.net/">
    <author>
      <name>jimi</name>
    </author>
    <id>tag:blog.xykox.net,2008-09-03:1</id>
    <published>2008-09-03T16:18:00Z</published>
    <updated>2009-08-25T18:56:28Z</updated>
    <category term="Configuration"/>
    <category term="mac os x"/>
    <category term="synergy"/>
    <link href="http://blog.xykox.net/2008/9/3/synergy-client-mac-os-x-leopard" rel="alternate" type="text/html"/>
    <title>Synergy client &amp; Mac OS X Leopard</title>
<content type="html">
            &lt;p&gt;Bon la migration de mon mac-mini sous leopard s&#8217;est bien déroulée. Reste une chose : &lt;a href=&quot;http://synergy2.sourceforge.net/&quot;&gt;Synergy&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Dans leur &lt;a href=&quot;http://synergy2.sourceforge.net/&quot;&gt;doc&lt;/a&gt;, les scripts de démarage automatique sont valables pour mac os x10.4. Du coup le client synergy ne se lance plus à l&#8217;affichage de l&#8217;écran de connexion, un peu génant pour accéder à mon mac-mini depuis mon PC.&lt;/p&gt;

&lt;p&gt;Pas de panique, d&#8217;après &lt;a href=&quot;http://jan.varwig.org/archiv/autostarting-the-synergy-server-on-mac-os-x-using-launchd&quot;&gt;Jan Varwig&lt;/a&gt; et la &lt;a href=&quot;http://developer.apple.com/technotes/tn2005/tn2083.html#SECANCIENTDAEMONS&quot;&gt;doc d&#8217;Apple&lt;/a&gt; les StartupItems sont depracated et les scripts sont gérés par lauchnd. Donc nouvelle configuration inspirée de Jan Varwig (sauf que lui c&#8217;est pour serveur),  :&lt;/p&gt;

&lt;p&gt;/Library/LaunchAgents/net.sourceforge.synergy2.plist :&lt;/p&gt;

&lt;pre class=&quot;brush: xml;&quot;&gt;
    &amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
    &amp;lt;!DOCTYPE plist PUBLIC &quot;-//Apple Computer//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
    &amp;lt;plist&gt;
    &amp;lt;dict&gt;
      &amp;lt;key&gt;Label&amp;lt;/key&gt;
      &amp;lt;string&gt;net.sourceforge.syngery2&amp;lt;/string&gt;
      &amp;lt;key&gt;LimitLoadToSessionType&amp;lt;/key&gt;
      &amp;lt;string&gt;LoginWindow&amp;lt;/string&gt;
      &amp;lt;key&gt;OnDemand&amp;lt;/key&gt;
      &amp;lt;false /&gt;
      &amp;lt;key&gt;ProgramArguments&amp;lt;/key&gt;
      &amp;lt;array&gt;
          &amp;lt;string&gt;/usr/local/bin/synergyc&amp;lt;/string&gt;
          &amp;lt;string&gt;-1&amp;lt;/string&gt;
          &amp;lt;string&gt;-f&amp;lt;/string&gt;
          &amp;lt;string&gt;192.168.0.4&amp;lt;/string&gt;
        &amp;lt;/array&gt;
        &amp;lt;key&gt;RunAtLoad&amp;lt;/key&gt;
        &amp;lt;true /&gt;
        &amp;lt;key&gt;ServiceDescription&amp;lt;/key&gt;
        &amp;lt;string&gt;Synergy Client&amp;lt;/string&gt;
      &amp;lt;/dict&gt;
    &amp;lt;/plist&gt;
&lt;/pre&gt;

&lt;p&gt;Dans les logs, apparaissait :&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Untrusted apps are not allowed to connect to or launch Window Server before login.
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;ok ok la doc d&#8217;Apple le dit : il faut le bon niveau de permission : d&#8217;où LimitLoadToSessionType affecté à LoginWindow.&lt;/p&gt;

&lt;p&gt;donc on a bien l&#8217;écran de connexion, mais, car il y a un mais, dans l&#8217;espace utilisateur synergy n&#8217;a plus la permission.  Donc comme indiqué dans la doc j&#8217;essaie le array pour spécifier plusieurs niveaux :&lt;/p&gt;

&lt;pre class=&quot;brush: xml;&quot;&gt;
    &amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
    &amp;lt;!DOCTYPE plist PUBLIC &quot;-//Apple Computer//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
    &amp;lt;plist&gt;
      ...
      &amp;lt;key&gt;LimitLoadToSessionType&amp;lt;/key&gt;
       &amp;lt;array&gt;
        &amp;lt;string&gt;LoginWindow&amp;lt;/string&gt;
        &amp;lt;string&gt;Background&amp;lt;/string&gt;
      &amp;lt;/array&gt;
      ...
    &amp;lt;/plist&gt;
&lt;/pre&gt;

&lt;p&gt;Mais rien n&#8217;y fait. La solution la moins propre : créer un 2ième fichier.&lt;/p&gt;

&lt;p&gt;/Library/LaunchAgents/net.sourceforge.synergy2-usermode.plist :&lt;/p&gt;

&lt;pre class=&quot;brush: xml;&quot;&gt;
    &amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
    &amp;lt;!DOCTYPE plist PUBLIC &quot;-//Apple Computer//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
    &amp;lt;plist&gt;
    &amp;lt;dict&gt;
      &amp;lt;key&gt;Label&amp;lt;/key&gt;
      &amp;lt;string&gt;net.sourceforge.syngery2-usermode&amp;lt;/string&gt;
      &amp;lt;key&gt;LimitLoadToSessionType&amp;lt;/key&gt;
      &amp;lt;string&gt;Background&amp;lt;/string&gt;
      &amp;lt;key&gt;OnDemand&amp;lt;/key&gt;
      &amp;lt;false /&gt;
      &amp;lt;key&gt;ProgramArguments&amp;lt;/key&gt;
      &amp;lt;array&gt;
          &amp;lt;string&gt;/usr/local/bin/synergyc&amp;lt;/string&gt;
          &amp;lt;string&gt;-1&amp;lt;/string&gt;
          &amp;lt;string&gt;-f&amp;lt;/string&gt;
          &amp;lt;string&gt;192.168.0.4&amp;lt;/string&gt;
        &amp;lt;/array&gt;
        &amp;lt;key&gt;RunAtLoad&amp;lt;/key&gt;
        &amp;lt;true /&gt;
        &amp;lt;key&gt;ServiceDescription&amp;lt;/key&gt;
        &amp;lt;string&gt;Synergy Client&amp;lt;/string&gt;
      &amp;lt;/dict&gt;
    &amp;lt;/plist&gt;
&lt;/pre&gt;

&lt;p&gt;And it works ! bon à voir s&#8217;il n&#8217;y a pas une meilleur solution, car le synergyc qui possède les droits lors de l&#8217;écran de connexion continue à s&#8217;excuter et se fait refouler lorsqu&#8217;on est connecté .. bah &#8230; ça fait tourner les log .. hum &#8230;&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.xykox.net/">
    <author>
      <name>jimi</name>
    </author>
    <id>tag:blog.xykox.net,2008-07-01:4</id>
    <published>2008-07-01T20:32:00Z</published>
    <updated>2008-09-03T21:00:01Z</updated>
    <category term="Web Dev"/>
    <category term="google"/>
    <category term="javascript"/>
    <link href="http://blog.xykox.net/2008/7/1/frameworks-ajax-js-google" rel="alternate" type="text/html"/>
    <title>Frameworks Ajax/JS &amp; Google</title>
<content type="html">
            &lt;p&gt;Une chose à laquelle je pense depuis quelque temps pour mes dev javascript : qu&#8217;un acteur majeur du dev et plus particulièrement du dev web prenne l&#8217;initiative d&#8217;héberger  les principales librairies Javascript Protoype, Jquery, Mootools, &#8230; Je l&#8217;attendais de la part de Yahoo, c&#8217;est venu de &lt;a&gt;Google&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Ces librairies sont maintenant énormément utilisées pour animer les pages web, avec plein de widget réalisés à droite à gauche, et donc on retrouve dans le cache des navigateurs plusieurs la même version de la même librairie. Dommage. Perte de place et de bande passante (ok très minime),  et surtout perte de temps (téléchargement).&lt;/p&gt;

&lt;p&gt;Ensuite l&#8217;étape suivante serait la normalisation des ces interfaces de programmation, pour disposer d&#8217;appels communs (et surtout ne pas avoir 5 versions du même widget genre lightbox) et de les intégrer soit comme plugin, soit comme dans le coeur du moteur javascript &#8230; enfin je doute qu&#8217; on en arrive là &#8230; cependant quand j&#8217;entends Mozilla annoncer qu&#8217;ils vont porter leur attention sur leur moteur javascript &#8230;&lt;/p&gt;

&lt;p&gt;Et pour les plus curieux un petit &lt;a href=&quot;http://www.strictlyuntyped.com/2008/06/using-google-ajax-libraries-api-with.html&quot;&gt;tuto&lt;/a&gt; &#8230; pour l&#8217;utilisation avec RubyOnRails of course&lt;/p&gt;
          </content>  </entry>
</feed>
