atoum has two release managers

What is atoum?

Short introduction: atoum is a simple, modern and intuitive unit testing framework for PHP. Originally created by Frédéric Hardy, a good friend, it has grown thanks to many contributors.

atoum’s logo.

No one can say that atoum is not simple or intuitive. The framework offers several awesome features and is more like a meta unit testing framework. Indeed, the “user-land” of atoum, I mean all the assertions API (“this is an integer and it is equal to…”) is based on a very flexible mechanism, handled or embedded in runners, reporters etc. Thus, the framework is very extensible. You can find more informations in the README.md of the project: Why atoum?.

Several important projects or companies use atoum. For instance, Pickle, the PHP Extension installer, created by Pierre Joye, another friend (the world is very small 😉) use atoum for its unit tests. Another example with M6Web, the geeks working at M6, the most profitable private national French TV channel, also use atoum. Another example, Mozilla is using atoum to test some of their applications.

Where is the cap’tain?

Since the beginning, Frédéric has been a great leader for the project. He has inspired many people, users and contributors. In real life, on stage, on IRC… its personality and charisma were helpful in all aspects. However, leading such a project is a challenging and nerve-wracking daily work. I know what I am talking about with Hoa. Hopefully for Frédéric, some contributors were here to help.

Where to go cap’tain?

However, having contributors do not create a community. A community is a group of people that share something together. A project needs a community with strong connections. They do no need to all look at the same direction, but they have to share something. In the case of atoum, I would say the project has been victim of its own success. We have seen the number of users increasing very quickly and the project was not yet ready for such a massive use. The documentation was not ready, a lot of features were not finalized, there were few contributors and the absence of a real community did not help. Put all these things together, blend them together and you obtain a bomb 😄. The project leaders were under a terrible pressure.

In these conditions, this is not easy to work. Especially when users ask for new features. The needs to have a roadmap and people taking decisions were very strong.

When the community acts

After a couple of months under the sea, we have decided that we need to create a structure around the project. An organization. Frédéric is not able to do everything by himself. That’s why 2 release managers have been elected: Mikaël Randy and I. Thank you to Julien Bianchi, another friend 😉, for having organized these elections and being one of the most active contributor of atoum!

Our goal is to define the roadmap of atoum:

  • what will be included in the next version and what will not,
  • what features need work,
  • what bugs or issues need to be solved,
  • etc.

Well, a release manager is a pretty common job.

Why 2? To avoid the bus effect and delegate. We all have a family, friends, jobs and side projects. With 2 release managers, we have 2 times more time to organize this project, and it deserves such an amount of time.

The goal is also to organize the community if it is possible. New great features are coming and they will allow more people to contribute and build their “own atoum”. See below.

Features to port!

Everything is not defined at 100% but here is an overview of what is coming.

Baba, from Astérix and Obélix.

First of all, you will find the latest issues and bugs we have to close before the first release.

Second, you will notice the version number… 1.0.0. Yes! atoum will have tags! After several discussions (#261, #300, #342, #349…), even if atoum is rolling-released, it will have tags. And with the semver format. More informations on the blog of Julien Bianchi: atoum embraces semver.

Finally, a big feature is the Extension API, that allows to write extension, such as:

class Foo {

    protected function bar ( $arg ) {

        return $arg;
    }
}

// and…

class Foo extends atoum\test {

    public function testBaz ( ) {

        $this
            ->if($sut = new \Foo())
            ->and($arg = 'bar')
            ->then
                ->variable($this->invoke($sut)->bar($arg))->isEqualTo($arg);
    }
}

Now you will be able to test your protected and private methods!

  • atoum/bdd-extension, allows to write tests with the behavior-driven development style and vocabulary; example:
class Formatter extends atoum\spec {

    public function should_format_underscore_separated_method_name ( ) {

        $this
            ->given($formatter = new testedClass())
            ->then
                ->invoking->format(__FUNCTION__)->on($formatter)
                    ->shouldReturn('should format underscore separated method name');
    }
}

Even the output looks familiar:

Possible output with the atoum/bdd-extension.
class Foo extends atoum\test {

    public function testIsJson ( ) {

        $this
            ->given($string = '{"foo": "bar"}')
            ->then
                ->json($string);
    }

    public function testValidatesSchema ( ) {

        $this
            ->given($string = '["foo", "bar"]')
            ->then
                ->json($string)->validates('{"title": "test", "type": "array"}')
                ->json($string)->validates('/path/to/json.schema');
    }
}
class Foo extends atoum\test {

    public function testFoo ( ) {

        $this->if($regex  = $this->realdom->regex('/[\w\-_]+(\.[\w\-\_]+)*@\w\.(net|org)/'))
             ->and($email = $this->sample($regex))
             ->then
                …
    }
}

Here, we have generated a string based on its regular expression. Reminder, you might have seen this on this blog: Generate strings based on regular expressions.

Fun fact: the atoum/json-schema-extension is tested with atoum obviously and… atoum/praspel-extension!

Conclusion

atoum has a bright future with exciting features! We sincerely hope this new direction will gather existing and new contributors 😄.

❤️ open-source!

Hello fruux!

Leaving the research world

I have really enjoyed my time at INRIA and Femto-ST, 2 research institutes in France. But after 8 years at the university and a hard PhD thesis (but with great results by the way!), I would like to see other things.

My time as an intern at Mozilla and my work in the open-source world have been very seductive. Open-source contrasts a lot with the research world, where privacy and secrecy are first-citizens of every project. All the work I have made and all the algorithms I have developed during my PhD thesis have been implemented under an open-source license, and I ran into some issues because of such decision (patents are sometimes better, sometimes not… long story).

So, I like research but I also like to hack and share everything. And right now, I have to get a change of air! So I asked on Twitter:

And what a surprise! A lot of companies answered to my tweet (most of them in private of course), but the most interesting one at my eyes was… fruux 😉.

fruux

fruux defines itself as: A unified contacts/calendaring system that works across platforms and devices. We are behind sabre/dav, which is the most popular open-source implementation of the CardDAV and CalDAV standards. Besides us, developers and companies around the globe use our sabre/dav technology to deliver sync functionality to millions of users.

fruux’s logo.

Several things attract me at fruux:

  1. low-layers are open-source,
  2. viable ecosystem based on open-source,
  3. accepts remote working,
  4. close timezone to mine,
  5. touching millions of people,
  6. standards in minds.

The first point is the most important for me. I don’t want to make a company richer without any benefits for the rest of the world. I want my work to be beneficial to the rest of the world, to share my work, I want my work to be reused, hacked, criticized, updated and shared again. This is the spirit of the open-source and the hackability paradigms. And fortunately for me, fruux’s low-layers are 100% open-source, namely sabre/dav & co.

However, being able to eat at the end of the month with open-source is not that simple. Fortunately for me, fruux has a stable economic model, based on open-source. Obviously, I have to work on closed projects, obviously, I have to work for some specific customers, but I can go back to open-source goodnesses all the time 😉.

In addition, I am currently living in Switzerland and fruux is located in Germany. Fortunately for me, fruux’s team is kind of dispatched all around Europe and the world. Naturally, they accept me to work remotely. Whilst it can be inconvenient for some people, I enjoy to have my own hours, to organize myself as I would like etc. Periodical meetings and phone-calls help to stay focused. And I like to think that people are more productive this way. After 4 years at home because of my Master thesis and PhD thesis, I know how to organize myself and exchange with a decentralized team. This is a big advantage. Moreover, Germany is in the same timezone as Switzerland! Compared to companies located at, for instance, California, this is simpler for my family.

Finally, working on an open-source project that is used by millions of users is very motivating. You know that your contributions will touch a lot of people and it gives meaning to my work on a daily basis. Also, the last thing I love at fruux is this desire to respect standards, RFC, recommandations etc. They are involved in these processes, consortiums and groups (for instance CalConnect). I love standards and specifications, and this methodology reminds me the scientific approach I had with my PhD thesis. I consider that a standard without an implementation has no meaning, and a well-designed standard is a piece of a delicious cake, especially when everyone respects this standard 😄.

… but the cake is a lie!

sabre/*

fruux has mostly hired me because of my experience on Hoa. One of my main public job is to work on all the sabre/* libraries, which include:

You will find the documentations and the news on sabre.io.

All these libraries serve the first one: sabre/dav, which is an implementation of the WebDAV technology, including extensions for CalDAV, and CardDAV, respectively for calendars, tasks and address books. For the one who does not know what is WebDAV, in few words: The Web is mostly a read-only media, but WebDAV extends HTTP in order to be able to write and collaborate on documents. The way WebDAV is defined is fascinating, and even more, the way it can be extended.

Most of the work is already done by Evert and many contributors, but we can go deeper! More extensions, more standards, better code, better algorithms etc.!

If you are interested in the work I am doing on sabre/*, you can check this search result on Github.

Future of Hoa

Certain people have asked me about the future of Hoa: Whether I am going to stop it or not since I have a job now.

Firstly, a PhD thesis is exhausting, and believe me, it requires more energy than a regular job, even if you are passionate about your job and you did not count working hours. With a PhD thesis, you have no weekend, no holidays, you are always out of time, you always have a ton (sic) of articles and documents to read… there is no break, no end. In these conditions, I was able to maintain Hoa and to grow the project though, thanks to a very helpful and present community!

Secondly, fruux is planning to use Hoa. I don’t know how or when, but if at a certain moment, using Hoa makes sense, they will. What does it imply for Hoa and me? It means that I will be paid to work on Hoa at a little percentage. I don’t know how much, it will depend of the moments, but this is a big step forward for the project. Moreover, a project like fruux using Hoa is a big chance! I hope to see the fruux’s logo very soon on the homepage of the Hoa’s website.

Thus, to conclude, I will have more time (on evenings, weekends, holidays and sometimes during the day) to work on Hoa. Do not be afraid, the future is bright 😄.

Conclusion

Bref, I am working at fruux!

Trip in India

Backpacks and homestays

I have always travelled by camping. I don’t like hotel so much, except for 1 or 2 nights, for a “weekend escape”. With my wife, we like to travel a lot also, and this is one of our biggest affinity I think. We have travelled in most of continents: north and south of America, north and middle of Africa, Europe of course, but we have never visited Asia. What is the best place to start visiting Asia? India of course. And to be frank, she has decided to visit India so all I had to do was to acquiesce 😉.

Even if we travel in campsites, we use a car most of the time. For the first time, we have travelled only with backpacks, no car, no bags. Moreover, since campsites are not very common in India (for several reasons, like security and just because of cultural aspects) we have decided to visit homestays. Every time we have travelled in a specific country, we have spent time in someone’s house. This is by far the best way to discover people, their cultures, their passions, their style of life and also to speak about politics, economics etc.

Thus, with 4 bags ( \displaystyle 1 \times 35 L, \displaystyle 1 \times 60 L and \displaystyle 2 \times 8 L), we have left our home to go to Basel airport, direction Dubaï and then Ernakulam.

Trip

Months before starting, we have sketched a “big tour”. Our goal was to avoid massive touristic tours and spots. So we have asked indian friends on Twitter or Facebook or even in IRL (oh!) about interesting spots. Then we have only booked for the first homestay. For the rest of the trip, we booked the next homestays 2 or 3 days before. It was a very nice experience. This way of travel offers a huge feeling of freedom. You do whatever you want whenever you want. And because it was the average touristic season, most of the homestays had at least one room available.

Our plan was (and has more or less been) the following:

  1. arriving at Ernakulam (എറണാകുളം),
  2. first stop at Alappuzha (ആലപ്പുഴ),
  3. second stop at Kozhikode (കോഴിക്കോട്),
  4. third stop at Wayanad,
  5. fourth stop at Mysore (ಮೈಸೂರು),
  6. fifth stop at Kotagiri (கோத்தகிரி),
  7. last stop at Fort Kochi before going back (ഫോർട്ട് കൊച്ചി).

This trip covers 3 states: Kerala (കേരളം), Karnataka (ಕರ್ನಾಟಕ) and Tamil Nadu (தமிழ் நாடு), and is about 1200km, in 18 days.

Camera

I have a Nikon D600. Even if I have several lens, I don’t like to visit countries with a bag full of lens, which represents more money than people from the countries could never have. So I took only one lens: the Nikon AF-S 24-85mm f/3.5-4.5 G ED VR. This is not the best lens I ever used, however the 24mm is beautiful (especially on a FF) and the price was very low (thanks to the refurb of Nikon USA!).

All photos are handheld. No flash and no filter. The post-production has been very slight.

Alappuzha

Alappuzha is a very nice place. A lot of nature and a lot of water. This place is very calm, and hopefully for us because my wife’s arm was damaged several days. The doctor visit was also very funny by the way 😉.

The following photo has been taken while a birds walk, at the sunrise.

Alappuzha in one photo.

The following photo has been taken at the sunset, on a boat, in one of the numerous canals.

Landscape art.

Kozhikode

Second stop. Hari and I met on Github. He is a contributor of the Aura project and this trip was a good opportunity to finally meet him in real life! He has gently welcomed us in his home, with his wife and family.

When Hoa meets Aura.

We didn’t see a lot of places at Kozhikode but we have shared precious moments with this family, both in the kitchen and in the living room or even in the homes of other family’s members. Another precious moment was during the “shopping day” (we always try to bring back some gifts to our family). Oh, by the way, I will have a surprise for the public of my next conference, I have a bet to win!

We have even been published in the “local” newspapers!

Published in the newspaper!.

This is definitively a souvenir that only few people can have 😉.

Wayanad

Next step. We left the city for nature again. We have visited an old temple, some spice plantations, waterfalls etc.

Old temple.
Coffee.

As in the first stop, we have slept in a farm. This is an unrivalled opportunity to learn a lot about plants, spices, fruits, cooking and history.

Mysore

Third stop. Mysore is a big city. Do not go there for the food or for the cleanliness of the street. However, Mysore holds an old market and one of the most beautiful palace of India.

Powder pyramids.
The Mysore Palace.
The Mysore Palace illuminated.

Unfortunately, it is not allowed to take photos inside the palace. Nevertheless, when the night comes, you can appreciate the palace illumination. And this is a real experience. My wife was saying all the time: “We are in India, in front of an illuminated palace, surrounded by temples!” with a big smile on its face 😄.

Kotagiri

After a big city like Mysore, we enjoyed to reach Kotagiri. At 2000m with a temperature around 5/10°C, it contrasts a lot with all the other regions and places we have visited. You can enjoy endless tea plantations.

Tea plantation everywhere.

Fort Kochi

Finally, before taking the airplane to go back, we have spent few days at Fort Kochi. This is definitively a touristic spot and it was quite shocking for us. This was the only place where we have seen strangers.

Chinese square dipping net.

The last night was a cultural one. We have attended to a theater representation, called Kathakali. No word. Just music and moves. One thing to definitively see is the make-up.

Kathakali.

Conclusion

This was a quick summary of our trip in India with few photos. You can see more on my Flickr account. And now, it’s time to leave the research world and start a job 😄 </bad_teasing>.