New inflectors in Rails 3.0.5 may break your ActiveRecord models

I decided to write on this in the hope it will help someone else.  I lost too much time on this problem.

I have a Rails application that I migrated from 3.0.3 to 3.0.9.  Suddenly, all my tests were failing on my Media model with this error:

ActiveRecord::StatementInvalid:
Could not find table 'media'

I went in the Rails console, and just typing Media was giving me this error instead of listing the attributes:

=> Media(Table doesn't exist)

What??? I checked my database, everything was fine.  Looks like the pluralization does not work.  And then, I type:

'media'.pluralize
=> "media"

Ha haaaa….. that’s it.  Rails must have new inflectors, and it does!

To fix this, we have two options:

  1. Force the table name in the Model
  2. Add an inflector of our own

I chose the second option since it would apply to my entire app (views as well).  Just had to modify the inflections.rb initializer:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.irregular 'media', 'medias'
end

There you go. Hope it helps.

Rails 1.2.x + Ruby 1.8.6 + OS X Lion: 10 easy steps

One of my most popular blog posts is this one, where I explain how you can have an old Rails application running on Snow Leopard.

Well now that Lion is out, it’s time to update and again make sure our old projects are still maintainable (yes, I have customers that don’t need to move to the latest and greatest – I wish).

Although this post targets old versions of Rails and Ruby, you can follow the same steps for the latest versions (1.9.2 and 3.0).

Background

Since 2010, things have changed in the Rails world.  Homebrew is now the preferred way to install packages on Mac OS X.  And RVM is now a must for anyone that wants to do serious Rails and/or Ruby development.

So here we go, follow me through the installation of the Rails stack on Lion.

Note 1: I did a clean install of Lion.  Not sure that my recipe will work on a “migrated” Lion.  A colleague of mine had problems setting up ImageMagick after migrating to Lion.  It might work, but why not take some time to clean everything up and all pieces installed properly.  And why not archive some files at the same time? 

Note 2: I’m using Textmate.  If you are using Aptana, you might want to check on the web, I think I’ve seen some blogs describing some issues with RVM and Aptana.  According to this post, starting Aptana from the command line makes it use the RVM interpreter.

Note 3: Phusion Passenger is awesome.  But in the past, I tried using it on my development machine and I didn’t like it so much.  I still prefer starting the server myself and see the output in my terminal window.  RMV supports Passenger, but I didn’t play with it.

Note 4: I’m on a Macbook Pro 17″ Mid-2010.  Your experience might be different if you are on a different architecture.

Prerequisites

  • If you are still on Snow Leopard, prior to migrate to Lion, find an empty drive and use SuperDuper to clone your hard drive.  This is an excellent backup solution (you can boot from the backup drive afterwards).
  • Format your drive and install Lion.  But hey, how do I install Lion on a clean drive?  If you have a newer Mac, when you boot, you will have a choice to install Lion from the internet.  Otherwise, you may download it and “burn” the image on a USB key or external drive (I tried on a DVD, may it is VERY slow when installing).  Follow these instructions.
  • Get the latest version of XCode on the Apple Developer Site and install it.

Step 1: Install Lion

Boot from the image, install and optionally import only the general settings when the migration assistant makes you the offer.  This will you will get some global preferences back, such as your network settings and printers.  You’re doing a clean install after all, and I prefer to move my files over myself so I can clean-up at the same time!

Step 2: Update the software

Once in Lion, click on the Apple and do a software update.  For sure, there are some new updates to apply.

Step 3: Homebrew

Then, let’s install Homebrew (just one line, isn’t that great?).  First, start the Terminal application (you will find it in Utilities in the Launchpad).  Then, copy and paste the following line.

/usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"

Homebrew uses “live” recipees stored on Github.  The behaviour described hereby might change in the future.  So, if you see a discrepancy, please let me know so I can update them.

Step 4: Xcode

Yes. Install Xcode after Homebrew, as stated on the web page. Download it from the App Store.

Note: At some point during the install, it might ask you to quit iTunes, although it does not seem to be running. This is due do the iTunes Helper that might be still running. Open “Activity Monitor”, search for the process iTunes Helper and kill it. The install will continue.

Step 5: Basic packages

Now let’s install some basic packages that we all love and cherish.

brew install readline git wget

You have to agree that this is cool.  No sources to download and untar, no configure command to run, … Homebrew takes care of doing all that.  Of course, we don’t have as much control, but this is fine with me so far.

Step 6: MySQL

Chances are that your old Rails project is using MySQL and not a popular NoSQL database such as MongoDB.  Let’s ask Homebrew to install it:

brew install mysql

Very important: read the text that Homebrew dumps at the end and follow the instructions.  Otherwise, you will have all kinds of problems.  If you want those messages back, use this command: brew info mysql.

unset TMPDIR
mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmpsudo chown `whoami` /var/mysql
mkdir -p ~/Library/LaunchAgents
cp /usr/local/Cellar/mysql/5.5.14/com.mysql.mysqld.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/com.mysql.mysqld.plist

I then get the following error:

launchctl: CFURLWriteDataAndPropertiesToResource(/var/db/launchd.db/com.apple.launchd.peruser.501/overrides.plist) failed: -10
But if I check the processes running on the Mac (ps -ef | grep mysql), MySQL server seems to be up and running.  Strange!

I also like to apply some changes to the default configuration.  When you import one of your SQL backups, the default max_allowed_packet might be too small.  So I like to boost it to 64M.

Here’s my /etc/my.cnf file:

[mysqld]
#Max packetlength to send/receive from to server.
max_allowed_packet=64M
character-set-server = utf8

#This option makes InnoDB to store each created table into its own .ibd file.
innodb_file_per_table

[mysql]
default-character-set = utf8

[client]
default-character-set = utf8

Then, let’s restart the MySQL server:

launchctl unload -w ~/Library/LaunchAgents/com.mysql.mysqld.plist
launchctl load -w ~/Library/LaunchAgents/com.mysql.mysqld.plist

Step 7: The lovely ImageMagick

Oh well.  This is always the worst thing to install on Mac OS X.  I had so many problems yesterday installing it that it’s worth explaining how I got it running.

First, later on, when you install RMagick, you will require Ghostscript fonts.  So it is a good thing to install it right now, before ImageMagick:

brew install ghostscript

Now you should have the following error (if not, you’re lucky and most likely the ghostcript brew recipe was fixed).

./base/gdevpng.c:283: error: dereferencing pointer to incomplete type
To fix this, follow the instructions here and install once again ghostscript.

And finally, ImageMagick:

brew install imagemagick

Step 8: Ruby Version Manager (RVM)

Now that we have the foundation installed, let’s have fun with the Ruby Version Manager.  RVM keeps multiple ruby environments isolated from each other.  Each one has its own ruby version (compiled from source) and its own gems (which is awesome).  You can also create “gemsets” to isolate even more projects that share the same ruby.

So instead of using the Lion out-of-the-box Ruby , let’s set-up an environment for 1.8.6.

But first, let’s install RVM:

bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)

Important: do not forget to complete the install by performing 3 steps that are shown to you.

Then, let’s install our first ruby.

rvm install 1.8.6

This will install everything in the .rvm folder in your home folder. If you change your mind later, it’s easy to uninstall: rvm implode.

You can confirm the installation by running rvm list.

Step 9: Gems

RVM will install a version of Rubygems for each environment, with the proper gem sources. Let’s install some:

rvm 1.8.6
gem install ruby-debug
gem install rmagick -v 1.15.16
gem install mongrel
gem install mysql
gem install rails -v 1.2.1

If you get this error when you try to install the first gem:

/Users/hugo/.rvm/rubies/ruby-1.8.6-p420/lib/ruby/1.8/timeout.rb:59: [BUG] Segmentation fault

ruby 1.8.6 (2010-09-02) [i686-darwin11.0.0]

you need to recompile the version of ruby so that it uses the old compiler and not the new LLVM one:

rvm remove 1.8.6
CC=/usr/bin/gcc-4.2 rvm install 1.8.6
rvm 1.8.6

That’s it.  You should be good to go now.  I strongly suggest that you read on how to create and use gem sets.

Step 10: Sugar

There is a way with RVM to automatically switch interpreter when you cd to a project’s folder.  Simply provide a .rvmrc file in the project’s folder:

echo "rvm 1.8.6" > ~/projects/project-a/.rvmrc

Also handy is to have the current interpreter displayed in the command line prompt. Simply edit your ~/.bash_profile file and add the following line:

export PS1="\[\e[32;40m\]\$(~/.rvm/bin/rvm-prompt)\[\e[0m\] $PS1"

Have fun, and “long live to Ruby on Rails”!

Please comment if you see an error in here so I can update it.  Thanks!

Écouteurs à réduction de bruit – la finale!

Suite du billet de janvier.


Audio-Technica ATH-ANC7b

N’étant pas tout-à-fait satisfait de la qualité audio des Bose QuietComfort 15 (QC15), j’ai décidé de commander les Audio-Technica.  J’ai déniché une paire sur eBay et le vendeur fût très efficace, je les ai reçu 1 semaine après.  Voici donc mon apréciation.

  • Bonne construction, mais un peu plus gros que les Bose
  • Ils peuvent être utilisés sans le mode de réduction de bruit.
  • Moins comfortable que les Bose.  Un peu “dur” au début, mais se ramolissent après quelques temps sur la tête.
  • Manque de clarté dans le son.  Mais l’immersion dans la musique est meilleure que les Bose.
  • Ouverture pour l’oreille plus étroite, je sens mon oreille un peu squeezée, et j’ai de petites oreilles!
  • Bonne réduction de bruit, pas de bruit de fond.  Mais ce n’est pas aussi efficace que les Bose.  Vraiment, les Bose sont assez impressionnant à ce niveau.  Mais c’est peut-être pour ça que la qualité audio n’est pas là.
  • Adapteur 1/4″ fourni
  • 2 câbles fournis: un court et un long
  • Isolation la moins bonne.  Dans un environnement calme (comme une bibliothèque), on entend ce que j’écoute.

Donc rendu à ce point-ci, j’aurais bien aimé fusionner les Bose avec les Audio-Technica, j’aurais obtenu la paire rêvée.  Mais bon, la technologie actuelle ne permet pas de fusionner des objets! ;-)  Déçu,  je sors mes bons vieux Denon et décidément, ca sonne mieux.

Denon.  Comment se fait-il que j’ai pas pensé à vérifier si ils ont des écouteurs à réduction de bruit?  Hugo!  Gros épais! ;-)


DenonAH-NC800

Je découvre sur le site de Denon qu’ils en font.  Évidemment, personne à Montréal ne les tient.  Donc, il faut commander par Internet.  Je mijote l’idée un peu car c’est quand même un autre 350$ à investir.  Mais comme il me reste 2 semaines pour retourner les Bose, je me lance dans l’achat des Denon.

Il arrivent une semaine après et là, enfin, la phrase “de la musique à mes oreilles” prend tout son sens!

La qualité audio est définitivement meilleure que les Bose et Audio-Technica, du moins à mon oreille.  La basse est présente, mais justifiée et non envahissante.  Les fréquences semblent équilibrées et le son est clair, les voix sonnent bien.

  • Comfort exceptionnel, meilleur que les Bose.  Les coussins sont hypers-super-confortables
  • L’ouverture pour l’oreille est généreuse.  Si vous avez de grosses oreilles, vous allez aimer ces écouteurs.
  • Peuvent être utilisés sans le mode de réduction, comme les Audio-Technica.
  • Possèdent deux modes de réduction: On et Restorer.  Ce dernier offre la meilleure qualité en général, mais ca semble booster un peu les hautes fréquences.  Dans certains cas, je préfère le mode On tout simplement, surtout dans une environnement pas trop bruyant.
  • Beau look clean et minimaliste
  • Indicateur de mode réduction (led) discret (sur le côté à l’arrière).
  • Se plient en deux pour le transport (prend moins de place que les Bose et Audio-Technica)
  • 2 câbles fournis: un court et un long
  • Réduction de bruit moins bonne que les deux autres paires.  Dans le silence complet, il y a un petit bruit de fond.  Mais elle est tout de même très bien, performance très satisfaisante dans l’autobus et le métro.  Mais encore une fois, les Bose sont imbattables à ce sujet.
  • Excellent isolation.  Quelqu’un à côté de moi n’entend pas ce que j’écoute.
  • Seul gros défaut: si le mode de réduction est actif et qu’on approche les deux coquilles l’une de l’autre, il y a un sillement aigu qui se produit.  Je suspecte un problème de feedback entre l’intérieur du casque et les micros extérieurs.  C’est un peut agassant car je dois fermer la réduction lorsque j’enlève le casque de sur ma tête.  Une question d’habitude.  Je suis prêt à vivre avec ce léger inconvénient.

J’ai donc retourné les Bose chez Future Shop, et j’ai maintenant une paire d’Audio-Technica à vendre! ;-)

Je suis présentement en train d’écouter de la musique en alternant entre les Denon et les Audio-Technica.  Tout de même, les Audio-Technica sont plaisant à écouter, je pense que la musique est une petite coche plus riche que les Denon, mais c’est difficile à dire.  Mais mes oreilles préfèrent les Denon.  Et selon plusieurs sources, l’ouïe varie d’une personne à l’autre, donc peut-être que vous auriez une autre appréciation des écouteurs.

Si par contre votre critère numéro un est la réduction de bruit, allez avec les Bose.  Dans mon cas, la qualité de la musique est mon critère #1.

Bon magasinage!

Écouteurs à réduction de bruit – quelle aventure!

Ces derniers temps, je prends souvent le métro et là, je commençais à être tané de faire “pause” sur mon iPod quand le métro arrive et monter le volume après être entré dans le métro.  Bref, je me suis mis à chercher pour des écouteurs qui règleraient ce problème.  Avant de vous vous paire part de mes résultats, voici quels étaient mes critères de sélection.

Type d’écouteur

Mes oreilles sont assez spéciales.  Je ne tolère pas les écouteurs qui sont comme des bouchons dans le canal de l’oreille, je ne les supporte pas.  Également, je ne supporte pas les écouteurs qui repose sur l’oreille car ca m’inflige une pression et comme mes oreilles fûrent recollées quand j’étais jeune, elle deviennent irritées à la longue.  Il me faut donc un casque circum-auriculaire (autour de l’oreille).

Isolation

J’écoute pas mal de tout, et je ne veux pas qu’on entende ce que j’écoute.  Donc, l’isolation du casque est un facteur important.  Dans le métro comme dans l’avion, je ne veux pas déranger mon voisin.

Qualité sonore

Au bureau, mon casque Skype est un Sennheiser et je suis super satisfait de la qualité sonore.  Il y a un peu plus de 8 ans, je me suis procurer des écouteurs Denon HD-750 que j’ai beaucoup apprécié (mais qui ne coupe pas le bruit du métro).

Je cherche donc un écouteur qui offre une très bonne qualité sonore.  Tant qu’à payer cher pour des écouteurs à réduction de bruits, il faut tout de même apprécier la musique.

Comfort

Une chance, mes oreilles sont petites.  Donc elles devraient entrer complètement dans le casque.  De plus, je porte des lunettes, donc il ne faut pas que le casque mette trop de pression sur ma tête.

Transport

Ce facteur est plus au moins important car il me serviront durant mes déplacements seulement.  Par contre, je veux pouvoir les ranger d’une façon compacte lorsque je prendrai l’avion.  Mes anciens Denon étaient un peu problématique à ce sujet, je ne pouvais pas les plier et les ranger dans un endroit exigu.

Processus de sélection

Que ferions-nous sans Internet, hein?  J’ai cherché, lu, cherché, lu, cherché, lu, … Des évaluations en anglais, en français, sur Amazon, head-fi.org, epinions, CNet, YouTube (dont ce vidéo fort intéressant), ….   Des discussions sur des subtilités comme les correctifs apportés sur le modèle B du Audio Technica ATH-ANC7 à cause d’une poursuite de Bose, la basse un peu trop présente du Bose QuietComfort, la mauvaise annulation du bruit pour le Sony, la meilleure construction du Sennheizer, …. bref.  Assez de commentaires pour en perdre son latin.

Ca devient assez mélangeant car il n’y a pas de consensus.  Les sites respectables en audiophonie ne veulent pas se commettre et laisse la porte ouverte.

Donc, ne pouvant me fier sur qui que ce soit, je décide qu’il faut en essayer plusieurs et choisir celui qui plaira à mes oreilles et rencontrera mes critèes ci-haut mentionnés.

Désirant tout de même une certain qualité et que mon budget me permet d’aller jusqu’à 500$, je présélectionne les écouteurs suivants:

Future Shop et Best Buy ont des stations d’écoute pour le Bose.  Pour les 2 autres, c’est tout un défi de trouver un endroit à Montréal où je peux les essayer.

Sennheiser PCX-450

Je trouve finalement un endroit qui a le Sennheiser.  Énorme déception!  J’avais un parti pris pour Sennheiser, et il a pris une méchante débarque.  Premièrement, il est gigantesque et n’a pas assez de pression pour que les coussinets soient totalement en contact sur ma tête.  Donc, l’annulation du bruit est moins bonne (fuites perceptibles), au point où je me demande à moment donné si il y a effectivement réduction de bruit.  Et oui, en les mettant ON/OFF, j’entend une différence.

Ensuite, ils demandent plus de “jus” de mon iPod, il faut donc que je mette le volume quasiment au maximum.  Je crains alors donc que dans un endroit bruyant, j’aurai un problème.

Finalement, pour la qualité sonore, je suis déçu.  Je ne suis pas un audiophile, mais je n’aimais pas du tout ma musique dans ces écouteurs.  A vrai dire, j’ai l’impression qu’il aurait fallu une meilleure puissance pour fournir les haut-parleurs.  Peut-être qu’ils sont de trop bonne qualité pour un iPod/iPhone.

Bose QuietComfort 15

J’essaie ensuite le Bose, avec ma même musique de test.  Wow.  Quelle différence.  Tout est clair et précis et contrairement au préjugé que j’avais sur la basse, elle ne m’agaçe pas en fin de compte.  L’écoute que j’avais fait sur le poste d’écoute de Bose au Future Shop m’avait laissé perplexe.  Mais là, ca sonnait super bien.

Audio Technica ATH-ANC7B

J’ai cherché partout à Montréal.  Aucun endroit ne l’a.  Il faut passer une commande spéciale.  Pas fort! Même Italmélodie n’a pas ce modèle (ils ont plusieurs modèles, mais pas lui).

Achat

Je commence par aller chez Dumoulin pour voir ce qu’il ont.  Déception, ils n’ont que le Sennheiser PCX-310 qui est format voyage et repose sur l’oreille, donc il est rejeté d’office.  Je fais l’essais d’un Sony pour le fun: désastre, le son est pourri et la réduction de bruit moyenne.

Je passe par le Centre Hi-Fi pour voir ce qu’il ont.  Ils ont un modèle de JVC et un de Panasonic RP-HC500.  J’essaie ce dernier et je suis tout de même satisfait de la qualité sonore et aussi du fait qu’en mode non réduction de bruit, les écouteurs fonctionnent encore (ce que le Bose n’offre pas).  Mais je n’aime pas la construction du Panasonic, il fait des “kwiks kwiks” quand je le manipule.

Je me rends donc chez Future Shop pour me procurer les Bose.

Je reviens à la maison.  Voici dans l’ordre mes réactions:

  • Bel emballage.  Coffret de transport cute et efficace.
  • J’aime bien le fait que le câble peut s’enlever: je pourrai utiliser le caque pour avoir du silence tout simplement.  Et si j’endommage le câble, j’en achète un autre.
  • Je met les écouteurs à ON et je les met.  WOW.  Vraiment impressionnant.  Je n’entend plus le frigidaire.  Et oh, un autobus passe dehors et je ne l’entend pas.
  • Partons la musique.  Rewow!  Quand il y a des silences dans le morceau musical, c’est là qu’on apprécie la fonction de réduction de bruit.
  • Très petit léger bruit de fond quand il n’y pas de musique, mais c’est très faible.  Et quand la musique débute, on ne l’entend plus.
  • Encore wow.  La clarté du son est vraiment bonne.
  • Maintenance, comparons avec mes Denon.  Je cours les chercher et je branche mon splitter pour que je puisse switcher rapidement d’écouteurs.  Et c’est là que je m’aperçois que les Bose ne sont pas parfait.
  • Le son est clair, mais on dirait qu’il l’est trop.  Il manque de chaleur, de rondeur.  On dirait qu’il a été nettoyé avec de l’eau de javel! ;-)  Mais quand même, le son est tout de même excellent.  Par contre, la musique m’emporte plus quand je l’écoute avec mes Denon.

À la lueur de ces résultats, je compte conserver les Bose, mais je vais tout de même faire venir les Audio Technica.  Je retournerai (ou revendrai) une des deux paires.

A suivre!


UPDATE 1

J’ai essayé pour la première fois les écouteurs Bose dans le métro à Montréal.  Quelle révélation!  Quand la ram de métro est arrivée, j’avais l’impression qu’elle roulait sur du feutre.  J’ai eu un sourire de satisfaction à ce moment.  Une fois entré dans la rame, c’était calme et reposant!  Wow.  A ce moment-là, j’avais du jazz dans les oreilles et j’entendais les subtilités de la musique.  A mon retour le soir même, j’écoutais un podcast qui demande une attention particulière (anglais british) et aucun problème, j’entendais tout.

Les Audio-Technica sont sur le point d’arriver, je ferai un second update lorsque je les aurai testé.


UPDATE 2

Lire la suite

Let’s have fun: Rails 2.3.5 + nginx + Passenger on a G4 Cube with Tiger

Last week-end, I purchased a used PowerMac G4 Cube, an iconic product in the Mac community.  I was wondering what I could do with it, given its performance limitation.

I thought of using it to rip some of my DVDs so I could watch the TV shows on my iPad.  But the cube does not have the power to encode in X264.  A 24 minutes episode was requiring 8 hours of encoding… That’s insane!

So then I came up with the idea of using it as a torrent downloader.  I would submit download request through a web interface or by placing a torrent file in a shared folder.  The web interface would also show the current and past downloads. I am planning to have Transmission running and using their API to interface with it, using one the following Github projects:

Since I spend almost all my time in Ruby on Rails, why not setting up Rails on the cube, with nginx, Passenger and SQLite.

Preparation

XCode installation.  XCode can be found on the Tiger install disc.  We do not need to have the latest and greates, we simply need the compile and some development libraries installed.  I did not install everything, just the following:

  • Developer Tools Software
  • gcc 4.0
  • gcc 3.3
  • Soware Development Kits

Ruby & Rubygems

I could install Ruby using the great RubyOSX one-click install, but I wanted to make sure I had the full control on what I install.  So I decided to install sources and compile everything.

Tiger comes with a very old version of Ruby: 1.8.2. Let’s upgrade it to a more recent version.  I followed Hivelogic instructions for doing so.

The difference is that I chose to install patch 399 of ruby 1.8.6: 

curl -O ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6-p399.tar.gz

And for Rubygems, I chose to install the latest version, 1.3.6:

curl -O http://production.cf.rubygems.org/rubygems/rubygems-1.3.6.tgz

Be patient when compiling Ruby… It’s only a 450Mhz PowerPC computer!

SQLite

Now that we have rubygems, let’s install the sqlite3 adapter.

sudo gem install sqlite3-ruby

Git

There is a good chance that we will need git for some plugins for our Rails application.  So let’s install this as well.

cd /usr/local/src
curl -O http://kernel.org/pub/software/scm/git/git-1.7.1.tar.gz
tar xzvf git-1.7.1.tar.gz 
cd git-1.7.1
make configure
./configure --prefix=/usr/local 
make
sudo make install</pre>

Rails

Now, the “piece de resistance”: Rails.  This is pretty straight forward.  Let’s install it, without the documentation.  Development will not be done on the G4 Cube.  We will use Capistrano to remotely deploy our apps on it.

sudo gem install -V rails -v 2.3.5 --no-rdoc --no-ri

Passenger

We need to install Passenger first, because we will need a passenger-nginx module later.

sudo gem install passenger

nginx

We could have installed nginx using Passenger, but let’s take the complex route (Passenger has not been tested on Tiger).

First, let’s install nginx.

cd /usr/local/src
curl -O http://nginx.org/download/nginx-0.8.36.tar.gz
tar xvfz nginx-0.8.36.tar.gz
cd nginx-0.8.36
sudo ./configure --pid-path=/usr/local/nginx/logs/nginx.pid --sbin-path=/usr/local/sbin/nginx --with-md5=/usr/lib --with-sha1=/usr/lib --with-http_ssl_module  --with-http_dav_module --without-http_rewrite_module --add-module=`passenger-config --root`/ext/nginx
sudo make
sudo make install

When running “configure”, at some point, you should get *** Phusion Passenger support files have been successfully compiled ***. That’s a good sign!

Now let’s create a script to automatically start nginx (thanks to Trevor for some hints).

Using a file editor, create file /Library/LaunchDaemons/nginx.plist and put the following content in it:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>KeepAlive</key>
        <true/>
        <key>Label</key>
        <string>nginx</string>
        <key>RunAtLoad</key>
        <true/>
        <key>LaunchOnlyOnce</key>
        <true/>
        <key>Program</key>
        <string>/usr/local/sbin/nginx</string>
        <key>StandardErrorPath</key>
        <string>/usr/local/nginx/logs/error.log</string>
</dict>
</plist>

Load the daemon description:

sudo launchctl load /Library/LaunchDaemons/nginx.plist

Nginx should start automatically. You can check by looking the processes and see if the nginx server is there:

ps -aux | grep nginx

If nginx did not start, look at the possible errors in /usr/local/nginx/logs/error.log.

If you need to start or stop nginx manually, here’s how to do it:

sudo nginx -s stop
sudo nginx

Test application

Let’s create a dummy Rails app to test our set-up.

cd ~
rails foo
cd foo
script/generate scaffold bar title:string description:text
rake db:create
rake db:migrate
sed 's/# map.root/map.root/g' config/routes.rb | sed 's/welcome/bars/g' > config/routes.rb
rm public/index.html

Now, let’s configure nginx. Instead of creating virtual servers for each Rails app, let’s put them all under the same virtual server. This way, we won’t have to create special hostnames and different server sections in the nginx configuration. And we will be able to access the applications by pointing to the G4 Cube ip address. We just need to make sure Passenger is aware of that by using the passenger_base_uri directive.

So let’s create a symbolic link in the root html directory:

cd /usr/local/nginx/html
sudo ln -s ~/foo/public/ foo

Make sure the nginx configuration file (/usr/local/nginx/conf/nginx.conf) looks like something like this:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    gzip  on;

    passenger_root /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.11;
    passenger_ruby /usr/local/bin/ruby;

    server {
        listen       80;
        server_name  localhost;

        passenger_enabled on;
        passenger_base_uri /foo;
        rails_env development;
        root /usr/local/nginx/html;
    }
}

Check the location of your passenger root by running this command:

passenger-config --root

If you loaded the launch daemon script, nginx is most likely running at the moment. Let’s reload the configuration file:

sudo nginx -s reload

Now, the moment of truth. Rush to Safari and go to http://localhost/foo. After a few seconds (Passenger must start the app), you should get the bars scaffold.

Excellent! We now have a fully functional system for hosting utility apps on my home network. The next step is to write the apps!

See ya next time!

Une semaine avec le iPad

Voilà déjà une semaine en compagnie du charmant iPad. On m’a souvent demandé cette semaine s’il en valait le coût. Ma réponse était évidemment oui car je suis déjà vendu à Apple. Mais plus on avance dans le temps, plus je trouve son utilisation justifiée.  Voici donc mes premiers commentaires qui espérons-le pourront vous éclairer.

Enfin, mon divertissement peut me suivre et être consommé de façon adéquate: internet, musique, films, télé, photos, jeux, livres, courriels. Ne nous le cachons pas, le iPhone et iPod Touch nous offrait cette possibilité mais l’écran est vraiment trop petit.  Celui du iPad est vraiment époutouflant: clair, précis, lumineux.  Bref, je redécouvre des photos du passé.  Plus besoin de faire imprimer des photos: on les montre à notre famille avec le iPad.

iMockups

iMockups

ArtistsTouch

Artist's Touch

Autre élément différentiateur: la dimension de l’écran et les nouvelles possibilités “tactiles” qu’il apporte. Vous n’avez qu’à utiliser une application de dessin pour comprendre (comme pas example Artist’s Touch). J’ai aussi bien aimé concevoir une maquette de site web en utilisant iMockups. C’est vraiment plus agréable que l’utilisation d’une tablette tactile Wacom. Rien de mieux que les doigts pour rapidement bouger des choses sur un écran.

Livres

iBooks

iBooks

Découverte de la journée hier: le format ePub pour les livres électroniques, l’équivalent du mp3. Il peut être protégé ou ouvert. Donc dans iBooks (l’équivalent de iTunes), on peut placer des livres qu’on a acheté ou qu’on s’est procuré gratuitement sur des sites comme ebooksgratuits.com. Donc on peut installer la majorité des œuvres littéraire du domaine publique, comme Don Quichotte et tous les Sherlock Holmes.

Example d'une page

Example d'une page

Le premier livre que j’ai acheté est Rework de 37 Signals. Il n’est disponible dans le iBook Store de Apple, et j’ai donc acheté la version Kindle. Oui, vous pouvez lire des livres Kindle de Amazon sur le iPad. Et aussi sur le iPhone et le Mac et probablement sur PC aussi. Ce qui est bien avec Kindle, c’est la technologie de synchronisation. Quand Internet est accessible, le logiciel pousse régulièrement vers Amazon l’endroit où on est rendu dans le livre. On peut reprendre la lecture sur le iPhone et Kindle nous amène à la bonne page. C’est génial et Apple a annoncé jeudi qu’il offrirait cette fonctionnalité cet automne.

Biographie de Napoléon

Biographie de Napoléon

Mais attention, c’est facile de s’éparpiller. Acheter un livre sur Amazon nous force à le lire sur Kindle. Et c’est la même chose avec Kobo et autres. Je n’aime pas vraiment ça car on ne peut pas avoir une bibliothèque centralisée, comme pour la musique. Donc à compter de maintenant, je ne vais acheter que des livres qui peuvent être stocké dans iBooks. Donc fini Amazon en ce qui me concerne (pour les livres électroniques).

Il est à noter que les livres qu’on achète sur iBook Store sont protégés.  On ne peut donc pas donner le fichier à un ami ou un membre de la famille.  On peut par contre autoriser jusqu’à 5 ordinateurs, comme pour la musique protéger.  Ce serait bien si iBooks nous permettait de passer un livre à une autre personne.  Par exemple, on entre le courriel de la personne, une date limite et iBooks s’occupe d’envoyer l’offre par courriel et nous rend le livre non disponible dans notre bibliothèque le temps du prêt.  Je crois que ça inciterait le monde à acheter des livres électronique, dont le prix est souvent plus élevé dans version papier (illogique, mais bon).  Pour trouver des livres en français, consultez ebouquin.fr.

GoofReader

GoofReader

Et les bandes dessinées! Ouf… vous devez télécharger l’application de Marvel pour voir le potentiel du iPad. J’ai bien hâte de relire les Tintin sur mon iPad (la Société Moulinsart devrait y penser!).

Finalement, j’ai trouvé une application pour consulter les livres que j’ai acheté dans le passé et qui sont dans le format PDF: GoofReader. L’application se souvient de la page courante et permet de classer les documents dans des dossiers. Le lecteur supporte aussi d’autres formats comme Word et Excel.  Quoique ce ne soit pas aussi idéal pour la lecture, c’est tout de même hyper pratique, surtout pour des livres de référence.

Journaux

USA Today

USA Today

The New York Times

The New York Times

Le temps est compté pour les versions papier des journaux. De bons exemples de journaux en ce moment sur le iPad: USA Today, New York Times et Wall Street Journal. J’aime mieux ça que de lire les nouvelles sur un site web. Il y a un élément d’interaction que le fureteur web n’offre pas, comme par exemple, selon que le iPad soit à la verticale ou à l’horizontale, le contenu est structurée différemment.

The Guardian offre une application qui fait le tour de l’actualité avec strictement des photos.  Fort intéressant et une belle utilisation du iPad.

Arrow Words

Arrow Words

J’ai bien hâte de lire Cyberpresse sur iPad.  Ça pourrait peut-être faire en sorte qu’on annule notre abonnement papier pour en prendre un électronique, en espérant que nous puissions utiliser le même abonnement sur nos deux iPad.

Et qu’en est-il du mot croisé?  Plus besoin du journal pour son mot croisé quotidien.  Le New York Times a sa version iPad et j’ai déniché un mot fléché en français vraiment bien fait: Arrow Words.  Facile d’utilisation et addictif.  Il va falloir que je me fouette pour réaliser l’idée du jeu de mot qui me trotte en tête.

Revues

Si vous vous procurez un iPad, vous vous devez d’acheter le Time du 12 avril en version iPad. Oui c’est un peu dispendieux (4.99$) mais ça vaut la peine. La beauté d’un magazine, l’interactivité d’Internet, le multitouch, tout ça ensemble procure une expérience hors pair.

Mais ce n’est pas le cas pour tous les magasines. Certains offrent tout simplement un PDF de qualité “so so”, de sorte que quand on zoom dans la page, on voit de la pixelisation. Je pense que l’offre va évoluer et qu’un format de donnée pour magazine va apparaitre avec le temps (quoique ca existe peut-être déjà, je ferai une investigation sur la techno que Time utilise).

Mais

Le iPad n’est pas parfait. Voici une liste de petits irritants:

  • Le contraste automatique n’est pas au point (trop brillant le soir);
  • salissage de l’écran: c’est impressionnant comment ça se beurre rapidement. J’aurai bien aimé que Apple utilise la techno “anti-beurrage” du iPhone 3GS. Mais bon, probablement une prochaine version;
  • la station de chargement vendu séparément n’accepte pas le iPad dans son étui. Très décevant!;
  • la performance de Javascript dans Safari est décevante (fondu saccadé entre photos).  Utilise Jvascript au lieu de Flash va nous demander un peu d’effort pour tenir compte de la performance;
  • pas de tethering possible avec le iPhone… Peut-être qu’une version “jailbreakée” du iPad le permettra un jours, ou peut-être qu’un bidule se branchant sur le iphone et créant un réseau WiFi va arriver sur le marché (voir un diagramme de mon idée);
  • pas de chargement USB sur mon Macbook Pro. Seuls les modèles récents fournissent assez de “jus” pour charger le iPad;
  • pas de calculatrice, quoique “il y a une application pour ça” ;-)
  • complexité pour se brancher à un réseau sans-fil: il faut aller dans Configuration et patati et patata;
  • pas de liste de “to-do” dans Calendar;
  • j’aurais bien aimé un clavier français avec les accents sur le clavier. Pour avoir un accent, il faut laisser son doigt sur la lettre et ensuite choisir. Un peu “gossant”;
  • pas d’indicateur de progression d’un vidéo accédé via un lien direct. Normalement, on devrait voir un indicateur de progression. Là, on pense qu’il ne se passe rien, mais en réalité, il précharge le début du vidéo;
  • les objets Flash sur une page web ne s’affichent pas et rien nous indique par défaut que l’objet n’est pas supporté (pas de petit bloc lego). Pour nous les développeurs web, il faut donc en tenir compte et inclure uncontenu alternatif (ce qu’on devrait toujours faire soit dit en passant);
  • dans Safari, je trouve le “back button” un peu trop loin en haut a gauche. Ça fatigue le bras à la longue.

En vrac

  • En général, les applications démarrent plus rapidement que le iPhone;
  • le iPad est vraiment bien pour une utilisation dans le domaine de l’art: peindre et dessiner est un plaisir. Voir  ma sympatique mouette;
  • on s’habitue à taper avec deux mains sur le clavier tactile. Le iPhone nous avait appris à le faire avec deux doigts, mais là, on peut prendre 6 doigts! Ce billet a été entièrement saisi via le clavier du iPad. Pour le prochain billet, je vais faire l’essai du clavier sans-fil Bluetooth.
  • premier incident il y a 5 minutes: j’ai échappé mon iPad pour la première fois.  Il est tomber sur la céramique et un coin a été grafigné, malgré l’étui (le plastique s’est déchiré).  Mot d’ordre: faire attention car c’est facile de l’échapper.
  • j’ai quasiment envie de n’amener que mon iPad et iPhone lors de mon prochain voyage.  Quoique je risque d’avoir besoin de mon Macbook Pro car ce sera pour une conférence technique et qu’une des sessions nécessite l’usage d’un laptop.  Mais autrement, je laisserais mon laptop à la maison.
  • En soirée cette dernière semaine, je n’ai pas utilisé mon Macbook.  Il est resté dans son sac.  Il était un peu jaloux du iPad.  Rien de mieux pour prendre ses courriels, vérifier Twitter et Facebook depuis le iPad.

Conclusion

Je crois que le iPad va révolutionner un peu notre vie grâce au “multitouch”, au contenu multimédia qu’kil supporte et toutes les applications qui vont arriver.  Il va sans dire que l’intégration du contenu qu’offre Apple est un élément clé dans ce succès.  Par exemple, toutes les applications ont accès à vos photos par exemple, ou votre carnet d’adresse.  C’est ce qui fait que dans toute application,  l’utilisateur se sent “chez lui” et l’utilisation est intuitive.

J’entrevois aussi une panoplie de nouvelles applications qui vont tirer profit du iPad, comme par exemple des applications ludiques pour les enfants, des contes multimédias.  Et pourquoi pas le retour due Little Professor pour pratiquer ses habilités mathématiques!

Finalement, je pense que des gens plus agés vont être plus enclins à utiliser ce dispositif, contrairement au iPhone qui demande tout de même un peu de coordination pour l’utiliser.

Voilà… j’espère que ce billet vous aura éclairer sur votre décision d’acheter ou non le iPad qui sera sous peu disponible au Canada (fin avril selon les rumeurs).

Efficiency with Rails

Sometimes, I can’t believe the amount of work I can accomplish with Ruby on Rails. Today, I finished coding a RSS feed aggregator that generates aggregated RSS feeds for a Joomla web site (it merges posts from multiple feeds into one single daily feed for Joomla).

  • Import/export tab-delimited list of channels
  • Fetch RSS posts and converting the content to UTF-8 encoding (if necessary) (all major RSS formats) in background at regular intervals (daemon)
  • Show a list of all posts published today (taking into account the timezone)
  • Present that list in Atom format
  • Manually add/edit/destroy a channel
  • Show the raw channel content in XML format (to spot conversion errors if any)
  • Store the channels and posts in a database
  • Add a “source” element for each post in the aggregated feed that I generate
  • Modify the Joomla renderer to display the source of the post
  • Provide a way to stop/start the posts importer running in background
  • Set-up CentOS server for hosting the Rails application
  • Deploy to production server using Capistrano
  • Integrate a nice CSS template
  • Include basic http authentication for a single administrator
  • List all the posts in the database, with pagination
  • Provide a nice 2-level navigation menu
  • Store source code into Subversion

It took only 19 hours to do all that.  And it could have been faster if rendering the aggregated feed in Joomla would have been a lot easier (SimplePie does not support the “source” tag in RSS 2, but it does in Atom).

Thanks to the following open source contributions which made me save lots of time:

I’m very happy with the result.  I wonder if the same results could be achieved using another framework, such as .Net or PHP, in the same amount of time.  I think it would take more time, but hey, my opinion is biased.

Long live to Ruby on Rails!

Any comment?

Rails 1.2.x + Ruby 1.8.6 + Snow Leopard: the missing link

Yesterday, I migrated to Snow Leopard.  After a day of file transfers, disk formatting, apps installation, password and license keys recovery, I finally was ready to install the Rails stack.  It’s great to do a clean install, we can get rid of the crap that was installed in the last 2 years.

Today, I spent a few hours on the Rails stack.  And I ran into some problems that I need to share with you because I didn’t find an answer on the net.

Background

I had to install the Rails stack, the framework I use in most (if not all) my projects.  The challenge was that I still have a few Rails projects that run under 1.2.x.  And Rails 1.2.x is not a good friend of Ruby 1.8.7, the version of ruby that ships with Snow Leopard.

Back on Tiger, I was using the amazing Locomotive application, which was a way to have dedicated environments for rails applications.  Then, when I moved to Leopard, Locomotive was not supported and I had to deal with all the apps sharing the same gems, same ruby and same everything.  Fortunately, ruby 1.8.6 was handling my Rails 1.2.x projects properly. I was also unsing Capistrano 1.4.2 along side 2.5.2 to deploy those old projects (i.e. cap _1.4.2_ deploy_with_migrations).

Now on Snow Leopard, I wanted to keep this flexibility.  I looked at different ways to set-up Rails on my Macbook Pro (Core 2 Duo).  The one on the Rails wiki was interesting, and I was used to this set-up, but I wanted to do a bit more.  I remembered that a new package manager was borned this year: homebrew.  I heard some good things about it.  And my last wish was to have multiple versions of Ruby on my system. This guide was a really good “instructor” on using RVM, the Ruby Version Manager.  Using RVM, you can have ruby 1.8.6, 1.8.7, 1.9.1 and even jruby and ree (Ruby Enterprise Edition).  This is cool, I will finally have a chance to start testing with 1.9.1 and eventually start new projects with it.

So I installed all that using my own recipee (which follows next), and everything was working fine with Ruby 1.8.7 and Rails 2.3.5.  When I started to use Ruby 1.8.6, my rails apps were hanging so bad, I was forced to “kill -9″ the processes (CTRL-C was not working).  Anytime the Rails environment was loading, the process would hang.

After a few hours of investigation, I found out that the problem was with RMagick.  And the problem was due to the use of NSLinkModule functions in dln.c (ruby 1.8.6 source code). Thanks to RVM, we have access to the source code of ruby. After applying a patch to ruby 1.8.6, as described in the bug report, everything started to work.

So here we go, follow me through the installation of the Rails stack on Snow Leopard.

Note 1: I did a clean install of Snow Leopard.  Not sure that my recipe will work on a Snow Leopard migration.  It might, but you will have to reinstall some 32-bit gems that compile some binary stuff.

Note 2: I’m using Textmate.  If you are using Aptana, you might want to check on the web, I think I’ve seen some blogs describing some issues with RVM and Aptana.  According to this post, starting Aptana from the command line makes it use the RVM interpreter.

Note 3: Phusion Passenger is awesome.  But in the past, I tried using it on my development machine and I didn’t like it so much.  I still prefer starting the server myself and see the output in my terminal window.  RMV supports Passenger, but I didn’t play with it.

Prerequisites

  • If you are still on Leopard, prior to migrate to Snow Leopard, find an empty drive and use SuperDuper to clone your hard drive.  This is an excellent backup solution (you can boot from the backup drive).
  • Format your drive and installer Snow Leopard.
  • Get the latest version of XCode on the Apple Developer Site and install it.

Homebrew

We could use MacPorts, but Homebrew takes less space (it uses what we already have on Mac OS X) and it does not require being root.  And Ryan Bates recommends it.

As mentioned on Homebrew’s wiki, you can install it anywhere, but lots of 3rd party solutions expect to have things in /usr/local. And Homebrew’s files are well isolated and the uninstall is well documented.  So there is no danger installing it under /usr/local.

So let’s change the owner of the /usr/local folder (otherwise, we always have to switch to super user).  I know, this is not standard practice, but hey, we’re on a mac and most likely you will be the only one using stuff in /usr/local.

sudo chown -R `whoami` /usr/local

Then, let’s install Homebrew (just one line, isn’t that great?).

curl -L http://github.com/mxcl/homebrew/tarball/master | tar xz --strip 1 -C /usr/local

Basic packages

Now let’s install some basic packages that we all love and cherish.

brew install readline
brew install git
brew install wget
brew install imagemagick

You have to agree that this is cool.  No sources to download and untar, no configure to run, … Homebrew takes care of doing all that.  Of course, we don’t have as much control, but this is fine with me so far.

MySQL

I’m still using MySQL (although Postgresql is on my R&D to-do list for 2010).  It’s installation is well documented.  You can download a disk image from the MySQL web site or compile the source code, or simply use Homebrew:

brew install mysql
mysql_install_db
sudo chown `whoami` /var/mysql

I also like to apply some changes to the default configuration. Here’s my /etc/my.cnf file:

[mysqld]
#Max packetlength to send/receive from to server.
max_allowed_packet=64M
socket = /var/mysql/mysql.sock
character-set-server = utf8
default-character-set = utf8

#This option makes InnoDB to store each created table into its own .ibd file.
innodb_file_per_table

[mysql]
default-character-set = utf8

[client]
socket = /var/mysql/mysql.sock
default-character-set = utf8

Then, let’s start the server and also install the launcher.

cd /usr/local/Cellar/mysql/5.1.41; /usr/local/Cellar/mysql/5.1.41/bin/mysqld_safe &
launchctl load -w /usr/local/Cellar/mysql/5.1.41/com.mysql.mysqld.plist

Ruby Version Manager (RVM)

Now that we have the foundation installed, let’s implement the Ruby Version Manager.  RVM keeps multiple ruby environments isolated from each other.  Each one has its own ruby version (compiled from source) and its own gems (which is awesome).

So instead of using the Snow Leopard out-of-the-box Ruby , let’s set-up an environment for 1.8.7.

But first, let’s install RVM (replace USER with your username):

gem install rvm
echo "if [[ -s /Users/USER/.rvm/scripts/rvm ]] ; then source /Users/USER/.rvm/scripts/rvm ; fi" >> ~/.bash_login
rvm install 1.8.7
rvm use 1.8.7

This will install everything in the .rvm folder in your home. If you change your mind later, it’s easy to uninstall: rvm implode.

You can confirm the installation by running rvm list.

Gems

RVM will install a version of Rubygems for each environment, with the proper gem sources (yes, gemcutter is already in the list). We have to install all the gems we need for each environment. Let’s install the common ones:

gem install ruby-debug
gem install capistrano
gem install rmagick
gem install sqlite3-ruby
gem install mongrel
export ARCHFLAGS="-arch i386 -arch x86_64"
gem install mysql -- --with-mysql-dir=/usr/local --with-mysql-config=/usr/local/bin/mysql_config
gem install rails
gem install manalang-bdoc

Now, to really see the power of isolated environments, launch bdoc from the command line.  See? Only the gems that we just installed.

Then, you can install additional gems, or go into one of your Rails 2.x project and issue rake gems:install.

Ruby 1.8.6

Now that we have ruby 1.8.7 working, let’s install version 1.8.6 so that we can do maintenance in our old Rails projects running under 1.2.1. And let’s make 1.8.7 the default interpreter when we open a new bash session.

rvm install 1.8.6
rvm 1.8.7 --default
rvm use 1.8.6

Now, we have to install a backport from ruby 1.8.7 (patch) so that we can use RMagick under ruby 1.8.6 on Snow Leopard. I suspect that it also fixes some other weird bugs.

rvm use 1.8.6
cd ~/.rvm/src/ruby-1.8.6-p383
wget http://redmine.ruby-lang.org/attachments/download/580 -O dln.patch
patch dln.c dln.patch
make
make install

Finally, let’s install the gems that we need.

gem install ruby-debug
gem install capistrano -v 1.4.2
gem install rmagick
gem install mongrel
export ARCHFLAGS="-arch i386 -arch x86_64"
gem install mysql -- --with-mysql-dir=/usr/local --with-mysql-config=/usr/local/bin/mysql_config
gem install rails -v 1.2.1
gem install manalang-bdoc

And that’s it. We now have 2 isolated interpreters and their gems. We are now in business for eventually migrating some projects to ruby 1.9.

Candies

There is a way with RVM to automatically switch interpreter when you cd to a project’s folder.  Simply provide a .rvmrc file in the project’s folder:

echo "rvm 1.8.6%projecta" > ~/projects/projecta/.rvmrc

Also handy is to have the current interpreter displayed in the command line prompt. Simply edit your ~/.bash_login file and add the following line:

export PS1="\$(~/.rvm/bin/rvm-prompt) $PS1"

Have fun, and continue to enjoy Ruby on Rails.

300M US$ par jours sur Twitter!

Pour la première fois depuis mon arrivée sur Twitter, j’ai décidé de ne plus suivre un collègue.  Quand le gars envoie 88 tweets plus ou moins pertinents à mes yeux, et ce dans une journée, je considère ça comme du spam et ca m’agresse.  Donc allez hop, good bye!

Mais y a-t-il un nombre de tweets par jours “politically correct”?  J’ai fait ma petite recherche et j’ai trouvé ceci (source):

  • Entre 10 et 20 par jours – et avec de l’information pertinente – vous êtes un bon twitterien.
  • Entre 50 et 75, soyez avisé que si vous tweeter des niaiseries, ceux qui vous suivent vont se tanner assez vite merci.
  • Plus de 75?  Comme 88 par exemple? aucune mention dans l’article! ;-)

Autres statistiques fort intéressantes, comme par exemple le nombre moyens de followers.

On peut maintenant se poser la question: mais où donc les twitteriens trouvent-ils le temps à consacrer à Twitter?  En d’autres mots, combien de temps passent-ils sur Twitter par jours?  Attachez votre tuque:  en moyenne 2.75 heures par jours (selon cette étude)!

Sortons notre calculatrice… ;-)

En date d’octobre 2009, il y avait 18 millions de twiterriens (source).  Posons les hypothèses suivantes:

  • salaire annuel moyen de 44000 $US (selon wikipedia)
  • supposons une semaine de 35 heures de travail, donc 7 heures par jours
  • ainsi, le salaire horaire est de 24.18$
  • sur les 2.75 heures, supposons que seulement 1 heure est utilisée durant les heures de travail
  • enlevons la tranche 15-19 ans (31% des utilisateurs) qui sont en majorité étudiants

Qu’obtient-on? Les entreprises “investissent” 300 millions $US par jours en temps d’employés sur Twitter!  Espérons que les retombées sont là!

Et on ne compte pas la possible perte de concentration tout au long de la journée, pour ceux qui “checkent” constamment Twitter.

Mais il faut aussi avouer que de temps en temps,  on trouve sur Twitter de l’information qui peut bénéficier à notre entreprise/employeur.  Ce n’est donc pas du temps perdu à 100%.

Mais tout de même, comme dirait André Ducharme de RBOs dans un de leur sketches:  “Pensez-y”!

MAJ

Voici quelques suggestions sur l’utilisation de Twitter, pour ceux qui ne veulent pas “sombrer dans l’enfer de la drogue” de Twitter. ;-)

Conférence de Michelle Blanc: les médias sociaux… et puis après?

Je suis de retour de la conférence de Michelle Blanc (powerpoint) sur les médias sociaux, domaine qu’elle maîtrise à perfection, conférence qui fût organisée par La Toiles des Communicateurs. Ce fût un très bon condensé de tout ce qu’on peut retrouver sur le blogue de Mme Blanc, blogue que vous vous devez consulter si vous ne l’avez pas encore déjà fait.

Pour les impatients, voici en raffale une liste des petites notes que j’ai pris durant la conférence et des liens vers quelques billets de Mme Blanc.

  • Le contenu web est important.  Plus tu as d’information, plus tu es “quelqu’un”.  Ainsi, les archives d’un blogue sont précieuses.  Et plus un blogue a de contenu, plus Google le considère comme un site important.
  • La voix des internautes compte beaucoup ces temps-ci et c’est la grande peur des entreprises.
  • L’honnêté est payante.  Elle a cité l’exemple de Cisco qui a engagé ses clients par le web pour régler les problèmes de ses produits.  (billet).
  • Jadis, le pouvoir était dans la main des manufacturier (via la publicité, le placement de produits en magasin, …).  Maintenant, le pouvoir est entre les mains du consommateur.
  • L’industrie du sexe innove beaucoup dans le monde du web.  Allons voir ce qu’ils font, ca peut nous indiquer vers où en s’en va. (billet)
  • Les entreprises investissent de moins en moins dans la publicité traditionnelle et de plus en plus sur internet.  Voir le graphique dans sa présentation. (billet)
  • Il ne faut pas juste avoir un site web ou un blogue.  Il faut que des sites d’autorité pointent vers nous.  Le réflexe du consommateur n’est pas toujours de faire une recherche Google.  Il va souvent commencer par les sites d’autorité comme Protégez-vous, PCMag, MacWorld, un ordre professionnel, … (billet)
  • Les réseaux sociaux sont découpés géographiquement, socialement et fonctionnellement.  Il faut donc avoir une présence sur plusieurs d’entres eux selon nos objectifs d’affaire.  Voici une carte que j’ai déniché qui donne un portrait global.
  • Twitter: même pas 2% des québécois sont sur Twitter, mais par contre, ce sont les gens les plus influents qui y sont.  Il ne faut donc pas négliger notre présence sur Twitter.  Et Facebook est “over hypé”. (billet)
  • Twitter: les messages qu’on peut considérer comme “insipides” peuvent éventuellement servir à solidifier une éventuelle relation d’affaire.
  • La gestion de la présence d’une organisation sur internet devrait être vue comme une entité à part entière dans l’entreprise, et non pas comme une fonction du service de marketing, des relations publiques ou autre.
  • Le roi des médias sociaux reste et restera encore pour longtemps le blogue.  Le blogue permet la notoriété, Twitter et Facebook la portée.
  • Mettre en place un blogue peut coûter entre 3 et 5K, et si on veut un “design fucké”, rajouter entre 5 et 10K.
  • Vos photos sur votre blogue ou Flickr: donnez-leur un nom.  Il n’y a pas grand monde qui cherche pour 123.jpg!
  • Le blogue devrait être un sous-domaine de votre site web.  Ca aide le référencement. (billet)
  • Et ne faites pas un blogue bilingue.  Faites-en deux: un en français, l’autre en anglais.  (aille, je fais dur sur ce point!)
  • Un blogue, ca peut aussi servir à l’interne d’une entreprise, comme par exemple un blogue pour le groupe social.
  • Et un Wiki, ca permet d’organiser de la documentation et de la maintenir à jours.  Encore une fois, ca devrait être un sous-domaine.
  • Lululemon: voici un bon example de l’utilisation des médias sociaux. (billet)
  • Avoir une mentalité de transparence dans notre contenu. (billet)
  • Et soyez généreux.  Ca ne vous enlèvera pas de travail, au contraire à la longue ca vous amènera des affaires. (billet)
  • Quel est le secret pour générer du bon contenu?  Ayez une passion et n’ayez pas peur de la polémique. (billet)

Guignolée du web

Voilà pour mon petit résumé.  Vous trouverez tous les détails du monde facinant des réseaux sociaux en consultant de site de Michelle Blanc, que je tiens à remercier pour avoir “donner” cette conférence.

Vous pouvez visionner la conférence dans son intégralité, une gracieuseté de TÉLUQ et La Toile des Communicateurs.

MAJ

Compte-rendu de Denis Gilbert, organisateur de l’événement.