Record du monde !

Download Day 2008

Vivre avec Rails Edge #22

Traduction de la news #22

Aucun changement hallucinant dans Rails cette semaine avant la RailsConf - Comme Gregg le mentionnait la semaine dernière dans le Rails Envy podcast, ce sont les jours pré-2.1 (Rails 2.1 sera probablement sorti au RailsConf), ce qui sera une façon simple de voir pourquoi. Tous les tests de rails passe désormais sur Ruby 1.9 après un long bug sur #module_eval résolu dans le trunk de Ruby 1.9 (voir ce thread pour plus de détails).

Je serais (pour la première fois) au RailsConf 2008 à Portland, Oregon, ce jeudi prochain - Si quelqu'un souhaite me voir et me reconnaitre avec ma photo de Facebook, s'il vous plait venez me dire salut.

Le rapport de cette semaine couvre les changement du 19 Mai 2008 au 25 Mai 2008 (le jour correspondant à l'enregistrement du Rails Envy podcast).

Les méthodes first et last fonctionnent désormais avec les associations et named_scope

Vous vous souvenez comment le merge du gem has_finder à l'intérieur de rails a permis de faire des choses comme Post.first et Post.last?

Maintenant vous pouvez allez dans l'étape suivant et utiliser les mêmes méthode dans vos association ActiveRecord. Par exemple:

post = Post.find(1)
first_comment = post.comments.first

Si vous avez récement utilisé named_scope, vous pouvez désormais faire ceci:

post.comments.recent.last

Cette belle petite fonctionnalitée a été gentiement apporté par Ryan Bates (oui, le Ryan Bates du fameux Railscasts).

Révision concernant cette fonctionnalités: http://github.com/rails/rails/commit/73c59638549686fccc749ffd3ac53cb533c5fd61

Cache stores a désormais une méthode exist? et ajouté dans le controllers un fragment_exist?

L'enregistreur de cache dans Rails (Memcache, file stores, etc.) peux désormais avoir une méthode exist? qui vérifie si une valeur de cache existe pour la clé de cache. Cela permet aux controllers Rails de disposer d'une méthode fragment_exist? qui permet de vérifier l'existence d'un fragment de cache:

fragment_exist?('example.com/foo/bar')

Cette petite amélioration a été gentiement apporté par José Valim.

Révision concernant cette fonctionnalités: http://github.com/rails/rails/commit/99860b72aebe0348f41e82d4710343498d89a84b#diff-2

Créer un enregistrement d'une association avec un block en argument

Vous pouvez désormez créer des enregistrement pour les associations comment ceci:

post.coments.create!(:title => 'Techcrunch') do |c|
  c.body = "Rails can't scale"
  end

Ceci est ajouté au changement de ActiveRecord::Base.create indiqué précédement.

Ce patch a été réalisé par (encore une fois) Ryan Bates.

Révision concernant cette fonctionnalités: http://github.com/rails/rails/commit/6cba97d2a449faf21aec9fe9d4434067e414226f

Comme toujours, vous pouvez laissez toutes suggestions pour améliorer cette série de Vivre avec Rails.

Quel OS utiliser pour son serveur ?

La multitude d’OS disponible rend le choix de plus en plus difficile. Est-ce qu’il a toutes les fonctionnalités que l’on veut ? J’ai des connaissances dans un, pourquoi passer à un autre ? Est-ce qu’il va y avoir un problème de compatibilité ?

Je vais essayer de faire un tout petit récap des choix que l’on a et de vous donner mon opinion. Bien sûr j’exclus Windows parce que ça fait monter le prix et que ce n’est pas le meilleur système pour Ruby.

Linux

Bon on se tourne naturellement vers Linux quand on installe un serveur dédié, on a le choix de la distribution, on en utilise peut-être déjà une pour le desktop et c’est assez simple. Mais quelle distribution prendre pour son serveur ?

On a dans un premier temps Debian et Ubuntu. L’inconvénient de Debian est l’ancienneté des packages, ça m’a énervé plus d’une fois, obligé d’aller taper dans les dépôts unstable & co. Ubuntu a des paquets plus à jour mais j’ai essayé une fois en serveur et j’ai eu plein de problèmes alors qu’avec la même configuration sur une Debian, tout roulait. Ensuite la récente faille sur OpenSSL m’a fait plutôt peur et j’ai donc envie de migrer vers autre chose.

On trouve ensuite CentOS et Fedora. Tous les 2 basés sur RHEL (Redhat), CentOS a un support plutôt long (on aura des MAJ des paquets sur une longue période) alors que Fedora c’est du bleeding edge et on peut donc avoir des surprises (je pense que c’est rare mais bon on est jamais à l’abri).

Enfin on trouve Gentoo. Gentoo c’est la distribution des geeks, plutôt orientée expert mais avec de gros avantages côté optimisation des paquets avec le serveur. Mais apparemment OVH ne propose que la version 64bits donc des process plus gourmands en RAM (à moins que ce soit le seul choix possible quand le processeur est 64bits, j’ai pas vraiment fait attention).

Pour les puristes Debian et Gentoo sont les principales distributions utilisées côté serveur. Je pencherais plutôt du côté de Gentoo parce que je suis fatigué de Debian et parce que Portage (le système de paquets) me semble être vraiment bien. CentOS peut être une bonne alternative aussi.

FreeBSD

Il n’y a pas que Linux dans la vie, on a aussi plein de *BSD, FreeBSD étant le plus connu. Ports est un système de paquets agréable à utiliser, le système de jail est très intéressant et j’aime bien la philosophie. En plus, DTrace et ZFS sont intégrés ce qui donne un plus non négligeable. Par contre mod_rails ne fonctionnerait pas avec FreeBSD 7 (je ne sais pas si la dernière version corrige le problème).

C’est très probablement le système que je vais utiliser à présent car c’est celui qui me convient le mieux. Il faut juste s’y habituer car il y a quelques différences par rapport à Linux.

Solaris

Solaris est un nid à bonnes idées créé par Sun. DTrace, ZFS et les zones (comme jail de FreeBSD mais en mieux) sont de très très bonnes choses et sont repris un peu partout. On a aussi OpenSolaris, la version open source de Solaris qui reprend tout le système et qui permet à la communauté d’améliorer l’OS.

Solaris est malheureusement peu répandu et même si OVH prévoit de donner la possibilité de l’installer, ce n’est pas encore tout à fait ça (c’est apparemment en bêta mais je ne sais pas comment utiliser les systèmes qu’ils mettent en bêta, si quelqu’un peut me donner la réponse). J’ai aussi un peu peur des problèmes de compatibilité mais si Joyent l’utilise, il n’y a pas de raison.

Conclusion

Voilà pour vous faire une petite idée du choix que l’on peut avoir. Pour moi FreeBSD et OpenSolaris sont ex aequo, ce sont des systèmes de premier choix pour votre serveur. OVH utilise Solaris pour l’hébergement mutualisé si vous vous posez la question.

Ensuite je pense que Gentoo est à prendre grandement en compte si vous ne voulez pas sortir du sentier Linux. Il a tous les atouts d’une distribution de gagnant. C’est aussi celle qu’utilise EngineYard.

Et enfin Debian et CentOS sont de bonnes distributions, plus abordables, mais qui ne frappent pas aussi fort que Gentoo, FreeBSD et OpenSolaris.

Impots

Pour ceux qui ont des problmes lors de la signature en ligne de leur dclaration d’impts sous Linux voici la solution.

source

Camping 2.0

La mailling liste camping est active en ce moment et l’on y discute beaucoup de la future version 2.0. C’est pourquoi j’ai mis en stand-by le développement de Bivouac dont je prévoyais la version 1.0 pour bientôt !

Apache vs Yaws

Yaws est un serveur web écrit en erlang, le langage actuellement super hype. Et le petit graphique disponible est plutôt impressionnant.

Garder son serveur GNU / Linux à l’heure atomique

Rester dans les temps

C'est une bonne idée de conserver son serveur à l'heure, surtout quand celui ci doit communiquer avec le reste du monde.

Sous GNU / Linux il existe ntpdate qui permet de réajuster l'heure à un moment donné en se basant sur des serveurs de temps.
Ce paquet est pratique pour une utilisation ponctuelle et réfléchie.

Toutefois c'est une mauvaise idée d'utiliser ntpdate dans un cron pour conserver sa machine à l'heure.
En effet les décalages de temps, même minces, risque d'entraîner des perturbations (parfois invisible) au niveau des processus en cours.

Nombreux sont les programmes qui utilisent des timestamp ou se base sur l'horloge système pour planifier d'autres tâches.
Si un programme planifie une tache à n+1 et qu'à la prochaine mise à jour de temps ton serveur passe à n+2, certaines tâches ne seront pas éxécutées.

Le programme dovecot par exemple, s'arrête complètement à chaque mise à jour de temps avec ntpdate.

Utiliser un démon pour garder l'heure à jour

Pour garder sa machine à l'heure il existe un programme qui tourne en tache de fond : ntpd (paquet ntp).
Ntp ne se contente pas de réajuster l'heure avec les risques que cela comprend.
Lorsque le serveur est en retard il accélère l'horloge système afin de rattraper son retard.
Le temps va donc passer plus vite mais sans perte.
À l'inverse il va décélérer l'horloge si la machine est en avance.

Pour l'installer il te suffit d'utiliser ton gestionnaire de paquet favoris, par exemple :

aptitude install ntp

ou d'utiliser le paquet qui va bien sur le site officiel.

Une fois installé le serveur se lance en démon.
J'ai juste changé les serveurs du /etc/ntp.conf de n.debian.pool.ntp.org vers n.fr.pool.ntp.org pour avoir les serveurs de temps les plus proches.

Justice

Je viens de dcouvrir la polmique qui a anim le dbut du mois sur le clip Stress du groupe lectro Justice par Romain Gavras.

Je dois dire que pass la vision au 1er degr qui ne peut que choquer, 3 tips sautent aux yeux la fin. Le preneur du son qui prend feu, la camra pte et la phrase de fin ‘a te fait kiffer de filmer a, fils de pute?’.

C’est clairement une critique du voyeurisme des mdias.

A ce propos je me souviendrai toujours d’un “reportage” diffus en plein JT il y a bien 15 ans qui montrait une jeune fille dans un pays tranger les jambes prises sous un arbre dans une norme flaque boueuse que les gens n’arrivaient pas sortir et qui s’est noye en direct … Polmique l’poque ? non. L ce n’tait pas une fiction, information non pertinente, du voyeurisme ultra-violent pur et dur.

Alors polmiquer sur une fiction qui ose balancer un miroir aux mdias, il y a de quoi sourire.

Voir ce commentaire sur rue89

De l’usage du Linutop

Le Linutop est un trs petit PC sans cran et disque dur. Il est commun de l’utiliser comme poste de travail lger, essentiellement avec un navigateur web. Il est fourni avec une cl USB avec un Linux install et une interface XFCE.

J’ai achet il y quelques temps la V1 et il me semble intressant de faire part de l’usage que j’en fais. Je ne souhaitais pas l’utiliser comme poste de travail mais aussi comme serveur lger. Il consomme trs peu (moins de 5wats) ce qui permet de le laisser constamment allum, sans soucis de bruit et d’encombrement.

Tout d’abord il est ncessaire d’installer sur un disque USB externe une distribution si on veut l’exploiter au mieux (notamment les mise jour de l’OS et l’installation de paquets sans tre limit par l’espace disque allou l’OS sur la cl USB). Il suffit d’un simple boot sur un live CD depuis un PC et une installation sur le DD externe. Attention si l’on souhaite galement utiliser le linutop comme poste de travail il est ncessaire d’installer une distribution rcente. En effet le driver AMD/Geode pour X est buggu dans les plus ancienne, il est corrig dans la Ubuntu 8.04 par exemple.

Ensuite le Linutop peut booter sur le DD externe. J’ai eu des soucis avec un DD externe 2,5” (mais aliment par une prise PS/2 sur un autre PC). Aucun problme avec un DD 3,5” aliment directement au courant.

Usages :

  • irssi proxy
    • Le but est d’avoir un client IRC connect en permanence sur le Linutop et de pouvoir s’y connecter depuis des clients IRC graphiques de ses autres machines. Voir une doc et ici. Bip fait aussi l mme chose mais pas test. Si vous rejoignez un nouveau canal, irssi restera connect celui-ci et vous les retrouverez tous la prochaine connexion de votre client. Par contre si vous en quittez un il est ncessaire de faire un /part plutt que fermer l’onglet. Apparemment fermer l’onglet, depuis xchat en tout cas, ne quitte pas le canal sur irssi. Autre avantage, vous pouvez configurer irssi pour qu’il vous mail un message priv si aucun client n’est connect dessus (voir le plugin awayproxy).
  • serveur MPD
    • Trs pratique pour centraliser toutes ses musiques surtout si vous connectez la sortie son du Linutop sur une chane HiFi. De plus MPD peut grer des playlists par utilisateur !
    • celui-ci consomme relative peu de ressources, environ 13% du CPU (450Mhz).
    • j’ai trouv un excellent client, sonata. MPD utilise la sortie ALSA du serveur, ce qui permet en bonus de moduler la sortie son du serveur depuis sonata. Exemple lorsqu’on lance VLC sur le linutop pour regarder la TV Freebox.
    • update : J’ai oubli de prciser qu’il existe un plugin lastfm MPD, lastfmsubmitd. Par contre il ne gre pas plusieurs comptes lastfm en fonction d’une playlist.
  • TV
    • Grce VLC avec la Freebox TV ou si vous disposez d’un tuner TV USB. Par contre l’image ne sera pas optimale sur les chanes qui diffusent en HD, voir si le CPU de votre V2 amliore cela.
  • bot IRC rbot
    • consomme environ 10% de la mmoire du linutop (256 Mo).
  • serveur PostgreSQL
  • synergy
    • Trs pratique pour piloter le XFCE ( conseiller plutt que GNOME ou KDE trop gourmands en ressources) du Linutop depuis son vrai poste de travail. Je constate par contre des latences de rponses de la souris/clavier par moment :/
  • Tuxdroid
    • J’ai tent de connecter le droid au Linutop mais le dmon tuxdroid consomme beaucoup trop de ressources :/ A voir si les prochaines version n’amliorent pas cela.

Il me manque un quivalent de MPD pour centraliser des vidos et les voir sur des postes clients. Si vous avez d’autres ides ajoutez un commentaire :)

Il peut en rester plus d’un

Comme le dit Ezra, il n’y a pas à y avoir de batailles entre Rails et Merb, on peut utiliser les 2 ou utiliser celui qu’on préfère. C’est ce que je fais et je m’en porte plutôt bien.