Archives mensuelles : décembre 2007

Bim Loic !

Tiens, ça fait longtemps que notre président des blogueurs, malheureusement pour nous expatrié aux USA (alors que toute de même, Sarko a gagné, y en a qui n’ont pas de parole) n’avais plus trop fait parlé de lui. (sauf pour la super conférence méga-hype du web 3 point zéro mais là, j’ai les dents du fonds qui baignent …)

Lolo a monté sa startup dans l’espoir secret de la revendre 100 millions de $ a Google.

J’ai testé et j’ai détesté. Rien que le concept de base je ne pige pas – faire un twitter de la vidéo … gasp !

Comme, zut, je suis en convalescence, je vous propose d’écouter ce qu’en dit Loren Feldman de 1938media.com. J’adore le « You’ve got VC money, hire a fucking designer ! »

Merci Gilles pour l’info.

Amazon complète son offre de services externalisés

J’en parlais déjà en 2006, il va de plus en plus être possible d’externaliser son infrastructure informatique.

Un pas vient d’être encore franchi par Amazon qui propose maintenant un service de base de données accessible via web service (REST et SOAP sont proposés).

voici :

Astuce symfony : ne pas charger une colonne lors de « l’hydratation » d’un objet

En fait c’est plutôt une astuce Propel ;-).

Quand vous chargez des données depuis la base (avec doSelect ou retrieveByPk) vous récupérez des objets complètement « hydratés ». C’est à dire que chaque objet représente une ligne de votre base de donnée avec autant de variables membres que de colonnes. Un problème évident peut survenir si votre table contient des champs lourds à charger comme des binaires (BLOB) si vous voulez stocker des images, ou des chaines très longues (CLOB) pour du XML par exemple. C’est autant de données qu’il faudra extraire et charger dans vos objets ; autant vous dire que ce n’est pas forcément anodin en terme de performance (et je parle d’expérience).

Une solution simple existe pour contourner ce soucis. Dans le fichier décrivant vos données (schema.yml) ajouter simplement lazyLoad: true dans la description de la colonne que vous ne désirez pas charger.

matable:
  id:
    type: INTEGER
    required: true
    autoIncrement: true
    primaryKey: true
  smallcol:
    type: VARCHAR
    size: 255
  bigcol:
    type: CLOB
    lazyLoad: true

Avec cette configuration, si je fais : MatablePeer::retrieveByPk(1), j’aurais un objet contenant uniquement les champs id et smallcol. Par contre, quand, sur mon objet, je ferais un ->getBigCol(), Propel lancera une requête (en fait un doSelectRS sur le champs en question) et récupèrera notre donnée.

Astucieux non ?

Astuce symfony : mesurer le temps d’exécution d’un bout de code

Voici le code permettant d’ajouter une entrée dans la liste des timers de Symfony. On peut écrire ce code dans une libraire, une classe de modèle etc ….

$timer = sfTimerManager::getTimer('hardwork !!!!');
myClass::workHardPlease();
$timer->addTime();

Les développeurs , en utilisant la barre de débogage de symfony, verront alors le temps consommé lors de l’exécution de myClass::workHardPlease et pourront, si nécessaire, passer un peu de temps à l’optimiser. (par défaut, Symfony nous montre le temps consommé pour parser les fichiers de configurations, jouer les requêtes sql, rendre les templates etc.)

ps : c’est une « astuce ». Si vous avez de vrai problèmes de performances un profiling plus complet avec un outils spécialisé (comme xdebug) sera vraisemblablement nécessaire.

I’m back !

Après vingt jours d’hôpital, je suis rentré chez moi avec grand plaisir.

J’ai eu quelques complications ce qui a allongé mon séjour. Le plus important est que la greffe du fiston a fonctionnée à merveille et qu’il se porte comme un charme.