Yii Framework – Une extension pour la mise en cache des data providers (et plus encore…)

Yii Framework

De retour avec une petite extension pour Yii Framework concoctée par votre serviteur.

Yii 1.1 a introduit un certain nombre de classes assez pratiques dont une classe reprenant le concept de data provider pour les active record : CActiveDataProvider.

Cette classe est intensivement utilisée par certains widgets dont CGridView en particulier.

Par ailleurs, Yii 1.1.7 permet désormais de gérer la mise en cache aisée des requêtes des Active Record permettant des gains de performance et un soulagement de la base de données. Malheureusement,  CActiveDataProvider n’a pas été adaptée pour tirer partie de cette possibilité. Qui plus est, cette classe comporte un bug assez embêtant : dès lors que votre Active Record utilise des critères ‘having’ et/ou ‘group’, le nombre d’éléments résultants calculés par le data provider n’en tient pas compte (produisant des effets indésirables, notamment sur les paginateurs qui affichent un nombre de pages incohérent).

En attendant d’éventuelles évolutions et corrections natives, vous pouvez utiliser mon extension EActiveDataProviderEx afin de pouvoir bénéficier du cache et de la correction du compte du nombre d’éléments à télécharger sur le site officiel de Yii Framework.

Lire la suite…

Categories: PHP Tags: , ,

PHP : c’est de l’hébreu…

…et ce n’est pas qu’une expression :)

Petite aventure qui m’est arrivée cette semaine. Je testais une nouvelle extension Yii lorsque, une fois installée sur mon serveur, j’obtiens ce message d’erreur en la testant :

Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM

Woaou ! Je vous demande pardon ? Ca y-est, mon serveur devient dingue ou alors je suis dans un épisode de Fringe…

Après quelques recherches sur le net, en réalité, il s’avère que mon serveur n’y est pour rien (pas plus de Massive Dynamics). Il s’agissait en fait d’une petite erreur de syntaxe dans l’extension qui, si elle est exécutée sur un PHP avec APC activée (optimiseur de code), déclenche le dit message.

Explication :

Le message d’erreur est en hébreu, littéralement. Deux développeurs de PHP 3 et Zend Engine 0.5 (Zeev Suraski et Andi Gutmans) qui sont les auteurs du message en quetion sont d’origine israélienne. En traduisant, T_PAAMAYIM_NEKUDOTAYIM veut dire « Token double deux-points ». Initialement, il ne devait s’agir que d’un message à destination interne. Seulement voila, dans certaines conditions, le message fait surface.

En l’occurrence, dans mon cas, il s’agissait d’une mauvaise utilisation d’un accès à une méthode statique d’une classe. Pour les non-familiers avec le concept, un petit tour vers la documentation officielle s’impose. Par exemple dans Yii, pour ne pas être obligé d’instancer un nouvel objet AR, on peut accéder à la méthode model grace à la notation NomClasseAR::model() (notez les doubles deux-points). APC cependant ne semble pas trop apprécier le fait d’accéder à ces méthodes via une variable plutôt que directement via le nom de la classe (normalement supporté depuis PHP 5.3). Un code comme $model::model() (ou $model contient le nom de la classe) provoque le fameux message. Dans ce cas, pas le choix, il faut instancier un objet via new $model qui retourne le modèle en question.

Si les voyages forment la jeunesse, PHP forme aux langues étrangères ;)

Categories: PHP Tags: ,

Yii news – Nouveau tutorial « barre de progression »

Yii Framework

Bon. Le blog a été particulièrement calme ces derniers temps… On va tenter de le ranimer un peu ;)

Quelques nouvelles de mon Framework PHP préféré (et j’espère le votre aussi).

Yii 1.1 continu à évoluer en intégrant à chaque version sont lot d’améliorations et corrections. A noter que la prochaine version 1.1.6 se verra dotée d’un bien pratique générateur de requêtes.

Le site de Yii Framework a également connu une petite révolution en octobre dernier en changeant son thème graphique (il était temps). J’apprécie particulièrement la section référence à l’API très bien repensée (avec affichage des portions de code de chaque méthode, super idée).

Signe que ce framework rencontre de plus en plus d’adeptes, le nombre d’extensions publiées est en littérale explosion. Bien sûre, le niveau de qualité et d’intérêt n’est pas toujours au rendez-vous, mais on trouve quelques perles bien pratiques pour certains projets, notamment des projets de partage de générateurs de code pour Gii dont certains sont très prometteurs (Giix).

Mon extension personnelle CSaveRelationsBehavior n’a guère évoluée. Quelques optimisation et correctifs sont en préparation et son utilisation au quotidien dans le cadre de mes projets professionnels actuels se révèle maintenant indispensable.

Enfin, chose promise depuis un bout de temps, la section Tutoriaux du blog vient de s’enrichir d’une nouvelle page : Yii : Une barre de progression pour les processus longs. Vous y découvrirez comment faire patienter élégamment vos utilisateurs pendant le traitement de tâches lourdes. Bonne lecture et vos suggestions sont toujours les bienvenues.

Open Source Media Framework (OSMF)

OSMF

OSMF (Open Source Media Framework) est, comme son nom l’indique, un framework open source (qui a dit qu’Adobe proposait que des solutions propriétaires ? ;-) ) qui permet aux développeurs de réaliser des lecteurs vidéos et des applications basées sur la solution Adobe® Flash® Platform.

Pour un dev Flash, c’est n’est pas très compliqué de faire un player vidéo tant que les fonctionnalités restes basiques : play, pause, stop, scrub, volume… Mais ça se complique sérieusement dés qu’on veut ajouter des fonctionnalités plus poussées comme : sous-titres, playlists, HD, publicités et surtout du vrai streaming… C’est là que vient se positionner OSMF. Adobe à pour objectifs de proposer une solution robuste et éprouvée qui permet d’accélérer le temps de développement.
La finalité de cet outil c’est de définir des « standards » de développement s’intégrant à Open Screen Project.

L’intérêt que je vois à utiliser OSMF c’est de pouvoir intégrer rapidement et facilement un player vidéo riche à  mes développements grâce à une API simple est claire. Je vais faire quelques tests pour voir si ça tient ses promesses.

[Edit] Le site dédié.

RobotLegs, un framework Flash/Flex/Air 100% AS3

robotlegs

Robotlegs est un framework AS3 basé sur une micro-architecture MVC-S 100% AS3 pour Flash, Flex et Air. Il y a eu beaucoup de buzz sur Twitter de la part de la communauté Flash/Flex (merci à @Palleas) concernant Robotlegs du coup je m’y suis intéressé.

Ce framework m’a tout de suite fait penser à PureMVC mais en plus accessible. Contrairement à PureMVC, Robotlegs utilise le model événementiel intégré à l’AS3 pour communiquer entre les éléments MVC. RobotLegs utilise l’injection de dépendances  pour « lier » les objets entre eux à travers des tags spécifiques ([Inject], …). L’inconvénient de ces tags c’est que le compilateur de l’IDE de Flash ne sait pas les interpréter du coup il faut privilégier un workflow avec le compilateur de Flex. L’utilisation de l’IDE Flash reste cependant possible mais j’avoue ne pas avoir encore tout compris :-) .

Le diagramme de l’implémentation MVC-S de RobotLegs (ici un exemple de slideshow).

robotlegs-diagram

Ce diagramme est tiré de slides d’une conférence disponible ici, à lire pour tout comprendre ;-)

CSaveRelationsBehavior : un comportement Yii pour enregistrer les données relationnelles

Yii Framework

CSaveRelationsBehavior, un comportement pour Yii Framework, vient d’être publié par votre serviteur.

L’objet de ce comportement est d’étendre les fonctionnalité des ActiveRecords afin de permettre l’enregistrement automatique des données relationnelles HasMany et ManyMany lorsque le modèle principal est créé ou modifié.

En effet, contrairement à d’autres framework comme CakePHP ou Symphony, cette fonctionnalité n’est pas incluse nativement dans Yii. Rien de bien problématique dans la mesure ou cette opération peut être écrite au besoin au niveau des modèles le nécessitant. Mais comme j’étais lassé de devoir reproduire ce genre de code fréquemment, l’écriture d’un comportement pour les ActiveRecord c’est assez naturellement imposé.

Amis développeurs Yii, vos commentaires sont les bienvenus :)

[Edit 17/05/2010 : Deux applications de démonstrations sont maintenant disponibles en téléchargement sur le dépôt de l'extension. Elles permettent de se faire une idée très précise de ce qui est réalisable avec cette extension qui est désormais également hébergée sur Google Code (documentation, dépôt SVN, rapport de bugs...).]

Lire la suite…

Yii 1.1.2 – Gii inside

Gii logo

Comme à son habitude, l’équipe de développement de Yii Framework vient de publier une mise à jour 1.1.2.

Au delà des habituelles corrections de bugs (une vingtaine) et d’améliorations (mise à jour de jQuery UI 1.8.1, support des relations dynamiques pour les modèles…) que vous pouvez voir ici, la grande nouveauté s’appelle Gii.

Gii est un puissant générateur de code dédié à Yii et vient compléter (pour ne pas dire remplacer) le générateur en lignes de commandes nommé yiic. En fait, il reprend les principes de son aîné (lui même inspiré des célèbres générateurs de Ruby on Rails) à savoir :

  • un générateur de modèles (qui sait lire les métas-informations des bases de données afin de créer automatiquement les régles de validation et les éventuelles informations relationnelles)
  • un générateur de contrôleurs
  • un générateur CRUD qui, en partant d’un modèle existant, est capable de généré un contrôleur est ses vues associées permettant de lister, voir, administrer, créer, mettre à jour et supprimer des enregistrements
  • un générateur de modules
  • enfin, un générateur de formulaires (nouveau dans Gii)

Tout ça, sous la forme d’une élégante interface web permettant de contrôler précisément la génération des fichiers (vue des différences entre les fichiers existant et ceux générés par exemple).

Mais ça n’est pas tout. Gii permet de facilement créer (avec un peu de code tout de même) vos propres générateurs. Et la création de vues personnalisées est un jeu d’enfants si vous désirez ajouter les fonctionnalité non prises en charge par le générateur natif.

Pour l’occasion, une documentation spécifique a été produite, à consulter ici.

Bonne génération à tous :)

FlashDevelop 3.1.0 RTM released

fd3_logo

Une mise-à-jour importante de mon outil de développement préféré est disponible. Il s’agit de la version 3.1.0 RTM, voici la liste des changements :

* Real MXML completion implemented* Flash Player 10.1 and Flex 4 support added
* Initial simple refactoring support added
* Global excluded directories added to Tasks
* Embed generation now added for all filetypes
* Proper file encoding behaviour without BOM added
* HTML ZenCoding implementation added (Control + B)
* Output panel is now searchable (Highlight, F3 and Shift+F3)
* Simple multiproject support with batch compiling added (1*)
* Compiler constants and timestamp added now automaticly
* Code completion is now fed with classes from SDK sources
* Japanese localization added (Settings -> SelectedLocale)
* HaXe on demand completion added (patch from filt3r)
* Additional keyword groups added to the config
* Code completion improvements and bug fixes
* General UI improvements and bug fixes

On notera la création d’un outil de refactoring (faut que je teste ça vite) et la compilation en batch de plusieurs projets.
Dans les tuyaux  il reste toujours le debugger et le profiler. Et une bonne nouvelle pour les linuxiens, il semblerait qu’une version Mono/Qt soit sur les rails.

Edit: On me souffle dans l’oreillette qu’une version expérimentale est dispo pour tester le debugger et le profiler ici.

Yii Framework 1.1.1 et 1.0.12 disponibles

Yii Framework

La maintenance de deux versions d’un framework n’est sans doute pas chose aisée, et on peut saluer l’effort de la (petite) équipe de développement de Yii qui maintient de cap malgré tout.

Voici donc les nouvelles versions mineures des deux branches majeures du framework :

Yii Framework 1.1.1 :

  • Plus d’une vingtaine de correction de bugs divers, essentiellement liés au passage à la nouvelle version majeure
  • La classe CActiveForm supporte désormais les validations coté serveur et coté client avec un minimum de code
  • L’outil en ligne de commandes yiic a été réécrit afin de supporter le multi-layout et le support du filtrage des vues en mode liste lors de la génération de code CRUD
  • Les commandes yiic peuvent désormais être déclarées de façon globales de telle sorte que vous pouvez partager une même commande partagée par plusieurs projets différents

Yii Framework 1.0.12 :

  • Une petite dizaine de correction de bugs mineurs
  • 3 améliorations relatives données relationnels des ActiveRecords, la classe CUrlManager et la classe CDbCriteria

Pour la liste complète des changements, c’est ici que ça se passe.

Categories: PHP Tags: ,

Optimiser le poids d’un SWF : modes de fusion

fusion

Petite astuce pour optimiser le poids d’un SWF grâce aux modes de fusion.

Récemment, sur un projet, j’ai du réaliser une petite anim en Flash sur la home page du site Cavissima. J’avais une grosse contrainte de poids, j’ai optimisé à fond les éléments graphiques mais ce n’était pas suffisant. L’élément graphique le plus lourd était un PNG transparent représentant une vigne.

La solution que j’ai mise en place est d’exporter la vigne sur fond blanc (donc pas de transparence) et de mettre le MovieClip qui contient l’image dans le mode de fusion « Darken ».
Vu que j’ai un fond claire, le Player Flash va « aplatir » mon image sur le fond en fusionnant les pixels de teintes claires. Cela fonctionne dans mon cas parce que j’ai un fond claire, si il avait été foncé cela n’aurait pas fonctionné.

J’ai fait un petit exemple :
- fichier swf avec PNG transparent —> 85 Ko
- fichier swf avec PNG sur fond blanc en mode fusion « darken » —> 36 Ko

This movie requires Flash Player 9

Fichiers source de l’exemple ici.

Performance Optimization WordPress Plugins by W3 EDGE

Switch to our mobile site