août 23, 2008 - Posted by Damien - 4 Comments
J’en ai pas pris pendant tout l’été. Alors j’en prends maintenant qu’il fait encore moins beau !
Je pars donc en vacances de dimanche au dimanche suivant dans un coin paumé de Saone-et-Loire.
Bonnes vacances à ceux qui en ont et bon courage aux autres. Et à la semaine prochaine.

août 21, 2008 - Posted by Damien - 7 Comments
Twitter, Facebook, LinkedIn, Pownce, Jaiku, Myspace, …
Chacun de ces réseaux sociaux (et de tous les autres) pris séparément peut avoir une utilité sympathique.
Mais pris tous ensemble, cela donne Ping.fm.
Et la franchement, ça devient n’importe quoi.
Le “web 2.0″ se veut plus humain et communautaire non ?
Le but n’est pas de permettre chacun des internautes de spammer à volonté et de se faire spammer encore plus.
Ou alors j’ai zappé un chapitre.
Autant je trouve une utilité à Facebook qui permet de rester en contact avec des vieux amis.
Pareil pour Twitter que j’utilise beaucoup pour discuter avec d’autres geeks que je ne connaissait pas forcément quand on a commencé à tweeter ensemble et qui sont des bons contacts aujourd’hui.
Autant quand je vois ce genre de services dont le seul but est, il faut bien l’avouer, de spammer tous ses contacts avec des liens “cliquez sur mon dernier billet à deux balles sur le digg-like à la mode”, j’ai envie de débrancher mon cable Ethernet, d’éteindre mon pc et de m’exiler sur une ile.
Note : oui, ce billet a plein de liens spammant. Mais c’est normal, je prends ma revanche sur tous ceux qui font pire et ce à longueur de journée.

août 19, 2008 - Posted by Damien - 3 Comments
Tout projet impliquant plusieurs personnes et particulièrement lorsque ces personnes sont bénévoles nécessite de motiver ces personnes afin de les garder dans ce projet et de leur donner toujours envie de donner de leur temps
Motiver des bénévoles n’est pas toujours chose évidente. Il faut trouver le moyen de leur donner envie de rester et de donner du temps … sans pour autant les rémunérer.
Mais que peut-on leur donner en échange ?
La réponse est pourtant plutôt simple (sur le papier du moins) : communiquez, communiquez, recommuniquez et récompensez.
La communication
Le défaut énorme de dmoz vu de l’extérieur est son manque de communication. Les webmasters se plaignent de ne pas savoir si leur site est encore en attente ou non; si il est listable ou non; pourquoi des éditeurs visitent leur site mais celui-ci ne se retrouve pas listé etc.
Et pourtant nous communiquons dès que nous le pouvons, que ce soit via le forum public ou via le blog des éditeurs francophones.
Cette communication est cependant contrôlée. Nous choisissons ce que nous disons afin d’éviter de dévoiler certaines de nos méthodes de fonctionnement aux spammeurs.
Mais les utilisateurs d’un projet communautaire ne sont pas ceux qu’il faut motiver.
C’est les participants à ce projet qu’il faut motiver.
Et pour motiver les éditeurs, nous communiquons beaucoup plus !
Par les forums internes évidemment.
Mais également en assignant à chaque nouvel éditeur un “coach”. Plusieurs éditeurs séniors ont accepté de s’occuper de gérer les nouveaux en vérifiant régulièrement les catégories qu’ils éditent et en leur envoyant des emails en cas d’erreurs afin que celles-ci soient corrigées.
Nous communiquons evidemment également en transmettant régulièrement (tous les deux-trois mois environ) un email à chacun des éditeurs francophones en leur signalant les dernières actualités de la branche.
Une newsletter publique est également publiée une à deux fois par an. Vous pouvez voir celle de mars dernier.
Par ailleurs nous tentons le plus régulièrement possible d’organiser des rencontres entre éditeurs dans les grandes villes.
Chez les francophones, Paris et Lyon sont les plus actives au niveau des rencontres d’éditeurs. Mais les Belges et les Suisses ne s’en sortent pas trop mal non plus
En communiquant avec les membres de la communauté, nous tentons ainsi au maximum de ne pas se contenter d’être en relation avec eux “seulement” pour l’édition. Mais nous lions de vrais contacts avec eux.
De vraies amitiés se sont ainsi crées, pas seulement par mail mais également “en vrai” (biz à stegozor).
Les récompenses
Tout travail mérite salaire dit-on.
Cependant dans un projet ou tous les membres sont bénévoles, il est difficile voir impossible de payer ceux-ci en billets verts (ou bleus).
Il faut donc trouver des solutions alternatives pour permettre aux membres d’un projet de trouver leur satisfaction dans celui-ci.
C’est entre autre pour cela qu’existent les “mozzie awards”, qui sont un vote réalisé environ une fois par an et dans lequel les éditeurs votent pour l’éditeur auquel ils souhaitent attribuer un awards.
Une cinquantaine d’awards sont distribués au final.


Pour finir, le maitre mot à retenir pour motiver et conserver les bénévoles d’un projet, c’est donc bien : la communication.

août 13, 2008 - Posted by Damien - 0 Comments
Qui a dit que je faisait encore un billet avec un titre trop “complexe” ?
Il peut arriver que vous ayez besoin, dans un même formulaire, d’ajouter plusieurs uplets en même temps.
L’exemple le plus flagrant est dans le cas d’option.

Dans le screenshot ci-dessus par exemple, le lien “ajouter une option” exécute une fonction javascript qui ajoute trois champs permettant de remplir une option supplémentaire.
De même le bouton supprimer enlève l’option juste au dessus.
Ignorons le manque de design.
Afin d’avoir quelque chose de propre, nous pouvons utiliser l’attribut index. Ainsi, pour un champ de texte de base, nous pouvons allons avoir :
<%= f.text_field :modele, :champ, :index => identifiant %>
Ou identifiant est un nombre unique qui caractérise l’entrée.
En ajoutant cela à tous vos champs, ceux-ci ressembleront à cela :
<input id="modele_1_champ" name="modele[1][champ]” size=”30″ type=”text” />
Dans votre contrôleur, vous n’aurez alors plus qu’à faire quelque chose comme :
params[:modele].each do |modele|
@modele = Modele.new(modele)
@modele.save()
end
C’est cool, ça fonctionne 
Cependant c’est tout pas beau car on répète inutilement un identifiant à chaque fois.
Et c’est la que fields_for fait son apparition.
Remplaçons le code précédent :
<% fields_for :modele, variable, :index => identifiant do |f| %>
<%= f.text_field :name %>
<% end %>
Ou variable est une variable qui contiendra la à attribuer à chacun de nos champs, obtenue par :
variable = Modele.find(:all)
Nous définissons une boucle permettant de déclarer de multiples champs avec un index et ce sans répéter celui-ci
Note : un bug qui a été corrigé en juin 2008 apporte un bug avec les listes de sélection, ne leur déclarant pas d’identifiant.
Pour le corriger, il faut remplacer le fichier (sous Windows) <emplacement vers Aptana>/org.jruby_1.1.0.5965_RC2p2/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view\helpers par celui-ci.

août 8, 2008 - Posted by Damien - 0 Comments
Derrière ce titre très (trop) long se cache un bug sur lequel je me suis cogné la tête pendant trois bonnes semaines (pas en permanence evidemment. Je pouvais me permettre de passer à autre chose dans le même projet).
J’utilise le plugin exifr dans une application Rails. J’avais cette erreur :
NameError (uninitialized constant EXIFR::JPEG):
Avec, évidemment, aucune information dans le log d’erreur d’ou pouvait provenir le fait qu’il n’arrive pas à charger la méthode JPEG de la classe EXIFR.
Alors que, qui plus est, la classe EXIFR est chargée …
Au final, j’ai compris en farfouillant un certain temps (c’est le genre de farfouillage qui est long parce qu’il faut redémarrer le serveur local toutes les 3 minutes).
Pour au final réaliser que j’ai une autre classe JPEG, qui entre en conflit.
En effet, pour Rails, JPEG, c’est ma classe. Il essaye donc de récupérer je ne sais quelle information de celle-ci. Information qui n’existe pas evidemment, d’ou mon erreur.
Erreur résolue en renommant la dernière classe citée en JPG. Mais beaucoup de temps perdu pour au final pas grand chose.
Alors que si j’avais été en PHP, j’aurais eu des $ devant mes variables, des () pour chacune de mes méthodes.
Et il aurait été sans aucun problème capable de savoir que en mettant EXIFR::JPEG, je cherche à appeller la méthode JPEG de la classe EXIFR. Et pas à faire un mixe entre mes classes EXIFR et JPEG.

P.S. : à l’url de cette page “php-rox”, il faut ajouter un “(ou pas)” quand même.
août 7, 2008 - Posted by Damien - 1 Comment
La librairie ImageScience permet de créer des miniatures d’images très simplement.
Exemple :
ImageScience.with_image(@image) do |img|
img.thumbnail(100) do |thumb|
thumb.save @thumb_image
end
Ok, jusque la, c’est super simple. On génère notre miniature 
C’est avant que c’est un tantinet plus compliqué (ou pas), lorsque l’on désire installer ImageScience.
Ici, on ne prends pour exemple que le cas d’une plateforme Debian.
En considérant que Ruby, Rails et gem sont déjà installés. Si ce n’est pas le cas, je vous invite à regarder ici.
Installons donc ImageScience.
gem install image_science
Cool et simple non ?
Cependant si vous installez cela comme ça, vous n’irez pas très loin.
Vous allez en effet vous confronter à une erreur similaire à celle-ci :
CompilationError (error executing “gcc -shared -fPIC -Wall -g -fno-
strict-aliasing -O2 -fPIC -I /usr/lib/ruby/1.8/i486-linux -I /usr/
include -L/usr/lib -o \”/nonexistent/.ruby_inline/
Inline_ImageScience_aa58.so\” \”/nonexistent/.ruby_inline/
Inline_ImageScience_aa58.c\” -lfreeimage -lstdc++ “: 256
Renamed /nonexistent/.ruby_inline/Inline_ImageScience_aa58.c to /
nonexistent/.ruby_inline/Inline_ImageScience_aa58.c.bad):
/usr/lib/ruby/gems/1.8/gems/RubyInline-3.7.0/lib/inline.rb:449:in
`build’
/usr/lib/ruby/gems/1.8/gems/RubyInline-3.7.0/lib/inline.rb:654:in
`inline’
/usr/lib/ruby/gems/1.8/gems/image_science-1.1.3/lib/
image_science.rb:84
En effet, ImageScience requiert l’installation de FreeImage, une librairie en C qui permet la manipulation d’images.
Son installation (sous Debian) est également très simple (le problème pour moi a surtout été de trouver que le problème venait de FreeImage
).
wget http://kent.dl.sourceforge.net/sourceforge/freeimage/FreeImage3100.zip
unzip FreeImage3100.zip
cd FreeImage
make
make install
Zou ! ImageScience et FreeImage sont installés, tout doit fonctionner correctement. Vous générez vos miniature.
Il peut arriver cependant que vous ayez une erreur du genre de celle-ci :
Errno::EACCES (Permission denied - /nonexistent):
En effet, afin d’utiliser FreeImage, ImageScience crée des documents C qu’il compile en live. Pour cela il doit avoir accès à un répertoire, qui est défini ainsi :
env = ENV['INLINEDIR'] || ENV['HOME']
INLINEDIR doit être configuré dans le fichier environnment.rb (répertoire config).
J’ai par exemple mis
ENV['INLINEDIR'] = File.join(File.dirname(__FILE__),’../tmp’)
Ainsi mon inlinedir est situé dans le répertoire tmp de mon application.
Il faut ensuite donner les droits à ce répertoire à l’utilisateur avec lequel l’application est lancée.
Si vous êtes dans un environnement Apache/Passenger, vous pouvez personnaliser cet utilisateur en ajoutant, dans votre configuration de apache :
PassengerDefaultUser www-data
Ou www-data est l’utilisateur evidemment.

août 6, 2008 - Posted by Damien - 1 Comment
O2Sources, l’agence web qui rox propose aujourd’hui (merci à Thanh) un nouveau thème gratuit pour Wordpress.
Nommé Pink Chinese, le bébé est en fait né il y a quelques mois, quasiment en même temps que Cyclo. Mais il n’est baptisé que aujourd’hui.
Plus léger que Cyclo, j’aime beaucoup ce nouveau thème
Pendant ce temps la, j’ai vraiment hâte d’être riche !

août 4, 2008 - Posted by Damien - 2 Comments
Vous vous souvenez de Witamine, l’émission de webradion pour webmasters ?
Pendant plus d’un an, Audrey et tous les chroniqueurs vous ont fait profiter d’une émission d’une heure chaque semaine.
Cependant il y a eu quelques soucis. La webradio (Zikosport) qui offrait une heure d’antenne par semaine pour l’émission s’est arrêtée.
Audrey, l’animatrice de l’émission, n’a actuellement plus le temps pour diverses raisons personnelles et professionnelles.
Alors je me suis dit “ça serait bête d’arrêter quelque chose qui marchait aussi bien. Et si on recommencait à plusieurs ?”
De la, j’ai contacté Audrey afin de lui proposer de constituer non pas une émission mais une webradio (en utilisant la technologie proposée par Radionomy) et qui serait non pas animée par une seule personne mais par une communauté de volontaires.
Ainsi si l’un des membres n’a, pour une raison ou une autre, plus le temps, le projet peut continuer à fonctionner de la même manière. C’est pérenne sur le temps; ça prends moins de temps à chacun et c’est cool !
Alors pour l’instant on a pas encore commencé et j’en suis juste à essayer de rassembler du monde qui serait motivé. Mais si vous vous sentez intéressés pour participer, que ce soit en faisant des podcasts, de la com’ ou tout autre chose qui vous passerait par la tête et qui pourrait être utile, je vous invite à vous inscrire et à venir en parler sur le forum créé pour l’occasion.

août 1, 2008 - Posted by Damien - 8 Comments
De multiples hébergeurs (notemment OVH en dédié) proposent à leurs utilisateurs de configurer plusieurs adresses ip sur leur machine.
Cela peut permettre par exemple de configurer, sur la machine et sur le port 80, deux serveurs web.
Un Apache et un Lighttpd.
Le second transmettant les fichiers statiques beaucoup plus rapidement et en consommant moins de ressources machines, c’est une bonne méthode d’optimisation de vos ressources système.
Aucun problème pour les connexions entrantes donc.
J’ai cependant eu envie de me confronter à autre chose. Les connexions sortantes en PHP avec Curl.
Comment sélectionner laquelle de mes deux ips je veux que mon script utilise pour faire appel à une page externe ?
Ne sachant pas trop ou chercher, je me suis dit au début “il doit y avoir une fonction native, ou un truc dans la configuration”. Queue d’ale.
Cependant après quelques recherches, j’ai trouvé la solution, qui était sous mon nez !
Pour ceux qui ne savent pas comment fonctionne curl, celui-ci possède une fonction curl_setopt qui permet de paramétrer votre appel distant.
Ainsi vous pouvez ajouter des paramètres en POST, modifier le referer, ajouter des cookies, ajouter une identification http ou ssl etc. Les possibilitées sont illimitées.
Et c’est la que l’une des options fait son apparition. CURLOPT_INTERFACE, qui prends comme paramètre … une IP ou un nom d’hôte.
Et le script utilisera l’ip définie.
Ainsi je change mon ip en faisant :
curl_setopt($ch, CURLOPT_INTERFACE, $myIp);
Notez cependant que vous ne pouvez bien evidemment pas utiliser n’importe quelle ip. Seules celles configurées sur votre carte réseau le sont. Cela serait trop facile.
Vous pouvez cependant tester cela même si vous n’avez qu’une seule ip sur votre machine. Faites appel à une page locale et utilisez votre ip distante ainsi que 127.0.0.1
Je n’ai donc ensuite eu plus qu’a récupérer aléatoirement l’une ou l’autre de mes ip et mes appels externes se font à 50% sur une de mes ip et à 50% sur l’autre.
Je viens de diviser par deux les chances que l’ip de mon serveur ne se fasse bannir par Google avec les appels faits par RefStats.

juillet 31, 2008 - Posted by Damien - 3 Comments
Certains le savent déjà, j’ai acheté il y a un mois de cela un nouvel objectif, le Tokina 11-16mm.

Ce test ne se veut absolument pas technique. Pour cela, je vous invite à lire le test fait par Jean-Marie Sépulchre pour le monde de la photo.
Il s’agit ici d’un test plus “pratique”. Ce que j’ai fait avec, ce qu’il permet de faire, ce pour quoi il est génial et les moments ou il n’est pas à utiliser.
Ce billet sera agrémenté de multiples photos, toutes prises avec le Tokina.

Tout d’abord, 11-16, ultra grand angle. En gros, n’espérez pas faire de gros plan avec. Même si vous prenez une photo à 30 centimètres de quelqu’un, vous verrez sa tête en entier ainsi qu’une partie de son corps.
Il faut également fortement se méfier. En effet, avant d’acheter l’objectif, je me disais “ça va être super pour les paysages”.
Cependant ces paysages se retrouvent rapidement très chargés car trop d’éléments se retrouvent sur la photo.
L’oeil et le cerveau n’arrivent alors plus à s’y retrouver et la photo n’est que peu intéressante.

Quelles sont les photos intéressantes à prendre avec alors me direz-vous ? Eh ben j’ai envie de te dire “toutes les autres” 
Prendre une rue pleine de passant(e)s; un objet seul, ou encore un portrait.


L’objectif ouvre à 2.8 (c’était un argument majeur. Je commence à réflechir à l’achat d’un 70-200mm et je pense me tourner vers le Canon pour son ouverture à 2.8 (mais l’achat ne se fera probablement pas avant janvier prochain)).
Et cette grande ouverture est un élément indispensable.
Ainsi la photo suivante a été prise à 11mm avec une ouverture à 2.8 … de nuit et sans aucune lumière autour (ou presque). Et sans flash, cela va de soi.

Evidemment elle a subi un coup de photoshop afin de l’éclaircir. Mais pour exemple, en voici une autre prise au même endroit à 16mm, 2.8 également et sans retouche au niveau de l’éclairage.

Finissons-en des banalités avec l’ouverture et le zoom et passons aux choses amusantes.
Vu l’ouverture qu’il a, les photos qui sont les plus intéressantes à prendre sont celles faites de dessus ou de dessous.

Note : cette photo a également été prise vu de l’autre côté

En effet avec le grand angle mais sans déformation (ou presque), l’effet est différent de celui obtenu avec un FishEye. Mais se retrouve tout de même franchement intéressant.
Je n’ai pas de photos de dessous, j’ai toujours préféré être au dessus 
Mais l’effet est similaire.
Pour finir, cet objectif a une qualité de fabrication assez exceptionnelle (normal remarque, c’est un tokina).
Il faut juste ne pas se laisser impressionner par les petites “tâches” noires dessus qui sont normales et qui ne sont pas des gouttes d’eau.
