samedi 14 janvier 2023

Un Arduino dans le tiroir

C'est mon côté polarisé qui reprend le dessus - Je viens de ranger les divers composants électroniques de mon Arduino dans des petits casiers, et cela me remplit de joie.

En particulier, je galère moins quand je cherche la bonne résistance. Les anneaux de couleur, c'est sympa, mais à moins de sortir la loupe, je trouve ça tout de même plutôt ardu à déchiffrer.

J'en suis maintenant au montage numéro 6, tout en faisant mes recherches sur la meilleure manière de multiplexer un grand nombre de boutons et d'encodeurs rotatifs. Le hardware, c'est pas facile !

mercredi 4 janvier 2023

Arduino

Et voilà, j'ai commené à jouer avec mon Arduino ! Les projets sont sympa, et permettent de comprendre pas à pas comment interfacer des composants electroniques standard (diodes, interrupteurs, capteurs de température, de position...) avec l'Arduino, et d'écrire le code qui va bien. Je continue à apprendre, avant de me lancer dans mon projet principal de panneau de contrôle pour la simu aérienne. Il faudra que j'aille faire mon marché pour acheter boutons et encodeurs rotatifs. Je me tâte même à tenter d'intégrer un afficheur 7 segments pour l'altitude, le cap, la vitesse ascensionelle... Mais c'est plus compliqué à intégrer ensuite depuis l'ordinateur, donc on verra !

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.