Lorsque je vous ai annoncé la sortie de la version 3.5 de Cuk, vous avez été nombreux à manifester dans les commentaires le désir de savoir un petit peu plus comment fonctionne votre site internet préféré.
Je vais donc aujourd’hui essayer de vous présenter quelques aspects techniques et organisationnels du site. Je n’aborderai pas les statistiques d’accès au site, qui mériteraient (mériteront?) un article dédié.
Hébergement et matériel
Cuk.ch est hébergé chez Swisscenter depuis plusieurs années, et nous avons très souvent eu l’occasion de le dire, il s’agit d’un hébergeur de qualité, avec un service qui a toujours été à la hauteur.
Contrairement à beaucoup de sites Mac (même de taille comparable), nous ne sommes pas sur un serveur dédié. Le serveur dédié offre une flexibilité accrue, mais augmente considérablement les coûts. Ne souhaitant pas recouvrir le site de publicité, nous mettons tout en oeuvre pour pouvoir rester sur un hébergement mutualisé. Cela passe par exemple par le système de mise en cache qui sera décrit plus loin.
Qui paie, et qui est payé
Les seules sources de revenus de Cuk sont les deux publicités placées en haut de la page. Les magasins Mémoirevive et pumpkin (qui se sont d’ailleurs tous les deux récemment agrandis) nous versent une cotisation fixe par mois en échange de l’affichage permanent de leurs bannières.
Ces cotisations servent à couvrir les frais d’hébergement, ainsi que les frais divers (pour les CukDays et autres rencontres par exemple). Bref, que les choses soient claires, Cuk ne fait gagner d’argent à personne.
Notre but n’est pas de faire de l’argent. Nous préférons garder au minimum nos frais d’exploitation, et nous nous contentons d’annonceurs qui couvrent ceux-ci. Autrement dit, moins nous devons penser à l’aspect financier, mieux c’est.
Par contre, il arrive souvent que les éditeurs offrent aux testeurs soit des livres, soit des numéros de série pour les logiciels dont nous parlons. C’est de cette manière seulement que les articles sont “payés”.
Vous l’aurez compris, quand on écrit quelque chose sur Cuk, c’est donc par passion et pour le plaisir de partager! Et c’est sans doute l’une des choses qui contribue à la qualité des publications.
Organisation et rédaction
Cuk.ch, c’est avant tout un article par jour. Avec environ 40 rédacteurs actifs à différents degrés, cela implique une organisation très précise.
C’est François qui s’en occupe. Tous les quelques mois, les rédacteurs doivent s’inscrire pour un programme (par exemple un jour par semaine, x articles par mois, ou autre) et tenter de s’y tenir. Ensuite, François crée le programme, où chaque jour correspond à une réservation pour un rédacteur.
Pour cette raison, c’est un calendrier du mois qui est en première page de notre panneau d’administration:
Le calendrier
Celui-ci permet de consulter d’un coup d’oeil la liste des réservations. Les carrés de différentes couleurs correspondent à l’état d’avancement des articles.
Dans le cas idéal, ce sont les rédacteurs qui s’occupent de la rédaction et de la mise en page de leurs articles depuis une interface web, en HTML directement, en Textile brut, ou avec un éditeur WYSIWYG.
Cependant, bien que de plus en plus de rédacteurs s’occupent eux-mêmes de leurs articles, François effectue un travail considérable pour veiller sur la mise en page et corriger les éventuelles coquilles.
Donc les articles sont présents dans la base de données bien avant d’être publiés sur le site, et ce n’est que lorsque leur date est plus ancienne que la date actuelle qu’ils sont publiés, automatiquement.
Technique
Je garde l’aspect technique du site pour cette deuxième moitié de l’article. Ceux qui ne sont pas curieux de savoir comment fonctionnent les rouages informatiques de Cuk peuvent arrêter la lecture ici.
Ruby on Rails et MySQL
Depuis la version 3 de Cuk.ch, le site est basé sur la technologie Ruby on Rails, dont nous parlait Nicolas Paton ici il y a trois ans. Attention, Ruby on Rails n’est pas un CMS. RoR rend l’écriture du code du site très agréable, mais tout doit quand même être fait depuis zéro!
La base de données est de type MySQL. Elle contient le texte des quelque 2825 articles, ainsi que les 54190 commentaires à ce jour. Les images, quant à elles, sont stockées simplement sur le système de fichiers du serveur.
AJAX
Lorsque vous effectuez une recherche live avec le champ tout en haut à gauche de la page, ou lorsque vous ajoutez un commentaire, le contenu de la page change, sans pour autant devoir la recharger. C’est la magie d’AJAX.
AJAX permet à une page web chargée dans le navigateur d’interagir avec le serveur, afin de lui envoyer ou de recevoir des informations. Cette technologie est rendue très facile d’accès avec Ruby on Rails.
Performances et mise en cache
Il est évident que si les différentes pages du site devaient être générées une fois pour chaque utilisateur, Cuk.ch ne pourrait pas tenir sur un serveur mutualisé.
C’est pour cette raison que la plus grande partie des pages du site est enregistrée en cache. Concrètement, cela signifie la chose suivante. Lorsque vous tapez “http://cuk.ch/articles/21” dans votre navigateur, c’est dans un premier temps un serveur web Apache tout ce qu’il y a de plus normal qui reçoit votre requête. Le serveur vérifie ensuite si la page est présente en cache, dans quel cas il vous l’envoie directement. Si elle ne l’est pas, alors il transmet la requête à un serveur Mongrel (celui qui fait tourner l’application Ruby on Rails) qui génère la page, vous l’envoie, et l’enregistre dans le cache pour le suivant.
Cela signifie que dans l’énorme majorité des cas, votre requête sur Cuk est traitée sans passer par Ruby on Rails. Il s’agit d’un simple envoi d’un fichier HTML statique par Apache, ce qui est extrêmement peu coûteux.
Ce système est très économique en ressources. En réalité, c’est la quasi-totalité des pages du site qui est stockée en cache: toutes sauf les résultats des recherches et les pages nécessitant une authentification.
Cependant, un tel système de cache a un inconvénient. Il faut en effet être prudent, car lorsque le contenu du site est modifié, il faut que les pages en cache soient détruites (pour être recréées à la requête suivante). Ainsi, si vous changez par exemple votre nom d’utilisateur dans votre profil, toutes les pages des articles que vous avez commentés doivent être actualisées!
Bien sûr, il serait facile de simplement détruire la cache entière toutes les heures, mais ce serait bien dommage. Le système développé pour Cuk est beaucoup plus ciblé: ce ne sont que les pages concernées par chaque changement qui sont “décachées”. Et croyez-moi, c’est plus compliqué qu’il n’y parait!
Les seules pages qui sont sorties de la cache sur une base temporelle sont la page d’accueil et les pages “Le mois de Cuk” et “La semaine de Cuk”. C’est nécessaire, car les nouveaux articles deviennent accessibles dès que leur date de publication est atteinte, sans qu’aucune modification de la base de données n’ait lieu. Cette mise à jour à lieu 5 minutes après chaque heure entière. C’est pour cette raison que l’article du jour apparaît généralement à 0h05, sauf si entre-temps, un autre changement vient modifier le contenu de la page d’accueil.
Voilà, maintenant vous savez tout, ou presque!
, le 20.07.2009 à 00:30
Noé, ton cache fonctionne à merveille à peu près partout. Mais pas très bien sur le réseau Swisscom pour les écoles, auquel toutes nos… écoles sont reliées dans le canton de Vaud. Je dois toujours faire un ALT Refresh pour voir les nouveaux commentaires par exemple.
Sinon, utiliser l’interface Cuk, ce n’est que du bonheur!
, le 20.07.2009 à 00:32
Je ne peux malheureusement pas faire grand chose lorsqu’il y a un proxy qui gère sa propre cache entre le site et l’utilisateur…
, le 20.07.2009 à 00:36
Merci ! (Rapidement pondu cet article et on en sait un peu plus des entrailles de notre site préféré, c’est toujours intéressant à savoir)
, le 20.07.2009 à 01:05
Je m’associe aux remerciements ! On n’en sait jamais assez sur le fonctionnement de tout ce qu’on peut utiliser au quotidien.
Didier
, le 20.07.2009 à 01:26
Sympa de voir les entrailles de cuk.ch :) Pour (encore) économiser quelques précieux octets de ram as-tu essayé la combinaison nginx/passenger? Les gens ont l’air content en général…
Bonne continuation!
, le 20.07.2009 à 07:14
J’adore jouer à cache-cache; merci Noé, merci M. Cuk.
, le 20.07.2009 à 08:21
Merci Noé. C’est fou ce qu’il faut connaître pour un site qui paraît simple.
, le 20.07.2009 à 08:35
En tout cas, comme on dit en Belgique (et sans doute ailleurs!), ce site fonctionne comme une horloge… suisse!
En tant qu’auteur, je peux témoigner que le système fonctionne parfaitement aussi de l’autre côté de la barrière!
Merci pour ce travail de coulisses auquel on ne prête pas toujours assez d’attention!
, le 20.07.2009 à 09:19
très interessant! merci noé!
ciao, n
, le 20.07.2009 à 09:21
Merci pour ces infos fort intéressantes !
, le 20.07.2009 à 09:25
Moi qui me suis amusé à une époque à créer quelques sites, je me rends compte avec ces quelques explications le fossé qui s’est creusé et le retard que j’ai pris en quelques années et qu’il me semble difficile de rattraper. Bravo pour tout, c’est une magnifique mécanique… que la Nasa doit vous envier.
Benoit
, le 20.07.2009 à 09:32
@ fstephany:
En local, oui. Mais comme je le disais, nous sommes en mutualisé, et je ne peux pas installer ce que je veux sur le serveur! Il faut que ça tourne sur un serveur Apache “normal” à la base…
, le 20.07.2009 à 09:47
Quelle déception, je croyais que le “patron d’ici” cliquais sur un bouton tous les jours à 00h07 chez moi ( sans doute du au décalage horaire….) et j’apprends que la chose est automatique, ousse quon va , pffffui.
Merci Noé pour le boulot réalisé et cette petite humeur explicative.
, le 20.07.2009 à 10:09
@ François en 1, c’est quoi ce Alt Refresh déjà ? Il me semble en avoir déjà entendu parler. C’est un refresh qui force le serveur à se rafraîchir également ? (à détruire sa page en cache et recharger la nouvelle) ?
Moi ça me stresse cette histoire d’un article par jour, et on comprend bien que vous y tenez quand on lit «Cuk.ch, c’est avant tout un article par jour.». Heureusement que je ne suis pas obligé de lire un article par jour, ça m’ennuierait. Alors en écrire un par jour !!! Oui je sais vous êtes plusieurs, et on en parle souvent, je suppose qu’un jour il y aura un article dédié à cette idée de parution d’un article par jour.
Pourquoi j’en parle ? Je ne suis pas obligé de lire ! Parce que ça me met mal à l’aise vis à vis de vous.
Merci pour ces renseignements Noé.
, le 20.07.2009 à 10:12
Très intéressant cette histoire de cache qui explique le coup de l’article à 0h05 ;)
D’ailleurs, les techniques utilisées permettent un usage de la bande passante très limité dont pourrait s’inspirer bon nombre de site! Mais cuk c’est ici et nulle part ailleurs ;)
D’ailleurs, MacBidouille pour couvrir les keynote utilise le service Google App Engine. Est-ce le même système intelligent de mise en cache industrialisé par google avec son service?
, le 20.07.2009 à 10:17
@ Guillôme:
Non, pas du tout. C’est géré avec Ruby on Rails.
, le 20.07.2009 à 10:29
Ici, c’est comme en avion: je n’y comprends rien, mais je fais confiance au pilote!
Merci Noé!
Milsabor!
, le 20.07.2009 à 10:48
Excuses-moi, mais ta réponse est pas très clair.
Le Non, pas du tout est pour dire que Google App Engine n’utilise pas de système de cache pour son service?
Et le c’est géré avec Ruby on Rails s’applique à Cuk par différence avec Google App Engine qui est en Python et Java c’est ça? Sachant quand même que l’on peut interfacer du Ruby On Rail avec du Google App Engine de ce que j’ai compris…
, le 20.07.2009 à 10:49
En tout cas, l’interface rédacteur est vraiment facile! Et c’est bon, pour les pinces de mon genre! Ça m’évite de me boucher les gicleurs des boyaux de la tête! Merci Noé!
, le 20.07.2009 à 10:59
@ Guillôme:
Désolé, je le “Non pas du tout” signifie que nous n’utilisons pas du tout Google App Engine. Après, comment eux gèrent le cache, je n’en sais rien, car je n’ai jamais étudié Google App Engine. Je ne sais pas non plus comment Google App Engine s’accomode avec Rails.
Si tu veux, Cuk est entièrement codé en Ruby on Rails (sauf le forum qui est un phpBB3 classique). Ruby on Rails (en tant que Framework) propose des façons de gérer la mise en cache de façon très élégante et efficace (mais cela devient quand même complexe au niveau de la logique quand tu as un site de grande taille).
, le 20.07.2009 à 11:51
Faut pas, faut pas! Nous sommes 40 rédacteur, comme le dit Noé. Avec des intérêts divers, des styles divers. Personnellement, ça ne me gêne pas d’écrire un article par mois, au contraire, ça me fait être attentive à des choses que je ne remarquerais peut-être pas, parce que je me demande ce que je pourrais partager de bien avec vous… J’adore faire ça, ça m’enrichit. Comme nous sommes tous bénévoles, j’imagine qu’il en va des autres comme pour moi: mon salaire, c’est le plaisir de faire. Cela dit, il y a parfois des sujets qui ne m’intéressent pas, j’ouvre, je parcours et je referme sans avoir vraiment lu.
Il y a ceux qui disent que le matin, la première chose qu’ils font, c’est aller voir ce qu’il y a sur cuk (je le sais parce que je l’ai souvent lu ici), mais rien n’oblige personne à cliquer sur cuk chaque jour – surtout si ça le stresse.
, le 20.07.2009 à 12:14
Les techniques ont évolué, c’est certain, et de ce côté le fossé entre le simple site HTML/CSS/un peu de Javascript et un site plus dynamique ou une application web (PHP/RoR/Java EE/…) se creuse de plus en plus.
Mais je pense qu’une grosse différence vient également du fait que pour un site comme Cuk, en-dehors de sa réalisation elle-même, il faut encore gérer l’environnement.
Noé pourrait faire tourner Cuk sur un ordi à la maison… mais ça ne durerait pas longtemps ! ;-)
Quand on parle des keynotes « retransmises » (textuellement, avec photos) par certains sites, on va encore plus loin, puisqu’il faut dès lors que les serveurs supportent une charge immense durant un certain temps.
En tout cas Noé, avec Cuk, tu as de quoi plonger dans du concret et du « lourd », c’est chouette quand on aime.
, le 20.07.2009 à 13:57
Joli Noé, pas évident cette gestion de cache ! Développeur moi-même, je sais à quel point ça peut devenir complexe à gérer proprement et efficacement. Je serais vraiment curieux de voir l’implémentation que tu en as faite.
En tout cas chapeau bas tant pour le contenu de Cuk que pour son moteur. Rares sont les sites de cette qualité, encore plus rares sont les sites propulsés par une application spécifique dédiée. La partie admin a l’air fort propre également, alors que c’est souvent un point qui est négligé (moi-même d’ailleurs, je travaille sur un serveur RoR et ma partie admin est… spartiate. Fonctionnelle, mais, euh… bon, j’avoue, moche.).
Merci pour tout ça !
, le 20.07.2009 à 14:34
Oui, l’arrivée de la gestion des articles par un calendrier et la possibilité de préparer en ligne son article (sans ftp, sans html…) a révolutionné le travail des rédacteurs.
Aujourd’hui, il y a vraiment une machinerie impressionnante en place pour que vous puissiez avoir des articles chaque jour. Car, on ne le répètera jamais assez, la plupart des articles/humeurs sur Cuk sont l’objet d’un travail rédactionnel représentant de très nombreuses heures.
, le 20.07.2009 à 15:59
Salut Noé,
Aurais-tu quelques conseils à donner pour s’initier à Ruby on Rails, de préférence en environnement Mac (j’ai Parallels 4 et Win XP sur ma machine), mais autant que possible je préfère rester sous Mac OS.
Merci d’avance !
, le 20.07.2009 à 16:06
@ FT’e:
Je suis désolé, mais le code source du site n’est pas public.
@ Bigalo:
Ruby on Rails sous Windows? Ce serait une folie. Tous les développeurs RoR sont sur Mac. Je te conseille le bouquin classique de base Agile Web Development with Rails.
Mais attention, je pense qu’il faut commencer par être sûr que RoR est vraiment la solution la plus adaptée à ce que tu cherches à faire. Si c’est un site relativement simple, le PHP est une option moins chère à entretenir (car tous les hébergeurs proposent du PHP).
, le 20.07.2009 à 16:12
C’est moi ou Cuk a choisi de planter il y a dix minutes?:-))
, le 21.07.2009 à 00:11
J’avais bien compris. :) J’exprimais ma curiosité par rapport à ton approche, voilà tout. J’ai implémenté une gestion de cache par trois fois (à chaque fois différente, en PHP, WebObjects puis Ruby), donc je connais assez bien la problématique et ça a chatouillé ma curiosité naturelle.
@ Bigalo
Noé a raison, Ruby On Rails n’est pas nécessairement adapté à toutes les situations. Et en effet, le Mac est certainement la meilleure plateforme pour développer avec cet outil.
Quant à PHP… Ma foi, Ruby sans Rails peut être utilisé en remplacement de PHP assez aisément, comme n’importe quel langage de script (PERL, PHP, Lua même pourquoi pas, ou d’autres…).
Le point à retenir est que le choix de l’outil est dicté par le projet avant tout, puis par les préférences et compétences des développeurs. Bon, par la mode et le hasard aussi, mais ça ne devrait pas. Et par le management aussi, mais ça ne devrait pas non plus. ;)
, le 21.07.2009 à 00:30
@ FT’e
J’en suis bien conscient, mais je suis indépendant en informatique, bien meilleur technicien que commercial, je manque parfois de boulot, et j’aimerais élargir mon champ de compétences.
C’est pour cette raison, entre autres, que RoR m’intéresse : les compétences PHP sont extrêmement répandues, ce qui n’est pas le cas pour RoR. Il doit donc être plus facile de trouver des missions RoR, même si la demande est moindre !
, le 21.07.2009 à 05:29
Mon vieux Titanium (6 ans de bons et loyaux services) est tombé en rade graphique (écran quasiment illisible) lors de la dernière mise à jour de cuk.ch. Maintenant, c’est un tout neuf et tout petit Macbook qui le remplace. Il va bien falloir que je propose quelques sujets à la rentrée, maintenant que tout marche mieux, et chez cuk et chez moi…
Merci Noé, pour ce travail impeccable.
, le 21.07.2009 à 15:07
Je me disais, « mais que se passe t’il, Okazou poste un commentaire de seulement 5 lignes ! ». Mais j’ai compris, tu t’es auto-modéré en prenant un plus petit écran .
, le 21.07.2009 à 17:59
Merci Noé pour tout ce travail fourni dans l’ombre.
Moi, je clique sur le signet de cuk et hop! le site s’affiche… Et si je veux commenter, je clique sur le petit bouton, là, puis je dis qui je suis et ça marche… C’est magique !
Magique ? Et non ! Il y a des mecs dans la soute qui font le boulot pour nous ! Heureusement, parce que RoR, php, perl, et tous leurs concurrents, c’est du chinois pour moi.
Hommage à ceux qui sont dans la coulisse !
Daniel.
PS : je suis technicien du spectacle et je sais combien cela compte l’avant spectacle (et la coulisse pendant) !
, le 22.07.2009 à 16:56
Rassure-toi, ce ne sera sans doute pas longtemps le nouveau format de mes interventions !
L’écran 13’ est petit mais ne constitue pas un obstacle en matière de textes. Mon WallStreet disposait également d’un écran 13’, plus carré, et ce petit Mac sera secondé à l’automne (novembre ?) par un iMac 24’ propulsé par un Core i7 (architecture Nehalem). Tu verras alors comme mes textes seront plus longs !
, le 24.07.2009 à 08:44
Ohla !!! On s’en réjouit d’avance, et je suis sûr que certains ici, qui ont déjà fait part du plaisir qu’ils prenaient à te lire, seraient prêt à te subventionner pour l’achat d’un écran encore plus grand.
Mais et nous alors ?!!! Il faudra qu’on change notre écran pour un grand également si on veut continuer à te lire avec le plus grand plaisir.
Okazou qui pousse à la consommation, ça méritait d’être souligné !