Kickstarting Topsoil
Création d'un outil de tracé de schémas pour géochronologistes
Sommaire
Introduction
Présentation du projet
Ma contribution au projet
Retour sur l'experience
Sommaire
Le travail des géochronologistes est de determiner l'âge d'objets terrestres
Le stage
- Projet Topsoil : Génèrer des schémas pour géochronologistes
- Laboratoire CIRDLES
- 12 avril => Aujourd'hui
- Chef : Dr. Jim Bowring | Partenaire : John Zeringue
La méthode des géochronologistes
- Eruption de volcan.
- De la lave en sort
- Mais aussi des Zircons
Zircon :
- Capsule : une fois construit, plus rien n'en sort
- Bourré d'uranium
Temps passe
- De nouvelles couche terrestres se forment
- Inside zircon : Uranium => plomb
Scientifiques deterrent les zircons. calculent le rapport entre plomb et uranium.
=> AGE DE LA COUCHE TERRESTRE
Projet Topsoil
Topsoil :
-
Remplacant d'Isoplot
- Vieux plug-in d'Excel
- Plus mis à jour, fonctionne que sur de vieilles machines
- Non intégrable
- Sert à tracer des schémas pour les géochronologistes
- Doit être utilisable pour un grand nombre de schemas
- ... dans un grand nombre de context (logiciel+librairie)
Pour l'instant, permet de tracer CE genre de schema
- Axe X : Le rapport entre deux isotop d'uranium et de plomb
- Axe Y : Pareil
Une ellipse
- Represente une zone où le ratio entre les deux rapports peut etre
- Si les rapports étaient exacts : Point.
- Les deux rapports =>Estimés
- Donc on a une zone
Ligne concordia
- Represente le temps
- Plusieurs sortes : Whetherill/Tera-Wassaburg
207Pb*/235U
±2σ (%)
206Pb*/238U
±2σ (%)
corr coef
29.165688743
1.519417676
0.712165893
1.395116767
0.918191745
29.031535970
1.799945600
0.714916493
1.647075269
0.915069472
29.002008069
1.441943510
0.709482828
1.324922704
0.918845083
29.203969765
1.320690194
0.707078490
1.216231698
0.920906132
29.194452092
1.359029744
0.709615006
1.248057588
0.918344571
29.293320455
1.424328137
0.710934267
1.309135282
0.919124777
28.497489852
1.353243890
0.686951820
1.245648095
0.920490463
29.218573677
1.383868032
0.715702180
1.271276031
0.918639641
28.884872020
1.264304654
0.702153693
1.164978444
0.921438073
28.863259209
1.455550200
0.700081472
1.335582301
0.917579003
29.014325453
1.614480021
0.701464404
1.478394505
0.915709384
29.917885787
1.564622589
0.725185047
1.434906094
0.917094067
30.159907714
1.488528691
0.724886106
1.366282212
0.917874287
28.963153308
1.480754780
0.698240706
1.359750830
0.918282249
29.350104553
1.513999270
0.711983592
1.384417989
0.914411266
29.979576581
1.595745814
0.724426340
1.458894294
0.914239775
29.344673618
1.551935035
0.714166474
1.420060290
0.915025602
Afin de produire ce genre de graphique, on a besoin de ce genre de tableaux
Les fonctionalité que j'ai developpé
Le ColumnSelectorView
- Changement de tableau (Avant : non libre|Apres:Autant de column que l'on veut)
- Il faut un outil pour choisir les colonnes ainsi que certaines informations sur les données
Comment est-ce que le columnselectordialog dit au graphique à quelle colonnes correspondent à quelles données
- Chaque graphiques prends un converter qui traduit les données qui lui sont passées en ellipses
- On passe des Record au graphique, qui en demande la conversion au converter.
- Le converter sort ensuite des Ellipses
Le columnselectorview produit un converter et le passe au graphique
Au depart j'avais conçu une interface qui donnait la possibilité à n'importe quel objet de generer un graphique
Classe adoptée par le tableau
La librairie ControlsFX integre des nouveaux élélments d'interface graphique ainsi que le principe d'actions.
Une action est un objet qui réalise une action en réaction à un signal d'un utilisateur.
Elle sont parfaitement integrées dans chaques éléments d'interface de ControlsFX.
- MAIS : ControlsFX
- Actions : Objet qui fait quelque chose en reaction d'un signal à un utilisateur => Controleur
- Integré directement à l'interface
- CSV transformé en dialog
- Action prend en charge la creation du tableau
Le SVG Converter
Il permet au géochronologistes de convertir un graphique dans un format vectoriel, le SVG.
Interet : Geochronologiste exportent leur graphiques
dans le format qu'ils souhaitent
Adobe Illustrator/Inkscape
Un convertisseur d'interface JavaFX en SVG a pour cela été créé
Approche choisie : transforner directement le rendu de JavaFX en SVG
Base deja implemente par John
-
Pour:
- Réutilisable
- Une seule forme de rendu, a un seul endroit : Pas besoin de recoder placement, et apparences...
- Contre : ... On a besoin de JavaFX dans n'importe quelle situation pour rendre un graphique. (Web generator/Application mobile)
JavaFX : Hierarchie generale.
- Node : Base de tous les elements de Javafx
- Systeme de hierarchie codé à ce niveau
- Utilisé par les classe heritant de nodes (Exemple : Les panneaux)
- Plupart des noeuds : composés neuds de bases (Bouton : rectangle/texte/fond)
Fonction recursive SI :
- Noeud est un parent : Explore recursivement ses autres noeuds
- Noeuds n'as pas d'enfants : Le rend en SVG
MON JOB : Trouver les definitions d'elements de base manquant au convertisseur ET corriger celle qui existe deja
documentation + essais => QUELLE PROPRIETE GRAPHIQUES -> SVG
Propiete trouvee : Commenter le before after
Conversion des interfaces en FXML
Apres exploration documentation de Java FX : trouvé FXML.
REFACTORING
Defining interfaces in XML, then letting JavaFX inflate them
class SimplePane extends VBox{
public SimplePane(){
Label label = new Label("Vincent Vega");
Button bouton = new Button("Change brother");
bouton.setOnAction((ActionEvent e) -> {
label.setText("Vic Vega");
});
getChildren().add(bouton);
getChildren().add(label);
}
}
Pourquoi refactorer ?
- Respecter le principe MVC
- Alleger le code source
- Laisser JavaFX faire plus de truc pour nous (Le code
d'autruit est le meilleurs)
class SimplePane extends VBox{
@FXML private Label label;
public SimplePane(){
FXMLLoader loader = new FXMLLoader(getClass().getResource("chartcustomizationpanel.fxml"),
ResourceBundle.getBundle("org.cirdles.topsoil.Resources"));
loader.setRoot(this);
loader.setController(this);
try {
loader.load();
} catch (IOException e) {
getChildren().add(new Label("There was an error loading this part of the panel."));
e.printStackTrace();
}
}
@FXML
private void changeBrother(){
label.setText("Vic Vega");
}
}
Gagné :
- Constructeur moins long
- Comportement en methode
- Initialisation et mise en page : FXML
Ai fait une partie du refactoring
Customization Panel
Donner aux géochronologistes la possibilité de personnaliser les diagrammes pour qu'ils s'integrent parfaitement à leur présentations
Donner possibilité aux geochronologiste de personnaliser le schema
Why ?
- Donner plusieurs manières de visualiser les mêmes données
- Adapter au style publication
Un mot de mon rôle sur GitHub
Toutes les autres tâches que j'ai aussi eu à accomplir
Mot sur mon rôle sur GitHub
- A partir deuxieme moitier projet : Devenu publique
- Discuter avec les utilisateurs dans un anglais professionel (Resoudre problemes/Parler du futur)
- Repondre aux courtes demandes des utilisateurs
Retours sur experience
- Technique
- Culture générale
- Organisationel
3 categories :
- Technique
- Culture générale
- Organisationel
JavaFX
Une excelente, mais encore un peu jeune, librairie graphique
Librarie JavaFX
- Rapide, puissante
- Nouveaux concepts interessant/pratique : Propriete, Hierarchie des noeuds, FXML
- Reproches : Documentation faible, bugs de jeunesse et systeme de graph
- Reutilisation certaine
Java 8 et les fonctions lambdas
Une introduction à la programmation fonctionelle
Java, les fonction lambda et la programmation fonctionelle
Lambda = nouvelle façon d'instancier une interface à une seule fonction => Code plus clair
Vient de la Programmation Fonctionelle. Etranger à Java. Mais envie apprendre Haskell
Autres apports techniques
Autres :
- SVG
- Maven (Test, compilation automatique, multiple cible)
Attendez, une dernière chose...
- Steve Jobs
Git !
Un des meilleurs systèmes de versionnage de fichier au monde !
Mon préféré : GIT (Conçu pour maintenir Linux à l'origine)
System de versionnage. Ce que j'ai appris :
- Travailler avec des branches (Chaque branche a un role en particulier
- Differentes manieres de communiquer (Pull Request | Push) (Complexité)
Git utilisé pour mes projets personnel
GitHub !
Une des meilleurs site web de collaboration entre developpeurs (et autres) basé sur Git
Github! (3.5 millions d'utilisateurs | 10 millions de projets)
Site web construit autour de Git
Fourni :
- Depot git
- Issue Tracker (très lié au code)
- Wiki
- Releases
GitHub : Un precieux outil d'organisation pour l'équipe
Organisation avec Github
- Code sur internet | Merge sur Internet
-
Issue Tracker :
- Guider le travail (actuel et futur)[Evolution dynamique]
- Discuter avec les utilisateurs
- Implementé dans le code et fermé directement depuis comit
- Wiki et readme.md : Utile pour communiquer avec les utilisateurs
Réaliser plusieurs tâches dans un projet
Le besoin de développer à plusieurs vitesses.
Suivre un projet à plusieurs vitesses
- Nouvelle librairie
- Petites fonctions à implementer
Repartition de hommes et du temps. Recheche de solution.
Gêrer plusieurs intensités de developpement
- Periodes intenses
- Periodes marathons
Vitesse de codage : Periodes très intenses | Periode marathon | Periode lente
Appris à gêrer
ADHD
Documentation et tests
Une question de volonté
Doc + test c'est dur
Accepter de perdres du temps
Le principe KISS
Keep it simple, Stupid !
"Perfect is the ennemy of good"
- Jim Bowring
Apports en Culture Générale
Marcher du travail américain
Les differences de mentalité avec la France