Kickstarting Topsoil



Kickstarting Topsoil

0 0


ninjapresentation

La présentation que je dois effectuer à la fin de mon stage au college de Charleston.

On Github pfif / ninjapresentation

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

Introduction

Le travail des géochronologistes est de determiner l'âge d'objets terrestres

  • Calendrier
  • Integralite de existance terre 4.6 milliards d'année compressé en 365 jours : 145 année la seconde => calendrier
  • Mettons quelques informations :

    • Apparitions de la vie : 27 mars
    • Apparitions des animaux : 8 novembre
    • Apparition des premiers humanoïde : 31 décembre a midi
    • Deux guerres mondiales : Dernière seconde
    • Travail des géochronologistes : 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

Planning

  • Pas de planning en particulier. Methode agile
  • stage rythmé par un evenement : Presentation aux australiens
  • Fonction majeures : Avant :

    • ColumnSelectorView
    • Export en SVG
  • Après :

    • Convertion en FXML
    • Customisation du graphique

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

Commente la fenetre

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

Apports techniques

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

  • SVG
  • Maven

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

Apports organisationnels

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

Geochronologie

Marcher du travail américain

Les differences de mentalité avec la France

Conclusion