Damien ALEXANDRE

Aller au contenu | Aller au menu | Aller à la recherche

jeudi, mars 24 2011

[Symfony2] Quelques protips / remarques pour débuter

J'ai l'occasion de pas mal jouer avec Symfony2 en ce moment, en plus d'avoir donné une conférence en début mars sur le sujet, je développe un petit site personnel.

Et il faut bien avouer que le la philosophie derrière SF2 est très loin de celle à laquelle nous somme habitué avec symfony. Bref les débuts vont être rudes. 

Bien que la documentation soit pleine d'informations très utiles je voulais partager avec vous quelques points à prendre en compte, des erreurs que j'ai commise, des protips (ou pas) sur le développement d'une première application en Symfony2. Here we go.

Définir la collation (encodage des tables) dans Doctrine2 :
il n'est pas possible de spécifier une Collation (tel qu'on la connait dans MySQL) pour votre base de donnée ou vos table dans Doctrine2. Le DBAL connait la syntaxe mais les annotations correspondantes pour vos entities n'existent pas. Et la commande ./app/console doctrine:database:create ne sait pas ajouter une collation.
Donc si vous voulez utiliser une collation différente de la valeur par défaut de votre serveur MySQL, vous devez créer la base de donnée à la main. Les tables hériterons de la collation de la base de donnée.
Si vous utilisez UTF8, n'oubliez pas d'ajouter l'option "charset" dans la configuration de votre connexion au dbal.

doctrine:
    dbal:
        default_connection: default
        connections:
            default:
                charset:  utf8

Faire attention au cache des métadonnées :
Si vous vous souciez ne serait-ce qu'un peu des performances de votre applicatif, vous avez activé le cache APC :

doctrine:
    orm:
        entity_managers:
            default:
                metadata_cache_driver: apc

C'est très bien mais sachez que n'importe quelle modification d'annotation nécessitera de vider le cache APC. En général, on fait l'erreur UNE fois. :-)

Attention aux copier/coller :
Pour utiliser les annotations Doctrine2 dans Symfony2, il faut systématiquement les préfixer avec "orm:". Le piège est que toute la documentation de Doctrine2 est dédiée à ce dernier, et ne prend pas du tout en considération le contexte dans lequel il est utilisé. Donc tous les exemples de la documentation sont sans le fameux préfix.

Utiliser une annotation non préfixé n'aura aucun effet, vous n'aurez ni erreur, ni fonctionnalité. Attention aux copier/coller donc !

vendredi, mars 11 2011

[Doctrine] Comment éviter les fuites de mémoire

Un des problèmes souvent rencontré avec Doctrine 1 est qu'il fait plein de références cyclique, et que le garbage collector de PHP a du mal à réclamer sa mémoire.

La solution est simple, il faut explicitement libérer les Doctrine_Record, Doctrine_Collection et Doctrine_Query après utilisation (via la méthode free()). 

Sachez qu'il existe une option... non documentée (wahou top secret #protips approaching!!) qui permet de libérer automatiquement la mémoire de vos Doctrine_Query :

public function configureDoctrine(Doctrine_Manager $manager)
{
  $manager->setAttribute(
    Doctrine_Core::ATTR_AUTO_FREE_QUERY_OBJECTS, true
  );
}

Voilà c'était facile mais attention. Cette option est à utiliser avec précaution.

Déjà, ce n'est utile que si vous créez de nombreuses requêtes Doctrine dans votre action. Ça peut être le cas dans un batch par exemple. Ensuite, il faut savoir qu'après un ->execute(), vos Doctrine_Query ne seront vraiment plus du tout utilisable. 

Il est en effet courant de créer une Query une seule fois, et de l'appeler plusieur fois avec un tableau de paramètre différent. Avec l'option présenté précédemment, ça ne fonctionnera plus.

EDIT : Suite à un commentaire de Bastien, je découvre tout juste un autre #protips pour combler les fuites de mémoire de Doctrine !

Sur ma task (qui s’exécute par défaut dans l'environnement "dev"), je viens de gagner 150% de mémoire... L'astuce est de désactiver le profiler de Doctrine, dans votre database.yml :

# Disable profiler for import in task
  dev:
    doctrine:
      class: sfDoctrineDatabase
      param:
        profiler: false

J'ai envie de dire : awesome. Merci Rémiz.

samedi, mars 5 2011

Retour sur mon symfony live 2011

Comme tous les ans depuis 2009 à eu lieu le Symfony Live, deux jours de conférences concernant le framework PHP du même nom.

Pour la première fois EVER, j'y ai animé une conférence, avec mon collègue et buddy Xavier Lacot. On a parlé de REST, de Symfony2 et de poney. Vous trouverez toutes les informations, les slides et autres #protips sur le site dédié : http://symfpony-project.org/.

J'ai pu assister à des conférences très intéressantes sur Git, PhpBB4... mais c'est surtout Symfony2 que je voulais voir.

Je retiens qu'il faut absolument (si on souhaite en faire une utilisation poussée) se pencher sur le fonctionnement de l'injecteur de dépendances de Symfony2. En gros, les vrais badass n'utilisent pas les Controller comme dans l'exemple de la sandbox,
ils passent par le DIC. Et grâce à ça, ils injectent exactement les services dont ils ont besoin dans leur controller (et accessoirement, ça rend possible les test unitaires).

J'ai enfin pu voir en live le BaseApplicationBundle AdminBundle, qui est déjà bien avancé (même si les fichiers de configuration sont... sacrement verbeux). J'en ai appris un peu plus sur Varnish : le fait qu'il soit "programmable" rend ce reverse proxy très configurable / tweakable - la version 3 va sortir très bientôt (dans la semaine ?). Ah et la conférence sur les Forms était elle aussi très intéressante. Le nouveau composant change radicalement des vieux sfForms et devient plus cohérent. 

Dans l'ensemble les conférences étaient intéressantes mais pas dans le sens d'un SF Live 2009 / 2010. On était beaucoup plus sur de la présentation de feature, d'exposition de concepts ou de standards que du killer code / exemple concret. Forcement, Symfony2 n'est pas stable.

La grosse annonce des deux jours c'est bien sûr le symfony pad nouveau logo :

Ainsi que le nouveau site : http://symfony.com/ (qui n'est pas fini, mais on peux espérer y voir enfin une vraie "marketplace" des Bundles / plugins). J'espère que symfony 1 aura toujours sa place sur le site d'ailleurs - il n'est pour le moment pas possible d'y trouver la documentation. 

Comme tous les ans, le cadre fait plaisir : l’évènement se situe à la Cité Universitaire Internationale de Paris et j'aime beaucoup :-) Les intervenants sont tous de qualité et le staff disponible et serviable.
J'ai bien aimé aussi la soirée des intervenants, dans un bar sympa du 15éme arrondissement.

Dans les points négatifs, parce qu'il en faut (c'est comme ça qu'on s'améliore, n'est-ce pas ?), je noterais :

  • le wifi peu performant
  • la salle B toute petite, sans micro et avec une toute petite projection
  • le scandale du polo : je n'ai pas eu droit au polo "Speaker SFLIVE 2011", pour cause de rupture de stock... WTF??? Je m'en remettrais pas (Sérieusement c'est la loose...).
Sinon j'étais aussi au GitHub Drinkup le vendredi soir, une très bonne occasion de parler avec des geeks autours de bières gratuites :-) Merci Github <3

mardi, mars 1 2011

[Hudson] Corriger l'erreur Illegal address in string

Petit protips du mardi, 
avec Hudson on peux configurer les jobs pour qu'un mail soit envoyé en cas de fail (on a pas toujours un écran de monitoring ou un onglet en rabe sous la main).

C'est cool mais voilà l'erreur qui m'était remontée :

ERROR: Illegal address
javax.mail.internet.AddressException: Illegal address in string ``''
at javax.mail.internet.InternetAddress.(InternetAddress.java:94)
at hudson.tasks.MailSender.createEmptyMail(MailSender.java:296)
at hudson.tasks.MailSender.createBackToNormalMail(MailSender.java:157)
at hudson.tasks.MailSender.getMail(MailSender.java:150)
at hudson.tasks.MailSender.execute(MailSender.java:82)
at hudson.tasks.Mailer.perform(Mailer.java:101)
at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:19)
at hudson.model.AbstractBuild$AbstractRunner.perform(AbstractBuild.java:582)
at hudson.model.AbstractBuild$AbstractRunner.performAllBuildStep(AbstractBuild.java:563)
at hudson.model.AbstractBuild$AbstractRunner.performAllBuildStep(AbstractBuild.java:550)
at hudson.model.Build$RunnerImpl.post2(Build.java:152)
at hudson.model.AbstractBuild$AbstractRunner.post(AbstractBuild.java:528)
at hudson.model.Run.run(Run.java:1266)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
at hudson.model.ResourceController.execute(ResourceController.java:88)
at hudson.model.Executor.run(Executor.java:122)

La solution est super simple (mais je la blog, histoire de bien me souvenir du pourquoi j'ai perdu une demi-heure sur du rien), il faut obligatoirement préciser un mail "admin" dans votre configuration globale (dans /configure, "Adresse email de l'administrateur système"). C'est tout. 

jeudi, janvier 27 2011

Un été sous le signe du gros son

Article musical, tous les liens pointent vers Spotify.

Je sais pas si vous avez suivis l'actualité des festivals de cet été 2011 en France, mais ça s'annonce violent. 

Pour commencer le Hellfest qui vient tout juste d'annoncer les derniers gros groupes :

Rob Zombie : C'était une de mes plus grosse attente pour cette année, après l'annonce d'une tournée européenne, il ne pouvait PAS rater la France. 20 ans qu'il n'est pas venu, l'auteur de Dragula (que je dois écouter depuis que je suis tout petit, la faute a un jeu de snowboard sur Playstation 1 ^^) assurera la dose de sexy / gore / gros son.

Iggy et les Stooges : Vu l'été dernier à l'Olympia (merci Mathieu \m/), grosse claque, le mec a 63 ans mais tel un Ozzy ou un Kilmister, sa pêche et son charisme n'ont d'égaux que son talent (ouh la belle phrase). D'ailleurs Ozzy Ozbourne sera de la partie aussi. Je l'ai vu en septembre dernier à Bercy et c'était vraiment très bon (bien plus que Korn qui assurait la première partie...).

MESHUGGAH : Ça s'écrit en majuscule tellement c'est violent, vous connaissez peut-être Bleed ou Combustion ?

Disturbed : Un groupe de métal Américain pas trop mal. 5 albums qu'ils nous resservent la même soupe mais j'aime bien, la voix de David Draiman y est pour beaucoup !

KYUSS LIVES! : Très grosse surprise, la re-formation (presque) complète de Kyuss passera bien en France (on pouvait en douter, la date à l'Élysée Montmartre ayant été annulée). Rien que pour revoir le smile de Brant Bjork sur scène avec Nick Oliveri, ça le fait. Kyuss c'est le groupe de Stoner Metal Californien qui est un peu à l'origine de Queens Of The Stone Age et Fu Manchu, c'est un des groupes pillier du genre et je les manquerait pas !

Opeth : Que dire, je suis un fan boy donc j'étais évidement au Bataclan en avril dernier pour leur 20 ans. Écoutez donc moi ça si c'est pas beau !

The Cult : Un des groupe phare du Heavy Metal des années 80/90. Ils ont ressortis un album il y a 4 ans, mais c'est les classiques que je veux entendre moi !

Trust : Ouais ouais je parle bien du groupe de hard rock Français des années 80, Antisocial toussa. 

Monster Magnet : Encore du Stoner mais pas n'importe lequel ! Je les avait vu en 2008 je crois, dans une petite salle vers Pigalles. Dave Wyndorf a une superbe présence et ça envoie vraiment du lourd en live. Un petit extrait pour vos oreilles.

Hellfest

Je ne vais pas tous les citer, Judas Priest, Anathema, Morne, Corrosion Of Conformity, Karma To Burn... Aller, TOUS À CLISSON ! \m/

S'en suis le Sonisphere au mois de Juillet. Pour le première fois en France, les Big Four (Metallica, Slayer, Anthrax et Megadeath) et Slipknot le premier jour. La encore c'est du lourd, et ça va se dérouler au Parc d'AMNEVILLE en Lorraine ! 

Il reste encore des groupes à annoncer, le Sonisphere accueil des groupes tel que Motörhead, In Flames, Iron Maiden, Alice Cooper cette année. Pourquoi pas en France ? (je vote pour Motörhead merci).

Pour continuer dans la rumeur et dans l'espérance, on parle de The Cure pour Rock En Seine 2011... ça le ferait grave non ?

jeudi, janvier 13 2011

Pragmatic Guide to JavaScript

J'ai lu un livre. Oui, tu ne rêve pas. Il était en papier, et sans images. Je te jure.

D'après Oncle Tom (à qui je dois ce plaisir) ça parlait de Javascript et de Poney alors je l'ai lu. Il n'y avait pas de Poney.
Par contre c'était plein de bon sens et de bonnes pratiques.

Écrit en Anglais par Mr Porteneuve, le livre fait le tour des cas d'utilisations les plus courant de Javascript sur le web, et y expose la ou les solutions, accompagné de code pour les frameworks javascript majeurs (tel que jQuery et Prototype).

Ça va du truc super simple comme une validation de champ, une délégation d'event, à comment faire pour ne pas faire freezer un navigateur lors d'un traitement lourd en JS. Tous le code d'exemple du livre est disponible et c'est une très bonne source sur l'état de l'art actuel : https://github.com/tdd/pragmatic-javascript/.

Pragmatic Guide to JavaScript est donc à mettre entre toutes les mains : même en ayant de très bonnes notions de Javascript, l'ouvrage ne m'a pas laissé indifférent et je pense avoir affiné ma technique. Il est cependant à la porté de tous le monde car très didactique et plein de #protips. Je note d'ailleurs le très bon récapitulatif sur le débogage JS en annexe.

Bientôt un petit billet sur YQL, execute et Lastfm. Peut être (l'idée c'est que j'ai fais un petit mashup dont je ne suis pas mécontent et je le publierais, un jour). Bisou.

- page 1 de 45