Venez redécouvrir Hoa !

ViPHP
ViPHP | 4674 Messages

06 juil. 2011, 08:22

@xTG Ok pour les répétitions. On va modifier ça.

Il n'y a pas une volonté cachée de laver le cerveau (faut pas déconner ;-)) mais juste une volonté d'être clair. Peut-être qu'on s'y prend mal. On va revoir ça avec la communauté.
Au passage, ce n'est pas une documentation technique mais un manuel d'apprentissage. C'est fait pour se laisser guider et apprendre gentiment sans se poser de questions. Tu suis, tu apprends. Le principe est simple. Après, peut-être qu'il faut modifier trois choses pour que la lecture soit plus légère, oui sans doute.

Je ne connais le site du zéro que de nom, je n'y suis jamais allé. Qu'est-ce qui te dérange ?
« 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. »

Hoa : http://hoa-project.net (sur @hoaproject).

ViPHP
xTG
ViPHP | 7331 Messages

06 juil. 2011, 09:42

Alors c'est que l'on n'attend pas la même chose d'une documentation/manuel et c'est en cela que tu ne comprends pas mes aprioris. :)
Je suis peut être trop sophistiqué dans mes lectures... Mais je trouve le cheminement et l'explication trop gamin pour cibler des développeurs.
Bon après si votre cible est le quidam de 12ans qui veut monter son site internet avec Hoa c'est sans aucun doute très bien rédigé.
sans se poser de questions
Pour moi c'est un énorme problème... Un développeur qui ne se pose pas de questions ne pourra apprendre quoi que ce soit, être intéressé par quoi que ce soit, et faire son travail correctement.
faut pas déconner
C'était un post poussé sur l'ironie bien évidemment. ;)

ViPHP
ViPHP | 4674 Messages

06 juil. 2011, 10:01

On est en discussion sur IRC à propos de tout ça. Je vous ferais un compte-rendu de notre nouvelle direction si une nouvelle est prise :-).
« 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. »

Hoa : http://hoa-project.net (sur @hoaproject).

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

06 juil. 2011, 12:27

puisque tu souhaite des exemples je te livre mon expérience.

je suis intéressé par Hoa, par curiosité, parce qu'a priori c'est complet chiadé et tout, et moi j'aime bien voir du code bien fait, le décortiquer et essayer de le comprendre ;)

j'ai donc essayé de suivre le manuel :
- celui parle d'un répertoire bien qui n'est présent dans aucune archive disponible.
- j'ai du installer mercurial pour avoir un truc complet, je ne trouve pas cela simple ou utile.
- installer Hoa dans /usr/local/ pourquoi ? est ce que l'on est obligé d'avoir un dédié pour l'utiliser ?
- une fois l'install fait j'ai voulu testé bhoa et heu j'arrive pas a avoir une page php deja existate (ha oui pas faite avec hoa).

je suis pas aller plus loin j'en ajouterais en continuant ;)

@+
Il en faut peu pour être heureux ......

ViPHP
ViPHP | 3300 Messages

06 juil. 2011, 12:34

Tu dis être déçu par le code. Tu peux m'expliquer pourquoi ? C'est quoi ton histoire d'interface et d'abstract au juste ? Tu parles aussi de la création d'un projet mais je n'ai pas compris. Développe.
Tu dis que le code nécessite certains refactoring. Exemple concret ? Tu penses pouvoir comprendre le code de Hoa et toute l'abstraction qu'il présente en le parcourant rapidement en 2mn ?
Je ne veux pas vendre la documentation mais vous critiquez un peu dans le vide. J'accepte la critique si elle est constructive. Et là, je ne vois aucune construction. Si vous aimez Hoa comme vous le dites (ou que vous voulez être encourageant), alors pointez du doigt les problèmes en proposant des solutions.
Tu finis en disant que les exemples ne sont pas orientés Web parce que la documentation n'est pas terminé et que tu ne comprends pas où elle va t'emmener.
Tu as un problème manifeste pour accepter les critiques, dans ce cas ne demande pas l'avis des gens ou fait ce qu'il faut pour les comprendre, c'est franchement irritant de te voir balayer les arguments simples et explicites des gens par des "J'accepte la critique si elle est constructive" alors que c'est le cas, ton approche marketing fait du tort à la qualité de ton projet, parce que tu as tellement envie de nous montrer que c'est tout beau tout bien, et ça transpire tellement dans chacun de tes messages sur le sujet, comme c'était le cas quand tu parlais de mozilla et de firefox quand tu y faisais ton stage, c'est juste épuisant de te lire à cause de ces partis pris, j'ai lu ton code y'a des bonnes choses, d'autres moins bonnes, mais globalement je n'irais même pas voir plus loin, alors que si j'avais découvert ton projet sans te connaître j'aurais sans doute creuser, mais la c'est pas possible d'avoir envie.

Les conseils que je te donne: n'écris pas une ligne toi même sur Hoa, trouve un type qui le fera pour toi, et à qui tu expliquera l'aspect technique, mais qui n'aura aucun parti pris, tu auras une doc qui sera "lisible" et surtout sans "parti pris" je crois sincèrement que tu ne devrais jamais parler d'Hoa plubliquement si tu veux que ton framework rencontre un quelconque succès.
Fait du php depuis que ca existe ou presque :)

ViPHP
xTG
ViPHP | 7331 Messages

06 juil. 2011, 13:38

Les conseils que je te donne: n'écris pas une ligne toi même sur Hoa, trouve un type qui le fera pour toi, et à qui tu expliquera l'aspect technique, mais qui n'aura aucun parti pris, tu auras une doc qui sera "lisible" et surtout sans "parti pris" je crois sincèrement que tu ne devrais jamais parler d'Hoa plubliquement si tu veux que ton framework rencontre un quelconque succès.
Je plussoie, c'est le meilleur moyen d'avoir le meilleur rendu qui soit. :)

Mammouth du PHP | 19672 Messages

06 juil. 2011, 14:01

Je vous trouve assez sévères dans ces critiques, j'irai jusqu'à dire à Nagol qu'il est insultant dans ses propos.

Vous lisez en diagonale les propos de Hywan et en oubliez une partie lors de vos réponses : il demande tout simplement qu'on lui dise ce qui ne va pas en l'illustrant d'un exemple, exemple qui n'est jamais indiqué.

À votre décharge toutefois, il faut dire que nous assistons à un dialogue de sourds parce que d'aucun des deux coté on ne tient réellement compte de la réalité d'en face. J'ai fait part en privé à Hywan de certains éléments qui mériteraient une notable amélioration. Je ne reviendrai pas sur ces points, mais je voudrais quand même vous faire observer un détail qui me semble important. Hoa est d'abord un travail de recherche et s'oriente vers une utilisation en entreprise. Ça implique que le discours qui est tenu pour en vanter les mérites, et surtout pour construire la documentation, doit être adaptée à cet auditoire particulier en tenant compte de ses impératifs. Or, que sont donc ces impératifs ? C'est peut-être justement ce qui manque comme paramètre lorsqu'on demande des éclaircissements. Le développeur en entreprise ne dispose pas de son temps de travail complètement à sa guise, il est, selon l'environnement où il se trouve, soumis à une pression plus ou moins importante et donc doit avancer vite. Il a donc besoin de voir rapidement des illustrations pratiques de ce qu'on peut réaliser avec Hoa. Quoique, je dis Hoa, mais c'est valable pour absolument n'importe quel nouveau projet. Or du coté des critiques, il faut tenir compte dans les propos, remarques et autres questions qu'on s'adresse à un universitaire qui techniquement pourrait tous nous enterrer sur pas mal de points, mais à qui il manque peut-être justement la vision de l'entreprise, vision que ses stages n'ont malheureusement pas pu lui faire mesurer complètement, et ce n'est pas du tout un reproche à lui faire, on est tous plus ou moins passés par là et on aurait sans doute pas apprécié d'être traités à la même sauce si on avait voulu lancer un projet du genre à l'époque.

Dire à Hywan qu'il ne devrait pas toucher à la documentation, c'est peut-être un peu exagéré, il est quand même le mieux placé pour comprendre tous les rouages de ses constructions. Cependant il est vrai que la rédaction d'une documentation serait probablement plus efficace si rédigée par un développeur qui découvre, en collaboration étroite avec les contributeurs qui développent le code, Hywan compris. De la sorte, le rédacteur aura forcément des questions parfois candides, soulevant de ce fait un problème qu'on ne voit pas forcément lorsqu'on est de l'autre coté.

CQFD : Critiquez, soit, absolument, mais en apportant des questions argumentées et/ou des alternatives, pas en lui tombant sur le dos comme s'il était un petit bidouilleur qui se la pète en pondant un « Hello World » plus complexe que la normale.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

06 juil. 2011, 14:44

Bon, allez, on souffle un coup ;)

Ce que je vois, en étant spectateur, c'est des techos qui demandent une docs plus techniques, parce qu'ils restent sur leur faim. Ceci est un bon point, cela signifie que l'existant de la documentation intéresse. Toutefois, cela signifie qu'il manque également une documentation plus technique (et je ne pourrais donner d'exemple à la place de ces gens là).

D'un autre côté, on vois un créateur qui voudrais convraincre que ce qu'il a fait est bien, mais qui ne parviens pas à quitter son rôle de "promoteur" de son projet pour se mettre dans celui qui se retrouve face à une n-ieme nouvel outils, et qui voudrais voir ce que ça a dans le ventre.

Très sincèrement, je n'ai pas la clé, le "truc" qui permettrait que ça avance, mais, comme le souligne Cyrano, c'est une guerre de tranchée maintenant, et personne ne semble savoir comment arriver à s'entendre pour que cette discussion devienne un résultat tangible.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 4674 Messages

06 juil. 2011, 14:58

- celui parle d'un répertoire bien qui n'est présent dans aucune archive disponible.
De quel répertoire ? Si c'est une erreur, ce sera corrigé dans la journée.
- j'ai du installer mercurial pour avoir un truc complet, je ne trouve pas cela simple ou utile.
Tu as des archives 7z, tar.gz, tar.bz2, zip (voir la section sur les archives compressées) et même Phar (voir la section sur l'archive Phar) qui sont proposées. Sur la page d'accueil, Mercurial est placé en dernière position.
Mercurial est un outil tout aussi puissant que Git. C'est toujours bon de l'avoir de toute façon, il est pas mal utilisé.
Pour l'aspect framework, tu y as aussi accès avec Mercurial ou avec des archives, comme décrit dans la section sur la création d'une application.
- installer Hoa dans /usr/local/ pourquoi ? est ce que l'on est obligé d'avoir un dédié pour l'utiliser ?
Hoa peut s'installer où on veut. L'aspect framework utilise un fichier Core.link.php qui peut se redéfinir à travers le script whereishoa (et whereishoa.bat). De fait, ton application va toujours inclure Core.link.php, qui fera le lien vers Hoa, donc peu importe où ce dernier est situé. On conseille /usr/local/lib/hoa pour les Unix et C:\Program Files\Hoa pour Windows (voir la section à propos du confort). Ce n'est nullement une obligation, juste une proposition.
- une fois l'install fait j'ai voulu testé bhoa et heu j'arrive pas a avoir une page php deja existate (ha oui pas faite avec hoa).
Je serais interessé de connaître ta manipulation et du message d'erreur que tu as eu. Bhoa exécute du PHP à travers HTTP, avec ou sans Hoa, ça n'a rien à voir.


Nagol, je ne comprends pas ton agressivité. Je t'ai connu bien plus respectueux et ouvert à la discussion. Tu mélanges beaucoup de choses. Je ne vais pas tenir compte de ton message mais je reste ouvert à la discussion :-).


Après avoir discuté à part avec certains membres de PHPFrance et la communauté de Hoa, on va entamner un mini-tutoriel pour mettre le pied à l'étrier plus vite et donner une idée plus rapidement de ce que Hoa a à offrir. On va aussi revoir la documentation et en démarrer une nouvelle (plus technique). J'espère que ça facilitera l'accès à Hoa à tous les niveaux. Pour l'instant, on visait les débutants mais apparemment d'autres personnes, plus techniques, ressentaient un manque.
« 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. »

Hoa : http://hoa-project.net (sur @hoaproject).

Mammouth du PHP | 19672 Messages

06 juil. 2011, 15:10

... on va entamer un mini-tutoriel pour mettre le pied à l'étrier plus vite et donner une idée plus rapidement de ce que Hoa a à offrir. On va aussi revoir la documentation et en démarrer une nouvelle (plus technique). J'espère que ça facilitera l'accès à Hoa à tous les niveaux. Pour l'instant, on visait les débutants mais apparemment d'autres personnes, plus techniques, ressentaient un manque.
Cette solution me semble très appropriée, d'autant plus que, si des développeurs un tant soit peu confirmés adoptent Hoa et s'en trouvent satisfaits, ce sera d'autant plus facile de trouver du support pour les débutants et ça soulagera d'autant les contributeurs qui pourront davantage se concentrer sur le développement d'abord et le support des confirmés ensuite. Enfin c'est la vision que j'en ai hein, ça vaut ce que ça vaut. ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 3300 Messages

06 juil. 2011, 15:31

Je vous trouve assez sévères dans ces critiques, j'irai jusqu'à dire à Nagol qu'il est insultant dans ses propos.
Peut-être un peu oui, réaliste et excédé aussi, j'en ai vraiment marre de voir du marketing plus que des argumentationsde la part d'hywan il nous a fait le coup pour firefox, il nous a fait le coup pour Hoa, un moment donné faut mettre les points sur les I et qu'il comprenne qu'il gonfle un grand nombre de gens.
Nagol, je ne comprends pas ton agressivité. Je t'ai connu bien plus respectueux et ouvert à la discussion. Tu mélanges beaucoup de choses. Je ne vais pas tenir compte de ton message mais je reste ouvert à la discussion :-).
N'en tiens pas compte, mais c'est le meilleur conseil qui t'ai jamais été donné sur internet, arrête de faire du marketing et de la promo, et commence à t'occuper de faire connaître efficacement Hoa, tu ne pourras jamais accéder au rang des autres framework si tu restes sur cette voie.
il faut tenir compte dans les propos, remarques et autres questions qu'on s'adresse à un universitaire qui techniquement pourrait tous nous enterrer sur pas mal de points
On parle d'Hywan la? personnellement je doute fortement de ce que tu viens de dire pour mon cas, il est bon mais il manque d'expérience, de recul et d'humilité je l'ai toujours pensé, mais avec les années ca ne semble pas s'améliorer du moins pas de manière sensible.
Fait du php depuis que ca existe ou presque :)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

06 juil. 2011, 15:56

Attention a ne pas tomber dans l'attaque personnelle à outrance non plus :/

Dans le fond, je suis d'accord avec Nagol (sur le recul du besoin d'un FW en entreprise, et sur l’enthousiasme exacerbé), mais aller jusqu'à dire qu'il "gonfle pas mal de gens", c'est attaquer pour attaquer, et c'est pas cool.

Ensuite, Nagol, sur le dernier paragraphe, en vous connaissant un peu tout les 2, je pense que tu pourrais te reprocher une partie de ce que tu viens de dire :?
Je sais bien que tu dis ça plus comme un conseil que comme une attaque, mais c'est trop virulent tout de même.

NB : je n'écrit pas (encore) en rouge, mais j'en suis pas loin, et ça serait dommage d'en arriver là pour le sujet, non ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 3300 Messages

06 juil. 2011, 16:14

Attention a ne pas tomber dans l'attaque personnelle à outrance non plus :/

Dans le fond, je suis d'accord avec Nagol (sur le recul du besoin d'un FW en entreprise, et sur l’enthousiasme exacerbé), mais aller jusqu'à dire qu'il "gonfle pas mal de gens", c'est attaquer pour attaquer, et c'est pas cool.
Tu as bien sur raison, mais je reste persuadé que hywan a besoin d'entendre ça, maintenant je l'ai dit, je peut pas repêter sans cesse la même chose donc je m'arrête la.
Ensuite, Nagol, sur le dernier paragraphe, en vous connaissant un peu tout les 2, je pense que tu pourrais te reprocher une partie de ce que tu viens de dire :?
Je sais bien que tu dis ça plus comme un conseil que comme une attaque, mais c'est trop virulent tout de même.
Oui bien sur je suis comme ça aussi, c'est le péché mignon des développeurs, maintenant je me suis pris assez de coups dans ma vie professionnelle pour avoir envie d'éviter à d'autre que ça leur arrive, je n'ai pas le droit en soi d'avoir une attitude paternaliste, ou moralisatrice, mais c'est mon penchant naturel, au fond je ne veux que son bien, et qu'il ne gâche pas ses chances.
NB : je n'écrit pas (encore) en rouge, mais j'en suis pas loin, et ça serait dommage d'en arriver là pour le sujet, non ?
Pas besoin je m'arrête la.
Fait du php depuis que ca existe ou presque :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

06 juil. 2011, 22:44

J'ai essayé toute les archives par de répertoire bin (désolé pour le e en trop :/)

mercurial utile peux être pas, perso j'en ai pas besoin (ni même git ou pas) même pas sujet c'est hors sujet :)
- installer Hoa dans /usr/local/ pourquoi ? est ce que l'on est obligé d'avoir un dédié pour l'utiliser ?
Hoa peut s'installer où on veut. L'aspect framework utilise un fichier Core.link.php qui peut se redéfinir à travers le script whereishoa (et whereishoa.bat). De fait, ton application va toujours inclure Core.link.php, qui fera le lien vers Hoa, donc peu importe où ce dernier est situé. On conseille /usr/local/lib/hoa pour les Unix et C:\Program Files\Hoa pour Windows (voir la section à propos du confort). Ce n'est nullement une obligation, juste une proposition.

je sais bien, mais je pense que l'accent est trop donnée dessus, une indication d'une installation standard sans pré requis serait plus cool ;)

- une fois l'install fait j'ai voulu testé bhoa et heu j'arrive pas a avoir une page php deja existante (ha oui pas faite avec hoa).
Je serais interessé de connaître ta manipulation et du message d'erreur que tu as eu. Bhoa exécute du PHP à travers HTTP, avec ou sans Hoa, ça n'a rien à voir.

je lance la console, je vais dans répertoire qui me convient (avec des pages php puisse d'après ce que j'ai compris il s'agira du "docroot" du serveur ? et je lance : hoa bhoa
réponse
H:\web\docRoot\test>hoa bhoa
Server is up, on tcp://localhost:8888!
Root: H:\web\docRoot\test.

Waiting for connection
(au passage pb d'encodage sur la console win)
Ô£û GET /index.php
Ôå│ PHP FastCGI seems to be disconnected (tried to reach tcp://localhost:9000).
Ôå│ Try $ php-cgi -b localhost:9000
or $ php-fpm -d listen=localhost:9000
a l'essai d'affichage d'une page.

ha oui j'ai oublié le php-cgi& autre console re test
Ô£û GET /index.php
Ôå│ PHP FastCGI seems to be disconnected (tried to reach tcp://localhost:9000).
Ôå│ Try $ php-cgi -b localhost:9000
or $ php-fpm -d listen=localhost:9000
on envoi le php-cgi -b localhost:9000

d'après la doc
Attention à bien démarrer PHP FastCGI afin que Bhoa puisse exécuter PHP. Normalement, si Bhoa n'arrive pas à joindre PHP FastCGI, il le signalera de cette façon :

✖ GET /index.php
↳ PHP FastCGI seems to be disconnected (tried to reach tcp://localhost:8888).
↳ Try $ php-cgi -b localhost:8888
or $ php-fpm -d listen=localhost:8888
et pourtant je l'ai bien lancer (au passage php-fpm n'existe pas chez moi) je tourne sous w7 X64 test avec php5.4 (oui je sais c'ets une alpha) test avec php5.3.6 idem :/

@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 1668 Messages

06 juil. 2011, 22:57

Les conseils que je te donne: n'écris pas une ligne toi même sur Hoa, trouve un type qui le fera pour toi, et à qui tu expliquera l'aspect technique, mais qui n'aura aucun parti pris, tu auras une doc qui sera "lisible" et surtout sans "parti pris" je crois sincèrement que tu ne devrais jamais parler d'Hoa plubliquement si tu veux que ton framework rencontre un quelconque succès.
Mauvaise idée pour deux raisons : la première c'est qu'HyWaN est un bon écrivant, la deuxième c'est qu'il est capable de vendre du sable à un chameau, même à moi il est arriver à foutre le doute (c'est pour ça que je lui parle plus, j'ai peur de finir dans une cave, le crâne razer à faire de la doc). Si non je soutiens Nagol sur le fond.

Pour l'encodage :
Image
firefox-5.0-r1, Gentoo Linux ~amd64

Pour revenir à la question : (ton site rame, il est coder en Hoa ou quoi ?!)
Ce qui me dérange dans l'aspect propagande ce que je reproche c'est cet aspect "c'est bien s'qu'on fait, faites nous confiance", il faudrait citer et faire des liens sur les principes, même si les gens ne les suivent pas au moins ça rassure.
Pour le code, je l'ai regardé pendant plus d'un heure (et oui, bizarrement à 4h du matin tout le monde dors).
Je me permet de copier ici Library/Database/Database.php (je déplore l'abandon de subversion au passage) :
<?php

/**
 * Hoa
 *
 *
 * @license
 *
 * New BSD License
 *
 * Copyright © 2007-2011, Ivan Enderlin. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *     * Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.                                                                                                                                                                
 *     * Neither the name of the Hoa nor the names of its contributors may be                                                                                                                                                                
 *       used to endorse or promote products derived from this software without                                                                                                                                                              
 *       specific prior written permission.                                                                                                                                                                                                  
 *                                                                                                                                                                                                                                           
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"                                                                                                                                                               
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE                                                                                                                                                                 
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE                                                                                                                                                                
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE                                                                                                                                                               
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR                                                                                                                                                                       
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF                                                                                                                                                                      
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS                                                                                                                                                                  
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN                                                                                                                                                                   
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)                                                                                                                                                                   
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE                                                                                                                                                                
 * POSSIBILITY OF SUCH DAMAGE.                                                                                                                                                                                                               
 */                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                             
namespace {                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                             
from('Hoa')                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                             
/**                                                                                                                                                                                                                                          
 * \Hoa\Database\Exception                                                                                                                                                                                                                   
 */
-> import('Database.Exception')

/**
 * \Hoa\Database\Dal
 */
-> import('Database.Dal.~');

/**
 * \Hoa\Database\Model\Table
 */
//-> import('Database.Model.Table')

/**
 * \Hoa\Database\Model\Collection
 */
//-> import('Database.Model.Collection')

/**
 * \Hoa\Database\Cache\Table
 */
//-> import('Database.Cache.Table');

}

namespace Hoa\Database {

/**
 * Class \Hoa\Database.
 *
 * Main class of the \Hoa\Database package. Manage the autoload connection, all
 * databases parameters, table and base cache etc.
 *
 * @author     Ivan Enderlin <[email protected]>
 * @copyright  Copyright © 2007-2011 Ivan Enderlin.
 * @license    New BSD License
 */

class Database implements \Hoa\Core\Parameter\Parameterizable {

    /**
     * Singleton.
     *
     * @var \Hoa\Database object
     */
    private static $_instance = null;

    /**
     * Collections of table caches.
     *
     * @var \Hoa\Database array
     */
    protected $cache          = array();

    /**
     * Parameters.
     *
     * @var \Hoa\Core\Parameter object
     */
    protected $_parameters    = null;



    /**
     * Singleton, and set parameters.
     *
     * @access  private
     * @param   array    $parameters    Parameters.
     * @return  void
     * @throw   \Hoa\Database\Exception
     */
    private function __construct ( Array $parameters = array() ) {

        $this->_parameters = new \Hoa\Core\Parameter(
            $this,
            array(
                'base'   => null,
                'table'  => null,
                'field'  => null,
                'schema' => null
            ),
            array(
                'base.class'        => '(:base:U:)Base',
                'base.file'         => '_(:base:U:).php',
                'base.directory'    => 'hoa://Data/Etc/Database/Model/(:base:U:)/',

                'table.class'       => '(:table:U:)Table',
                'table.file'        => '(:table:U:).php',
                'table.primaryKey'  => 'Pk(:table:U:)',
                'table.foreignKey'  => 'Fk(:field:U:)',

                'collection.class'  => '(:table:U:)Collection',

                'cache.enable'      => true,
                'cache.file.table'  => '(:table:U:)Table.cache',
                'cache.file.query'  => '(:table:U:)Query.cache',
                'cache.directory'   => 'hoa://Data/Var/Private/Database/Cache/(:base:U:)/',

                'constraint.method' => 'user(:field:U:)Constraint',

                'schema.file'       => '(:schema:U:).xml',
                'schema.directory'  => 'Data/Database/Schema/',

                'connection.list.default.dal'      => Dal::PDO,
                'connection.list.default.dsn'      => 'mysql:host=localhost;dbname=foobar',
                'connection.list.default.username' => 'root',
                'connection.list.default.password' => '',
                'connection.list.default.options'  => true,
                'connection.autoload'              => null // or connection ID, e.g. 'default'
            )
        );

        $this->_parameters->setParameters($parameters);

        return;
    }

    /**
     * Singleton : get instance of \Hoa\Database.
     *
     * @access  public
     * @param   array   $parameters    Parameters.
     * @return  void
     */
    public static function getInstance ( Array $parameters = array() ) {

        if(null === self::$_instance) {

            self::$_instance = new self($parameters);

            if(null === $autoload = self::$_instance->getParameter('connection.autoload'))
                return self::$_instance;

            Dal::getInstance($autoload);
        }

        return self::$_instance;
    }

    /**
     * Get parameters.
     *
     * @access  public
     * @return  \Hoa\Core\Parameter
     */
    public function getParameters ( ) {

        return $this->_parameters;
    }

    /**
     * Get a base.
     *
     * @access  public
     * @param   string  $name    The base name.
     * @return  \Hoa\Database\Model\Base
     * @throw   \Hoa\Database\Exception
     */
    public function getBase ( $name ) {

        /*
        $oldBase = $this->getKeyword('base');

        $this->setKeyword($name);

        $directory = $this->getFormattedParameter('base.directory');
        $file      = $this->getFormattedParameter('base.file');

        require_once $directory . $file;

        $class     = $this->getFormattedParameter('base.class');

        if(!class_exists($class))
            throw new \Hoa\Database\Exception(
                'Cannot find the base class %s in %s.',
                1, array($class, $directory . $file));

        $this->setKeyword($oldBase);

        return new $class();
        */
    }

    /**
     * Get a table.
     *
     * @access  public
     * @param   string  $name    The table name, must match with :
     *                           base.table.
     * @return  \Hoa\Database\Model\Table
     * @throw   \Hoa\Database\Exception
     */
    public function getTable ( $name ) {

        /*
        $cache = $this->getTableCache($name);

        if(false !== $return = $cache->get(null))
            return $return;

        if(false === strpos($name, '.'))
            throw new \Hoa\Database\Exception(
                'The table name must match with <base>.<table>; given %s.',
                2, $name);

        list($base, $name) = explode('.', $name);

        $oldBase   = $this->getKeyword('base');
        $oldTable  = $this->getKeyword('table');

        $this->setKeyword('base',  $base);
        $this->setKeyword('table', $table);

        $directory = $this->getFormattedParameter('base.directory');
        $file      = $this->getFormattedParameter('table.file');

        require_once $directory . $file;

        $class     = $this->getFormattedParameter('table.class');

        if(!class_exists($class))
            throw new \Hoa\Database\Exception(
                'Cannot find the table class %s in %s.',
                3, array($class, $directory . $file));

        $instance = new $class();

        $cache->set($name, $instance);

        $this->setKeyword('base',  $oldBase);
        $this->setKeyword('table', $oldTable);

        return $instance;
        */
    }

    /**
     * Clean a specific cache.
     *
     * @access  public
     * @param   string  $name    The table name, must match with :
     *                           base.table.
     * @return  void
     */
    public function cleanTableCache ( $name ) {

        /*
        $this->getTableCache($name)->clean(null);
        */
    }

    /**
     * Get a table cache.
     *
     * @access  protected
     * @return  \Hoa\Database\Cache\Table
     */
    protected function getTableCache ( $name ) {

        /*
        $nameu = strtolower($name);

        if(isset($this->cache[$nameu]))
            return $this->cache[$nameu];

        $this->cache[$nameu] = new \Hoa\Database\Cache\Table($name);

        return $this->cache[$nameu];
        */
    }
}

}
Je reproche deux choses majeure à ce code :
* La majorité ne sert à rien (mais passons on est dans les dépôts)
* Son héritage, qui est selon moi stupide
Je vais développer pour pas faire un agression dans le vent comme tu l'as fait (j'y reviendrais). Il aurait mieux valu faire une classe abstraite ayant plus de méthode et dont toutes les classes d'entrées de bibliothèques dérivent, implémenter une interface pour un méthode... Mais bon, c'est aussi discutable que Interface Abstract Concrete, par contre le fait d'avoir plus classes/interfaces dans le même fichier, ça améliore les perfs, mais c'est pas correcte méthodologiquement.

Concernant ton commentaire :
Déjà on est des utilisateurs potentiels, pas des concepteurs de framework, si non on s'y prendrais certainement autrement (comprendre différemment), notre rôle c'est de pointer du doigts les limites et de formuler des demandes, le tiens c'est de repousser les limites de ton framework et de créer les bibliothèques qu'on demande. Après certains vont contribuer à Hoa, que ce soit sous forme de code, de remonter de bug, de demandes, de participation sur les forums, de pubs... Chacun doit être en mesure de choisir son implication dans ton projet, tu n'as pas à forcer qui que ce soit "tout ou rien".
Concernant ta doc, je suis pas voyant, je lis pas dans les lignes du pieds, je juge avec ce que j'ai, c'est un peu comme si tu te présentait au BAC avec que du potentiel, on juge pas le potentiel, c'est impossible.
Dans ZF, mais corrigez moi, je rappel que j'ai commencé il y a moins de 15 jours, il y a deux choses majeure qui sont présentes et qui me manque dans Hoa :
* Quand je cré un projet ZF il me crée trois fichiers importants (je compte pas les dossiers même si tout est fichier) /public/index.php (qui se démène à tout initialiser et à lancer le bootstrap) /application/bootstrap.php et /application/configs/application.ini pour les configurations. ET C'EST TOUT, ZF étant un framework verbeux c'est le maximum qu'on peut attendre, dans Hoa, d'après ce que j'ai vu on a beaucoup plus de fichiers (notamment l'éclatement de Core et Library).
* Dans ZF lorsqu'on à une classe quelconque (prenons Zend_Db_Table_Row) on a en premier lieu Zend_Db_Table_Row_Interface qui décire les méthodes et leurs arguments, puis viens Zend_Db_Table_Row_Abstract qui implémente toute ou une partie de ces méthodes et enfin Zend_Db_Table_Row qui finie l'implémentation ou surcharge Zend_Db_Table_Row_Abstract (dans l'exemple il me semble qu'elle n'a plus rien à faire).
Voilà, tu es venu faire ta promo ici, il faut être ouvert au débat, encore une fois, les anciennes versions de la doc étaient biens, inspirent-en, ça ne peut te faire que du bien.

Maintenant je vais justifier les raisons pour lesquels je ne choisirais pas Hoa pour mes développements :
* Déjà je travail dans un univers où les outils que l'on utilisent sont TRÈS TRÈS TRÈS TRÈS contrôlés
* Hoa dispose d'un faible communauté et d'une faible visibilité
* Hoa n'est valable qu'à partir de PHP 5.3 et je bosse actuelle sur une 5.2.4
* La documentation est inachevée
* Je n'ai pas encore maitrisé ZF malgrès mes 10 heures par jour dessus

Voilà, ce que je voulais mettre en évidence c'est que même si je trouve ton travail prometteur (bien que, quoi que vous en disiez, le monde du travail et de la recherche sont relativement différents [je sais de quoi je parle]), ce sont des contraintes qui me dépassent. Cependant, si tu arrive à faire ton travail (dont accepter les critiques qu'on te formule), je serais ravis de suivre ton projet.
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol