Sortie de Typo 5.4.0

Ça y est, une nouvelle version de Typo est lancée dans la nature. Je n'ai hélas que très peu participé à cette nouvelle version faute de motivation/temps. Mais je suis toujours très content de voir une nouvelle version de ce blog sortir.

A chaque release, une nouvelle admin fait son apparition, mais à chaque fois elle est meilleure que la précédente, donc c'est une excellente chose.

J'ai bien-sûr mis à jour ce blog et j'ai aussi switché sur le nouveau thème par défaut. Je suis toujours aussi nul en design.

En petit cadeau, voici mon fichier capistrano que j'utilise pour déployer ce blog. Ça peux toujours vous servir. On ne sait jamais.

set :application, "typo"
set :repository,  "git://github.com/fdv/typo.git"
set :domain, "blog.shingara.fr"

# If you aren't deploying to /u/apps/#{application} on the target
# # servers (which is the default), you can specify the actual location
# # via the :deploy_to variable:
set :deploy_to, "/var/rails/blog-typo"
#
# # If you aren't using Subversion to manage your source code, specify
# # your SCM below:
set :scm, :git

set :runner, "rails"
set :user, "rails"
set :use_sudo, false

set :thin_conf, "/etc/thin/#{domain}.yml"

role :app, domain
role :web, domain
role :db,  domain, :primary => true

task :update_config, :roles => [:app] do
  run "cp -Rf #{shared_path}/config/* #{release_path}/config/"
  run "ln -s #{shared_path}/files #{release_path}/public/files"
end

task :update_gems, :roles => [:app] do
  run "cd #{release_path} && RAILS_ENV=production rake gems:install"
end


after "deploy:update_code", :update_config
after "deploy:update_code", :update_gems


namespace :deploy do
  task :start, :roles => [:app] do
    run "thin -C #{thin_conf} start"
  end

  task :stop, :roles => [:app] do
    run "thin -C #{thin_conf} stop"
  end

  task :restart, :roles => [:app] do
    run "thin -C #{thin_conf} restart"
  end
end

task :clear_cache, :roles => [:app] do
  run "cd #{current_path} && RAILS_ENV=production rake sweep_cache"
  run "cd #{current_path} && RAILS_ENV=production rake tmp:cache:clear"
end

after "deploy:restart", :clear_cache
after "deploy:start", :clear_cache

English Translation

[...]
Published on Lun 21 déc 2009 20:30
0 commentaires

sortie de typo 5.2

A mon tour de vous annoncer la sortie de Typo 5.2. Cette sortie est la première sortie où je participe activement. En effet, depuis Août dernier, je suis contibuteur de Typo. J'ai d'abord commencé par faire la migration de Typo sur Rails 2.2 (avant même la sortie officiel de Rails 2.2). J'ai ensuite continué avec Frédéric à améliorer au maximum les performances et l'utilisabilité de Typo.

Aujourd'hui avec cette sortie de Typo, le travail est vraiment à la hauteur. Nous avons tout fait pour que cela soit optimum. Mais surtout nous n'avons pas fini. Nous avons ainsi énormément d'idée qui seront intégré dans Typo dans le futur. Nous allons aussi essayé de faire des releases plus régulièrement.

En bonus, voici mon fichier capistrano que j'utilise pour déployer Typo.

set :application, "typo"
set :repository,  "git://github.com/fdv/typo"
set :domain, "shingara.fr"

# If you aren't deploying to /u/apps/#{application} on the target
# servers (which is the default), you can specify the actual location
# via the :deploy_to variable:
set :deploy_to, "/var/rails/blog-typo"

# If you aren't using Subversion to manage your source code, specify
# your SCM below:
set :scm, :git
set :git_enable_submodules, 1

set :runner, "rails"
set :user, "rails"
set :use_sudo, false
set :thin_conf, "/etc/thin/typo.yml"

role :app, domain
role :web, domain
role :db,  domain, :primary => true

task :update_config, :roles => [:app] do
  run "ln -s #{shared_path}/config/database.yml #{release_path}/config/database.yml"
  run "ln -s #{shared_path}/files #{release_path}/public/files"
  run "ln -s #{shared_path}/cache #{release_path}/tmp/cache"
  run "ln -s #{shared_path}/newrelic_rpm #{release_path}/vendor/plugins/newrelic_rpm"
  run "ln -s #{shared_path}/config/newrelic.yml #{release_path}/config/newrelic.yml"
  run "ln -s #{shared_path}/config/agent #{release_path}/config/agent"
  run "ln -s #{shared_path}/config/mail.yml #{release_path}/config/mail.yml"
end

task :dump_before, :roles => [:app] do
  run "pg_dump -U typoblog typo > #{shared_path}/typo#{Time::today.strftime('%Y-%m-%d')}.sql"
end

namespace :deploy do
  task :start, :roles => [:app] do
    run "thin -C #{thin_conf} start"
  end

  task :stop, :roles => [:app] do
    run "thin -C #{thin_conf} stop"
  end

  task :restart, :roles => [:app] do
    run "thin -C #{thin_conf} restart"
  end
end

after "deploy:update_code", :update_config
before "deploy:migrations", :dump_before

English translation

[...]
Published on Dim 25 jan 2009 20:38
0 commentaires

Les named_scope en pratique sur une recherche

J'ai longtemps été sceptique sur l'intérêt des named_scope de Ruby On Rails. Ça permet d'avoir une lecture plus simple. Mais ne voyant pas un système d'eager loading si on ne les utilisait pas immédiatement, je trouvais cela dommage. Finalement après une grosse recherche, j'ai fini par en créer un exemple que je pense vraiment intéressant d'utilisation des named_scope. La mise en pratique a eu lieu sur Typo avec un commit de refactoring. Voici donc un extra de code qui parle de lui même.

class Article

   named_scope :published_at_like, lambda {|date_at| {:conditions => ['published_at LIKE ? ', "%#{date_at}%"]}}
   named_scope :user_id, lambda {|user_id| {:conditions => ['user_id = ?', user_id]}}
   named_scope :published, {:conditions => ['published = ?', true]}
   named_scope :not_published, {:conditions => ['published = ?', false]}
   named_scope :category, lambda {|category_id| {:conditions => ['categorizations.category_id = ?', category_id], :include => 'categorizations'}}
   named_scope :draft, {:conditions => ['state = ?', 'draft']}
   named_scope :no_draft, {:conditions => ['state <> ?', 'draft'], :order => 'created_at DESC'}
   named_scope :searchstring, lambda {|search_string|
     tokens = search_string.split.collect {|c| "%#{c.downcase}%"}
     {:conditions => [(['(LOWER(body) LIKE ? OR LOWER(extended) LIKE ? OR LOWER(title) LIKE ?)']*tokens.size).join(' AND '),
                       *tokens.collect{ |token| [token] * 3 }.flatten]}
   }

   def self.search_no_draft_paginate(search_hash, paginate_hash)
      list_function  = ["Article.no_draft"]
      if search_hash.nil?
        search_hash = {}
      end
      
      if search_hash[:searchstring]
        list_function << 'searchstring(search_hash[:searchstring])'
      end
      
      if search_hash[:published_at] and %r{(\d\d\d\d)-(\d\d)} =~ search_hash[:published_at]
        list_function << 'published_at_like(search_hash[:published_at])'
      end
      
      if search_hash[:user_id] && search_hash[:user_id].to_i > 0
        list_function << 'user_id(search_hash[:user_id])'
      end
      
      if search_hash[:published]
        list_function << 'published' if search_hash[:published].to_s == '1'
        list_function << 'not_published' if search_hash[:published].to_s == '0'
      end
      
      if search_hash[:category] and search_hash[:category].to_i > 0
        list_function << 'category(search_hash[:category])'
      end
      
      paginate_hash[:order] = 'created_at DESC'
      list_function << "paginate(paginate_hash)"
      eval(list_function.join('.'))                                                                                        
    end

Par contre si vous avez encore une meilleur méthode, je suis preneur. C'est surtout le eval qui m'embête un peu :(

[...]
Published on Mer 03 déc 2008 21:03
2 commentaires

La Rails party fini, voici les slides

La Rails party est désormais fini. Comme prévu, j'y ai fait 3 présentations. Je vous joins ici les PDF de ces présentations sous licence CC

Cette après midi a vraiment été très enrichissante. Énormément de bonne présentation. Quand on sait que tout cela a été réalisé en presque seulement 6 semaines, un grand chapeau au vice-président de RubyFrance Jean-François Trân.

Grâce à cet évènement, j'ai pu découvrir un peu plus en profondeur la communauté Rails. Elle est vraiment très enrichissante. Beaucoup de discussion se sont engagées toutes plus intéressantes les une que les autres. Vivement que l'on se retrouve tous à nouveau. On pourra coder encore plus de Typo :)

[...]
Published on Mar 02 déc 2008 22:42
7 commentaires

Migration sur Typo-5.1.3 et mise à jours du script capistrano

Voilà, aussitôt sortie aussitôt installée. Alors que Typo-5.1.3 est sortie dimanche, j'ai mis à jour ce blog. Comment faire une migration si rapide ? Simple un bon script Capistrano :

require 'mongrel_cluster/recipes'

set :application, "typo"
set :repository,  "http://svn.typosphere.org/typo/trunk"
set :domain, "shingara.fr"

# If you aren't deploying to /u/apps/#{application} on the target
# servers (which is the default), you can specify the actual location
# via the :deploy_to variable:
set :deploy_to, "/var/rails/blog-typo"

# If you aren't using Subversion to manage your source code, specify
# your SCM below:
set :scm, :subversion

set :runner, "rails"
set :user, "rails"
set :use_sudo, false
set :mongrel_conf, "#{current_path}/config/mongrel_cluster.yml"

role :app, domain
role :web, domain
role :db,  domain, :primary => true

task :update_config, :roles => [:app] do
  run "cp -Rf #{shared_path}/config/* #{release_path}/config/"
  run "ln -s #{shared_path}/files #{release_path}/public/files"
end

after "deploy:update_code", :update_config

Il ne suffit plus que d'avoir dans le dossier /shared/ le dossier /config/ comprenant les fichiers de configurations : database.yml et mongrel_cluster.yml. Après à chaque mises à jours de typo : cap deploy:migrations. Tout sera fait pour toi.

C'est pas beau la vie en Ruby ?

[...]
Published on Lun 01 sept 2008 16:20
0 commentaires

Upgrade de typo en Typo-5.1.1

Ce blog a été mis à jour avec succès avec la nouvelle version de Typo. En effet, la sortie a été réalisé hier et ce blog est déjà à jour. Pour la première fois plusieurs de mes contributions sont présentes directement dans cette nouvelle mouture avec quelques remerciement de Neuro. Ca fait vraiment plaisir.

J'ai aussi mis le thème par défaut de Typo qui est vraiment très bien. Merci à jeuxdemaux.org

[...]
Published on Mar 22 juil 2008 16:00
0 commentaires

Yoolink-sidebar pour Typo

Depuis quelque temps, j'ai commencé à utiliser yoolink pour remplacer del.icio.us. Yoolink est exactement comme del.icio.us dans son concept. Mais il a une interface beaucoup plus sympathique et avec des nouvelles fonctionnalités plus interressante. J'utilisais sur ce blog propulsé par Typo le plugin del.icio.us pour afficher les derniers bookmarks que j'ai ajouté sur del.icio.us. Mais n'utilisant plus ce service et utilisant yoolink à la place, j'ai décidé d'adapter le plugin del.icio.us pour yoolink.

Voici comment vous pouvez l'installer :

  1. Récupérer le plugin en le téléchargeant sur Github : Yoolink-sidebar-0.1.0
  2. Copier le contenu du plugin dans le dossier /vendor/plugins
  3. Redémarrer Typo
  4. Dans l'administration, vous pouvez désormais placé le plugin yoolink.
  5. Configurer le plugin yoolink :
    • Login : indiquez votre login yoolink
    • items limit : indiquez le nombre de bookmark afficher par le plugin
    • groups link by days : Groupez les bookmarks par date avec celle-ci d'afficher
    • Allow links in description : Permettre les hyperliens dans les descriptions des bookmark. Par défaut, ils sont désactivés

Au niveau des CSS, le plugin est contenu dans une balise div avec comme id "yoolink". De base, c'est celle utilisé par votre thème.

[...]
Published on Dim 23 mars 2008 10:47
0 commentaires

Migration vers Typo 5.0

Ca y est ce blog a été migré vers la branche 5.0 Stable de Typo. Cette nouvelle version apporte énormément de changement que je ne détaillerais pas ici, car elles ont tout à fait bien été décrite.

J'ai même eu la chance d'avoir vu plusieurs de mes patchs intégrés à cette version.

Pour effectuer la migration vers cette nouvelle version de Typo, j'ai dû hélas faire quelques petites modifications. En effet, j'ai appris par Frédéric, qu'il y avait un petit bug à l'heure actuel. Les tags ne peuvent pas avoir de point dans leur nom. J'ai ainsi indiqué sur ce ticket la modification ci-jointe que j'ai réalisé pour faire passer la pillule à Typo. Hélas cela n'est qu'un contournement. Il suffit donc d'utiliser la magie de la console Rails pour éviter le problème en supprimant le point dans son tag.

rails@shinydedi /var/rails/typoblog-dev/current $ ./script/console production
Loading production environment.
>> t = Tag.find_by_name "rubyonrails2.0"
=> #"rubyonrails2.0", "updated_at"=>"2007-09-29 23:48:11.980446", "id"=>"18", "display_name"=>"rubyonrails2.0", "created_at"=>"2007-09-29 23:48:11.980446"}>
>> t.name "rubyonrails-2-0"
=> "rubyonrails2.0"
>> t.display_name = "rubyonrails-2-0"
=> "rubyonrails-2-0"
>> t.name = "rubyonrails-2-0"
=> "rubyonrails-2-0"
>> t
=> #"rubyonrails-2-0", "updated_at"=>"2007-09-29 23:48:11.980446", "id"=>"18", "display_name"=>"rubyonrails-2-0", "created_at"=>"2007-09-29 23:48:11.980446"}>
>> t.save
=> true

J'ai ensuite eu un nouveau petit problème lors du lancement de la tâche de migration de la base de donnée. Il me manquait le gem Rcov. Comme le serveur est mon serveur de production, j'ai préféré enlevé le fichier qui me demandait cette dépendance que d'installer ce gem. Par contre j'ai récupéré les sources du SVN de Typo. Donc peut-être que sur les versions releasés, ce fichier a été enlevé.

rails@shinydedi /var/rails/typo-5-0-stable $ rm lib/tasks/rcov.rake

Et après tout est passé. A part ma petite erreur d'oubli de changement de localisation du dossier static pour mon serveur. Mais là c'est que de l'administration pur et dur.

Enfin au niveau des modifications, j'ai aussi changé de thème pour conserver le nouveau thème par défaut de Typo. J'ai juste réalisé quelques modifications au niveau du fichier CSS pour que ça corresponde plus à mes envies. Je vous fournis les modifications pour les curieux.

Index: themes/dirtylicious/stylesheets/application.css
===================================================================
--- themes/dirtylicious/stylesheets/application.css     (révision 1624)
+++ themes/dirtylicious/stylesheets/application.css     (copie de travail)
@@ -21,8 +21,8 @@

 li {list-style: none;}

-h1 {font: normal 1.8em Tahoma,sans-serif;}
-h2 {font: normal 1.6em sans-serif;}
+h1 {font: normal 2.3em Tahoma,sans-serif;}
+h2 {font: normal 2em sans-serif;}
 h3 {font: bold 1em Tahoma,sans-serif;}

 h1,h2,h3 {padding-top: 6px; color: #553; margin-bottom: 4px;}
@@ -167,6 +167,16 @@
     color: #654;
 }

+#sidebar #categories li a {
+    display: inline;
+    padding: 0 0 0 5%;
+}
+
+#sidebar #archives li a {
+    display: inline;
+    padding: 0 0 0 5%;
+}
+
 /* footer */
 #footer {
     background: #949490;
@@ -325,3 +335,26 @@
 #sidebar table tfoot #next a {text-align:center;}

 #searchform {padding: 10px;}
+
+#delicious {
+    border: 4px solid rgb(188, 204, 235);
+    padding-left: 5%;
+    padding-right: 2%;
+    padding-bottom: 10px;
+}                                                   
+
+pre {
+    background-color: black;
+    color: white;
+    font-size: 1.3em;
+    padding: 2%;
+}
+
+.content h1 {
+    font-size:1.6em;
+}
+
+.content h2 {
+    font-size: 1.4em;
+    padding-left: 5%;
+}

[...]
Published on Ven 11 jan 2008 21:17
0 commentaires

RSS Follow me on Twitter