15 March 2024

Quelques projets en Java avec leur description.

JobExecutor

JobExecutor est un outil qui permet de créer des tâches (Jobs) qui peuvent être annulées. Lorsqu’une tâche n’a plus besoin d’être, que son effet ou son résultat n’est plus nécessaire, une demande d’annulation lui est envoyée. La tâche peux finir le traitement et libérer le thread.

Les tâches gérées par le JobExecutor sont écrites dans un journal avec une certaine durée de vie. Cela permet de vérifier : l’état des tâches, comment ont-elles fini et quand.

C’est une petite lib utilisée en production qui fait bien le job.

Vous pouvez la trouver ici: https://framagit.org/fasar/java-job-executor

Mesure de la qualité de l’air

Le systeme de mesure de la qualité de l’air system comprenant des capteurs de qualité de l’air ainsi qu’un server java. Il permet de journalisé différente valeur de la qualité de l’air pour les visualiser par la suite.

Sur la page suivante donne une description du projet.

Result<T, F>

En rust, il existe un Resut<T, F> qui est bien pratique pour décrire des résultats T qui peuvent être en erreur (F). L’erreur décrite par la class F sera une erreur du domaine. Quelque chose que le programme doit s’attendre a prendre en compte.

Les erreurs system ou applicatives doivent toujours être levé par une exception.

Vous trouverez la classe Result ici.

Test ou Explications

Explication de la HashMap: lien

Les Maps, une notion primordiale dans le développement. Elles permettent la définition de relations entre deux ensembles d’objets. La fonction put permet de définir ses relations et la fonction get permet de retrouver l’image d’une cléf passée en parametre.
Savez-vous ce qui se cache derrière une HashMap ?

Les Streams Java : Construire un Stream avec un Spliterator

Les Stream Java permettent de parcourir une liste non pas en itératif mais dans un traitement de flux. De plus, cette liste est possiblement infinie. L’idée est d’appliquer une fonction sur chaque élément du flux. Si la fonction ne possède pas d’état, le flux peut-être divisé en plusieurs parties pour que le traitement se fasse en parallèle.

Il y a quelques opérations et fonctions standards que l’on peut utiliser sur les Stream<>, mais lorsque l’on veut mixer plusieurs Stream ensemble, il faut aller dans un niveau plus bas. La page suivante décrit comment construire un Stream à partir de différents stream de données de capteurs afin de les grouper par unité de temps.

Les capteurs n’étant pas synchronisés, ils ne produisent pas les données pour le même temps. La difficulté de grouper les stream de données de capteur est de faire un ré-échantillonnage des signaux afin de trouver quelle est la valeur qui aurait dû être a un certain moment.

Quelques commandes utiles

  • jps : Liste les processus java. Avec -V pour voir plus d’informations

  • visualvm : outil qui permet d’explorer les applications Java : les variables, les threads, la mémoire …​

  • ps x -o rss,command

    • rss est resident set size : c’est la mémoire prise par tout le process au niveau de l’OS.

    • rss est la taille : Heap, Metaspace, off-heap + lib partagée + tout.

    • Heap: Espace dans lequel les données de l’application vont être

    • Metaspace: Contient notamment les informations sur les classes (qu’elles sont les super-class, interface ect d’une classe, qu’elle partie du code a déjà été compilé, info pour faire du linkage dynamique, info statistique d’appel de méthode pour le JIT …​ ).

    • offheap: ???