Hoa, un ensemble de bibliothèques

Logo de Hoa

bibliothèques • recherche • automatisation • abstraction

Qui suis-je ?

ivan.enderlin@ { hoa-project.net lifc.univ-fcomte.fr inria.fr

Contexte

Avant :

Maintenant :

interactions • données • méthodes Agiles • décentralisation

Motivations

Pour nous :

Pour PHP :

Bibliothèque

Une bibliothèque est un ensemble de fonctionnalités dédiées à la résolution d'un problème précis et isolé, grâce à son abstraction la plus élevée L'abstraction permet de s'adapter à plus de formes de problèmes

la Force est dans l'abstraction

modus operandi

Contributions

Hoa :

principales

Plan

  1. Installation et découverte
  2. Couche framework
  3. Quelques bibliothèques notables
  4. Hoathis et autres projets autour de Hoa
  5. Conclusion et perspectives

Installation

  • Emplacement par défaut (sous Unix) : /usr/local/lib/hoa
  • Formats : .7z, .tar.gz, .tar.bz2, .zip, .phar

$ wget http://download.hoa-project.net/Central/Hoa.next.phar
$ php Hoa.next.phar --extract

$ hg clone http://hg.hoa-project.net/Central .

Un seul exemplaire de Hoa pour plusieurs applications !

Astuces :

  • index des dépôts : hg.hoa-project.net
  • architecture des archives
  • architecture des dépôts

léger • maintenance • cloud

Architecture

Seul le noyau est requis :

require '/usr/local/lib/hoa/Core/Core.php';
var_dump(HOA);
exclusivité

Noyau

Quelques couches du noyau :

mise à jour • erreurs

Outils

Un script important : hoa

Propose des outils liés aux bibliothèques :

groupes

hoa://

Abstraction des accès aux ressources, 3 racines proposées :

Partage, intégration et maintenance facilités

à la volée • réécriture

Framework ?

$ wget /Framework/Hoa_Framework.next.phar
$ php Hoa_Framework.next.phar --extract

$ hg clone http://hg.hoa-project.net/Framework .

différence • philosophie • besoin

Routeur et dispatcheur

Assembler des bibliothèques pour créer de l'automatisation

exemple simple d'assemblage

Modèle

Hoa\Model pour décrire et manipuler des modèles

Abstraire et assembler pour créer de l'automatisation

manuel • rapide • compris

XYL

  • XML Yielding Language, langage d'interface graphique …
  • … multi-plateformes : OS, bureaux, portables, tablettes etc.
  • … multi-sorties : Web, console, PDF etc.
  • <yield /> pour créer des composants
  • @bind pour s'accrocher à l'arbre des données
  • <overlay />, <fragment />, <definition />  …
  • théorie des composants + HTML + …

Coder une fois, utiliser partout !

Exemple clé-en-main sur :

Test et Praspel

Hoa\Model

Flux

Les flux de PHP sont très puissants, ne pas les négliger

souplesse • rigidité • interchangeable

Un peu plus de fun

Hoa\FastCgi permet de parler avec un serveur FastCGI :

$client  = new Hoa\Socket\Client('tcp://127.0.0.1:9000');
$fastcgi = new Hoa\FastCgi\Responder($client);
echo $fastcgi->send($headers, $content);

Exécuter des fichiers PHP facilement à travers PHP FastCGI ou PHP-FPM !

Encore plus du fun

Hoa\Worker permet d'avoir des tâches asynchrones :

$wk = new Hoa\Worker\Backend\Shared('workerId', 'pwd');
$wk->on('message', function ( Hoa\Core\Event\Bucket $bucket ) {
    // Compute $bucket->getData().
});
$wk->run();
$worker = new Hoa\Worker\Shared('workerId');
$worker->postMessage('foobar');
tâches bloquantes • pas de retour utilisateur • non-séquentielles

Toujours plus du fun

Hoa\Dns permet de coder un serveur … DNS :

$server = new Hoa\Socket\Server('udp://127.0.0.1:57005');
$dns    = new Hoa\Dns($server);
$dns->on('query', function ( Hoa\Core\Event\Bucket $bucket ) {
    return '127.0.0.1';
});
$dns->run();

Overfun

Hoa\Websocket permet de coder un serveur … … Websocket :

$server    = new Hoa\Socket\Server('tcp://127.0.0.1:8889');
$websocket = new Hoa\Websocket\Server($server);
$websocket->on('message', …);
$websocket->on('close', …);
$websocket->on('error', …);
$websocket->run();
live.hoa

Hoathis

$server = dnew('(Hoathis or Hoa)\Socket\Server', …);

Hoa est un environnement pour écrire et maintenir des bibliothèques

philosophie • open-source • hackability

Mais aussi …

Acl, Bench, Cache, Compiler, Console, Database, Dispatcher, Dns, EventSource, FastCgi, File, Filter, Graph, Http, Iterator, Json, Locale, Log, Mail, Memory, Mime, Model, Notification, Observer, Php, Prototype, Realdom, Reflection, Regex, Registry, Router, Serialize, Session, Socket, Stream, StringBuffer, Test, Translate, Tree, Uri, View, Visitor, Websocket, Worker, Xml, XmlRpc, Xyl, Yaml, Zombie, xcallable, from, import, dnew, curry, event, resolve, memoize, «  », ƒ, zFormat, Praspel …

Autres projets autour de Hoa

Documentation

code • interactivité

Conclusion

Hoa est :

Hoa framework est :

Perspectives

ouverture

Remerciements & questions

Un grand merci pour votre attention

Des questions ?

hoa-project.net