How to do polymorphism in C ?

Thursday, 31 October 2024
|
Écrit par
Grégory Soutadé

At work, I had to write a code architecture with types polymorphism in C language. The idea is very basic : one header with common functions and multiple backend implementations. At compile time, we decide which kind of implementation is taken. This can be achieved in a very elegant way using a not so much known C feature : forward definition.

First, a quick recap :

here is a declaration of a function (usually in a header):

int my_func(void); 

Here is a definition of a function (usually in a .c file):

int my_func(void) { return 4; }

This is the same for structures.

Good solution

When compiling, compiler checks that types match declaration, but it needs definition only when object is handled. So, we can create an opaque structure (lets say struct my_struct_s) that can have multiple implementations using its pointer version:

public_header.h

#ifndef _PUBLIC_HEADER_H_
#define _PUBLIC_HEADER_H_

/* Opaque type "my_struct_s" */
struct my_struct_s;
typedef struct my_struct_s* my_struct_t;

my_struct_t init(void);
void do_something(my_struct_t param);
void print_my_struct_t(my_struct_t param);
void delete(my_struct_t param);

my_struct_t init2(void);
void do_something2(my_struct_t param);
void print_my_struct_t2(my_struct_t param);
void delete2(my_struct_t param);

#endif

And two private implementations:

private.c

#include "stdlib.h"
#include "stdio.h"

#include "public_header.h"

/* Private implementation */
struct my_struct_s
{
    int member_i;
};

my_struct_t init(void)
{
    my_struct_t res;

    res = malloc(sizeof(*res));
    res->member_i = 0;

    return res;
}

void do_something(my_struct_t param)
{
    param->member_i++;
}

void print_my_struct_t(my_struct_t param)
{
    printf("I'm an integer with value %d\n",
           param->member_i);
}

void delete(my_struct_t param)
{
    free(param);
}

private2.c

#include "stdlib.h"
#include "stdio.h"

#include "public_header.h"

/* Private implementation */
struct my_struct_s
{
    char member_c;
};

my_struct_t init2(void)
{
    my_struct_t res;

    res = malloc(sizeof(*res));
    res->member_c = 'a';

    return res;
}

void do_something2(my_struct_t param)
{
    param->member_c++;
}

void print_my_struct_t2(my_struct_t param)
{
    printf("I'm a character with value '%c'\n",
           param->member_c);
}

void delete2(my_struct_t param)
{
    free(param);
}

In main.c

#include "public_header.h"

int main()
{
    my_struct_t var;

    var = init();
    do_something(var);
    print_my_struct_t(var);
    delete(var);

    var = init2();
    do_something2(var);
    print_my_struct_t2(var);
    delete2(var);

    return 0;
}

In this example, both implementations are present in output program. But, we can use only one implementation, selected at compile time, and thus have same function names in both private.c and private2.c.

This example works because my_struct_t is a pointer to struct my_struct_s. So, type is checked correctly, and it doesn't care about pointed value unless operation like increment, decrement or dereferencement is done on it. For example, in main.c :

struct my_struct_s var2;

Will generate an error:

error: storage size of ‘var2’ isn’t known

Bad solution

Another solution for pylomorphism is

typedef void* my_struct_t;

But, I do not recommend to write it, because in this case pointer type is not checked, void* is too generic and match all of them. This code compiles without warnings and can lead to type confusion error !

#include "stdio.h"
#include "public_header.h"

typedef void* my_struct_t2;

static void print_string(char* a)
{
    printf("Value of param '%s'\n", a);
}

int main()
{
    my_struct_t2 var;
    var = init();
    do_something(var);

    print_string(var);

    delete(var);

    return 0;
}

NB : In my examples, I use "stdio.h" only because "<" and ">" are removed by code coloration.

La Poste et moi

Monday, 21 October 2024
|
Écrit par
Grégory Soutadé

La Poste d'Espelette

On a tous une histoire avec La Poste, notamment les personnes qui ont connu l'entité en tant qu'organisme d'État. Il faut dire que le facteur est une personne qui nous connaît par procuration, via les courriers et les colis que l'on reçoit et qu'il délivre de par sa tournée. Il reste pourtant souvent dans l'ombre de nos boîte aux lettres. Si, dans l'inconscient collectif, le groupe a une réputation plutôt moyenne, je dois dire que personnellement, et en dehors des périodes estivales, je n'ai de mémoire jamais eu de problème de livraison. Au contraire, le facteur arrive même à compléter les éléments parfois manquants de l'adresse, et ça, c'est quand même vachement bien !

Pourtant, tout n'est pas rose. Particulièrement quand on discute avec celles et ceux qui ont travaillé pour le groupe avant le changement de statut. Mais également avec la plupart des personnes du service publique qui ont connu une période dorée jusque dans les années 1990/2000. C'est d'ailleurs en 1991 que les PTT sont séparés de France Telecom pour devenir La Poste, alors une entreprise publique autonome. Cette transformation est l'application d'une directive très libérale Européenne visant à supprimer les monopoles d'État (pour ouvrir les marchés à la concurrence). Deux an plus tard (novembre 1993) voit la ratification du traité de Maastricht qui transforme la Communauté Européenne en Union Européenne, telle que nous la connaissons aujourd'hui.

La deuxième étape majeure pour le groupe intervient en 2010 avec la création d'une Société Anonyme en lieu et place de l'entreprise publique autonome. Si l'aspect financier et rentabilité se retrouvent sous le feu des marchés, l'aspect politique reste inchangé puisque la société nouvellement créée est détenue à 66% par la Caisse des dépôts et consignations et à 34% par l'État Français. Du fait de son statut d'entreprise privée, le groupe se doit donc, à minima, de trouver un point d'équilibre financier. Pas évident dans un monde en transformation constante et rapide. Notamment quand son statut de service publique lui a offert une arme à double tranchant : un maillage territorial important, donc une masse salariale importante. Ce maillage permet pourtant de délivrer des services locaux qu'aucune autre entreprise ne serait en mesure de créer sur le court terme. Pourtant, il a tendance à disparaître dans les zones peu rentables. Les services postaux et associés y sont peu à peu confiés à l'administration (via les bureaux de mairie) ou à des sociétés locales (bar, commerce...).

Pour faire rentrer de l'argent, La Poste n'a donc d'autres choix que la diversification. Le groupe, via ses multiples filiales, est aujourd'hui un monstre présent un peu partout : livraison de courrier, livraison de colis (Collisimo, Chronopost, DPD), Immobilier, Finance (La Banque Postal), Prévoyance, Assurance, Bourse (EasyBourse), Telecom (La Poste Mobile), Cinéma, Numérique (Docaposte). Dans le numérique, elle se paie même le luxe de racheter le logiciel Pronote et la plateforme KissKissBankBank. Il faut reconnaître que cette stratégie semble fonctionner puisque depuis 2004 (alors que le nombre d'entités est en croissance), le groupe a toujours été bénéficiaire. La crise du COVID lui a même permis de doubler son résultat net à plus de 2 milliards d'euros ! Pourtant, à partir de 2019, et malgré une réduction des effectifs de 30% depuis 2004, la dette du groupe n'a cessé d'augmenter passant de ~3/4 milliards à plus de 10 milliards d'euros en 2022 ! Le conseil d'administration semble être devenu accro à l'endettement, ce qui ne présage rien de bon pour la suite.

La Poste a donc besoin de se ré inventer constamment pour rester en vie. En ce qui concerne son cœur de métier (courrier - colis), elle propose des services assez innovants, mais pas forcément très bien mis en avant.

  • Le premier qui permet de gagner en temps de livraison tout en diminuant la pollution est l'impression à distance. L'idée est de faire imprimer le courrier par l'agence postale la plus proche du destinataire. La confidentialité en prend pour son compte, mais l'efficacité est de mise !

  • Le second est la possibilité d'imprimer à la maison son bon de livraison, de le coller sur son colis et de le mettre dans sa boîte aux lettres. Le facteur se chargera de le récupérer le lendemain et de le déposer lui même au bureau de poste. Ce qui évite les files d'attente et/ou le fait de devoir se déplacer dans un bureau dont les horaires ne nous conviennent pas forcément (notamment quand ils sont tenu par des agents de mairie). Attention cependant, le colis ne sera pris en charge pour le transport que le lendemain du dépôt au bureau (donc J+2 par rapport à l'impression de l'étiquette).

  • Dans la même veine, on peut désormais imprimer ses timbres numériques, même si La Poste continue de vendre toute une collection de timbres originaux (ou classiques).

  • Pour augmenter ses marges, la société met également en vente des cartons de taille diverses et variées dans ses agences.

Tout n'est donc pas parfait avec cette entreprise qu'au fond on aime bien (et donc que l'on châtie bien), mais il faut savoir reconnaître et mettre en valeur les bons aspects quand ils existent. Ce que les Français ont beaucoup de mal à faire !

Hello, I'm a hacker

Sunday, 06 October 2024
|
Écrit par
Grégory Soutadé
Hello!
I am a hаckеr who has аccess to your operating system.
I also have full аccess to your account.
...

C'est le genre de message que l'on reçoit (malheureusement) de plus en plus souvent... Il va s'en dire qu'il s'agit d'un SPAM. Il a d'ailleurs été classifié comme tel par gmail. Le texte est rédigé dans un Anglais parfait. Problème : la cible ne parle pas forcément cette langue. Dans le doute ils tentent quand même...

Les arguments déployés sont de nature à mettre le destinataire en état de stress :

  • L'ordinateur a été piraté par un cheval de Troie (trojan)
  • Le pirate a pris des photos intimes via la caméra (sans pour autant joindre des preuves)
  • Le cheval de Troie est indétectable par un anti virus car il est polymorphe (et il utilise le driver ?)
  • Le pirate va envoyer les photos à tous nos contacts et les publier sur les réseaux sociaux
  • Son email est intraçable
  • Le pirate ne fait pas d'erreur
  • Si on tente de prévenir quelqu'un d'autre, il mettra ses menaces à exécution

La rançon (parce que c'est le plus important) est de 1300 dollars (1200 €) à payer dans les 52 heures sur une adresse bitcoin (soit 0,000016 bitcoin). Il n'y a pas de lien étrange dans ce SPAM.

Là où ça devient intéressant et qui est souvent un critère de détection des SPAM : l'adresse email d'émission semble parfaitement valide : Hope Mcknight info@protonmail.com. Proton Mail offre des solutions (mail, calendrier, espace de stockage, VPN, gestionnaire de mot de passe, gestionnaire de crypto monnaie) sécurisées et garantissant la vie privée (du moins sur le papier). Elle est basée en Suisse, à Genève. Hope Mcknight semble être une personne réelle, même si on peut se douter que l'adresse "info" ne correspond pas à une adresse personnelle. Il s'agit donc d'une technique appelée "spoofing" ou usurpation d'identité. Elle consiste à afficher une adresse valide qui ne correspond pas à l'émetteur réel.

Maintenant, si l'on regarde avec attention le message original du mail avec toutes les entêtes, on peut noter :

Authentication-Results: mx.google.com;
       spf=softfail (google.com: domain of transitioning info@protonmail.com does not designate 45.95.146.101 as permitted sender) 

et surtout l'auteur original :

Received: from linkmasters.ru (linkmasters.ru [45.95.146.101])

Ces deux messages sont très intéressants car ils nous disent, d'une part, que l'adresse IP d'émission ne correspond pas à un serveur de Proton Mail (ses adresses sont référencées dans ses entrées DNS) et, d'autre part, qu'il vient en fait d'une société d'envoi d’email "linkmasters" d'origine Russe. L'IP du serveur émetteur (45.95.146.101) correspond quant à elle à un hébergeur de serveurs Néerlandais, ce qui augmente les chances de passer à travers les filtres anti-spam.

Ce message nous ramène donc directement à l'actualité. Pour passer outre les sanctions internationales et le désengagement Occidental en Russie, un des moyens de financer la guerre est de rançonner la population. C'est le genre de message qui ne coûte quasiment rien à envoyer et peut rapporter gros car la somme demandé est importante, mais en adéquation avec ce que serait prêt à payer les personnes pour protéger leur intimité. Il est le plus souvent l’œuvre d'un groupe de hackers malveillants plus ou moins sponsorisé par leur gouvernement respectif. Les champions en la matière sont Russes, mais aussi Chinois, Nord Coréen et bien d'autres.

Pour éviter que ses clients ne se fassent abuser, tout hébergeur de mail un tant soit peu sérieux se doit donc de vérifier les paramètres SPF et si possible DKIM (qui utilise une signature cryptographique) des messages entrants.

Malheureusement, dans la panique et parmi la masse de personnes touchées, certaines peuvent céder et payer la rançon.

Courses de fin d'année (2024)

Monday, 23 September 2024
|
Écrit par
Grégory Soutadé

Logo Odyssea

L'association Odyssea qui apporte du soutien à différentes associations de lutte contre le cancer propose cette année pas moins de 13 courses en France et en Outre Mer ! Celle de Cannes se déroulera le dimanche 20 octobre 2024 à 9h, boulevard du Midi Louise Moreau à Cannes, pour le départ du 10km et à 11h pour le 5km (une seule boucle sur le front de mer). Une course enfant (1km) est également disponibles. Un conseil cependant : venir récupérer son dossard la veille, les bénévoles n'arrivant pas à tous les distribuer avant le départ.

_Retour: Les organisateurs ont appris de leurs erreurs puisqu'il y avait pas moins de 3 tables pour délivrer les dossards ! Le seul petit "hic" : une édition record avec 5 300 participants ! Donc une file d'attente importante devant les 2 points d'entrée du square Mistral. Ce cru 2024 fut ainsi une bien belle édition qui a vu s'élancer 879 personnes sur le 10km (un record !), accompagnés d'une météo très douce (~19°C). Heureusement que quelques cirrus apportaient un peu de fraîcheur. Pour ma part je visais une allure moyenne de 4'40, 4'37 (13 km/h) dans l'idéal, mais sans avoir de référence concrète. En effet, à cause des fortes chaleurs tardives, la préparation a été assez courte (en plus d'une reprise poussive depuis juin dernier) et il me manquait 2/3 semaines d'entraînement intense pour arriver à rivaliser avec mon temps de 2022. Malgré tout, le corps a bien répondu me permettant de tenir les ~4'35. Pourtant, la course a commencé à être difficile dès les 4km. Finalement, Le dernier kilomètre, m'a permis d'atteindre une moyenne de 4'33 pour un résultat final en 45'30 (113 / 879). Le sentiment est donc partagé, car la barrière des 4'30 n'était pas si loin. Pourtant, je garde en mémoire le fait d'avoir tout donné, du début à la fin. C'est avant tout la raison profonde de ma participation. Grâce à cette grande mobilisation, les 3 associations soutenues (le Centre de lutte contre le cancer Antoine Lacassagne, ASSO Cannes et SOS Cancer du sein PACA) ont pu repartir avec un chèque de 50 000 €.

Départ course des paroisses

Que faire le lundi 11 novembre 2024 (après les commémorations) ? Venir prendre une bonne bouffée d'oxygène dans l'Estérel sur les 12km de sentiers tracés par les bénévoles de la paroisse de St Raphaël ! Comme chaque année, ce sera la traditionnelle course des Paroisses. Et après la course crêpe et/ou bière pour se remettre de ses efforts. L'autre option étant un parcours de 5km ou bien la marche guidée (non chronométrée).

Retour: Ce fut encore une grande fête avec pas moins de 407 participants ! (Sans compter la randonnée). Le tout sous un beau soleil (plutôt chaud), mais un fond de l'air assez frais. La majeure partie du circuit étant ombragé, les conditions étaient donc très agréables. Cette année, le circuit a encore changé pour se stabiliser à 12km (11,6km originellement et 12,2km l'année précédente). La traditionnelle descente finale se voit donc rallongée d'une autre longue descente sur le bitume d'environ 1km, de quoi améliorer son temps de parcours ! (Enfin, pour ceux qui n'ont pas déjà eu un infarctus). J'étais pour ma part dans une forme moyenne, et les premiers kilomètres ont été un peu laborieux. Heureusement, je me suis accroché à un lièvre, ce qui m'a donné un surplus d'énergie et l'envie de ne rien (re)lâcher. J'ai ensuite pu dérouler après le point de bascule pour finir fort. Le résultat final est donc plutôt bon avec une 57e place (sur 189) et un temps de 1h et 30 secondes (allure de 5'01). Vivement l'année prochaine !

Logo Cross Amnesty International

La 41e édition du cross Amnesty International se tiendra le dimanche 8 décembre 2024 et sera visiblement organisé par l'AC Valbonne. Le parcours semble identique : 11km entre Garbejaire et Valbonne ou 4km dans la valmasque.

Logo course des pères noël

Malheureusement annulée l'année dernière, on espère retrouver mi-décembre cette course (déguisée) des pères (et mères Noël) dans le centre historique de Grasse au profit de l'association des chaussettes jaunes !

NB: Un certificat médical (ou une licence) est obligatoire pour chaque course chronométrée

Déchets à emporter

Sunday, 01 September 2024
|
Écrit par
Grégory Soutadé

Nous sommes en septembre ! Les grosses chaleurs de l'été vont bientôt s'estomper, on va pouvoir enfin respirer. Certains regrettent justement cette chaleur, les longues journées de vacances et les bons fruits et légumes gorgés de soleil, avec comme perspective grisaille et travail. Pourtant il se produit le contraire autour du bassin méditerranéen où le reste de l'année est agréable à vivre tandis que l'été est une période suffocante (encore 34°C le 1er septembre)... Bref, septembre marque le début d'un nouveau cycle. Cycle où traditionnellement l'on pouvait reprendre le travail sans trop se brûler la peau, à commencer par les vendanges. De nos jours ce cycle est calqué sur le cycle scolaire. Après une douce montée en charge fin août, c'est donc l'agitation de la rentrée qui opère. On se replonge dans un quotidien chargé en activités. Tout reprend en même temps, ce qui en fait un mois plutôt chaotique d'un point de vue circulation, le temps que chacun s'adapte à son (nouvel) emploi du temps.

Avec le retour au travail (et une moindre disponibilité de fruits et légumes variés), la question des repas revient sur la table. D'après une étude réalisée par Harris Interactive pour Cetelem (2023) et qui se base que sur un échantillon de 1165 personnes, 45% des actifs apportent un repas sur leur lieux de travail, 25% vont à la cantine, 10% au restaurant et 20% achètent leur repas le jour même. En se concentrant sur la région Parisienne, 40% se restaurent à la cantine. Les disparités sont donc importantes selon la région et la catégorie socio-professionnelle. L'étude nous apprend également que la pause déjeuner est souvent courte (inférieure 30 minutes dans 46% des cas, 1h dans dans 86% des cas).

Pour répondre à ce besoin de se sustenter pendant et en dehors des heures de travail, le recours à un achat externe est devenu monnaie courante. Il est d'ailleurs amusant de noter que les vendeurs ambulants ont (quasiment) toujours existé dans les villes. Aujourd'hui, on appelle ça la street food. Composés à la fois d'échoppes ambulantes (food trucks) et fixes. D'aucun pourra regretter le déclin de la grande cantine commune ou du bistrot du coin. Cette pratique du repas sur commande connaît d'ailleurs une forte croissance grâce à la livraison. Côté qualité, il y en a pour tout les goûts. Certes, hormis pendant la période du COVID, il sera difficile d'atteindre une qualité équivalente à un bon restaurant dans une offre à emporter/commander, mais l'on peut trouver des plateaux repas tout à fait correct, voire même des camions à nourriture de bonne qualité.

Le revers de la médaille, comme souvent quand il s'agit de "simplifier" la vie du consommateur, est une production de déchets importante (notamment plastiques et cartons). Déchets qui seront difficiles à recycler car souillés (liquides, gras, bactéries). De manière plus générale, l'alimentation est une grande génératrices de déchets à causes d'emballages et de sur emballages nombreux. Face à ce constat amer, une association Toulousaine a vu le jour en 2019 "En boîte le plat". Le nom n'est pas forcément très vendeur, mais l'idée tombe sous le sens : proposer un circuit de distribution/nettoyage aux commerçants. Ces derniers délivrent alors les repas dans un contenant consigné qui pourra être réutilisé de nombreuses fois. La principale difficulté de mettre en place un système de consigne est le fait que la plupart du temps les producteurs et les consommateurs sont éloignés via une (longue) chaîne de distribution, ce qui n'est pas le cas dans la vente à emporter; la plupart du temps locale et récurrente !

En quelques années, le réseau ETIC Emballages a pris de l'ampleur avec des antennes sur Rennes, Besançon, Compiègne, Saint-Étienne, Toulouse, le bassin Sophiapolitain et quelques 180 commerces engagés. Si ce chiffre peut paraître anecdotique au regard de l'offre nationale, l'important est surtout la volonté de faire bouger les choses et pourquoi pas l'évolution des mentalités. Car, même s'ils ne le proposent pas d'eux même, la plupart des commerçants acceptent DÉJÀ de disposer leurs produits dans nos propres contenants. Il faut juste anticiper un minimum avant de sortir faire des achats. Boulangerie, Pâtisserie, Boucherie, Poissonnerie, Traiteur, Food Truck... Pensez à apporter votre propre contenants, exactement comme on pense à apporter ses propres sacs de courses.

Aparté : Au delà de la production de déchets, de la qualité et du niveau d'équilibre nutritifs très moyen des repas, la vente à emporter favorise des comportements très mauvais d'un point de vue nutritionnel car elle s'accompagne souvent de desserts et "boissons" très sucrés via les "formules". Ces éléments qui sont peu souvent fait sur place, permettent au commerçant de réaliser de grosses marges unitaires. Pour autant, c'est une mauvaise habitude de les associer à son repas, car on aura tendance à reproduire ce schéma lors des repas courants (notamment pour les plus jeunes).

Dernier gif les joies du code Quand je code depuis des heures et que je réalise que je suis sur la mauvaise branche