Hoa Apex 3rd edition, Overture

Logo of Hoa


Who am I?

Ivan Enderlin:

ivan.enderlin or hywan ••@ { hoa-project.net•,•• php.net•• atoum.org liip.ch mnt.io

Who are you?

Biggest Apex in terms of people (aka Paris effect)

(oral self-presentations)


Where are we?

inovia's home, one of our big user. Thank you!


This is a special event:

This is unique in the land of Computer Science

3rd edition: Still a success!


  1. Community
  2. Source code
  3. Official contributions
  4. Site and documentations
  5. Around the project
  6. Bilan


Contributors & hoackers

57 hackers (+20)!
including 19 hoackers (+5)!

New contributors

Welcome to:

Most active contributors…

… by commits on Central:

  1. I. Enderlin (75%)
  2. Bhoat (21%)
  3. S. Py (0.7%)
  4. S. Hulard (0.5%)
  5. M. de Laubrie (0.3%)
  6. J. Bianchi (0.3%)
  7. A. von Glasow (0.2%)
  8. R. Emourgeon (0.2%)
  9. J. Clauzel (0.1%)
  10. P. Tomasina (0.1%)

… by lines on Central:

  1. I. Enderlin (80.3%)
  2. Bhoat (13.6%)
  3. L. Metzler (0.9%)
  4. M. de Laubrie (0.6%)
  5. S. Py (0.4%)
  6. A. von Glasow (0.2%)
  7. R. Emourgeon (0.2%)
  8. J. Bianchi (0.2%)
  9. S. Hulard (0.1%)
  10. M. Codron (0.1%)

Perhaps, it is changing a lot!

… by commits on Central since 3 months:

  1. Bhoat (43.3%)
  2. I. Enderlin (36.9%, -38.1%)
  3. S. Hulard (11.9%, +11.4%)
  4. M. de Laubrie (4.3%, +4%)
  5. R. Emourgeon (1%, +0.8%)
  6. J. Bianchi (0.7%, +0.4%)
  7. K. Gomez (0.5%, +0.5%)
  8. A. Gerlier (0.4%, +0.4%)
  9. D. Thalmann (0.2%, +0.2%)
  10. B. Getsug (0.2%, +0.2%)

What is the tendency?

  • Contributors are more autonomous,
  • I. Enderlin (author of the project) is less a “requirement”,
  • Community is more organized,
  • More discussion and collaboration,
  • More reviewers per libraries,
  • Community is more qualified,
  • The community is getting mature!

Github Github

1196 stargazers (+733)

504 forks (+266)

Most famous ones (in term of watchers):



766 followers (+224)

Better communication:


Record was 26 connections (+5)

21 connections on average (+0)

Marvirc is still here, with some new commands

New big users


Community at large

More than 1100 persons!

Source code

New library

Hoa\Cli: To use the hoa command; extracted from Hoa\Core

Hoa\Devtools: Development tools for contributors, maintainers, releasers etc.; partly extracted from Hoa\Core (part of the new contribution process)

Hoa\Promise: Promises in PHP; much more useful than one might thought

Hoa\Test: Framework to test Hoa's libraries, extends atoum (part of the new contribution process)

Evolution of the code

Files: 939 (+203)

Line of codes: 119 202 (-13 458 👍)

Commits: 10 483 (+2163)

Activity on the code (commits per months):



About 30% of existing tests migrated with success

392 snapshots published!

CI still not here… but (suspense)



More than 50 RFC implemented (+30)

PHP VM support:

Installations Composer

904 565 downloads (+765 000)

Where are we in the Packagist galaxy?

Official contributions

To atoum, by
Ivan Enderlin
Julien Bianchi

atoum/praspel-extension: Hoa\Praspel inside atoum

$data = $this->sample(

Generate a string based on a regular expression

$data = $this->realdom->date(
    'd/m H:i',
        $this->realdom->timestamp('next Monday')

foreach ($this->sampleMany($data, 10) as $date) {

Generate 10 dates between yesterday to the next Monday to the format d/m H:i

To Emacs, by
Steven Rémot

Contributions/Emacs/Pp: PP support (from Hoa\Compiler) in Emacs

Install with MELPA:

M-x package-install hoa-pp-mode


Provisioning, by
Pierre Tomasina
Julien Bianchi

Contributions/Provisioning: Install Hoa everywhere, easily

├── Base
│   ├── Docker
│   └── Packer
├── Recipes
│   ├── Ansible
│   ├── Chef
│   └── Puppet
└── Targets
    ├── Docker
    ├── QEMU
    └── Vagrant

In case one want to install Hoa with these tools

To Symfony, by
Julien Bianchi
Stéphane Py
Kévin Gomez

Hoathis\SymfonyBenchBundle: Hoa\Bench inside Symfony

class DemoController extends Controller
    public function indexAction()
        $response = $this->render('HoaDemoBundle:Welcome:index.html.twig');

        return $response;

Manipulate marks inside a controller…

    {% benchstart 'usersLoop' %}
    {% for user in users %}
            {{ user.username }}

            {% benchstart 'messagesCount' %}
            {% benchpause 'messagesCount' %}
    {% endfor %}
    {% benchstop 'messagesCount' %}
    {% benchstop 'usersLoop' %}

… or directly inside a Twig template. See the result in the debugger!

Hoathis\SymfonyConsoleBridge: Hoa\Console inside Symfony

$formatter = $output->getFormatter();
$formatter->setStyle('info', new OutputFormatterStyle('#e4cbf4'));

Use advanced colors from Hoa\Console\Cursor::colorize

|          | Verbosity    | Decoration |
| -------- | ------------ | ---------- |
| Pipe     | normal       | disabled   |
| Redirect | very verbose | disabled   |
| Terminal | verbose      | enabled    |

Automatically set the verbosity level based on the output type (direct, pipe, redirection…)

$app->setCode(function (InputInterface $input, OutputInterface $output) use ($app) {
    $window = $app->getHelperSet()->get('window');

    $output->writeln('I\'m going to bring your window to the foreground and back to the foreground after one second');

    $output->writeln('I\'m going to minimize your window and restore it after one second');

Use Hoa\Console\Window as a helper.

$app->setCode(function (InputInterface $input, OutputInterface $output) use ($app) {
    $cursor = $app->getHelperSet()->get('cursor');
    $cursor->save()->hide($output)->move($output, 'up', 1);

    foreach (['red', 'yellow', '#003DF5', '#6633FF', …] as $index => $color) {
        $cursor->move($output, 'left', 20 - ($index * 4));
        $output->write(sprintf('%2$s', $color, str_repeat(' ', 20)));

        // …

    $cursor->move($output, 'left', 100)->restore()->show($output);

Use Hoa\Console\Cursor as a helper.

And more!

  • Readline (based on Hoa\Console\Readline),
  • Pager (based on Hoa\Console\Chrome\Pager),
  • Tput (based on Hoa\Console\Tput),
  • etc.

Hoathis\SymfonyConsoleBundle: Use the Symfony console bridge as a bundle

Under finalization.

Hoathis\SymfonyRulerBundle: Use Hoa\Ruler inside Symfony

Under construction.

To Vim and Neovim by
Ivan Enderlin

Contributions/Vim/Pp: PP support (from Hoa\Compiler) in Vim and Neovim

Install with Vundle:

Plugin 'hoaproject/Contributions-Vim-Pp'

:source %


To Zsh by
Ivan Enderlin

Contributions/Zsh/Hoa: Hoa\Cli support in Zsh

Install with Antigen:

antigen bundle hoaproject/Contributions-Zsh-Hoa

antigen apply


Site & documentations

New design


Menu opened

Community page

Search engine

Invite user to ask something

Provide some results


On the documentation, the blog and error pages

Based on isso (privacy matters)


Bye bye learn manual!

17 hack book chapters (+2), approximatively 365 pages  (A4) per language, 730 pages in total!

3 awecodes (+0)

Contributor guide (new, see next keynotes!)

Incredible work to translate all the documentation…

Ease the contribution by merging Hoathis\Documentation into Hoa\Devtools:

$ hoa devtools:documentation --language en

Around the project


Move from a datacenter in Marseille (France) to ScaleWay:

Move partially from ScaleWay to AWS:

A big mess. Much cleaner now. Scripting everything.


Offers new servers (migration done in December)
Offers a vast support (mainly financial)

Offers new mirrors for all repositories

Offers a free license of PHPStorm to each contributor

Build stickers and awesome stuff

New popular projects using Hoa

RulerZ, a powerful implementation of the Specification pattern

webmozart/console, a usable, beautiful and easily testable console toolkit (under implementing!)

Puli, intelligent packages for PHP (if previous point works, based on webmozart/console!)

ec2dns, a set of command line tools that makes it easy to display public hostnames of EC2 instances and SSH into them via their tag name

sabre/katana, a contact, calendar, task list and file server, synced, everywhere, all the time

PHP Metrics, a static analysis tool for PHP

Various projects, with a different public and
very different usages!



Growing at a good rate

Maturing, based on contribution amount

More involved:

Stars attrack stars, see popularity on Github:

Still welcoming and this is the most important point!

New big users: fruux, ownCloud, joliCode and inovia!

Source code

Maturing because more users and usages

Better tooling:

More friendly (Rush release again, PSR-1, PSR-2…)

Downloads are exponential:

Official contributions

More contributions

Include Hoa inside several tools:

We must attrack more “external” users

The main entry into industrial tool stacks for Hoa

We do the low-level job; you just need to plug everything for more awesomeness

Site and documentations

Good evolution

Lot of positive feedbacks

Need to write more hack book chapters:

Need to record new awecodes:

Around the project

Several changes in the infrastructure:

1 new sponsor: UnixStickers!

Awesome new projects using Hoa:

Thanks! ☺︎