Savoirs-faire intéressants

Sniffer (= regarder) les packets échangés

Pour les 3MIC et 4IR et pour tous les autres qui doivent à un moment faire un programme qui échange des données en réseau, débugguer peut êter pénible. C'est là qu'on peut vérifier que les packets s'envoient bien (ou non) pour savoir où rechercher l'erreur.

Pour ce faire, on va utiliser Wireshark qui est disponible sur n'importe quelle distribution digne de ce nom (insérer ici une blague sur Haiku) qu'on peut installer par exemple sous Ubuntu avec :

sudo apt install wireshark

Une fois ouvert, il vous faudra sélectionner un interface (ou tous) sur lequel écouter.

Vous pourrez dans la barre en haut filtrer les packets avec des règles (et c'est recommandé au vu du nombre de packet qui passent 😂).

Exemple de filtres:

// ne laisse passer que les packets TCP 
tcp

// ne laisse passer que les packets TCP entre 192.168.1.33 et 192.168.1.65
tcp  && ((ip.src == 192.168.1.33 &&  ip.dst == 192.168.1.65)||(ip.dst == 192.168.1.33 && ip.src == 192.168.1.65))

Créer automatiquement des diagrammes pour tes rendus

Permet de faire des diagrammes comme ça en 2 clics:

image-1674841342079.png        image-1674841368960.png

 

 

InteliJ (et les autres outils Jetbrains)

Générer un diagramme de Classe ... avec classe

Tuto pour utiliser le générateur installé de base

Générer un diagramme de séquence sans galérer à positionner les acteurs

Installez ce plugin et suivez ce tuto

Compiler un projet avec Gradle et JavaFX

Les exemples fournis ici sont codés avec Gradle KTS, si tu codes avec Groovy, voici un lien vers le projet OpenJFX qui explique la mise en place de JavaFX sous Gradle : https://github.com/openjfx/javafx-gradle-plugin

Tu es actuellement en plein projet Java de 4A-IR (ou en plein projet personnel) et tu cherches à build ton projet JavaFX (car Swing, c'est quand même pas ouf) et Gradle ? Tu es au bon endroit ! 

Conseils de logiciels (IDE)

Pour ce faire, je te conseille tout d'abord d'utiliser l'IDE IntelliJ IDEA, qui est gratuit avec ton adresse mail étudiant (petite aide pour l'installer : https://wiki.etud.insa-toulouse.fr/books/licenses-logiciels/page/jetbrains), et qui te permettra bien des galères par rapport à Eclipse. Néanmoins, le tutoriel est censé fonctionner quelque soit l'IDE ou l'éditeur utilisé (même emacs pour les plus téméraires !)

Configuration

Une fois cela effectué, ouvre ton fichier build.gradle.kts, et procède aux modifications suivantes : 

plugins {
    id("org.openjfx.javafxplugin") version "0.0.13"
}

Liste des versions supportées par Gradle : https://mvnrepository.com/artifact/org.openjfx/javafx-plugin?repo=gradle-plugins

javafx {
    version = "17.0.2" // Ici ta version de JavaFX qui correspond à ta version de Java
    modules("javafx.controls", "javafx.fxml")
}

Dans ce code d'exemple, seules les fonctions de base sont ajoutées afin de ne pas allonger le temps de compilation. Pour obtenir l'ensemble des modules disponibles (pour le support du BootStrap par exemple) : https://openjfx.io/javadoc/11/

dependencies {
    implementation("org.controlsfx:controlsfx:11.1.1")
    // Dans le cas d'ajout de bootstrap dans les modules
    implementation("org.kordamp.bootstrapfx:bootstrapfx-core:0.4.0")
}

Et... c'est tout ! C'était pas si compliqué ? 😁

Build !

Pour build ton projet, lance la commande gradle build sur ton terminal, et normalement ton application devrait se lancer ! :) 

Problèmes fréquents

L'application ne trouve pas de main

-> N'oublie pas de déclarer ta classe contenant le main que tu veux exécuter dans ton build.gradle.kts

application {
// org.example.Main à remplacer par le chemin vers la classe qui contient ton main
    mainClass.set("org.example.Main") 
}

J'utilise un Mac avec processeur ARM (M1/M2) et le build m'indique que JavaFX ne peut pas s'installer

-> Cela se produit car la version ARM (aarch64) n'existe pas par défaut lors de l'installation par gestionnaire Gradle. Pour ce faire, exécutes une première fois ton build sur les machines de l'INSA, push ton projet sur Git et relance-le sur ton Mac. Une fois cela effectué tout devrait fonctionner :)

Attention : il ne faut pas que le paramètre compileOnly soit activé, auquel cas cette manipulation ne fonctionnera pas !