mercredi 14 décembre 2022

Méthodes monadiques sur std::optional

Voilà que C++ se prend pour Haskell ! Maintenant, nous avons une belle interface monadique pour std::optional, les méthodes and_then, transform, or_else, qui permettent de chainer des appels sur un optionel. Je me suis demandé si le compilo pouvait optimiser entre les appels, et j'ai donc demandé au fidèle godbolt ce quí il en pensait. Le résultat est impressionnant. Voici deux fonctions qui font la même chose, l'une utilisant l'approche monadique (g++ 12.2, options -O3 -std=c++23):

#include <optional>

int f(const std::optional<int>& opt)
{
    return opt
    .transform([](auto&& val) { return val + 3;})
    .transform([](auto&& val) { return val - 11;})
    .value_or(7);
}

int g(const std::optional<int>& opt)
{
    if (opt)
    {
        return *opt + 3 - 11;
    }
    else
    {
        return 7;
    }
}

G++, sans broncher, nous sort, dans les deux cas, le même code optimisé aux petits oignons:

        cmpb    $0, 4(%rdi)
        movl    $7, %eax
        je      .L1
        movl    (%rdi), %eax
        subl    $8, %eax
.L1:
        ret

À noter que clang, encore mieux, nous débarasse carrément du saut conditionnel !

        movl    (%rdi), %ecx
        addl    $-8, %ecx
        cmpb    $0, 4(%rdi)
        movl    $7, %eax
        cmovnel %ecx, %eax
        retq

Ils sont forts, ces concepteurs de compilos. La conclusion, c'est donc que oui, le compilo peut optimiser à travers les appels monadiques. Mangez-en donc !

mercredi 7 décembre 2022

VulkanSceneGraph version 1.0

Je ne me souvenais pourtant pas de m'être abonné aux sorties de VulkanSceneGraph, mais j'avais la hype quand j'ai reçu un e-mail annonçant la version 1.0 de la nouvelle mouture du graphe de scène, mais basé sur Vulkan.

J'étais tellement enthousiaste que j'ai pondu une petite trilogie d'articles sur linuxfr.org : tout d'abord, une petite retrospective des techniques de rendu, moment nostalgie avec tous ces vieux jeux, puis un petit aperçu sur les graphes de scène, et enfin la présentation de VulkanSceneGraph.

Avec un support gltf aux petits oignons, je n'ai plus qu'à espérer un rapide développement des fonctionnalités d'animation, et je n'aurai plus d'excuses pour ne pas faire un truc avec tout ça.

dimanche 20 novembre 2022

Arduino

J'ai déjà fait ma liste au père Noël : je rêve d'un kit Arduino, comme par exemple celui là.

Mon but, c'est tout d'abord de me familiariser avec ce genre de matériel, puis de me lancer dans la création d'un panneau de contrôle de pilote automatique inspiré de celui de l'Airbus A320 (le FCU, placé au centre juste en dessous de la verrière). Lors de mon expérience sur simulateur, j'avais vraiment trouvé ça top de tourner les molettes pour aller chercher l'altitude et le cap, et revenir dans X-Plane à la chasse au bouton via la souris était plutôt déprimant. Électroniquement, rien de compliqué, et pas beaucoup plus côté code, du moins tant que je reste simple et que je me contente d'ajouter molettes et boutons (pour les affichages, ça sera nettement plus complexe, mais ce sera une étape 2, si je réussis l'étape 1).

jeudi 10 novembre 2022

Un petit peu de Mastodon

Connaissez-vous Mastodon ? C'est une alternative à Twitter, suivant un principe de fédération : chaque utilisateur choisit un serveur qu'il veut rejoindre, et à partir de ce serveur peut s'abonner à n'importe quel utilisateur du réseau, sachant que chaque serveur est administré indépendamment, en particulier en ce qui concerne la modération. Les changements un poil bruteaux d'Elon Musk, le nouveau patron de Twitter, ont poussé des centaines de milliers d'utilisateurs à chercher d'autres solutions, et Mastodon a vu un nombre important de nouveaux utilisateurs.

Par curiosité, j'ai décidé de rejoindre le réseau, en particulier via l'application libre tooot sur iPhone (mon téléphone est trop vieux pour faire tourner le client officiel). Après avoir commencé à suivre ceux auxquels j'étais déjà abonné sur Twitter et qui ont des comptes Mastodon, ça me plait : interface épurée, pas de pubs, atmosphère plutôt sympa, même si c'est finalement un peu vide : avec seulement 1 million d'utilisateurs comparés au 350 millions de Twitter, il se passe forcément moins de choses. J'ai tenté pour voir de me mettre sur le fil de mon "instance", c'est à dire de voir les autres utilisateurs qui passent par le même serveur. Comme c'est un serveur généraliste, ce n'est pas particulièrement pertinent au regard de mes intérêts, mais c'est toujours ça.

J'adorerais que ça décolle, mais je ne me fais pas trop d'illusions !

dimanche 25 septembre 2022

X-Plane 12 - Premières images

Mais que c'est joli ! Regardez moi donc ça. C'est du X-Plane 12 "vanille", comme on dit, sans ortho photos ni Sim Heaven. En regardant de près, j'ai l'impression que Laminar a utilisé OpenStreetMap (ou une autre source de données géographiques) pour afficher les routes et les chemins de fer, et utilise ensuite une sorte de système de zones, avec "là c'est un parc", "là c'est de la ville" pour y mettre les bâtiments. Ansi, je vois bien ma rue, mais les bâtiments ne correspondent pas vraiment.

Mais en tous cas, le résultat est très impressionnant : à moins de regarder effectivement un endroit que l'on connaît, c'est rudement réaliste, et je dirais que c'est parfaitement suffisant pour admirer le paysage.

J'ai dû faire une petite pause dans mon exploration, car malheureusement un bug dans la dernière beta de la version Steam Linux empêche le démarrage. Dès que ça remarche, je continue à explorer.

jeudi 8 septembre 2022

X-Plane 12 dans les bacs !

Ça y'est, c'est officiel, X-Plane 12 est sorti en version "accès anticipé". La simu est disponible au téléchargement via le site officiel, mais pour ma part, j'attendrai son arrivée sur Steam, dans quelques jours. Au menu, améliorations graphiques, meilleure gestion du gel, meilleure météo, nuages en 3D volumétrique... J'ai hâte d'essayer tout ça.

dimanche 21 août 2022

Embracing Modern C++ Safely

Je viens de m'offrir Embracing Modern C++ Safely, un bon gros bouquin de 1400 pages sur le C++, qui avait la bonne idée d'être en solde. Le mastodonte est en chemin, je vous tiendrai au courant de ce que j'y lirai.

samedi 6 août 2022

Grogne estivale

Je poste un petit coup de gueule sur LinuxFR. Il me tenait à coeur de batailler contre un certain manque de profondeur que l'on retrouve parfois, où pointer l'approche de grandes firmes des technologies de l'information semble suffisant pour justifier un choix technique ou méthodologique. J'en ai encore dans mon sac, en particulier sur les "12 factors app" (je ne mets pas de lien, ils ne le méritent pas), et sur la plaie que sont les gestionnaires de paquets particuliers à un language (Conda, je te regarde), par opposition aux paquets des distributions qui, je trouve, sont pour le coup une manière que je trouve particulièrement élégante et efficace de gérer ses dépendances.

Bref, profitez bien de votre été, mettez de la crème solaire, bisous !

lundi 11 juillet 2022

CanardPC

Grande claque de nostalgie ! Suite à l'appel du magazine de jeux vidéos CanardPC, en difficulté financière en grande partie due à la forte augmentation du prix du papier, je me suis pris un abonnement. Je les suivais depuis un bon moment (je m'étais même pris leur numéro sur Skyrim, si je me souviens bien), et j'ai sauté le pas.

C'est un peu toute l'ambiance des magazines de jeux vidéos des années 90 qui m'est revenue (voyez ce qu'en dit le JDG). J'étais abonné à Génération 4, mais je lisais aussi Joystick, et le Consoles + de mon frêre. J'ai reçu le premier numéro, dévoré en deux aller-retours en métro, et j'attends le prochain avec impatience.

vendredi 1 juillet 2022

ARK Survival Evolved en écran partagé sur XBox

Eh bah oui, c'est possible ! Voilà qui résoud beaucoup de problèmes, puisque la version PC que j'avais était la version Steam sur Linux, qui n'est pas compatible avec la XBox (un jour, je raconterai la galère à trouver des jeux crossplay un peu intéressants). Mais pour une fois les Devs ont oublié d'être boulets, et fournissent un mode en écran partagé qui permet de pas mal s'amuser.

Alors bon, du fait de la toute petite hauteur d'écran, les menus ne sont pas terriblement lisibles, mais le plaisir d'aller à deux pour trucider des animaux est immense.

Je vois également que ARK est un jeu très apprécié d'un Youtuber que je n'ai découvert que récemment, Cédrik Jurassik, qui parle paléonthologie (et qui en parle bien !).

samedi 28 mai 2022

Réparation d'ordinateur portable

Eh bah voilà, c'est réparé. Faut dire les choses, Mr. Dell s'est assuré que son matos était réparable et remplaçable, et donc une fois repéré ce qui n'allait pas, c'est essentiellement une question de trouver la pièce et de faire un peu de bricolage.

Ayant donc acheté le morceau de plastique qui couvre l'arrière de l'écran (autrement dit, le dessus de l'ordinateur quand il est fermé), j'ai donc tout démonté, remplacé, et tout remonté. Le déplacement de la dalle était plutôt facile, mais ce sont les fils qui courrent dans l'écran, et qui relient la carte mère aux antennes et à la webcam située tout en haut de l'écran, qui ont été un poil pénibles à remettre en place: il a fallu zigzaguer entre les renforts en plastique, en évitant les endroits où le plastique autour de l'écran, à l'avant, vient s'emboiter sur l'arrière.

Et voilà la coupable : d'un côté, on voit les pas de vis qui relient la charnière à l´écran, et de l'autre, bah, il n'y a plus rien, tout est cassé.

Finalement, c'est une réparation de £80 pour un ordinateur de £400. Ça fait un peu mal pour deux malheureuses pièces plastiques, mais si il reste solide pendant quelques années, ça aura valu le coup. Et puis, il y a l'expérience, et ça, ça n'a pas de prix !

samedi 14 mai 2022

Démontage d'ordinateur portable

Je pose juste ici une petite photo de la bête desossée, alors que je tentais de remplacer la partie plastique de l'écran qui était cassée. Au final, il y a également une autre partie plastique qu'il faudra remplacer, donc j'ai tout remonté et j'ai commandé l'autre pièce. En attendant, l'ordinateur marche encore malgré mes manipulations, miracle !

mercredi 11 mai 2022

Des billes en 3D

Voici un projet épatant : un artiste 3D a lancé un défi : créer une petite animation qui prend une bille en haut à gauche de l'écran, et la fait ressortir en bas à gauche. Sur les 2000 projets envoyés, il a sélectionné les 100 meilleurs et les a combinés, et c'est de toute beauté ! Je n'en suis pas certain, mais au vu du profil de l'artiste, je crois que ces animations sont faites avec Cinema4D, poids lourd dans la modélisation et le rendu 3D.

Voilà quelque chose qui m'inspire, et je vais tenter de créer une petite machine à bille dans Blender. Restez branché !

jeudi 28 avril 2022

Blender - Balle qui tourne n'amasse pas mousse

Et on continue de s'amuser avec le moteur physique de Blender3D ! Je n'avais pas vu jusqu'ici ce type de simulation : une balle tournant dans un entonnoir. C'est assez facile à faire, même si je trouve la manière de donner à la balle sa vélocité initiale un peu complexe (il faut animer le mouvement, puis "lâcher" l'animation pour que le moteur physique reprenne le contrôle).

Je me suis bien amusé à monter la vidéo en chargeant la scène 4 fois dans l'éditeur, chacune avec une caméra différente, puis en choisissant ma caméra.

Le rendu Eevee est tout à fait remarquable, et plus qu'adéquat pour ce que j'en fais. Avec un temps de rendu de quelques minutes, c'est vraiment magique, et tellement pratique quand on veut juste s'amuser un peu ! Cela permet vraiment de se concentrer sur la partie physique de la démo sans avoir à attendre des jours pour avoir un rendu correct.

dimanche 24 avril 2022

Ça tombe !

Et une petite animation Blender, parce que ça faisait un bon bout de temps ! Je me suis inspiré d'un jeu de construction en bois que nous avons à la maison, et de structures que je m'amuse à construire (et détruire) avec. En l'occurence, et vu que j'avais la flemme d'animer correctement un choc ou un déplacement pour faire tout tomber, j'ai rajouté du vent !

Le rendu eevee est plutôt bon, à part l'effet de "bloom" qui est un peu dégoutant. J'ai mis le flou cinétique à fond et réduit la profondeur de champ au max histoire de tenter de réhausser la scène avec du flou partout (et quand c'est flou, c'est qu'y-a un loup !).

À tenter avec de plus grandes structures !

Blender abandonne OpenCL

Je n'avais pas du tout suivi, mais apparemment Blender ne supporte plus OpenCL pour le rendu GPU. Voilà qui est bien triste, et qui me force à revenir au CPU et à ses rendus interminables.

Si je comprends bien le raisonnement, ils n'ont jamais réussi à faire marcher leur moteur de rendu OpenCL aussi bien que CUDA, et face aux bugs et autres problemes, ils ont décidé de passer plutôt à HIP sur ROCm, nouvelle techno AMD qui permet apparemment de coder en language de haut niveau.

Dans tous les cas, je doute que ma vieille Radeon RX 480 aille bien loin. Je vous dirai si j'arrive à quelque chose !

lundi 28 mars 2022

DCS World - Proton est mon ami (jusqu'à un certain point)

Pas redémarré DCS World depuis un bon moment, vu que je me concentrais plutôt sur le civil, mais ProtonDB me donnant de bonnes nouvelles, j'ai décidé de réessayer. La mise à jour du Mirage 2000, dont j'avais beaucoup entendu parler mais pas beaucoup vue, est tout à fait sympa, mis à part un défaut assez sérieux de la couche de compatibilité : la VTB (vision tête basse, c'est à dire l'écran principal du radar) reste complètement noire !

C'est peu pratique pour faire quelque chose de sérieux, malheureusement. Je n'ai plus qu'à espérer qu'une prochaine mise à jour du M-2000, de DCS ou de Proton corrige le problème.

En attendant, je me suis remis au P-51, mais c'est une bête que je trouve terriblement difficile à maîtriser : impossible de faire un virage un peu sec sans immédiatement partir en vrille. Je ne comprends pas comment il est possible d'aligner un ennemi.

Finalement, le civil, ça a du bon.

dimanche 20 mars 2022

X-plane - Atterissage A320 avec un moteur en moins

Ayant lamentablement raté ma première tentative d'atterrissage d'urgence, j'ai repris en détail la vidéo de FalconEye qui explique comment gérer la situation, et j'ai retenté avec plus de succès. Je ne sais pas ce qui m'avait pris, mais la première fois, j'ai cru qu'il fallait couper le transfer de puissance hydrolique, ce qui a cause in fine une perte des contrôles de l'avion et un méchant crash. Cette fois-ci, je m'y suis pris plus proprement, avec un plan de vol propre et une gestion du plan de vol secondaire pour préparer le retour à l'aéroport. Seule chose qui me manque vraiment, c'est les seuils au niveau de la manette des gaz : je dois toujours y aller un peu au pif pour trouver le bon mode et éviter d'avoir les moteurs qui partent à fond ou au contraire qui se coupent. Enfin, le moteur, en l'occurence, puisque l'autre était parti en vacances.

À refaire, donc, peut-être en combinaisons avec d'autres pannes histoire de rajouter du stress. Et tout cela en préparation de l'expérience ultime : les pannes aléatoires !

dimanche 20 février 2022

Un tonneau en A320 ?

Tous ceux qui ont regardé un petit peu le fonctionnement des Airbus s'est retrouvé confronté à la "loi normale" et la protection d'enveloppe, où schématiquement l'ordinateur de bord nous empêche de faire des trop de bêtises et d'embarquer l'avion au delà de ses caractéristiques de vol. En particulier, il n'est pas possible de pencher l'avion sur le côté au delà de 30°, il n'est pas possible de décrocher (en théorie...), et ainsi de suite.

En revanche, en cas de conditions dégradées, tel un problème mécanique avec l'avion, des problèmes de sondes, et autres, l'avion entre en "loi alternative", où la protection d'enveloppe saute, mais où l'avion continue à coordonner la dérive et à trimmer automatiquement.

En loi directe, enfin, tout saute, et l'on pilote alors comme dans un cessna : le manche et le palonnier contrôlent directement les surfaces mobiles. Bon courage.

Alors, comment faire un tonneau en A320? Et bien, je dirais qu'il faut d'abord passer en loi directe : en effet, la loi normale nous empêchera de pencher trop de toutes façons, et la loi alternative continuera la coordination de la gouverne de direction : d'une part, il ne sera pas possible de tourner proprement sur notre axe, d'autre part, la protection ayant sauté, la gouverne de direction risque de bouger avec trop d'amplitude et de simplement casser. Essayons donc avec l'A321 de Toliss.

Première étape : passer en loi alternative. C'est relativement aisé en désactivant les ordinateurs de vol FAC1 et FAC2. L'airbus se plaint bruyamment, nous demande de les redémarrer, et à défaut, surtout, de couper l'autothrottle, qui sinon fait de sacrées bêtises.

À chaque fois que j'ai tenté de passer sur le dos dans ce mode, l'avion est parti dans de drôles de direction avant d'exploser en vol (avec parfois un flame-out des moteurs histoire de mettre l'ambiance). Passons donc en loi directe en sortant les trains d'atterrissage. Yay ! Il n'y a plus ensuite qu'à tourner doucement.

Heuuu, commandant ? L'hôtesse demande si elle peut distribuer les repas ?

J'ai réussi à aller jusqu'au dos en piqué, mais je dois être un peu trop brusque à ramener l'avion à l'horizontale. J'aurais bien aimé le garder comme ça un peu plus longtemps pour voir si l'extinction des moteurs est simulée, vu qu'une pompe à carburant d'avion de ligne n'est pas vraiment conçue pour marcher la tête en bas.

Expérience à retenter, donc.

Deus Ex Mankind Divided

Yay, j'ai fini Deus Ex Mankind Divided ! Bon, vous allez me dire que j'arrive un peu après la bataille, c'est quand même un jeu qui est sorti en 2016, ce qui fait 8 ans, et ce qui ne nous rajeunit pas. Cela reste un jeu très cool, et tout à fait honorable au niveau graphique. Fidèle à mes préceptes, j'ai complété le jeu en mode "pacifiste", en m'abstenant de trucider qui que ce soit.

Quand bien même ce jeu met l'accent sur la rejouabilité, je ne peux pas dire que je sois très tenté de m'y recoller : j'ai exploré la plupart des lieux, et tenté de compléter toutes les quêtes secondaires que j'ai pu trouver. On se contentera donc d'attendre une éventuelle suite !

Bravo à l'équipe pour l'excellente qualité de la version Linux, qui ne m'a posé aucun souci. Du triple A en Linux natif, j'applaudis des deux mains !

dimanche 23 janvier 2022

C++20 - std::jthread

Coucou ! Cela faisait un petit moment que nous n'avions pas parlé de C++. Ça tombe bien, il y a plein de choses à dire. En particulier, causons aujourd'hui de std::jthread.

Ce n'est certes pas une révolution : il s'agit juste d'une version un petit peu plus évoluée que std::thread, qui embarque un indicateur qui permet de demander l'arrêt du thread, et qui a la propriété de demander cet arrêt, et de joindre le thread, dans le destructeur. Rien qui ne soit aisé à écrire soi-même, mais c'est du sucre syntaxique tout ce qu'il y a de plus agréable, et je trouve que cela s'approche plus de la philosophie RAII : là où l'ancien std::thread était vraiment un contrôle sur un thread, mais pouvait être détruit bien avant le thread, le nouveau std::jthread a plus une sémantique de possession, en s'assurant que le thread ne survivra pas à l'objet.

Subtilité supplémentaire: le foncteur passé à std::jthread peut prendre un paramètre supplémentaire de type std::stop_token qui permet de savoir si son propre thread doit s'arrêter.

Mais assez de parlotte, voyons le code:

#include <thread>
#include <iostream>

int main()
{
  std::jthread t
    ([](std::stop_token stoken)
     {
       while (!stoken.stop_requested())
       {
         std::cout << "Coucou !" << std::endl;
       }
     });

  using namespace std::literals::chrono_literals;
  std::this_thread::sleep_for(2s);

  return 0;
}

Grace à notre ami le std::jthread, pas besoin d'avoir un atomic qui traine, de bien penser à joindre à la fin du programme, et tout le toutim habituel. Le std::jthread nous prend par la main et s'assure que tout est bien nettoyé derrière. Sympa !