Si vous développez vos applications de manière un chouilla propre, vous devez avoir des environnements de développement et de production bien séparés.
Par exemple, l’API RefStats est disponible en production. Mais vous pouvez également visualiser l’interface qui me sers de test en développement.

Pour diverses raisons pratiques, je ne désire pas mettre d’identification sur cette version de développement.
Il n’y a de toute façon pas énormément de risques. La base de données y est remise à zéro particulièrement régulièrement et il est impossible de s’inscrire vu que c’est par le forum que cela se passe.
Par contre étant donné que les pages sont publiques, je ne tiens pas spécialement à ce que les moteurs de recherche ne les indexent.

Pour cela, je désire insérer un robots.txt. Mais uniquement en développement.
Inutile de s’embêter à faire un contrôleur, une action, une vue etc. Je vais utiliser une super fonctionnalité de Rails 2.3 : un metal.

Générons le en ligne de commande dans notre projet :

script/generate metal robots

Ceci nous crée un répertoire app/metal et un fichier robots.rb dedans.
Nous désirons que notre metal surveille l’url « /robots.txt » et que, si on est en développement, il nous retourne son contenu.

Et puisque c’est particulièrement simple, je vous le donne directement :)

require(File.dirname(__FILE__) + "/../../config/environment") unless defined?(Rails)

class Robots
    def self.call(env)
        if env["PATH_INFO"] == '/robots.txt'
            [200, {"Content-Type" => "text"}, [ENV['RAILS_ENV'] == 'production' ? '' : "User-agent: *\r\nDisallow: /"]]
        else
            [404, {"Content-Type" => "text"}, [""]]
        end
    end
end

Ainsi dev.api.refstats.net/robots.txt interdit l’indexation.
Tandis que en production, l’indexation est autorisée puisque le robots.txt sera vide (à l’heure ou j’écris ces lignes, l’application n’est pas encore déployée car j’ai pas mal de commit en suspens. Notamment tout ce qui est de la gestion des comptes pro. Donc vous pouvez pas le voir).

Plutôt simple et efficace non ? :)

You probably don’t :)
RefStats was my end of studies project. However I’ve decided to keep maintaining it even after losing my student status.

It offers you statistics about your ranking on search engines (Google in many languages and Yahoo!).
And it’s available in English since the last friday :)

The big difference between RefStats and any other ranking statistics is that we provide you a full and free API to manipulate your account and get the statistics.
So you can fully integrate the tool to your extranet or any application without getting worried with the crawling the result pages yourself :)

Feel free to subscribe and try it. And please drop a message either in comment or in the forum if you have any comment.

Si vous avez déjà essayé d’envoyer un email avec rails, vous avez constaté que c’est articulièrement aisé.
Mais ruby ce n’est pas que du rails !
Dans le cas du redéveloppement de Refstats par exemple, j’ai recodé le crawler de celui-ci, qui va récupérer de manière journalière les positions de chacun de vos sites.
Et je désire être rapidement être mis au courant si j’ai une erreur qui est apparue afin de pouvoir la corriger tout aussi vite.

Du coup si je soulève une exception, je veux m’envoyer un email.
Bien évidemment, je n’ai qu’une application console.
Pas de rails derrière, bien que j’utilise Active Record.

Du coup pas d’action mailer. Et pas de fonction « mail » comme en PHP.

Il est cependant assez aisé d’envoyer un email :
require 'net/smtp'
def send_email(from, to, subject, message)
  msg = "Subject: " + subject + "\r\n\r\n" + message
  Net::SMTP.start('localhost') do |smtp|
    smtp.send_message msg, from, to
  end
end

Nous déclarons une méthode send_email, qui prends les paramètres :
email de l’envoyeur; email du destinataire; sujet de l’email et son message.

Nous créons l’entête du message avec son sujet.
Puis nou instancions un Net::SMTP avec l’adresse du serveur SMTP (et en second paramètre son port si autre que 25).
Et on envoie notre message !
Pour plus de détails, notamment l’identification, je vous invite à vous référer à la documentation de Net::SMTP.

Je peux enfin mettre en ligne le projet personnel sur lequel j’ai le plus travaillé cet été !
En effet, depuis ce soir, Refstats jouit d’une nouvelle version.

Cette nouvelle version n’apporte pas de nouvelles fonctionnalités. Il s’agit surtout d’une refonte du graphisme et d’une refonte totale de l’ergonomie de l’application, qui, il faut bien le dire, était totalement inexistante dans la précédente version.

J’en ai profité pour également intégrer un forum de discussions permettant à tous les membres de proposer des améliorations ou de signaler des bugs.

Alors venez donc tester !

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.

Cela faisait très longtemps que je n’avais pas parlé de référencement (et pour cause, je n’ai pas grand chose à y dire).
Matt Cutts annoncait il y a quelques jours un export du PageRank.
Après quelques jours de mouvement au niveau du nombre de résultats de la commande link:, celle-ci semble s’être stabilisée.

J’ai profité de cette occasion pour, pour la première fois, proposer une mini analyse de cet évènement avec les données récoltées par RefStats.
Ainsi, j’ai mis en ligne un graphique recensant le cumul du nombre de résultats pour la commande link: de chacun des sites indexés dans l’outil.

L’analyse de ce graphique me semble assez simple pour chacun. Google est devenu plus exigeant pour lister un lien dans la commande link.
Si on considère que les liens listés ici sont également ceux qu’il considère les plus pertinents (ce qui serait logique. Sinon à quoi bon cette commande ?), on peut également considérer que de gros changements dans la considération d’un lien comme pertinent viennent d’avoir lieu.

Après au niveau des positionnements, je ne constate de mon côté pas trop de changements. Et vous ?

 
Fork me on GitHub