SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
SEREN
       
Sérialisation
& magie noire



                1
SPEAKER



Olivier Croisier
Java Specialist
Consultant @ Zenika

@OlivierCroisier

"The Coder's Breakfast"
http://thecodersbreakfast.net



                                    2
SEREN ?



• La sérialisation est utilisée partout
• Efficace et robuste
• Mais elle peut être améliorée !
• … Automatiquement ?


                                                    3
SEREN ?



• SEREN : Serialization Enhancer
• Agent Java
• Bytecode engineering
• Améliore vos POJO !


                                             4
• Se branche sur le mécanisme                     TECH
  standard de sérialisation

• Génère des méthodes optimisées
  writeObject & readObject

               writeReplace   writeObject
                                            10010101
                                            01010101
                                            01010100
                                            10010101
                                            01011001
                                            01010100
              readResolve     readObject


                                                         5
TECH



• Sérialiser un Objet est coûteux
• Ecrire seulement les données utiles
• Wrappers numériques & Strings


                                               6
TECH

• Wrappers numériques
  - booléen pour gérer "null"
  - valeur primitive


• Strings
  - booléen pour gérer "null"
  - caractères UTF8




                                       7
TECH

• Quelles classes ?
• ClassFilters
  -   PackageList
  -   PackagePattern
  -   ClassPattern
  -   Annotation
  -   Custom !




                              8
TECH
• Quels champs ?
• Non-transient
 Non static

• Champs "final"
 - Reflexion ?
 - Unsafe ?
 - Assignation directe



                                9
• Classpath               USAGE
  - javassist.jar
  - seren.properties

• Option de JVM
  -javaagent:seren.jar

• Votre code
  Aucune modification !



                                  10
Seren.properties                                   USAGE

// Seren configuration
seren.filter=byPackageList
seren.verbose=true

// Filter definition
filter.byPackageList=seren.filter.PackageListFilter
filter.byPackageList.packages=com.company.project.model




                                                           11
• Graphe d'objets            PERFS

• Champs
• Optimisations existantes
• Destination du flux


                                     12
500




                       PERFS
450


400
      String, fixe
350




      Java : 380 ms
300


250


200
      Seren : 425 ms
150


100


50    Boost : x 0.9
 0




                               13
1000




                           PERFS
900


800
       String, aléatoire
700




       Java : 920 ms
600


500


400
       Seren : 510 ms
300


200


100    Boost : x 1.8
  0




                                   14
500




                       PERFS
450


400
      Integer < 128
350




      Java : 400 ms
300


250


200
      Seren : 345 ms
150


100


50    Boost : x 1.15
 0




                               15
1000




                        PERFS
900


800
       Integer >= 128
700




       Java : 880 ms
600


500


400
       Seren : 350 ms
300


200


100    Boost : x 2.5
  0




                                16
POJO
3000




2500   - Long id            PERFS
       - String firstName
2000
       - String lastName
1500




1000
       Java : 2090 ms
       Seren : 690 ms
500




  0
       Boost : x 3




                                    17
3000
       POJO
       -   Long id
2500
       -   String firstName
                              PERFS
2000
       -   String lastName
       -   Date birthDate
1500




1000   Java : 2930 ms
500
       Seren : 1220 ms
  0

       Boost : x 2.4



                                      18
60000




50000                             PERFS
40000
        thrift-protobuf-compare
30000   .googlecode.com
20000

        Boost : x 1.04 – 1.09
10000




   0




                                          19
• Code
  http://github.com/oliviercroisier/seren

• Licence                              & MORE...
  3-Clause BSD Licence

• Merci à
  - Heinz Kabutz
  - Thomas Darimont
  - Thomas Segismont



                                                   20

Contenu connexe

En vedette

5 ch12網路行銷組合—產品
5 ch12網路行銷組合—產品5 ch12網路行銷組合—產品
5 ch12網路行銷組合—產品winsonouyang
 
Slides bulgaria angelo raffaele tursi bg
Slides bulgaria angelo raffaele tursi bgSlides bulgaria angelo raffaele tursi bg
Slides bulgaria angelo raffaele tursi bgIrecoop Toscana
 
Acre test and catholic schools
Acre test and catholic schoolsAcre test and catholic schools
Acre test and catholic schoolsmarmartin6
 
991130樂活週記在台東(s)
991130樂活週記在台東(s)991130樂活週記在台東(s)
991130樂活週記在台東(s)瑞明 許
 
Feature JCDG
Feature JCDGFeature JCDG
Feature JCDGChase Dy
 
Aamir Media (horror movie storyboard
Aamir Media (horror movie storyboardAamir Media (horror movie storyboard
Aamir Media (horror movie storyboardecsmedia
 
Shot types
Shot typesShot types
Shot typesecsmedia
 
Indigenous Archives: Opportunities for Archival Access in an Information Society
Indigenous Archives: Opportunities for Archival Access in an Information SocietyIndigenous Archives: Opportunities for Archival Access in an Information Society
Indigenous Archives: Opportunities for Archival Access in an Information Societyteagueschneiter
 
11 frederike van wijck et al exercise after stroke.ppt
11 frederike van wijck et al exercise after stroke.ppt11 frederike van wijck et al exercise after stroke.ppt
11 frederike van wijck et al exercise after stroke.pptbluebuilding
 
Parts of a House
Parts of a HouseParts of a House
Parts of a Housensantaellav
 
Android UI Development: Tips, Tricks, and Techniques
Android UI Development: Tips, Tricks, and TechniquesAndroid UI Development: Tips, Tricks, and Techniques
Android UI Development: Tips, Tricks, and TechniquesEdgar Gonzalez
 
Possible to match our drawings with our coats of arms
Possible to match our drawings with our coats of armsPossible to match our drawings with our coats of arms
Possible to match our drawings with our coats of armsXenia Nincevic
 

En vedette (18)

Diana 10ºa
Diana 10ºaDiana 10ºa
Diana 10ºa
 
5 ch12網路行銷組合—產品
5 ch12網路行銷組合—產品5 ch12網路行銷組合—產品
5 ch12網路行銷組合—產品
 
Slides bulgaria angelo raffaele tursi bg
Slides bulgaria angelo raffaele tursi bgSlides bulgaria angelo raffaele tursi bg
Slides bulgaria angelo raffaele tursi bg
 
Acre test and catholic schools
Acre test and catholic schoolsAcre test and catholic schools
Acre test and catholic schools
 
Camino de Santiago- Solvitas' impressions
Camino de Santiago- Solvitas' impressionsCamino de Santiago- Solvitas' impressions
Camino de Santiago- Solvitas' impressions
 
991130樂活週記在台東(s)
991130樂活週記在台東(s)991130樂活週記在台東(s)
991130樂活週記在台東(s)
 
Feature JCDG
Feature JCDGFeature JCDG
Feature JCDG
 
Aparato digestivo
Aparato digestivoAparato digestivo
Aparato digestivo
 
Aamir Media (horror movie storyboard
Aamir Media (horror movie storyboardAamir Media (horror movie storyboard
Aamir Media (horror movie storyboard
 
Shot types
Shot typesShot types
Shot types
 
Indigenous Archives: Opportunities for Archival Access in an Information Society
Indigenous Archives: Opportunities for Archival Access in an Information SocietyIndigenous Archives: Opportunities for Archival Access in an Information Society
Indigenous Archives: Opportunities for Archival Access in an Information Society
 
11 frederike van wijck et al exercise after stroke.ppt
11 frederike van wijck et al exercise after stroke.ppt11 frederike van wijck et al exercise after stroke.ppt
11 frederike van wijck et al exercise after stroke.ppt
 
Parts of a House
Parts of a HouseParts of a House
Parts of a House
 
Android UI Development: Tips, Tricks, and Techniques
Android UI Development: Tips, Tricks, and TechniquesAndroid UI Development: Tips, Tricks, and Techniques
Android UI Development: Tips, Tricks, and Techniques
 
Evaluation
EvaluationEvaluation
Evaluation
 
Vinnytsia investments (UA) 2010
Vinnytsia investments (UA) 2010Vinnytsia investments (UA) 2010
Vinnytsia investments (UA) 2010
 
Possible to match our drawings with our coats of arms
Possible to match our drawings with our coats of armsPossible to match our drawings with our coats of arms
Possible to match our drawings with our coats of arms
 
Ecn zecchi
Ecn zecchiEcn zecchi
Ecn zecchi
 

Similaire à Seren

I don't always write reactive application but when I do, it run on raspberry pi
I don't always write reactive application but when I do, it run on raspberry piI don't always write reactive application but when I do, it run on raspberry pi
I don't always write reactive application but when I do, it run on raspberry piadelegue
 
.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?Rui Carvalho
 
Geneva jug Lucene Solr
Geneva jug Lucene Solr Geneva jug Lucene Solr
Geneva jug Lucene Solr francelabs
 
Elasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésElasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésMathieu Elie
 
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier KrantzOps@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier KrantzOlivier DASINI
 
802.1X filaire, un monde idéal illusoire? (Olivier Bilodeau)
802.1X filaire, un monde idéal illusoire? (Olivier Bilodeau)802.1X filaire, un monde idéal illusoire? (Olivier Bilodeau)
802.1X filaire, un monde idéal illusoire? (Olivier Bilodeau)Hackfest Communication
 
Python and Redis: A mini search engine
Python and Redis: A mini search enginePython and Redis: A mini search engine
Python and Redis: A mini search engineDidier Rano
 
Javascript pour le développeur Java
Javascript pour le développeur JavaJavascript pour le développeur Java
Javascript pour le développeur Javajollivetc
 
Apache solr andré bois-crettez 08
Apache solr   andré bois-crettez 08Apache solr   andré bois-crettez 08
Apache solr andré bois-crettez 08Loïc Descotte
 
2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communautéMickaël Rémond
 

Similaire à Seren (12)

I don't always write reactive application but when I do, it run on raspberry pi
I don't always write reactive application but when I do, it run on raspberry piI don't always write reactive application but when I do, it run on raspberry pi
I don't always write reactive application but when I do, it run on raspberry pi
 
.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?
 
Geneva jug Lucene Solr
Geneva jug Lucene Solr Geneva jug Lucene Solr
Geneva jug Lucene Solr
 
Elasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésElasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautés
 
Nouveautés Java 9-10-11
Nouveautés Java 9-10-11Nouveautés Java 9-10-11
Nouveautés Java 9-10-11
 
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier KrantzOps@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
 
802.1X filaire, un monde idéal illusoire? (Olivier Bilodeau)
802.1X filaire, un monde idéal illusoire? (Olivier Bilodeau)802.1X filaire, un monde idéal illusoire? (Olivier Bilodeau)
802.1X filaire, un monde idéal illusoire? (Olivier Bilodeau)
 
Python and Redis: A mini search engine
Python and Redis: A mini search enginePython and Redis: A mini search engine
Python and Redis: A mini search engine
 
Javascript pour le développeur Java
Javascript pour le développeur JavaJavascript pour le développeur Java
Javascript pour le développeur Java
 
Apache solr andré bois-crettez 08
Apache solr   andré bois-crettez 08Apache solr   andré bois-crettez 08
Apache solr andré bois-crettez 08
 
2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté
 
FinistJUG - Apache TomEE
FinistJUG - Apache TomEEFinistJUG - Apache TomEE
FinistJUG - Apache TomEE
 

Plus de Zenika

Datascience & IoT
Datascience & IoTDatascience & IoT
Datascience & IoTZenika
 
Matinale Agile Wake Up #4 : les tests et l'agilité
Matinale Agile Wake Up #4 : les tests et l'agilitéMatinale Agile Wake Up #4 : les tests et l'agilité
Matinale Agile Wake Up #4 : les tests et l'agilitéZenika
 
Agile Wake Up #3 : Lean UX
Agile Wake Up #3 : Lean UXAgile Wake Up #3 : Lean UX
Agile Wake Up #3 : Lean UXZenika
 
Agile Wake Up #3 : La transformation Agile de Kisio Digital
Agile Wake Up #3 : La transformation Agile de Kisio DigitalAgile Wake Up #3 : La transformation Agile de Kisio Digital
Agile Wake Up #3 : La transformation Agile de Kisio DigitalZenika
 
Agile Wake Up #3 : la contractualisation Agile
Agile Wake Up #3 : la contractualisation AgileAgile Wake Up #3 : la contractualisation Agile
Agile Wake Up #3 : la contractualisation AgileZenika
 
Zenika matinale spark-zeppelin_ml
Zenika matinale spark-zeppelin_mlZenika matinale spark-zeppelin_ml
Zenika matinale spark-zeppelin_mlZenika
 
Docker du mythe à la réalité
Docker du mythe à la réalitéDocker du mythe à la réalité
Docker du mythe à la réalitéZenika
 
Motivation 3.0 : sens, autonomie et maîtrise.
Motivation 3.0 : sens, autonomie et maîtrise.Motivation 3.0 : sens, autonomie et maîtrise.
Motivation 3.0 : sens, autonomie et maîtrise.Zenika
 
Matinale React
Matinale ReactMatinale React
Matinale ReactZenika
 
NigthClazz Spark - Machine Learning / Introduction à Spark et Zeppelin
NigthClazz Spark - Machine Learning / Introduction à Spark et ZeppelinNigthClazz Spark - Machine Learning / Introduction à Spark et Zeppelin
NigthClazz Spark - Machine Learning / Introduction à Spark et ZeppelinZenika
 
NightClazz Spark / Machine Learning
NightClazz Spark / Machine LearningNightClazz Spark / Machine Learning
NightClazz Spark / Machine LearningZenika
 
HTTP2 : ce qui va changer par Julien Landuré
HTTP2 : ce qui va changer par Julien LanduréHTTP2 : ce qui va changer par Julien Landuré
HTTP2 : ce qui va changer par Julien LanduréZenika
 
Agile Wake Up #1 du 01/12/2015 : L'agilité au service des projets Orange Fran...
Agile Wake Up #1 du 01/12/2015 : L'agilité au service des projets Orange Fran...Agile Wake Up #1 du 01/12/2015 : L'agilité au service des projets Orange Fran...
Agile Wake Up #1 du 01/12/2015 : L'agilité au service des projets Orange Fran...Zenika
 
Agile Wake Up #1 du 01/12/2015 : Scrum Master's Diary par Arnaud Villenave
Agile Wake Up #1 du 01/12/2015 : Scrum Master's Diary par Arnaud VillenaveAgile Wake Up #1 du 01/12/2015 : Scrum Master's Diary par Arnaud Villenave
Agile Wake Up #1 du 01/12/2015 : Scrum Master's Diary par Arnaud VillenaveZenika
 
Agile Wake Up #1 du 01/12/2015 : L'agilité à grande échelle
Agile Wake Up #1 du 01/12/2015 : L'agilité à grande échelleAgile Wake Up #1 du 01/12/2015 : L'agilité à grande échelle
Agile Wake Up #1 du 01/12/2015 : L'agilité à grande échelleZenika
 
Entreprise libérée : Du mythe à la réalité ?
Entreprise libérée : Du mythe à la réalité ?Entreprise libérée : Du mythe à la réalité ?
Entreprise libérée : Du mythe à la réalité ?Zenika
 
Conference MicroServices101 - 1ere partie
Conference MicroServices101 - 1ere partieConference MicroServices101 - 1ere partie
Conference MicroServices101 - 1ere partieZenika
 
NightClazz Docker Découverte
NightClazz Docker Découverte NightClazz Docker Découverte
NightClazz Docker Découverte Zenika
 
Matinale DevOps / Docker
Matinale DevOps / DockerMatinale DevOps / Docker
Matinale DevOps / DockerZenika
 
NightClazz Java 8 Decouverte
NightClazz Java 8 DecouverteNightClazz Java 8 Decouverte
NightClazz Java 8 DecouverteZenika
 

Plus de Zenika (20)

Datascience & IoT
Datascience & IoTDatascience & IoT
Datascience & IoT
 
Matinale Agile Wake Up #4 : les tests et l'agilité
Matinale Agile Wake Up #4 : les tests et l'agilitéMatinale Agile Wake Up #4 : les tests et l'agilité
Matinale Agile Wake Up #4 : les tests et l'agilité
 
Agile Wake Up #3 : Lean UX
Agile Wake Up #3 : Lean UXAgile Wake Up #3 : Lean UX
Agile Wake Up #3 : Lean UX
 
Agile Wake Up #3 : La transformation Agile de Kisio Digital
Agile Wake Up #3 : La transformation Agile de Kisio DigitalAgile Wake Up #3 : La transformation Agile de Kisio Digital
Agile Wake Up #3 : La transformation Agile de Kisio Digital
 
Agile Wake Up #3 : la contractualisation Agile
Agile Wake Up #3 : la contractualisation AgileAgile Wake Up #3 : la contractualisation Agile
Agile Wake Up #3 : la contractualisation Agile
 
Zenika matinale spark-zeppelin_ml
Zenika matinale spark-zeppelin_mlZenika matinale spark-zeppelin_ml
Zenika matinale spark-zeppelin_ml
 
Docker du mythe à la réalité
Docker du mythe à la réalitéDocker du mythe à la réalité
Docker du mythe à la réalité
 
Motivation 3.0 : sens, autonomie et maîtrise.
Motivation 3.0 : sens, autonomie et maîtrise.Motivation 3.0 : sens, autonomie et maîtrise.
Motivation 3.0 : sens, autonomie et maîtrise.
 
Matinale React
Matinale ReactMatinale React
Matinale React
 
NigthClazz Spark - Machine Learning / Introduction à Spark et Zeppelin
NigthClazz Spark - Machine Learning / Introduction à Spark et ZeppelinNigthClazz Spark - Machine Learning / Introduction à Spark et Zeppelin
NigthClazz Spark - Machine Learning / Introduction à Spark et Zeppelin
 
NightClazz Spark / Machine Learning
NightClazz Spark / Machine LearningNightClazz Spark / Machine Learning
NightClazz Spark / Machine Learning
 
HTTP2 : ce qui va changer par Julien Landuré
HTTP2 : ce qui va changer par Julien LanduréHTTP2 : ce qui va changer par Julien Landuré
HTTP2 : ce qui va changer par Julien Landuré
 
Agile Wake Up #1 du 01/12/2015 : L'agilité au service des projets Orange Fran...
Agile Wake Up #1 du 01/12/2015 : L'agilité au service des projets Orange Fran...Agile Wake Up #1 du 01/12/2015 : L'agilité au service des projets Orange Fran...
Agile Wake Up #1 du 01/12/2015 : L'agilité au service des projets Orange Fran...
 
Agile Wake Up #1 du 01/12/2015 : Scrum Master's Diary par Arnaud Villenave
Agile Wake Up #1 du 01/12/2015 : Scrum Master's Diary par Arnaud VillenaveAgile Wake Up #1 du 01/12/2015 : Scrum Master's Diary par Arnaud Villenave
Agile Wake Up #1 du 01/12/2015 : Scrum Master's Diary par Arnaud Villenave
 
Agile Wake Up #1 du 01/12/2015 : L'agilité à grande échelle
Agile Wake Up #1 du 01/12/2015 : L'agilité à grande échelleAgile Wake Up #1 du 01/12/2015 : L'agilité à grande échelle
Agile Wake Up #1 du 01/12/2015 : L'agilité à grande échelle
 
Entreprise libérée : Du mythe à la réalité ?
Entreprise libérée : Du mythe à la réalité ?Entreprise libérée : Du mythe à la réalité ?
Entreprise libérée : Du mythe à la réalité ?
 
Conference MicroServices101 - 1ere partie
Conference MicroServices101 - 1ere partieConference MicroServices101 - 1ere partie
Conference MicroServices101 - 1ere partie
 
NightClazz Docker Découverte
NightClazz Docker Découverte NightClazz Docker Découverte
NightClazz Docker Découverte
 
Matinale DevOps / Docker
Matinale DevOps / DockerMatinale DevOps / Docker
Matinale DevOps / Docker
 
NightClazz Java 8 Decouverte
NightClazz Java 8 DecouverteNightClazz Java 8 Decouverte
NightClazz Java 8 Decouverte
 

Seren

  • 1. SEREN   Sérialisation & magie noire 1
  • 2. SPEAKER Olivier Croisier Java Specialist Consultant @ Zenika @OlivierCroisier "The Coder's Breakfast" http://thecodersbreakfast.net 2
  • 3. SEREN ? • La sérialisation est utilisée partout • Efficace et robuste • Mais elle peut être améliorée ! • … Automatiquement ? 3
  • 4. SEREN ? • SEREN : Serialization Enhancer • Agent Java • Bytecode engineering • Améliore vos POJO ! 4
  • 5. • Se branche sur le mécanisme TECH standard de sérialisation • Génère des méthodes optimisées writeObject & readObject writeReplace writeObject 10010101 01010101 01010100 10010101 01011001 01010100 readResolve readObject 5
  • 6. TECH • Sérialiser un Objet est coûteux • Ecrire seulement les données utiles • Wrappers numériques & Strings 6
  • 7. TECH • Wrappers numériques - booléen pour gérer "null" - valeur primitive • Strings - booléen pour gérer "null" - caractères UTF8 7
  • 8. TECH • Quelles classes ? • ClassFilters - PackageList - PackagePattern - ClassPattern - Annotation - Custom ! 8
  • 9. TECH • Quels champs ? • Non-transient Non static • Champs "final" - Reflexion ? - Unsafe ? - Assignation directe 9
  • 10. • Classpath USAGE - javassist.jar - seren.properties • Option de JVM -javaagent:seren.jar • Votre code Aucune modification ! 10
  • 11. Seren.properties USAGE // Seren configuration seren.filter=byPackageList seren.verbose=true // Filter definition filter.byPackageList=seren.filter.PackageListFilter filter.byPackageList.packages=com.company.project.model 11
  • 12. • Graphe d'objets PERFS • Champs • Optimisations existantes • Destination du flux 12
  • 13. 500 PERFS 450 400 String, fixe 350 Java : 380 ms 300 250 200 Seren : 425 ms 150 100 50 Boost : x 0.9 0 13
  • 14. 1000 PERFS 900 800 String, aléatoire 700 Java : 920 ms 600 500 400 Seren : 510 ms 300 200 100 Boost : x 1.8 0 14
  • 15. 500 PERFS 450 400 Integer < 128 350 Java : 400 ms 300 250 200 Seren : 345 ms 150 100 50 Boost : x 1.15 0 15
  • 16. 1000 PERFS 900 800 Integer >= 128 700 Java : 880 ms 600 500 400 Seren : 350 ms 300 200 100 Boost : x 2.5 0 16
  • 17. POJO 3000 2500 - Long id PERFS - String firstName 2000 - String lastName 1500 1000 Java : 2090 ms Seren : 690 ms 500 0 Boost : x 3 17
  • 18. 3000 POJO - Long id 2500 - String firstName PERFS 2000 - String lastName - Date birthDate 1500 1000 Java : 2930 ms 500 Seren : 1220 ms 0 Boost : x 2.4 18
  • 19. 60000 50000 PERFS 40000 thrift-protobuf-compare 30000 .googlecode.com 20000 Boost : x 1.04 – 1.09 10000 0 19
  • 20. • Code http://github.com/oliviercroisier/seren • Licence & MORE... 3-Clause BSD Licence • Merci à - Heinz Kabutz - Thomas Darimont - Thomas Segismont 20