<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>glob &#187; Geekeries</title>
	<atom:link href="http://blog.alweb.org/category/geekeries/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.alweb.org</link>
	<description>al&#039;s blog</description>
	<lastBuildDate>Fri, 28 Aug 2009 19:58:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Fixtures on Rails 2.1</title>
		<link>http://blog.alweb.org/2008/06/fixtures-on-rails-21/</link>
		<comments>http://blog.alweb.org/2008/06/fixtures-on-rails-21/#comments</comments>
		<pubDate>Mon, 23 Jun 2008 14:41:00 +0000</pubDate>
		<dc:creator>al</dc:creator>
				<category><![CDATA[Geekeries]]></category>

		<guid isPermaLink="false">http://daiquiri.alweb.org/?p=18</guid>
		<description><![CDATA[Suite à mon précédent billet concernant la création d&#8217;un jeu de données propre à une migration en utilisant les fixtures ainsi qu&#8217;aux nouveautés concernant les migrations dans rails 2.1, quelques ajustements ont du être effectués. Les fichiers de migrations sont désormais préfixées par un timestamp (exemple : db/migrate/20080618211857_create_admin_user.rb) et non plus par un simple identifiant [...]]]></description>
			<content:encoded><![CDATA[<p>Suite à mon <a title="Fixtures on Rails" href="http://blog.alweb.org/2007/07/fixtures-on-rails/">précédent billet</a> concernant la création d&#8217;un jeu de données propre à une migration en utilisant les <em>fixtures</em> ainsi qu&#8217;aux <a href="http://railscasts.com/episodes/107">nouveautés concernant les migrations dans rails 2.1</a>, quelques ajustements ont du être effectués.</p>
<p>Les fichiers de migrations sont désormais préfixées par un <code>timestamp</code> (exemple : <code>db/migrate/20080618211857_create_admin_user.rb</code>) et non plus par un simple identifiant incrémental. Vos fichiers de <em>fixtures</em> doivent désormais être préfixés par ce même <code>timestamp</code> (exemple : <code>db/fixtures/20080618211857_users.yml</code>).</p>
<p>Voici donc le script <code>lib/create_fixtures.rb</code> mis à jour :</p>
<pre>module MigrateFixtures

  FIXTURES_LOCATION = File.dirname(__FILE__) + '/../db/fixtures'
  MIGRATIONS_LOCATION = File.dirname(__FILE__) + '/../db/migrate'

  def self.extended(object)
    class &lt;&lt; object
      alias_method :migrate_without_fixtures, :migrate unless method_defined?(:migrate_without_fixtures)
      alias_method :migrate, :migrate_with_fixtures
    end
  end

  def migrate_with_fixtures(direction)
    migrate_without_fixtures(direction)
    return if :down == direction
    migration = current_migration
    cnx = ActiveRecord::Base.connection
    files = fixture_files.find_all do |file|
      file =~ /\/#{migration}_/
    end
    files.each do |file|
      table_name = file.gsub(/.*\/\d+_(.*)\.yml/, '\1')
      say_with_time("Adding #{table_name} fixtures") do
        Fixtures.new(cnx, table_name, nil, file.gsub(/(.*)\.yml/, '\1')).insert_fixtures
      end
    end
  end

  private

    def current_migration
      version = ActiveRecord::Migrator.current_version
      file = migration_files.find do |f|
        version = '%03d' % version if version.to_s.size &lt; 3
        f =~ /\/#{version}_/
      end
      index = migration_files.index file
      file = index ? migration_files[index + 1] : migration_files.first
      file.gsub(/.*\/(\d+)_.*/, '\1')
    end

    def fixture_files
      @fixture_files ||= Dir["#{FIXTURES_LOCATION}/[0-9]*_*.yml"].sort
    end

    def migration_files
      @migration_files ||= Dir["#{MIGRATIONS_LOCATION}/[0-9]*_*.rb"].sort
    end

end

ActiveRecord::Migration.extend(MigrateFixtures)</pre>
<p>Note : Cette version est compatible avec les anciennes version de rails.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alweb.org/2008/06/fixtures-on-rails-21/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>iSport</title>
		<link>http://blog.alweb.org/2008/04/isport/</link>
		<comments>http://blog.alweb.org/2008/04/isport/#comments</comments>
		<pubDate>Sun, 27 Apr 2008 11:23:00 +0000</pubDate>
		<dc:creator>al</dc:creator>
				<category><![CDATA[Geekeries]]></category>

		<guid isPermaLink="false">http://daiquiri.alweb.org/?p=17</guid>
		<description><![CDATA[Voici une petite appli Web adaptée pour iPhone / iPod Touch : iSport. Elle permet d&#8217;avoir les informations sportives ainsi que les résultats des matchs en direct (pour l&#8217;instant, que Fooball, Tennis, Basket US et Rugby). La chose utilise Ruby, Rails, Hpricot et comme d&#8217;habitude : Prototype. Quelques screenshots pour la peine : Des retours [...]]]></description>
			<content:encoded><![CDATA[<p>Voici <a href="http://isport.alweb.org">une petite appli Web adaptée pour iPhone / iPod Touch : iSport</a>.</p>
<p>Elle permet d&#8217;avoir les informations sportives ainsi que les résultats des matchs en direct (pour l&#8217;instant, que Fooball, Tennis, Basket US et Rugby).</p>
<p>La chose utilise <a href="http://fr.wikipedia.org/wiki/Ruby">Ruby</a>, <a href="http://rubyonrails.com">Rails</a>, <a href="http://code.whytheluckystiff.net/hpricot/">Hpricot</a> et comme d&#8217;habitude : <a href="http://prototypejs.org/">Prototype</a>.</p>
<p>Quelques screenshots pour la peine :</p>
<p><img class="aligncenter size-full wp-image-88" title="iSport (1)" src="http://blog.alweb.org/wp-content/uploads/2009/01/isport-1.jpg" alt="iSport (1)" width="320" height="480" /></p>
<p><img class="aligncenter size-full wp-image-89" title="iSport (2)" src="http://blog.alweb.org/wp-content/uploads/2009/01/isport-2.jpg" alt="iSport (2)" width="320" height="480" /></p>
<p>Des retours et / ou commentaires sont les bienvenus !</p>
<ul>
<li><a href="http://www.iphon.fr/post/2008/04/26/iSport-%3A-tout-le-sportau-format-iPhone">Ils en parlent ailleurs</a></li>
<li><a href="http://www.alweb.org/projects/isport/">Accès au source, etc.</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.alweb.org/2008/04/isport/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>mount /dev/null</title>
		<link>http://blog.alweb.org/2008/04/mount-devnull/</link>
		<comments>http://blog.alweb.org/2008/04/mount-devnull/#comments</comments>
		<pubDate>Tue, 15 Apr 2008 10:19:00 +0000</pubDate>
		<dc:creator>al</dc:creator>
				<category><![CDATA[Geekeries]]></category>

		<guid isPermaLink="false">http://daiquiri.alweb.org/?p=16</guid>
		<description><![CDATA[Ce matin un collègue a trouvé un gentil mot de notre administrateur système :]]></description>
			<content:encoded><![CDATA[<p>Ce matin un collègue a trouvé un gentil mot de notre administrateur système :</p>
<p><img src="http://blog.alweb.org/wp-content/uploads/2009/01/format_m.jpg" alt="Format" title="Format" width="336" height="448" class="aligncenter size-full wp-image-86" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alweb.org/2008/04/mount-devnull/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Diff SVN</title>
		<link>http://blog.alweb.org/2008/02/diff-svn/</link>
		<comments>http://blog.alweb.org/2008/02/diff-svn/#comments</comments>
		<pubDate>Fri, 29 Feb 2008 14:08:00 +0000</pubDate>
		<dc:creator>al</dc:creator>
				<category><![CDATA[Geekeries]]></category>

		<guid isPermaLink="false">http://daiquiri.alweb.org/?p=15</guid>
		<description><![CDATA[En regardant le script de davux, permettant la colorisation d&#8217;un diff, je me suis dit qu&#8217;il devait y avoir une possibilité d&#8217;intégrer ça de manière simple à subversion. Collez ce petit script dans un fichier (nous allons prendre ici /usr/local/bin/colorized_diff) et rendez le exécutable : #! /bin/sh plus='^[[0;32m'minus='^[[0;31m'diff "$@" &#124; sed 's/^+.*$/'"$plus"'&#38;^[[0m/; s/^-.*$/'"$minus"'&#38;^[[0m/' Ensuite, modifiez [...]]]></description>
			<content:encoded><![CDATA[<p>En regardant le <a href="http://da.weeno.net/code/diff-u">script de davux</a>, permettant la colorisation d&#8217;un diff, je me suis dit qu&#8217;il devait y avoir une possibilité d&#8217;intégrer ça de manière simple à <a href="http://subversion.tigris.org/" title="aka SVN">subversion</a>.</p>
<p>Collez ce petit script dans un fichier (nous allons prendre ici <code>/usr/local/bin/colorized_diff</code>) et rendez le exécutable  : </p>
<pre>#! /bin/sh

plus='^[[0;32m'minus='^[[0;31m'diff "$@" | sed 's/^+.*$/'"$plus"'&amp;^[[0m/; s/^-.*$/'"$minus"'&amp;^[[0m/'</pre>
<p>Ensuite, modifiez le fichier <code>~/.subversion/config</code> pour y rajouter ou modifier la ligne suivante dans la section <code>[helpers]</code>:</p>
<pre>diff-cmd = /usr/local/bin/colorized_diff</pre>
<p>Vous pouvez omettre le chemin (<code>/usr/local/bin</code>) si il est dans votre <code>PATH</code>. Maintenant, un <code>svn diff</code> dans un shell vous affichera les lignes supprimées en rouge et les lignes ajoutées en vert. C'est pas plus mignon ?</p>
<p>Note : <code>^[</code> est le caractère d'échappement, vous pouvez le taper dans vim en faisant Ctrl-V puis Echap</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alweb.org/2008/02/diff-svn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fixtures on Rails</title>
		<link>http://blog.alweb.org/2007/07/fixtures-on-rails/</link>
		<comments>http://blog.alweb.org/2007/07/fixtures-on-rails/#comments</comments>
		<pubDate>Tue, 10 Jul 2007 14:40:00 +0000</pubDate>
		<dc:creator>al</dc:creator>
				<category><![CDATA[Geekeries]]></category>

		<guid isPermaLink="false">http://daiquiri.alweb.org/?p=14</guid>
		<description><![CDATA[Il est assez fréquent d&#8217;avoir du contenu à pré-remplir dans une base de données lors du déploiement d&#8217;une application. La plupart du temps on se fait un script SQL qui fait les insertions. En Rails, c&#8217;est mieux, on mets les insertions dans les scripts de migration et ça roule. Petit hic, mettons que l&#8217;on a [...]]]></description>
			<content:encoded><![CDATA[<p> Il est assez fréquent d&#8217;avoir du contenu à pré-remplir dans une base de données lors du déploiement d&#8217;une application. </p>
<p> La plupart du temps on se fait un script SQL qui fait les insertions. En Rails, c&#8217;est mieux, on mets les insertions dans les scripts de migration et ça roule.</p>
<p>Petit hic, mettons que l&#8217;on a beaucoup de données et contenant des champs <code>text</code>, le script de migration va vite devenir illisible. Pour ça il y a les <strong>Fixtures</strong>. Seulement, ce n&#8217;est pas géré par les migrations (de base). Les fixtures sont représentés grâce à des fichiers <acronym title="YAML Ain't Markup language">YAML</acronym> décrivant vos modèles.</p>
<p> Voilà un petit script à rajouter dans le répertoire /lib/ (nommez-le create_fixtures.rb) :</p>
<pre>require 'active_record/fixtures'

module CreateFixtures

  FIXTURES_LOCATION = 'db/fixtures'

  def self.extended(object)    class &lt;&lt; object      alias_method :migrate_without_fixtures, :migrate unless method_defined?(:migrate_without_fixtures)      alias_method :migrate, :migrate_with_fixtures    end  end

  def migrate_with_fixtures(direction)    migrate_without_fixtures(direction)    return if :down == direction    version = ActiveRecord::Migrator.current_version + 1    cnx = ActiveRecord::Base.connection    files = Dir["#{FIXTURES_LOCATION}/[0-9]*_*.yml"].each do |file|      next unless file.gsub(/.*/([0-9]+)_.*.yml/, '1').to_i == version      table_name = file.gsub(/.*/[0-9]+_(.*).yml/, '1')      Fixtures.new(cnx, table_name, nil, file.gsub(/(.*).yml/, '1')).insert_fixtures    end  end

end

ActiveRecord::Migration.extend(CreateFixtures)</pre>
<p>Ensuite, rajouter cette ligne dans le fichier <code>config/environment.rb</code> :</p>
<pre>require File.dirname(__FILE__) + '/../lib/create_fixtures'</pre>
<p>Voilà la chose est en place. Maintenant voyons l&#8217;utilisation.</p>
<p>Vous avez juste à créer un répertoire <code>db/fixtures</code> dans votre application et y mettre vos fichiersYAML. Nommez vos fichiers de la sorte :</p>
<pre>&lt;numéro_de_migration&gt;_&lt;nom_de_la_table&gt;.yml</pre>
<p>Rien de mieux qu&#8217;un petit exemple :</p>
<pre>$ cat db/fixtures/002_users.ymladmin:  login: admin  hashed_password: d033e22ae348aeb5660fc2140aec35850c4da997  status: administrator</pre>
<p>Ici, l&#8217;utilisateur administrateur sera directement ajouté à la fin de la deuxième migration. Vous pouvez bien-entendu mettre plusieurs fichiers de fixtures pour une même migration et créer des utilisateurs par exemple après la deuxième ou même la 42e migration.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alweb.org/2007/07/fixtures-on-rails/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Mieux que OS X et Vista réunis : linux</title>
		<link>http://blog.alweb.org/2007/02/mieux-que-os-x-et-vista-reunis-linux/</link>
		<comments>http://blog.alweb.org/2007/02/mieux-que-os-x-et-vista-reunis-linux/#comments</comments>
		<pubDate>Mon, 19 Feb 2007 01:58:00 +0000</pubDate>
		<dc:creator>al</dc:creator>
				<category><![CDATA[Geekeries]]></category>

		<guid isPermaLink="false">http://daiquiri.alweb.org/?p=13</guid>
		<description><![CDATA[Beryl]]></description>
			<content:encoded><![CDATA[<p><object type="application/x-shockwave-flash" data="http://www.youtube.com/v/ZD7QraljRfM" height="310" width="360"><param name="play" value="true" /><param name="movie" value="http://www.youtube.com/v/ZD7QraljRfM" /><param name="menu" value="false" /><param name="quality" value="high" /><param name="scalemode" value="noborder" /><p>Beryl</p>
<p> </object></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alweb.org/2007/02/mieux-que-os-x-et-vista-reunis-linux/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Un peu de lecture&#8230;</title>
		<link>http://blog.alweb.org/2006/11/un-peu-de-lecture/</link>
		<comments>http://blog.alweb.org/2006/11/un-peu-de-lecture/#comments</comments>
		<pubDate>Sat, 25 Nov 2006 02:55:00 +0000</pubDate>
		<dc:creator>al</dc:creator>
				<category><![CDATA[Geekeries]]></category>

		<guid isPermaLink="false">http://daiquiri.alweb.org/?p=12</guid>
		<description><![CDATA[Merci TDD de nous avoir gentillement offert et dédicacé ton ouvrage, que j&#8217;ai impatiemment commencé à dévorer, et l&#8217;avant-propos (ainsi que la préface) annonce déjà bien la chose. Une belle mise en bouche. Mais bon, 555 pages, ça ne se lit pas d&#8217;une traite. C&#8217;est là que je regrette de ne pas avoir assez de [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Lien Amazon" href="http://www.eyrolles.com/Accueil/Livre/9782212120288/livre-bien-developper-pour-le-web-2-0.php"><img src="http://blog.alweb.org/wp-content/uploads/2009/01/bien_developper_pour_le_web_20_s.jpg" alt="Bien développer pour le Web 2.0" title="Bien développer pour le Web 2.0" width="200" height="240" class="alignleft size-full wp-image-83" /></a></p>
<p>Merci <a title="Et à part ça" href="http://tddsworld.com/blogs/eapc/">TDD</a> de nous avoir gentillement offert et dédicacé ton ouvrage, que j&#8217;ai impatiemment commencé à dévorer, et l&#8217;avant-propos (ainsi que la préface) annonce déjà bien la chose. Une belle mise en bouche. Mais bon, <strong>555 pages</strong>, ça ne se lit pas d&#8217;une traite. C&#8217;est là que je regrette de ne pas avoir assez de temps de transport&#8230;</p>
<p>Parmi les nombreux chapitres, ceux qui m&#8217;alèche le plus sont le décorticage des APIs <code>prototype</code> et <code>script.aculo.us</code> ainsi que <code>REST</code>, surtout voir comment l&#8217;auteur aborde ces thèmes. Ce qui est bien c&#8217;est que l&#8217;homme rentre bien dans les détails techniques, et explique <strong>pourquoi</strong> faire ça et non cela, au lieu d&#8217;émettre le classique <cite>« c&#8217;est mal ! »</cite>.</p>
<p>A en avoir lu les critiques et en connaissant les talents de l&#8217;auteur au niveau pédagogique j&#8217;attends vraiment de voir comment il a abordé ces sujets, à la fois complexes et variés. Comme le dit <a title="Standblog" href="http://www.standblog.org">Tristant Nitot</a> et les critiques, c&#8217;est le « bien développer » qui me semble le plus important, et là on peut trouver une différence parmi ce que l&#8217;on peut trouver. On manquait d&#8217;un ouvrage <cite>Best Practices</cite> sur les technos <code>Web</code>, <code>Web 2.0</code>, <code>HTML</code>, <code>XHTML</code>, <code>CSS</code>, <code>DOM</code>, <code>AJAX</code>,&#8230; et voilà c&#8217;est fait, et le tout réuni dans ces quelques 555 pages !</p>
<p>En feuilletant l&#8217;ouvrage on peut remarquer que les noms pour les exemples ne sont pas choisis au hasard, et ça donne le sourire. On peut trouver entre autres Valérie, Emmanuel, Marie-Hélène, Nioute, Adrien,  &amp; co. C&#8217;est mignon <img src='http://blog.alweb.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>Chapeau bas l&#8217;artiste et bon courage pour le suivant <img src='http://blog.alweb.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alweb.org/2006/11/un-peu-de-lecture/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
