Kyiv sous les bombes

Tuesday, 24 February 2026
|
Écrit par
Grégory Soutadé

Encore une année écoulée et toujours la même actualité. Kiev brûle ! Le soutien général autour de ce conflit, pourtant si proche de nous, a largement baissé. Et pour cause, les informations sont plutôt redondantes : l'armée russe bombarde quotidiennement des cibles militaires, mais surtout civiles, particulièrement lors des raids nocturnes. Les Ukrainiens répliquent tant bien que mal. L'Europe va de sommets en sommets. Sans êtres divisés, ses membres ne sont pas pour autant totalement unis. Quant aux Européens, ils sont plus prompte à regarder la facture s'alourdir, car on vit tranquillement en paix, pendant que les autres font le sale boulot. Surtout que depuis l'investiture de Donald Trump, il y a eu un net ralentissement de l'effort Américain. En tout cas cet effort n'est plus gratuit. Les armes arrivent, mais sont financées par le vieux continent.

Sur le terrain, la Russie a principalement progressé à l'Est et au Sud, mais finalement pas tant que ça si on regarde la carte sur un an. En plus de celui de Belgorod, un nouveau front a été ouvert au Nord dans la région de Soumy. Les avancées y sont marginales. Il faut dire que l'Ukraine est passé en mode défense en sécurisant au maximum les zones proches de la ligne de front, rendant toute progression coûteuse et compliquée. En effet, face au nombre de soldats en opposition, il est difficile d'inverser le scénario sans aide extérieure massive. Pourtant, chaque mètre carré est défendu avec férocité et bravoure. Pour preuve, il y a un an, j'écrivais "Pokrovsk est quant à elle quasiment encerclée". Il aura fallu quasiment un an pour la faire tomber, et encore, il reste quelques quartiers à conquérir dans cette zone. Certes quasiment rien, mais les soldats n'abandonnent pas. Non loin de là, Zaporijia et sa centrale nucléaire constitue le nouveau point chaud de la région.

Si la victoire ne peut être militaire, même pour une armée aussi importante que celle de la Russie, alors il faudra tordre les esprits. Comme en 2014, face à l'échec de l'invasion, l'objectif est désormais de prendre les territoires du Donbass, faire une pause pour se régénérer avant de repartir à l'assaut. Pour contraindre la population à l'abdication, Poutine joue sur le levier psychologique en touchant (in)directement tous les citoyens. En effet, l'hiver est rude, surtout dans cette partie du monde. Avec des températures avoisinants les -20°C, le secteur de l'énergie est crucial. Non seulement pour se chauffer, mais également pour faire fonctionner l'ensemble de l'économie. Alors les russes ciblent délibérément les centrales énergétiques, qu'il est difficile de protéger en tout point tant le réseau est étendu. À cela s'ajoute la pression psychologique : les sirènes des bombardements, le bruit des explosions, l'odeur de la poudre et du sang. Les nuits passées dans des bunkers ou le métro sont harassantes. Il n'y a aujourd'hui plus une seule région épargnée et surtout pas la capitale Kyiv.

Mais la vie n'est pas forcément plus rose côté russe qui voit régulièrement son secteur pétrochimique attaqué, quel que soit sa position géographique. D'autant plus que L'Europe continue son soutien avec l'envoie d'armes et de matériel humanitaire, dont des générateurs électriques. Avec le support de pays "alliés" (qui sont surtout opportunistes) comme la Chine, l'Inde, la Turquie et toutes les régions d'Asie centrale, les sanctions économiques n'ont pas fait flancher le pays-continent, mais l'on observe malgré tout un ralentissement très net de l'économie qui de gros problèmes : à peine 1% de croissance et 5,6% d'inflation d'après les chiffres officiels. Autant dire qu'il s'agit d'une récession, notamment dans une économie portée par l'effort de guerre.

Cela démontre, l'on voit que pour être efficace, il aurait fallu imposer ces sanctions (on en est à la 19e vague et bientôt le 20e) beaucoup plus tôt. Comme pour le COVID, il faut frapper fort, immédiatement afin d'endiguer au plus tôt l’hémorragie.

De son côté, l'armée Ukrainienne capitalise un retour d'expérience d'une valeur inestimable et des compétences très avancées en matière de drones. D'ailleurs, l'Ukraine est en passe de devenir un acteur majeur de la production d'armes en Europe, même si elle reste encore loin derrière en matière d'équipement lourd et plus complexe. D'après les sources gouvernementales, près de la moitié du matériel utilisé au combat est produit en Ukraine. Fait notable, la désactivation des terminaux Starlink a porté un grand coup à l'offensive Russe, permettant des reconquêtes opportuniste de la part de Kiev. Le renseignement et la communication sont des atouts majeurs lors d'un conflit, après l'argent bien sûr. D'ailleurs le Kremlin est en train de vendre (principalement à la Chine) de grandes quantités d'or de ses réserves stratégiques, car, pour elle aussi, la facture s'alourdit de jour en jour. Notamment par l'utilisation régulière de missiles sophistiqués qui ont un coût unitaire de plusieurs centaines de milliers d'euros (si ce n'est plus).

Il est difficile aujourd'hui d'entrevoir l'issue de ce conflit et encore moins une issue positive. Mais on ne peut être qu'admiratif face à la résilience de tout un peuple et espérer que ce drame qui se joue quotidiennement sous nos yeux puisse prendre fin avec le retrait des troupes de l'envahisseur.

Libgourou v0.8.8

Monday, 09 February 2026
|
Écrit par
Grégory Soutadé

Reminder : Libgourou is an open source ADEPT protocol implementation (ePub DRM management from Adobe) that helps download ACSM files on Linux system (and remove DRM).

Libgourou v0.8.8 is out ! After a quiet year, world of libgourou has moved a lot since one month. 3 tickets opened an one direct contribution to code. Not big changes, but it's interesting to see that the project is alive and used.

What's new ?

  • Some bugfixes (git address, mkstemp(), constructor error)
  • Adobe server now require PKCS1 type 2 padding for signature, which is not activated in all OpenSSL versions
  • Big code reformating (remove tabs)
  • Jake Waksbaum added to support for compilation in MacOS (and some bugfixes)

You can find source code and binaries in my forge

Déambulations Génoise

Sunday, 30 November 2025
|
Écrit par
Grégory Soutadé

Parmi les villes les plus populaires d'Italie, Gênes doit se trouver au delà de la 10e place. On y fait surtout référence à cause de son port, du terrible accident de 2018 et du fameux pesto "alla genovese". C'est justement grâce à son port que Gênes a connu ses plus belles heures de gloire du XIe siècle jusqu'au XIXe siècle. Car, qui dit port, dit commerce, donc argent ! Le port est encore aujourd'hui l'un des plus grands de méditerranée. Un des rares capable d'accueillir les méga paquebots de croisière (ceux à plus de 9 000 personnes) et qui font rager les locaux quand ces derniers se déversent dans la ville. Surtout qu'entre le port, l'important traffic routier (dont énormément de scooters, une religion quasi nécessité face à l'absence de parkings/garages) et l'aéroport, la pollution atmosphérique y est importante et constante.

Mairie Place Mairie

Aquarium

Mais Gênes (Genova/Zena) est avant tout la capitale de la puissante République de la Ligurie. République qui d'alors possédait plusieurs colonies un peu partout en Europe (dont la Corse et la Sardaigne), au Moyen Orient et en Afrique du Nord. Cette riche histoire (dans tous les sens du terme) est omniprésente quand on arpente la ville : la plupart des bâtiments sont construits avec des facades très travaillées et des matériaux de qualité.

Hotel Immeuble

Et ce, malgré le dénivelé important. Car Gênes est construit au bord d'une montagne assez abrupte. Il faudra donc bien se muscler les cuisses pour se déplacer (ou emprunter les transports en commun, dont font partis les ascenseurs !). Pour optimiser l'espace, les bâtiments sont donc bâtis tout en hauteur : entre 6 et 7 étages, avec des rues étroites. De ce fait, rien n'est droit (ce qui n'est pas évident pour aligner les photos).

Rue Rue

Fiat

Curiosité : le drapeau avec la croix rouge sur fond blanc qui flotte un peu partout dans la ville n'est pas celui de l'Angleterre, mais bel et bien celui de la ville (qui est repris dans les armoiries) !

Parc Lampadaire

Pour rester dans le côté historique. Gênes a été le berceau d'un homme qui changea littéralement la face du monde : Cristoforo Colombo, plus connu en France sous le nom de Christophe Colomb. Il est possible de visiter sa bicoque, qui se situe en périphérie de la vieille ville.

Parmi les autres grands noms, on peut citer le compositeur Niccolò Paganini et plus récemment Rinaldo Piaggio, un puissant industriel du secteur aéronautique, qui n'est autre que le fondateur de la marque Piaggio. Même si, dans l'imaginaire collectif, Piaggio fait référence au constructeur de deux roues de la marque Vespa qui a été crée après-guerre par ses deux fils.

Enfin l'auteur-compositeur-interprète Nino Ferrer (de son vrai nom Agostino Arturo Maria Ferrari) est lui aussi Génois. Il a été naturalisé Français en 1989 à l'âge de 55 ans, 9 ans à peine avant son décès.

Place Ascenseur

Rue

Si la plupart de la ville est très bien entretenue, certains endroits sont, comme à Turin, couverts de tags. Il s'agit là d'un petit rappel de toute la périphérie Génoise "moderne" qui contraste fortement avec le centre historique, puisqu'elle laisse plutôt l'impression d'une suite assez immonde d'HLM. Il faut dire que parmi les 560 000 habitants, tous n'ont pas un niveau de vie élevé, notamment les nombreux ouvriers qui travaillent au bon fonctionnement du port.

Eglise Eglise

Autre démonstration de sa puissance d'antan : il y a pas moins de 12 édifices religieux (église, basilique, cathédrale) disséminés un peu partout.

Eglise Toit église

À peine de quoi satisfaire les 4 papes originaires de Gênes.

Statue

Pigeon Pigeon

Au delà du pesto, la grande spécialité de la Ligurie (en plus des fameuses pâtes trofie et de la farinata), en concurrence directe avec la pizza, est la foccacia. Elle est disponible partout, en sucré ou salé (principalement), garnie à toutes les sauces (dont les plus populaires : huile d'olives et fromage). Cette dernière fait même partie du petit déjeuner Italien (surtout en version salée), que l'on prend traditionnellement au bar/boulangerie avec un espresso, le tout avalé debout. Selon la faim et la gourmandise, certains se laisseront tenter par un croissant ou une "douceur".

Urbain Urbain toit

La viennoiserie est dans son ensemble très bien maîtrisée, mais c'est en rentrant dans une boulangerie (qui est la plupart du temps plus une pâtisserie) que l'on se rend compte à quel point les Italiens ont un problème d'addiction au sucre. Un croissant ? Il sera fourré (confiture ou diverses crèmes). Il est nature ? Il y a quand même du sucre par dessus. Un gâteau à la noisette ? Oui, mais avec une fine couche de confiture. En témoigne également la grande variété de biscuits disponible. La population ne semble pourtant pas obèse (même si ce n'est pas un indicateur fiable à 100%).

Ferrari Terrasse

Autre déception : les cartes des restaurants sont peu ou prou des copier-coller et se concentrent sur les classiques (faisant fi de beaucoup de plats traditionnels de la Ligurie). Autant dire qu'il est difficile de trouver quelque chose d'un peu plus léger, travaillé et original sans taper dans des menus à plus de 50€/personne. Comme pour le petit-déjeuner, le déjeuner se fait souvent sur le pouce (avec une foccacia bien évidemment !).

Immeuble Immeuble

Parce qu'on ne rigole ni avec la mort, ni avec la religion, le cimetière de Gênes est une étape à découvrir. Situé un peu à l'extérieur de la ville, il est relativement récent puisqu'ouvert en 1851. Il est pourtant l'une des plus grandes nécropoles d'Europe avec une superficie de 33 hectares ! Divers espaces sont réservés (parfois avec chapelle) pour satisfaire les multiples confessions. On peut circuler en voiture à l'intérieur. Il y a même une ligne de bus qui en fait le tour. Des visites guidées y sont organisées, et pour cause, certaines parties abritent nombre de sculptures remarquables.

Plus sobrement, il y a la tombe de Constance Lloyd, la femme d'Oscar Wilde, dans l'espace protestant.

Santa Margherita

À environ 30 minutes à l'Est se trouve Santa Margherita (Ligure), petite ville balnéaire cossue qui fait partie de l'agglomération Génoise. Elle se situe peu avant Portofino, le Saint Tropez Italien.

Histoire de sport (2)

Sunday, 16 November 2025
|
Écrit par
Grégory Soutadé

Les années se suivent, mais se ressemblent pas forcément. Odysséa reste pour moi un objectif majeur dans mon calendrier. Tout d'abord parce que c'est une course qui me tient énormément à cœur (ou à sein !) et à laquelle je participe (même blessé) depuis 2014. Mais aussi parce que c'est le seul 10km plat et goudronné de ma saison. C'est donc un circuit parfait pour performer, même s'il demande une préparation spécifique comparativement aux trails auxquels je participe le reste du temps. Il est difficile de se l'imaginer, mais c'est très agréable d'avoir un niveau d'effort à la fois maximal (>=90%) et régulier sur toute la course.

Longtemps, je m'étais fixé la barre des 45 minutes au 10km. J'ai passé cette barre en 2022. Les années suivantes ont été plus compliquées à gérer et je ne pensais pas pouvoir à nouveau la tutoyer. Bien heureusement, à un mois de la course, mes performances à l'entraînement étaient vraiment très satisfaisantes, au dessus de mon année de référence. J'ai d'ailleurs réussi en septembre un défi personnel que j'avais en tête depuis longtemps : le pic de Nore (20km, 1000m de dénivelé positif, 2h06). La trajectoire de montée en puissance était maîtrisée. Il faudrait travailler au moins 2 séances en fractionné pour être au top.

Un des éléments qui amplifie la bonne forme du moment est le matériel. Depuis le début d'année, j'avais remarqué que mes chaussures me "cisaillaient" le tendon d'Achile droit (et pas le gauche). Une des premières améliorations a été l'achat de chaussettes renforcées (et qui compressent le pied), ainsi que d'utiliser le dernier trou disponible pour lacet mes chaussures. Finalement, lors de ma rotation annuelle, j'ai décidé de changer de marque et d'abandonner mes chères ASICS Kayano car le nouveau format ffblast+ emprisonne trop ma cheville et provoque cette irritation. Après de nombreux essais chez Rrunning Cycle Passion, je me suis tourné vers des Brooks Glycerin GTS, le seul modèle dans lequel je me suis senti bien. Elles ont moins d'amorti mais, dès mes premiers entraînements, j'ai noté une nette amélioration de mes performances.

Malgré tout, depuis plusieurs semaines, je sentais que mon corps était fatigué et mes quadriceps douloureux. Après une longue journée d'effort sous le soleil, ma gorge a commencé à me piquer le samedi soir, plus intensément le dimanche où le verdict est tombé : j'étais malade. J'ai d'abord pensé à un rhume (ce serait fini dans quelques jours), il s'agira en fin de compte du COVID (variant Frankenstein). Une semaine complète de repos... Cette pause forcée a eu le bon goût de réduire les douleurs musculaires.

À 3 semaines de l'échéance, reprise l'entraînement malgré la fatigue musculaire importante et une capacité respiratoire largement diminuée. Chaque sortie était longue et difficile, avec des chronos peu probants. Mais il fallait s'accrocher pour garder au maximum le tonus musculaire acquis lors de la préparation. Au bout de 2 semaines, mon état s'est amélioré et j'ai pu retrouver 95% de ma capacité respiratoire. Finalement, les 2 derniers entraînements ont été satisfaisants, notamment le dernier en 4'41 avec du dénivelé (équivalent à un 4'38 sans). À effort équivalent, le parcours goudronné me permet de gagner ~10s, la cible des 4'30 pour Odysséa était donc atteignable. Juste avant de tomber malade, j'avais même confiance dans les 4'25 !

Et puis, il y a eu les mauvaises nuits à cause d'un voisin irrespectueux (ce n'est pas le même que la dernière fois, il est pire...). Après le repas du vendredi soir, j'ai fait une mini intoxication alimentaire. Le samedi, fatigue oblige, j'ai commencé à tomber légèrement malade (gorge qui gratte). Le dimanche matin (encore réveillé à 5h ...), toujours quelques éternuements et le ventre patraque. Point positif : 65,5kg sur la balance. J'avais peur d'avoir trop pris durant ces dernières semaines où je ne me suis pas restreint, j'ai finalement mon poids idéal.

Une fois arrivé sur Cannes, la météo était mitigée : légèrement couvert et ~15°C (plutôt positif), mais beaucoup de vent.

Heureusement, j'ai pour moi la force de l'habitude. Je connais mon corps et j'ai une routine bien rodée pour gérer les courses. Le cachet du matin a permis de stabiliser le ventre. Mon corps répond bien à l'échauffement. Vu ces dernières semaines difficiles et les conditions non optimales, peu m'importe ce qu'il va arriver, je vais tenter de me caler sur une allure de 4'25, on verra bien.

Cette année, l'organisation a fait dans l'originalité pour le parcours avec notamment un changement de lieu de départ : une première boucle de 3km, puis le parcours est étendu pour une seconde boucle de 7km. Seul bémol : on se sent vraiment à l'étroit, coincé entre le bord de la route et les barrières centrales. Il faut donc se positionner devant dès le départ pour éviter les bouchons ! Heureusement, l'accès au circuit est plus ouvert que lors des éditions précédentes, on n'est plus cloîtré dans le village comme avant.

La première boucle se passe bien, j'ai même 3 secondes d'avance sur les 4'25. Puis vient la première partie de la seconde boucle. Elle est interminable, faux plat montant avec un fort vent de face (notamment sur les 2 premiers kilomètres), qui ne se calme que rarement. J'ai décidé de maintenir mon effort, mais pas mon allure, pour ne pas perdre trop d'énergie. Et ça se ressent sur les temps de passage : 4'38, 4'40, 4'33, 4'33. À 3 kilomètres de l'arrivée, j'ai encore 5 secondes de retard sur mon désormais nouvel objectif : 4'30. Je ne retourne à l'équilibre qu'au kilomètre 8.

Dans ma tête, j'ai encore 10 secondes de retard, alors je lâche les chevaux plus tôt que prévu. Jusqu'à présent, je n'étais pas en souffrance, mais les 2 derniers kilomètres vont être vraiment difficiles. Je ne me concentre que sur ma course, qu'importe si je dépasse ou si je suis dépassé. J'ai une allure moyenne de 4'20 jusqu'à l'avant dernière virage, celui qui nous ramène sur le port à 300m de l'arrivée, pour finir sur la ligne en sprint à 3'48.

La récupération est un peu longue car j'ai vraiment tiré sur le cœur à la fin, mais j'ai le plaisir de discuter avec un "collègue" de course à qui j'ai servi de lièvre. Même si techniquement j'ai fait moins bien qu'il y a 3 ans au 10km : 44'35 au lieu de 44'34, je suis largement satisfait car j'étais plus fort et, sans le vent, j'aurais pu atteindre mon objectif des 4'25. En conclusion, le plus important reste de se donner à fond pour une bonne cause et progresser constamment en tant qu'être humain malgré les obstacles sur notre chemin. Je peux rentrer l'esprit léger, surtout qu'il y a un flan pâtissier qui m'attend à la maison !

Appimage error: Unable to launch executable

Sunday, 26 October 2025
|
Écrit par
Grégory Soutadé

I distribute binary packages of libgourou in both compiled version (tar.gzip) and AppImage (and maybe .deb in the future). AppImage is a quite old packaging system (2004), not deprecated, but that evolve slowly. It allows to run application without the need to install additional libraries (all is bundled into one binary package). There is not so much tools for building an Appimage and I had to rely mines on a Python bundle not really maintained on Github. Not perfect, but does the job and result worked fine for a while. Unfortunately, starting this summer, there was an issue in running packaged applications. It took me a lot of time to find it, but I finally did it !

First, let's try to run already packaged AppImage

> cd /tmp/libgourou_utils-0.8.7-x86_64.AppImage
> ./acsmdownloader -h
Unable to launch '/tmp/.mount_acsmdoKfAEabacsmdownloader'

If you look in details with strace

> strace ./acsmdownloader -h
execve("/tmp/.mount_acsmdojHgmJpacsmdownloader", ["/tmp/.mount_acsmdojHgmJpacsmdown"..., "-h"],
0x561f614f3790 /* 95 vars */) = -1 ENOENT (No such file or directory)

"ENOENT (No such file or directory)" is confusing and really non obvious to understand, because the file is there and has execution permission ! Most of the time, it means you try to run an application that has been compiled for another architecture (x86 32 bits, arm ...).

This error is raised by a core component of Linux systems : ld-linux-XXX.so. It's used to load ELF file into memory and resolve all dependencies (shared libraries). Useful information can be found with file util

> file /usr/bin/tail
/usr/bin/tail: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked,
interpreter /lib64/ld-linux-x86-64.so.2,
BuildID[sha1]=0d3a849e80ee804476c13ed25b3b1ba819847b35, for GNU/Linux 3.2.0, stripped

AppImage is an ELF binary statically linked

> file libgourou_utils-0.8.7-x86_64.AppImage
libgourou_utils-0.8.7-x86_64.AppImage: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), static-pie linked,
BuildID[sha1]=b15b018a4f56042ad61c2b9e0504773f7da1ac38, stripped

It contains compiled binaries and libraries in a squashfs filesystem mounted by libfuse (which is its only dependency). We can access to them with

> ./acsmdownloader --appimage-extract
> cd squashfs-root

> strace ./acsmdownloader
execve("./acsmdownloader", ["./acsmdownloader"], 0x7ffdeb43fa30 /* 49 vars */) = -1 ENOENT (No such file or directory)
strace: exec: No such file or directory

Our core error, let's look deeper

> file acsmdownloader 
acsmdownloader: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked,
interpreter usr/lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0,
BuildID[sha1]=aaefe8dfc25186c9c3bb2c0e254f8ba09cdd7f7b, not stripped

We can see that the path of ld-linux-x86-64.so.2 is usr/lib64/ld-linux-x86-64.so.2 which is invalid !!!. Ahead "/" is missing (it has been removed by builder Python script). Moreover, since version 13 (or a bit earlier), Debian seems to have moved ld-linuxXXX.so from /lib64 to /usr/lib64 which break compatibility.

My solution is to patch binaries with patchelf in AppImageBuilder.yml, after they are copied into AppDir/usr/bin/

find AppDir/usr/bin/ -maxdepth 1 -type f -executable -exec  patchelf --set-interpreter /usr/lib64/ld-linux-x86-64.so.2 \{\} \;
Dernier gif les joies du code Quand le retour de ma fonction n'a absolument rien à voir avec ce que j'attendais