Accéder au contenu principal

Articles

Stm32F4, la base logiciel d'un ordinateur de plongée

Vers 2014, j'ai entamé avec un ami, Jonathan Bastien  , la conception et développement d'un ordinateur de plongée. Les choix techniques se sont arrêté sur le microcontrôleur STM32F4. Le MS5803-05BA est un module de capteur de pression absolue et d'altimètre numérique 24 bits fabriqué par TE Connectivity. Le microcontrôleur peut fonctionner à l'aide de 4 batterie AA. À la base, gcc 4.9 a été utilisé. Étant sous Linux en x86, faire de la compilation croisée était pas évident, surtout quand on a d'autre version plus récente. Cette année, j'ai décidé de reprendre le projet, mais je voulais impacté le moins possible mon environnement de développement en local. Je me suis mis à la recherche d'un docker et j'ai trouvé cette image. docker pull wischner/gcc-arm-none-eabi:1.2.0 docker build -t stm32-divecomputer . Quelques modification on script de build et je pouvais compiler et envoyer l'image sur mon ordinateur de plongée docker run --rm --device-cgr...
Articles récents

Historique des composants côté serveur, des templates aux composants modernes

Historique: des composants côté serveur, des templates aux composants modernes Des JSP aux frameworks front-end modernes, la manière de construire des interfaces web a beaucoup évolué. Pourtant, une question reste la même : comment produire du HTML dynamique, réutilisable et facile à maintenir ? Les premiers templates Java : générer du HTML depuis le serveur Les premiers templates Java : générer du HTML depuis le serveur Au début du web dynamique en Java, les servlets permettaient de répondre aux requêtes et de générer des pages. Fabriquer une page HTML en concaténant des chaînes Java devenait vite pénible : le code applicatif et le balisage se retrouvaient entremêlés. Les JSP (JavaServer Pages, arrivé en 1999) ont popularisé une approche inverse : écrire du HTML dans lequel on insère des éléments dynamiques. Elles ont rendu la création de pages plus naturelle pour les développeurs front-end, mais l’usage de code Java directement dans le template pouvait vite brouiller la séparation en...

Analyse du trafic d'un réseau Bluetooth

  Ordinateur de plongée D-TWIN D-TWIN  est un ordinateur de plongée conçu par BlueEdge . Une entreprise Italienne qui a aussi développé un logiciel (win/linux) qui permet de télécharger les fichiers de plongées, mettre à jour le firmware de l'ordi. L'entreprise a cessé ses activités. J'ai toujours eu des problèmes à télécharger les plongées. C'était très long, arrêt du téléchargement au milieu d'une plongée, timeout. Analyse du traffic La communication se fait via bluetooth. J'ai décidé d'analyser le traffic réseau afin d'être en mesure de définir le protocole et refaire l'application. La commande suivante a été lancé: btmon -w dtwin-capture.btsnoop J'ai lancé leur application et j'ai cliqué sur Search devices. HCI Event: Remote Name Req Complete (0x07) plen 255                                                              ...

Quand JPA rencontre ses limites, pensez à jOOQ et au MULTISET

Une seule requête, un graphe d'objets complet — ce n'est pas de la magie, c'est du SQL. La base du problème Dans le monde JPA, quand on gère une relation un-à-plusieurs, le chargement LAZY par défaut semble élégant… mais cache une bombe à retardement. Imaginez un scénario e-commerce classique :  Client → Commandes → Lignes de commande → Produits.  Quand vous appelez orderRepository.findAll() , si Open Session in View est activé (plus de  701 allers-retours vers la base de données : 1 requête pour les commandes, 100 pour les clients, 100 pour les lignes, 500 pour les produits. En dev, tout peut bien aller, mais en production il y a risque d'effondrement des performances. Ce n'est pas la faute d'Hibernate. C'est le prix inévitable du modèle de navigation par objets face à des hiérarchies complexes. Limite du join fetch de JPA Beaucoup pensent résoudre le N+1 avec JOIN FETCH . Mais il y a un mur contre lequel tout le monde finit par se cogner : on ne peut pas...

Migration d’une application Spring Boot 2.2 vers Spring Boot 4.0 : retour d’expérience concret

 En 2019, nous avons développé une application métier basée sur : Java 8 Spring Boot 2.2.7 Gradle 6.6.1 Thymeleaf Bootstrap 4.3.1 Environ 40 000 lignes de code Java Fin 2025, voici un retour d’expérience concret sur la migration vers : Java 25 Spring Boot 4.0.1 Gradle 9.2.1 La partie thymeleaf, n'a pas été touché, il y a quelques warning concernant l'obsolescence de certain commande tel que th:include. Une migration plus rapide que prévu Un point important : en moins de 30 minutes, l’application démarrait sur la nouvelle stack. Évidemment, "ça démarre" ne veut pas dire "tout fonctionne", mais ce premier jalon est très révélateur : la base Spring Boot reste solide les outils de migration sont matures la dette technique était maîtrisée Les changements majeurs rencontrés De javax.* à jakarta.* C’est probablement le changement le plus visible. Tous les imports javax.* doivent être migrés ve...

Comment les annotations façonnent le code en Java

  Introduction : L'évolution de la métaprogrammation en Java Traditionnellement, l'inspection des métadonnées (comme les annotations) se faisait au runtime via la Réflexion . Approche puissante mais qui introduit des pénalités de performance et des risques d'erreurs cachées. L'approche moderne en Java est la Génération de Code à la Compilation , notamment via l' Annotation Processing , qui permet de transformer les métadonnées en classes sources compilées. J'ai ajouté cette possibilité à la librarie Formatic pour la gestion des formulaires par cette transition, révélant clairement les forces et faiblesses des deux modèles. 1. Le Modèle Traditionnel : Réflexion (Runtime) Avant l'Annotation Processing, nos gestionnaires (TextInputHandler, SelectInputHandler, etc...

Refonte ou refactoring

Refonte vs Refactoring : Quand réécrire, quand faire du refactoring ? Face à un code legacy, la tentation de tout réécrire est forte. Pourtant, le refactoring et la refonte sont deux stratégies radicalement différentes, avec des impacts opposés sur le risque, le temps et la valeur métier. Point à prendre en considération Langage, Framework, Librairie: est-ce qu'ils sont désuet, est-t'il possible de trouver des ressources Usage interne / externe: il peut avoir plus d'exigence si l'application est utilisé par des clients  Utilisation: est-ce que l'application est très utilisé Maintenance: il y a beaucoup de maintenance à faire, temps pour maîtriser le système Documentation: technique, fonctionnel Refactoring : Changer sans changer Le refactoring, est une modification du code interne sans changer son comportement externe. C’est l’art de rendre le code lisible, modulaire, testable sans toucher à la logique métier. Quand l’utiliser ? Le code fonctionne, m...