Le blog perso de Sam

Parce-que je le vaux bien

Jeudi

18/01/2007

Blog et pubs : bof bof…

Dès ma première tentative de création de blog, je me suis dit qu’il ne fallait pas y coller des pubs. Cela ne risquait pas de me faire gagner grand chose, et sur le principe j’étais contre. Un blog personnel est un espace de liberté personnel. C’est à soi. Ce n’est pas un panneau publicitaire.

Mais… car il y a un mais, j’ai tenté le coup. Je suis inscrit au programme Google Adsense dans le cadre d’un site animalier, et ça rapporte. Pas une fortune, mais les chèques arrivent, et le jour où je devrais payer pour un hébergement de qualité les frais seront couverts. Or avec quelques articles techniques la fréquentation du blog a bien augmenté, et j’ai voulu tenter l’expérience. Il y a bien eu des clics rémunérateurs, mais en moyenne moins de un par jour (beaucoup moins). Les gains ne furent pas proportionnels à ceux générés par mon autre site.

L’opération est-elle un échec ? Pas tant que ça. J’aurais pu prolonger et me dire que quelques clics sont toujours bons à prendre en complément de mon autre site. Mais non, j’ai obtenu ce que je voulais. J’ai fait une expérience, j’ai eu un résultat, et il est plutôt conforme à ce à quoi je m’attendais.

Au final je suis plutôt content. Je n’avais pas envie de voir ces pubs. L’absence de tout bénéfice sérieux m’évite un cas de conscience.

Mercredi

27/12/2006

wp-phpmyvisites en italien

J’ai eu dans ma boîte aux lettres un petit cadeau de Noël bien original. Un utilisateur du plugin wp-phpmyvisites qui permet de facilement coupler son blog WordPress avec l’outils de statistiques phpMyVisites l’a traduit en italien. J’ai intégré cette langue dans le packaging de la version 1.0 .

Merci à Alberto

Samedi

16/12/2006

Mise en production de Rails sous Ubuntu 6.06

Ce document a pour objectif de préparer une mise en production d’un ou plusieurs sites développé(s) avec Ruby On Rails sous Ubuntu 6.06. Pour configurer un environnement de développement, se référer au document Installer Ruby et RoR sur Ubuntu 6.06 (Dapper) .

Le choix technique est ici d’utiliser Mongrel pour faire fonctionner des instances de Rails, et d’utiliser Apache 2.2 pour réceptionner les requêtes et les distribuer aux différentes instances. Apache servira également le contenu statique. Tout ceci est très bien explique ici : Scaling Rails with Apache 2.2, mod_proxy_balancer and Mongrel.

Certains choix ne sont en rien obligatoires : il n’y a pas une seule et unique manière de procéder. Par ailleurs l’installation décrite est une base pour une mise en production, mais n’est pas en soit totalement sécurisée. Il faut encore penser firewall, sauvegardes, rotation de logs, …

Ce qui suit est long (mais détaillé), inspirez profondément avant de continuer ;)

Read the rest of this entry »

Mercredi

22/11/2006

Mongrel et les droits des fichiers

Je souhaite mettre en place un hébergement d’applications basés sur Ruby On Rails en utilisant Mongrel. L’objectif n’est pas de faire un hébergement mutualisé, mais de m’en imposer certaines contraintes afin de séparer ce que fait l’administrateur et le développeur.

Or par défaut Mongrel Cluster utilise un fichier de paramètres présent dans le répertoire config de l’application. De même que le fichier pid (permettant d’arrêter les processus) est présent dans le répertoire log. En cas de fausses manipulations du développeur c’est fâcheux. En cas de mauvaises intentions c’est pire (possibilité d’avoir les droits root en se débrouillant bien). Non pas que je soit suspicieux, mais j’aime bien cloisonner les choses lorsque cela les rends soit plus claires, soit plus sures.

Je propose ici la mise en place d’un script qui permette de gérer les clusters de Mongrel en utilisant des fichiers de configurations stockés totalement indépendamment de l’application d’une part (protégé contre toute modification), et d’autre part qui n’exécute jamais les script directement avec les droits de root afin de palier à toute manipulation frauduleuse des fichiers pid (il y aurait moyen de tuer n’importe quel processus).

Je pars ici du principe que Mongrel et Mongrel Cluster sont installés sur le système. Pour l’occasion le système sera un Ubuntu 6.06, mais rien n’interdit de le faire sur une autre distribution (ou un autre *nix) en adaptant un poil.

Avant tout chose, créons le répertoire qui contiendra tout les fichiers de configuration (seul root aura les droit d’y écrire !) :

sudo mkdir /etc/mongrel_cluster

Ensuite placez dans le répertoire /etc/mongrel_cluster les fichiers de configuration des applications en utilisant les options requises. Par exemple pour une application gérée par l’utilisateur test (avec toutes les options indispensables) :

sudo mongrel_rails cluster::configure -e production
-p 8000 -N 3 -c /home/test/mon_appli
--user test --group test
--config /etc/mongrel_cluster/test_mon_appli.yml

Entrons dans le vif du sujet : le script de démarrage (et d’arrêt). Consultez le script suivant et faites un copier/coller dans un nouveau fichier mongrel_all_cluster.rb dans /etc/init.d . Reste à permettre son utilisation au démarrage et à l’arrêt de la machine :

sudo chmod +x /etc/init.d/mongrel_all_cluster.rb
sudo /usr/sbin/update-rc.d mongrel_all_cluster.rb defaults

Et voilà, c’est fini, il ne reste plus qu’à tester.

Pour ajouter une application il suffit d’utiliser la commande de création d’un fichier de configuration comme illustré ci-dessus. Pour neutraliser une application il suffit de déplacer le fichier de configuration (ou l’effacer), ou plus simplement de le renommer temporairement car seuls les fichier finissant par .yml sont pris en compte.

Comme indiqué en introduction, ce n’est pas suffisant pour prétendre faire une hébergement mutualisé. Mais cela permet déjà de mettre le paramétrage à l’abri et d’éviter des élévations de privilèges ou des morts violentes de processus. Il y aurait encore pas mal de chose à faire pour sécuriser le système et les applications elles-même.

Ce script et ce post sont le fruits d’une étude de ma part, ce n’est pas en production. N’hésitez pas à vous en inspirez, et si vous avez mieux à proposer (ou des remarques à apporter), la porte est grande ouverte ;)

Samedi

11/11/2006

Compatibilité de wp-phpmyvisites

Je viens de mettre à jour ce blog vers WordPress 2.0.5 ainsi que l’outil de statistiques phpMyVisites vers la version 2.2, ce qui m’a permis de vérifier la compatibilité de mon plugin wp-phpmyvisites avec ces versions. Et bien… c’est ok ;)

Pour le téléchargement et les explications, se rendre sur cette page.

Vendredi

10/11/2006

Compiler Ruby et RubyGems sur Ubuntu 6.06

Bien qu’il soit possible d’installer Ruby sur Ubuntu 6.06 avec le gestionnaire de paquets, j’ai souhaité voir comment le faire en partant des sources. Si compiler Ruby en soit n’est pas un problème, il y a un petit piège au moment de compiler RubyGems. Mais comme je suis bon et généreux (qui a rigolé ?), je publie la procédure complète.

Read the rest of this entry »

Mercredi

11/10/2006

Ruby in the sky with diamonds

Le jeu de piste des liens entres blogs et news m’a amené à prendre connaissance de cet indicateur selon lequel Ruby serait grosso-modo le treizième langage du moment. Je vous laisse découvrir dans l’introduction ce que cette notion signifie.

Logo Ruby

Il est intéressant de constater la progression de Ruby dans ce classement, qui semble avoir multiplié par 3 à 4 son score en un an. A cette époque je n’avais moi-même jamais entendu parler de ce langage.

Nul doute que Rails y soit pour quelque chose, mais pour m’intéresser à Ruby indépendamment de RoR, je peux vous affirmer que ce langage mérite d’être connu et utilisé dans d’autres contextes que du développement web.

Il reste encore une grosse marge de progression, et il faudra du temps pour atteindre le niveau de Python dans ce classement, et plus encore pour concurrencer PHP sur son terrain. Mais le dynamisme de la communauté Ruby en général et les améliorations qu’apporterons les futures versions laissent penser que cela n’a rien d’impossible.

Ruby est un langage objet, dynamique, réputé très lisible (à raison). Ruby est également libre. Si des développeurs expérimentés peuvent réaliser des outils riches et complexes, il est également un langage très adapté à l’apprentissage de la programmation en générale, objet en particulier.

Pour ceux qui souhaitent en savoir plus :

Mercredi

11/10/2006

=== et commutativité

Récemment j’ai perdu pas mal de temps sur une broutille en Ruby. J’étais en train d’écrire un petit programme utilisant la très pratique bibliothèque DBF, et je souhaitais gérer différents cas selon le type des champs. Chaque valeur d’un champs étant une instance d’une classe adaptée, j’ai rapidement pensé à utiliser case/when. Comme je débute, je démarre irb, je teste bêtement l’opérateur === et … ça ne fonctionne pas. Mince alors ! J’ai cherché dans les docs, google, …

Finalement tout est rentré dans l’ordre, je me suis posé la bonne question, mais n’ai pas fait le bon test : l’opérateur === n’est pas commutatif ! D’ailleurs ce n’est pas un opérateur, mais une méthode, pour être précis. Une fois que l’on a compris cela parait si simple, un truc idiot de débutant… (non pas en Ruby, mais en informatique). Mais voilà, ça arrive, surtout pour ceux qui ne sont pas réveillés au moment de se poser les bonnes questions ;)

Concrètement, lorsque ce code est utilisé (note aux blondes : ce n’est pas du basic, les numéros de lignes sont là pour faire joli) :

1	case mon_instance
2 		when String	: puts "chaine"
3		when Date	: puts "date"
4		else puts "autre chose"
5	end

Il faut bien comprendre que ce qui est exécuté est similaire à String===mon_instance , et non l’inverse. Exemple avec irb :

>> a=String.new
=> ""
>> a === String
=> false
>> String === a
=> true

C’est aussi simple que ça. Mais c’est mieux quand on y pense :)

Mardi

03/10/2006

Listes électorales

Logo-Service-PublicEn 2007, auront lieu les élections présidentielles françaises. Le suffrage est un élement fondamental de notre démocratie. On peut critiquer à volontée les institutions, les partis, hommes et femmes politiques, mais il faut aussi savoir prendre ses responsabilités.

En 2002 nous avons vu que des surprises (très désagréables) peuvent survenir. Le FN au second tour, rares devaient être ceux qui l’avaient envisagé sérieusement. Et pourtant c’est arrivé. Au final il n’y a pas eu de réel choix au second tour pour de très nombreux électeurs.

Alors n’oubliez pas, pour voter en 2007, il faut s’inscrire sur les listes électorables avant la fin de l’année 2006. C’est simple, et totalement indolore (si si). Pour plus d’informations, c’est ici que ça se passe : http://vosdroits.service-public.fr/particuliers/N362.xhtml

Voter c’est agir. Ne pas voter c’est subir.

Vendredi

25/08/2006

Ejabberd sur Ubuntu

JabberIl ne s’agit pas ici d’une explication destinée à une mise en production, mais plutôt d’un mini HOWTO pour démarrer. C’est une sorte de pense-bête que je retrouverais plus tard car je ne vais pas y consacrer énormément de temps dans l’immédiat. Pense-bête que je partage. Mais faire ce que j’indique ici est à vos risques et périls.

Read the rest of this entry »