Que sont les défis PHP ?

Selon le dictionnaire de l'Académie française, neuvième édition :

DÉFI n. m. XVe siècle. XVIIe siècle, au sens 3. Déverbal de défier.
1. FÉOD. Le fait de défier, en rompant la foi jurée. Par ext. Action de provoquer en combat singulier. Un insolent défi. Un défi téméraire. Envoyer, porter un cartel de défi et, ellipt., un défi à quelqu'un.
2. Auj. Action de provoquer quelqu'un à une lutte, à une compétition, à un jeu. Lancer, jeter un défi au tenant d'un titre. Accepter, relever un défi. Être stimulé par un défi. Expr. Mettre quelqu'un au défi de faire une chose, l'en défier, lui déclarer qu'on regarde comme impossible qu'il la fasse. Je vous mets au défi de prouver ce que vous avancez.
3. Le fait de tenir tête à quelqu'un, de s'opposer à son pouvoir, de le braver. Un air, un geste, un regard de défi. Une attitude de défi. Agir comme par défi. Fig. Un défi à la raison, à la justice. Cette décision, cette mesure est un défi au bons sens.
4. Obstacle ou ensemble d'obstacles qu'il faut franchir pour atteindre un certain objectif. Les défis de notre siècle. Le cancer est un défi lancé à la médecine. Le défi de l'inflation.
Doit être préféré à Chalenge.

La quatrième définition ci-dessus convient à ce que nous vous proposons. Il s'agit de vous affronter avec un ensemble de difficultés techniques afin de résoudre un problème technique.

Défi #01 : Développer une liste de tâches avec un framework PHP

Ce défi est terminé. Il a eu lieu du 20/06/2008 au 13/07/2008.

Sujet

Nous vous proposons de développer une application PHP en utilisant le framework de votre choix. Attention, vous devez utiliser un framework !
Pour cette édition du défi, l'application sera : un bugtracker (ou une liste de tâches).

Objectifs à remplir

L'objectif est de vous lancer un défi afin que vous découvriez un framework que vous ne connaissez pas encore. Bien entendu, reprendre du code tout prêt ne vous apprendrait rien, il faut donc l'éviter.

Il s'agit d'un défi, les participants devront donc investir de leur temps pour obtenir un produit acceptable.

Choix des technologies

Vous pouvez choisir n'importe quel framework open source (CakePHP, Prado, symfony, Zend Framework...) ou bibliothèque open source de composants (eZ, PEAR...).

La livraison devra contenir une archive compressée (format libre) contenant :
  • Les scripts de création de la base de données si nécessaire (SQL) ;
  • Les scripts de l'application ;
  • Les particularités de votre configuration (php.ini, httpd.conf etc.) mais pas la totalité de votre configuration ;
  • La documentation si disponible ;
  • Les tests si disponibles ;
  • Les instructions de mise en place de l'application ;
  • Le framework ou les composants utilisés.
Nous pourrons mettre en ligne les applications qui nous seront soumises, dans la mesure de certaines contraintes techniques :
  • Base de données compatible MySQL ;
  • Extensions minimales (installation PHP standard).

La mise en ligne des applications n'influera aucunement sur l'évaluation des propositions qui nous seront soumises.

Évaluation

Nous étudierons les propositions selon les critères suivants :
  • Bon fonctionnement de l'application : 30% du critère de réussite ;
  • Des efforts notables pour que le code soit écrit selon les standards définis par le framework choisi (organisation des répertoires, tabulations, motifs de conception...) : 30% du critère de réussite ;
  • Réutilisation d'éléments existants si nécessaire (sauf pour le cœur de l'application bien sûr) : 15% du critère de réussite ;
  • Sécurité minimale contre les failles courantes (XSS, CSRF, injection...) : 15% du critère de réussite ;
  • Un minimum de commentaires : 10% du critère de réussite.

La fin de l'évaluation donnera lieu à une remise de prix.

Le concours est ouvert à tous sans limites d'age, vous pouvez bien entendu vous appuyer sur les ressources de developpez.com tout au long du développement !

Les membres de la Rédaction de Developpez.com (étoiles rouges ou plumes rouges) peuvent participer pour faire vivre le concours mais ils ne sont pas éligibles pour la remise de prix. Les membres à plumes jaunes sont éligibles.

Bon courage a tous !

Ci-dessous un exemple de configuration pour ce défi, accessible dans ce cas par l'URL http://grossolini.localhost/ (correspond à la directive ServerName) :

Structure de répertoires
Sélectionnez
.../grossolini
.../grossolini/logs
.../grossolini/profiling
.../grossolini/tmp
.../grossolini/tmp/upload
.../grossolini/tmp/sessions
.../grossolini/www
Fichier httpd.conf (Apache)
Sélectionnez
# Guillaume Rossolini
<VirtualHost *:80>
    ServerAdmin email@domaine.tld
    ServerName grossolini.localhost
    DocumentRoot ".../grossolini/www"
    ErrorLog ".../grossolini/logs/apache.errors.log"
    TransferLog ".../grossolini/logs/apache.transfers.log"
    php_value error_log ".../grossolini/logs/php.errors.log"
    php_value upload_tmp_dir ".../grossolini/tmp/upload"
    php_value session.save_path ".../grossolini/tmp/sessions"
    php_flag xdebug.remote_enable Off
    php_flag xdebug.remote_autostart Off
    php_flag xdebug.xdebug.profiler_enable Off
    php_value xdebug.profiler_output_dir "...\grossolini\profiling"
    php_value include_path "..."
 
    <Directory ".../grossolini/www">
        Order allow,deny
        AllowOverride All
        Allow from all
    </Directory>
</VirtualHost>

Si vous utilisez ce type de configuration, n'oubliez pas d'ajouter le nom du serveur dans votre fichier "hosts" également.

Et voici enfin les gagnants du premier défi :

Dator

Image personnelleClémentProfil des forums a développé une application fonctionnelle et avec un visuel exceptionellement propre. On sent son professionalisme avec le soin qu'il apporte à l'interface utilisateur.
Son choix : http://zend-framework.developpez.com/
Image personnelle Télécharger son application : [FTPBucktracker avec Zend Framework (Dator)] ou [HTTPBucktracker avec Zend Framework (Dator)]
Changer le serveur Web de l'application :
Sélectionnez
define('ROOT_URL','http://cjobeili.localhost');
Corriger un bug de la base de données :
Sélectionnez
ALTER TABLE bugs DROP COLUMN fichier;

Developpez.com : En quelques mots, peux-tu nous dire ce que tu retiens de l'expérience ?

Clément : Cette expérience m'a beaucoup apporté, il faut savoir que la maîtrise d'un framework est longue et périlleuse mais c'est de la valeur ajoutée pour votre profil lors d'un recrutement. En choisissant Zend Framework, je me lançais dans un framework que j'avais vite écarté au départ mais je me suis rendu compte qu'il ne faut jamais rester sur ses premières impressions.

Developpez.com : Est-ce que tu utilises encore le framework que tu as découvert à l'occasion du défi ?

Clément : Évidemment ! Un apprentissage est toujours bon à prendre et j'ai pu trouver mon stage probablement grâce à cet apprentissage ! Néanmoins, Zend Framework est beaucoup trop complet pour un simple projet. Un conseil : étudiez bien votre projet avant de choisir un framework, c'est très important et fait partie entière de la gestion de projet (on appelle cela la phase de recherche et développement).

Developpez.com : Dans le cas contraire, as-tu appris grâce à ce framework des techniques que tu réutilises aujourd'hui ?

Clément : En regardant de plus près la construction des frameworks, je me suis rendu compte de l'intérêt des techniques de l'orienté objet comme par exemple les interfaces.

Developpez.com : Penses-tu qu'apprendre à utiliser différents frameworks (quoique pas nécessairement à 100%) soit utile à tout développeur ? Peux-tu donner des exemples de situations ?

Clément : Comme dit un peu plus haut, la connaissance d'un framework est un plus pour votre profil de développeur. De plus, on m'a toujours dit qu'un informaticien était fainéant (n'entendez pas là que je me tourne les pouces !), mais il ne faut pas ré-inventer la roue. Les frameworks sont là pour simplifier le développement, pourquoi ne pas s'en servir ?

Clément : Je voulais remercier toute l'équipe de developpez.com pour ce concours et je voulais ajouter que c'est très rare de trouver des concours de développement aussi sérieux en France, donc la prochaine fois, sautez sur l'occasion, ça vaut vraiment le coup !

Mahefasoa

Image personnelleMahefasoaProfil sur les forums nous a envoyé une application fonctionnelle mais avec une interface utilisateur peut-être un peu sobre.
Son choix : http://ellislab.com/codeigniter
Image personnelle Télécharger son application : [FTPBucktracker avec CodeIgniter (Mahefasoa)] ou [HTTPBucktracker avec CodeIgniter (Mahefasoa)]
Paramètres php.ini
Sélectionnez
short_open_tag=On

Developpez.com : En quelques mots, peux-tu nous dire ce que tu retiens de l'expérience ?

Mahefasoa : Avant l'avènement du Défi #1 PHP, je m'apprêtais à apprendre le framework Zend. Je commençais à m'habituer aux objets en PHP. J'avoue que c'est un peu difficile malgré les documents qui étaient en ma possession. Et j'ai trouvé CodeIgniter, un framework léger mais robuste, d'après mon avis et cela n'engage que moi, cela va sans dire. Il (le framework CodeIgniter) dispose d'une documentation, je dirais, complète et riche. Travailler avec un framework aide beaucoup à partir du moment où on a compris comment cela fonctionne. Et j'ai surtout appris deux choses : la première c'est le concept MVC et la seconde, les objets en PHP. Cette expérience m'a beaucoup aidé à comprendre les autres frameworks comme Zend Framework. Il est pour moi plus facile de l'aborder maintenant.

Developpez.com : Est-ce que tu utilises encore le framework que tu as découvert à l'occasion du défi ?

Mahefasoa : Je dois dire que j'en suis accro ! Le process est logique, et facile à comprendre. J'ai découvert des techniques de programmation que je pensais inaccessibles à mon niveau auparavant, mais qui ont été dévoilées très faciles. Après le défi, j'ai eu le temps d'apprendre davantage sur le framwork CodeIgniter et j'ai pas mal avancé. Et pour revenir à la question posée, la réponse est oui, je l'utilise dans tous mes projets web et je compte l'utiliser encore pour longtemps dans l'avenir.

Developpez.com : Penses-tu qu'apprendre à utiliser différents frameworks (quoique pas nécessairement à 100%) soit utile à tout développeur ? Peux-tu donner des exemples de situations ?

Mahefasoa : Je pense que oui, même si cette réponse est très relative. La plupart des offres de poste en développeur PHP nécessitent la connaissance (je dois dire maîtrise) d'un ou deux frameworks. Les frameworks sont des outils qui permettent de gagner un temps considérable dans le développement tout en le facilitant. Les entreprises choisissent d'utiliser le framework qui répond le mieux à leurs besoins. Et ce framework peut être n'importe quel framework populaire du moment. Mais il existe également des SSII qui préfèrent utiliser des frameworks maison, qui sont à peu près (mais pas dans tous les cas), une réinvention de la roue, un peu calqué ici et là et dont le produit est une roue de charrette à jante chromée. L'apprentissage de plusieurs frameworks permet au développeur, je crois, de mieux s'y intégrer, de le comprendre et ainsi de le maintenir.

Savageman

Image personnelleSavagemanProfil sur les forums a programmé une application fonctionnelle, quoique peut-être dans une moindre mesure que ses concurrents à cause de contraintes de temps.
Son choix : http://hoa-project.net/
Image personnelle Télécharger son application : [FTPBucktracker avec Hoa (Savageman)] ou [HTTPBucktracker avec Hoa (Savageman)]
Paramètres php.ini
Sélectionnez
output_buffering=8000
Corriger un bug de la base de données :
Sélectionnez
ALTER TABLE bugs ALTER COLUMN developper SET DEFAULT '1';

Developpez.com : En quelques mots, peux-tu nous dire ce que tu retiens de l'expérience ?

Savageman : Apprendre à utiliser un framework est une très bonne expérience. Ca oblige à 1) Lire de la doc, 2) Mettre en pratique. Dans mon cas, étant donné que le framework n'est pas terminé, ça permet au créateur d'avoir des retours également.
Je pense que c'est bien utile dans le milieu professionnel (gain de temps énorme, donc gain d'argent), bien que cette affirmation soit totalement gratuite, car je ne suis pas, mais vraiment pas du tout professionnel.

Developpez.com : Est-ce que tu utilises encore le framework que tu as découvert à l'occasion du défi ?

Savageman : Oui, je prévois de l'utiliser pour un site que je vais faire. Mais j'attends aussi les nouvelles fonctionnalités qui vont faire gagner encore bien plus de temps !

Developpez.com : Dans le cas contraire, as-tu appris grâce à ce framework des techniques que tu réutilises aujourd'hui ?

Savageman : Une bien meilleure compréhension de MVC.

Developpez.com : Penses-tu qu'apprendre à utiliser différents frameworks (quoique pas nécessairement à 100%) soit utile à tout développeur ? Peux-tu donner des exemples de situations ?

Savageman : Il est bon de connaître les différentes solutions proposées afin de pouvoir choisir la plus adaptée à nos besoins. Cependant, utiliser un framework à fond nécessite énormément de temps d'apprentissage pour avoir les connaissances nécessaires du framework ! C'est donc très difficile... Beaucoup (trop ?) de frameworks sont orientés MVC, et les gens n'ont donc que ça en tête. Peut-être découvrir des approches différentes en utilisant des techniques différentes (j'ai entendu que Prado fonctionnait bien différement) serait plus utile que de connaître plein de frameworks MVC.
Deuxième optique : on veut créer un framework. Dans ce cas, une étude approfondie de plusieurs frameworks réputés est une très bonne solution pour piocher ses idées !

Défi #02 : Développer un système de données géographiques pour afficher des services de proximité

Ce défi est terminé. Il a eu lieu du 08/01/09 au 05/02/09.

Sujet

Nous vous proposons de développer un système de données géographiques pour afficher des services de proximité

Objectifs à remplir

  • récupérer la localisation approximative de l'internaute ;
  • utiliser cette localisation pour afficher trois infos au choix (météo, concerts, horaires cinéma, etc.) ;
  • option : Proposer un système de mise en cache pour ne pas effectuer deux fois la même requête dans un temps donné.

Choix des technologies

Vous êtes libres de vos choix tant que vous utilisez PHP au maximum (limitez ou évitez AJAX par exemple).

La livraison devra contenir une archive compressée (format libre) contenant :
  • les scripts de création de la base de données si nécessaire (SQL) ;
  • les scripts de l'application ;
  • les particularités de votre configuration (php.ini, httpd.conf etc.) mais pas la totalité de votre configuration ;
  • la documentation si disponible ;
  • les tests si disponibles ;
  • les instructions de mise en place de l'application ;
  • le framework ou les composants utilisés.
Nous pourrons mettre en ligne les applications qui nous seront soumises, dans la mesure de certaines contraintes techniques :
  • base de données compatible MySQL ;
  • extensions minimales (installation PHP standard).

La mise en ligne des applications n'influera aucunement sur l'évaluation des propositions qui nous seront soumises.

Évaluation

Nous étudierons les propositions selon les critères suivants :
  • réutilisation d'éléments existants : 40% du critère de réussite ;
  • bon fonctionnement de l'application : 30% du critère de réussite ;
  • gratuité et légalité des données géographiques : 10% du critère de réussite ;
  • sécurité minimale contre les failles courantes (XSS, CSRF, injection...) : 10% du critère de réussite ;
  • un minimum de commentaires : 10% du critère de réussite.

Le concours est ouvert à tous sans limites d'age, vous pouvez bien entendu vous appuyer sur les ressources de developpez.com tout au long du développement !

Les membres de la Rédaction de Developpez.com (étoiles rouges ou plumes rouges) peuvent participer pour faire vivre le concours mais ils ne sont pas éligibles pour la remise de prix. Les membres à plumes jaunes sont éligibles.

Bon courage à tous !

Et voici enfin les gagnants du second défi :

Jean-François Lépine

Image personnelle Télécharger son application : [FTPDonnées localisées (Lépine)] ou [HTTPDonnées localisées (Lépine)]

Developpez.com : En quelques mots, peux-tu nous dire ce que tu retiens de l'expérience ?

J.-F. : Cette expérience m'a permis, dans la mesure où elle m'a fait me pencher sur un sujet précis sans connaissances a priori, de faire un travail de veille très intéressant, tant au niveau technologique (choix de la solution) que conceptuelle (comment faire en sorte que la solution proposée soit la plus pérenne possible).

Developpez.com : Avais-tu déjà abordé un sujet similaire (milieu professionnel ou personnel) ?

J.-F. : Non, jamais. J'ai toujours été intrigué par la pertinence de publicités localisées, ça a été pour moi l'occasion de voir comment cela fonctionne.

Developpez.com : Le langage PHP te semble-t-il adapté pour ce genre d'applications ?

J.-F. : Oui, tout à fait. Non seulement parce qu'il propose pour chaque aspect de la question une solution, en permettant par exemple de connaître facilement des informations côté client ; mais aussi parce qu'il dispose d'une communauté très large, ce qui m'a permis de trouver de nombreuses ressources et pistes très utiles, notamment sur developpez.com.

Developpez.com : Quelles ont été les difficultés que tu as pu rencontrer ?

J.-F. : Ma principale difficulté a été de proposer un modèle qui puisse évoluer facilement vers des plugins, que l'on puisse ajouter très facilement. La seconde a été de trouver des sources de données efficaces : flux RSS, sites web... Au final, il s'avère que Google proposait par lui seul un large panel de données (cinéma, météo...). Enfin, il a été très difficile de choisir entre l'utilisation d'un Web Service pour récupérer les données de localisation, et celle d'une base de données. Je pense que le choix n'a pas à être définitif et doit être adapté à chaque situation. Dans mon cas, la légèreté primait, j'ai donc choisi le Web Service...

FlocalistiX (LogistiX & Flo.87)

Image personnelle Télécharger leur application : [FTPDonnées localisées (FlocalistiX)] ou [HTTPDonnées localisées (FlocalistiX)]

Developpez.com : En quelques mots, pouvez-vous nous dire ce que vous retenez de l'expérience ?

FlocalistiX : Sur le plan technique, que PHP devient mûr. Sur le plan pratique, que l'on peut mettre tous les efforts de programmation que l'on veut, quand il n'y a pas de données, on crée du vent. Sur le plan humain, qu'un projet est plus sympa à deux (et à plusieurs en général), avec toute l'organisation que cela implique (SVN, etc.).

Developpez.com : Aviez-vous déjà abordé un sujet similaire (milieu professionnel ou personnel) ?

FlocalistiX : Nous avions eu un cours abstrait sur ce sujet (le défi était, à la base, l'occasion de réviser le partiel...), mais au final le décalage entre théorie et pratique est assez impressionant (et la note aussi... ahem).

Developpez.com : Le langage PHP vous semble-t-il adapté pour ce genre d'applications ?

FlocalistiX : Oui et non.
Le PHP est un langage de script : il est "lent" quand il s'agit de faire de l'algorithme ou des longues mises à jour (des bases de fichiers XML dans ce cas précis).
En revanche, le PHP objet permet désormais des architectures tout aussi claires qu'en Java, et réactives. Il devient mature, en termes de librairies (XML, Templates, etc.). Nous n'avons pas eu de problème "sans solution technique immédiate".

Developpez.com : Quelles ont été les difficultés que vous avez pu rencontrer ?

FlocalistiX : À bien y regarder, nous n'avons rencontré qu'une seule grosse difficulté : trouver les données. Récupérer l'IP de l'utilisateur est aisé, encore faut-il pouvoir la mettre en relation avec une ville. Et une fois cela fait, il faut encore déterminer pour chaque service la ville la plus proche pour laquelle nous avons des informations. Et, trouver les informations, si cela est simple pour la météo, c'est de suite beaucoup moins drôle pour les horaires de cinéma...