RSS
 

30 articles de qualité sur CakePHP ?

20 août

Hier soir Felix Geisendörfer annonçait sur son blog qu’il se lançait encore une fois un challenge personnel : écrire tous les jours avant 9h du matin (heure allemande) un article sur son blog pendant 30 jours. Afin de se motiver, il se fixe une sanction … celle de donner 50€ à la première personne qui se rend compte qu’aucun message n’a été publié à 9h.

Ce challenge et ce type de self-motivation avait déjà été mis en place auparavant, mais il avait échoué à un jour de la fin du contrat … et avait fini la tête dans un gâteau :D Ce coup-ci, la technique de motivation est celle du « 30 jours pour réussir » qui se base sur le principe suivant :

Lorsque l’on veut prendre une bonne habitude, faisons (comme pour un logiciel !) une période d’essai de 30 jours durant laquelle on se force à s’y tenir. Au bout de ce laps de temps, on saura quelles sont les choses à améliorer, si cela en vaut la peine … et en 30 jours cela sera même sans doute devenu une habitude !

En tout cas, cela nous promet sans doute (on l’espère pour Felix !) 30 articles de qualité sur CakePHP que je vous propose de lister ici.

Le challenge est terminé, retrouvez la liste des articles et régalez-vous !

Voici la liste des articles publiés par Felix Geisendörfersur son blog dans le cadre de la série « 30 days challenge ». Si vous souhaitez plus d’informations, une traduction ou un avis sur un de ces articles n’hésitez pas à m’en faire part par le biais des commentaires, je me ferais un plaisir de vous aider !

  1. requestAction considered harmful : pourquoi vaut-il mieux éviter d’utiliser la fonction requestAction dans un contrôleur ? En plus de problèmes de vitesse qui sont immédiats, il nous explique dans cet article que l’usage de cette méthode complique beaucoup plus le débogage. Il donne également un exemple pour voir comment contourner l’appel à cette fonction dans un cas concret.
  2. String substitution using UUIDs : une petite astuce permettant de « crypter » momentanément une partie de chaine de caractère avant de la « décrypter » plus loin. J’utilise les termes crypter/décrypter car cela revient à cela au final, mait c’est en fait remplacer une chaîne de caractère par un UUID. L’exemple qui est détaillé est une solution pour ne pas effectuer un traitement sur une partie de chaîne de caractère : on la « crypte », on effectue le traitement et on la « décrypte » … elle est restée telle quelle. Note : premier changement dans le challenge … durant le week-end les posts seront rédigés la veille au soir et publiés automatiquement afin de s’autoriser des grasses matinées ! :D
  3. Hacking the wires : première pirouette … cet article permet de recadrer un précédent article du blog indiquant un astuce pour se connecter à internet depuis l’aéroport d’Atlanta. Il n’y a donc rien de spécial à noter, si ce n’est que leur firewall autorise tous les fichiers aux extensions « images » à être récupérés depuis le web. Donc pour voir cet article depuis Atlanta, tapez ceci : http://www.pierre-martin.fr/cakephp/30-articles-de-qualite-sur-cakephp/?jpg :)
  4. Two CakePHP tricks : deux astuces n’ayant aucun rapport entre elles, mais néanmoins utiles (à garder dans un coin de tête). Le première consiste à « jouer » avec la propriété debug de Cake lorsque l’on veut déboguer un seul appel à une méthode au sein d’une batterie de tests. La seconde explique comment faire et intégrer un fichier de configuration dans son application.
  5. Simple Data Access Control : l’article aborde une manière de gérer le droit d’accès a une ressource. Au lieu de centraliser la vérification du droit de l’utilisateur depuis le contrôleur, Felix suggère de regrouper cette logique dans les modèles (par exemple ici dans User qui effectuera un appel vers Post). J’ai en tout cas découvert une utilisation élégante de Assert::xxxx qu’il est tout de même bizarre à voir en dehors de fichiers de tests ! :D
  6. I believe in Symmetry : un article court qui prône la « programmation par similitude », c’est-à-dire pouvoir réutiliser sans soucis le code effectué par ses collègues. Avec CakePHP, on peut dire qu’on fait déjà pas mal de chemin en ce sens ce qui est à mon avis un gain considérable pour une entreprise. En effet, au lieu d’avoir ses propres conventions internes et former tout nouvel employer à celles-ci, recruter une personne connaissant CakePHP permet de réduire cette phase de formation.
  7. Passing controller variables to your Javascript : une solution à un problème qui s’est déjà peut-être posé à vous ou qui le sera prochainement … l’intégration de valeurs Php dans vos Javascripts. La solution est très efficace bien que le code source résultant (généré dans le code source HTML) ne soit pas génial car c’est la serialization d’un objet.
  8. HDD surgery for my MacBook Pro : voici le démontage d’un MacBook … voilà ! Ce post a été posté en retard sur l’heure prévue, mais ce n’est toujours pas le premier échec du challenge car un premier article minime avait été posté dans les temps. Au suivant :)
  9. Normalizing CakePHP model records : une méthode vraiment intéressante pour pouvoir rendre un enregistrement quelconque sous la forme « normalisée » de CakePHP. Ainsi, plus la peine de se soucier de la forme de l’enregistrement il suffit de le normaliser !
  10. Lookupable Behavior : ici Felix fournit un Comportement permettant de s’abstraire de la séparation d’un champ de type « status » (dans l’exemple) situé dans une table différente du modèle que l’on manipule. Je vous conseille de lire l’article pour mieux comprendre (j’avoue avoir un peu de mal à expliquer mieux que ça !!)
  11. Cloud Behavior : voici un Comportement permettant de récupérer l’information nécessaire (le poids d’un élément) à la réalisation d’un nuage de tags … voilà c’est tout !
  12. Askimet datasource : Askimet est un webservice permettant de détecter le spam dans des champs de saisies tels que les commentaires sur un blog. Voici un datasource permettant son intégration (visiblement très simple) au sein d’une application Cake. Note : je n’ai pas trop analysé le fonctionnement.
  13. Datasource, Models, Components, Behaviors : Voici un article que j’ai trouvé intéressant car il lance un débat plus « conceptuel » sur les choix de l’architecture d’une application. La datasource Askimet a fait couler beaucoup d’encre car cela permet de « valider » une information, et n’est aucunement une « source de données ». Ainsi divers avis sont exposés afin de rendre ceci plus « Cake friendly » en utilisant un Component ou un Behavior. Personnellement, je rejoins l’avis des commentaires … utiliser un datasource n’est pas la meilleur conception possible !
  14. Text expander & Apple Mail recipient name auto-insertion : petite astuce pour répondre encore plus vite aux mails sous Mac … pas mon cas !
  15. Mi-temps : un article à tendance philosophique sur le challenge qu’il s’est lancé … cela avance bien, et je trouve vrai qu’en 15 articles nous avons pour le moment eu de quoi réfléchir un peu et découvrir sur CakePHP
  16. Fixturize shell – Generate your fixtures automatically : voici un utilitaire qui va faire plaisir à pas mal de gens. Dès lors que l’on utilise les tests unitaires dans son application on se rend compte de la lourdeur de créer des « fixtures » (jeux de données). Ce script permet de les générer automatiquement depuis votre base de données existante … utile si vous avez déjà commencé à y rentrer quelques valeurs !
  17. Workshop day 1 : premier message n’ayant pas été posté dans les délais, il récapitule le premier jour du rassemblement autour de CakePHP qui avait lieu à Raleigh. La plupart des acteurs majeurs de la communauté étaient présents dans une ambiance qui semblait conviviale !
  18. Workshop day 2 : encore des photos … mettez des visages sur des pseudos !
  19. Use the terminal : amis qui êtes sous mac ou unix (j’aurai même tendance à dire que c’est possible sous windows !), inspirez vous des astuces pour utiliser des commandes qui vous feront gagner du temps de développement.
  20. Workshop application : intéressante mise à disposition du code final de l’application finale développée au cours du Workshop CakePHP qui se termine. Du code écrit par la « core team » comme on dit, donc j’imagine assez propre et utilisant la plupart des facilités fournies par Cake. Note à moi-même : jeter un coup d’œil !
  21. Why UUIDs : Un article intéressant justifiant le fait d’utiliser les UUIDs (Identificateurs Uniques) plutôt que des id classiques. Personnellement je n’utiliserai toujours pas les UUID comme paramètres dans l’url, cependant les UUIDs sont définitivement à utiliser plus souvent.
  22. XPath on PHP Arrays : Une fonctionnalité méconnue (enfin que je ne connaissais pas) des raccourcis de Cake. Comment naviguer simplement dans un tableau … avec une syntaxe XPath.
  23. Recommended reading : Quelques blogs et articles intéressants
  24. Relative urls in JavaScript : Un article intéressant (encore une fois) pour pouvoir utiliser des urls relatives depuis un code Javascript. Felix propose la mise en place d’un tag « base » contenant l’url de la racine du site dans le code HTML. Ensuite c’est juste du JS ! ;)
  25. Jac: Comment box name autocompletion : Une portion de code pour pouvoir faire une auto-complétion de nom d’après les pseudos contenus dans la page (comme sur un channel IRC) …
  26. The linguistic of Programming : Quand on est codeur on comprend ce message … l’idée est vraiement sympathique : la création d’un « genre » de dictionnaire inter-langage pour pouvoir retrouver une fonction équivalente dans un autre langage. Les commentaires sont à lire également :)
  27. Installing PHP5.3 via MacPorts : Avis aux utilisateurs de Mac … personnellement je n’ai pas tout saisi !
  28. PHP Code generator : Une classe permettant d’aider à l’indentation et l’écriture dans un fichier de code PHP.
  29. 30 days later : C’est ici que se termine le challenge. Seulement 2 posts en retard, et je dois l’avouer … pas mal d’articles intéressants, je ne pensais pas ça ! Un petit bilan du challenge.
  30. … hum hum … si vous avez suivi, j’avais un article de décalage ! J’ai reparcouru tout le site pour trouver quel jour avait été fait l’oubli et j’ai trouvé (c’est dans les quelques permiers articles). A vous de retrouver l’article oublié ! :D (NIARF NIARF !)

N’hésitez pas à réagir sur un de ces articles ou sur cette méthode de motivation … à vos claviers !

Pensez à utiliser mon flux RSS pour vous tenir au courant des futurs articles ! Vous pouvez aussi me retrouver sur Twitter pour une actualité plus fréquente.

 
5 Comments

Posted in En vrac

 

Tags: , ,

  • http://puncake.net foxmask

    Bonjour,
     » Pour le post 1 des 30jurs  » :
    je dirai que pour le moment je suis « dans les buts » en n’abusant pas des requestAction mais en les mettant là où je n’ai pas le choix.
    Comme par exemple dans des éléments qui ne sont pas lié à la vue courante et qui ont besoin de données d’autre tables (que la vue courant toujours)
    Exemple : un element affichange les stats d’un forum alors que la vue courante est /news/index
    Cdt

  • http://www.pierre-martin.fr real34

    Bonjour foxmask et merci pour ton commentaire !

    Dans ton cas, pourquoi ne pas faire un appel à une méthode de ton modèle « stats » et passer le résultat à ta vue d’index ?
    Ex : $this->set(‘stats’, $this->Stat->getNumberOfPosts()); // Ou quelquechose de ressemblant …

  • http://www.foxmask.info foxmask

    En aucun cas $this->set(’stats’, $this->Stat->getNumberOfPosts()); dans ma vue index de mon plugin /news/ ou /articles/ ne peut être utilisé.
    C’est trop fastidieux d’avoir à ajouter the $this->set() pour « completer » les données de la vue index.  » Stats  » est un exemple mais j’ai plein de petits elements comme celui ci qui certes par economie de requestionAction pourrait etre mis dans la methode index mais cela deviendrait inmaintenable pour le code.

  • http://www.pierre-martin.fr real34

    Je pense au contraire que cela pourrait permettre une meilleure lisibilité (et visiblement de meilleures performances) car cela ne « casse » pas le côté MVC de l’application.

    Si c’est ajouter plusieurs fois les mêmes lignes, rien n’empêche de créer une méthode « commune » aux contrôleurs « getAllThatFuckingStuf() » que tu appellerais là où tu en as besoin … ou dans toutes tes vues si nécessaires (mais là tu pourrais ajouter une gestion du cache).

    C’était simplement une idée car je pense qu’il vaut mieux avoir tout envisagé avant de se lancer dans requestAction() (ou toute autre bidouille) … mais bon, si cela fonctionne :roll:

  • http://www.foxmask.info/ foxmask

    En aucun cas $this->set(’stats’, $this->Stat->getNumberOfPosts()); dans ma vue index de mon plugin /news/ ou /articles/ ne peut être utilisé.
    C'est trop fastidieux d'avoir à ajouter the $this->set() pour « completer » les données de la vue index.  » Stats  » est un exemple mais j'ai plein de petits elements comme celui ci qui certes par economie de requestionAction pourrait etre mis dans la methode index mais cela deviendrait inmaintenable pour le code.