Journal En passant par le FOSDEM, avec mes sabots 🎵

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
25
5
fév.
2024

Demat'iNal,

De retour du FOSDEM, je me permets de partager avec toi quelques notes techniques et découvertes glanées au fil des conférences.

SemVer in Rust [track rust]

Chouette présentation sur le semantic versionning. J'ai apprécié le temps passé à décrire les « différences d'appréciation » entre le SemVer strict et celui de Rust. Par exemple SemVer spécifie qu'une version majeur à zéro autorise de casser les APIs, mais la coloration Rust ne le permet pas.

Le but (…)

Journal Les codes fantastiques (et où les trouver)

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
42
1
juil.
2023

Demat' iNal,

Depuis fin 2022, j'anime une petite rubrique dans GNU/Linux Magazine, intitulée les codes fantastiques, où est décrit en une page une petite aventure informatique, un bout de code qui m'a amusé / plus / interpelé. [0]

Comme c'est les 25 ans de LinuxFR, et que j'en écris plus que ce qu'ils peuvent publier (trois d'avance pour le moment !), voici une sorte de ?hors série? que je ne publierai pas là bas du coup.

Les codes fantastiques

(…)

Journal SIGUSR1, SIGUSR2,..., SIGUSR_N ?

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
12
10
mai
2023

Demati'Nal,

À la lecture de signal(7), on se rend compte que deux signaux sont réservés pour les signaux utilisateurs SIGUSR1 et SIGUSR2. Deux, c'est peu. Je vous propose donc cette technique qu'on baptisera le signal knocking par analogie au Port_knocking

#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>

int signalvalue = 0;

void sigusr1handler(int signum);
void sigusr2handler(int signum);

void sigusr1handler(int signum) {
  ++signalvalue;
}
void sigusr2handler
(…)

Journal Sortie de Pythran 0.13.0

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
29
2
mai
2023

Demat i'Nal,

J'ai publié ce matin une nouvelle mouture du compilateur pour codes scientifiques écrits en Python nommé Pythran. C'est la version 0.13.0 et elle porte le joli sobriquet bouch'hal.

Les plus impatients téléchargeront immédiatement la dernière version sur PyPi ou Github tandis que les plus curieux s'empresseront de lire le changelog associé.

Mais ce serait louper la suite de ce billet, où j'aimerai vous parler des bienfaits de l'émulation. Lors de ma veille, je suis tombé sur le (…)

Journal Quizz Python : esp[èa]ce de nom

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
15
8
mar.
2023

Demat' iNal

Regarde bien dans les yeux le bout de code suivant

def foo():
  x = 1
  class bar:
    x = x + 1
  return bar
foo()

exécute le mentalement. Rien d'exceptionnel ?
Et pourtant si,

NameError: name 'x' is not defined

Maintenant essayons avec :

def foo():
  x = 1
  class bar:
    y = x + 1
  return bar
foo()

Et là… non, rien.

Intuitivement, j'imagine que le x = x + 1 (…)

Journal Changelog, pour quoi, pour quoi ?

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
18
5
fév.
2023

Demat'iNal,

À quelques jours / semaines d'intervalles, j'ai eu besoin d'intéragir avec la notion de Changelog, ou plutôt de release note, mais je vais abusivement utiliser le premier terme pour désigner le second.

  1. Un utilisateur de la bibliothèque de types vectoriels xsimd nous a demandé d'en fournir un (ce que j'ai fait assez diligeamment)

  2. Lors d'une chouette présentation au FOSDEM hier, dans la devroom LLVM, quand j'ai appris que le Changelog n'était pas utilisé par les personnes (…)

Journal PyPI et les projets critiques

Posté par  (site web personnel) . Licence CC By‑SA.
32
11
juil.
2022

Demat' iNal,

En fin de semaine dernière, je reçois un courriel (oh, ce terme doucement désuet) des mainteurs de PyPI me félicitant pour mes trois projets promus "projets critiques", ce qui, à l'instar de mère-grand félicitant un jeune homme d'être costaud, puis s'empressant de lui demander de ranger sa valise dans le wagon TGV, me demande de mettre en place une authentification à deux-facteurs pour mon compte PyPI.

Petit retour sur cette expérience.

Déjà on comprend la motivation : Il (…)

Journal pythran 0.9.12 - heskenn

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
23
14
juil.
2021

Demat' iNal,

je ne suis plus aussi diligent dans mes annonces de sortie de Pythran, mais j'ai quelques anecdotes à raconter pour la version 0.9.12 sortie hier, donc je me lance.

Petit rappel : Pythran est un compilateur pour noyaux de calcul scientifique écrit en Python. Il transforme ces derniers en code natif ne faisant appel à l'interpréteur qu'aux frontières avec le code interprété (pour la conversion entre objets Python et objet natifs), et peut générer du code vectoriel et/ou (…)

Journal Alignement chaotic neutre

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
21
10
juil.
2021

Demat' iNal,

J'ai récemment eu l'ineffable [1] plaisir de corriger un bug dans LLVM qui m'a causé quelques mauvaises soirées. Afin que l'histoire devienne légende et que la légende fasse mythe, je me décide à vous en raconter quelques détails amusants.

Considérons le bout de code suivant :

#include <string>
#include <boost/align/aligned_allocator.hpp> 

constexpr std::size_t align = 32;
template<class T>
using aligned_allocator = boost::alignment::aligned_allocator<T, align>;

using aligned_string = std::basic_string<char, std::char_traits<char>, aligned_allocator<char>>;

aligned_string make_string(int num) {
    return aligned_string(num, '\0');

}

#include <iostream>
(…)

Journal Sortie de C++ 2000

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
27
1
avr.
2021

Depuis la sortie de C++11, la langage C++ a connu de nombreuses évolutions: C++14, C++17 et enfin C++20 l'an dernier.

Cependant, ce rythme de sortie semblait assez lent aux vrais amateurs de C++, aussi le C++omité de standardisation a-t-il décidé de sortir une nouvelle version, affectueusement nommée C++2000. Fidèle à sa volonté de simplification du langage, le C++omité n'a intégré que les fonctionnalités les plus attendues et nécessaires :

  • Une nouvelle syntaxe pour apporter la puissance des template à l'assembleur (…)

Journal Toujours plus proche du Python avec C++

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
20
22
déc.
2020

Demat'iNal,

Le langage Python offre une sacré flexibilité dans la gestion des arguments: arguments positionnels, nommés, passage par mot-clef, c'est un peu la foire à la saucisse des paramètres.

J'aime particulièrement le passage d'arguments nommés, ça documente bien le site d'appel, et la syntaxe Python est assez flexible. Mais peut-on en faire autant avec C++ ? Tu te doutes bien que oui, sinon l'intérêt de ce journal serait limité :-)

La syntaxe supportée :

auto res = my_function_call(pos0
(…)

Journal LLVM 11.0.0

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
34
13
oct.
2020

Demat'iNal,

Après 6 release candidates, la version 11.0.0 de l'écosystème LLVM a finalement été rendue publique.

LLVM suit un cycle de sortie de 6 mois, quelles sont donc les grandes nouveautés ? On notera déjà l'arrivée du compilateur Flang dans la suite officielle LLVM, qui se dote ainsi d'un compilateur Fortran. Il vient remplacer le peu usité llvmgo qui a été retiré du dépôt officiel.

LLVM release note

LLVM possédait déjà un type vectoriel, p.e. <i32 x 4> pour (…)

Journal Debug de code Python embarqué dans du code C++

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
35
30
sept.
2020

Demat' iNal,

On m'a posé tantôt une question assez intrigante au premier abord :

Dans une application native qui embarque un interpréteur Python, et que l'on est en train de déboguer avec gdb, comment faire pour débogguer le code Python associé ?

Pour donner un peu de contexte, on peut lire la doc Python et en extraire ce petit code C:

 #define PY_SSIZE_T_CLEAN
#include <Python.h>

int
main(int argc, char *argv[])
{
    wchar_t *program
(…)

Journal C++ Hell/Heaven et les concepts

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
11
17
sept.
2020

Salut à tous,

C++20 apporte les concepts, mais par pure nostalgie, regardons comment émuler ça en C++11

#include <utility>

#define REQUIRES(x) class _ = decltype(x)

template<class T,
         REQUIRES(((std::declval<T>()==0), T(1), std::declval<T>() * (std::declval<T>() -1)))>
T fact(T const& n) {
    return n == 0
(…)