Portfolio - Axel Berardino

Projets, articles, cv, ...

Reverse engineering d'une API de course de bateau

Contexte En 2021, lorsque je travaillais pour Zenly sur le projet maplens, nous recherchions de nouvelles idées de lens. Une lens consistait en l’affichage d’informations complémentaires sur la carte de l’utilisateur, comme par exemple les stations vélibs avec leurs états en temps réel, les toilettes publiques, les cours de baskets, etc… Nous voulions une lens encore plus “temps réel”, et qui serait dans l’actualité. Au même moment, une fameuse course de bateau autour du monde avait lieu.

Pourquoi passer au Rust

Rust n’est pas juste un langage avec une syntaxe différente, il incorpore les meilleures idées de différents autres langages, et le code s’écrit vraiment différemment. Ce n’est pas le premier langage à tenter cela, mais jusqu’à maintenant, tout tentative de faire du “haut niveau” incluait de sacrifier la performance. Rust est une révolution en ce que la performance n’est non seulement pas sacrifiée, mais mis en avant. Au niveau du langage, si on devait mettre en avant très rapidement Rust, on retiendrait:

Pourquoi la majorité des entretiens techniques est inadaptée

Le problème actuel et ce qu’il ne faut pas faire La plupart des tests techniques donnés aux candidats sont inadaptés. Une majorité de sociétés recrutent encore sur des aspects ayant peu de rapport avec leur mission. Très souvent, la réussite d’un candidat dépend plus de la chance que des compétences réelles. Voici un petit florilège des pires pratiques actuelles et pourquoi ça ne fonctionne pas. Le qcm Le questionnaire à choix multiples est souvent orienté sur de la syntaxe ou des aspects précis d’un langage.

Les macros en Rust

Les macros en Rust Les macros en Rust sont loin d’être simple à prendre en main, et l’aide sur le sujet est assez limité (à l’heure où j’écris ces lignes). L’un des cas où j’ai eu à les utiliser intensivement, est lors de l’écriture de longs tests unitaires très répétitifs. Macro avancé pour des cas complexes Disons que nous voulons répéter un pattern, comme ceci: cafe "with" 1 "checkins" => [(&cafe, 1)] cafe "with" 1 "checkins", school "with" 3 "checkins" => [(&cafe, 1), (&school, 3)] cafe "with" 1 "checkins", school "with" 3 "checkins", cinema "with" 8 "checkins" => [(&cafe, 1), (&school, 3), (&cinema, 8)] "nothing" => [] Il nous faudra une macro similaire à celle-ci:

Écrire de bons commentaires

Comment écrire de bons commentaires Écrire du code est une chose, mais faire en sorte que celui-ci reste compréhensible à tous y compris soi-même, nécessite un peu d’effort. C’est là que le commentaire entre en jeu. Les commentaires sont là pour aider à la compréhension du code. Ils accompagnent le lecteur en lui évitant une fastidieuse lecture de code. Le seul souci, c’est que parfois ces commentaires sont mal écrits. Non seulement, la lecture n’est plus facilité, mais elle devient alors très difficile !

Calculer le temps d'exécution en C++

Calculer le temps d’exécution Très souvent, on est amené à calculer le temps mis par une fonction ou un morceau de code. De nombreuses méthodes différentes existent pour arriver à ce but, mais toutes ne sont pas fiables ou précises. Linux Sous Linux, il est généralement conseillé d’utiliser gettimeofday (précision à la microseconde). Il existe aussi clock(), mais celle-ci est peu précise (précision à la milliseconde). Windows Sous Windows, il est généralement conseillé d’utiliser QueryPerformanceCounter précision à la microseconde).

N'utilisez pas NULL en C++

N’utilisez pas NULL en C++ Je vois très souvent des gens utiliser “NULL” en C++. “NULL” ne devrait pas être employé. Nous allons voir pourquoi, mais revenons d’abord sur son apparition dans le langage C. Une histoire NULL Au tout début du C, les constantes n’existaient pas. Dès le moment où l’on avait besoin de valeurs constantes, on utilisait le préprocesseur. Le type le plus abstrait à cette lointaine époque, était “char*”.

Du bon usage du using namespace

Je vois très souvent la notion de namespace, mal utilisée. J’explique souvent sur le forum, la raison pour laquelle il faut absolument proscrire des écritures du genre: using namespace. Voici un petit tutoriel exhaustif sur la raison pour laquelle je déconseille fortement ce genre de pratique. Dans ce tutoriel, je vais aborder la notion d’espace de nom. En effet, je vois très souvent des programmeurs C++, mal les utiliser. Entrons directement dans le vif du sujet: n’utilisez pas using namespace, jamais !

Réalisation d'un compilateur (partie 2)

Réalisation d’un compilateur: Partie 2, le lexing Dans le précédent article nous avons brièvement vu les différentes étapes qui permettaient de créer un exécutable. Abordons maintenant la première phase plus en détail. Dans cette étape il va falloir non seulement détecter et extraire les tokens du fichier source, mais aussi les vérifier. Enfin, l’ensemble de ces tokens sera sauvegardé puisqu’ils sont indispensables à la réalisation des étapes suivantes. Quelques bonnes pratiques Avant d’aller plus loin, il est important lorsqu’on aborde un projet de cette taille, de se fixer quelques bonnes pratiques.

Réalisation d'un compilateur (partie 1)

Réalisation d’un compilateur de pascal simplifié en C++ Introduction : Pourquoi réaliser un compilateur ? Tout développeur est amené à utiliser un compilateur. Toutefois peu sont ceux qui savent réellement comment fonctionne celui-ci. Cet article et les suivants sont donc là, d’une part pour présenter les différentes étapes de compilation, et d’autre part pour expliquer comment créer un programme qui réalisera l’ensemble de ces étapes. Qu’est-ce qu’un compilateur ? Avant la venue des langages de programmation, les programmeurs devaient connaître par cœur l’architecture de la machine sur laquelle ils travaillaient, et parler directement à celle-ci à l’aide d’un langage binaire.