PJEA : bilan de la saison 2008

Cela fait une semaine que le dernier rallye de la saison a eu lieu… Voici l’heure du bilan de cette nouvelle  saison du PJEA !

Alors, quelques chiffres…

Le PJEA 2008, c’est :

  • 222 membres (tous n’ont pas participé à la saison entière…)
  • 29 rallyes différents à pronostiquer
  • … pour 1640 pronostics enregistrés
  • 15 QCM différents
  • … pour 1059 QCM enregistrés
  • 16 quizz différents proposés
  • … pour 752 quizz de validés par les joueurs
  • 108 news (peut mieux faire…)

Quelques grosses déceptions :

  • le GP PJEA qui n’a pas pris du tout… j’ose même pas donner le nombre total de votes sur la saison… allez, si, parce que c’est vous… 147 :(
  • le forum interne, qui n’est pas du tout simple à utiliser (malgré tout, je me suis bien amusé à le faire, et j’en ai pas mal ch***…). Du coup, il a quasi pas été utilisé… 230 messages… en comptant les propositions pour le GP PJEA… très faible.
  • la version anglaise, qui n’a jamais vu le jour (reporté – à nouveau – pour 2009)
  • les nombreux soucis lors du changement de serveur… pas mal d’indisponibilités du site… beaucoup plus que les 3 dernières années et ma reprise du site de Gagak

Dans les points positifs, je pourrai aussi ajouter le premier « questionnaire de satisfaction » mis en place… Avec plus de participation que je ne l’espérais ! Je ferai d’ailleurs un bilan de tout cela dans un prochain article. Il y a eu de nombreux commentaires très constructifs !

Cela nous amène au futur du PJEA… nous avons, Cyr et moi, encore pleins de nouveaux projets dans les cartons. Malheureusement, cette année, la nouvelle version ne sera pas disponible pour le lancement de la nouvelle saison. Mais devrait être ouvert au cours du premier semestre 2009.

Au passage, pour ceux qui ne l’ont pas lu, voici la présentation du PJEA et son histoire.

A bientot !

Jobeet : jour 5 et 6

Jour 5 : Routage

Le routage permet de faire correspondre une URL à une page donnée. L’avantage du routage Symfony, c’est qu’il est facilement configurable, et modifiable par la suite sans devoir tout reprendre ses fichiers.

Comme le montre l’exemple dans le tuto, il est très simple de transformer une adresse indigeste du type : /job.php?id=1 en quelque chose de plus claire et plus facilement référencable par des moteurs de recherches (du type : /job/sensio-labs/paris-france/1/web-developer).

Pleins de nouvelles découvertes, pas mal d’améliorations par rapport à la version 1.1 de Symfony. Et pas de difficultés particulières…

Jour 6 : Propel et les critères

Très intéressant… on apprend à jouer avec propel, la couche qui permet l’abstraction de la base de données. Syntaxe assez particulière, assez déroutante quand on a l’habitude d’utiliser du SQL… Cela semble plus compliqué à utiliser… mais peut être plus puissant… A voir à l’usage !

Au passage… il m’a fallut renommer une variable dans le template indexSuccess du module job… soit j’ai loupé une étape du tuto… soit il riques d’y avoir quelques utilisateurs qui ne comprendront pas pourquoi ça ne fonctionnera pas (pour info, c’est l’objet $jobs à mettre).

Quelques difficultés aussi, lors de la modification du fichier de configuration, pour mettre en variable « globale » le nombre de jours actifs par annonce… Obligé de supprimer manuellement le fichier de cache, sinon, grosse erreur en rouge =)

Le reste se déroule bien… Une journée bien complète… La proposition finale de développer par soi même la page des catégories… faut de la motiv’ ! On verra le prochain jour !

Aie aie… je prend de plus en plus de retard dans mon calendrier de l’avent Symfony ! Mon site d’annonces ne sera jamais prêt à temps pour être mis sous le sapin le 24 :P

Aujourd’hui, double ration… jour 3 et 4 !

Jour 3 : rien à signaler… tutorial plus long que les 2 précédents, mais plus concret… on commence à avoir un truc qui fonctionne à la fin de la journée ! Le YAML (format de fichier très simple); toujours aussi pratique et rapide. On crée une base de données en quelques lignes !! Et tout cela est très facilement modifiable par la suite.

Jour 4 : quelques problèmes à signaler… par rapport à ma configuration serveur… j’ai du adapter légèrement les adresses des images dans le « layout » (le design html de base) afin qu’elles s’affichent. Sans compter les problèmes de liens… faut vraiment que je reprenne cette conf’ serveur en détail dans les prochain jours…

Sinon, c’est à partir de ce jour là que l’on rentre vraiment dans le vif du sujet ! Inutile de copier-coller bêtement les bouts de codes… il faut se plonger un peu dedans pour bien comprendre le fonctionnement du framework.

Un des principal avantage d’un framework comme symfony est l’ordonnancement des fichiers. Tout est bien rangé, décomposé en applications / modules…, avec un peu d’expérience, on retrouve très vite ce que l’on cherche.

A demain, pour le routage sous Symfony ! Une autre spécificité importante du framework !

Jobeet : jour 2

Après avoir installé la nouvelle version de Symfony pendant le jour 1, configuré 2-3 trucs sur le serveur… le jour 2 nous détaille ce que nous allons programmer !

Il s’agit d’un site d’offres d’emploi (vu le nom, c’est pas non plus une grande surprise). Quelques schémas pour voir à quoi ressemblera l’interface, la liste des fonctionnalités (dont quelques trucs intéressant, comme la possibilité pour n’importe quel webmaster d’ajouter un module sur son site, avec les offres d’emplois !).

A part ça, rien de particulier… en 15 minutes de lecture, c’est fini ! on est loin de l’heure de travail quotidien promise ^^

Jobeet : jour 1

Ayé, je me lance dans le maxi tutorial Symfony… (bon, ok, déjà 3 jours de retard).

Comme pour Askeet, le suspens est de mise… on ne sait pas à quoi servira le site que l’on va créer à l’issu de ce premier jour (m’enfin, avec un nom comme ça, on se doute que ça va tourner autour d’offres d’emploi ou quelque chose du genre…).

Le 21ème jour, pour Askeet, c’était le développement d’un thème choisi par la communauté (en l’occurence, un moteur de recherche). Cette fois, c’est un « design day », où la communauté proposera et choisira le thème du site). Toujours aussi sympa cette intéractivité avec les lecteurs !

Passons aux choses sérieuses… l’objectif de ce premier jour est l’installation de Symfony 1.2. Bien évidemment, j’ai voulu faire mon rebelle, et regarder dans la doc officielle comment installer Symfony sans passer par l’archive (j’aime pas trop, je préfère du apt-get ou du pear).

Gros échec… J’ai pas réussi en pear (il trouve rien à installer), ni en apt-get (il m’installe un symfony 1.0…). Donc, retour au tuto, et téléchargment / décompression & Co du fichier source. Placé dans /lib/vendor/… ça me fait toujours peur de toucher à tout ce que je comprend pas sous Linux ^^ tant pis, c’est qu’une virtualisation d’Ubuntu de toute façon…

Pis la commande magique :php lib/vendor/symfony/data/bin/symfony -V

Qui me renvoie bien Symfony 1.2.0. Ouf ! ça, c’est fait !!

Quelques légères modifs dans la création de l’application… rien de trop violent pour ceux qui connaissent déjà Symfony…

En ce qui concerne la configuration du serveur, j’ai encore fait mon rebelle… Quelques modifs dans /etc/apache2/sites-enabled…

Et hop, voila qui semble bon ! localhost/jobeet me renvoie la page de départ de Symfony, toujours aussi classe au passage !

Pour finir, avec le svn… pas trop bien capté l’explication dans le tuto… je suis reparti chercher celle du tuto d’Askeet : http://www.symfony-project.org/askeet/1_0/en/1 que je trouve bien plus claire pour un débutant en symfony…

Voila, cette première journée Jobeet s’achève ! Pas de code de fait, mais la nouvelle version de Symfony est installée, le svn aussi., l’application générée… bref, on a tout pour commencer les choses sérieuses demain !!

La nouvelle version de Symfony, la 1.2 est sortie dernièrement… Et comme une bonne nouvelle n’arrive jamais seule, ils nous proposent un tutoriel.

Ce tutoriel est dans le genre d’Askeet, 1 heure par jour, pendant 24 jours… Certes, un peu plus long que de manger le chocolat Kinder du calendrier de l’avent, mais bien plus intéressant ! Si nous retrouvons les qualités du précédent tutorial (qui je le rappelle, n’avait pas été adapté à Symfony 1.1… ), ce nouveau tuto devrait permettre d’avoir les bases complètes pour attaquer la programmation d’un super site en Symfony !

Je vous tiendrais au courant dès que j’aurai eu le temps de m’y mettre.

Le lien : http://www.symfony-project.org/jobeet/1_2/en/

(un nouvel article par jour, jusqu’au 24 décembre !)

Wizzgo : la fausse bonne idée…

Petit rappel des faits… il y a quelques mois, Wizzgo arrivait sur le marché, et proposait d’enregistrer gratuitement la télé sur son ordinateur. Pour tenter de rester dans la légalité, ils se considéraient comme un « magnétoscope numérique », dans le sens où l’utilisateur devait faire la demande de son programme avant sa diffusion.

D’après leur blog, 400 000 personnes se sont inscrites au service. Mais les choses ont rapidement mal tournés pour eux… Le groupe M6 a commencé à les attaquer… Le service rentrait en concurrence avec leur M6replay, service qui permet de visionner pendant 15 jours les programmes de la chaine. Le procès perdu, les chaines M6 et W9 n’étaient plus disponible sur Wizzgo… Plus le tour des chaines du groupe France Télévision… Et pour finir, dans le procès M6/Wizzgo, Wizzgo a été condamné à verser 480 000 € à M6 pour contrefaçon…. Pour un service proposé gratuitement à l’utilisateur, l’addition est salée… Et annonce malheureusement la mort du service…

Wizzgo a lancé une pétition pour l’accès au droit à la copie privée via un magnétoscope en ligne : http://www.wizzgo.com/petition/

Pour suivre leurs déboires, leur blog : http://www.wizzgo.com/blog/

En conclusion, la mort d’un service bien utile, mais qui a voulu se confronter à des géants (M6, France Télé…). Comme pour la musique en ligne à l’époque, confrontés aux majors du disque, trouver un modèle économique qui met tout le monde d’accord va prendre du temps.

Et en cadeau bonus, recordme.tv propose un service dans la même idée (pour combien de temps encore ?)… certes, loin de l’ergonomie du logiciel Wizzgo, et qui ne permet pas de disposer du fichier sur son dique (lecture des programmes enregistrés via leur site). Mais ça peut toujours dépanner…

La semaine dernière, j’ai voulu me lancer dans le tutorial d’Askeet, proposé par l’équipe de Symfony. La proposition semble intéressante : en 24 petits tutorials d’environ 1 heure chacun, on nous annonce une découverte de l’ensemble des fonctions de Symfony, mais surtout, une découverte de la programmation en mode « agile ».

La programmation en mode « agile » :

C’est tout simplement l’idée qu’on programme « au fur et à mesure ». Pas de tonnes de schémas XML et autres listes de fonctionnalités à intégrer… On commence par développer tranquillement une fonction… ça marche ? on continu, on en ajoute d’autres… Bref, la structure du projet fait qu’il est très aisé d’ajouter des fonctionnalités supplementaires.

Cela passe par la mise en place de tests (unitaires et fonctionnels), qui permettent de d’assurer,  après la mise en place d’une nouvelle fonctionnalité, que toutes les précédentes fonctionnent toujours.

Bref, proposition alléchante… Très différente de ce qu’on a l’habitude de faire !

Présentation de Askeet :

Tout aussi alléchant, le site qu’on nous propose de réaliser. Pas un vulgaire blog ou un système de news léger, mais une véritable application « sociale », où des utilisateurs posent des questions… Et tout le monde peut les aider à y répondre… Avec notations des questions et des réponses, à la mode 2.0 bien sur !

Démo ici : http://www.askeet.com/

Bref, je me voyais déjà réutiliser toutes ses nouvelles connaissances dans les 2 projets Symfony qui sont dans mes cartons : le PJEA, et un autre projet « surprise » :)

Go go goooo :

Et me voila parti pour faire joujou avec tout ça… Les premiers « jours » se passent à merveille (le tutorial est en fait décomposé en 24 jours, comme un calendrier de l’avent !).

  • Jour 1 : installation de Symfony

Rapide, symfony étant déjà installé sur mon pc… J’ai quand même mis en place un svn… Grande première…

  • 2ème journée : base de données

La création de la base de données objet se passe bien… et… première désillusion… la commande pour générer le module de “tests” renvoie une erreur fatale…

Après 30 secondes de recherches sur le forum, la nouvelle tombe… Askeet est fait pour symfony 1.0… Et la version actuelle est la 1.1…

Bon, tant pis pour aujourd’hui, je fourbe en utilisant la commande utilisée en symfony 1.1… Et ça marche !

  • mais rapidement…

Les 3-4 quelques jours suivants se passent encore difficilement, avec pas mal de recherches pour transformer les commandes 1.0 en 1.1…

Mais il s’avère que les différences entre Symfony 1.0 et 1.1 sont bien trop importantes… Notamment au niveau des formulaires (jour 6). Installer une 1.0 sur mon pc pour finir Askeet, pour apprendre des notions « désuètes » m’enchante guère…

Grosse déception donc, j’attendais beaucoup de ce tuto pour bien comprendre les bases de Sumfony, la méthode de développement, approfondir les notions de modules/actions…

Surtout que de nombreuses fonctionnalités de ce projet m’intéressaient pour mes futurs projets (votes, connexion…).

Conclusion

J’ai donc du m’arrêter à peine au quart du parcours… Trop de complications pour adapter Askeet à la nouvelle version de Symfony.

Je vais quand même essayer de lire la fin du tutorial, mais sans tester les bouts de codes en parallèle (intérêt bien plus limité du coup…). Il doit quand même y avoir des notions intéressantes à comprendre. Surtout qu’il n’y a pas de tutorial équivalent pour le nouveau Symfony.

Ayé, je viens enfin de finir les 400 et quelques pages de la documentation officielle de Symfony ! Je vais donc vous faire une petite présentation de ce framework PHP…

J’ai découvert par pur hasard ce framework début aout… Et j’ai été directement conquis par le concept. Très proche de la philosophie de Ruby On Rails, que j’avais commencé à regarder, tout en restant du PHP… Et donc, plus simple à déployer. Le tout, sans avoir à réapprendre un nouveau langage de programmation !

Les bases :

Pour commencer, et comme beaucoup d’autres framework à la mode, Symfony est basé sur une architecture MVC (Modèle – Vue – Controlleur). En gros, ça signifie qu’on décompose une page web en 3 parties :

  • Le modèle, qui s’occupe du traitement des données,
  • La vue, qui insère ces données dans un format d’affichage (du xHTML, du XML…),
  • Et enfin, le controlleur, le « chef d’orchestre » de l’ensemble, qui fait communiquer tout le monde.

Les « pages » sont alors décomposées en différents parties :

  • les applications (exemple de 2 applications pour un site : la partie « publique » et l’inteface d’administration),
  • les modules : dans chaque application, ils correspondent aux parties du site (exemple, pour un blog, un module « article »),
  • les actions : pour un même module, il existe souvent plusieurs actions (pour revenir à notre blog, « ajouter un commentaire », « noter un commentaire »). Ces différentes actions peuvent modifier la page actuelle (notamment avec de l’AJAX, pour pas tout recharger).


Des conventions de partout…

Les concepteurs de Symfony s’appuient sur le principe « DRY » : Don’t Repeat Yourself. Inutile de répéter 15 fois à notre application que les fichiers de vue se trouvent dans le dossier untel par exemple.

Pour cela, de nombreuses conventions de nommages sont présentes ainsi que de nombreuses conventions afin de ranger ses fichiers au bon endroit…Appelez un champ d’une table « created_at », et hop, automatiquement, il se remplira avec l’heure de sauvegarde dans la base de chaque enregistrement. Et si, par hasard, on voulait passer outre certaines conventions, cela n’est pas un problème ! Tout se reconfigure très facilement.

Les fichiers de configurations sont « en cascades ». On peut définir un ensembles de configurations pour l’ensemble de l’application, puis, pour certains modules, modifier certaines parties de la configuration…

Ne pas réinventer la roue…

Autre philosophie appréciable dans ce framework : It does not reinvent the wheel:. Ce principe de ne pas réinventer la roue à chaque fois, ils l’appliquent directement à leur framework, en s’inspirant de différentes solutions déjà exisantes pour :

  • la base de données objet : propel
  • pour les tests unitaires : lime

La base de données objets semble un concept assez flou au départ… Mais on s’y fait vite ! Et ça ouvre de nouvelles possibilités !

Grace à ce framework, le dévoleppement se fait en « mode agile », c’est à dire qu’on peut très facilement ajouter ou modifier des parties de l’application (oui, on ne parle plus vraiment de site internet à ce niveau là :) ). La logique du framework oblige à une certaine organisation de ses fichiers, de ses classes… Tout est plus clair, et donc, plus facilement modifiable.

En conclusion…

Et pour finir cette présentation… une objection :

« Whether you are a PHP 5 expert or a newcomer to web application programming, you will be able to use symfony. The main factor in deciding whether or not to do so is the size of your project. »

Faut pas rêver… si tu n’a pas déjà de solides connaissances en PHP, inutile de regarder Symfony… Faut commencer tranquillement… A mettre son petit code PHP au milieu de ses pages HTML… Sinon, jamais tu ne comprendra l’intérêt d’un framework comme Symfony !

Et un point négatif enfin… La documentation en ligne… Plutot mauvaise… Rien à voir avec l’excellente doc PHP, qui mélange à merveille functions et exemples d’utilisation…

Pour conclure, la nouvelle version du PJEA sera probablement basé la dessus ! Mais c’est pas pour demain… J’ai à peine commencé les premiers schémas, les premiers « cahiers des charges »…

Pour approfondir :

Le site officiel : http://www.symfony-project.org/

Et notamment quelques tutorials sympas sur cette page : http://www.symfony-project.org/doc/1_1/

Là, j’ai attaqué un genre de gros tutorial, qui permet de réaliser ce site : askeet.

Bonne découverte :)

, ,

Présentation du PJEA

A l’origine, au début de la saison 2003, ce jeu a été lancé par Gagak, sur le forum du site wrc.com. Ce « Petit Jeu Entre Amis » consistait a envoyer un mail à Gagak avant chaque rallye, avec le pronostic des 8 premiers pilotes, ainsi que le « meilleur performer » (pilote qui remporte le plus d’épreuves spéciales). L’innovation du jeu, par rapport aux autres jeux de pronostics existants, se trouvait dans le calcul des points. Il récompensait autant d’avoir trouvé le 6ème que le 1er (surtout que bien souvent, les 3 premiers ne sont pas les plus durs à trouver…).

L’étape suivante fut la réalisation d’un site web basique, avec un formulaire qui envoyait par mail à Gagak les pronostics. C’est d’ailleurs à partir de ce moment que j’ai découvert le site.

Les calculs se faisaient encore à la main… et plus le nombre de joueurs augmentait, plus cela devenait ingérable. Cyr est arrivé à la rescousse, en automatisant le calcul avec un tableau Excel.

Devant son manque de temps pour contiuer à gérer le jeu, Gagak décida, durant l’année 2005, que ça serait sa dernière saison en tant qu’organisateur du PJEA. Je venais d’apprendre le PHP (sur l’excellent site du zéro), et je me proposait donc de reprendre la boutique, avec un site plus moderne, et où la majorité des calculs seraient automatisés (il suffit de rentrer le résultat final du rallye, et les points de chaque joueurs sont générés automatiquement).

La première version du site PHP (le langage de programmation utilisé pour réaliser le site) est sorti en janvier 2006, avec un pronostic de test « grandeur nature » sur le Paris-Dakar.

La version 1 (2006)

Les évolutions se sont alors enchainées, au rythme de mes nouvelles connaissances en PHP…

La V2, lancée en janvier 2007, était déjà plus aboutie, avec un design beaucoup plus « moderne ».

La version 2 (2007)

Puis, V3 en janvier 2008 qui, même si elle ne proprosait pas une grosse révolution en terme de design, était basée sur un moteur totalement différent, utilisant notamment le principe de la Programmation Orientée Objet.

La version 3 (2008)

Cette année, malheureusement, il n’y aura probablement pas de nouvelle version en janvier… Une nouvelle version est en projet, beaucoup plus puissante, totalement différente… Mais loin d’être prête… J’y reviendrai dans de prochains articles.

A bientot !