21

Re : Hoa_Xyl vient d'apparaître dans le tronc

Tu as vu juste. Si je fais le lien lors du rendu, mon data binding ne pourra pas se faire. C'est là que le bât blesse. D'où le duplicate/merge avant le data binding.

Pour répondre à tes dernières questions : il existera la balise <value />, donc on pourra imaginer :

<li>Pre <value bind="?li" /> Post</li>

Note que dans ce cas, <li> ne serait pas répéter (car ne porte pas de binding). Donc il faudrait un truc du genre :

<li bind="?li">Pre <value bind="?" /> Post</li>

Faire un bind vide (seulement « ? ») dirait : on récupère la valeur courante. Ce qui serait plutôt très logique en soit, conceptuellement parlant (et presque techniquement parlant).
Si on part de ce principe d'ailleurs, on pourrait faire :

<li bind="?li">Pre <strong bind="?" /> Post</li>

Pas forcément besoin de la balise <value />. Cette dernière permet d'afficher une donnée brute sans lui donner de sémantique (car c'est le but premier de XYL, donner une sémantique forte et très extensible à un document).
Il me reste à faire un mécanisme simple pour que le rendu sache quoi faire.

Comment gères-tu ce genre de problème avec r8t ? Y as-tu déjà été confronté ? Même question avec les règles/contextes ? Même question avec les yielder nommés (si ça existe dans r8t mais j'espère pas big_smile) ?

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

22

Re : Hoa_Xyl vient d'apparaître dans le tronc

OK pour les bind="?".  Et donc, pour revenir à Renderer_Html5_Li, il faudra surtout que cet élément boucle sur ses children comme le fait Ul par exemple. Actuellement, Li se contente juste de retourner le currentData. Finalement, la plupart des éléments devront boucler de la sorte (j'ai la flemme de regarder les schemas de html5, je te fais confiance la dessus wink )

Il faudrait mesurer les choses. Qu'est-ce qui est le plus couteux: merger les dom fragments et lier autant de fois qu'il y a de merges, ou manipuler un seul fragment mais souffrir un peu plus lors des liages ? (si on appelle encore ça liage)... J'en n'ai aucune idée...
Quoique, de toute manière il y a un parcours du array principal lors du rendu. L'opération de liage pour les fragments pourrait être combinée (et en fait évacuée) par la même occasion? J'en sais trop rien.. Il faudrait que je me concentre un peu plus wink

Pour r8t, qui est toujours en méchante phase de dev (c.a.d j'ai rien fait dessus depuis 2 ou 3 mois;), les choses sont plus simples.
Disons que la philosophie des templates est ultra basique: c'est du Django-like moins la notion d'héritage. Je ne me suis pas encore penché sur ce point (un template qui extends un autre etc).
Les templates sont impératives: in fine c'est transformé en javascript. La notion de block ou d'inclusion de trucs qui seraient "yieldés" est quasi inexistante. Le "yielding" se fait de l'extérieur (ou de l'intérieur mais sous forme de fonctions, voir plus bas). Le rendu d'un tel block peut être mis dans une variable qui sera affichée ailleurs. De l'extérieur, c'est à dire en manipulant l'api. L'utilisateur obtient le rendu de quelque chose et libre à lui d'utiliser ce résultat ailleurs dans un autre template par exemple. C'est ce qu'il se passe sur mon blog. Les posts sont "rendus" (à l'aide d'une boucle Django-js-like for) et ce résultat textuel est injecté dans un template du genre "layout" principale. Ces sous-rendus sont court-circuités s'il y a un cache hit.
Bref, c'est différent et très classique par rapport à XYL. Le truc sympa c'est qu'on a toute la puissance de javascript au sein même des templates (fonctions anonymes et tout le reste). Des trucs peuvent être factorisés sous forme de fonctions locales au template par exemple (du genre formater des dates au format ISO machin etc).

Dernière fois dit par metagoto (29 Jul. 2010 15:02)

23

Re : Hoa_Xyl vient d'apparaître dans le tronc

HTML5 n'a pas de schéma de validation actuellement. Je te laisse lire le mémoire de Henri Sivonen sur comment vérifier la conformance d'un document HTML5 : http://hsivonen.iki.fi/thesis/html5-conformance-checker. C'est pratique si t'arrives pas à dormir le soir wink.

Le principe sera simple. On va considérer que certains éléments peuvent embarquer/contenir d'autres, ou pas. On a cette notion en HTML (et plus forte dans HTML5) : http://dev.w3.org/html5/spec/content-mo … of-content. Faudra mettre ce principe dans XYL. Sauf qu'avec SimpleXML, les textnodes n'existent pas … C'est pratique dans le cas où on a <em>hello</em>, mais si on a he<em>ll</em>o, c'est pas la même chose du tout …

Il faut que je réfléchisse aux systèmes de fragment et tout ça. Faut que je fasse des tests de performances. Là je vais conssacrer tout mon temps à mon mariage (J-8 quand même) mais ça tournera toujours en fond.
Il y a quelque chose d'important que j'ai oublié : les éléments ont leur rendu mais rien sur le comportement. Je veux dire, les éléments ne vont pas s'exécuter. Alors que pourtant, il devrait s'exécuter ! Certains éléments pourraient en influencer d'autres. Par exemple la balise <head> d'HTML devrait recevoir de nouveaux scripts au fur et à mesure que la page se déroule.
Je ne veux pas reconstruire 300 objets à chaque fois car ce sera 300 accès au disque dur maximum, et ça, ça te plombe grave les performances. Faut que je trouve un moyen de construire un arbre parallèle qui étend mon arbre existant. Une sorte d'arbre fantôme (j'aime bien l'idée).

Je dois faire ça car SimpleXML ne construit un arbre qu'avec une seule classe. Classe qui doit être ou doit étendre SimpleXMLElement.
Si j'utilisais mon propre analyseur, je pourrais assigner une classe à chaque balise. Mais analyser un fichier XML avec PHP, c'est lent (même si plus puissant). C'est comme ça que fonctionnait l'ancien Hoa_Xml. Je dois être 20 fois plus rapide maintenant …

Ok pour r8t. J'ai beaucoup lu le code source mais pas testé. Pas encore eu le temps.
Javascript me fait peur en ce moment. On l'a en client-side, en server-side avec NodeJS, et même en document-side maintenant avec r8t ! C'est vrai que c'est un bon langage et qu'on fait beaucoup d'effort pour l'améliorer. Si seulement il y avait cet engoument pour PHP …


En me relisant, j'ai trouvé une nouvelle façon de traiter un document XYL.
Premier parcours de l'arbre XML : on construit notre arbre fantôme XYL en même temps que l'on lie les données.
Deuxième parcours : on exécute notre arbre fantôme ; exécution qui va modifier son propre data bucket.
Troisième et dernier parcours : on fait le rendu.

Le problème de ce procéder, c'est qu'on fait 3 parcours de l'arbre. Si l'arbre est gros, ce sera long.

Solutions :
Premier parcours : on construit l'arbre fantôme et on lie les données.
Second et dernier parcours : on exécute l'arbre et on fait un rendu partiel.
Un rendu partiel ça implique que le rendu est éclaté en plusieurs parties et que chaque nœud est capable de repeindre une partie du rendu. Exemple : on a parcouru <head>, il a fait son rendu ; dans le <body> on trouve un élément qui veut ajouter un <script>, alors <head> va se repeindre partiellement (soit ajouter, soit modifier etc.).

De cette façon, on supprime un parcours. On aura la notion de repaint, peut-être lourde mais j'y tenais. Le repaint est un moyen d'éviter du parcours mais pose quelques problèmes. Le principal est qu'on doit travailler avec des tampons. Tampons qui ne seront pas envoyer sur la sortie tout de suite. Donc impression de ralentissement. (C'est comme Firefox et Chrome : Chrome envoie vite des petites parties sur la sortie donc impression de vitesse, et Firefox envoie des parties plus grosses ; en vrai, Firefox va plus vite mais on a l'impression de l'inverse !).

Ça reste une affaire de compromis.

Voilà mes pensées du jour. Merci cher journal. 30 juillet 2010 wink.

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

24

Re : Hoa_Xyl vient d'apparaître dans le tronc

Pour l'ancien Hoa_Xml, tu utilisais XMLReader ? ou SAX ?
(je crois savoir qu'il s'agit de XMLReader)

Je vois ce que tu veux dire pour l'arbre fantôme et le fait de l'exécuter.

Sous réserve de dire trop d'âneries, ne penses-tu pas que le même mécanisme utilisé pour le renderer pourrait s'appliquer pour l'execution?
OK pour essayer de combiner l'execution et le rendu en une passe. Pas sûr par contre qu'un second arbre soit necessaire.
Je n'ai pas trop compris comment tu comptes gérer la "hiérarchisation" des buffers quand il y a un repaint. Parce qu'il faudra une notion de hiérarchie, non?

Il y a longtemps, en guise d'exercice, je m'étais amusé à concevoir une architecture d'appli MVC en php qui se présentait sous forme d'un arbre. Des nodes de différents types qui reposaient sur une base classe commune qui servait à gérer l'accès au parent et au children. Il y eu plusieurs implémentations (array, pointer sur successeur, first child etc).

Ensuite j'utilisais un mécanisme de visiteur pour traverser l'arbre et "éxécuter" chaque node. Le traversing pouvait se faire selon un choix d'algo (depth ou breadth first search en fait).
Les différents nodes pouvaient être des filters (le filters chain était à la mode à l'époque), un truc de routing, des plugins quelconques etc et puis des nodes d'actions (équivalents des actions controllers).

Diverses expérimentations d'exécution furent testées. Execution "locale" à chaque node sans réelle influence sur le traversing mais aussi des exécutions avec des sauts dans l'arbre (un peu l'équivalent d'une dispatch loop).   

Ca fonctionnait plutôt pas mal. Les perfs étaient cependant en retrait comparé à une archi plus conventionnelle.

Est-ce un hasard, toujours est-il que le "MVC" suivant que j'ai expérimenté était à base de xslt (toujours via php). Bidouiller avec des arbres m'avait convaincu de la plus grande pertinence de passer par un système plus éprouvé. Et je crois aussi que c'était à l'époque où fut introduit la possibilité de caller des fonctions php à partir de xslt. Je n'ai pu résister big_smile

25

Re : Hoa_Xyl vient d'apparaître dans le tronc

Rapidement, avant Hoa_Xml était basé sur XMLReader oui. Mais pas mal de bidouille et interprétation côté PHP donc lent face à SimpleXML.

Ok pour le reste. Si je trouve 10mn, je commenterais. Il existe des travaux de recherche sur des structures de ce genre (nettement plus compliquées toutefois) pour équilibrer des charges. Les résultats sont extrêmement surprenant. Je cherche une application en PHP de ce système mais ce serait compliqué à mettre en place. Et comme Hoa se veut simple d'utilisation, va falloir cogiter un moment dessus. Surtout que le projet de recherche n'est pas terminé donc ça va me prendre un petit moment …

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

26

Re : Hoa_Xyl vient d'apparaître dans le tronc

Yep, je sais plus où j'ai lu dans ce thread, que vous parliez de zval et de spl etc...
Vous savez surement une bonne partie de ce qui va suivre, mais qui sait...?
ça vient de sortir (où d'être mis à jour): http://julien-pauli.developpez.com/tuto … variables/
(si je suis à côté de la plaque, on passe :-° )

27

Re : Hoa_Xyl vient d'apparaître dans le tronc

@jojolapine
Tu n'es pas à coté de la plaque, et l'article de J. Pauli est effectivement excellent.

La conclusion implicite par rapport à mes anciennes tribulations dans les trees implémentés en php objet, c'est qu'il y a de fortes chances que ça ne vaille pas le coup si les perfs sont une priorité.
Cependant, les versions actuelles de php sont plus robustes et optimisées qu'à l'époque..

28

Re : Hoa_Xyl vient d'apparaître dans le tronc

Nouvelle version de XYL dans le tronc : support des yielders nommés et des binding vides (@bind="?").
Vidéos de démonstration par ici (au format WebM) : http://j.mp/XYL_early_draft.

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Re : Hoa_Xyl vient d'apparaître dans le tronc

Comment tu inclus ton webM dans une balise video ??

" L'imagination est plus importante que la connaissance. La connaissance est limitée alors que l'imagination englobe le monde entier, stimule le progrès, suscite l'évolution. " - Life in the cloud :: Getting Started with Hoa - Hoa débutant

30

Re : Hoa_Xyl vient d'apparaître dans le tronc

Oué hein... déjà la dernière fois sur je ne sais quelle vidéo, ben du coup j'ai rebroussé chemin sad
Un autre format ou une version avec player ça serait cool wink Merci!