About me

I am here and you are on this site because we are sharing the same passion : Software

My name is Sylvain Leroy and I am developing and saving software from all kind of sickness.

What is defining me the most precisely is my passion for Software and coding.

As explained on my company site (byoskill.com), I have three passions :

  • Software craftmanship (SQA)
  • Legacy software migration
  • and startup environments

I have been doing that from so long

I discovered coding something around 10, on our family Commodore 64/128.

Commode 64/128

Commode 64/128

Back in these times, I didn’t know about coding, I learnt how to use it to get what I wanted. Games, interests. I was curious to manipulate and understand this strange creature.

Basic program

Basic program

Of course I had normal activities, friends, sports. However this machine fascinated me. We had two big books, in English, a foreign language to me, full of code listing. I spent numerous to painstakingly type them on this computer. Some code were games, some revealed to be funny noise / sound effects, plane engine.

I had the chance to be from the generation who grew up with computers and incredible progresses.

We switched one day to x86, a 286 with single coloured screen. I remember the screen was pale glowing in my room at night.

I made obvious progresses in Basic, QBasic, Visual Basic (my college passion),  switched to Pascal(Delphi) at 14 during the middle school.

At 16, I was efficient in Delphi and I tried the C language without enthusiasm.

I discovered at the same time ASM/Z80 programming to use on my Texas calculator and I switched from Pascal to ASM, with all the set, TASM, TLINK.

The book “the Art of Assembly Language” had a huge impact on me. I printed it with our good old printer in 4 big binders. And started to love it.

I continued until 18 my experience of assembly programming on two fields :

I finally has switched to C/C++ late 19 using Visual C++. I have been slowly mastering it. I was always tempted to switch to ASM using asm statements. To program with limited resources is so much funnier than with high level languages.

A lucky meeting changed my life and course

I have been following a Computer science diploma in two years at the University of Rennes 1 (Lannion). And then I discovered I could not work in industrial automation because a wrong choice of course. I switched to a general computer sciences Licence (3rd year).

During my master degree, I choose as exam project, a technical project in which we were supposed to write a Java syntactic analysis tool (linter). This meeting with this professor, Francois Bodin, had a influence of my final year of study, and at minimum the next ten years of my life.

Together, under his tutelage, we imagined a research project, a project of company creation, and we launched it. It was Tocea, which lived from 2009 to 2015 before being absorbed by a Software Editor, Metrixware.

In my mind; I am and will be eternally grateful, for the opportunity – the seed – Francois offered to me. It has been an  incredible adventure. This environment was totally new for me, my family, my surrounding, given our social origins.

Serenitec : research project

Serenitec : research project

Tocea : my passion, and my initiatory route

Offically Tocea has been created in March 2010 after 3 years of research project and one year of incubation.

Research project Serenitec

Research project Serenitec

We were three at the beginning, and the project was called Navis.

Against, there, Marie-Anne  and Florent, have been of a great help and influenced positively the view of what could be Tocea, both socially and professionally.

Tocea / modele_carte_recto2

Tocea / modele_carte_recto2

A french article here of this period.

Francois Morin, is also important to me, since we brought Tocea to its maturity together. Co-founding a company is never simple. We had to learn from each other, to be able to work together. The stability and the trust of our relationship has been like the warm fireplace that attracts the frozen voyagers. And we simply attract the best to reach together our ambitions as a small software editor we were.

Our company had his life , successes and failures , joy and pain but I remember it as a wonderful social experience. I have seen students coming for their first experience, getting their first job, growing up and becoming our real assets. Tocea has been a success (humanely) thanks our people. They gave us our trust, and we tried together to create something great.

Links :

The transition

Tocea ended peacefully to become a more serious business under the acquisition by Metrixware. Fair enough, Metrixware, a well-known software editor specialized in Legacy system and migrations, saved us at that time, our business was in a full transition after some critical mistakes and a hard business year (for the whole sector).

I learnt much from being there about processes, change management and also company culture. Three things crucial for the success of any projects.

Now, I am wandering, by the flows of my dear family and my passion

As a lucky father of two children, husband of a devoted wife who is from an incredible help and amazing wisdom, I am enjoying my new road, currently in Switzerland.

I have been since working full time as IT Consultant for large institutions. Recently, I created a small structure www.byoskill.com in which I am providing my experience for dedicated missions.

Each encounter, with either a Software either a team, is pushing me forward to what I love the most :

Empowering people, saving Software and developing great tools.

 

0

Using S3 libraries with Minio mock server

Minio WebUI

In the continuation of my previous S3 article,

I present you, how to write a S3 Java Sample program that is using a mock S3 server to develop the functionalities.

Continue Reading

0

How I switched my blog from OVH to Google Container Engine

In this short story, I will relate how I migrate my blog personal website from a classic VM instance to Google cloud using Kubernetes, Docker, Nginx.

Onoe of my personal goal was also to have a cloud deployed website without spending any money.


Motivations

Long story made short, I have been using Docker on several projects since one year. I progressively got accustomed with the ease of deployment provided by Docker. The issue ? The day I have launched my blog (on February 2017),for time and cost reasons, I picked an VPS instance from OVH.

Why OVH ? Clearly it is one of the cheapest IAAS provider and quite popular there in France. I have been using it for several projects without any major issues.

OVH has an offer of public cloud OVH Public cloud. However the offer looked immature at that time both in documentation than on reviews. The second reason of my rejection is about cloud adotpion. A lot of experts are turned toward GCloud and AWS. Spending my efforts on OVH would not provide enough visibility at short term, in my job.

To better accompany my colleagues and customers to adopt the cloud , I have decided to eat my own dog food. And among my personal projects, I have decided to migrate first my blog.

And to switch my blog from OVH to Google Cloud (Container Engine).

 Pricing

Here are some interesting articles about pricing and functionalities for the major cloud providers :

Technical situation

My blog is hosted on a VPS server (shared instance on OVH). I have installed on it, Apache 2, some monitoring and security system and Let’s encrypt to obtain a free SSL certificate.

Hexo command line

Hexo command line

My blog is not using the classifical wordpress, I am quite fond of static website generators and more recently of flat/headless CMS.

I am using HexoJS as a CMS. Main features are you are writing your article in Markdown and the blog has to be regenerated to produce the static files, producing quite optimized pages.

Hexo command line

Hexo command line

How to switch from a legacy deployment to the cloud.

These are the explanations how I proceed to migrate this website.

 A) Create my Google Cloud Account

Yes, we have to start from the beginning and I created a new Google Cloud Account. Though it is rather easy to create its account, I have been surprised. It was impossible to for me to pick an individual account.

It’s even in the Google FAQ (FAQ).

{% blockquote By Google FAQ %} I’m located in Europe and would like to try out Google Cloud Platform. Why can’t I select an Individual account when registering? {% endblockquote %}

The reason (thanks EU.. ) is dumb as fuck : In the European Union, Google Cloud Platform services can be used for business purposes only

For information, in Switzerland, the limit is lifted.

Interesting enough, the free trial on Google Cloud has been expanded to 300$ for one year.

B) Discover Google Cloud

Well the UI is easy to manipulate even with this nagging collapsing menu on the right side.

Google Cloud Console

Google Cloud Console

The documentation is quite abundant but I found two major issues :

  • Lack of pictures and schema : most concepts are described with a bunch of words. Fortunately, some very kind people made great presentations (here and here).
  • Copy/Paste from the Kubernetes website : yeah most of the documentation can be found on Kubernetes, logically.
  • Lack of informations and use cases : for some examples as using this damn Ingress. Why people are not providing Gist 🙂

I created a cluster with two VM instances, 0.6GB of RAM and 1 core. Indeed I wanted to play with the load balancing features of Kubernetes.

Create a cluster

Create a cluster

C) Replicate my server configuration as a Docker container

The easiest and funniest part has been to reproduce my server configuration with Docker and to include an evolution. I wanted to switch from Apache 2 to Nginx.

First solution I created. I used a ready-made (and optimized) container image for Nginx and modified my build script to generate the Docker image. The generated website is already integrated into the Docker image.

FROM bringnow/nginx-letsencrypt:latest

RUN mkdir -p /data/nginx/cache
COPY docker/nginx/nginx.conf /etc/nginx/nginx.conf
COPY docker/letsencrypt /etc/letsencrypt
COPY docker/nginx/dhparam /etc/nginx/dhparam
COPY public /etc/nginx/html

I made several tests using the command docker run to check the configuration on my own machine.

docker run --rm -i -t us.gcr.io/sylvainleroy-blog/blog:latest -name nginx

D) How to host my Docker image ?

My second question has been how to store my Docker container ?

Creating my own registry ? Using a Cloud Registry ?

I have used two different container registries in my tests.

First is the Docker Hub.

Docker Hub

Docker Hub

What I appreciate the most with the Docker Hub, is that I can delegate the creation of my Docker images to the Hub by triggering a build from GitHub. The mechanism is quite simple to enable and really convenient. Each modification of my DockerFile is triggering a build to create automatically my Docker image!

Here is a small draw to explain it :

Docker Hub & Builds draw

Docker Hub & Builds draw

And some part of the configuration.

Docker Builds Configuration

However Google Cloud is also offering a container engine and its usage has been redundant. I kept it to use it with CircleCI.

Therefore for the time being, I am storing my Docker container on Google Cloud.

Google Cloud Container Registry

Google Cloud Container Registry

With this kind of command :

gcloud docker -- push us.gcr.io/sylvainleroy-blog/blog:0.1

E) The Cloud migration in itself

Maybe it is one my fancy side, but I have only used the GCloud CLI to perform the operations.

Install Google SDK

Everything go smoothly but don’t forget to install Kubernetes CLI.

gcloud components install kubectl

I had a problem with the CLI. It could not see my new projects (only some part of them) and I had to auth again.

gcloud auth login

And perform a new login to see the update.

Don’t forget to also add your cluster credentials using the GUI instructions (button connect near each cluster).

Google Cluster

Google Cluster

gcloud container clusters get-credentials --zone us-central1-a blog

 Understanding the concepts of Pod, deployment

It took me time to understand what is a deployment and a pod. Using docker and docker-compose I could not attach the concepts.

That is one of my concerns with Kubernetes, some technical terms are poor and does not really help to understand what is behind.

Well, I finally create a deployment, to create two docker instances inside my pod (replica=2). This deployment file is declaring basically that it requires my previous Docker imamge and that I want two copies. The selector and the label mechanism is quite handy.

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: blog-deployment
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
        role: master
        tier: frontend
    spec:
      containers:
      - name: nginx
        image: us.gcr.io/blog/blog:0.9
        ports:
          - containerPort: 80
            name: http
          - containerPort: 443
            name: https 

I use such commands to create it :

̀kubectl create -f pod-blog.yml

KubeCtl Pod informations

KubeCtl Pod informations

 Automating the generation, docker image building and deployment

I have automated the full cycle of my site generation, docker building and container registry and pod reload using CircleCI.

CircleCI Deployment Schema

CircleCI Deployment Schema

And the good thing is that all these things are free.

 Feedback

After playing during two weeks with it on my spare time, I have the following feedback :

 Rolling Update

The deployment mechanism and how the rolling update is performed are impressive and a time-saver.. Some banks are still using an manual way or semi-automated way like Ansible to deploy their software and the rolling updates are performed awkwardly. Here Kubernetes is deploying on the background the new version, controlling its state (roughly) and if the conditions are met, switching from the old version to the new version. I am using this mechanism to bench my Docker new images and push the new versions.

 Load Balancing mess

I had to struggle a lot to set up my load balancer. Well, not at begin. Kubernetes and GCloud are describing precisely how to set-up a Level-4 LoadBalancer. It takes few lines of YAML and it was fine. However, I had huge difficulties when I decided to switch to TLS and my HTTPS Connection with Let’s encrypt.

I met several difficulties :

  • How to register my SSL certificate on a Docker container tough not deployed ?
  • What the fuck is a NodePort ? The difference with ClusterIP and a LoadBalancer and an Ingress ?
NodePork

NodePork

  • Where should I store my certificate ? in the GCloud configuration or in my NGINX ?
  • Why Ingress is not working with multiple routes ?

To address the following issues, I found the temporary solutions :

  • I am using Certbot/Let’s Encrypt certification using DNS. That way, I can generate my certificates "offline".
  • I am not sure about the definition of what is a NodePort, either I need a LoadBalancer for a single container in my pod or simply open the firewall. These concepts, introduced with Kubernetes are still obscure for me, even after several reading.
  • I took the decision to implement my HTTPS LoadBalancing by modifying my NGINX configuration to store the certificate and rely on a Level 4 LoadBalancer to dispatch the flow.
  • I tried really hard to make Ingress working (the level-7 LB) but even the examples where not working for me (impossible to map the port number 0 error) and really bad documented.

 Persistent volume

The documentation about persistent volumes is not precise in Kubernetes and GCLoud and have important differences between the implementation and Google and even between versions.

You have many possibilities :

  • Use a Persistent Volume, PersistentClaim and attach them to your containers
  • Generating directly a volume from your deployment file

Another issue I have met, my docker container was failing (and the pod itself) because the persistent volume created is never formated.

But why ????

Indeed in your deployment file, you have properties to set the required partition format. But no formating will be performed.

And therefore I had the following next issues :

  • How to mount something unformated ?
  • How to mount something unformated in a container of the pod without using the deployment ?
  • Why is there so few documentation in Google Container Engine (in comparison with Google Compute Engine) ?

The recommended solution is to create an VM instance by HAND using Google Compute Engine, to mount attach the disk to the instance. To mount it manually and trigger the formatting. WTF

If you have a better way to handle the issue, I am really interested!

Conclusion

After a month of deployment, I haven’t spend a buck. My page response time decreased from 3.4s to 2.56s And I am not waking up during the night, the eyes full of horror thinking about how to reinstall the site. I only have a container to push.

I am not using yet the Kubernetes UI and I don’t see yet the necessity. The CLI offers almost everything.

Cleaning a cluster, the pods and deployments requires several steps and maybe could be simplified.

 Pricing

One very important aspect of my project was also to decrease the bill to host the site.

Currently, here is my bill for 1600 visits per month :

  • I have a GitHub private repository (~7$/month)
  • I am using the free tier of CircleCI offering me the usage of a Private GITHub repository and important number of build
  • Docker Hub is free for any number of public repositories and 1 private docker repository.
  • I am using the free tier of Google and I spent 1$ in one month and the bill is shared between my blog and my other projects.
  • I have a cluster of 2 VM for my blog

Compared to my 79€/year for my VPS.

Interesting links

0

Disruption in Software Quality Assessment ?

As many other markets, the SQA/ALM Market soon will meet #disruption. Domains like machine learning, deep learning and cloud computing will force it to evolve in the next few years. This article is presenting some predictions about the future of the quality tools.

Disruption in Software Quality Assessment

Disclaimer I am not a native english speaker and I am perfecting my english skills by writing these articles. If this topic interests you, please comment below or share the article to your friends. And every syntax, grammar mistakes will be fixed under your wise comments.

A new generation of Software quality tools is going to emerge. Machine Learning, Deep Learning, DevOps, Continuous Delivery, Continuous Integration, Cloud Computing, all these movements are influencing the SQA/ALM Software Editors. It has never before been so easy and cheap to produce a new static analysis tool to measure some aspects of a software. The Opensource movement and the market evolution are the direct contributors to this state. Made famous under the name of “linters”, well-known and unknown developers are creating the tools required to their activities. And the Software editors are faced to the dilemma : “Should I continue to build my own tools ? What should be my behaviour confronted with this plethoria of scanners ?”.

Until recently, Software developers were depending of the highly-specialized skills from the Quality Software Editors to detect, analyze and fix the bugs inside their softwares. And it is a big source of frustration. From both sides. Developers are usually complaining that the rules do not reflect their real needs or the complexity of their softwares. “Quality tools do not detect real problems or too late or under a trillion of false positives”. Software Editors are providing to the hungry population rule sets, standards to satisfy the crowd. A crowd much much bigger than their own forces.

I am predicting that the disruption may be coming from these directions :

  • From the open-source : soon or later, the basic needs of developers will be fulfilled by the open-source offer. Tools like PMD, Findbugs, and so on have inspired a whole generation of developers. The young developers through the Angular 2, ReactJS, Go are already educated to the benefits of Quality tools. And they are heavily relying on linters well-integrated in their CI or in their IDE (Atom, Code). Twitter, Facebook are continuously producing and releasing in opensource new tools to help the developer community. The recent examples of Flow or PrePack are helping a lot developers to increase the quality of their products.
  • From the digital technologies. The increasing level of maturity of the machine learning and deep-learning technologies should bring us shortly new kind of tools to predict bugs, predict code defects and usual developer decisions. I believe that the scientific researches from Microsoft and Google will contribute indirectly to the Software Quality tool market. This topic is unsurprisingly very discussed (here).
  • From the software development process transformation : Movements like Agile, DevOps, Continuous Integration and Deployment, ChatBots are deeply changing the way developers are collaborating. Several aspects are changing : communication (Slack, Hipchat), software building (Jenkins, Travis CI, Microsoft TSF & Azure), software deployment (containers, PAAS, Amazon AWS)… The way a product is conceived, built and deployed requires to track and measure several quality aspects. The integration effort to produce these metrics and KPI’s is tremendous and have to be adapted to each organization. Would the developers be enough satisfied with code quality or will they require higher levels metrics extracted from their development process.

Conclusion

Who will be the future leaders in the ALM market ? Who will be the fastest to adapt to the current technology and data disruption ? Do you have some tools that could match these descriptions ?

If that article has been useful or interesting, stay connected, I will produce new articles on that subject.

One of my future article will present Codacy, an emerging code quality platform. This platform offer to ease the quality control as soon as possible in your development process to detect the bugs early and surely. I will compare this solution with the famous market leader SonarQube.