My top 5 books of 2018

Disclaimer: This list is not a “top 5 book of 2018”. I’ll discuss the best books I‘ve read during 2018. Some of them were released many years ago while some may appear pretty bad to you compared to what you’ve read on your side. These are my best readings this year, I’m not the New York Times best sellers list ;).

5) The 4-Hour Work Week: Escape the 9-5, Live Anywhere and Join the New Rich – Timothy Ferriss, 2007

I’m still reading this one so I can only talk about the first half of it, but I love it. This is a book about productivity and thinking out of the box. It explains how you can leverage the difference of currencies and how to become a “new rich” by working less but more efficiently.

Even if most of the tips in this book won’t work if you are bound to a place (can’t work remotely from another country), there is still a ton of great ideas and models you can apply. This is a great motivational book and, as someone who seeks motivation on a daily basis, this book helped me focus on my vision by giving me useful tools.

4) Your second life begins when you understand that you only have one – 
Raphaëlle Giordano, 2015

I know how the synopsis of this book sounds: a success story that nobody can apply to his/her life. And this is wrong on every level. Remove the fictional part of the book and you have a practical guide for positive psychology that will help you have a fresh start if you need to.

This book has a lot in common with what my wife and I did during the past year: we hacked our life to exit the routine we were in (I’m preparing a series of posts about that so I won’t go into much details here). De-cluttering, meditation, positive thinking… this book gives so many helpful tips that it’s no longer a simple novel to me (even if sometimes, I admit, there are some cheesy parts).

3) A Brief History of Time: From the Big Bang to Black Holes – Stephen Hawking, 1988

Ever wondered how the rules that made the universe work? This book is a pretty good summary of everything we now today about general relativity, quantum physic, black holes and the search for a unified theory that could explain what happens at singularity points.

I’ve also read “Black Holes And Baby Universes And Other Essays”: it’s, in my opinion, a good follow up to “A brief history of time”, so if you want to pay tribute to the great man Stephen Hawking was, do yourself a favor and read these books.

This book can be a little intimidating, it is definitely not the book you want to read before going to sleep, but it’s a great book.

2) Ready Player One – Ernest Cline, 2011

When I heard about the upcoming film of Steven Spielberg last year I couldn’t resist having a closer look at the story and it has been on my reading list ever since. 

If you haven’t seen the movie, the story is basically a dystopia taking place in a near future (2044) where everyone plays (and works, and learns…) in a virtual reality world named “the Oasis”. You will follow the story of a young man competing in a quest for an Easter egg inside this virtual world.

I remember exactly where I picked it up: Harvard Book Store in Cambridge near Boston. I was on a trip for work and I was visiting Harvard University like every tourist in the area, I had run out of books to read and was trying to figure out what I could enjoy during the flight back to France when I picked it up. I remember reading 3 pages in the library and saying to myself “Oh boy, this book is like heroin, if I start reading it I won’t be able to stop”.

This is the most addictive book I have ever read. Maybe it won’t be for people that aren’t familiar with the geek culture of the 80′ / 90′ but I doubt that you won’t find a reference to something you used to like as a child. A comment I loved about this book is: “Harry Potter for grown-ups”, I find that quite accurate. Also, even if you have seen the movie, you can still read the book: there are countless differences, the end isn’t quite the same and the depth of the movie is irrelevant compared to the book.

1) Factfulness – Hans Rosling, 2018

Factfulness is, for sure, the book that changed the most the way I see the world. I deliberately don’t read the news and avoid as much as possible the TV so the view I have of the world problems isn’t biased by that, but I still wasn’t even remotely close to the facts shown in the book.

I mean, you think the world is going nuts, right? That everything is wrong and that the developed countries are more than ever crushing developing countries under their economy? Think again.

This book basically shows that you, as almost everyone, are wrong about a lot of things and that the world can be bad AND better at the same time.

I got this book from the list of recommendations from Bill Gates earlier this year, and I can see why he puts it in his top books too. 

What’s next for 2019?

I’ve read 15 books this year and plan to allocate twice the time I allocated this year on reading books. I won’t go into the details of my list of books to read but I already gave out one of my sources: Bill Gates. This man has a freaking good taste when it comes to reading material, and he has a dedicated section on the gatesnotes website about it. His top 5 looks really cool and I’m looking forward to it, especially “Army of None” which will probably be my next reading.

I hope this list has been helpful and if you decide to read it or have done so already, I’d be glad to discuss them with you 🙂

Happy Holidays everyone!

Continue Reading

Dive log: Gran Canaria

Marie and I were in Gran Canaria mid-september and we wanted to share that with you 🙂

The view

Starting with the obvious: the view was impressive. We were located on the south west of the island in the city of Puerto Rico. The coast is beautiful and mainly composed of good looking beaches (Playa del Cura, Playa de Amadores, Playa de Purto Rico, Puerto  Mogan) with rock formations in between.

The island is the second largest one of the Canaria archipelago, it’s a volcanic and quite arid island. We had only one week to spend and wanted to dive as much as possible, so we didn’t explore the island as much as we would’ve liked to, but I heard that the center of the island is a must see.

The island is actually a UNESCO Biosphere reserve and is home to more than 500 endemic species. Also, if you like hiking, I heard that the apex of the volcanic formation is very nice.

The dives

Miguel our savior 😀

Disclaimer: for those who don’t know us very well, we are Advanced PADI divers, but we have only a few dives so we are definitely not experts :D.

Anyway,  as it’s been a while since we dove we wanted to do easy dives at first. We dove 8 times (well, 7 for Marie as she got a back pain on the last two days and wasn’t able to do the last dive we planned) in various spots located at maximum 30 mins by boat.

Arguineguin / Mushroom reef

We did 3 dives here, the conditions were good each time, without much current. It’s not a deep dive as the spot is ~14m deep, we followed the border of the reef, so we had white sand on one side, where we saw a band of snappers and some barracudas (I guess they were interested in the snappers :P), and the reef on the other side.

There aren’t many corals, but there were some impressive sting rays, octopuses, eels and trumpet-fish.

Copyright Gary Crawford, a Diver trainer from Dublin o/

Mogan wrecks

Just outside the harbor of the small fishing village named Mogan lie two wrecks at 18m deep. The first one, named Alegranza is 60m away from the second one, a dutch fishing boat sunk on purpose quite recently. Both are the habitat of some octopuses and eels, most likely you will also see sting rays and school of smaller fish.

During this dive you will probably get a visit from a submarine (for the tourists to see the wrecks): don’t forget to salute them while enjoying a closer experience with the marine life than them :P.

Pasito Blanco

Pasito Blanco plateau

The best dive site in my opinion.

We saw a lot of eagle rays, sting rays, eels, parrotfish, trumpetfish, wrass. There is a lot of life in the corals and sea anemones, and when you pass the end of the plateau in the deepest part at approximately 21m, you will most likely see large school of snappers and grunts with barracudas. This site has everything, and if you have to pick one site I highly recommend this one.

Medio Almud

Another nice dive is the Medio Almud site. At 22m deep lies a small wreck named  “Armando Theodora”. We saw a lot of huge sting rays there, and at the end we played with a very large school of grunts and snappers: it’s so fun to get lost in the middle of thousands of them 🙂

Blue bird wreck

The Blue Bird wreck

This dive was my last one (the one that Marie unfortunately couldn’t do). This is a deep dive (~45m) restricted to advanced divers that already
have some deep dives in their diving log.

I felt very priviledged to do this dive, there were only 3 of us (+ the boat driver), the sea was so quiet early in the morning it was just perfect. There was no current at all, and the free fall until we reached the bottom was delightful.

The wreck is a 30m long ferry of the Blue Bird company. I wish I saw an angel shark for this last dive as we were deeper and the water was colder at this depth, but unfortunately we did not see one. On the other hand we saw a large school of grunts and barracudas, lots of eagle rays (yay \o/) and sting rays. Funny note: there is a toilet that lies near the wreck, if you want to take funny pictures there, be very welcome to share them.

The Dive Center

From left to right: Marie, Domingo, Steve, Kyle, Clement, Hugo

I can’t talk about this trip without mentioning the guys with whom who dove. Those guys are awesomely funny and friendly, and still such professionals.

Hugo was our main instructor, he comes from Belgium and is a really nice and humble guy, I enjoyed diving with him very much. Kyle and Domingo are also very friendly and the last one on the picture Steve is the funniest guy from the whole UK. We missed Karl (another experienced English diver) and Miguel (the boat driver) on the picture but they are equally warm-hearted.

To sum up: if you want to dive in this area, Top Diving is definitely a very good place to stop by.

Special Encounter

Atlantic spotted dolphins !

We decided to go on a dolphin/whale encounter boat trip in the middle of our stay. It was our best experience of the stay, no less.

It’s a 3-hour boat trip where you go 10km into the sea (~30min), the biologist searches for dolphins or whales for ~2 hours, and then you come back and make a quick stop to go swimming (not with the dolphins unfortunately :P).

It was a weird day: there was a sandstorm in the Sahara desert in Africa not far from the island (only 220km!), which caused a dust storm during two days and especially that day, thus making it hard to search for dolphins. Locals call this phenomenon Calima. After 10 mins in the sea we couldn’t see the coast (see what I did there?), and the skipper was having some difficulties to see far away.

We did not see any whales but after approximately 45 mins we saw hundreds of Atlantic spotted dolphins (~300 of them); it was literally breath taking and I would definitely call it a must see.

Conclusion

I hope you enjoyed the quick sum-up of our trip. I would definitely recommend the island for a nature tour. If I were to do it again, I guess I would probably spend more time exploring the center of the island and probably cook my own food instead of trying tourist traps in this this area, but overall we loved the place.

Continue Reading

Cloud Engineering on GCP as a Symfony Developer

Hello there, today we are going to talk about Symfony development in the cloud using Google Cloud Platform. This first post will describe how to:

  • Start a project on Google Cloud Platform
  • Setup a basic Continuous Integration and Deployment system
  • Configure Logging
  • Hopefully, have some fun

Start the project

Let’s start with the inevitable and go to the GCP console and create a new project

Then go to the App Engine section and enable the API. You will have a very quick tutorial on the right that you can follow (or ignore as we will cover the subject of using the gcloud app command in a moment).

It’s now time to bootstrap our Symfony application:

$ composer create-project symfony/skeleton blog && cd blog
$ composer require dotenv annotations template log google/cloud
$ composer require web-server-bundle maker tests --dev

You should now be able to see your website running locally by launching the built-in web-server. That means it’s time to deploy our application on the cloud (how epic):

# app.yaml
runtime: php
env: flex

env_variables:
  APP_ENV: 'prod'
  DOCUMENT_ROOT: '/app/public'
$ gcloud app deploy

And that’s it (yes, for real).

Version control

Having a website is cool and all, but you probably want to collaborate with other people on this project and also have your sources under version control, right?

# Initialize your source control
$ git init && git add .
$ git commit -am "Initial commit"

Option 1: Google Cloud Repository only

Using only google cloud repository might be a good option for closed source or if your workflow doesn’t require pull requests, so here is how you can use it:

$ gcloud source repos create blog
$ git config --global credential.https://source.developers.google.com.helper gcloud.sh
$ git remote add google   https://source.developers.google.com/p/symfony-test-215316/r/blog
$ git push google

Option 2: Github

We all love Github, the pull requests, the integrations with other services, why not use it? Create a Github repository and as described for google, add the remote and push your code to it.

Continuous Integration

Now that our VCS is configured we can start defining our continuous integration workflow. I’ll use a super simple one in this blog post: I want every push to build a dedicated image of the application tagged with the commit number, and launch basic tests.

Let’s create a cloudbuild.yaml file that describes the workflow and a super simple Dockerfile:

# Dockerfile
FROM gcr.io/google-appengine/php
# .dockerignore
.gcloudignore
.git
.gitignore
vendor/
var/
Dockerfile
.dockerignore

You should be able to build the image locally now using docker build. Now we want to automate that on google so that when we push some code we don’t have to build manually this container image to test it, so let’s do that by creating a cloudbuild.yaml file and calling the Google Cloud Build service.

steps:
  # Build
  - name: 'gcr.io/cloud-builders/docker'
    args: [ 'build', '--build-arg', 'COMPOSER_FLAGS=--dev', '-t', 'gcr.io/$PROJECT_ID/$REPO_NAME:$COMMIT_SHA', '.' ]
  - name: 'gcr.io/cloud-builders/docker'
    args: [ 'push', 'gcr.io/$PROJECT_ID/$REPO_NAME:$COMMIT_SHA' ]

After that, you want to enable the Google Cloud Build integration to GitHub and push your modification to a branch to see it in action.

50 sec, nothing to be ashamed of

Add some tests

Well, launching your tests is as easy as adding the following step in your cloudbuild.yaml:

  # Test
  - name: 'gcr.io/$PROJECT_ID/$REPO_NAME:$COMMIT_SHA'
    args: [ 'bin/phpunit' ]
    dir: /app
    env:
      - 'APP_ENV=test'
      - 'WHITELIST_FUNCTIONS=shell_exec,passthru,proc_open,proc_close'

Generate some tests to try it out and see the tests executed on Cloud Builds:

$ bin/console make:functional-test IndexControllerTest

Continuous Deployment

The good news with Google App Engine is that it’s really easy to integrate with Cloud Builds. You will have to adapt the build steps a little bit and trigger the deployment from here:

# cloudbuild.yaml
steps:
  # Deploy
  - name: 'gcr.io/cloud-builders/gcloud'
    args: ['beta', 'app', 'deploy', '--quiet', '--image-url', 'gcr.io/$PROJECT_ID/$REPO_NAME:$COMMIT_SHA', '--version', '$BRANCH_NAME', '--no-promote']

Then you will have to grant permissions to Cloud Build service, so that it can perform actions on the App Engine service. This is done by giving the related service account the roles App Engine DeployerService Usage Viewer and App Engine Service Admin, also enabling the App Engine Admin API.

Next step: profit

South Park, Season 2 – Episode 17

Push your modifications on a new branch, wait a few minutes and you should see your branch deployed as a new version.

Logging and Error reporting

Sometimes it can get hard to debug what is actually going on in production. Usually you are given plain text Apache logs and you have to guess what’s wrong (hoping you have a stack trace here). But this is the part I love in modern cloud platforms, they have plenty of great tools built-in.

Nonetheless, you will have to configure Monolog so the default logger does not send the log in the error output nor in a file, but directly into stackdriver. Also you might want to add an ExceptionSubscriber that will catch all your fatal & uncaught exceptions 😉

# config/packages/prod/monolog.yaml
monolog:
    handlers:
        main:
            type: fingers_crossed
            action_level: info
            handler: nested
            excluded_404s:
                # regex: exclude all 404 errors from the logs
                - ^/
        nested:
            type: service
            id: Monolog\Handler\PsrHandler
...
# services.yaml
services:
    ...
    Monolog\Handler\PsrHandler:
        arguments: ['@Google\Cloud\Logging\PsrLogger']

    Google\Cloud\Logging\PsrLogger:
        factory: ['Google\Cloud\Logging\LoggingClient', 'psrBatchLogger']
        arguments:
            - 'app'
<?php

namespace App\EventSubscriber;

use Google\Cloud\ErrorReporting\Bootstrap;
use Google\Cloud\Logging\PsrLogger;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;

class ExceptionSubscriber implements EventSubscriberInterface
{
    private $logger;

    public function __construct(PsrLogger $logger)
    {
        $this->logger = $logger;
    }

    public function onKernelException(GetResponseForExceptionEvent $event)
    {
        $exception = $event->getException();

        Bootstrap::init($this->logger);
        Bootstrap::exceptionHandler($exception);
    }

    public static function getSubscribedEvents()
    {
        return [
           'kernel.exception' => 'onKernelException',
        ];
    }
}

Now that the “hard” work is done you can enjoy a powerful logging directly in the Google Console <3

Info log, group by request with all the useful information
a Fatal error, next image shows that same error in the Error Reporting
Beautiful isn’t it ?

Monitoring & Availability

At this point, without any optimization, as a Site Reliability Engineer, I’m very tempted to stress that server out to see how it handles the load. So let’s try to break it using Apache benchmark by simulating 15 users making a total of 1000 requests:

$ ab -k -c 15 -n 1000 https://my-branch-dot-my-project.appspot.com/

Wait, what is this? black magic?

Ohhh right, auto-scaling: depending on the traffic, CPU usage, memory usage and more, the system automatically adds instances to serve the requests.

Very brutal test (20 000 requests over 5 mins by 150 users)

I must say I’m very impressed by the performance out of the box. I did no optimization whatsoever and I struggle to get a bad request.

Also note that EVERYTHING can be graphed in Stackdriver, you can even turn any log into metrics, combine them and add alerting on top of that.

This is observability heaven

A/B Testing (because why not?)

A/B testing is another feature that you benefit from as a built-in feature of App Engine. With our current setup, create a new branch with the modifications you want to test, it will get automatically deployed, then split the traffic according to the A/B testing rule you want (usually you will want IP based load balancing if it’s a visual feature, but for a demo “random” is just fine)

This is the easiest tool for A/B testing I have ever seen… You basically have nothing to do: setup some metrics to see which version is better and you are good to go.

Conclusion

There is so much more to cover that a book  wouldn’t be enough. Embracing DevOps and becoming a Cloud engineer in a No-Ops context is taught and requires time to master, but I can assure you that it’s worth it.

I mean, look at that, in a matter of minutes (ok, maybe a few hours) you are almost “production ready”, have a working  CI/CD pipeline, a fully monitored system and are even able to apply A/B testing!

I hope you enjoyed this post and that it helps newcomers in the wonderful world of Cloud Engineering. Feel free to reuse and share as much as you want and/or leave a comment!

Continue Reading

echo(“Hello world”);

We are glad to start this blog with this post title. “We” means Marie & Clement, we are IT consultants based in Nantes, a city on the west coast of France.

Why did we start this blog?

For a while now, we’ve been exploring life and we want to share our experiences with as many people as possible. Also, our usual platforms aren’t the best medium for what we want.

What you see is what you get

We will cover different subjects that matter to us, such as traveling, diving, meditation and well-being in general, cooking and so on (And, of course, programming stuff, because that’s what we are good at mainly as you can suppose from the job title).

An ETA?

Nope, not going to happen (but we’ll do our best to  keep content flowing here) 🙂 We are going to travel next week, and Clement is going to do a presentation on Cloud Engineering very soon, so hopefully we will have time to share this with you.

See you soon!

Continue Reading