A Makefile based CI/CD chain for Go

lunch button

Whatever the project you are working on, whatever the programming language, using a Makefile to handle common tasks is a great idea.

Makefiles are great at :

  • Mask the complexity of a task;
  • Handle multiple tasks;
  • Help contributors to start with your project;
  • Manage configuration using env var;
  • Define a common interface / standard between projects;
  • Abstract the underlying technology.

For all those reasons, make is a perfect fit with any CI/CD chain. Using a Makefile helps you define a simple and common interface usable whatever the CI/CD chain you plan to use. The only thing you will have to worry about is that your CI/CD chain tool will call the right target.

make something

And the job is done. It could be done with Travis. It could be done with Jenkins. The only thing that matters is the interface defined by your targets.

makefile

[Read More]

Handling validation errors from API-Gateway with AWS Amplify using ReactJs

Recently, I’ve been working with AWS in order to experience how it is to build a MVP really quickly. The goal I’ve been trying to achieve is to use as much AWS tools as possible to get a working product in production the fastest. aws-amplify

To do that, I choose to rely on :

  • Lambda for back-end code
  • API-Gateway for REST API
  • DynamoDB as a database
  • Cognito to manage Singnin / Singup and authenticated calls to the API.

[Read More]

Building a really smart Jabber chatbot with Dialogflow

Have you heard of Dialogflow?

Dialogflow (previously known as api.ai) is a conversational agent manager. Basically, you can see Dialogflow as a back-office were to manage an NLP engine.

robots

As an admin, you can create intents that represent a suite of similar “user says”. Under the hood, Dialogflow provide an AI (Natural Language Processing) that learns to match user inputs (called “user says”) with intents depending on the context, in order to provide the more logical/appropriate response. It could be an actual answer, called a “speech”, as it can be an action. For example : starting a job, running a command, etc.

[Read More]

Form validation with React using Formik and Redux

Form handling is a huge web development topic. There are almost only 2 ways to deal with form, depending on the lib / the framework you choose to use and depending on the side you are trying to handle your form (client vs server) : The ones that include form handling a component. This component usually does a lot of magic and force you to think your form the way it is going to be handle by the component. [Read More]

Parsing code snippets from markdown with Go

Those time, I’ve been thinking that choosing the right vendor that fit your needs or will solve your problem has became a pain. With the growth of platforms like Github and dependencies management tools (whatever the language) more and more people share their work and open source the peace of code they have created to solve a specific problem. That’s great ! But at the end… you find out that for a given problem you want to solve, their are tones of libs that claim to do the same thing but each in a different way. [Read More]

As a developer in 2016, you need to learn Emacs (or Vi)

How to improve your productivity writing code and force yourself to think twice.

This post is not another Emacs vs Vi troll. My point is to explain why (deeply) learning to use a low level text editor is one of the first things any software engineer should do. I have personally chose Emacs because I found common shortcuts easier to memorize. As you will see later, it doesn’t matter which one of those editors you like to use, as long as you have learned to use it.

Editors like Emacs may seems old but they have been thought to be productive tools. Shortcuts are optimized with your hands place on the keyboard and the most used key. They let you do your work as quickly as you can think about it but still, they force you to think about what you’re doing. Not only they let you learn how to be more productive, they make you understand what you do instead of writing code with crappy CRLF.

Master your working environment.

I often meet developers working on a software or a web application development trying to master the programming language and the framework they use. This is a good idea, for sure. It let you being more productive with time. But, at some point, programming a new feature in your development environment is not enough to get things done. More effective and more comfortable you become with the software code, more features you should be able to design, code, and make run into production. And yet, most of the time, this doesn’t go as well as you expected. There could be thousands of management and technical reasons which explain why you don’t succeed at getting things done. Obviously, if your company culture is that only one of the lead developers is in charge of pushing new features into production, your possible improvement is limited (And you probably should think about quitting you job). However, most of the time, this is not the reason why you can’t push the feature you just get reviewed and validated into production. Most of the time, you just don’t want to work (or people don’t want you to work..) on the production environment because you don’t master it.

So, as (not) expected, mastering your working environment doesn’t mean mastering MS Windows. It means, however, mastering your VCS, mastering the deployment tools you use, mastering the server configuration (such as Apache or Nginx), mastering the programming language configuration, mastering Linux configuration and the Linux logging system.

As you probably know, all those tools configuration is made trough text files you need to edit directly on the server. At this point, no chance to open any of the graphical text editors you use everyday. Here is where comes Emacs (or Vi).

Emacs

[Read More]

Symfony REST api : validating data that will be stored in different entities

REST is great. But, most of the time, it is quite hard to think your web services architecture in a way that each WS is stateless. Let’s think about a common use case. The problem If you have to design a personal data form and wish to ask the user to complete some fields such as the name, the firstname, the birthdate, and two addresses with, for each, an addresse, a city, a zipcode, and a country. [Read More]

Docker : Remove all images

If you have ever add to work with docker and and docker-compose, you probably often have mistaken in you Dockerfile. Specially when you work with multiple container build from multiple Dockerfile and tag differently. Here is a simple way to clean all your docker images. Show images : {% highlight sh %} $ docker images {% endhighlight %} Delete all container : {% highlight sh %} $ docker rm $(docker ps -a -q) {% endhighlight %} [Read More]

Estimation des projets au forfait : la contractualisation itérative, une piste de réflexion

L’état des projets informatiques en 2015

Le rapport Big Bang Boom publié en 2014 par le Standish Group met en exergue de façon très pragmatique la principale cause de l’échec d’un projet informatique :

A Big Bang theory for software and information technology projects is that everything needs to come together at once to have a working solution that is universal to all stakeholders.

Il explique, notamment, que sur un panel représentatif de projet IT :

  • 42% échouent purement et simplement;
  • 52% ne répondent pas aux contraintes imposées (coût, délais, qualité, périmètre, etc.);
  • 6% seulement réussissent.

Par ailleurs, ce même institut fait une analyse plus globale de l’évolution des projets IT au fil du temps dans son fameux Chaos report.

RSE

On y constate que la réussite d’un projet informatique est un challenge que peu d’entreprises réussissent.

[Read More]