https://air.imag.fr/api.php?action=feedcontributions&user=Alexis.Rollin&feedformat=atomair - User contributions [en]2024-03-29T09:42:16ZUser contributionsMediaWiki 1.35.13https://air.imag.fr/index.php?title=Projets_2020-2021&diff=51102Projets 2020-20212021-03-29T07:07:30Z<p>Alexis.Rollin: /* Affectations S10 */</p>
<hr />
<div><<[[Projets 2019-2020]] | [[Projets]] | [[Projets 2021-2022]]>><br />
=INFO=<br />
==INFO3==<br />
<br />
==INFO4==<br />
===Projet Semestre S8===<br />
<br />
Enseignants responsables : Olivier Richard, Didier Donsez<br />
<br />
* Dates : Lundi après-midi, Mardi après-midi <br />
* Lancement: 18 Janvier 2021 après midi<br />
* Soutenance à mi-parcours: A définir<br />
* Soutenance: A définir<br />
<br />
* '''Evaluation à mi-parcours le lundi/mardi ???''': Format: 10min (5min de présentation 3 slides au plus, 5min de discussion). Cette évaluation sera prise en compte dans la note finale.<br />
<br />
'''Consignes générales:'''<br />
<br />
* '''Vous devez être pro-actifs !!!''': Si des points sont pas ou mals spécifiés, vous le faîtes et vous justifiez vos choix. Pour les problèmes techniques éventuels vous pouvez: creuser la question, contacter l'auteur du code si il y a lieu, écrire un rapport de bug ('''Attention:''' ca se prépare !), soumettre un patch/pull request, contacter l'enseignant ou la personne référente du projet.<br />
<br />
* '''Vous devez maintenir une fiche de suivi de projet''': elle doit être mise à jour chaque semaine, elle rassemble les élements essentiels du projet, elle indique les évolutions du projet et présente sa feuille de route. '''Note:''' le nom de la fiche doit être composé du nom du projet et suffixé par info4_2020_2021. '''Cette fiche compte pour la note finale'''<br />
<br />
* '''Votre code''' pour doit être hébergé sur le gitlab et à l'URL suivante https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21 , vous utiliserez votre compte UGA.<br />
<br />
* Chaque projet doit avoir '''aux moins 2 dépôts git''':<br />
** '''Un pour les documents''' demandés rapport, présentation de pré-soutenante, de soutenance, flyer. '''Il sera appelé documents.'''<br />
** Un ou plusieurs pour le code, les tests, les évaluations, les preuves de concept, la ou les documentations afférentes. <br />
<br />
* Les '''documents public doivent être rédigés en anglais (README, documentation, commentaires de code, nom de variables et de fonctions)'''. Le *rapport* sera aussi demandé en *anglais* (il fera la taille d'un rapport de TP). Les transparents des présentation peuvent être en anglais ou en francais, la soutenance sera taire en francais.<br />
<br />
* '''La note obtenue''' tiendra compte du '''nombre et de la qualité des commits''' observé dans '''vos dépots git et la branche master''' (or depot documents). La qualité comprend l'intitulé du commit et son contenu. Les notes pourront être différentiées dans un groupe, il n'est pas acceptable de pas avoir de commit dans le(s) dépôt(s) du projet (or dépôt documents).<br />
<br />
* Il est fortement conseillé de suivre un '''développement incrémental''' qui permette d'avoir à tout moment un démonstrateur à présenter, un projet peut être constituer d'une succession de '''démonstrateurs présentables séparément'''.<br />
<br />
* Vous devez faire aussi des '''schémas d'architectures générales et/ou spéficiques, des diagrammes de séquence''', et autre documents de spécification si nécessaire. Ces documents vous serviront de base de discussion/brainstorming interne ainsi que dans vos différents documents (rapport, présentations, documentation). Ces schémas sont avant tout conceptuels et techniques.<br />
<br />
===Propositions de projets S8===<br />
<br />
* 1. [[Contribution au projet STM32Python]], Didier DONSEZ.<br />
* 2. [[Portage du kit station LoRa LRWAN2 de ST sur RIOT OS]], Didier DONSEZ.<br />
* 3+4. [[Portage de la carte de prototypage IoT Nucleo-WL55JC sur RIOT OS]] + [[Portage de la carte de communication LoRa LLCC68MB2BAS sur RIOT OS]], Didier DONSEZ (1 seul groupe de 3 élèves pour les 2 cartes).<br />
* 5. [[Service Web d'équipements embarqués communicant sur bus CAN]] (2 groupes de 2 élèves), Didier DONSEZ.<br />
* 6. [[Application mobile d'enregistrements de noeuds IoT LoRaWAN dans plusieurs réseaux]], Didier DONSEZ.<br />
* 7. [[Evaluation du toolkit AI de STM32 pour l'analyse de l'environnement sonore]], Didier DONSEZ.<br />
* 8. [[Godot Game Engine et tables tactiles]] : démonstration d'un jeu en réseau sur les 3 tables tactiles : (gaming spirit) Olivier RICHARD.<br />
* 9. [[Serveur filière INFO]], Nicolas Palix<br />
* Agriculture connectée en partenariat avec les projets collectifs IESE/MAT<br />
** 10. [[ASAC/AP|Polytech]] : Nicolas Palix<br />
** 11. [[ASAC/SJC|St Cassien]] : Nicolas Palix<br />
* 12. [[ENT Polytech]] avec XMPP/Mumble/BBB/Mattermost/OpenBoard : Nicolas Palix<br />
* 13. [[Polytech Helper Service | Outils d'aide à la gestion de service]], (professionel) Olivier Richard<br />
* 14. [[Rust Engine | Executeur de tâche en Rust]], (exigeant techniquement) Olivier Richard<br />
* 15. [[Retrocompute simulateur | RetroComputing]]: (vintage style) Coupler le simulateur Digital avec un simulateur de processeur 8bits, Olivier Richard<br />
* 16. [[FPGA et Deep Learnning]] Olivier Richard<br />
* 17. [[OpenAPI OAR | OpenAPI pour la gestion de tâches de ressources OAR]], (professionel) Olivier Richard <br />
* 18. [[Monitoring de la plateforme CampusIoT]] : Didier Donsez<br />
<br />
==== Reporté INFO5 21-22 ==== <br />
* 1 heure 1 heure (échange de compétence), etudiant.e.s Emilie Tondeux + ?, tuteur ?<br />
==== Reporté ====<br />
[[Simulateur de réseaux simples avec un FPGA]], (typé recherche/prospectif)<br />
<br />
==== Affectation ====<br />
{|class="wikitable alternance"<br />
|+ Affectation des projets INFO4 20-21<br />
|-<br />
|<br />
!scope="col"| Sujet<br />
!scope="col"| Etudiants<br />
!scope="col"| Enseignant(s)<br />
!scope="col"| Fiche de suivi<br />
!scope="col"| Documents<br />
|-<br />
!scope="row"| 1<br />
| [[Contribution au projet STM32Python]]<br />
| BAUDEUR BERTRAND,LANQUETIN ALEXIS,TONDEUX EMILIE<br />
| Didier DONSEZ<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/01/docs/-/blob/master/Contribution%20au%20projet%20STM32Python%20info4_2020_2021.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/01/docs/-/blob/master/Pr%C3%A9sentation_mi-parcours.pdf Presentation de mi-parcours]<br />
|-<br />
!scope="row"| 2<br />
| [[Portage du kit station LoRa LRWAN2 de ST sur RIOT OS]]<br />
| HERQUE ERIC,MALLEN GUILLAUME,PORTIER BARNAB<br />
| Didier DONSEZ<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/02/docs/-/blob/master/Portage_du_kit_station_LoRa_LRWAN2_de_ST_sur_RIOT_OS_info4_2020_2021.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/02/docs/-/blob/master/Pr%C3%A9sentation%20de%20mi-parcours.pdf Presentation de mi-parcours]<br />
|-<br />
!scope="row"| 5<br />
| [[Service Web d'équipements embarqués communicant sur bus CAN]]<br />
| ANDRIEUX LIAM,DREZET LUCAS,REGOUIN ROMAN<br />
| Didier DONSEZ<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/05/docs/-/blob/master/EmbeddedEquipmentWebServiceCommunicatingOnCANBus_info4_2020_2021.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/05/docs/-/blob/master/Pre%20viva%20presentation.pdf Presentation de mi-parcours]<br />
|-<br />
!scope="row"| 6<br />
| [[Application mobile d'enregistrements de noeuds IoT LoRaWAN dans plusieurs réseaux]]<br />
| CAMBUS QUENTIN,EL YANDOUZI ELIAS,JULIENNE MALONE<br />
| Didier Donsez<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/06/docs/-/blob/master/README.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/06/docs/-/blob/master/Pr%C3%A9sentation_IoT.pdf Presentation de mi-parcours]<br />
|-<br />
!scope="row"| 7<br />
| [[ Evaluation du toolkit AI de STM32 pour reconnaissance sonore]]<br />
| COSOTTI KEVIN,GRANGER OSCAR,GUIGNARD JULIE<br />
| Didier Donsez<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/07/docs/-/blob/master/README.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [[https://docs.google.com/presentation/d/15RCcuoAWGlpOLyM_SX3tXVhhXEHiTuNTXXxRCrJ4tiA/edit?usp=sharing |Presentation de mi-parcours]]<br />
|-<br />
!scope="row"| 8<br />
| [[Godot Game Engine et tables tactiles|Godot Engine]]<br />
| CIRSTEA PAUL,DE MULATIER JEAN-THEOPHANE,SOULARD ALEXANDR<br />
| Olivier Richard<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/08/docs/-/blob/master/Godot_Game_Engine_et_tables_tactiles_info4_2020_2021.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [[https://docs.google.com/presentation/d/1CUBp5Zz1uivkCb8latQ8tnfSy-bUTJs-7f3f7GcH4Zs/edit?usp=sharing |Presentation de mi-parcours]]<br />
|-<br />
!scope="row"| 9<br />
| [[Serveur_filière_INFO|Serveur INFO]]<br />
| GITTON ANTOINE,MERTENS GILLES,SUEUR CORENTIN<br />
| Nicolas Palix<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/09/docs/-/blob/master/Serveur_filiere_info4_2020_2021.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [[Media:Presentation_mi_parcours_groupe7.pdf|Presentation de mi-parcours]]<br />
|-<br />
!scope="row"| 10<br />
| [[ASAC/AP|Serre Polytech]]<br />
| AGUIAR MATHILDE,HAJJI OUMAIMA,SIDIBE ROKIATOU DITE ROSE<br />
| Nicolas Palix<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/10/docs/-/blob/master/README.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [[https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/10/docs/-/blob/master/Presentations/mid-project_slides.pdf | Presentation de mi-parcours]]<br />
|-<br />
!scope="row"| 11<br />
| [[ASAC/SJC/SJC-2020-INFO]]<br />
| BUISINE JULIEN,PRAT-CAPILLA HUGO,TEYSSIER THEO<br />
| Nicolas Palix<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/11/docs/-/blob/master/README.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/11/docs/-/blob/master/Team11-Presentation.pdf Presentation de mi-parcours]<br />
|-<br />
!scope="row"| 12<br />
| [[ENT Polytech]]<br />
| HERY JULES,SALMON AMAD,VACHERIAS GUILLAUME<br />
| Nicolas Palix<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/12/docs/-/blob/master/README.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [[https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/12/docs/-/blob/master/Presentation_mi_parcours.pdf | Presentation de mi-parcours]]<br />
|-<br />
!scope="row"| 13<br />
| [[Polytech_Helper_Service|Polytech Helper Service]]<br />
| ALIBERT ANGELO,NOERIE SOPHIE,SARRE MARGAUX<br />
| Olivier Richard<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/13/docs/ Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/13/docs/-/blob/master/Pr%C3%A9sentation_Mi-Parcours.pdf Presentation de mi-parcours]<br />
|-<br />
!scope="row"| 14<br />
| [[Rust Engine|Rust Engine]]<br />
| BARET DORIAN,CHALOYARD LUCAS,MALOD VICTOR,PARA YAEL<br />
| Olivier Richard<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/14/docs/-/blob/master/tracking-sheet.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/14/docs/-/blob/master/soutenance-mi_parcours.pdf Presentation de mi-parcours]<br />
|-<br />
!scope="row"| 15<br />
| [[Retrocompute_simulateur|Retrocomputing]]<br />
| ELHADJI TCHIAMBOU SAMI,HUMBERT CORENTIN,MUTEL MATHIS<br />
| Olivier Richard<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/15/docs/-/blob/master/README.md#follow-up Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/15/docs/-/blob/master/diapo_soutenance_mi_parcours.pdf Presentation de mi-parcours]<br />
|-<br />
!scope="row"| 16<br />
| [[FPGA et Deep Learning]]<br />
| GEITNER TEVA,GONZALEZ JULES,MALECOT ETHAN<br />
| Olivier Richard<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/16/docs/-/blob/master/FPGA_info4_2020_2021.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/16/docs/-/blob/master/Presentation_mi-projet.pdf Presentation de mi-parcours]<br />
|-<br />
!scope="row"| 17<br />
| [[OpenAPI OAR]]<br />
| LAMBERT DAPHNE,MINIER-MANCINI TITOUAN,TOUE TIOYE<br />
| Olivier Richard<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/17/docs/-/blob/master/TRACKING_SHEET.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]<br />
|-<br />
!scope="row"| 18<br />
| [[Monitoring de la plateforme CampusIoT]]<br />
| BLANQUET ANTOINE,LAMBERT PAUL,YUNG KEVIN<br />
| Didier Donsez<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/18/docs/-/blob/master/README.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/18/docs/-/blob/master/Reunion_de_mi_parcours.pdf Presentation de mi-parcours]<br />
|-<br />
|}<br />
<br />
==INFO5==<br />
===Projet IoT S9===<br />
Enseignants responsables : Bernard Tourancheau<br />
<br />
Calendrier: ??? Septembre à ??? Décembre 2020.<br />
<br />
<br />
===Projet Semestre S10===<br />
<br />
Enseignants responsables : [[user:Donsez|Didier Donsez]]<br />
<br />
Calendrier: 28/01 (13H30-17H30) au 19/03.<br />
<br />
Séances de Management de projets innovants: A voir dessus.<br />
<br />
Réunion de présentation et choix des sujets: 28/01 (13H30-17H30) en salle P257 (voir ADE)<br />
<br />
Démarrage : 29/01 (13H30-17H30)<br />
<br />
Soutenance à mi-parcours : 26/02/2021 13H30-17H30 en distantiel (15 minutes par équipe).<br />
<br />
Soutenance finale : 19/03/2021 (8H30-12H00 et 13H30-17H00). 30 minutes par équipe, questions/réponses et démonstration incluse. Prière de rapporter au fablab le matériel emprunté juste après votre soutenance. <br />
<br />
====Séances MPI====<br />
<br />
Les séances MPI seront en distanciel (mais ADE fait foi).<br />
<br />
<pre><br />
Séance Thématique Date Horaires Intervenante Salle<br />
1 Définir la problématique 03-févr. 14h-18h Stéphanie Diligent distanciel<br />
2 Gérer le projet en restant agile 10-févr. 8h30 - 12h30 Stéphanie Diligent distanciel<br />
3 Communiquer 24-févr. 8h30 - 12h30 Emmanuelle Tréhoust distanciel<br />
4 Evaluer et valoriser 03-mars 8h30 - 12h30 Emmanuelle Tréhoust distanciel<br />
5 Evaluation 10-mars 8h30 - 12h30 Stéphanie Diligent distanciel<br />
</pre><br />
<br />
==== Soutenance intermédiaire S10 ====<br />
Date: 26/02 Après midi. Distantiel (sur Zoom).<br />
<br />
L'objectif de la soutenance intermédiaire est de vérifier si l'équipe projet est en bon ordre de marche. La présence du porteur n'est pas obligatoire. Prévoyez du temps pour les questions-réponses (5 minutes max).<br />
<br />
L'équipe présentera en 5-6 transparents en 8 minutes.<br />
* les équipiers et leurs rôles<br />
* le contexte, le sujet et l'objectif du projet<br />
* l'architecture du systèmes à réaliser<br />
* les technologies utilisées<br />
* le plan de travail (backlog, planning, ce qui est fait, ce qu'il reste à faire ...)<br />
* les difficultés (s'il y a)<br />
<br />
Respectez bien les créneaux indiqués (par respect pour les autres équipes).<br />
<br />
==== Soutenance finale S10 ====<br />
Date: 19/03/2021 (8H30-12H00 et 13H30-17H00).<br />
<br />
'''La présence du(des) porteur(s) est obligatoire. Pensez à les prévenir bien à l'avance'''<br />
<br />
Durée: 30 minutes par équipe: présentation, questions/réponses et démonstration incluse.<br />
<br />
Les documents devront être en ligne sur le wiki (colonne Documents) la veille (ie avant le 18/03/2021 23:59:59 CET).<br />
<br />
'''Remarque: le poster et le flyer (recto-verso A4 en 3 plis : [http://air.imag.fr/mediawiki/images/9/9b/FlyerCervin.pdf exemple]) doivent être rédigés en anglais.''' Pensez à ajouter un [https://zxing.appspot.com/generator QRCode] vers la page du projet dans le poster et dans le flyer.<br />
<br />
La présentation est constituée des chapitres suivants:<br />
* Rappel du sujet/besoin et cahier des charges<br />
* Technologies employées<br />
* Architecture techniques<br />
* Réalisations techniques<br />
* Gestion de projet (méthode, planning prévisionnel et effectif, gestion des risques, rôles des membres ...)<br />
* Outils (collaboration, CD/CI ...)<br />
* Métriques logiciels : lignes de code, langages, performance, temps ingénieur (d'après vos journaux), la répartition des lignes de code et des commits en pourcentage entre les membres du projet ...)<br />
* Conclusion (Retour d'expérience)<br />
* Transparent expliquant la démonstration<br />
<br />
L'ensemble des documents doit être accessible depuis le tableau ci-dessus et dans chaque fiche de suivi.<br />
<br />
Le screencast (réalisé lors de la dernière répétition) sera rendu disponible via un partage caché (wetransfer, google drive …) dont le lien sera ajouté dans le devoir idoine sur Moodle et également envoyé par mail à votre tuteur.<br />
<br />
Le rapport final contient les mêmes chapitres que la présentation ainsi qu'un glossaire et une bibliographie. Le rapport ne doit pas dépasser 15 pages (schémas et figures compris). Vous pourrez référencer les autres documents que vous avez produits au cours du projet (spécifications détaillées, algorithmes, conception d'écrans ...).<br />
<br />
Le rapport final est au format Markdown et doit être placé dans un des dépôts Git de votre groupe/organisation.<br />
<br />
NB: le rapport technique listé dans la colonne Documents contient tout ce qui ne tient pas dans les 15 pages du rapport final : cahier des charges, diagrammes UML, enquêtes utilisateurs design UI, API, technologies employées (détail), plan de tests, term of services, conformance RPGD, audits/diagnostiques sécurité, MTBR, rapport de vulnérabilité, plan de charge, rapports de charge, manuel d'installation … : ça dépend un peu de la nature de votre projet.<br />
<br />
Conseil : 30 minutes c'est très court alors répétez la soutenance auparavant ! Prévoyez des transparents supplémentaires en annexe pour répondre aux questions.<br />
<br />
NB: Vous pouvez prévoir d’organiser une démonstration plus longue de votre projet auprès de vos porteurs et vos tuteurs avant ou après la soutenance. <br />
<br />
<br />
'''Prière de rapporter au fablab le matériel emprunté juste après votre soutenance'''.<br />
<br />
==== Affectations S10====<br />
{|class="wikitable alternance"<br />
|+ Affectation des projets INFO5 2020-2021<br />
|-<br />
|<br />
!scope="col"| Sujet<br />
!scope="col"| Etudiants<br />
!scope="col"| Enseignant(s)<br />
!scope="col"| Fiche de suivi<br />
!scope="col"| Documents<br />
!scope="col"| Dépôt Git<br />
!scope="col"| Soutenance intermédiaire<br />
!scope="col"| Soutenance finale<br />
|-<br />
!scope="row"| 1<br />
| [[Infrastructure de communication interne au cubesat ATISE du CSUG | ATISE]]<br />
| Alexandre SALMON, Myriam LOMBARD, Killian PAREILLEUX, Adrien ARTAUD<br />
| Imane El-Khantouti (CSUG, UGA), Frédéric Martin (CSUG, UGA)<br />
| [[PROJET-INFO5 2021 ATISE| Fiche de suivi]]<br />
| [https://air.imag.fr/index.php/Infrastructure_de_communication_interne_au_cubesat_ATISE_du_CSUG Documents], [[Media:ATISE_rapport.pdf|Rapport]], [[Media:ATISE_Flyer.pdf|Flyer]], [[Media:ATISE_Poster.pdf|Poster]], [[Pitch ATISE | Pitch]], [https://github.com/ATISE-2020-2021-Polytech-Grenoble/Docs/blob/master/ScreenCastATISE.ogv Screencast]<br />
| [https://github.com/ATISE-2020-2021-Polytech-Grenoble Dépôt Github]<br />
| 13H30, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_1.pdf|Présentation intermédiaire]]<br />
| 9H00, [[Media:Presentation_Finale_INFO5_ProjetS10_groupe_1.pdf|Présentation finale]]<br />
|-<br />
!scope="row"| 2<br />
| [[Wildcount:_Inexpensive_Edge_sensor_for_recognizing_and_counting_the_presence_of_humans_(anonymous)_and_animals_into_wild_and_protected_areas.|Wildcount]]<br />
| BEAUGRAND Elisa, DE GAUDENZI Louis, GRAUGNARD Tom, ROLLIN Alexis<br />
| DONSEZ Didier, QUENOT Georges<br />
| [[PROJET-INFO5_2021_Wildcount|Fiche de suivi]]<br />
| [[Wildcount:_Inexpensive_Edge_sensor_for_recognizing_and_counting_the_presence_of_humans_(anonymous)_and_animals_into_wild_and_protected_areas.|Documents]], [https://gitlab.com/wildcount/doc/-/blob/master/RAPPORT_FINAL.md Rapport], [[Media:Wildcount_Flyer.pdf|Flyer]], [[Media:WildCount.pdf|Poster]], [[Media:pitch_WildCount.pdf |Pitch]], [https://drive.google.com/file/d/17kRStVzWLACtxEpDSXeEqgNv4S4WqaKl/view?usp=sharing Screencast]<br />
| [https://gitlab.com/wildcount Dépôt Gitlab]<br />
| 13H45, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_2.pdf|Présentation]]<br />
| 14H30, [[Media:Presentation_Finale_INFO5_ProjetS10_groupe_2.pdf|Présentation]]<br />
|-<br />
!scope="row"| 5<br />
| [[Signature électronique eIDAS|eIDAS]]<br />
| ASSI Dima, BILOUNGA Aleck, EL AJI Houda, ZERAMDINI Otba<br />
| Nicolas PALIX<br />
| [[PROJET-INFO5 2021 Signature électronique eIDAS| Fiche de suivi]]<br />
| [https://air.imag.fr/index.php/Signature_%C3%A9lectronique_eIDAS Documents], [https://github.com/2020-2021-EIDAS-INFO5/Docs/blob/master/Technical_document.md Rapport technique], [[Media:Flyer_EIDAS.pdf|Flyer]], [[Media: Poster eIDAS.pdf| Poster]], [[Media:Rapport-final-eidas.pdf|Rapport final]], [[Media:Pitch_eIDAS.pdf|Pitch]], [https://youtu.be/Uuvf6bRpHyo Screencast Part 1], [https://drive.google.com/drive/folders/1QNQN-MCrYthh8jqjr3i9NB-BTTmqBBtG?usp=sharing Screencast Part 2]<br />
| [https://github.com/2020-2021-EIDAS-INFO5 Dépôt Github]<br />
| 14H00, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_5.pdf|Présentation]]<br />
| 15H45, [[Media:Presentation-eIDAS-final.pdf|Présentation]]<br />
|-<br />
<br />
!scope="row"| 6<br />
| [[Contributions open source au projet EdCampus|EdCampus]]<br />
| COURTHIAL Samuel, FOUGERE Sebastien, DELBOS Robin<br />
| POLLIER Gérard, GEOURJON Anthony, DONSEZ Didier<br />
| [[PROJET-INFO5 2021 Contributions open source au projet EdCampus| Fiche de suivi]]<br />
| [https://air.imag.fr/index.php/Contributions_open_source_au_projet_EdCampus Documents], [https://air.imag.fr/index.php/Rapport_Final_EDCampus Rapport],[[Media:flyer_EDCampus.pdf|Flyer]], [[Media:poster_EDCampus.pdf|Poster]], [[Media:pitch_EDCampus.pdf|Pitch]], Screencast<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/edcampus Dépôt GitLab]<br />
| 14H15, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_6.pdf|Présentation]]<br />
| 09H30, [[Media:Presentation_Finale_INFO5_ProjetS10_groupe_6.pdf|Présentation]]<br />
|-<br />
<br />
!scope="row"| 8<br />
| [[Prototypage d'application mobile pour la vente en direct de produits producteur locaux]]<br />
| BOLEAT Baptiste, CHAIX Manon, MICHELARD Leila, PALOMO Rémy<br />
| DELANGUE Sylvain, Gérard POLLIER (Disrupt Campus)<br />
| [[PROJET-INFO5 2021 Go Farmer | Fiche de suivi]]<br />
| [[Rapport final Go Farmer | Rapport Final]], [https://air.imag.fr/index.php/Prototypage_d%27application_mobile_pour_la_vente_en_direct_de_produits_producteur_locaux Documents], [[Media:Flyer Producteurs Locaux.pdf | Flyer]], [[Media:Poster_Producteurs_Locaux.pdf | Poster]], [[Media: Pitch_Producteurs_Locaux.pdf | Pitch]], [https://drive.google.com/file/d/1gNGQYwygxEDpGpxbIMYtM05xAAotVdgJ/view?usp=sharing Screencast]<br />
| [https://bitbucket.org/gofarmer/ Dépôt Bitbucket (privé)]<br />
| 14H30, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_8.pdf|Présentation]]<br />
| 08H30, [[Media:Diapo_Producteurs_Locaux.pdf|Présentation]]<br />
|-<br />
!scope="row"| 9<br />
| [[Secours Montagne avec LoRa|Saint-Bernard]]<br />
| CHATON Alexandra, FRION Thomas, PASDELOUP Romain<br />
| TOURANCHEAU Bernard<br />
| [[PROJET-INFO5 2021 Secours Montagne avec LoRa | Fiche de suivi]]<br />
| [https://gitlab.com/info5-lora-avalanche/documentation/-/blob/master/Reports/Rapport%20Final.pdf Rapport final], [https://gitlab.com/info5-lora-avalanche/documentation/-/blob/master/Reports/Final%20Report.md Rapport final (MD)] [https://gitlab.com/info5-lora-avalanche/documentation/-/blob/master/Presentation/Flyer_projet_Saint-Bernard.pdf Flyer], [https://gitlab.com/info5-lora-avalanche/documentation/-/blob/master/Presentation/Poster_project_Saint-Bernard.pdf Poster], [https://gitlab.com/info5-lora-avalanche/documentation/-/blob/master/Reports/Pitch.pdf Pitch], [https://gitlab.com/info5-lora-avalanche/documentation/-/blob/master/Presentation/Soutenance%20Finale.pdf Présentation], [https://gitlab.com/info5-lora-avalanche/documentation/-/blob/master/Presentation/D%C3%A9monstration.pdf Demo], [https://videos.univ-grenoble-alpes.fr/video/17215-soutenance-projet-saint-bernard/ Screencast]<br />
| [https://gitlab.com/info5-lora-avalanche Gitlab]<br />
| 15H00, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_9.pdf|Présentation]]<br />
| 14H00, [[Media:Presentation_Finale_INFO5_ProjetS10_groupe_9.pdf|Présentation]]<br />
|-<br />
!scope="row"| 10<br />
| [[GenderedNews|GenderedNews]]<br />
| HO Nhat Quang, MURPHY Mica, NGUENA Gloria, SAGET Antoine<br />
| PORTET François, BASTIN Gilles, RICHARD Ange<br />
| [[PROJET-INFO5 2021 GenderedNews | Fiche de suivi]]<br />
| [https://air.imag.fr/index.php/GenderedNews Documents], [[Media:GenderedNews_Flyer.pdf | Flyer]], [https://gricad-gitlab.univ-grenoble-alpes.fr/getalp/genderednews/-/wikis/Rapport Rapport final], [https://gricad-gitlab.univ-grenoble-alpes.fr/getalp/genderednews/-/wikis/home Rapport technique], [[Media:GenderedNews_Poster.pdf | Poster]], [[Media:GenderedNews_Pitch.pdf | Pitch]], [https://videos.univ-grenoble-alpes.fr/video/17224-soutenance-projet-genderednews/ Screencast],<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/getalp/genderednews Dépôt GitLab]<br />
| 15H15, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_10.pdf|Présentation]]<br />
| 13H30, [[Media:Presentation_Finale_INFO5_ProjetS10_groupe_10.pdf|Présentation]]<br />
|-<br />
!scope="row"| 11<br />
| [[Réseaux social d'organisation de sortie|Réseaux social d'organisation de sortie]]<br />
| EL JRAIDI Rim, VERNET Maxime, SAJIDE Idriss, MANISSADJIAN Gabriel<br />
| RICHARD Olivier<br />
| [[PROJET-INFO5 2021 Réseaux social d'organisation de sortie | Fiche de suivi]]<br />
| [https://air.imag.fr/index.php/R%C3%A9seaux_social_d%27organisation_de_sortie Documents], [[Media:flyer_Osons_sortie.pdf|Flyer]], [[Media:poster_Osons_sortie.pdf|Poster]], [[Media:Pitch_organisation_sorties.pdf|Pitch]], [https://drive.google.com/file/d/1QiPlMh5OtMUlQrQ2mqi3MF9xIy5Gpgpe/view?usp=sharing Screencast], [https://www.figma.com/file/lx1mwonG7jEUYKggjGQvIJ/Maquette?node-id=0%3A1 Maquette, [[Media:Osons_sortir_rapport.pdf|Rapport final]], [[Media:Osons_sortir_rapport_technique.pdf|Rapport technique]]]<br />
| [https://github.com/2020-2021-PROJET-INFO5-G11 Dépot Git (privé)]<br />
| 15H30, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_11.pdf|Présentation]]<br />
| 10H15, [[Media:Presentation_Finale_INFO5_ProjetS10_groupe_11.pdf|Présentation]]<br />
|-<br />
!scope="row"| 13<br />
| [[Artiphonie (saison 2)|Artiphonie (saison 2)]]<br />
| CROCIATI Morgan, RIVAL Gaëtan, RUZAFA Rémy, VELUT Claire <br />
| Bastien De Araujo, Guillaume Denis, Estelle Gillet-Perret et Olivier Richard<br />
| [[PROJET-INFO5 2021 Artiphonie (saison 2) | Fiche de suivi]]<br />
| [https://air.imag.fr/index.php/Artiphonie_(saison_2) Documents],[https://github.com/WriteInGesturesProject/docs/blob/master/2021/Rapport_Final.md Rapport Final], [https://github.com/WriteInGesturesProject/docs/blob/master/2021/Rapport_Technique.md Rapport Technique], [[Media:Artiphonie_presentation_final.pdf| Présentation Final]], [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_13.pdf|Présentation Mi-Projet]], [[Media:Flyer_-_Atrhiphonie.pdf|Flyer]], [[Media:Poster_Atrhiphonie.pdf|Poster]], [[Media:Pitch_Artiphonie.pdf|Pitch]], [https://drive.google.com/file/d/1B2W_On2FSED2HAKQ3kXJOOuL1RUmcJl7/view?usp=sharing Screencast]<br />
| [https://github.com/WriteInGesturesProject Dépôt Github]<br />
| 15H45, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_13.pdf|Présentation]]<br />
| 10H45, [[Media:Artiphonie_presentation_final.pdf| Présentation]]<br />
|-<br />
|scope="row"| 14<br />
| [[Covoiturage solidaire avec borne d'appel|Covoiturage solidaire avec borne d'appel]]<br />
| EL MUFTI Ali, NELSON William<br />
| Christine Verdier, Fabrice Forest (Didier Donsez pour le support technique borne d'appel).<br />
| [[PROJET-INFO5 2021 Covoiturage solidaire avec borne d'appel| Fiche de suivi]]<br />
| [https://air.imag.fr/index.php/Covoiturage_solidaire_avec_borne_d%27appel Documents], [[Media:flyermobipa.pdf|Flyer]], [[Media:mobipa.pdf|Poster]],[https://github.com/OliDesu/MoBiPa/blob/main/README.md Rapport Final], [[Media:Pitch_Groupe14.pdf|Pitch]], [https://drive.google.com/file/d/1UUIEeNCaXYSwRKKdeRJDeDXBIg0y2CYx/view?usp=sharing Screencast]<br />
| [https://github.com/OliDesu/MoBiPa Dépôt GitHub] <br />
| 16H00, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_14.pdf|Présentation]]<br />
| 15H15, [[Media:Presentation_Finale_INFO5_ProjetS10_groupe_14.pdf|Présentation]]<br />
|}<br />
<br />
====Projets non choisis====<br />
* [[LoRaWAN Roaming]] avec [[Chirpstack]] et [[TheThingStack]]: Didier Donsez, Bernard Tourancheau.<br />
* [[Contributions open-source au projet JHipster]] : Didier Donsez<br />
* [[Test d'infrastructures avec NixOS]] Olivier Richard et Quentin Guilloteau</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=File:WildCount.pdf&diff=51101File:WildCount.pdf2021-03-29T07:06:25Z<p>Alexis.Rollin: </p>
<hr />
<div></div>Alexis.Rollinhttps://air.imag.fr/index.php?title=Projets_2020-2021&diff=51074Projets 2020-20212021-03-19T06:45:48Z<p>Alexis.Rollin: /* Affectations S10 */</p>
<hr />
<div><<[[Projets 2019-2020]] | [[Projets]] | [[Projets 2021-2022]]>><br />
=INFO=<br />
==INFO3==<br />
<br />
==INFO4==<br />
===Projet Semestre S8===<br />
<br />
Enseignants responsables : Olivier Richard, Didier Donsez<br />
<br />
* Dates : Lundi après-midi, Mardi après-midi <br />
* Lancement: 18 Janvier 2021 après midi<br />
* Soutenance à mi-parcours: A définir<br />
* Soutenance: A définir<br />
<br />
* '''Evaluation à mi-parcours le lundi/mardi ???''': Format: 10min (5min de présentation 3 slides au plus, 5min de discussion). Cette évaluation sera prise en compte dans la note finale.<br />
<br />
'''Consignes générales:'''<br />
<br />
* '''Vous devez être pro-actifs !!!''': Si des points sont pas ou mals spécifiés, vous le faîtes et vous justifiez vos choix. Pour les problèmes techniques éventuels vous pouvez: creuser la question, contacter l'auteur du code si il y a lieu, écrire un rapport de bug ('''Attention:''' ca se prépare !), soumettre un patch/pull request, contacter l'enseignant ou la personne référente du projet.<br />
<br />
* '''Vous devez maintenir une fiche de suivi de projet''': elle doit être mise à jour chaque semaine, elle rassemble les élements essentiels du projet, elle indique les évolutions du projet et présente sa feuille de route. '''Note:''' le nom de la fiche doit être composé du nom du projet et suffixé par info4_2020_2021. '''Cette fiche compte pour la note finale'''<br />
<br />
* '''Votre code''' pour doit être hébergé sur le gitlab et à l'URL suivante https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21 , vous utiliserez votre compte UGA.<br />
<br />
* Chaque projet doit avoir '''aux moins 2 dépôts git''':<br />
** '''Un pour les documents''' demandés rapport, présentation de pré-soutenante, de soutenance, flyer. '''Il sera appelé documents.'''<br />
** Un ou plusieurs pour le code, les tests, les évaluations, les preuves de concept, la ou les documentations afférentes. <br />
<br />
* Les '''documents public doivent être rédigés en anglais (README, documentation, commentaires de code, nom de variables et de fonctions)'''. Le *rapport* sera aussi demandé en *anglais* (il fera la taille d'un rapport de TP). Les transparents des présentation peuvent être en anglais ou en francais, la soutenance sera taire en francais.<br />
<br />
* '''La note obtenue''' tiendra compte du '''nombre et de la qualité des commits''' observé dans '''vos dépots git et la branche master''' (or depot documents). La qualité comprend l'intitulé du commit et son contenu. Les notes pourront être différentiées dans un groupe, il n'est pas acceptable de pas avoir de commit dans le(s) dépôt(s) du projet (or dépôt documents).<br />
<br />
* Il est fortement conseillé de suivre un '''développement incrémental''' qui permette d'avoir à tout moment un démonstrateur à présenter, un projet peut être constituer d'une succession de '''démonstrateurs présentables séparément'''.<br />
<br />
* Vous devez faire aussi des '''schémas d'architectures générales et/ou spéficiques, des diagrammes de séquence''', et autre documents de spécification si nécessaire. Ces documents vous serviront de base de discussion/brainstorming interne ainsi que dans vos différents documents (rapport, présentations, documentation). Ces schémas sont avant tout conceptuels et techniques.<br />
<br />
===Propositions de projets S8===<br />
<br />
* 1. [[Contribution au projet STM32Python]], Didier DONSEZ.<br />
* 2. [[Portage du kit station LoRa LRWAN2 de ST sur RIOT OS]], Didier DONSEZ.<br />
* 3+4. [[Portage de la carte de prototypage IoT Nucleo-WL55JC sur RIOT OS]] + [[Portage de la carte de communication LoRa LLCC68MB2BAS sur RIOT OS]], Didier DONSEZ (1 seul groupe de 3 élèves pour les 2 cartes).<br />
* 5. [[Service Web d'équipements embarqués communicant sur bus CAN]] (2 groupes de 2 élèves), Didier DONSEZ.<br />
* 6. [[Application mobile d'enregistrements de noeuds IoT LoRaWAN dans plusieurs réseaux]], Didier DONSEZ.<br />
* 7. [[Evaluation du toolkit AI de STM32 pour l'analyse de l'environnement sonore]], Didier DONSEZ.<br />
* 8. [[Godot Game Engine et tables tactiles]] : démonstration d'un jeu en réseau sur les 3 tables tactiles : (gaming spirit) Olivier RICHARD.<br />
* 9. [[Serveur filière INFO]], Nicolas Palix<br />
* Agriculture connectée en partenariat avec les projets collectifs IESE/MAT<br />
** 10. [[ASAC/AP|Polytech]] : Nicolas Palix<br />
** 11. [[ASAC/SJC|St Cassien]] : Nicolas Palix<br />
* 12. [[ENT Polytech]] avec XMPP/Mumble/BBB/Mattermost/OpenBoard : Nicolas Palix<br />
* 13. [[Polytech Helper Service | Outils d'aide à la gestion de service]], (professionel) Olivier Richard<br />
* 14. [[Rust Engine | Executeur de tâche en Rust]], (exigeant techniquement) Olivier Richard<br />
* 15. [[Retrocompute simulateur | RetroComputing]]: (vintage style) Coupler le simulateur Digital avec un simulateur de processeur 8bits, Olivier Richard<br />
* 16. [[FPGA et Deep Learnning]] Olivier Richard<br />
* 17. [[OpenAPI OAR | OpenAPI pour la gestion de tâches de ressources OAR]], (professionel) Olivier Richard <br />
* 18. [[Monitoring de la plateforme CampusIoT]] : Didier Donsez<br />
<br />
==== Reporté INFO5 21-22 ==== <br />
* 1 heure 1 heure (échange de compétence), etudiant.e.s Emilie Tondeux + ?, tuteur ?<br />
==== Reporté ====<br />
[[Simulateur de réseaux simples avec un FPGA]], (typé recherche/prospectif)<br />
<br />
==== Affectation ====<br />
{|class="wikitable alternance"<br />
|+ Affectation des projets INFO4 20-21<br />
|-<br />
|<br />
!scope="col"| Sujet<br />
!scope="col"| Etudiants<br />
!scope="col"| Enseignant(s)<br />
!scope="col"| Fiche de suivi<br />
!scope="col"| Documents<br />
|-<br />
!scope="row"| 1<br />
| [[Contribution au projet STM32Python]]<br />
| BAUDEUR BERTRAND,LANQUETIN ALEXIS,TONDEUX EMILIE<br />
| Didier DONSEZ<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/01/docs/-/blob/master/Contribution%20au%20projet%20STM32Python%20info4_2020_2021.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/01/docs/-/blob/master/Pr%C3%A9sentation_mi-parcours.pdf Presentation de mi-parcours]<br />
|-<br />
!scope="row"| 2<br />
| [[Portage du kit station LoRa LRWAN2 de ST sur RIOT OS]]<br />
| HERQUE ERIC,MALLEN GUILLAUME,PORTIER BARNAB<br />
| Didier DONSEZ<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/02/docs/-/blob/master/Portage_du_kit_station_LoRa_LRWAN2_de_ST_sur_RIOT_OS_info4_2020_2021.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/02/docs/-/blob/master/Pr%C3%A9sentation%20de%20mi-parcours.pdf Presentation de mi-parcours]<br />
|-<br />
!scope="row"| 5<br />
| [[Service Web d'équipements embarqués communicant sur bus CAN]]<br />
| ANDRIEUX LIAM,DREZET LUCAS,REGOUIN ROMAN<br />
| Didier DONSEZ<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/05/docs/-/blob/master/EmbeddedEquipmentWebServiceCommunicatingOnCANBus_info4_2020_2021.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/05/docs/-/blob/master/Pre%20viva%20presentation.pdf Presentation de mi-parcours]<br />
|-<br />
!scope="row"| 6<br />
| [[Application mobile d'enregistrements de noeuds IoT LoRaWAN dans plusieurs réseaux]]<br />
| CAMBUS QUENTIN,EL YANDOUZI ELIAS,JULIENNE MALONE<br />
| Didier Donsez<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/06/docs/-/blob/master/README.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/06/docs/-/blob/master/Pr%C3%A9sentation_IoT.pdf Presentation de mi-parcours]<br />
|-<br />
!scope="row"| 7<br />
| [[ Evaluation du toolkit AI de STM32 pour reconnaissance sonore]]<br />
| COSOTTI KEVIN,GRANGER OSCAR,GUIGNARD JULIE<br />
| Didier Donsez<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/07/docs/README.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [[https://docs.google.com/presentation/d/15RCcuoAWGlpOLyM_SX3tXVhhXEHiTuNTXXxRCrJ4tiA/edit?usp=sharing |Presentation de mi-parcours]]<br />
|-<br />
!scope="row"| 8<br />
| [[Godot Game Engine et tables tactiles|Godot Engine]]<br />
| CIRSTEA PAUL,DE MULATIER JEAN-THEOPHANE,SOULARD ALEXANDR<br />
| Olivier Richard<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/08/docs/-/blob/master/Godot_Game_Engine_et_tables_tactiles_info4_2020_2021.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [[https://docs.google.com/presentation/d/1CUBp5Zz1uivkCb8latQ8tnfSy-bUTJs-7f3f7GcH4Zs/edit?usp=sharing |Presentation de mi-parcours]]<br />
|-<br />
!scope="row"| 9<br />
| [[Serveur_filière_INFO|Serveur INFO]]<br />
| GITTON ANTOINE,MERTENS GILLES,SUEUR CORENTIN<br />
| Nicolas Palix<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/09/docs/-/blob/master/Serveur_filiere_info4_2020_2021.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [[Media:Presentation_mi_parcours_groupe7.pdf|Presentation de mi-parcours]]<br />
|-<br />
!scope="row"| 10<br />
| [[ASAC/AP|Serre Polytech]]<br />
| AGUIAR MATHILDE,HAJJI OUMAIMA,SIDIBE ROKIATOU DITE ROSE<br />
| Nicolas Palix<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/10/docs/-/blob/master/README.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [[https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/10/docs/-/blob/master/Presentations/mid-project_slides.pdf | Presentation de mi-parcours]]<br />
|-<br />
!scope="row"| 11<br />
| [[ASAC/SJC/SJC-2020-INFO]]<br />
| BUISINE JULIEN,PRAT-CAPILLA HUGO,TEYSSIER THEO<br />
| Nicolas Palix<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/11/docs/-/blob/master/README.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/11/docs/-/blob/master/Team11-Presentation.pdf Presentation de mi-parcours]<br />
|-<br />
!scope="row"| 12<br />
| [[ENT Polytech]]<br />
| HERY JULES,SALMON AMAD,VACHERIAS GUILLAUME<br />
| Nicolas Palix<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/12/docs/-/blob/master/README.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [[https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/12/docs/-/blob/master/Presentation_mi_parcours.pdf | Presentation de mi-parcours]]<br />
|-<br />
!scope="row"| 13<br />
| [[Polytech_Helper_Service|Polytech Helper Service]]<br />
| ALIBERT ANGELO,NOERIE SOPHIE,SARRE MARGAUX<br />
| Olivier Richard<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/13/docs/ Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/13/docs/-/blob/master/Pr%C3%A9sentation_Mi-Parcours.pdf Presentation de mi-parcours]<br />
|-<br />
!scope="row"| 14<br />
| [[Rust Engine|Rust Engine]]<br />
| BARET DORIAN,CHALOYARD LUCAS,MALOD VICTOR,PARA YAEL<br />
| Olivier Richard<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/14/docs/-/blob/master/tracking-sheet.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/14/docs/-/blob/master/soutenance-mi_parcours.pdf Presentation de mi-parcours]<br />
|-<br />
!scope="row"| 15<br />
| [[Retrocompute_simulateur|Retrocomputing]]<br />
| ELHADJI TCHIAMBOU SAMI,HUMBERT CORENTIN,MUTEL MATHIS<br />
| Olivier Richard<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/15/docs/-/blob/master/README.md#follow-up Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/15/docs/-/blob/master/diapo_soutenance_mi_parcours.pdf Presentation de mi-parcours]<br />
|-<br />
!scope="row"| 16<br />
| [[FPGA et Deep Learning]]<br />
| GEITNER TEVA,GONZALEZ JULES,MALECOT ETHAN<br />
| Olivier Richard<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/16/docs/-/blob/master/FPGA_info4_2020_2021.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/16/docs/-/blob/master/Presentation_mi-projet.pdf Presentation de mi-parcours]<br />
|-<br />
!scope="row"| 17<br />
| [[OpenAPI OAR]]<br />
| LAMBERT DAPHNE,MINIER-MANCINI TITOUAN,TOUE TIOYE<br />
| Olivier Richard<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/17/docs/-/blob/master/TRACKING_SHEET.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]<br />
|-<br />
!scope="row"| 18<br />
| [[Monitoring de la plateforme CampusIoT]]<br />
| BLANQUET ANTOINE,LAMBERT PAUL,YUNG KEVIN<br />
| Didier Donsez<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/18/docs/-/blob/master/README.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/18/docs/-/blob/master/Reunion_de_mi_parcours.pdf Presentation de mi-parcours]<br />
|-<br />
|}<br />
<br />
==INFO5==<br />
===Projet IoT S9===<br />
Enseignants responsables : Bernard Tourancheau<br />
<br />
Calendrier: ??? Septembre à ??? Décembre 2020.<br />
<br />
<br />
===Projet Semestre S10===<br />
<br />
Enseignants responsables : [[user:Donsez|Didier Donsez]]<br />
<br />
Calendrier: 28/01 (13H30-17H30) au 19/03.<br />
<br />
Séances de Management de projets innovants: A voir dessus.<br />
<br />
Réunion de présentation et choix des sujets: 28/01 (13H30-17H30) en salle P257 (voir ADE)<br />
<br />
Démarrage : 29/01 (13H30-17H30)<br />
<br />
Soutenance à mi-parcours : 26/02/2021 13H30-17H30 en distantiel (15 minutes par équipe).<br />
<br />
Soutenance finale : 19/03/2021 (8H30-12H00 et 13H30-17H00). 30 minutes par équipe, questions/réponses et démonstration incluse. Prière de rapporter au fablab le matériel emprunté juste après votre soutenance. <br />
<br />
====Séances MPI====<br />
<br />
Les séances MPI seront en distanciel (mais ADE fait foi).<br />
<br />
<pre><br />
Séance Thématique Date Horaires Intervenante Salle<br />
1 Définir la problématique 03-févr. 14h-18h Stéphanie Diligent distanciel<br />
2 Gérer le projet en restant agile 10-févr. 8h30 - 12h30 Stéphanie Diligent distanciel<br />
3 Communiquer 24-févr. 8h30 - 12h30 Emmanuelle Tréhoust distanciel<br />
4 Evaluer et valoriser 03-mars 8h30 - 12h30 Emmanuelle Tréhoust distanciel<br />
5 Evaluation 10-mars 8h30 - 12h30 Stéphanie Diligent distanciel<br />
</pre><br />
<br />
==== Soutenance intermédiaire S10 ====<br />
Date: 26/02 Après midi. Distantiel (sur Zoom).<br />
<br />
L'objectif de la soutenance intermédiaire est de vérifier si l'équipe projet est en bon ordre de marche. La présence du porteur n'est pas obligatoire. Prévoyez du temps pour les questions-réponses (5 minutes max).<br />
<br />
L'équipe présentera en 5-6 transparents en 8 minutes.<br />
* les équipiers et leurs rôles<br />
* le contexte, le sujet et l'objectif du projet<br />
* l'architecture du systèmes à réaliser<br />
* les technologies utilisées<br />
* le plan de travail (backlog, planning, ce qui est fait, ce qu'il reste à faire ...)<br />
* les difficultés (s'il y a)<br />
<br />
Respectez bien les créneaux indiqués (par respect pour les autres équipes).<br />
<br />
==== Soutenance finale S10 ====<br />
Date: 19/03/2021 (8H30-12H00 et 13H30-17H00).<br />
<br />
'''La présence du(des) porteur(s) est obligatoire. Pensez à les prévenir bien à l'avance'''<br />
<br />
Durée: 30 minutes par équipe: présentation, questions/réponses et démonstration incluse.<br />
<br />
Les documents devront être en ligne sur le wiki (colonne Documents) la veille (ie avant le 18/03/2021 23:59:59 CET).<br />
<br />
'''Remarque: le poster et le flyer (recto-verso A4 en 3 plis : [http://air.imag.fr/mediawiki/images/9/9b/FlyerCervin.pdf exemple]) doivent être rédigés en anglais.'''<br />
<br />
La présentation est constituée des chapitres suivants:<br />
* Rappel du sujet/besoin et cahier des charges<br />
* Technologies employées<br />
* Architecture techniques<br />
* Réalisations techniques<br />
* Gestion de projet (méthode, planning prévisionnel et effectif, gestion des risques, rôles des membres ...)<br />
* Outils (collaboration, CD/CI ...)<br />
* Métriques logiciels : lignes de code, langages, performance, temps ingénieur (d'après vos journaux), la répartition des lignes de code et des commits en pourcentage entre les membres du projet ...)<br />
* Conclusion (Retour d'expérience)<br />
* Transparent expliquant la démonstration<br />
<br />
L'ensemble des documents doit être accessible depuis le tableau ci-dessus et dans chaque fiche de suivi.<br />
<br />
Le screencast (réalisé lors de la dernière répétition) sera rendu disponible via un partage caché (wetransfer, google drive …) dont le lien sera ajouté dans le devoir idoine sur Moodle et également envoyé par mail à votre tuteur.<br />
<br />
Le rapport final contient les mêmes chapitres que la présentation ainsi qu'un glossaire et une bibliographie. Le rapport ne doit pas dépasser 15 pages (schémas et figures compris). Vous pourrez référencer les autres documents que vous avez produits au cours du projet (spécifications détaillées, algorithmes, conception d'écrans ...).<br />
<br />
Le rapport final est au format Markdown et doit être placé dans un des dépôts Git de votre groupe/organisation.<br />
<br />
NB: le rapport technique listé dans la colonne Documents contient tout ce qui ne tient pas dans les 15 pages du rapport final : cahier des charges, diagrammes UML, enquêtes utilisateurs design UI, API, technologies employées (détail), plan de tests, term of services, conformance RPGD, audits/diagnostiques sécurité, MTBR, rapport de vulnérabilité, plan de charge, rapports de charge, manuel d'installation … : ça dépend un peu de la nature de votre projet.<br />
<br />
Conseil : 30 minutes c'est très court alors répétez la soutenance auparavant ! Prévoyez des transparents supplémentaires en annexe pour répondre aux questions.<br />
<br />
NB: Vous pouvez prévoir d’organiser une démonstration plus longue de votre projet auprès de vos porteurs et vos tuteurs avant ou après la soutenance. <br />
<br />
<br />
'''Prière de rapporter au fablab le matériel emprunté juste après votre soutenance'''.<br />
<br />
==== Affectations S10====<br />
{|class="wikitable alternance"<br />
|+ Affectation des projets INFO5 2020-2021<br />
|-<br />
|<br />
!scope="col"| Sujet<br />
!scope="col"| Etudiants<br />
!scope="col"| Enseignant(s)<br />
!scope="col"| Fiche de suivi<br />
!scope="col"| Documents<br />
!scope="col"| Dépôt Git<br />
!scope="col"| Soutenance intermédiaire<br />
!scope="col"| Soutenance finale<br />
|-<br />
!scope="row"| 1<br />
| [[Infrastructure de communication interne au cubesat ATISE du CSUG | ATISE]]<br />
| Alexandre SALMON, Myriam LOMBARD, Killian PAREILLEUX, Adrien ARTAUD<br />
| Imane El-Khantouti (CSUG, UGA), Frédéric Martin (CSUG, UGA)<br />
| [[PROJET-INFO5 2021 ATISE| Fiche de suivi]]<br />
| [https://air.imag.fr/index.php/Infrastructure_de_communication_interne_au_cubesat_ATISE_du_CSUG Documents], [[Media:ATISE_rapport.pdf|Rapport]], [[Media:ATISE_Flyer.pdf|Flyer]], [[Media:ATISE_Poster.pdf|Poster]], [[Pitch ATISE | Pitch]], [https://github.com/ATISE-2020-2021-Polytech-Grenoble/Docs/blob/master/ScreenCastATISE.ogv Screencast]<br />
| [https://github.com/ATISE-2020-2021-Polytech-Grenoble Dépôt Github]<br />
| 13H30, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_1.pdf|Présentation intermédiaire]]<br />
| 9H00, [[Media:Presentation_Finale_INFO5_ProjetS10_groupe_1.pdf|Présentation finale]]<br />
|-<br />
!scope="row"| 2<br />
| [[Wildcount:_Inexpensive_Edge_sensor_for_recognizing_and_counting_the_presence_of_humans_(anonymous)_and_animals_into_wild_and_protected_areas.|Wildcount]]<br />
| BEAUGRAND Elisa, DE GAUDENZI Louis, GRAUGNARD Tom, ROLLIN Alexis<br />
| DONSEZ Didier, QUENOT Georges<br />
| [[PROJET-INFO5_2021_Wildcount|Fiche de suivi]]<br />
| [[Wildcount:_Inexpensive_Edge_sensor_for_recognizing_and_counting_the_presence_of_humans_(anonymous)_and_animals_into_wild_and_protected_areas.|Documents]], [https://gitlab.com/wildcount/doc/-/blob/master/RAPPORT_FINAL.md Rapport], [[Media:Wildcount_Flyer.pdf|Flyer]], [[Media:WildCount_Poster_Preversion_A0_printed.pdf|Poster]], [[Media:pitch_WildCount.pdf |Pitch]], [https://drive.google.com/file/d/17kRStVzWLACtxEpDSXeEqgNv4S4WqaKl/view?usp=sharing Screencast]<br />
| [https://gitlab.com/wildcount Dépôt Gitlab]<br />
| 13H45, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_2.pdf|Présentation]]<br />
| 14H30, [[Media:Presentation_Finale_INFO5_ProjetS10_groupe_2.pdf|Présentation]]<br />
|-<br />
!scope="row"| 5<br />
| [[Signature électronique eIDAS|eIDAS]]<br />
| ASSI Dima, BILOUNGA Aleck, EL AJI Houda, ZERAMDINI Otba<br />
| Nicolas PALIX<br />
| [[PROJET-INFO5 2021 Signature électronique eIDAS| Fiche de suivi]]<br />
| [https://air.imag.fr/index.php/Signature_%C3%A9lectronique_eIDAS Documents], [https://github.com/2020-2021-EIDAS-INFO5/Docs/blob/master/Technical_document.md Rapport technique], [[Media:Flyer_EIDAS.pdf|Flyer]], [[Media: Poster eIDAS.pdf| Poster]], [[Media:Rapport final.pdf|Rapport final]], [[Media:Pitch_eIDAS.pdf|Pitch]], Screencast<br />
| [https://github.com/2020-2021-EIDAS-INFO5 Dépôt Github]<br />
| 14H00, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_5.pdf|Présentation]]<br />
| 15H45, [[Media:Presentation_eIDAS.pdf|Présentation]]<br />
|-<br />
<br />
!scope="row"| 6<br />
| [[Contributions open source au projet EdCampus|EdCampus]]<br />
| COURTHIAL Samuel, FOUGERE Sebastien, DELBOS Robin<br />
| POLLIER Gérard, GEOURJON Anthony, DONSEZ Didier<br />
| [[PROJET-INFO5 2021 Contributions open source au projet EdCampus| Fiche de suivi]]<br />
| [https://air.imag.fr/index.php/Contributions_open_source_au_projet_EdCampus Documents], [https://air.imag.fr/index.php/Rapport_Final_EDCampus Rapport],[[Media:flyer_EDCampus.pdf|Flyer]], [[Media:poster_EDCampus.pdf|Poster]], [[Media:pitch_EDCampus.pdf|Pitch]], Screencast<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/edcampus Dépôt GitLab]<br />
| 14H15, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_6.pdf|Présentation]]<br />
| 09H30, [[Media:Presentation_Finale_INFO5_ProjetS10_groupe_6.pdf|Présentation]]<br />
|-<br />
<br />
!scope="row"| 8<br />
| [[Prototypage d'application mobile pour la vente en direct de produits producteur locaux]]<br />
| BOLEAT Baptiste, CHAIX Manon, MICHELARD Leila, PALOMO Rémy<br />
| DELANGUE Sylvain, Gérard POLLIER (Disrupt Campus)<br />
| [[PROJET-INFO5 2021 Go Farmer | Fiche de suivi]]<br />
| [[Rapport final Go Farmer | Rapport Final]], [https://air.imag.fr/index.php/Prototypage_d%27application_mobile_pour_la_vente_en_direct_de_produits_producteur_locaux Documents], [[Media:Flyer Producteurs Locaux.pdf | Flyer]], [[Media:Poster_Producteurs_Locaux.pdf | Poster]], [[Media: Pitch_Producteurs_Locaux.pdf | Pitch]], [https://drive.google.com/file/d/1gNGQYwygxEDpGpxbIMYtM05xAAotVdgJ/view?usp=sharing Screencast]<br />
| [https://bitbucket.org/gofarmer/ Dépôt Bitbucket (privé)]<br />
| 14H30, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_8.pdf|Présentation]]<br />
| 08H30, [[Media:Diapo_Producteurs_Locaux.pdf|Présentation]]<br />
|-<br />
!scope="row"| 9<br />
| [[Secours Montagne avec LoRa|Saint-Bernard]]<br />
| CHATON Alexandra, FRION Thomas, PASDELOUP Romain<br />
| TOURANCHEAU Bernard<br />
| [[PROJET-INFO5 2021 Secours Montagne avec LoRa | Fiche de suivi]]<br />
| [https://gitlab.com/info5-lora-avalanche/documentation/-/blob/master/Reports/Rapport%20Final.pdf Rapport final], [https://gitlab.com/info5-lora-avalanche/documentation/-/blob/master/Reports/Final%20Report.md Rapport final (MD)] [https://gitlab.com/info5-lora-avalanche/documentation/-/blob/master/Presentation/Flyer_projet_Saint-Bernard.pdf Flyer], [https://gitlab.com/info5-lora-avalanche/documentation/-/blob/master/Presentation/Poster_project_Saint-Bernard.pdf Poster], [https://gitlab.com/info5-lora-avalanche/documentation/-/blob/master/Reports/Pitch.pdf Pitch], [https://gitlab.com/info5-lora-avalanche/documentation/-/blob/master/Presentation/Soutenance%20Finale.pdf Présentation], [https://gitlab.com/info5-lora-avalanche/documentation/-/blob/master/Presentation/D%C3%A9monstration.pdf Demo], [https://videos.univ-grenoble-alpes.fr/video/17215-soutenance-projet-saint-bernard/ Screencast]<br />
| [https://gitlab.com/info5-lora-avalanche Gitlab]<br />
| 15H00, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_9.pdf|Présentation]]<br />
| 14H00, [[Media:Presentation_Finale_INFO5_ProjetS10_groupe_9.pdf|Présentation]]<br />
|-<br />
!scope="row"| 10<br />
| [[GenderedNews|GenderedNews]]<br />
| HO Nhat Quang, MURPHY Mica, NGUENA Gloria, SAGET Antoine<br />
| PORTET François, BASTIN Gilles, RICHARD Ange<br />
| [[PROJET-INFO5 2021 GenderedNews | Fiche de suivi]]<br />
| [https://air.imag.fr/index.php/GenderedNews Documents], [[Media:GenderedNews_Flyer.pdf | Flyer]], [https://gricad-gitlab.univ-grenoble-alpes.fr/getalp/genderednews/-/wikis/Rapport Rapport final], Poster, Pitch, Screencast<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/getalp/genderednews Dépôt GitLab]<br />
| 15H15, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_10.pdf|Présentation]]<br />
| 13H30, [[Media:Presentation_Finale_INFO5_ProjetS10_groupe_10.pdf|Présentation]]<br />
|-<br />
!scope="row"| 11<br />
| [[Réseaux social d'organisation de sortie|Réseaux social d'organisation de sortie]]<br />
| EL JRAIDI Rim, VERNET Maxime, SAJIDE Idriss, MANISSADJIAN Gabriel<br />
| RICHARD Olivier<br />
| [[PROJET-INFO5 2021 Réseaux social d'organisation de sortie | Fiche de suivi]]<br />
| [https://air.imag.fr/index.php/R%C3%A9seaux_social_d%27organisation_de_sortie Documents], [[Media:flyer_Osons_sortie.pdf|Flyer]], [[Media:poster_Osons_sortie.pdf|Poster]], [[Media:Pitch_organisation_sorties.pdf|Pitch]], [https://drive.google.com/file/d/1QiPlMh5OtMUlQrQ2mqi3MF9xIy5Gpgpe/view?usp=sharing Screencast], [https://www.figma.com/file/lx1mwonG7jEUYKggjGQvIJ/Maquette?node-id=0%3A1 Maquette, [[Media:Osons_sortir_rapport.pdf|Rapport final]], [[Media:Osons_sortir_rapport_technique.pdf|Rapport technique]]]<br />
| [https://github.com/2020-2021-PROJET-INFO5-G11 Dépot Git (privé)]<br />
| 15H30, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_11.pdf|Présentation]]<br />
| 10H15, [[Media:Presentation_Finale_INFO5_ProjetS10_groupe_11.pdf|Présentation]]<br />
|-<br />
!scope="row"| 13<br />
| [[Artiphonie (saison 2)|Artiphonie (saison 2)]]<br />
| CROCIATI Morgan, RIVAL Gaëtan, RUZAFA Rémy, VELUT Claire <br />
| Bastien De Araujo, Guillaume Denis, Estelle Gillet-Perret et Olivier Richard<br />
| [[PROJET-INFO5 2021 Artiphonie (saison 2) | Fiche de suivi]]<br />
| [https://air.imag.fr/index.php/Artiphonie_(saison_2) Documents],[https://github.com/WriteInGesturesProject/docs/blob/master/2021/Rapport_Final.md Rapport Final], [https://github.com/WriteInGesturesProject/docs/blob/master/2021/Rapport_Technique.md Rapport Technique], [[Media:Artiphonie_presentation_final.pdf| Présentation Final]], [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_13.pdf|Présentation Mi-Projet]], [[Media:Flyer_-_Atrhiphonie.pdf|Flyer]], [[Media:Poster_Atrhiphonie.pdf|Poster]], [[Media:Pitch_Artiphonie.pdf|Pitch]], [https://drive.google.com/file/d/1B2W_On2FSED2HAKQ3kXJOOuL1RUmcJl7/view?usp=sharing Screencast]<br />
| [https://github.com/WriteInGesturesProject Dépôt Github]<br />
| 15H45, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_13.pdf|Présentation]]<br />
| 10H45, [[Media:Artiphonie_presentation_final.pdf| Présentation]]<br />
|-<br />
|scope="row"| 14<br />
| [[Covoiturage solidaire avec borne d'appel|Covoiturage solidaire avec borne d'appel]]<br />
| EL MUFTI Ali, NELSON William<br />
| Christine Verdier, Fabrice Forest (Didier Donsez pour le support technique borne d'appel).<br />
| [[PROJET-INFO5 2021 Covoiturage solidaire avec borne d'appel| Fiche de suivi]]<br />
| [https://air.imag.fr/index.php/Covoiturage_solidaire_avec_borne_d%27appel Documents], [[Media:flyermobipa.pdf|Flyer]], [[Media:mobipa.pdf|Poster]],[https://github.com/OliDesu/MoBiPa/blob/main/README.md Rapport Final], [[Media:Pitch_Groupe14.pdf|Pitch]], Screencast<br />
| [https://github.com/OliDesu/MoBiPa Dépôt GitHub] <br />
| 16H00, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_14.pdf|Présentation]]<br />
| 15H15, [[Media:Presentation_Finale_INFO5_ProjetS10_groupe_14.pdf|Présentation]]<br />
|}<br />
<br />
====Projets non choisis====<br />
* [[LoRaWAN Roaming]] avec [[Chirpstack]] et [[TheThingStack]]: Didier Donsez, Bernard Tourancheau.<br />
* [[Contributions open-source au projet JHipster]] : Didier Donsez<br />
* [[Test d'infrastructures avec NixOS]] Olivier Richard et Quentin Guilloteau</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=PROJET-INFO5_2021_Wildcount&diff=50940PROJET-INFO5 2021 Wildcount2021-03-18T13:40:00Z<p>Alexis.Rollin: /* Mardi 23/02 */</p>
<hr />
<div>=Le projet= <br />
=L'équipe=<br />
* Elisa Beaugrand<br />
* Louis De Gaudenzi<br />
* Tom Graugnard<br />
* Alexis Rollin<br />
<br />
Supervisé par : Didier Donsez, Georges Quénot<br />
<br />
=Journal=<br />
<br />
==Semaine du 25/01==<br />
===Jeudi 28/01===<br />
* Choix des projets<br />
* Constitution des groupes<br />
<br />
===Vendredi 29/01===<br />
* Réunion avec les porteurs, M. Donsez et M. Quénot<br />
** Mise au point des résultats des projets<br />
** Établissement du cahier des charges<br />
* Création du serveur Discord et conversation Messenger<br />
<br />
==Sprint 1==<br />
===Semaine du 08/02===<br />
====Mercredi 10/02====<br />
<br />
* Prise en main des outils de collaboration<br />
* Répartition du travail<br />
* Réunion avec les IESE, apprentissage de Git<br />
<br />
====Jeudi 11/02====<br />
<br />
* Prise en main des technologies<br />
* Première version d'un réseau de neurone basique avec Pytorch<br />
* Début du Scrapping sur Google<br />
<br />
====Vendredi 12/02====<br />
<br />
* Abandon du Scrapping sur Google pour se concentrer sur Bing<br />
* Tri des images<br />
* Récupération des images du Valbonnais<br />
<br />
===Interruption pédagogique du 15/02===<br />
<br />
* Scrapping d'images Zooniverse<br />
* Écriture d'un script de labellisation d'images scrappées<br />
* Premiers jets d'entrainement de réseau de neurones<br />
* Demande des accès Grid5000 car nos ordinateurs ne sont pas assez puissants<br />
<br />
===Semaine du 22/02===<br />
====Lundi 22/02====<br />
<br />
* Réception des identifiants Grid5000<br />
* Configuration et connexion aux serveurs Grid5000<br />
<br />
====Mardi 23/02====<br />
<br />
* Réunion avec les porteurs du projet :<br />
<br />
<i><br />
Présent : All<br />
<br />
Ordre du jour :<br />
Ce qui a été réalisé (étudié)<br />
* MAJ du git<br />
* GC: creation des comptes Grid5000<br />
* DD: achat caméra -->dépot caméra au fablab<br />
* All IESE ? :Implémentation d’un mobil net sur la carte<br />
* GC :Capture d’image<br />
* AR :Envoie de la valeur en UART (Rx/Tx) après avoir fait une capture d’image.<br />
* EB :Algorithme de scrapping<br />
** Bing<br />
* ARo, TG :Premier jet d’IA avec dataset custom<br />
* EB : Base d’images sur le drive<br />
* LDG : tableau de bord Grafana<br />
<br />
<br />
Ce que vous allez réaliser (étudié) jusqu’à Mardi prochain<br />
* GC :Ajout des différents capteurs<br />
** Température humidité, GPS, RTC, carte SD, PIR<br />
*** PIR et RTC en priorité, ensuite la carte SD Carte.<br />
* AR :Mise en forme des trames pour le module LoRa envoyé via UART.<br />
* ARo, TG :Entrainement d’IA et recherche du meilleur modèle sur Grid5000<br />
* Scrapping Zooniverse<br />
** Aspirateur site Zooniverse<br />
*** https://www.zooniverse.org/projects/crea-mont-blanc/wild-mont-blanc/collections <br />
* Ajouter des humains (usagers des parcs naturels, personnes à secourir) à la base d'entrainement<br />
* Ajouter des images de controle (ie sans rien --> paysage …)<br />
* Organiser les bases d’images<br />
<br />
<br />
* Format des messages Wildcount (montant et descendant) → à discuter entre IESE5 et INFO5<br />
** Message de diagnostic à ajouter<br />
*** 1 bit par device, raison. (Fat non formaté)<br />
* Codec Wildcount (C et Javascript)→ à discuter entre IESE5 et INFO5<br />
* Test/réglage des objectifs avec une mire (sur differentes distances)<br />
** prévoir dans le code un mode “réglage de objectif” ?<br />
<br />
Difficulté(s)<br />
* EB: :Carte GapPocA INFO5 en défaut→ écrire à Yao + Xavier<br />
* App Android de diag ?<br />
<br />
Questions divers<br />
* Soutenance finale en commun<br />
** https://air.imag.fr/index.php/Projets_2020-2021#Soutenance_finale_S10<br />
** DD: questionner David Eon (resp projet S10 IESE5)<br />
* Fablab<br />
** boitier transparent <br />
** DD: boitier electrique (ajouter une “vitre”) + bombe peinture cam (castorama)<br />
* DD: Commande Farnell → Muriel<br />
</i><br />
<br />
====Mercredi 24/02====<br />
<br />
* Réunion avec M. Quénot pour la prise en main de Grid5000 et des outils de travail pour les réseaux de neurones<br />
<br />
====Vendredi 26/02====<br />
<br />
* Soutenance de mi-parcours<br />
<br />
==Sprint 2==<br />
<br />
===Semaine du 01/03===<br />
<br />
====Lundi 01/03====<br />
<br />
* Réunion en présentiel avec les IESE pour essayer de faire marcher notre carte GreenWave<br />
<br />
====Mardi 02/03====<br />
<br />
* Réalisation du poster en anglais en collaboration avec les IESE<br />
<br />
====Mercredi 03/03====<br />
<br />
* Réunion avec les porteurs du projet : <br />
""<br />
Ordre du jour<br />
<br />
Ce qui a été réalisé (étudié)<br />
<br />
* MAJ du git<br />
* All : Mise en place des daily meetings<br />
* AR, TG : MobileNet : Exemple fonctionne grâce à un environnement tensorflow1, le dataloading en cours d’implémentation (problème tensorflow encore une fois)<br />
* IESE -> récupération matériel ok<br />
* EB : outils scraping d’images ok (Bing et Zooniverse)<br />
* EB: Organisation base image ok<br />
* EB : Labellisation des images -> Ok pour Bing et les images du drive<br />
* EB : Ajout d’images de cyclistes, promeneurs (via scraping Bing)<br />
* AR, TG, EB, LDG : Payload<br />
* All : Test de la GapPocA des INFO -> matériel ok, pb logiciel<br />
* Aurélien R : communication UART (RN2483 ←> pc)<br />
* GC : lecture RTC avec GapPoc<br />
<br />
Ce que vous allez réaliser (étudié) jusqu’à Mardi prochain -> Gitlab: kanban lien<br />
* EB: trier les images scrapées de Zooniverse puis les labelliser grâce au script<br />
* EB: transférer les images scrapées sur irim <br />
* GC : Ecriture sur RTC<br />
* GC : Implémentation carte SD<br />
* Format des messages Wildcount (montant et descendant) → à discuter entre IESE5 et INFO5 (lien) <br />
** Message de diagnostic à ajouter<br />
*** 1 bit par device, raison. (Fat non formaté)<br />
* Codec Wildcount (C et Javascript)→ à discuter entre IESE5 et INFO5<br />
* Test/réglage des objectifs avec une mire (sur différentes distances)<br />
** prévoir dans le code un mode “réglage de objectif” ?<br />
<br />
Difficulté(s)<br />
* Environnement Tensorflow Jupyter (a priori réglé)<br />
* Spéc de la payload floues<br />
* Problème logiciel de la carte (toujours pas résolu à ce jour, mais on est sûr que ça ne vient pas de la carte maintenant<br />
* Aurélien R : Problème de communication UART entre le module LoRa RN2483 et un terminal série (gestion du <CR+LF>) ---> Normalement résolu en langage C par l’ajout d’un “\n” en fin de fonction printf ou sprint.<br />
* GC : Problème de doc i2c<br />
* GC : Problème de doc composant aliexpress<br />
* Boite surement trop petite<br />
<br />
<br />
Questions divers<br />
* Conserve GapPocB (IR) ? Non mais préparer firmware pour.<br />
* Payload<br />
** Où les fonctions sont-elles utilisées ? Ajout de nœuds dans NodeRed ?<br />
** L’encodeur et le décodeur communiquent-ils entre eux ? Si oui pq le décodeur décode plus de choses que ce qui est encodé ?<br />
""<br />
====Jeudi 04/03====<br />
<br />
* Début modification script réseau de neurones<br />
* Décodage et encodage de la payload avancés du coté serveur<br />
<br />
====Vendredi 05/03====<br />
<br />
* Discussion avec les IESE à propos des payloads<br />
* Tri et transfert des images<br />
<br />
===Semaine du 08/03===<br />
====Lundi 08/03====<br />
<br />
* Programmation de la payload côté carte<br />
<br />
====Mardi 09/03====<br />
<br />
* Tentative d'exportation du réseau de neurone en TFlite<br />
<br />
====Mercredi 10/03====<br />
<br />
* Réunion avec les porteurs du projet<br />
""<br />
Ordre du jour<br />
<br />
Ce qui a été réalisé (étudié)<br />
<br />
* Aurélien : Résolution du problème dans la communication UART entre le GAP8 et le module RN2483. <br />
* Tom, Louis: Payload JS ok, payload en C commencé (attention mappage little/big endian)<br />
* Elisa: Scrapping ok, Transfert des images sur irim ok<br />
* AR : notebook avec Mobilenetv2 que l’on peut train, retrain, qui sauvegarde des graphes et checkpoints régulièrement, et qui peut être exporter en tflite.<br />
<br />
Ce que vous allez réaliser (étudié) jusqu’à Mardi prochain -><br />
* Aurélien : Communication complète Rx/Tx avec le RN2483 et réalisation d’une fonction qui code le payload.<br />
* Finir payload C avec aide des IESE<br />
* Tester tflite sur la carte -> demander à Benoit quel commit il avait pris pour résoudre problème de carte <br />
* Lancer gros entraînement<br />
<br />
Difficulté(s)<br />
* Aurélien : Le GAP8 envoie une commande <break> (= 0x00) à l’init de l’UART.<br />
Or le 0x00 correspond à une commande pour le module LoRa RN2483 (commande “changer le baudrate”) et attend donc une réponse spécifique 0x55 (ignore toute les autres commandes).<br />
* La solution: envoyer le caractère “U” à l’init car il s’agit en ASCII de 0x55.<br />
* Grégoire : Problème avec la carte SD : incompréhension des bibliothèques de greenwaves <br />
* Bénoît: Que faites-vous ?<br />
<br />
Questions divers<br />
* Repartir du checkpoint de base MobileNet ? (vrai avantage en terme de reco ? Modèle MobileNet avec trop grand nombre de labels -> compatibilité ?)<br />
<br />
Remarque:<br />
* le payload est encodé en Big Endian<br />
* Où sont les tests unitaires ?<br />
""<br />
<br />
====Jeudi 11/03====<br />
<br />
* Tests payload UP<br />
* Tentative d'exportation en TFlite et dernières modifications<br />
<br />
====Vendredi 12/03====<br />
<br />
* Tests payload DOWN<br />
* Tentative d'exportation en TFlite et dernières modifications<br />
<br />
===Semaine du 15/03===<br />
====Lundi 15/03====<br />
<br />
Réunion avec les porteurs du projet<br />
""<br />
Ordre du jour<br />
<br />
Ce qui a été réalisé (étudié)<br />
* Alexis, Elisa, Aurélien -> exportation en tflite testée et a dû être revue : problème de quantification, problème d’opérations non autorisées (AddV2), actuellement problème de Parallel Feature, en attente d’une réponse de GreenWaves<br />
* Tom: tests payload<br />
* Aurélien : Lien entre payload et envoie via UART.<br />
<br />
Ce que vous allez réaliser (étudié) jusqu’à Vendredi prochain -><br />
* Docs : Mettre à jour air imag, rapport, soutenance finale<br />
* En fonction de la réponse de Greenwaves charger sur la GAP8 le TFLite<br />
* Connecter les payloads<br />
<br />
LNS<br />
* Application Wildcount (pour RN2483)<br />
** Donnez a DD tous les DevEUI, AppKey<br />
<br />
Difficulté(s)<br />
* TFLite : installation d’un simulateur mais trop flexible et accepte tous nos modèles donc tests avec Aurélien, problème quantification, opérations non autorisées (Addv2) -> downgrade à mobilenet v1 et passage en uint8<br />
* Tests payload non automatisés car problème sécurité sur navigateur<br />
<br />
Questions divers<br />
* Montrer modèle à Georges pour voir s’il trouve une anomalie<br />
* Invités démo: GW, PNE, PGHM, PIA (ONF)<br />
* présentiel @ Polytech, hybride<br />
* DD apporte un camera<br />
* DD reserve une grande salle aupres<br />
* Réserver salle à Polytech (DD)<br />
""<br />
===Mardi 16/03===<br />
<br />
* Écriture du compte-rendu<br />
* Tentative d'exportation en TFlite et dernières modifications<br />
<br />
===Mercredi 17/03===<br />
<br />
* Écriture du compte-rendu<br />
* Tentative d'exportation en TFlite et dernières modifications<br />
* Réunion en présentiel avec les IESE pour préparer la présentation et la démonstration<br />
<br />
===Jeudi 18/03===<br />
<br />
* Écriture du compte-rendu<br />
* Réalisation du diaporama<br />
* Réalisation du flyer<br />
<br />
===Vendredi 19/03===<br />
<br />
* Soutenance finale<br />
<br />
=Liens=<br />
* [https://gitlab.com/wildcount Gitlab]</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=Projets_2020-2021&diff=50698Projets 2020-20212021-03-15T09:55:35Z<p>Alexis.Rollin: /* Affectations S10 */</p>
<hr />
<div><<[[Projets 2019-2020]] | [[Projets]] | [[Projets 2021-2022]]>><br />
=INFO=<br />
==INFO3==<br />
<br />
==INFO4==<br />
===Projet Semestre S8===<br />
<br />
Enseignants responsables : Olivier Richard, Didier Donsez<br />
<br />
* Dates : Lundi après-midi, Mardi après-midi <br />
* Lancement: 18 Janvier 2021 après midi<br />
* Soutenance à mi-parcours: A définir<br />
* Soutenance: A définir<br />
<br />
* '''Evaluation à mi-parcours le lundi/mardi ???''': Format: 10min (5min de présentation 3 slides au plus, 5min de discussion). Cette évaluation sera prise en compte dans la note finale.<br />
<br />
'''Consignes générales:'''<br />
<br />
* '''Vous devez être pro-actifs !!!''': Si des points sont pas ou mals spécifiés, vous le faîtes et vous justifiez vos choix. Pour les problèmes techniques éventuels vous pouvez: creuser la question, contacter l'auteur du code si il y a lieu, écrire un rapport de bug ('''Attention:''' ca se prépare !), soumettre un patch/pull request, contacter l'enseignant ou la personne référente du projet.<br />
<br />
* '''Vous devez maintenir une fiche de suivi de projet''': elle doit être mise à jour chaque semaine, elle rassemble les élements essentiels du projet, elle indique les évolutions du projet et présente sa feuille de route. '''Note:''' le nom de la fiche doit être composé du nom du projet et suffixé par info4_2020_2021. '''Cette fiche compte pour la note finale'''<br />
<br />
* '''Votre code''' pour doit être hébergé sur le gitlab et à l'URL suivante https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21 , vous utiliserez votre compte UGA.<br />
<br />
* Chaque projet doit avoir '''aux moins 2 dépôts git''':<br />
** '''Un pour les documents''' demandés rapport, présentation de pré-soutenante, de soutenance, flyer. '''Il sera appelé documents.'''<br />
** Un ou plusieurs pour le code, les tests, les évaluations, les preuves de concept, la ou les documentations afférentes. <br />
<br />
* Les '''documents public doivent être rédigés en anglais (README, documentation, commentaires de code, nom de variables et de fonctions)'''. Le *rapport* sera aussi demandé en *anglais* (il fera la taille d'un rapport de TP). Les transparents des présentation peuvent être en anglais ou en francais, la soutenance sera taire en francais.<br />
<br />
* '''La note obtenue''' tiendra compte du '''nombre et de la qualité des commits''' observé dans '''vos dépots git et la branche master''' (or depot documents). La qualité comprend l'intitulé du commit et son contenu. Les notes pourront être différentiées dans un groupe, il n'est pas acceptable de pas avoir de commit dans le(s) dépôt(s) du projet (or dépôt documents).<br />
<br />
* Il est fortement conseillé de suivre un '''développement incrémental''' qui permette d'avoir à tout moment un démonstrateur à présenter, un projet peut être constituer d'une succession de '''démonstrateurs présentables séparément'''.<br />
<br />
* Vous devez faire aussi des '''schémas d'architectures générales et/ou spéficiques, des diagrammes de séquence''', et autre documents de spécification si nécessaire. Ces documents vous serviront de base de discussion/brainstorming interne ainsi que dans vos différents documents (rapport, présentations, documentation). Ces schémas sont avant tout conceptuels et techniques.<br />
<br />
===Propositions de projets S8===<br />
<br />
* 1. [[Contribution au projet STM32Python]], Didier DONSEZ.<br />
* 2. [[Portage du kit station LoRa LRWAN2 de ST sur RIOT OS]], Didier DONSEZ.<br />
* 3+4. [[Portage de la carte de prototypage IoT Nucleo-WL55JC sur RIOT OS]] + [[Portage de la carte de communication LoRa LLCC68MB2BAS sur RIOT OS]], Didier DONSEZ (1 seul groupe de 3 élèves pour les 2 cartes).<br />
* 5. [[Service Web d'équipements embarqués communicant sur bus CAN]] (2 groupes de 2 élèves), Didier DONSEZ.<br />
* 6. [[Application mobile d'enregistrements de noeuds IoT LoRaWAN dans plusieurs réseaux]], Didier DONSEZ.<br />
* 7. [[Evaluation du toolkit AI de STM32 pour l'analyse de l'environnement sonore]], Didier DONSEZ.<br />
* 8. [[Godot Game Engine et tables tactiles]] : démonstration d'un jeu en réseau sur les 3 tables tactiles : (gaming spirit) Olivier RICHARD.<br />
* 9. [[Serveur filière INFO]], Nicolas Palix<br />
* Agriculture connectée en partenariat avec les projets collectifs IESE/MAT<br />
** 10. [[ASAC/AP|Polytech]] : Nicolas Palix<br />
** 11. [[ASAC/SJC|St Cassien]] : Nicolas Palix<br />
* 12. [[ENT Polytech]] avec XMPP/Mumble/BBB/Mattermost/OpenBoard : Nicolas Palix<br />
* 13. [[Polytech Helper Service | Outils d'aide à la gestion de service]], (professionel) Olivier Richard<br />
* 14. [[Rust Engine | Executeur de tâche en Rust]], (exigeant techniquement) Olivier Richard<br />
* 15. [[Retrocompute simulateur | RetroComputing]]: (vintage style) Coupler le simulateur Digital avec un simulateur de processeur 8bits, Olivier Richard<br />
* 16. [[FPGA et Deep Learnning]] Olivier Richard<br />
* 17. [[OpenAPI OAR | OpenAPI pour la gestion de tâches de ressources OAR]], (professionel) Olivier Richard <br />
* 18. [[Monitoring de la plateforme CampusIoT]] : Didier Donsez<br />
<br />
==== Reporté INFO5 21-22 ==== <br />
* 1 heure 1 heure (échange de compétence), etudiant.e.s Emilie Tondeux + ?, tuteur ?<br />
==== Reporté ====<br />
[[Simulateur de réseaux simples avec un FPGA]], (typé recherche/prospectif)<br />
<br />
==== Affectation ====<br />
{|class="wikitable alternance"<br />
|+ Affectation des projets INFO4 20-21<br />
|-<br />
|<br />
!scope="col"| Sujet<br />
!scope="col"| Etudiants<br />
!scope="col"| Enseignant(s)<br />
!scope="col"| Fiche de suivi<br />
!scope="col"| Documents<br />
|-<br />
!scope="row"| 1<br />
| [[Contribution au projet STM32Python]]<br />
| BAUDEUR BERTRAND,LANQUETIN ALEXIS,TONDEUX EMILIE<br />
| Didier DONSEZ<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/01/docs/-/blob/master/Contribution%20au%20projet%20STM32Python%20info4_2020_2021.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/01/docs/-/blob/master/Pr%C3%A9sentation_mi-parcours.pdf Presentation de mi-parcours]<br />
|-<br />
!scope="row"| 2<br />
| [[Portage du kit station LoRa LRWAN2 de ST sur RIOT OS]]<br />
| HERQUE ERIC,MALLEN GUILLAUME,PORTIER BARNAB<br />
| Didier DONSEZ<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/02/docs/-/blob/master/Portage_du_kit_station_LoRa_LRWAN2_de_ST_sur_RIOT_OS_info4_2020_2021.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/02/docs/-/blob/master/Pr%C3%A9sentation%20de%20mi-parcours.pdf Presentation de mi-parcours]<br />
|-<br />
!scope="row"| 5<br />
| [[Service Web d'équipements embarqués communicant sur bus CAN]]<br />
| ANDRIEUX LIAM,DREZET LUCAS,REGOUIN ROMAN<br />
| Didier DONSEZ<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/05/docs/-/blob/master/EmbeddedEquipmentWebServiceCommunicatingOnCANBus_info4_2020_2021.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/05/docs/-/blob/master/Pre%20viva%20presentation.pdf Presentation de mi-parcours]<br />
|-<br />
!scope="row"| 6<br />
| [[Application mobile d'enregistrements de noeuds IoT LoRaWAN dans plusieurs réseaux]]<br />
| CAMBUS QUENTIN,EL YANDOUZI ELIAS,JULIENNE MALONE<br />
| Didier Donsez<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/06/docs/-/blob/master/README.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/06/docs/-/blob/master/Pr%C3%A9sentation_IoT.pdf Presentation de mi-parcours]<br />
|-<br />
!scope="row"| 7<br />
| [[ Evaluation du toolkit AI de STM32 pour reconnaissance sonore]]<br />
| COSOTTI KEVIN,GRANGER OSCAR,GUIGNARD JULIE<br />
| Didier Donsez<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/07/docs/README.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [[https://docs.google.com/presentation/d/15RCcuoAWGlpOLyM_SX3tXVhhXEHiTuNTXXxRCrJ4tiA/edit?usp=sharing |Presentation de mi-parcours]]<br />
|-<br />
!scope="row"| 8<br />
| [[Godot Game Engine et tables tactiles|Godot Engine]]<br />
| CIRSTEA PAUL,DE MULATIER JEAN-THEOPHANE,SOULARD ALEXANDR<br />
| Olivier Richard<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/08/docs/-/blob/master/Godot_Game_Engine_et_tables_tactiles_info4_2020_2021.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [[https://docs.google.com/presentation/d/1CUBp5Zz1uivkCb8latQ8tnfSy-bUTJs-7f3f7GcH4Zs/edit?usp=sharing |Presentation de mi-parcours]]<br />
|-<br />
!scope="row"| 9<br />
| [[Serveur_filière_INFO|Serveur INFO]]<br />
| GITTON ANTOINE,MERTENS GILLES,SUEUR CORENTIN<br />
| Nicolas Palix<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/09/docs/-/blob/master/Serveur_filiere_info4_2020_2021.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [[Media:Presentation_mi_parcours_groupe7.pdf|Presentation de mi-parcours]]<br />
|-<br />
!scope="row"| 10<br />
| [[ASAC/AP|Serre Polytech]]<br />
| AGUIAR MATHILDE,HAJJI OUMAIMA,SIDIBE ROKIATOU DITE ROSE<br />
| Nicolas Palix<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/10/docs/-/blob/master/README.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [[https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/10/docs/-/blob/master/Presentations/mid-project_slides.pdf | Presentation de mi-parcours]]<br />
|-<br />
!scope="row"| 11<br />
| [[ASAC/SJC/SJC-2020-INFO]]<br />
| BUISINE JULIEN,PRAT-CAPILLA HUGO,TEYSSIER THEO<br />
| Nicolas Palix<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/11/docs/-/blob/master/README.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/11/docs/-/blob/master/Team11-Presentation.pdf Presentation de mi-parcours]<br />
|-<br />
!scope="row"| 12<br />
| [[ENT Polytech]]<br />
| HERY JULES,SALMON AMAD,VACHERIAS GUILLAUME<br />
| Nicolas Palix<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/12/docs/-/blob/master/README.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [[https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/12/docs/-/blob/master/Presentation_mi_parcours.pdf | Presentation de mi-parcours]]<br />
|-<br />
!scope="row"| 13<br />
| [[Polytech_Helper_Service|Polytech Helper Service]]<br />
| ALIBERT ANGELO,NOERIE SOPHIE,SARRE MARGAUX<br />
| Olivier Richard<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/13/docs/ Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/13/docs/-/blob/master/Pr%C3%A9sentation_Mi-Parcours.pdf Presentation de mi-parcours]<br />
|-<br />
!scope="row"| 14<br />
| [[Rust Engine|Rust Engine]]<br />
| BARET DORIAN,CHALOYARD LUCAS,MALOD VICTOR,PARA YAEL<br />
| Olivier Richard<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/14/docs/-/blob/master/tracking-sheet.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/14/docs/-/blob/master/soutenance-mi_parcours.pdf Presentation de mi-parcours]<br />
|-<br />
!scope="row"| 15<br />
| [[Retrocompute_simulateur|Retrocomputing]]<br />
| ELHADJI TCHIAMBOU SAMI,HUMBERT CORENTIN,MUTEL MATHIS<br />
| Olivier Richard<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/15/docs/-/blob/master/README.md#follow-up Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/15/docs/-/blob/master/diapo_soutenance_mi_parcours.pdf Presentation de mi-parcours]<br />
|-<br />
!scope="row"| 16<br />
| [[FPGA et Deep Learning]]<br />
| GEITNER TEVA,GONZALEZ JULES,MALECOT ETHAN<br />
| Olivier Richard<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/16/docs/-/blob/master/FPGA_info4_2020_2021.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/16/docs/-/blob/master/Presentation_mi-projet.pdf Presentation de mi-parcours]<br />
|-<br />
!scope="row"| 17<br />
| [[OpenAPI OAR]]<br />
| LAMBERT DAPHNE,MINIER-MANCINI TITOUAN,TOUE TIOYE<br />
| Olivier Richard<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/17/docs/-/blob/master/TRACKING_SHEET.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]<br />
|-<br />
!scope="row"| 18<br />
| [[Monitoring de la plateforme CampusIoT]]<br />
| BLANQUET ANTOINE,LAMBERT PAUL,YUNG KEVIN<br />
| Didier Donsez<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/18/docs/-/blob/master/README.md Fiche]<br />
| [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Final Presentation]] - [[Media:xxx.pdf|Flyer]] - [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21/18/docs/-/blob/master/Reunion_de_mi_parcours.pdf Presentation de mi-parcours]<br />
|-<br />
|}<br />
<br />
==INFO5==<br />
===Projet IoT S9===<br />
Enseignants responsables : Bernard Tourancheau<br />
<br />
Calendrier: ??? Septembre à ??? Décembre 2020.<br />
<br />
<br />
===Projet Semestre S10===<br />
<br />
Enseignants responsables : [[user:Donsez|Didier Donsez]]<br />
<br />
Calendrier: 28/01 (13H30-17H30) au 19/03.<br />
<br />
Séances de Management de projets innovants: A voir dessus.<br />
<br />
Réunion de présentation et choix des sujets: 28/01 (13H30-17H30) en salle P257 (voir ADE)<br />
<br />
Démarrage : 29/01 (13H30-17H30)<br />
<br />
Soutenance à mi-parcours : 26/02/2021 13H30-17H30 en distantiel (15 minutes par équipe).<br />
<br />
Soutenance finale : 19/03/2021 (8H30-12H00 et 13H30-17H00). 30 minutes par équipe, questions/réponses et démonstration incluse. Prière de rapporter au fablab le matériel emprunté juste après votre soutenance. <br />
<br />
====Séances MPI====<br />
<br />
Les séances MPI seront en distanciel (mais ADE fait foi).<br />
<br />
<pre><br />
Séance Thématique Date Horaires Intervenante Salle<br />
1 Définir la problématique 03-févr. 14h-18h Stéphanie Diligent distanciel<br />
2 Gérer le projet en restant agile 10-févr. 8h30 - 12h30 Stéphanie Diligent distanciel<br />
3 Communiquer 24-févr. 8h30 - 12h30 Emmanuelle Tréhoust distanciel<br />
4 Evaluer et valoriser 03-mars 8h30 - 12h30 Emmanuelle Tréhoust distanciel<br />
5 Evaluation 10-mars 8h30 - 12h30 Stéphanie Diligent distanciel<br />
</pre><br />
<br />
==== Soutenance intermédiaire S10 ====<br />
Date: 26/02 Après midi. Distantiel (sur Zoom).<br />
<br />
L'objectif de la soutenance intermédiaire est de vérifier si l'équipe projet est en bon ordre de marche. La présence du porteur n'est pas obligatoire. Prévoyez du temps pour les questions-réponses (5 minutes max).<br />
<br />
L'équipe présentera en 5-6 transparents en 8 minutes.<br />
* les équipiers et leurs rôles<br />
* le contexte, le sujet et l'objectif du projet<br />
* l'architecture du systèmes à réaliser<br />
* les technologies utilisées<br />
* le plan de travail (backlog, planning, ce qui est fait, ce qu'il reste à faire ...)<br />
* les difficultés (s'il y a)<br />
<br />
Respectez bien les créneaux indiqués (par respect pour les autres équipes).<br />
<br />
==== Soutenance finale S10 ====<br />
Date: 19/03/2021 (8H30-12H00 et 13H30-17H00).<br />
<br />
'''La présence du(des) porteur(s) est obligatoire. Pensez à les prévenir bien à l'avance'''<br />
<br />
Durée: 30 minutes par équipe: présentation, questions/réponses et démonstration incluse.<br />
<br />
Les documents devront être en ligne sur le wiki (colonne Documents) la veille (ie avant le 18/03/2021 23:59:59 CET).<br />
<br />
La présentation est constituée des chapitres suivants:<br />
* Rappel du sujet/besoin et cahier des charges<br />
* Technologies employées<br />
* Architecture techniques<br />
* Réalisations techniques<br />
* Gestion de projet (méthode, planning prévisionnel et effectif, gestion des risques, rôles des membres ...)<br />
* Outils (collaboration, CD/CI ...)<br />
* Métriques logiciels : lignes de code, langages, performance, temps ingénieur (d'après vos journaux), la répartition des lignes de code et des commits en pourcentage entre les membres du projet ...)<br />
* Conclusion (Retour d'expérience)<br />
* Transparent expliquant la démonstration<br />
<br />
L'ensemble des documents doit être accessible depuis le tableau ci-dessus et dans chaque fiche de suivi.<br />
<br />
Le screencast (réalisé lors de la dernière répétition) sera rendu disponible via un partage caché (wetransfer, google drive …) dont le lien sera ajouté dans le devoir idoine sur Moodle et également envoyé par mail à votre tuteur.<br />
<br />
Le rapport final contient les mêmes chapitres que la présentation ainsi qu'un glossaire et une bibliographie. Le rapport ne doit pas dépasser 15 pages (schémas et figures compris). Vous pourrez référencer les autres documents que vous avez produits au cours du projet (spécifications détaillées, algorithmes, conception d'écrans ...).<br />
<br />
Le rapport final est au format Markdown et doit être placé dans un des dépôts Git de votre groupe/organisation.<br />
<br />
NB: le rapport technique listé dans la colonne Documents contient tout ce qui ne tient pas dans les 15 pages du rapport final : cahier des charges, diagrammes UML, enquêtes utilisateurs design UI, API, technologies employées (détail), plan de tests, term of services, conformance RPGD, audits/diagnostiques sécurité, MTBR, rapport de vulnérabilité, plan de charge, rapports de charge, manuel d'installation … : ça dépend un peu de la nature de votre projet.<br />
<br />
Conseil : 30 minutes c'est très court alors répétez la soutenance auparavant ! Prévoyez des transparents supplémentaires en annexe pour répondre aux questions.<br />
<br />
'''Prière de rapporter au fablab le matériel emprunté juste après votre soutenance'''.<br />
<br />
==== Affectations S10====<br />
{|class="wikitable alternance"<br />
|+ Affectation des projets INFO5 2020-2021<br />
|-<br />
|<br />
!scope="col"| Sujet<br />
!scope="col"| Etudiants<br />
!scope="col"| Enseignant(s)<br />
!scope="col"| Fiche de suivi<br />
!scope="col"| Documents<br />
!scope="col"| Dépôt Git<br />
!scope="col"| Soutenance intermédiaire<br />
!scope="col"| Soutenance finale<br />
|-<br />
!scope="row"| 1<br />
| [[Infrastructure de communication interne au cubesat ATISE du CSUG | ATISE]]<br />
| Alexandre SALMON, Myriam LOMBARD, Killian PAREILLEUX, Adrien ARTAUD<br />
| Imane El-Khantouti (CSUG, UGA), Frédéric Martin (CSUG, UGA)<br />
| [[PROJET-INFO5 2021 ATISE| Fiche de suivi]]<br />
| [https://air.imag.fr/index.php/Infrastructure_de_communication_interne_au_cubesat_ATISE_du_CSUG Documents], Flyer, Poster, Pitch, Screencast<br />
| [https://github.com/ATISE-2020-2021-Polytech-Grenoble Dépôt Github]<br />
| 13H30, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_1.pdf|Présentation]]<br />
| 9H00, [[Media:Presentation_Finale_INFO5_ProjetS10_groupe_1.pdf|Présentation]]<br />
|-<br />
!scope="row"| 2<br />
| [[Wildcount:_Inexpensive_Edge_sensor_for_recognizing_and_counting_the_presence_of_humans_(anonymous)_and_animals_into_wild_and_protected_areas.|Wildcount]]<br />
| BEAUGRAND Elisa, DE GAUDENZI Louis, GRAUGNARD Tom, ROLLIN Alexis<br />
| DONSEZ Didier, QUENOT Georges<br />
| [https://docs.google.com/document/d/1fuDK-i3vCepUEokviyZUcslDhAud8qIJkAztg9Bqadw/edit?usp=sharing Fiche de suivi]<br />
| [https://air.imag.fr/index.php/Wildcount:_Inexpensive_Edge_sensor_for_recognizing_and_counting_the_presence_of_humans_(anonymous)_and_animals_into_wild_and_protected_areas. Documents], Flyer, [https://air.imag.fr/images/6/62/WildCount_Poster_Preversion_A0_printed.pdf Poster], Pitch, Screencast<br />
| [https://gitlab.com/wildcount Dépôt Gitlab]<br />
| 13H45, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_2.pdf|Présentation]]<br />
| 14H30, [[Media:Presentation_Finale_INFO5_ProjetS10_groupe_2.pdf|Présentation]]<br />
|-<br />
!scope="row"| 5<br />
| [[Signature électronique eIDAS|eIDAS]]<br />
| ASSI Dima, BILOUNGA Aleck, EL AJI Houda, ZERAMDINI Otba<br />
| Nicolas PALIX<br />
| [[PROJET-INFO5 2021 Signature électronique eIDAS| Fiche de suivi]]<br />
| [https://air.imag.fr/index.php/Signature_%C3%A9lectronique_eIDAS Documents], Flyer, Poster, Pitch, Screencast<br />
| [https://github.com/2020-2021-EIDAS-INFO5 Dépôt Github]<br />
| 14H00, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_5.pdf|Présentation]]<br />
| Après-midi, [[Media:Presentation_Finale_INFO5_ProjetS10_groupe_5.pdf|Présentation]]<br />
|-<br />
<br />
!scope="row"| 6<br />
| [[Contributions open source au projet EdCampus|EdCampus]]<br />
| COURTHIAL Samuel, FOUGERE Sebastien, DELBOS Robin<br />
| POLLIER Gérard, GEOURJON Anthony, DONSEZ Didier<br />
| [[PROJET-INFO5 2021 Contributions open source au projet EdCampus| Fiche de suivi]]<br />
| [https://air.imag.fr/index.php/Contributions_open_source_au_projet_EdCampus Documents], Flyer, Poster, Pitch, Screencast<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/edcampus Dépôt GitLab]<br />
| 14H15, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_6.pdf|Présentation]]<br />
| 09H30, [[Media:Presentation_Finale_INFO5_ProjetS10_groupe_6.pdf|Présentation]]<br />
|-<br />
<br />
!scope="row"| 8<br />
| [[Prototypage d'application mobile pour la vente en direct de produits producteur locaux]]<br />
| BOLEAT Baptiste, CHAIX Manon, MICHELARD Leila, PALOMO Rémy<br />
| DELANGUE Sylvain, Gérard POLLIER (Disrupt Campus)<br />
| [[PROJET-INFO5 2021 Go Farmer | Fiche de suivi]]<br />
| [https://air.imag.fr/index.php/Prototypage_d%27application_mobile_pour_la_vente_en_direct_de_produits_producteur_locaux Documents], Flyer, Poster, Pitch, Screencast<br />
| [https://bitbucket.org/gofarmer/ Dépôt Bitbucket (privé)]<br />
| 14H30, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_8.pdf|Présentation]]<br />
| 08H30, [[Media:Presentation_Finale_INFO5_ProjetS10_groupe_8.pdf|Présentation]]<br />
|-<br />
!scope="row"| 9<br />
| [[Secours Montagne avec LoRa|Saint-Bernard]]<br />
| CHATON Alexandra, FRION Thomas, PASDELOUP Romain<br />
| TOURANCHEAU Bernard<br />
| [[PROJET-INFO5 2021 Secours Montagne avec LoRa | Fiche de suivi]]<br />
| [https://gitlab.com/info5-lora-avalanche/documentation Documents], Flyer, Poster, Pitch, Screencast<br />
| [https://gitlab.com/info5-lora-avalanche Gitlab]<br />
| 15H00, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_9.pdf|Présentation]]<br />
| 14H00, [[Media:Presentation_Finale_INFO5_ProjetS10_groupe_9.pdf|Présentation]]<br />
|-<br />
!scope="row"| 10<br />
| [[GenderedNews|GenderedNews]]<br />
| HO Nhat Quang, MURPHY Mica, NGUENA Gloria, SAGET Antoine<br />
| PORTET François, BASTIN Gilles, RICHARD Ange<br />
| [[PROJET-INFO5 2021 GenderedNews | Fiche de suivi]]<br />
| [https://air.imag.fr/index.php/GenderedNews Documents], Flyer, Poster, Pitch, Screencast<br />
| [https://gricad-gitlab.univ-grenoble-alpes.fr/getalp/genderednews Dépôt GitLab]<br />
| 15H15, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_10.pdf|Présentation]]<br />
| 13H30, [[Media:Presentation_Finale_INFO5_ProjetS10_groupe_10.pdf|Présentation]]<br />
|-<br />
!scope="row"| 11<br />
| [[Réseaux social d'organisation de sortie|Réseaux social d'organisation de sortie]]<br />
| EL JRAIDI Rim, VERNET Maxime, SAJIDE Idriss, MANISSADJIAN Gabriel<br />
| RICHARD Olivier<br />
| [[PROJET-INFO5 2021 Réseaux social d'organisation de sortie | Fiche de suivi]]<br />
| [https://air.imag.fr/index.php/R%C3%A9seaux_social_d%27organisation_de_sortie Documents], Flyer, Poster, Pitch, Screencast<br />
| [https://github.com/2020-2021-PROJET-INFO5-G11 Dépot Git (privé)]<br />
| 15H30, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_11.pdf|Présentation]]<br />
| 10H15, [[Media:Presentation_Finale_INFO5_ProjetS10_groupe_11.pdf|Présentation]]<br />
|-<br />
!scope="row"| 13<br />
| [[Artiphonie (saison 2)|Artiphonie (saison 2)]]<br />
| CROCIATI Morgan, RIVAL Gaëtan, RUZAFA Rémy, VELUT Claire <br />
| Bastien De Araujo, Guillaume Denis, Estelle Gillet-Perret et Olivier Richard<br />
| [[PROJET-INFO5 2021 Artiphonie (saison 2) | Fiche de suivi]]<br />
| [https://air.imag.fr/index.php/Artiphonie_(saison_2) Documents], Flyer, Poster, Screencast<br />
| [https://github.com/WriteInGesturesProject Dépôt Github]<br />
| 15H45, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_13.pdf|Présentation]]<br />
| 10H45, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_13.pdf|Présentation]]<br />
|-<br />
|scope="row"| 14<br />
| [[Covoiturage solidaire avec borne d'appel|Covoiturage solidaire avec borne d'appel]]<br />
| EL MUFTI Ali, NELSON William<br />
| Christine Verdier, Fabrice Forest (Didier Donsez pour le support technique borne d'appel).<br />
| [[PROJET-INFO5 2021 Covoiturage solidaire avec borne d'appel| Fiche de suivi]]<br />
| [https://air.imag.fr/index.php/Covoiturage_solidaire_avec_borne_d%27appel Documents], Flyer, Poster, Pitch, Screencast<br />
| [https://github.com/OliDesu/MoBiPa Dépôt Git] <br />
| 16H00, [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_14.pdf|Présentation]]<br />
| Après-midi, [[Media:Presentation_Finale_INFO5_ProjetS10_groupe_14.pdf|Présentation]]<br />
|}<br />
<br />
====Projets non choisis====<br />
* [[LoRaWAN Roaming]] avec [[Chirpstack]] et [[TheThingStack]]: Didier Donsez, Bernard Tourancheau.<br />
* [[Contributions open-source au projet JHipster]] : Didier Donsez<br />
* [[Test d'infrastructures avec NixOS]] Olivier Richard et Quentin Guilloteau</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=File:WildCount_Poster_Preversion_A0_printed.pdf&diff=50697File:WildCount Poster Preversion A0 printed.pdf2021-03-15T09:52:58Z<p>Alexis.Rollin: </p>
<hr />
<div></div>Alexis.Rollinhttps://air.imag.fr/index.php?title=File:WildCount_Poster_Preversion_A0.png&diff=50696File:WildCount Poster Preversion A0.png2021-03-15T09:46:58Z<p>Alexis.Rollin: </p>
<hr />
<div></div>Alexis.Rollinhttps://air.imag.fr/index.php?title=Wildcount:_Inexpensive_Edge_sensor_for_recognizing_and_counting_the_presence_of_humans_(anonymous)_and_animals_into_wild_and_protected_areas.&diff=50385Wildcount: Inexpensive Edge sensor for recognizing and counting the presence of humans (anonymous) and animals into wild and protected areas.2021-01-28T17:57:48Z<p>Alexis.Rollin: </p>
<hr />
<div>Wildcount: Inexpensive Edge sensor for recognizing and counting the presence of humans (anonymous) and animals into wild and protected areas<br />
<br />
* Projet INFO5 S10 2020-2021 <br />
* Encadrants : Didier DONSEZ, Georges QUENOT.<br />
<br />
https://gitlab.com/wildcount<br />
<br />
La détection à distance de l’homme ou des grands animaux évoluant dans les espaces naturels est un outil de choix pour les biologistes et sociologues qui cherchent à comprendre les interactions entre les hommes et la faune dans les espaces sensibles. Les applications portent aussi bien sur l’étude comportementale des populations humaines (randonneurs, vttistes, skieurs, chasseurs, professionnels forestiers …) comme des populations animales (loups, cervidés, sangliers, faunes porteuses de tiques transmettant la maladie de Lyme ...).<br />
<br />
[[Image:Wildcount-Piege-Photo.jpg|200px|center|Wildcount Piege Photo]] [[Image:Wildcount-Piege-Photo_2.jpg|200px|center|Wildcount Piege Photo]]<br />
<br />
L’objectif du projet WildCount est le développement d'un piège photo muni d'un capteur “edge” communiquant bon marché pour la reconnaissance et le comptage automatisé de la présence des humains (anonymes) et d’animaux en milieu naturel dans les zones sauvages et protégées, dans les chemins autorisés de parcs naturels, à proximité des refuges, des zones avalancheuses, de zones interdites au public … Ce capteur utilisera des composants peu onéreux mais offrant néanmoins de bonnes performances (résolution d’images, consommation énergétique, …). Les technologies envisagées se baseront sur les techniques d’apprentissage profond (ie réseaux neuronaux). Les réseaux de neuronaux seront entraînés à partir des bases d’images d’humains, d’animaux et de véhicules dépendant du contexte d’installation/observation. Une preuve de concept a été réalisée en Q1 2020 avec une carte Maix Sipeed et un modem LoRaWAN.<br />
Le calibrage se fait en partenariat avec les équipes techniques des Zones Ateliers Alpes (les gardes du Valbonnais du Parc national des Ecrins) et le PGHM Isère.<br />
<br />
La nouvelle version du capteur WildCount sera batie autour d’une carte Greenwaves GAP8, d’un capteur thermique ou d’un capteur visible, des capteurs environnementaux (température, humidité, pression, CO2, …) et un modem de communication longue distance bas débit LoRaWAN (RN2483). <br />
Ce capteur respectera la vie privée des éventuels passants puisque aucune image ne sera stockée ou transmise par le logiciel embarqué. Ce capteur ne transmettra que des compteurs de présence des différents types de formes reconnues par le réseau de neurones et éventuellement des alertes de passage en fonction de l’agenda chargé dans le capteur.<br />
<br />
L’architecture logicielle du projet suivra les principes des architectures edge-computing : le capteur embarque une grande partie de traitement (reconnaissance des images) pour ne transmettre qu’une information synthétique vers le cloud via un réseau de communication LoRaWAN longue distante et robuste mais très bas débit (300 bauds sur 1% du temps réglementaire (ie duty cycle)). Les données synthétisées sont ensuite stockées dans un cloud pour produire des alertes et des tableaux de bord.<br />
<br />
Votre mission consistera à prototyper les capteurs edge sur des cartes Greenwaves GapPoc-A et GapPoc-B. Il faudra d’en un premier temps prendre en main les 2 modeles de cartes Greenwaves GapPoc-A et GapPoc-B. En parallèle, il faudra entrainer le réseau de neurones à partir des bases d’images animalières (comme https://www.zooniverse.org/projects/crea-mont-blanc/wild-mont-blanc/classify) et de charger les modèles entrainés de réseaux de neurones sur les cartes. Il faudra réaliser les programmes de transmission périodiques des compteurs d’animaux reconnus par le réseau de neurones au travers du modem LoRaWAN. Enfin, il faudra afficher les compteurs d’espèces reconnus préalablement stockés dans une base de données temporelles (InfluxDB) et afficher ceux-ci dans un tableau de bord (Grafana). <br />
<br />
Vous pourrez participer à l’expérimentation terrain en fonction de l’avancement du projet (Parc des Ecrins section du Valbonnais où une station LoRa sera installée et le Parc National du Mercantour).<br />
<br />
Ce projet se fera en collaboration avec un groupe d'élèves IESE5.<br />
<br />
* https://air.imag.fr/index.php/PROJET-INFO5_2021_Secours_Montagne_avec_LoRa<br />
* https://greenwaves-technologies.com/product/gappoc-a-computer-vision-concept-board/<br />
* https://greenwaves-technologies.com/product/gappoc-b-occupancy-management-reference-platform/<br />
* https://greenwaves-technologies.com/sdk-manuals/<br />
* https://github.com/GreenWaves-Technologies/gap_sdk<br />
* https://greenwaves-technologies.com/gap8_developers_forum-2/ <br />
* https://github.com/CampusIoT/tutorial/tree/master/rn2483#gallerie https://www.zooniverse.org/projects/crea-mont-blanc/wild-mont-blanc/classify</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=Projets_2020-2021&diff=50383Projets 2020-20212021-01-28T17:47:44Z<p>Alexis.Rollin: /* Affectations S10 */</p>
<hr />
<div><<[[Projets 2019-2020]] | [[Projets]] | [[Projets 2021-2022]]>><br />
=INFO=<br />
==INFO3==<br />
<br />
==INFO4==<br />
===Projet Semestre S8===<br />
<br />
Enseignants responsables : Olivier Richard, Didier Donsez<br />
<br />
* Dates : Lundi après-midi, Mardi après-midi <br />
* Lancement: 18 Janvier 2021 après midi<br />
* Soutenance à mi-parcours: A définir<br />
* Soutenance: A définir<br />
<br />
* '''Evaluation à mi-parcours le lundi/mardi ???''': Format: 10min (5min de présentation 3 slides au plus, 5min de discussion). Cette évaluation sera prise en compte dans la note finale.<br />
<br />
'''Consignes générales:'''<br />
<br />
* '''Vous devez être pro-actifs !!!''': Si des points sont pas ou mals spécifiés, vous le faîtes et vous justifiez vos choix. Pour les problèmes techniques éventuels vous pouvez: creuser la question, contacter l'auteur du code si il y a lieu, écrire un rapport de bug ('''Attention:''' ca se prépare !), soumettre un patch/pull request, contacter l'enseignant ou la personne référente du projet.<br />
<br />
* '''Vous devez maintenir une fiche de suivi de projet''': elle doit être mise à jour chaque semaine, elle rassemble les élements essentiels du projet, elle indique les évolutions du projet et présente sa feuille de route. '''Note:''' le nom de la fiche doit être composé du nom du projet et suffixé par info4_2020_2021. '''Cette fiche compte pour la note finale'''<br />
<br />
* '''Votre code''' pour doit être hébergé sur le gitlab et à l'URL suivante https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21 , vous utiliserez votre compte UGA.<br />
<br />
* Chaque projet doit avoir '''aux moins 2 dépôts git''':<br />
** '''Un pour les documents''' demandés rapport, présentation de pré-soutenante, de soutenance, flyer. '''Il sera appelé documents.'''<br />
** Un ou plusieurs pour le code, les tests, les évaluations, les preuves de concept, la ou les documentations afférentes. <br />
<br />
* Les '''documents public doivent être rédigés en anglais (README, documentation, commentaires de code, nom de variables et de fonctions)'''. Le *rapport* sera aussi demandé en *anglais* (il fera la taille d'un rapport de TP). Les transparents des présentation peuvent être en anglais ou en francais, la soutenance sera taire en francais.<br />
<br />
* '''La note obtenue''' tiendra compte du '''nombre et de la qualité des commits''' observé dans '''vos dépots git et la branche master''' (or depot documents). La qualité comprend l'intitulé du commit et son contenu. Les notes pourront être différentiées dans un groupe, il n'est pas acceptable de pas avoir de commit dans le(s) dépôt(s) du projet (or dépôt documents).<br />
<br />
* Il est fortement conseillé de suivre un '''développement incrémental''' qui permette d'avoir à tout moment un démonstrateur à présenter, un projet peut être constituer d'une succession de '''démonstrateurs présentables séparément'''.<br />
<br />
* Vous devez faire aussi des '''schémas d'architectures générales et/ou spéficiques, des diagrammes de séquence''', et autre documents de spécification si nécessaire. Ces documents vous serviront de base de discussion/brainstorming interne ainsi que dans vos différents documents (rapport, présentations, documentation). Ces schémas sont avant tout conceptuels et techniques.<br />
<br />
===Propositions de projets S8===<br />
<br />
* 1. [[Contribution au projet STM32Python]], Didier DONSEZ.<br />
* 2. [[Portage du kit station LoRa LRWAN2 de ST sur RIOT OS]], Didier DONSEZ.<br />
* 3+4. [[Portage de la carte de prototypage IoT Nucleo-WL55JC sur RIOT OS]] + [[Portage de la carte de communication LoRa LLCC68MB2BAS sur RIOT OS]], Didier DONSEZ (1 seul groupe de 3 élèves pour les 2 cartes).<br />
* 5. [[Service Web d'équipements embarqués communicant sur bus CAN]] (2 groupes de 2 élèves), Didier DONSEZ.<br />
* 6. [[Application mobile d'enregistrements de noeuds IoT LoRaWAN dans plusieurs réseaux]], Didier DONSEZ.<br />
* 7. [[Evaluation du toolkit AI de STM32 pour l'analyse de l'environnement sonore]], Didier DONSEZ.<br />
* 8. [[Godot Game Engine et tables tactiles]] : démonstration d'un jeu en réseau sur les 3 tables tactiles : (gaming spirit) Olivier RICHARD.<br />
* 9. [[Serveur filière INFO]], Nicolas Palix<br />
* Agriculture connectée en partenariat avec les projets collectifs IESE/MAT<br />
** 10. [[ASAC/AP|Polytech]] : Nicolas Palix<br />
** 11. [[ASAC/SJC|St Cassien]] : Nicolas Palix<br />
* 12. [[ENT Polytech]] avec XMPP/Mumble/BBB/Mattermost/OpenBoard : Nicolas Palix<br />
* 13. [[Polytech Helper Service | Outils d'aide à la gestion de service]], (professionel) Olivier Richard<br />
* 14. [[Rust Engine | Executeur de tâche en Rust]], (exigeant techniquement) Olivier Richard<br />
* 15. [[Retrocompute simulateur | RetroComputing]]: (vintage style) Coupler le simulateur Digital avec un simulateur de processeur 8bits, Olivier Richard<br />
* 16. [[FPGA et Deep Learnning]] Olivier Richard<br />
* 17. [[OpenAPI OAR | OpenAPI pour la gestion de tâches de ressources OAR]], (professionel) Olivier Richard <br />
* 18. [[Monitoring de la plateforme CampusIoT]] : Didier Donsez<br />
<br />
==== Reporté INFO5 21-22 ==== <br />
* 1 heure 1 heure (échange de compétence), etudiant.e.s Emilie Tondeux + ?, tuteur ?<br />
==== Reporté ====<br />
[[Simulateur de réseaux simples avec un FPGA]], (typé recherche/prospectif)<br />
<br />
==== Affectation ====<br />
{|class="wikitable alternance"<br />
|+ Affectation des projets INFO4 2020-2021<br />
|-<br />
|<br />
!scope="col"| Sujet<br />
!scope="col"| Etudiants<br />
!scope="col"| Enseignant(s)<br />
!scope="col"| Fiche de suivi<br />
!scope="col"| Documents<br />
|-<br />
|}<br />
<br />
==INFO5==<br />
===Projet IoT S9===<br />
Enseignants responsables : Bernard Tourancheau<br />
<br />
Calendrier: ??? Septembre à ??? Décembre 2020.<br />
<br />
<br />
===Projet Semestre S10===<br />
<br />
Enseignants responsables : [[user:Donsez|Didier Donsez]]<br />
<br />
Calendrier: 28/01 (13H30-17H30) au 19/03.<br />
<br />
Séances de Management de projets innovants: A voir dessus.<br />
<br />
Réunion de présentation et choix des sujets: 28/01 (13H30-17H30) en salle P257 (voir ADE)<br />
<br />
Démarrage : 29/01 (13H30-17H30)<br />
<br />
Soutenance à mi-parcours : Début Mars, 9H00-11H30 (15 minutes par équipe).<br />
<br />
Soutenance : 19/03/2021.<br />
<br />
====Séances MPI====<br />
<br />
Les séances MPI seront en présentiel (mais ADE fait foi).<br />
<br />
<pre><br />
Séance Thématique Date Horaires Intervenante Salle<br />
1 Définir la problématique 03-févr. 14h-18h Stéphanie Diligent Créalab<br />
2 Gérer le projet en restant agile 10-févr. 8h30 - 12h30 Stéphanie Diligent Créalab<br />
3 Communiquer 24-févr. 8h30 - 12h30 Emmanuelle Tréhoust Créalab<br />
4 Evaluer et valoriser 03-mars 8h30 - 12h30 Emmanuelle Tréhoust Créalab<br />
5 Evaluation 10-mars 8h30 - 12h30 Stéphanie Diligent 105<br />
</pre><br />
<br />
====Propositions de projets S10====<br />
# [[Infrastructure de communication interne au cubesat ATISE du CSUG]] basé sur [[LibCSP]]: Imane El Khantouti ([https://www.csug.fr CSUG]), Frédéric Martin ([https://www.csug.fr CSUG])<br />
# [[Wildcount: Inexpensive Edge sensor for recognizing and counting the presence of humans (anonymous) and animals into wild and protected areas.]] : Didier Donsez, Georges Quénot<br />
# [[LoRaWAN Roaming]] avec [[Chirpstack]] et [[TheThingStack]]: Didier Donsez, Bernard Tourancheau.<br />
# [[Contributions open-source au projet JHipster]] : Didier Donsez<br />
# [[Signature électronique eIDAS]] (JHipster, Apache FOP, visualisateurs PDF pour Angular/Vue/React ..., services tiers de confiance) : Nicolas Palix (Didier DONSEZ).<br />
# [[Contributions open source au projet EdCampus]] : Gérard Pollier (Disrupt Campus), Anthony Geourjon (Disrupt Campus)<br />
# [[Contributions open source au projet SmartRecruiting]] : Gérard Pollier (Disrupt Campus), Anthony Geourjon (Disrupt Campus)<br />
# [[Prototypage d'application mobile pour la vente en direct de produits producteur locaux]], Sylvain Delangue, Gérard Pollier<br />
# [[Secours Montagne avec LoRa|LoRa-valanche: Secours Montagne avec LoRa]] : Bernard Tourancheau en lien avec le PGHM Isère<br />
# [[GenderedNews]], François Portet, Gilles Bastin<br />
# [[Réseaux social d'organisation de sortie]] Olivier Richard<br />
# [[Test d'infrastructures avec NixOS]] Olivier Richard et Quentin Guilloteau<br />
# [[Artiphonie (saison 2)]] Aides aux enfants pour le traitement les troubles Ortophoniques Bastien De Araujo, Guillaume Denis, Estelle Gillet-Perret et Olivier Richard<br />
# [[Covoiturage solidaire avec borne d'appel]] Christine Verdier, Fabrice Forest<br />
<br />
==== Affectations S10====<br />
{|class="wikitable alternance"<br />
|+ Affectation des projets INFO5 2019-2020<br />
|-<br />
|<br />
!scope="col"| Sujet<br />
!scope="col"| Etudiants<br />
!scope="col"| Enseignant(s)<br />
!scope="col"| Fiche de suivi<br />
!scope="col"| Documents<br />
|-<br />
!scope="row"| 2<br />
| [[Wildcount:_Inexpensive_Edge_sensor_for_recognizing_and_counting_the_presence_of_humans_(anonymous)_and_animals_into_wild_and_protected_areas.|Wildcount]]<br />
| BEAUGRAND Elisa, DE GAUDENZI Louis, GRAUGNARD Tom, ROLLIN Alexis<br />
| Didier DONSEZ, Georges QUENOT<br />
| [[PROJET-INFO5 2021 Wildcount | Fiche de suivi]]<br />
| [https://gitlab.com/wildcount Documents]<br />
|-<br />
!scope="row"| 8<br />
| [[Secours Montagne avec LoRa|LoRa-valanche]]<br />
| CHATON ALEXANDRA,FRION THOMAS, PASDELOUP ROMAIN<br />
| Bernard Tourancheau<br />
| [[PROJET-INFO5 2021 Secours Montagne avec LoRa | Fiche de suivi]]<br />
| [https://gitlab.com/info5_2020_secoursenmontagne Documents]<br />
|-<br />
|}<br />
<br />
Pour 2020-2021</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=Projets_2020-2021&diff=50382Projets 2020-20212021-01-28T17:46:52Z<p>Alexis.Rollin: /* Affectations S10 */</p>
<hr />
<div><<[[Projets 2019-2020]] | [[Projets]] | [[Projets 2021-2022]]>><br />
=INFO=<br />
==INFO3==<br />
<br />
==INFO4==<br />
===Projet Semestre S8===<br />
<br />
Enseignants responsables : Olivier Richard, Didier Donsez<br />
<br />
* Dates : Lundi après-midi, Mardi après-midi <br />
* Lancement: 18 Janvier 2021 après midi<br />
* Soutenance à mi-parcours: A définir<br />
* Soutenance: A définir<br />
<br />
* '''Evaluation à mi-parcours le lundi/mardi ???''': Format: 10min (5min de présentation 3 slides au plus, 5min de discussion). Cette évaluation sera prise en compte dans la note finale.<br />
<br />
'''Consignes générales:'''<br />
<br />
* '''Vous devez être pro-actifs !!!''': Si des points sont pas ou mals spécifiés, vous le faîtes et vous justifiez vos choix. Pour les problèmes techniques éventuels vous pouvez: creuser la question, contacter l'auteur du code si il y a lieu, écrire un rapport de bug ('''Attention:''' ca se prépare !), soumettre un patch/pull request, contacter l'enseignant ou la personne référente du projet.<br />
<br />
* '''Vous devez maintenir une fiche de suivi de projet''': elle doit être mise à jour chaque semaine, elle rassemble les élements essentiels du projet, elle indique les évolutions du projet et présente sa feuille de route. '''Note:''' le nom de la fiche doit être composé du nom du projet et suffixé par info4_2020_2021. '''Cette fiche compte pour la note finale'''<br />
<br />
* '''Votre code''' pour doit être hébergé sur le gitlab et à l'URL suivante https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21 , vous utiliserez votre compte UGA.<br />
<br />
* Chaque projet doit avoir '''aux moins 2 dépôts git''':<br />
** '''Un pour les documents''' demandés rapport, présentation de pré-soutenante, de soutenance, flyer. '''Il sera appelé documents.'''<br />
** Un ou plusieurs pour le code, les tests, les évaluations, les preuves de concept, la ou les documentations afférentes. <br />
<br />
* Les '''documents public doivent être rédigés en anglais (README, documentation, commentaires de code, nom de variables et de fonctions)'''. Le *rapport* sera aussi demandé en *anglais* (il fera la taille d'un rapport de TP). Les transparents des présentation peuvent être en anglais ou en francais, la soutenance sera taire en francais.<br />
<br />
* '''La note obtenue''' tiendra compte du '''nombre et de la qualité des commits''' observé dans '''vos dépots git et la branche master''' (or depot documents). La qualité comprend l'intitulé du commit et son contenu. Les notes pourront être différentiées dans un groupe, il n'est pas acceptable de pas avoir de commit dans le(s) dépôt(s) du projet (or dépôt documents).<br />
<br />
* Il est fortement conseillé de suivre un '''développement incrémental''' qui permette d'avoir à tout moment un démonstrateur à présenter, un projet peut être constituer d'une succession de '''démonstrateurs présentables séparément'''.<br />
<br />
* Vous devez faire aussi des '''schémas d'architectures générales et/ou spéficiques, des diagrammes de séquence''', et autre documents de spécification si nécessaire. Ces documents vous serviront de base de discussion/brainstorming interne ainsi que dans vos différents documents (rapport, présentations, documentation). Ces schémas sont avant tout conceptuels et techniques.<br />
<br />
===Propositions de projets S8===<br />
<br />
* 1. [[Contribution au projet STM32Python]], Didier DONSEZ.<br />
* 2. [[Portage du kit station LoRa LRWAN2 de ST sur RIOT OS]], Didier DONSEZ.<br />
* 3+4. [[Portage de la carte de prototypage IoT Nucleo-WL55JC sur RIOT OS]] + [[Portage de la carte de communication LoRa LLCC68MB2BAS sur RIOT OS]], Didier DONSEZ (1 seul groupe de 3 élèves pour les 2 cartes).<br />
* 5. [[Service Web d'équipements embarqués communicant sur bus CAN]] (2 groupes de 2 élèves), Didier DONSEZ.<br />
* 6. [[Application mobile d'enregistrements de noeuds IoT LoRaWAN dans plusieurs réseaux]], Didier DONSEZ.<br />
* 7. [[Evaluation du toolkit AI de STM32 pour l'analyse de l'environnement sonore]], Didier DONSEZ.<br />
* 8. [[Godot Game Engine et tables tactiles]] : démonstration d'un jeu en réseau sur les 3 tables tactiles : (gaming spirit) Olivier RICHARD.<br />
* 9. [[Serveur filière INFO]], Nicolas Palix<br />
* Agriculture connectée en partenariat avec les projets collectifs IESE/MAT<br />
** 10. [[ASAC/AP|Polytech]] : Nicolas Palix<br />
** 11. [[ASAC/SJC|St Cassien]] : Nicolas Palix<br />
* 12. [[ENT Polytech]] avec XMPP/Mumble/BBB/Mattermost/OpenBoard : Nicolas Palix<br />
* 13. [[Polytech Helper Service | Outils d'aide à la gestion de service]], (professionel) Olivier Richard<br />
* 14. [[Rust Engine | Executeur de tâche en Rust]], (exigeant techniquement) Olivier Richard<br />
* 15. [[Retrocompute simulateur | RetroComputing]]: (vintage style) Coupler le simulateur Digital avec un simulateur de processeur 8bits, Olivier Richard<br />
* 16. [[FPGA et Deep Learnning]] Olivier Richard<br />
* 17. [[OpenAPI OAR | OpenAPI pour la gestion de tâches de ressources OAR]], (professionel) Olivier Richard <br />
* 18. [[Monitoring de la plateforme CampusIoT]] : Didier Donsez<br />
<br />
==== Reporté INFO5 21-22 ==== <br />
* 1 heure 1 heure (échange de compétence), etudiant.e.s Emilie Tondeux + ?, tuteur ?<br />
==== Reporté ====<br />
[[Simulateur de réseaux simples avec un FPGA]], (typé recherche/prospectif)<br />
<br />
==== Affectation ====<br />
{|class="wikitable alternance"<br />
|+ Affectation des projets INFO4 2020-2021<br />
|-<br />
|<br />
!scope="col"| Sujet<br />
!scope="col"| Etudiants<br />
!scope="col"| Enseignant(s)<br />
!scope="col"| Fiche de suivi<br />
!scope="col"| Documents<br />
|-<br />
|}<br />
<br />
==INFO5==<br />
===Projet IoT S9===<br />
Enseignants responsables : Bernard Tourancheau<br />
<br />
Calendrier: ??? Septembre à ??? Décembre 2020.<br />
<br />
<br />
===Projet Semestre S10===<br />
<br />
Enseignants responsables : [[user:Donsez|Didier Donsez]]<br />
<br />
Calendrier: 28/01 (13H30-17H30) au 19/03.<br />
<br />
Séances de Management de projets innovants: A voir dessus.<br />
<br />
Réunion de présentation et choix des sujets: 28/01 (13H30-17H30) en salle P257 (voir ADE)<br />
<br />
Démarrage : 29/01 (13H30-17H30)<br />
<br />
Soutenance à mi-parcours : Début Mars, 9H00-11H30 (15 minutes par équipe).<br />
<br />
Soutenance : 19/03/2021.<br />
<br />
====Séances MPI====<br />
<br />
Les séances MPI seront en présentiel (mais ADE fait foi).<br />
<br />
<pre><br />
Séance Thématique Date Horaires Intervenante Salle<br />
1 Définir la problématique 03-févr. 14h-18h Stéphanie Diligent Créalab<br />
2 Gérer le projet en restant agile 10-févr. 8h30 - 12h30 Stéphanie Diligent Créalab<br />
3 Communiquer 24-févr. 8h30 - 12h30 Emmanuelle Tréhoust Créalab<br />
4 Evaluer et valoriser 03-mars 8h30 - 12h30 Emmanuelle Tréhoust Créalab<br />
5 Evaluation 10-mars 8h30 - 12h30 Stéphanie Diligent 105<br />
</pre><br />
<br />
====Propositions de projets S10====<br />
# [[Infrastructure de communication interne au cubesat ATISE du CSUG]] basé sur [[LibCSP]]: Imane El Khantouti ([https://www.csug.fr CSUG]), Frédéric Martin ([https://www.csug.fr CSUG])<br />
# [[Wildcount: Inexpensive Edge sensor for recognizing and counting the presence of humans (anonymous) and animals into wild and protected areas.]] : Didier Donsez, Georges Quénot<br />
# [[LoRaWAN Roaming]] avec [[Chirpstack]] et [[TheThingStack]]: Didier Donsez, Bernard Tourancheau.<br />
# [[Contributions open-source au projet JHipster]] : Didier Donsez<br />
# [[Signature électronique eIDAS]] (JHipster, Apache FOP, visualisateurs PDF pour Angular/Vue/React ..., services tiers de confiance) : Nicolas Palix (Didier DONSEZ).<br />
# [[Contributions open source au projet EdCampus]] : Gérard Pollier (Disrupt Campus), Anthony Geourjon (Disrupt Campus)<br />
# [[Contributions open source au projet SmartRecruiting]] : Gérard Pollier (Disrupt Campus), Anthony Geourjon (Disrupt Campus)<br />
# [[Prototypage d'application mobile pour la vente en direct de produits producteur locaux]], Sylvain Delangue, Gérard Pollier<br />
# [[Secours Montagne avec LoRa|LoRa-valanche: Secours Montagne avec LoRa]] : Bernard Tourancheau en lien avec le PGHM Isère<br />
# [[GenderedNews]], François Portet, Gilles Bastin<br />
# [[Réseaux social d'organisation de sortie]] Olivier Richard<br />
# [[Test d'infrastructures avec NixOS]] Olivier Richard et Quentin Guilloteau<br />
# [[Artiphonie (saison 2)]] Aides aux enfants pour le traitement les troubles Ortophoniques Bastien De Araujo, Guillaume Denis, Estelle Gillet-Perret et Olivier Richard<br />
# [[Covoiturage solidaire avec borne d'appel]] Christine Verdier, Fabrice Forest<br />
<br />
==== Affectations S10====<br />
{|class="wikitable alternance"<br />
|+ Affectation des projets INFO5 2019-2020<br />
|-<br />
|<br />
!scope="col"| Sujet<br />
!scope="col"| Etudiants<br />
!scope="col"| Enseignant(s)<br />
!scope="col"| Fiche de suivi<br />
!scope="col"| Documents<br />
|-<br />
!scope="row"| 2<br />
| [[Wildcount:_Inexpensive_Edge_sensor_for_recognizing_and_counting_the_presence_of_humans_(anonymous)_and_animals_into_wild_and_protected_areas.|Wildcount]]<br />
| BEAUGRAND Elisa, DE GAUDENZI Louis, GRAUGNARD Tom, ROLLIN Alexis<br />
| Didier DONSEZ, Georges QUENOT<br />
| [[PROJET-INFO5 2021 Wildcount | Fiche de suivi]]<br />
| [ Documents]<br />
|-<br />
!scope="row"| 8<br />
| [[Secours Montagne avec LoRa|LoRa-valanche]]<br />
| CHATON ALEXANDRA,FRION THOMAS, PASDELOUP ROMAIN<br />
| Bernard Tourancheau<br />
| [[PROJET-INFO5 2021 Secours Montagne avec LoRa | Fiche de suivi]]<br />
| [https://gitlab.com/wildcount Documents]<br />
|-<br />
|}<br />
<br />
Pour 2020-2021</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=PROJET-INFO5_2021_Wildcount&diff=50381PROJET-INFO5 2021 Wildcount2021-01-28T17:46:21Z<p>Alexis.Rollin: </p>
<hr />
<div>=Le projet= <br />
=L'équipe=<br />
* Elisa Beaugrand<br />
* Louis De Gaudenzi<br />
* Tom Graugnard<br />
* Alexis Rollin<br />
<br />
Supervisé par : Didier Donsez, Georges Quénot<br />
<br />
=Journal=<br />
<br />
=Liens=<br />
* [https://gitlab.com/wildcount Gitlab]</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=PROJET-INFO5_2021_Wildcount&diff=50378PROJET-INFO5 2021 Wildcount2021-01-28T17:44:22Z<p>Alexis.Rollin: Blanked the page</p>
<hr />
<div></div>Alexis.Rollinhttps://air.imag.fr/index.php?title=Projets_2020-2021&diff=50375Projets 2020-20212021-01-28T17:40:55Z<p>Alexis.Rollin: /* Affectations S10 */</p>
<hr />
<div><<[[Projets 2019-2020]] | [[Projets]] | [[Projets 2021-2022]]>><br />
=INFO=<br />
==INFO3==<br />
<br />
==INFO4==<br />
===Projet Semestre S8===<br />
<br />
Enseignants responsables : Olivier Richard, Didier Donsez<br />
<br />
* Dates : Lundi après-midi, Mardi après-midi <br />
* Lancement: 18 Janvier 2021 après midi<br />
* Soutenance à mi-parcours: A définir<br />
* Soutenance: A définir<br />
<br />
* '''Evaluation à mi-parcours le lundi/mardi ???''': Format: 10min (5min de présentation 3 slides au plus, 5min de discussion). Cette évaluation sera prise en compte dans la note finale.<br />
<br />
'''Consignes générales:'''<br />
<br />
* '''Vous devez être pro-actifs !!!''': Si des points sont pas ou mals spécifiés, vous le faîtes et vous justifiez vos choix. Pour les problèmes techniques éventuels vous pouvez: creuser la question, contacter l'auteur du code si il y a lieu, écrire un rapport de bug ('''Attention:''' ca se prépare !), soumettre un patch/pull request, contacter l'enseignant ou la personne référente du projet.<br />
<br />
* '''Vous devez maintenir une fiche de suivi de projet''': elle doit être mise à jour chaque semaine, elle rassemble les élements essentiels du projet, elle indique les évolutions du projet et présente sa feuille de route. '''Note:''' le nom de la fiche doit être composé du nom du projet et suffixé par info4_2020_2021. '''Cette fiche compte pour la note finale'''<br />
<br />
* '''Votre code''' pour doit être hébergé sur le gitlab et à l'URL suivante https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21 , vous utiliserez votre compte UGA.<br />
<br />
* Chaque projet doit avoir '''aux moins 2 dépôts git''':<br />
** '''Un pour les documents''' demandés rapport, présentation de pré-soutenante, de soutenance, flyer. '''Il sera appelé documents.'''<br />
** Un ou plusieurs pour le code, les tests, les évaluations, les preuves de concept, la ou les documentations afférentes. <br />
<br />
* Les '''documents public doivent être rédigés en anglais (README, documentation, commentaires de code, nom de variables et de fonctions)'''. Le *rapport* sera aussi demandé en *anglais* (il fera la taille d'un rapport de TP). Les transparents des présentation peuvent être en anglais ou en francais, la soutenance sera taire en francais.<br />
<br />
* '''La note obtenue''' tiendra compte du '''nombre et de la qualité des commits''' observé dans '''vos dépots git et la branche master''' (or depot documents). La qualité comprend l'intitulé du commit et son contenu. Les notes pourront être différentiées dans un groupe, il n'est pas acceptable de pas avoir de commit dans le(s) dépôt(s) du projet (or dépôt documents).<br />
<br />
* Il est fortement conseillé de suivre un '''développement incrémental''' qui permette d'avoir à tout moment un démonstrateur à présenter, un projet peut être constituer d'une succession de '''démonstrateurs présentables séparément'''.<br />
<br />
* Vous devez faire aussi des '''schémas d'architectures générales et/ou spéficiques, des diagrammes de séquence''', et autre documents de spécification si nécessaire. Ces documents vous serviront de base de discussion/brainstorming interne ainsi que dans vos différents documents (rapport, présentations, documentation). Ces schémas sont avant tout conceptuels et techniques.<br />
<br />
===Propositions de projets S8===<br />
<br />
* 1. [[Contribution au projet STM32Python]], Didier DONSEZ.<br />
* 2. [[Portage du kit station LoRa LRWAN2 de ST sur RIOT OS]], Didier DONSEZ.<br />
* 3+4. [[Portage de la carte de prototypage IoT Nucleo-WL55JC sur RIOT OS]] + [[Portage de la carte de communication LoRa LLCC68MB2BAS sur RIOT OS]], Didier DONSEZ (1 seul groupe de 3 élèves pour les 2 cartes).<br />
* 5. [[Service Web d'équipements embarqués communicant sur bus CAN]] (2 groupes de 2 élèves), Didier DONSEZ.<br />
* 6. [[Application mobile d'enregistrements de noeuds IoT LoRaWAN dans plusieurs réseaux]], Didier DONSEZ.<br />
* 7. [[Evaluation du toolkit AI de STM32 pour l'analyse de l'environnement sonore]], Didier DONSEZ.<br />
* 8. [[Godot Game Engine et tables tactiles]] : démonstration d'un jeu en réseau sur les 3 tables tactiles : (gaming spirit) Olivier RICHARD.<br />
* 9. [[Serveur filière INFO]], Nicolas Palix<br />
* Agriculture connectée en partenariat avec les projets collectifs IESE/MAT<br />
** 10. [[ASAC/AP|Polytech]] : Nicolas Palix<br />
** 11. [[ASAC/SJC|St Cassien]] : Nicolas Palix<br />
* 12. [[ENT Polytech]] avec XMPP/Mumble/BBB/Mattermost/OpenBoard : Nicolas Palix<br />
* 13. [[Polytech Helper Service | Outils d'aide à la gestion de service]], (professionel) Olivier Richard<br />
* 14. [[Rust Engine | Executeur de tâche en Rust]], (exigeant techniquement) Olivier Richard<br />
* 15. [[Retrocompute simulateur | RetroComputing]]: (vintage style) Coupler le simulateur Digital avec un simulateur de processeur 8bits, Olivier Richard<br />
* 16. [[FPGA et Deep Learnning]] Olivier Richard<br />
* 17. [[OpenAPI OAR | OpenAPI pour la gestion de tâches de ressources OAR]], (professionel) Olivier Richard <br />
* 18. [[Monitoring de la plateforme CampusIoT]] : Didier Donsez<br />
<br />
==== Reporté INFO5 21-22 ==== <br />
* 1 heure 1 heure (échange de compétence), etudiant.e.s Emilie Tondeux + ?, tuteur ?<br />
==== Reporté ====<br />
[[Simulateur de réseaux simples avec un FPGA]], (typé recherche/prospectif)<br />
<br />
==== Affectation ====<br />
{|class="wikitable alternance"<br />
|+ Affectation des projets INFO4 2020-2021<br />
|-<br />
|<br />
!scope="col"| Sujet<br />
!scope="col"| Etudiants<br />
!scope="col"| Enseignant(s)<br />
!scope="col"| Fiche de suivi<br />
!scope="col"| Documents<br />
|-<br />
|}<br />
<br />
==INFO5==<br />
===Projet IoT S9===<br />
Enseignants responsables : Bernard Tourancheau<br />
<br />
Calendrier: ??? Septembre à ??? Décembre 2020.<br />
<br />
<br />
===Projet Semestre S10===<br />
<br />
Enseignants responsables : [[user:Donsez|Didier Donsez]]<br />
<br />
Calendrier: 28/01 (13H30-17H30) au 19/03.<br />
<br />
Séances de Management de projets innovants: A voir dessus.<br />
<br />
Réunion de présentation et choix des sujets: 28/01 (13H30-17H30) en salle P257 (voir ADE)<br />
<br />
Démarrage : 29/01 (13H30-17H30)<br />
<br />
Soutenance à mi-parcours : Début Mars, 9H00-11H30 (15 minutes par équipe).<br />
<br />
Soutenance : 19/03/2021.<br />
<br />
====Séances MPI====<br />
<br />
Les séances MPI seront en présentiel (mais ADE fait foi).<br />
<br />
<pre><br />
Séance Thématique Date Horaires Intervenante Salle<br />
1 Définir la problématique 03-févr. 14h-18h Stéphanie Diligent Créalab<br />
2 Gérer le projet en restant agile 10-févr. 8h30 - 12h30 Stéphanie Diligent Créalab<br />
3 Communiquer 24-févr. 8h30 - 12h30 Emmanuelle Tréhoust Créalab<br />
4 Evaluer et valoriser 03-mars 8h30 - 12h30 Emmanuelle Tréhoust Créalab<br />
5 Evaluation 10-mars 8h30 - 12h30 Stéphanie Diligent 105<br />
</pre><br />
<br />
====Propositions de projets S10====<br />
# [[Infrastructure de communication interne au cubesat ATISE du CSUG]] basé sur [[LibCSP]]: Imane El Khantouti ([https://www.csug.fr CSUG]), Frédéric Martin ([https://www.csug.fr CSUG])<br />
# [[Wildcount: Inexpensive Edge sensor for recognizing and counting the presence of humans (anonymous) and animals into wild and protected areas.]] : Didier Donsez, Georges Quénot<br />
# [[LoRaWAN Roaming]] avec [[Chirpstack]] et [[TheThingStack]]: Didier Donsez, Bernard Tourancheau.<br />
# [[Contributions open-source au projet JHipster]] : Didier Donsez<br />
# [[Signature électronique eIDAS]] (JHipster, Apache FOP, visualisateurs PDF pour Angular/Vue/React ..., services tiers de confiance) : Nicolas Palix (Didier DONSEZ).<br />
# [[Contributions open source au projet EdCampus]] : Gérard Pollier (Disrupt Campus), Anthony Geourjon (Disrupt Campus)<br />
# [[Contributions open source au projet SmartRecruiting]] : Gérard Pollier (Disrupt Campus), Anthony Geourjon (Disrupt Campus)<br />
# [[Prototypage d'application mobile pour la vente en direct de produits producteur locaux]], Sylvain Delangue, Gérard Pollier<br />
# [[Secours Montagne avec LoRa|LoRa-valanche: Secours Montagne avec LoRa]] : Bernard Tourancheau en lien avec le PGHM Isère<br />
# [[GenderedNews]], François Portet, Gilles Bastin<br />
# [[Réseaux social d'organisation de sortie]] Olivier Richard<br />
# [[Test d'infrastructures avec NixOS]] Olivier Richard et Quentin Guilloteau<br />
# [[Artiphonie (saison 2)]] Aides aux enfants pour le traitement les troubles Ortophoniques Bastien De Araujo, Guillaume Denis, Estelle Gillet-Perret et Olivier Richard<br />
# [[Covoiturage solidaire avec borne d'appel]] Christine Verdier, Fabrice Forest<br />
<br />
==== Affectations S10====<br />
{|class="wikitable alternance"<br />
|+ Affectation des projets INFO5 2019-2020<br />
|-<br />
|<br />
!scope="col"| Sujet<br />
!scope="col"| Etudiants<br />
!scope="col"| Enseignant(s)<br />
!scope="col"| Fiche de suivi<br />
!scope="col"| Documents<br />
|-<br />
!scope="row"| 8<br />
| [[Secours Montagne avec LoRa|LoRa-valanche]]<br />
| CHATON ALEXANDRA,FRION THOMAS, PASDELOUP ROMAIN<br />
| Bernard Tourancheau<br />
| [[PROJET-INFO5 2021 Secours Montagne avec LoRa | Fiche de suivi]]<br />
| [https://gitlab.com/info5-lora-avalanche/documentation Documents]<br />
|-<br />
!scope="row"| 2<br />
| [[Wildcount:_Inexpensive_Edge_sensor_for_recognizing_and_counting_the_presence_of_humans_(anonymous)_and_animals_into_wild_and_protected_areas.|Wildcount]]<br />
| BEAUGRAND Elisa, DE GAUDENZI Louis, GRAUGNARD Tom, ROLLIN Alexis<br />
| Didier DONSEZ, Georges QUENOT<br />
| [[PROJET-INFO5 2021 Wildcount | Fiche de suivi]]<br />
| [ Documents]<br />
|-<br />
|}<br />
<br />
Pour 2020-2021</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=Projets_2020-2021&diff=50374Projets 2020-20212021-01-28T17:37:37Z<p>Alexis.Rollin: /* Affectations S10 */</p>
<hr />
<div><<[[Projets 2019-2020]] | [[Projets]] | [[Projets 2021-2022]]>><br />
=INFO=<br />
==INFO3==<br />
<br />
==INFO4==<br />
===Projet Semestre S8===<br />
<br />
Enseignants responsables : Olivier Richard, Didier Donsez<br />
<br />
* Dates : Lundi après-midi, Mardi après-midi <br />
* Lancement: 18 Janvier 2021 après midi<br />
* Soutenance à mi-parcours: A définir<br />
* Soutenance: A définir<br />
<br />
* '''Evaluation à mi-parcours le lundi/mardi ???''': Format: 10min (5min de présentation 3 slides au plus, 5min de discussion). Cette évaluation sera prise en compte dans la note finale.<br />
<br />
'''Consignes générales:'''<br />
<br />
* '''Vous devez être pro-actifs !!!''': Si des points sont pas ou mals spécifiés, vous le faîtes et vous justifiez vos choix. Pour les problèmes techniques éventuels vous pouvez: creuser la question, contacter l'auteur du code si il y a lieu, écrire un rapport de bug ('''Attention:''' ca se prépare !), soumettre un patch/pull request, contacter l'enseignant ou la personne référente du projet.<br />
<br />
* '''Vous devez maintenir une fiche de suivi de projet''': elle doit être mise à jour chaque semaine, elle rassemble les élements essentiels du projet, elle indique les évolutions du projet et présente sa feuille de route. '''Note:''' le nom de la fiche doit être composé du nom du projet et suffixé par info4_2020_2021. '''Cette fiche compte pour la note finale'''<br />
<br />
* '''Votre code''' pour doit être hébergé sur le gitlab et à l'URL suivante https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/20-21 , vous utiliserez votre compte UGA.<br />
<br />
* Chaque projet doit avoir '''aux moins 2 dépôts git''':<br />
** '''Un pour les documents''' demandés rapport, présentation de pré-soutenante, de soutenance, flyer. '''Il sera appelé documents.'''<br />
** Un ou plusieurs pour le code, les tests, les évaluations, les preuves de concept, la ou les documentations afférentes. <br />
<br />
* Les '''documents public doivent être rédigés en anglais (README, documentation, commentaires de code, nom de variables et de fonctions)'''. Le *rapport* sera aussi demandé en *anglais* (il fera la taille d'un rapport de TP). Les transparents des présentation peuvent être en anglais ou en francais, la soutenance sera taire en francais.<br />
<br />
* '''La note obtenue''' tiendra compte du '''nombre et de la qualité des commits''' observé dans '''vos dépots git et la branche master''' (or depot documents). La qualité comprend l'intitulé du commit et son contenu. Les notes pourront être différentiées dans un groupe, il n'est pas acceptable de pas avoir de commit dans le(s) dépôt(s) du projet (or dépôt documents).<br />
<br />
* Il est fortement conseillé de suivre un '''développement incrémental''' qui permette d'avoir à tout moment un démonstrateur à présenter, un projet peut être constituer d'une succession de '''démonstrateurs présentables séparément'''.<br />
<br />
* Vous devez faire aussi des '''schémas d'architectures générales et/ou spéficiques, des diagrammes de séquence''', et autre documents de spécification si nécessaire. Ces documents vous serviront de base de discussion/brainstorming interne ainsi que dans vos différents documents (rapport, présentations, documentation). Ces schémas sont avant tout conceptuels et techniques.<br />
<br />
===Propositions de projets S8===<br />
<br />
* 1. [[Contribution au projet STM32Python]], Didier DONSEZ.<br />
* 2. [[Portage du kit station LoRa LRWAN2 de ST sur RIOT OS]], Didier DONSEZ.<br />
* 3+4. [[Portage de la carte de prototypage IoT Nucleo-WL55JC sur RIOT OS]] + [[Portage de la carte de communication LoRa LLCC68MB2BAS sur RIOT OS]], Didier DONSEZ (1 seul groupe de 3 élèves pour les 2 cartes).<br />
* 5. [[Service Web d'équipements embarqués communicant sur bus CAN]] (2 groupes de 2 élèves), Didier DONSEZ.<br />
* 6. [[Application mobile d'enregistrements de noeuds IoT LoRaWAN dans plusieurs réseaux]], Didier DONSEZ.<br />
* 7. [[Evaluation du toolkit AI de STM32 pour l'analyse de l'environnement sonore]], Didier DONSEZ.<br />
* 8. [[Godot Game Engine et tables tactiles]] : démonstration d'un jeu en réseau sur les 3 tables tactiles : (gaming spirit) Olivier RICHARD.<br />
* 9. [[Serveur filière INFO]], Nicolas Palix<br />
* Agriculture connectée en partenariat avec les projets collectifs IESE/MAT<br />
** 10. [[ASAC/AP|Polytech]] : Nicolas Palix<br />
** 11. [[ASAC/SJC|St Cassien]] : Nicolas Palix<br />
* 12. [[ENT Polytech]] avec XMPP/Mumble/BBB/Mattermost/OpenBoard : Nicolas Palix<br />
* 13. [[Polytech Helper Service | Outils d'aide à la gestion de service]], (professionel) Olivier Richard<br />
* 14. [[Rust Engine | Executeur de tâche en Rust]], (exigeant techniquement) Olivier Richard<br />
* 15. [[Retrocompute simulateur | RetroComputing]]: (vintage style) Coupler le simulateur Digital avec un simulateur de processeur 8bits, Olivier Richard<br />
* 16. [[FPGA et Deep Learnning]] Olivier Richard<br />
* 17. [[OpenAPI OAR | OpenAPI pour la gestion de tâches de ressources OAR]], (professionel) Olivier Richard <br />
* 18. [[Monitoring de la plateforme CampusIoT]] : Didier Donsez<br />
<br />
==== Reporté INFO5 21-22 ==== <br />
* 1 heure 1 heure (échange de compétence), etudiant.e.s Emilie Tondeux + ?, tuteur ?<br />
==== Reporté ====<br />
[[Simulateur de réseaux simples avec un FPGA]], (typé recherche/prospectif)<br />
<br />
==== Affectation ====<br />
{|class="wikitable alternance"<br />
|+ Affectation des projets INFO4 2020-2021<br />
|-<br />
|<br />
!scope="col"| Sujet<br />
!scope="col"| Etudiants<br />
!scope="col"| Enseignant(s)<br />
!scope="col"| Fiche de suivi<br />
!scope="col"| Documents<br />
|-<br />
|}<br />
<br />
==INFO5==<br />
===Projet IoT S9===<br />
Enseignants responsables : Bernard Tourancheau<br />
<br />
Calendrier: ??? Septembre à ??? Décembre 2020.<br />
<br />
<br />
===Projet Semestre S10===<br />
<br />
Enseignants responsables : [[user:Donsez|Didier Donsez]]<br />
<br />
Calendrier: 28/01 (13H30-17H30) au 19/03.<br />
<br />
Séances de Management de projets innovants: A voir dessus.<br />
<br />
Réunion de présentation et choix des sujets: 28/01 (13H30-17H30) en salle P257 (voir ADE)<br />
<br />
Démarrage : 29/01 (13H30-17H30)<br />
<br />
Soutenance à mi-parcours : Début Mars, 9H00-11H30 (15 minutes par équipe).<br />
<br />
Soutenance : 19/03/2021.<br />
<br />
====Séances MPI====<br />
<br />
Les séances MPI seront en présentiel (mais ADE fait foi).<br />
<br />
<pre><br />
Séance Thématique Date Horaires Intervenante Salle<br />
1 Définir la problématique 03-févr. 14h-18h Stéphanie Diligent Créalab<br />
2 Gérer le projet en restant agile 10-févr. 8h30 - 12h30 Stéphanie Diligent Créalab<br />
3 Communiquer 24-févr. 8h30 - 12h30 Emmanuelle Tréhoust Créalab<br />
4 Evaluer et valoriser 03-mars 8h30 - 12h30 Emmanuelle Tréhoust Créalab<br />
5 Evaluation 10-mars 8h30 - 12h30 Stéphanie Diligent 105<br />
</pre><br />
<br />
====Propositions de projets S10====<br />
# [[Infrastructure de communication interne au cubesat ATISE du CSUG]] basé sur [[LibCSP]]: Imane El Khantouti ([https://www.csug.fr CSUG]), Frédéric Martin ([https://www.csug.fr CSUG])<br />
# [[Wildcount: Inexpensive Edge sensor for recognizing and counting the presence of humans (anonymous) and animals into wild and protected areas.]] : Didier Donsez, Georges Quénot<br />
# [[LoRaWAN Roaming]] avec [[Chirpstack]] et [[TheThingStack]]: Didier Donsez, Bernard Tourancheau.<br />
# [[Contributions open-source au projet JHipster]] : Didier Donsez<br />
# [[Signature électronique eIDAS]] (JHipster, Apache FOP, visualisateurs PDF pour Angular/Vue/React ..., services tiers de confiance) : Nicolas Palix (Didier DONSEZ).<br />
# [[Contributions open source au projet EdCampus]] : Gérard Pollier (Disrupt Campus), Anthony Geourjon (Disrupt Campus)<br />
# [[Contributions open source au projet SmartRecruiting]] : Gérard Pollier (Disrupt Campus), Anthony Geourjon (Disrupt Campus)<br />
# [[Prototypage d'application mobile pour la vente en direct de produits producteur locaux]], Sylvain Delangue, Gérard Pollier<br />
# [[Secours Montagne avec LoRa|LoRa-valanche: Secours Montagne avec LoRa]] : Bernard Tourancheau en lien avec le PGHM Isère<br />
# [[GenderedNews]], François Portet, Gilles Bastin<br />
# [[Réseaux social d'organisation de sortie]] Olivier Richard<br />
# [[Test d'infrastructures avec NixOS]] Olivier Richard et Quentin Guilloteau<br />
# [[Artiphonie (saison 2)]] Aides aux enfants pour le traitement les troubles Ortophoniques Bastien De Araujo, Guillaume Denis, Estelle Gillet-Perret et Olivier Richard<br />
# [[Covoiturage solidaire avec borne d'appel]] Christine Verdier, Fabrice Forest<br />
<br />
==== Affectations S10====<br />
{|class="wikitable alternance"<br />
|+ Affectation des projets INFO5 2019-2020<br />
|-<br />
|<br />
!scope="col"| Sujet<br />
!scope="col"| Etudiants<br />
!scope="col"| Enseignant(s)<br />
!scope="col"| Fiche de suivi<br />
!scope="col"| Documents<br />
|-<br />
!scope="row"| 8<br />
| [[Secours Montagne avec LoRa|LoRa-valanche]]<br />
| CHATON ALEXANDRA,FRION THOMAS, PASDELOUP ROMAIN<br />
| Bernard Tourancheau<br />
| [[PROJET-INFO5 2021 Secours Montagne avec LoRa | Fiche de suivi]]<br />
| [https://gitlab.com/info5-lora-avalanche/documentation Documents]<br />
|-<br />
!scope="row"| 2<br />
| [[Wildcount: Inexpensive Edge sensor for recognizing and counting the presence of humans (anonymous) and animals into wild and protected areas]]<br />
| BEAUGRAND Elisa, DE GAUDENZI Louis, GRAUGNARD Tom, ROLLIN Alexis<br />
| Didier DONSEZ, Georges QUENOT<br />
| [[PROJET-INFO5 2021 Wildcount | Fiche de suivi]]<br />
| [ Documents]<br />
|-<br />
|}<br />
<br />
Pour 2020-2021</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Fiche&diff=48459VT2020-GraalVM-Fiche2020-11-16T13:22:34Z<p>Alexis.Rollin: /* Fonctionnalités */</p>
<hr />
<div>GraalVM est une machine virtuelle Java développée par [https://fr.wikipedia.org/wiki/Oracle_(entreprise) Oracle] dite "polyglotte" car elle est capable de comprendre de nombreux langages de programmation.<br />
<br />
=Rappels sur l'architecture de la plateforme Java=<br />
<br />
L'architecture de GraalVM se basant sur celle d'un [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit], un rappel sur le fonctionnement de la plateforme Java peut s'avérer utile.<br />
<br />
Tout d'abord, le Java a la particularité d'être un langage à la fois compilé et interprété. Les tâches de compilation et d'interprétation sont distinctes et réalisées par des composants différents.<br />
Comme on peut le voir sur le schéma ci-dessous, le code Java est d'abord compilé en bytecode par un Java Compiler pour ensuite être interprété et exécuté par une Java Virtual Machine.<br />
<br />
[[File:java_platform_architecture2.png|500px|Composition d'un JDK]]<br />
<br />
Il faut donc distinguer dans cette architecture :<br />
* La [https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Java Virtual Machine] (JVM), qui interprète et exécute le code.<br />
* Le [https://fr.wikipedia.org/wiki/Environnement_d'exécution_Java Java Runtime Environment] (JRE), qui est un environnement d'exécution contenant des librairies et la JVM.<br />
* Le [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit] (JDK), qui est composé de librairies en Java, du JRE et du Java Compiler.<br />
<br />
=GraalVM=<br />
<br />
==Abstract==<br />
<br />
''"GraalVM is a high-performance multilingual runtime. It is designed to accelerate the execution of applications written in Java and other JVM languages while also providing runtimes for JavaScript, Ruby, Python, and a number of other popular languages. GraalVM’s polyglot capabilities make it possible to mix multiple programming languages in a single application while eliminating any foreign language call costs."'' - Documentation officielle de GraalVM<br />
<br />
==Origines==<br />
<br />
===Constats===<br />
<br />
Malgré son apparente popularité, le langage Java est sur le déclin. A l'origine, ce langage conçu par Sun Microsystems et dit "JVM" (comme les langages Kotlin ou Scala) avait été conçu avec l'idée de pouvoir être exécuté sur n'importe quelle plateforme ayant une JVM, affranchissant ainsi le développeur des spécificités d'exécution de la plateforme (d'où le slogan ''"Write Once Run Anywere"'' de Sun). Cependant, à cause la surcouche logicielle induite par la JVM, le langage Java a essuyé des critiques sur sa performance et sur sa verbosité.<br />
<br />
S'ajoute à cela un regain de popularité des langages natifs dans les années 2010, notamment grâce à Apple et son développement mobile iOS en Objective-C qui contraste avec Java ou Kotlin (étant tous deux des langages JVM) en terme de performance.<br />
<br />
Pour répondre à ces problématiques, l'entreprise Oracle se doit d'adapter constamment Java afin de rester compétitive, et sa JVM avec.<br />
<br />
===Ce qui existait déjà===<br />
<br />
Evidemment, Java fonctionnait bien avant l'arrivée de GraalVM, ce qui signifie qu'il existait donc déjà des machines virtuelles. La plus utilisée d'entre elles est [https://fr.wikipedia.org/wiki/HotSpot HotSpot], écrite en C++. Elle a été créé par Sun et appartient désormais à Oracle depuis le rachat de Sun. Notez que toutes les JVM (ou autres composants de la plateforme Java), ne sont pas forcément propriété d'Oracle : par exemple, OpenJ9 est une JVM dont la propriété revient à IBM et à la fondation Eclipse. Ces composants doivent ceci dit respecter des [https://docs.oracle.com/javase/specs/ spécifications dictées par Sun].<br />
<br />
La première version de Hotspot n'était qu'un interpréteur, puis elle a été améliorée avec un ajout de la [https://fr.wikipedia.org/wiki/Compilation_%C3%A0_la_vol%C3%A9e compilation à la volée (Just-In-Time)]. Ensuite elle a été capable de détecter les portions de code les plus fréquemment utilisés (les ''hotspots'') et de les optimiser.<br />
<br />
Ceci dit, GraalVM trouve ses racines dans le projet [https://en.wikipedia.org/wiki/Maxine_Virtual_Machine Maxine] (dévelopé par Sun Microsystems Laboratories en 2005), dont l'objectif était d'écrire une JVM en langage Java pour s'affranchir des problèmes de développement liés au C++, comme la gestion de la mémoire. Le projet s'est avéré trop ambitieux à l'époque mais a servi de point de départ pour GraalVM presque 15 ans plus tard.<br />
<br />
===Solution===<br />
<br />
Les objectifs ayant mené à la création de GraalVM sont multiples :<br />
* Avoir un environnement qui accélère l'exécution des applications écrites en Java ou d'autres langages JVM afin de rivaliser avec les langages natifs<br />
* Fournir un environnement d'exécution qui supporte plusieurs langages de programmation, supprimant ainsi l'isolation entre eux et établissant une véritable inter-opérabilité.<br />
<br />
La solution développée est GraalVM, une machine virtuelle haute performance (d'après les dires d'Oracle) qui prend en fait la forme d'un JDK dont la partie VM a été grandement améliorée.<br />
<br />
==Fonctionnalités==<br />
<br />
Les principaux atouts de GraalVM sont:<br />
* Graal Compiler, un nouveau compilateur [https://fr.wikipedia.org/wiki/Compilation_%C3%A0_la_vol%C3%A9e JIT (Just-In-Time)] pour Java<br />
* GraalVM Native Image, permettant la compilation [https://fr.wikipedia.org/wiki/Compilation_anticip%C3%A9e AOT (Ahead-Of-Time)] pour les applications Java. Le compilateur AOT permet ici de compiler directement le code Java en code machine.<br />
* Truffle Language Implementation framework et GraalVM SDK, fournissant des runtimes pour d'autres langages de programmation<br />
* LLVM Runtime et JavaScript Runtime, des runtimes pour les langages LLVM et Javascript.<br />
<br />
On a en plus la possibilité d'installer des langages et même de définir le nôtre. Actuellement, tous les langages suivants sont compatibles avec Graal (moyennant installations supplémentaires) :<br />
[[File:Languages.png|600px|Listes des langages compatibles avec GraalVM]]<br />
<br />
==Architecture==<br />
<br />
[[File:graal_vm_architecture.jpg | 500px | thumb | right | Architecture de la JVM GraalVM]]<br />
<br />
GraalVM réutilise l'architecture d'OpenJDK (qui est sans grande surprise un JDK), mais avec quelques particularités au niveau de la JVM :<br />
* Il réutilise la VM Hotspot, mais de laquelle on a retiré le JIT Compiler. <br />
* Il bénéficie d'un nouveau compilateur JIT, Graal Compiler, écrit en Java et en dehors de Hotspot. Il a pour mission de transformer du bytecode en code machine (ne pas confondre avec le Java Compiler, plus haut niveau).<br />
* Pour permettre à la JVM Hotspot d'utiliser un compilateur écrit en Java, une couche intermédiaire est nécessaire : la JVM Compiler Interface.<br />
* Tout ce qui doit arriver au compilateur JIT doit être du bytecode. C'est pourquoi les langages non-JVM ne peuvent pas être directement pris en entrée de Graal Compiler. La couche Truffle framework répond à cette problématique. Truffle est un framework open-source qui sert à définir nos propres langages de programmation à travers un AST (Abstract Syntax Tree) et à construire des interpréteurs pour ce dernier. Il est réutilisé dans GraalVM pour définir des implémentations Truffle de Python, Ruby ou encore Javascript. Attention, l'implémentation d'un langage sous Truffle n'est pas le langage en lui-même, ce qui pose quelques problèmes comme on peut le voir dans la partie Limites.<br />
* La couche Truffle suffisait pour les langages interprétés puisque Truffle construit des interpréteurs. Mais pour les langages LLVM (Low Level Virtual Machine) comme le C, le C++ ou le Fortran, une surcouche est nécessaire. Sulong est une LLVM qui permet de produire du bitcode en s'appuyant sur les fonctionnalités de Truffle.<br />
<br />
==Utilisation==<br />
<br />
===Installation===<br />
<br />
GraalVM est très simple à installer.<br />
<br />
* Naviguez sur le [https://github.com/graalvm/graalvm-ce-builds/release git de GraalVM] et téléchargez la version de GraalVM compatible avec notre version de Java/OpenJDK, que l'on peut connaître avec la commande <code>java -version</code>.<br />
<br />
* Dézippez l'archive à l'endroit de votre choix.<br />
<pre>tar -xzf <graalvm-archive>.tar.gz</pre><br />
<br />
* Configurez votre variable d'environnement PATH:<br />
<pre>export PATH=<graalvm>/bin:$PATH</pre><br />
Si vous souhaitez remplacer votre JDK par GraalVM pour toutes vos applications utilisant Java, vous pouvez changer la variable d'environnement <code>JAVA_HOME</code>.<br />
<pre>export JAVA_HOME=<graalvm></pre><br />
Si vous ne souhaitez pas modifier votre <code>JAVA_HOME</code>, vous pouvez définir une variable d'environnement <code>GRAAL_HOME</code> qui vous sera utile pour ne pas avoir à réécrire le chemin complet de Graal.<br />
Notez également que vous pouvez rendre les commandes au-dessus permanentes en les ajoutant à votre fichier <code>.bashrc</code> ou <code>.zshrc</code>.<br />
<br />
===Exécution===<br />
<br />
Le dossier /bin est similaire à un JDK standard, mais contient des launchers additionnels (en plus de <code>javac</code> pour le Java):<br />
* <code>js</code>, un launcher JavaScript<br />
* <code>node</code>, un launcher Node.js<br />
* <code>lli</code>, un launcher LLVM<br />
En d'autres termes, GraalVM ne comprend que le Java, Node.js (grâce au Javascript Runtime) et les langages LLVM (grâce au LLVM Runtime). Cependant, d'autres launchers peuvent être installés avec la commande :<br />
<pre><br />
gu install <nom_du_langage><br />
</pre><br />
<br />
====Par ligne de commande====<br />
<br />
En règle générale, les commandes d'exécution sont de la forme :<br />
<pre><br />
<nom_du_laucher> <nom_du_programme><br />
</pre><br />
Par exemple :<br />
<pre><br />
node app.js<br />
</pre><br />
Les programmes LLVM doivent êtres compilés avant avec l'outil LLVM Toolchain car le launcher lli ne comprend que du bitcode :<br />
<pre><br />
gu install llvm-toolchain<br />
export LLVM_TOOLCHAIN=$(lli --print-toolchain-path)<br />
$LLVM_TOOLCHAIN/clang hello.c -o hello<br />
lli hello<br />
</pre><br />
====Dans un IDE====<br />
<br />
Dans l'IDE, il suffit de remplacer le path du JRE ou du JDK par le path de GraalVM.<br />
Sous eclipse par exemple, cela peut se faire en allant dans ''Window/Preferences/Java/Installed JREs''.<br />
<br />
[[File:installation_ide.png|500px|Spécification du JDK dans l'IDE]]<br />
<br />
====Mixage de langages====<br />
<br />
Au niveau du JDK, Graal propose tout un ensemble de librairies permettant l'inter-opérabilité entre les langages. Par exemple, il est possible depuis un programme Java d'importer la libraire <code>org.graalvm.polyglot</code> pour exécuter les fonctions d'un programme dans un autre langage et en récupérer le résultat.<br />
<br />
==Limites==<br />
<br />
Même si les promesses de GraalVM, à savoir l'amélioration des performances à l'exécution des langages JVM et le polyglottisme, sont respectées, l'outil d'Oracle rencontre quand même quelques limites :<br />
<br />
* On peut regretter que les langages les plus bas niveaux comme le C soient paradoxalement ceux qui traversent le plus de couches logicielles dans l'architecture de GraalVM. Leur interêt en termes de performance est donc extrêmement diminué puisqu'ils nécessitent de nombreuses opérations pour être transformé en bytecode, bytecode qui est logé à la même enseigne que le bytecode issu de code Java au yeux du compilateur.<br />
<br />
* En règle générale, les performances hors langages JVM sont tout de même loins d'être extraordinaires. L'inter-opérabilité entre langages est fonctionnelles mais coûteuse en ressources. A en croire la documentation, l'overhead est quand même évité, c'est à dire que les données sont échangées entre les différents langages sans être dupliquées.<br />
<br />
* Les langages compris par GraalVM étant en fait des implémentations Truffle de langages et pas les langages en eux-mêmes, il manque les librairies utiles à chaque langage. Il est donc impossible par exemple, d'utiliser ''matplolib'' dans un programme Python. Les programmes en sont plus ou moins réduit à de l'algorithmie selon les capacités natives du langage.<br />
<br />
=Demonstration=<br />
<br />
Une démonstration de GraalVM est accessible à ce lien : [[VT2020-GraalVM-Demo|VT2020-GraalVM-Demo]]<br />
<br />
=Sources=<br />
# <div id="GraalVM">[https://www.graalvm.org/docs/getting-started GraalVM Official documentation: '''Getting Started''']</div><br />
# <div id="GraalVM">[https://www.graalvm.org/docs/introduction GraalVM Official documentation: '''Introduction''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/GraalVM Wikipedia: '''GraalVM''']</div><br />
# <div id="GraalVM">[https://medium.com/@nelvadas/a-la-d%C3%A9couverte-de-graalvm-5adbe0487624 Elvadas Nono : '''A la découverte de GraalVM (2020)''']</div><br />
# <div id="GraalVM">[https://www.theserverside.com/definition/GraalVM ServerSide: '''Definition of GraalVM''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Wikipedia: '''Machine Virtuelle Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/HotSpot Wikipedia: '''Hotspot''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/Maxine_Virtual_Machine_Kit Wikipedia: '''Maxine''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Java_Development_Kit Wikipedia: '''Java Development Kit''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://dev.to/abdulfousan/graalvm-polyglot-virtual-machine-4mn2 Abdul Fousan: '''GraalVM Polyglot Virtual Machine''']</div><br />
# <div id="GraalVM">[https://blog.plan99.net/graal-truffle-134d8f28fb69 Mike Hearn: '''GraalVM and Truffle''']</div><br />
# <div id="GraalVM">[https://www.trufflesuite.com/docs/truffle/overview Truffle Official documentation: '''GraalVM and Truffle''']</div><br />
# <div id="GraalVM">[https://greenlab.di.uminho.pt/wp-content/uploads/2017/10/sleFinal.pdf Rui Pereira, Marco Couto, Francisco Ribeiro, Rui Rua, Jácome Cunha, João Paulo Fernandes, João Saraiva: '''Energy efficiency across languages''']</div><br />
<br />
=Veille Technologique 2020=<br />
* Année : [[VT2020|VT2021]]<br />
* Sujet : GraalVM<br />
* Slides : [[Media:VT2020-GraalVM-Presentation.pdf|Slides]]<br />
* Auteurs : [[User:Alexis.ROLLIN]]</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Fiche&diff=48458VT2020-GraalVM-Fiche2020-11-16T12:57:04Z<p>Alexis.Rollin: /* Sources */</p>
<hr />
<div>GraalVM est une machine virtuelle Java développée par [https://fr.wikipedia.org/wiki/Oracle_(entreprise) Oracle] dite "polyglotte" car elle est capable de comprendre de nombreux langages de programmation.<br />
<br />
=Rappels sur l'architecture de la plateforme Java=<br />
<br />
L'architecture de GraalVM se basant sur celle d'un [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit], un rappel sur le fonctionnement de la plateforme Java peut s'avérer utile.<br />
<br />
Tout d'abord, le Java a la particularité d'être un langage à la fois compilé et interprété. Les tâches de compilation et d'interprétation sont distinctes et réalisées par des composants différents.<br />
Comme on peut le voir sur le schéma ci-dessous, le code Java est d'abord compilé en bytecode par un Java Compiler pour ensuite être interprété et exécuté par une Java Virtual Machine.<br />
<br />
[[File:java_platform_architecture2.png|500px|Composition d'un JDK]]<br />
<br />
Il faut donc distinguer dans cette architecture :<br />
* La [https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Java Virtual Machine] (JVM), qui interprète et exécute le code.<br />
* Le [https://fr.wikipedia.org/wiki/Environnement_d'exécution_Java Java Runtime Environment] (JRE), qui est un environnement d'exécution contenant des librairies et la JVM.<br />
* Le [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit] (JDK), qui est composé de librairies en Java, du JRE et du Java Compiler.<br />
<br />
=GraalVM=<br />
<br />
==Abstract==<br />
<br />
''"GraalVM is a high-performance multilingual runtime. It is designed to accelerate the execution of applications written in Java and other JVM languages while also providing runtimes for JavaScript, Ruby, Python, and a number of other popular languages. GraalVM’s polyglot capabilities make it possible to mix multiple programming languages in a single application while eliminating any foreign language call costs."'' - Documentation officielle de GraalVM<br />
<br />
==Origines==<br />
<br />
===Constats===<br />
<br />
Malgré son apparente popularité, le langage Java est sur le déclin. A l'origine, ce langage conçu par Sun Microsystems et dit "JVM" (comme les langages Kotlin ou Scala) avait été conçu avec l'idée de pouvoir être exécuté sur n'importe quelle plateforme ayant une JVM, affranchissant ainsi le développeur des spécificités d'exécution de la plateforme (d'où le slogan ''"Write Once Run Anywere"'' de Sun). Cependant, à cause la surcouche logicielle induite par la JVM, le langage Java a essuyé des critiques sur sa performance et sur sa verbosité.<br />
<br />
S'ajoute à cela un regain de popularité des langages natifs dans les années 2010, notamment grâce à Apple et son développement mobile iOS en Objective-C qui contraste avec Java ou Kotlin (étant tous deux des langages JVM) en terme de performance.<br />
<br />
Pour répondre à ces problématiques, l'entreprise Oracle se doit d'adapter constamment Java afin de rester compétitive, et sa JVM avec.<br />
<br />
===Ce qui existait déjà===<br />
<br />
Evidemment, Java fonctionnait bien avant l'arrivée de GraalVM, ce qui signifie qu'il existait donc déjà des machines virtuelles. La plus utilisée d'entre elles est [https://fr.wikipedia.org/wiki/HotSpot HotSpot], écrite en C++. Elle a été créé par Sun et appartient désormais à Oracle depuis le rachat de Sun. Notez que toutes les JVM (ou autres composants de la plateforme Java), ne sont pas forcément propriété d'Oracle : par exemple, OpenJ9 est une JVM dont la propriété revient à IBM et à la fondation Eclipse. Ces composants doivent ceci dit respecter des [https://docs.oracle.com/javase/specs/ spécifications dictées par Sun].<br />
<br />
La première version de Hotspot n'était qu'un interpréteur, puis elle a été améliorée avec un ajout de la [https://fr.wikipedia.org/wiki/Compilation_%C3%A0_la_vol%C3%A9e compilation à la volée (Just-In-Time)]. Ensuite elle a été capable de détecter les portions de code les plus fréquemment utilisés (les ''hotspots'') et de les optimiser.<br />
<br />
Ceci dit, GraalVM trouve ses racines dans le projet [https://en.wikipedia.org/wiki/Maxine_Virtual_Machine Maxine] (dévelopé par Sun Microsystems Laboratories en 2005), dont l'objectif était d'écrire une JVM en langage Java pour s'affranchir des problèmes de développement liés au C++, comme la gestion de la mémoire. Le projet s'est avéré trop ambitieux à l'époque mais a servi de point de départ pour GraalVM presque 15 ans plus tard.<br />
<br />
===Solution===<br />
<br />
Les objectifs ayant mené à la création de GraalVM sont multiples :<br />
* Avoir un environnement qui accélère l'exécution des applications écrites en Java ou d'autres langages JVM afin de rivaliser avec les langages natifs<br />
* Fournir un environnement d'exécution qui supporte plusieurs langages de programmation, supprimant ainsi l'isolation entre eux et établissant une véritable inter-opérabilité.<br />
<br />
La solution développée est GraalVM, une machine virtuelle haute performance (d'après les dires d'Oracle) qui prend en fait la forme d'un JDK dont la partie VM a été grandement améliorée.<br />
<br />
==Fonctionnalités==<br />
<br />
Les principaux atouts de GraalVM sont:<br />
* Graal Compiler, un nouveau compilateur [https://fr.wikipedia.org/wiki/Compilation_%C3%A0_la_vol%C3%A9e JIT (Just-In-Time)] pour Java<br />
* GraalVM Native Image, permettant la compilation [https://fr.wikipedia.org/wiki/Compilation_anticip%C3%A9e AOT (Ahead-Of-Time)] pour les applications Java. Le compilateur AOT permet ici de compiler directement le code Java en code machine.<br />
* Truffle Language Implementation framework et GraalVM SDK, fournissant des runtimes pour d'autres langages de programmation<br />
* LLVM Runtime et JavaScript Runtime<br />
<br />
On a en plus la possibilité d'installer des langages et même de définir le nôtre. Actuellement, tous les langages suivants sont compatibles avec Graal (moyennant installations supplémentaires) :<br />
[[File:Languages.png|600px|Listes des langages compatibles avec GraalVM]]<br />
<br />
==Architecture==<br />
<br />
[[File:graal_vm_architecture.jpg | 500px | thumb | right | Architecture de la JVM GraalVM]]<br />
<br />
GraalVM réutilise l'architecture d'OpenJDK (qui est sans grande surprise un JDK), mais avec quelques particularités au niveau de la JVM :<br />
* Il réutilise la VM Hotspot, mais de laquelle on a retiré le JIT Compiler. <br />
* Il bénéficie d'un nouveau compilateur JIT, Graal Compiler, écrit en Java et en dehors de Hotspot. Il a pour mission de transformer du bytecode en code machine (ne pas confondre avec le Java Compiler, plus haut niveau).<br />
* Pour permettre à la JVM Hotspot d'utiliser un compilateur écrit en Java, une couche intermédiaire est nécessaire : la JVM Compiler Interface.<br />
* Tout ce qui doit arriver au compilateur JIT doit être du bytecode. C'est pourquoi les langages non-JVM ne peuvent pas être directement pris en entrée de Graal Compiler. La couche Truffle framework répond à cette problématique. Truffle est un framework open-source qui sert à définir nos propres langages de programmation à travers un AST (Abstract Syntax Tree) et à construire des interpréteurs pour ce dernier. Il est réutilisé dans GraalVM pour définir des implémentations Truffle de Python, Ruby ou encore Javascript. Attention, l'implémentation d'un langage sous Truffle n'est pas le langage en lui-même, ce qui pose quelques problèmes comme on peut le voir dans la partie Limites.<br />
* La couche Truffle suffisait pour les langages interprétés puisque Truffle construit des interpréteurs. Mais pour les langages LLVM (Low Level Virtual Machine) comme le C, le C++ ou le Fortran, une surcouche est nécessaire. Sulong est une LLVM qui permet de produire du bitcode en s'appuyant sur les fonctionnalités de Truffle.<br />
<br />
==Utilisation==<br />
<br />
===Installation===<br />
<br />
GraalVM est très simple à installer.<br />
<br />
* Naviguez sur le [https://github.com/graalvm/graalvm-ce-builds/release git de GraalVM] et téléchargez la version de GraalVM compatible avec notre version de Java/OpenJDK, que l'on peut connaître avec la commande <code>java -version</code>.<br />
<br />
* Dézippez l'archive à l'endroit de votre choix.<br />
<pre>tar -xzf <graalvm-archive>.tar.gz</pre><br />
<br />
* Configurez votre variable d'environnement PATH:<br />
<pre>export PATH=<graalvm>/bin:$PATH</pre><br />
Si vous souhaitez remplacer votre JDK par GraalVM pour toutes vos applications utilisant Java, vous pouvez changer la variable d'environnement <code>JAVA_HOME</code>.<br />
<pre>export JAVA_HOME=<graalvm></pre><br />
Si vous ne souhaitez pas modifier votre <code>JAVA_HOME</code>, vous pouvez définir une variable d'environnement <code>GRAAL_HOME</code> qui vous sera utile pour ne pas avoir à réécrire le chemin complet de Graal.<br />
Notez également que vous pouvez rendre les commandes au-dessus permanentes en les ajoutant à votre fichier <code>.bashrc</code> ou <code>.zshrc</code>.<br />
<br />
===Exécution===<br />
<br />
Le dossier /bin est similaire à un JDK standard, mais contient des launchers additionnels (en plus de <code>javac</code> pour le Java):<br />
* <code>js</code>, un launcher JavaScript<br />
* <code>node</code>, un launcher Node.js<br />
* <code>lli</code>, un launcher LLVM<br />
En d'autres termes, GraalVM ne comprend que le Java, Node.js (grâce au Javascript Runtime) et les langages LLVM (grâce au LLVM Runtime). Cependant, d'autres launchers peuvent être installés avec la commande :<br />
<pre><br />
gu install <nom_du_langage><br />
</pre><br />
<br />
====Par ligne de commande====<br />
<br />
En règle générale, les commandes d'exécution sont de la forme :<br />
<pre><br />
<nom_du_laucher> <nom_du_programme><br />
</pre><br />
Par exemple :<br />
<pre><br />
node app.js<br />
</pre><br />
Les programmes LLVM doivent êtres compilés avant avec l'outil LLVM Toolchain car le launcher lli ne comprend que du bitcode :<br />
<pre><br />
gu install llvm-toolchain<br />
export LLVM_TOOLCHAIN=$(lli --print-toolchain-path)<br />
$LLVM_TOOLCHAIN/clang hello.c -o hello<br />
lli hello<br />
</pre><br />
====Dans un IDE====<br />
<br />
Dans l'IDE, il suffit de remplacer le path du JRE ou du JDK par le path de GraalVM.<br />
Sous eclipse par exemple, cela peut se faire en allant dans ''Window/Preferences/Java/Installed JREs''.<br />
<br />
[[File:installation_ide.png|500px|Spécification du JDK dans l'IDE]]<br />
<br />
====Mixage de langages====<br />
<br />
Au niveau du JDK, Graal propose tout un ensemble de librairies permettant l'inter-opérabilité entre les langages. Par exemple, il est possible depuis un programme Java d'importer la libraire <code>org.graalvm.polyglot</code> pour exécuter les fonctions d'un programme dans un autre langage et en récupérer le résultat.<br />
<br />
==Limites==<br />
<br />
Même si les promesses de GraalVM, à savoir l'amélioration des performances à l'exécution des langages JVM et le polyglottisme, sont respectées, l'outil d'Oracle rencontre quand même quelques limites :<br />
<br />
* On peut regretter que les langages les plus bas niveaux comme le C soient paradoxalement ceux qui traversent le plus de couches logicielles dans l'architecture de GraalVM. Leur interêt en termes de performance est donc extrêmement diminué puisqu'ils nécessitent de nombreuses opérations pour être transformé en bytecode, bytecode qui est logé à la même enseigne que le bytecode issu de code Java au yeux du compilateur.<br />
<br />
* En règle générale, les performances hors langages JVM sont tout de même loins d'être extraordinaires. L'inter-opérabilité entre langages est fonctionnelles mais coûteuse en ressources. A en croire la documentation, l'overhead est quand même évité, c'est à dire que les données sont échangées entre les différents langages sans être dupliquées.<br />
<br />
* Les langages compris par GraalVM étant en fait des implémentations Truffle de langages et pas les langages en eux-mêmes, il manque les librairies utiles à chaque langage. Il est donc impossible par exemple, d'utiliser ''matplolib'' dans un programme Python. Les programmes en sont plus ou moins réduit à de l'algorithmie selon les capacités natives du langage.<br />
<br />
=Demonstration=<br />
<br />
Une démonstration de GraalVM est accessible à ce lien : [[VT2020-GraalVM-Demo|VT2020-GraalVM-Demo]]<br />
<br />
=Sources=<br />
# <div id="GraalVM">[https://www.graalvm.org/docs/getting-started GraalVM Official documentation: '''Getting Started''']</div><br />
# <div id="GraalVM">[https://www.graalvm.org/docs/introduction GraalVM Official documentation: '''Introduction''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/GraalVM Wikipedia: '''GraalVM''']</div><br />
# <div id="GraalVM">[https://medium.com/@nelvadas/a-la-d%C3%A9couverte-de-graalvm-5adbe0487624 Elvadas Nono : '''A la découverte de GraalVM (2020)''']</div><br />
# <div id="GraalVM">[https://www.theserverside.com/definition/GraalVM ServerSide: '''Definition of GraalVM''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Wikipedia: '''Machine Virtuelle Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/HotSpot Wikipedia: '''Hotspot''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/Maxine_Virtual_Machine_Kit Wikipedia: '''Maxine''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Java_Development_Kit Wikipedia: '''Java Development Kit''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://dev.to/abdulfousan/graalvm-polyglot-virtual-machine-4mn2 Abdul Fousan: '''GraalVM Polyglot Virtual Machine''']</div><br />
# <div id="GraalVM">[https://blog.plan99.net/graal-truffle-134d8f28fb69 Mike Hearn: '''GraalVM and Truffle''']</div><br />
# <div id="GraalVM">[https://www.trufflesuite.com/docs/truffle/overview Truffle Official documentation: '''GraalVM and Truffle''']</div><br />
# <div id="GraalVM">[https://greenlab.di.uminho.pt/wp-content/uploads/2017/10/sleFinal.pdf Rui Pereira, Marco Couto, Francisco Ribeiro, Rui Rua, Jácome Cunha, João Paulo Fernandes, João Saraiva: '''Energy efficiency across languages''']</div><br />
<br />
=Veille Technologique 2020=<br />
* Année : [[VT2020|VT2021]]<br />
* Sujet : GraalVM<br />
* Slides : [[Media:VT2020-GraalVM-Presentation.pdf|Slides]]<br />
* Auteurs : [[User:Alexis.ROLLIN]]</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Fiche&diff=48347VT2020-GraalVM-Fiche2020-11-15T10:06:59Z<p>Alexis.Rollin: /* Mixage de langages */</p>
<hr />
<div>GraalVM est une machine virtuelle Java développée par [https://fr.wikipedia.org/wiki/Oracle_(entreprise) Oracle] dite "polyglotte" car elle est capable de comprendre de nombreux langages de programmation.<br />
<br />
=Rappels sur l'architecture de la plateforme Java=<br />
<br />
L'architecture de GraalVM se basant sur celle d'un [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit], un rappel sur le fonctionnement de la plateforme Java peut s'avérer utile.<br />
<br />
Tout d'abord, le Java a la particularité d'être un langage à la fois compilé et interprété. Les tâches de compilation et d'interprétation sont distinctes et réalisées par des composants différents.<br />
Comme on peut le voir sur le schéma ci-dessous, le code Java est d'abord compilé en bytecode par un Java Compiler pour ensuite être interprété et exécuté par une Java Virtual Machine.<br />
<br />
[[File:java_platform_architecture2.png|500px|Composition d'un JDK]]<br />
<br />
Il faut donc distinguer dans cette architecture :<br />
* La [https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Java Virtual Machine] (JVM), qui interprète et exécute le code.<br />
* Le [https://fr.wikipedia.org/wiki/Environnement_d'exécution_Java Java Runtime Environment] (JRE), qui est un environnement d'exécution contenant des librairies et la JVM.<br />
* Le [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit] (JDK), qui est composé de librairies en Java, du JRE et du Java Compiler.<br />
<br />
=GraalVM=<br />
<br />
==Abstract==<br />
<br />
''"GraalVM is a high-performance multilingual runtime. It is designed to accelerate the execution of applications written in Java and other JVM languages while also providing runtimes for JavaScript, Ruby, Python, and a number of other popular languages. GraalVM’s polyglot capabilities make it possible to mix multiple programming languages in a single application while eliminating any foreign language call costs."'' - Documentation officielle de GraalVM<br />
<br />
==Origines==<br />
<br />
===Constats===<br />
<br />
Malgré son apparente popularité, le langage Java est sur le déclin. A l'origine, ce langage conçu par Sun Microsystems et dit "JVM" (comme les langages Kotlin ou Scala) avait été conçu avec l'idée de pouvoir être exécuté sur n'importe quelle plateforme ayant une JVM, affranchissant ainsi le développeur des spécificités d'exécution de la plateforme (d'où le slogan ''"Write Once Run Anywere"'' de Sun). Cependant, à cause la surcouche logicielle induite par la JVM, le langage Java a essuyé des critiques sur sa performance et sur sa verbosité.<br />
<br />
S'ajoute à cela un regain de popularité des langages natifs dans les années 2010, notamment grâce à Apple et son développement mobile iOS en Objective-C qui contraste avec Java ou Kotlin (étant tous deux des langages JVM) en terme de performance.<br />
<br />
Pour répondre à ces problématiques, l'entreprise Oracle se doit d'adapter constamment Java afin de rester compétitive, et sa JVM avec.<br />
<br />
===Ce qui existait déjà===<br />
<br />
Evidemment, Java fonctionnait bien avant l'arrivée de GraalVM, ce qui signifie qu'il existait donc déjà des machines virtuelles. La plus utilisée d'entre elles est [https://fr.wikipedia.org/wiki/HotSpot HotSpot], écrite en C++. Elle a été créé par Sun et appartient désormais à Oracle depuis le rachat de Sun. Notez que toutes les JVM (ou autres composants de la plateforme Java), ne sont pas forcément propriété d'Oracle : par exemple, OpenJ9 est une JVM dont la propriété revient à IBM et à la fondation Eclipse. Ces composants doivent ceci dit respecter des [https://docs.oracle.com/javase/specs/ spécifications dictées par Sun].<br />
<br />
La première version de Hotspot n'était qu'un interpréteur, puis elle a été améliorée avec un ajout de la [https://fr.wikipedia.org/wiki/Compilation_%C3%A0_la_vol%C3%A9e compilation à la volée (Just-In-Time)]. Ensuite elle a été capable de détecter les portions de code les plus fréquemment utilisés (les ''hotspots'') et de les optimiser.<br />
<br />
Ceci dit, GraalVM trouve ses racines dans le projet [https://en.wikipedia.org/wiki/Maxine_Virtual_Machine Maxine] (dévelopé par Sun Microsystems Laboratories en 2005), dont l'objectif était d'écrire une JVM en langage Java pour s'affranchir des problèmes de développement liés au C++, comme la gestion de la mémoire. Le projet s'est avéré trop ambitieux à l'époque mais a servi de point de départ pour GraalVM presque 15 ans plus tard.<br />
<br />
===Solution===<br />
<br />
Les objectifs ayant mené à la création de GraalVM sont multiples :<br />
* Avoir un environnement qui accélère l'exécution des applications écrites en Java ou d'autres langages JVM afin de rivaliser avec les langages natifs<br />
* Fournir un environnement d'exécution qui supporte plusieurs langages de programmation, supprimant ainsi l'isolation entre eux et établissant une véritable inter-opérabilité.<br />
<br />
La solution développée est GraalVM, une machine virtuelle haute performance (d'après les dires d'Oracle) qui prend en fait la forme d'un JDK dont la partie VM a été grandement améliorée.<br />
<br />
==Fonctionnalités==<br />
<br />
Les principaux atouts de GraalVM sont:<br />
* Graal Compiler, un nouveau compilateur [https://fr.wikipedia.org/wiki/Compilation_%C3%A0_la_vol%C3%A9e JIT (Just-In-Time)] pour Java<br />
* GraalVM Native Image, permettant la compilation [https://fr.wikipedia.org/wiki/Compilation_anticip%C3%A9e AOT (Ahead-Of-Time)] pour les applications Java. Le compilateur AOT permet ici de compiler directement le code Java en code machine.<br />
* Truffle Language Implementation framework et GraalVM SDK, fournissant des runtimes pour d'autres langages de programmation<br />
* LLVM Runtime et JavaScript Runtime<br />
<br />
On a en plus la possibilité d'installer des langages et même de définir le nôtre. Actuellement, tous les langages suivants sont compatibles avec Graal (moyennant installations supplémentaires) :<br />
[[File:Languages.png|600px|Listes des langages compatibles avec GraalVM]]<br />
<br />
==Architecture==<br />
<br />
[[File:graal_vm_architecture.jpg | 500px | thumb | right | Architecture de la JVM GraalVM]]<br />
<br />
GraalVM réutilise l'architecture d'OpenJDK (qui est sans grande surprise un JDK), mais avec quelques particularités au niveau de la JVM :<br />
* Il réutilise la VM Hotspot, mais de laquelle on a retiré le JIT Compiler. <br />
* Il bénéficie d'un nouveau compilateur JIT, Graal Compiler, écrit en Java et en dehors de Hotspot. Il a pour mission de transformer du bytecode en code machine (ne pas confondre avec le Java Compiler, plus haut niveau).<br />
* Pour permettre à la JVM Hotspot d'utiliser un compilateur écrit en Java, une couche intermédiaire est nécessaire : la JVM Compiler Interface.<br />
* Tout ce qui doit arriver au compilateur JIT doit être du bytecode. C'est pourquoi les langages non-JVM ne peuvent pas être directement pris en entrée de Graal Compiler. La couche Truffle framework répond à cette problématique. Truffle est un framework open-source qui sert à définir nos propres langages de programmation à travers un AST (Abstract Syntax Tree) et à construire des interpréteurs pour ce dernier. Il est réutilisé dans GraalVM pour définir des implémentations Truffle de Python, Ruby ou encore Javascript. Attention, l'implémentation d'un langage sous Truffle n'est pas le langage en lui-même, ce qui pose quelques problèmes comme on peut le voir dans la partie Limites.<br />
* La couche Truffle suffisait pour les langages interprétés puisque Truffle construit des interpréteurs. Mais pour les langages LLVM (Low Level Virtual Machine) comme le C, le C++ ou le Fortran, une surcouche est nécessaire. Sulong est une LLVM qui permet de produire du bitcode en s'appuyant sur les fonctionnalités de Truffle.<br />
<br />
==Utilisation==<br />
<br />
===Installation===<br />
<br />
GraalVM est très simple à installer.<br />
<br />
* Naviguez sur le [https://github.com/graalvm/graalvm-ce-builds/release git de GraalVM] et téléchargez la version de GraalVM compatible avec notre version de Java/OpenJDK, que l'on peut connaître avec la commande <code>java -version</code>.<br />
<br />
* Dézippez l'archive à l'endroit de votre choix.<br />
<pre>tar -xzf <graalvm-archive>.tar.gz</pre><br />
<br />
* Configurez votre variable d'environnement PATH:<br />
<pre>export PATH=<graalvm>/bin:$PATH</pre><br />
Si vous souhaitez remplacer votre JDK par GraalVM pour toutes vos applications utilisant Java, vous pouvez changer la variable d'environnement <code>JAVA_HOME</code>.<br />
<pre>export JAVA_HOME=<graalvm></pre><br />
Si vous ne souhaitez pas modifier votre <code>JAVA_HOME</code>, vous pouvez définir une variable d'environnement <code>GRAAL_HOME</code> qui vous sera utile pour ne pas avoir à réécrire le chemin complet de Graal.<br />
Notez également que vous pouvez rendre les commandes au-dessus permanentes en les ajoutant à votre fichier <code>.bashrc</code> ou <code>.zshrc</code>.<br />
<br />
===Exécution===<br />
<br />
Le dossier /bin est similaire à un JDK standard, mais contient des launchers additionnels (en plus de <code>javac</code> pour le Java):<br />
* <code>js</code>, un launcher JavaScript<br />
* <code>node</code>, un launcher Node.js<br />
* <code>lli</code>, un launcher LLVM<br />
En d'autres termes, GraalVM ne comprend que le Java, Node.js (grâce au Javascript Runtime) et les langages LLVM (grâce au LLVM Runtime). Cependant, d'autres launchers peuvent être installés avec la commande :<br />
<pre><br />
gu install <nom_du_langage><br />
</pre><br />
<br />
====Par ligne de commande====<br />
<br />
En règle générale, les commandes d'exécution sont de la forme :<br />
<pre><br />
<nom_du_laucher> <nom_du_programme><br />
</pre><br />
Par exemple :<br />
<pre><br />
node app.js<br />
</pre><br />
Les programmes LLVM doivent êtres compilés avant avec l'outil LLVM Toolchain car le launcher lli ne comprend que du bitcode :<br />
<pre><br />
gu install llvm-toolchain<br />
export LLVM_TOOLCHAIN=$(lli --print-toolchain-path)<br />
$LLVM_TOOLCHAIN/clang hello.c -o hello<br />
lli hello<br />
</pre><br />
====Dans un IDE====<br />
<br />
Dans l'IDE, il suffit de remplacer le path du JRE ou du JDK par le path de GraalVM.<br />
Sous eclipse par exemple, cela peut se faire en allant dans ''Window/Preferences/Java/Installed JREs''.<br />
<br />
[[File:installation_ide.png|500px|Spécification du JDK dans l'IDE]]<br />
<br />
====Mixage de langages====<br />
<br />
Au niveau du JDK, Graal propose tout un ensemble de librairies permettant l'inter-opérabilité entre les langages. Par exemple, il est possible depuis un programme Java d'importer la libraire <code>org.graalvm.polyglot</code> pour exécuter les fonctions d'un programme dans un autre langage et en récupérer le résultat.<br />
<br />
==Limites==<br />
<br />
Même si les promesses de GraalVM, à savoir l'amélioration des performances à l'exécution des langages JVM et le polyglottisme, sont respectées, l'outil d'Oracle rencontre quand même quelques limites :<br />
<br />
* On peut regretter que les langages les plus bas niveaux comme le C soient paradoxalement ceux qui traversent le plus de couches logicielles dans l'architecture de GraalVM. Leur interêt en termes de performance est donc extrêmement diminué puisqu'ils nécessitent de nombreuses opérations pour être transformé en bytecode, bytecode qui est logé à la même enseigne que le bytecode issu de code Java au yeux du compilateur.<br />
<br />
* En règle générale, les performances hors langages JVM sont tout de même loins d'être extraordinaires. L'inter-opérabilité entre langages est fonctionnelles mais coûteuse en ressources. A en croire la documentation, l'overhead est quand même évité, c'est à dire que les données sont échangées entre les différents langages sans être dupliquées.<br />
<br />
* Les langages compris par GraalVM étant en fait des implémentations Truffle de langages et pas les langages en eux-mêmes, il manque les librairies utiles à chaque langage. Il est donc impossible par exemple, d'utiliser ''matplolib'' dans un programme Python. Les programmes en sont plus ou moins réduit à de l'algorithmie selon les capacités natives du langage.<br />
<br />
=Demonstration=<br />
<br />
Une démonstration de GraalVM est accessible à ce lien : [[VT2020-GraalVM-Demo|VT2020-GraalVM-Demo]]<br />
<br />
=Sources=<br />
# <div id="GraalVM">[https://www.graalvm.org/docs/getting-started GraalVM Official documentation: '''Getting Started''']</div><br />
# <div id="GraalVM">[https://www.graalvm.org/docs/introduction GraalVM Official documentation: '''Introduction''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/GraalVM Wikipedia: '''GraalVM''']</div><br />
# <div id="GraalVM">[https://medium.com/@nelvadas/a-la-d%C3%A9couverte-de-graalvm-5adbe0487624 Elvadas Nono : '''A la découverte de GraalVM (2020)''']</div><br />
# <div id="GraalVM">[https://www.theserverside.com/definition/GraalVM ServerSide: '''Definition of GraalVM''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Wikipedia: '''Machine Virtuelle Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/HotSpot Wikipedia: '''Hotspot''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/Maxine_Virtual_Machine_Kit Wikipedia: '''Maxine''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Java_Development_Kit Wikipedia: '''Java Development Kit''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://dev.to/abdulfousan/graalvm-polyglot-virtual-machine-4mn2 Abdul Fousan: '''GraalVM Polyglot Virtual Machine''']</div><br />
# <div id="GraalVM">[https://blog.plan99.net/graal-truffle-134d8f28fb69 Mike Hearn: '''GraalVM and Truffle''']</div><br />
# <div id="GraalVM">[https://www.trufflesuite.com/docs/truffle/overview Truffle Official documentation: '''GraalVM and Truffle''']</div><br />
<br />
=Veille Technologique 2020=<br />
* Année : [[VT2020|VT2021]]<br />
* Sujet : GraalVM<br />
* Slides : [[Media:VT2020-GraalVM-Presentation.pdf|Slides]]<br />
* Auteurs : [[User:Alexis.ROLLIN]]</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Demo&diff=48346VT2020-GraalVM-Demo2020-11-15T10:06:19Z<p>Alexis.Rollin: /* Démonstration */</p>
<hr />
<div>Démonstration de GraalVM en lien avec la fiche de synthèse [[VT2020-GraalVM-Fiche | VT2020-GraalVM-Fiche]] dans le cadre du cours de veille technologique 2019.<br />
<br />
=Installation=<br />
<br />
Installer GraalVM et le paramétrer pour l'IDE Eclipse est nécessaire pour exécuter la démonstration.<br />
<br />
La procédure d'installation peut être trouvée dans la section [[VT2020-GraalVM-Fiche#Utilisation | Utilisation]] de la fiche de synthèse.<br />
<br />
=Démonstration=<br />
<br />
Les projets Eclipse ayant servi à la démonstration en classe sont disponibles [https://github.com/AlexisROLLIN/VTS2020-GraalVM-Demo.git ici].<br />
<br />
==perf-testing==<br />
<br />
Le projet <code>perf-testing</code> est un simple benchmark. Il compte 10 000 000 de fois le nombre de majuscules dans une string et mesure le temps d'exécution de chaque itération (une itération tous les 1 000 000) et le temps total d'exécution. Pour l'exécuter, il suffit de l'importer comme un projet Eclipse et de run <code>CountUpperCase.java</code>. Il est intéressant de l'exécuter avec différents JDK pour observer la plus-value de GraalVM en terme de performances.<br />
<br />
==polyglot-calculation==<br />
<br />
Le projet <code>polyglot-calculation</code> teste le polyglottisme de GraalVM en effectuant des calculs basiques mais dans des langages différents Le <code>main</code> est en Java, la fonction <code>add</code> est en Javascript, <code>multiply</code> en Python et <code>power</code> en R.<br />
<br />
Il faut avoir avoir installé les langages R et Python dans GraalVM pour exécuter ce projet. Vous pouvez le faire avec les commandes :<br />
<pre><br />
gu install r<br />
gu install python<br />
</pre><br />
<br />
Il suffit ensuite de l'importer comme un projet Eclipse et de run <code>Main.java</code>.</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020&diff=48345VT20202020-11-14T21:05:05Z<p>Alexis.Rollin: /* Séance 1 : 16/11 */</p>
<hr />
<div>[[VT2019|<< Etudes 2019]] [[VT|Sommaire]] [[VT2021|Etudes 2021 >>]]<br />
<br />
<br />
=Veille Technologique et Stratégique=<br />
* Enseignants: [[User:Gpbonneau|Georges-Pierre Bonneau]], [[User:Donsez|Didier Donsez]]<br />
* UE/Module: EAM (HPRJ9R6B) et EAR (HPRJ9R4B) en 1FO5<br />
<br />
L'objectif de cette UE est de réaliser un travail de synthèse et d’évaluation sur une technologie / spécification / tendance<br />
<br />
Dans votre futur vie d'ingénieur, vous aurez à d'une part, vous former par vous-même sur une technologie émergente et d'autre part à réaliser une veille technologique (et stratégique) par rapport à votre entreprise et projet.<br />
Il s'agira de réaliser<br />
* le positionnement par rapport au marché<br />
* d'être critique<br />
<br />
Votre synthèse fait l'objet d'une présentation orale convaincante devant un auditoire (dans le futur, vos collègues, vos chefs ou vos clients) avec des transparents et un discours répété.<br />
Pour finir de convaincre (Saint Thomas), vous ferez la présentation d'une démonstration.<br />
<br />
Votre présentation sera notée et commentée par tous vos camarades via un sondage (téléphone mobile). Leurs notes et leurs commentaires seront notés en fonction de leur exactitude de jugement.<br />
<br />
Remarque: Le [https://fr.wikipedia.org/wiki/Plagiat plagiat] est incompatible avec l'éthique de l'ingénieur. Le directeur d'école peut demander votre traduction devant la commission disciplinaire de l'université. La sanction peut aller jusqu’à une interdiction d'inscription dans les établissements de l'enseignement supérieur français pendant plusieurs années : Le jeu en vaut-il la chandelle ?<br />
<br />
La présentation peut être réalisée avec [[reveal.js]] ou avec [[remarkjs]]<br />
<br />
[[File:presentation-VT-RICM5-1516.pdf|transparents d'introduction à l'UE]]<br />
<br />
=Planning=<br />
<br />
== Séance 1 : 16/11 ==<br />
Enseignants : [[User:Gpbonneau|Georges-Pierre Bonneau]], [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : 5, 8, 23, 78<br />
<br />
* 16H00 : Alexis ROLLIN, GraalVM, [[VT2020-GraalVM-Fiche|Fiche]], [[Media:VT2020-GraalVM-Presentation.pdf|Présentation]], [[VT2020-GraalVM-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, Micronaut, [[VT2020-Micronaut-Fiche|Fiche]], [[File:VT2020-Micronaut-Presentation.pdf|Présentation]], [[VT2020-Micronaut-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, JSONnet, [[VT2020-JSONnet-Fiche|Fiche]], [[File:VT2020-JSONnet-Presentation.pdf|Présentation]], [[VT2020-JSONnet-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, Cryptojacking, [[VT2020-Cryptojacking-Fiche|Fiche]], [[File:VT2020-Cryptojacking-Presentation.pdf|Présentation]], [[VT2020-Cryptojacking-Demo|Démonstration]]<br />
<br />
== Séance 2 : 23/11 ==<br />
Enseignants : [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : 9, 33, 49, 72, 81<br />
<br />
* 16H00 : Prénom NOM, Ballerina, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, Microclimate, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, Voice-First Development, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, Valgrind, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H40 : Prénom NOM, HTTP/3, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
<br />
== Séance 3 : 30/11 ==<br />
Enseignants : [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : 2, 3, 10, 11, 38<br />
<br />
* 16H00 : Prénom NOM, Blazor, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, Website Rendering Types, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, Quarkus, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, Helidon, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H40 : Prénom NOM, WebAssembly, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
<br />
== Séance 4 : 7/12 ==<br />
Enseignants : [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : 4, 15, 16, 19, 21<br />
<br />
* 16H00 : Prénom NOM, MemSQL, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, QuestDB, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, Apache Arrow, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, Apache Pulsar, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H40 : Prénom NOM, Apache Pinot, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
<br />
== Séance 5 : 14/12 ==<br />
Enseignants : [[User:Gpbonneau|Georges-Pierre Bonneau]], [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : 22, 48, 55, 56, 84<br />
<br />
* 16H00 : Prénom NOM, IoT Dataflow Mashup, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, Low-Power Global Area Networks (Sat-IoT), [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, Apollo 2.0, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, Flogo, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H40 : Prénom NOM, Amazon Sidewalk, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
<br />
== Séance 6 : 4/1 ==<br />
Enseignants : [[User:Gpbonneau|Georges-Pierre Bonneau]], [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : 6, 7, 20, 50, 83<br />
<br />
* 16H00 : Prénom NOM, OpenAI GPT-3, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, OpenAI Microscope, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, Deepfake Algorithms, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, Psychométrie, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H40 : Prénom NOM, Godot, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
<br />
== Séance 7 : 11/1 ==<br />
Enseignants : [[User:Gpbonneau|Georges-Pierre Bonneau]], [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : 1, 32, 41, 60, XXXX<br />
<br />
* 16H00 : Prénom NOM, Matrix, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, Peloton, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, DevSecOps, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, BFT, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H40 : Prénom NOM, XXXXXX, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
<br />
== Séance 8 : Asynchrone ==<br />
Enseignants : [[User:Gpbonneau|Georges-Pierre Bonneau]], [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : TBC<br />
<br />
* 16H00 : Prénom NOM, XXXXXX, [[VT2020-XXXXXX-Fiche|Fiche]], [[https://screencast|Présentation filmée]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, XXXXXX, [[VT2020-XXXXXX-Fiche|Fiche]], [[https://screencast|Présentation filmée]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, XXXXXX, [[VT2020-XXXXXX-Fiche|Fiche]], [[https://screencast|Présentation filmée]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, XXXXXX, [[VT2020-XXXXXX-Fiche|Fiche]], [[https://screencast|Présentation filmée]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H40 : Prénom NOM, XXXXXX, [[VT2020-XXXXXX-Fiche|Fiche]], [[https://screencast|Présentation filmée]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
<br />
=Sujets=<br />
# [[Matrix]] : An open network for secure, decentralized communication<br />
# [[Blazor]] (Browser+Razor) : a new web development framework introduced by Microsoft, which allows you to develop browser-based applications using C# and Razor syntax alongside HTML and CSS.<br />
# [[Website Rendering Types]] (Static, Dynamic, Incremetal) : démonstration de [https://nextjs.org/ NextJS]<br />
# [[MemSQL]]<br />
# [[Micronaut]] : Microservice platform ([https://dzone.com/articles/how-to-use-jhipster-to-build-a-secure-micronaut-an démo] avec [https://github.com/jhipster/generator-jhipster-micronaut Micronaut blueprint of JHipster])<br />
# [[OpenAI GPT-3]]<br />
# [[OpenAI Microscope]]<br />
# [[GraalVM]] : Polyglot Virtual Machine<br />
# [[Ballerina]] : open source programming language and platform for cloud-era application programmers to easily write software that just works<br />
# [[Quarkus]] : Supersonic Subatomic Java<br />
# [[Helidon]] : collection of Java libraries for writing microservices.<br />
# [[Flux]] (#fluxlang) new data scripting language to make querying and analyzing time series<br />
# [[Processeurs spécialisés pour l'IA]] : Démonstration avec la carte [https://greenwaves-technologies.com/product/gappoc-a-computer-vision-concept-board/ GAPPoc-A] de GreenWaves. ANNULé<br />
# [[NATS]]: PubSub broker (démonstration avec CampusIoT)<br />
# [[QuestDB]] : time-series database (démostration avec CampusIoT).<br />
# [[Apache Arrow]] : cross-language development platform for in-memory data<br />
# In-memory Distributed Data Grid : démonstration de eCom avec [[Apache Ignite]].<br />
# [[jQAssistant]] : application à eCOM<br />
# [[Apache Pulsar]] Pulsar is a multi-tenant, high-performance solution for server-to-server messaging. Pulsar was originally developed by Yahoo.<br />
# [[Godot Game Engine]]<br />
# [[Apache Pinot]] : realtime distributed OLAP datastore<br />
# [[IoT Dataflow Mashup]] (démo avec [[Eclipse Kura Wires]])<br />
# [[JSONnet]]<br />
# [[Géo-réplication]] : Démo avec [[Apache Kafka MirrorMaker]]<br />
# [[Pulsar]]<br />
# [[Wookey project]] (Demo on a STM32F407 Discovery board) ANNULé<br />
# [[RSocket]]<br />
# [[Nacos]] : open source project by Alibaba for service discovery and service configuration.<br />
# [[NEMU]] : open source hypervisor specifically built and designed to run modern cloud workloads on modern 64-bit Intel and ARM CPUs.<br />
# [[Architecture Serverless]] : démonstration avec le projet https://github.com/serverless/serverless sur votre compte Azure de votre compte GitHub Student Pack ANNULé<br />
# [[Fission]] : open-source serverless function framework for [[Kubernetes]] with a focus on developer productivity and high performance.<br />
# [[Peloton]], a unified resource scheduler<br />
# [[Microclimate]]<br />
# [[AdTech]]<br />
# [[Nearby communications]] (démonstration de [https://ionicframework.com/docs/native/google-nearby/ Nearby Messages API de Google avec Ionic]) --> Réservé Manon Chaix<br />
# [[Conflict-free replicated data type]] (CRDT) RECOMMANDé<br />
# [[Spinnaker]]<br />
# [[WebAssembly]]<br />
# [[Fast Identity Online Alliance]] (FIDO) ANNULé<br />
# [[Apache MXNet]] : Demo avec [[Intel Movidius]] ([https://github.com/tspannhw/rpi-mxnet-movidius-minifi lien]) ANNULé<br />
# [[DevSecOps]] <br />
# [[Apache Beam]] RECOMMANDé<br />
# [[In-Memory Data Grids]] : Démonstration de [[Gigaspaces]] et [[XAP]] Open Source<br />
# Gestionnaires de contenu : démonstration de [[Apache Jackrabbit]] dans le projet [[eCOM]]<br />
# [[Memory-centric virtual distributed storage system]]<br />
# [[ESB]] : démonstration de [[Mule ESB]]<br />
# [[MemCached]]<br />
# [[Low-Power Global Area Network]]s ([[Sat-IoT]])<br />
# [[ Voice-First Development]] : Designing, Developing, and Deploying Conversational Interfaces<br />
# [[Psychométrie]]<br />
# [[WebAssembly]]<br />
# [[DevSecOps]]<br />
# Portails et l'API [[Portlet]] : Démo avec [[Liferay]] ANNULé<br />
# [[Apache Beam]]<br />
# [[plateforme logicielle open source de conduite autonome Apollo 2.0]]<br />
# [[Flogo]] Open Source Framework for IoT Edge Apps & Integration.<br />
# [[Neural Processing Unit]] (NPU) : Demo de la clé [[Intel Movidius]] sur un RPI<br />
# [[Hazelcast]] : Démo avec Spring Boot ([https://dzone.com/storage/assets/6459742-dzone-rc247-gettingstartedwithspringbootandmicrose.pdf lien]) dans un projet [[JHipster]]<br />
# [[In-Memory Data Grids]] : Démonstration de [[Gigaspaces]] et [[XAP]] Open Source<br />
# [[Fautes Byzantines]] : Démonstration de [[BFT-SMaRt]]<br />
# Insport Video<br />
# Gestionnaires de contenu : démonstration de [[Apache Jackrabbit]] dans le projet [[eCOM]]<br />
# [[Memory-centric virtual distributed storage system]]<br />
# [[Performance Monitoring]]<br />
# [[ESB]] : démonstration de [[Mule ESB]] ANNULé<br />
# [[Access Network Query Protocol (ANQP)]]<br />
# [[JCache]] : démonstration avec [[Apache Ignity]]<br />
# [[MemCached]]<br />
# [[Apache Stratos]]<br />
# [[gceasy]] : Universal garbage collection log Analyser<br />
# [[Apache Solr]] : Démonstration avec [http://hortonworks.com/hadoop-tutorial/indexing-and-searching-text-within-images-with-apache-solr/ Tesseract OCR]<br />
# [[Valgrind]]<br />
# [[Content Delivery Network]]s : Démonstration de [[Amazon S3]], Azure, Akamaï ... sur votre projet [[ECOM-RICM|eCOM]]<br />
# [[CMS]] : Demo avec [[Crafter CMS]]<br />
# [[DMS]] (GED) : Demo avec la version Community Edition d'[[Alfresco]] et de son API REST avec [[Swagger]] ANNULé<br />
# [[SIG]] : Démonstration de [[QGIS]]<br />
# [[Apache Airflow]] ANNULé<br />
# [[Cryptojacking]] : démonstration d'un navigateur exécutant [https://github.com/cazala/coin-hive CoinHive] et affichage du coup énergétique de l'opération.<br />
# [[RIOT-OS]] : système d'exploitation pour l'Internet des Objets (Démonstration sur une carte STM32 Nucleo LRWAN1). ANNULé<br />
# [[Zephyr]] : système d'exploitation pour l'Internet des Objets (Démonstration sur une carte [[Intel Quark D2000]]). ANNULé<br />
# [[HTTP/3]] : quoi de neuf ? Démonstration de l'amélioration des performances.<br />
# [[Gyro]] : domain-specific language designed to concisely describe a cloud infrastructure. Démonstration avec votre application eCOM JHipster sur Azure.<br />
# [[Deepfake Algorithms]] et outils.<br />
# [[Amazon Sidewalk]]<br />
# Interfaces Homme-Machine sans contact (sous réserve de démonstrateur)<br />
# Interfaces Homme-Machine haptiques (sous réserve de démonstrateur)</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Fiche&diff=48344VT2020-GraalVM-Fiche2020-11-14T21:04:18Z<p>Alexis.Rollin: /* Veille Technologique 2020 */</p>
<hr />
<div>GraalVM est une machine virtuelle Java développée par [https://fr.wikipedia.org/wiki/Oracle_(entreprise) Oracle] dite "polyglotte" car elle est capable de comprendre de nombreux langages de programmation.<br />
<br />
=Rappels sur l'architecture de la plateforme Java=<br />
<br />
L'architecture de GraalVM se basant sur celle d'un [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit], un rappel sur le fonctionnement de la plateforme Java peut s'avérer utile.<br />
<br />
Tout d'abord, le Java a la particularité d'être un langage à la fois compilé et interprété. Les tâches de compilation et d'interprétation sont distinctes et réalisées par des composants différents.<br />
Comme on peut le voir sur le schéma ci-dessous, le code Java est d'abord compilé en bytecode par un Java Compiler pour ensuite être interprété et exécuté par une Java Virtual Machine.<br />
<br />
[[File:java_platform_architecture2.png|500px|Composition d'un JDK]]<br />
<br />
Il faut donc distinguer dans cette architecture :<br />
* La [https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Java Virtual Machine] (JVM), qui interprète et exécute le code.<br />
* Le [https://fr.wikipedia.org/wiki/Environnement_d'exécution_Java Java Runtime Environment] (JRE), qui est un environnement d'exécution contenant des librairies et la JVM.<br />
* Le [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit] (JDK), qui est composé de librairies en Java, du JRE et du Java Compiler.<br />
<br />
=GraalVM=<br />
<br />
==Abstract==<br />
<br />
''"GraalVM is a high-performance multilingual runtime. It is designed to accelerate the execution of applications written in Java and other JVM languages while also providing runtimes for JavaScript, Ruby, Python, and a number of other popular languages. GraalVM’s polyglot capabilities make it possible to mix multiple programming languages in a single application while eliminating any foreign language call costs."'' - Documentation officielle de GraalVM<br />
<br />
==Origines==<br />
<br />
===Constats===<br />
<br />
Malgré son apparente popularité, le langage Java est sur le déclin. A l'origine, ce langage conçu par Sun Microsystems et dit "JVM" (comme les langages Kotlin ou Scala) avait été conçu avec l'idée de pouvoir être exécuté sur n'importe quelle plateforme ayant une JVM, affranchissant ainsi le développeur des spécificités d'exécution de la plateforme (d'où le slogan ''"Write Once Run Anywere"'' de Sun). Cependant, à cause la surcouche logicielle induite par la JVM, le langage Java a essuyé des critiques sur sa performance et sur sa verbosité.<br />
<br />
S'ajoute à cela un regain de popularité des langages natifs dans les années 2010, notamment grâce à Apple et son développement mobile iOS en Objective-C qui contraste avec Java ou Kotlin (étant tous deux des langages JVM) en terme de performance.<br />
<br />
Pour répondre à ces problématiques, l'entreprise Oracle se doit d'adapter constamment Java afin de rester compétitive, et sa JVM avec.<br />
<br />
===Ce qui existait déjà===<br />
<br />
Evidemment, Java fonctionnait bien avant l'arrivée de GraalVM, ce qui signifie qu'il existait donc déjà des machines virtuelles. La plus utilisée d'entre elles est [https://fr.wikipedia.org/wiki/HotSpot HotSpot], écrite en C++. Elle a été créé par Sun et appartient désormais à Oracle depuis le rachat de Sun. Notez que toutes les JVM (ou autres composants de la plateforme Java), ne sont pas forcément propriété d'Oracle : par exemple, OpenJ9 est une JVM dont la propriété revient à IBM et à la fondation Eclipse. Ces composants doivent ceci dit respecter des [https://docs.oracle.com/javase/specs/ spécifications dictées par Sun].<br />
<br />
La première version de Hotspot n'était qu'un interpréteur, puis elle a été améliorée avec un ajout de la [https://fr.wikipedia.org/wiki/Compilation_%C3%A0_la_vol%C3%A9e compilation à la volée (Just-In-Time)]. Ensuite elle a été capable de détecter les portions de code les plus fréquemment utilisés (les ''hotspots'') et de les optimiser.<br />
<br />
Ceci dit, GraalVM trouve ses racines dans le projet [https://en.wikipedia.org/wiki/Maxine_Virtual_Machine Maxine] (dévelopé par Sun Microsystems Laboratories en 2005), dont l'objectif était d'écrire une JVM en langage Java pour s'affranchir des problèmes de développement liés au C++, comme la gestion de la mémoire. Le projet s'est avéré trop ambitieux à l'époque mais a servi de point de départ pour GraalVM presque 15 ans plus tard.<br />
<br />
===Solution===<br />
<br />
Les objectifs ayant mené à la création de GraalVM sont multiples :<br />
* Avoir un environnement qui accélère l'exécution des applications écrites en Java ou d'autres langages JVM afin de rivaliser avec les langages natifs<br />
* Fournir un environnement d'exécution qui supporte plusieurs langages de programmation, supprimant ainsi l'isolation entre eux et établissant une véritable inter-opérabilité.<br />
<br />
La solution développée est GraalVM, une machine virtuelle haute performance (d'après les dires d'Oracle) qui prend en fait la forme d'un JDK dont la partie VM a été grandement améliorée.<br />
<br />
==Fonctionnalités==<br />
<br />
Les principaux atouts de GraalVM sont:<br />
* Graal Compiler, un nouveau compilateur [https://fr.wikipedia.org/wiki/Compilation_%C3%A0_la_vol%C3%A9e JIT (Just-In-Time)] pour Java<br />
* GraalVM Native Image, permettant la compilation [https://fr.wikipedia.org/wiki/Compilation_anticip%C3%A9e AOT (Ahead-Of-Time)] pour les applications Java. Le compilateur AOT permet ici de compiler directement le code Java en code machine.<br />
* Truffle Language Implementation framework et GraalVM SDK, fournissant des runtimes pour d'autres langages de programmation<br />
* LLVM Runtime et JavaScript Runtime<br />
<br />
On a en plus la possibilité d'installer des langages et même de définir le nôtre. Actuellement, tous les langages suivants sont compatibles avec Graal (moyennant installations supplémentaires) :<br />
[[File:Languages.png|600px|Listes des langages compatibles avec GraalVM]]<br />
<br />
==Architecture==<br />
<br />
[[File:graal_vm_architecture.jpg | 500px | thumb | right | Architecture de la JVM GraalVM]]<br />
<br />
GraalVM réutilise l'architecture d'OpenJDK (qui est sans grande surprise un JDK), mais avec quelques particularités au niveau de la JVM :<br />
* Il réutilise la VM Hotspot, mais de laquelle on a retiré le JIT Compiler. <br />
* Il bénéficie d'un nouveau compilateur JIT, Graal Compiler, écrit en Java et en dehors de Hotspot. Il a pour mission de transformer du bytecode en code machine (ne pas confondre avec le Java Compiler, plus haut niveau).<br />
* Pour permettre à la JVM Hotspot d'utiliser un compilateur écrit en Java, une couche intermédiaire est nécessaire : la JVM Compiler Interface.<br />
* Tout ce qui doit arriver au compilateur JIT doit être du bytecode. C'est pourquoi les langages non-JVM ne peuvent pas être directement pris en entrée de Graal Compiler. La couche Truffle framework répond à cette problématique. Truffle est un framework open-source qui sert à définir nos propres langages de programmation à travers un AST (Abstract Syntax Tree) et à construire des interpréteurs pour ce dernier. Il est réutilisé dans GraalVM pour définir des implémentations Truffle de Python, Ruby ou encore Javascript. Attention, l'implémentation d'un langage sous Truffle n'est pas le langage en lui-même, ce qui pose quelques problèmes comme on peut le voir dans la partie Limites.<br />
* La couche Truffle suffisait pour les langages interprétés puisque Truffle construit des interpréteurs. Mais pour les langages LLVM (Low Level Virtual Machine) comme le C, le C++ ou le Fortran, une surcouche est nécessaire. Sulong est une LLVM qui permet de produire du bitcode en s'appuyant sur les fonctionnalités de Truffle.<br />
<br />
==Utilisation==<br />
<br />
===Installation===<br />
<br />
GraalVM est très simple à installer.<br />
<br />
* Naviguez sur le [https://github.com/graalvm/graalvm-ce-builds/release git de GraalVM] et téléchargez la version de GraalVM compatible avec notre version de Java/OpenJDK, que l'on peut connaître avec la commande <code>java -version</code>.<br />
<br />
* Dézippez l'archive à l'endroit de votre choix.<br />
<pre>tar -xzf <graalvm-archive>.tar.gz</pre><br />
<br />
* Configurez votre variable d'environnement PATH:<br />
<pre>export PATH=<graalvm>/bin:$PATH</pre><br />
Si vous souhaitez remplacer votre JDK par GraalVM pour toutes vos applications utilisant Java, vous pouvez changer la variable d'environnement <code>JAVA_HOME</code>.<br />
<pre>export JAVA_HOME=<graalvm></pre><br />
Si vous ne souhaitez pas modifier votre <code>JAVA_HOME</code>, vous pouvez définir une variable d'environnement <code>GRAAL_HOME</code> qui vous sera utile pour ne pas avoir à réécrire le chemin complet de Graal.<br />
Notez également que vous pouvez rendre les commandes au-dessus permanentes en les ajoutant à votre fichier <code>.bashrc</code> ou <code>.zshrc</code>.<br />
<br />
===Exécution===<br />
<br />
Le dossier /bin est similaire à un JDK standard, mais contient des launchers additionnels (en plus de <code>javac</code> pour le Java):<br />
* <code>js</code>, un launcher JavaScript<br />
* <code>node</code>, un launcher Node.js<br />
* <code>lli</code>, un launcher LLVM<br />
En d'autres termes, GraalVM ne comprend que le Java, Node.js (grâce au Javascript Runtime) et les langages LLVM (grâce au LLVM Runtime). Cependant, d'autres launchers peuvent être installés avec la commande :<br />
<pre><br />
gu install <nom_du_langage><br />
</pre><br />
<br />
====Par ligne de commande====<br />
<br />
En règle générale, les commandes d'exécution sont de la forme :<br />
<pre><br />
<nom_du_laucher> <nom_du_programme><br />
</pre><br />
Par exemple :<br />
<pre><br />
node app.js<br />
</pre><br />
Les programmes LLVM doivent êtres compilés avant avec l'outil LLVM Toolchain car le launcher lli ne comprend que du bitcode :<br />
<pre><br />
gu install llvm-toolchain<br />
export LLVM_TOOLCHAIN=$(lli --print-toolchain-path)<br />
$LLVM_TOOLCHAIN/clang hello.c -o hello<br />
lli hello<br />
</pre><br />
====Dans un IDE====<br />
<br />
Dans l'IDE, il suffit de remplacer le path du JRE ou du JDK par le path de GraalVM.<br />
Sous eclipse par exemple, cela peut se faire en allant dans ''Window/Preferences/Java/Installed JREs''.<br />
<br />
[[File:installation_ide.png|500px|Spécification du JDK dans l'IDE]]<br />
<br />
====Mixage de langages====<br />
<br />
Au niveau du JDK, Graal propose tout un ensemble de librairies permettant l'inter-opérabilité entre les langages. Par exemple, il est possible depuis un programme Java d'importer la libraire org.graalvm.polyglot pour exécuter les fonctions d'un programme dans un autre langage et en récupérer le résultat.<br />
<br />
==Limites==<br />
<br />
Même si les promesses de GraalVM, à savoir l'amélioration des performances à l'exécution des langages JVM et le polyglottisme, sont respectées, l'outil d'Oracle rencontre quand même quelques limites :<br />
<br />
* On peut regretter que les langages les plus bas niveaux comme le C soient paradoxalement ceux qui traversent le plus de couches logicielles dans l'architecture de GraalVM. Leur interêt en termes de performance est donc extrêmement diminué puisqu'ils nécessitent de nombreuses opérations pour être transformé en bytecode, bytecode qui est logé à la même enseigne que le bytecode issu de code Java au yeux du compilateur.<br />
<br />
* En règle générale, les performances hors langages JVM sont tout de même loins d'être extraordinaires. L'inter-opérabilité entre langages est fonctionnelles mais coûteuse en ressources. A en croire la documentation, l'overhead est quand même évité, c'est à dire que les données sont échangées entre les différents langages sans être dupliquées.<br />
<br />
* Les langages compris par GraalVM étant en fait des implémentations Truffle de langages et pas les langages en eux-mêmes, il manque les librairies utiles à chaque langage. Il est donc impossible par exemple, d'utiliser ''matplolib'' dans un programme Python. Les programmes en sont plus ou moins réduit à de l'algorithmie selon les capacités natives du langage.<br />
<br />
=Demonstration=<br />
<br />
Une démonstration de GraalVM est accessible à ce lien : [[VT2020-GraalVM-Demo|VT2020-GraalVM-Demo]]<br />
<br />
=Sources=<br />
# <div id="GraalVM">[https://www.graalvm.org/docs/getting-started GraalVM Official documentation: '''Getting Started''']</div><br />
# <div id="GraalVM">[https://www.graalvm.org/docs/introduction GraalVM Official documentation: '''Introduction''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/GraalVM Wikipedia: '''GraalVM''']</div><br />
# <div id="GraalVM">[https://medium.com/@nelvadas/a-la-d%C3%A9couverte-de-graalvm-5adbe0487624 Elvadas Nono : '''A la découverte de GraalVM (2020)''']</div><br />
# <div id="GraalVM">[https://www.theserverside.com/definition/GraalVM ServerSide: '''Definition of GraalVM''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Wikipedia: '''Machine Virtuelle Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/HotSpot Wikipedia: '''Hotspot''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/Maxine_Virtual_Machine_Kit Wikipedia: '''Maxine''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Java_Development_Kit Wikipedia: '''Java Development Kit''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://dev.to/abdulfousan/graalvm-polyglot-virtual-machine-4mn2 Abdul Fousan: '''GraalVM Polyglot Virtual Machine''']</div><br />
# <div id="GraalVM">[https://blog.plan99.net/graal-truffle-134d8f28fb69 Mike Hearn: '''GraalVM and Truffle''']</div><br />
# <div id="GraalVM">[https://www.trufflesuite.com/docs/truffle/overview Truffle Official documentation: '''GraalVM and Truffle''']</div><br />
<br />
=Veille Technologique 2020=<br />
* Année : [[VT2020|VT2021]]<br />
* Sujet : GraalVM<br />
* Slides : [[Media:VT2020-GraalVM-Presentation.pdf|Slides]]<br />
* Auteurs : [[User:Alexis.ROLLIN]]</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Fiche&diff=48343VT2020-GraalVM-Fiche2020-11-14T21:03:53Z<p>Alexis.Rollin: /* Veille Technologique 2020 */</p>
<hr />
<div>GraalVM est une machine virtuelle Java développée par [https://fr.wikipedia.org/wiki/Oracle_(entreprise) Oracle] dite "polyglotte" car elle est capable de comprendre de nombreux langages de programmation.<br />
<br />
=Rappels sur l'architecture de la plateforme Java=<br />
<br />
L'architecture de GraalVM se basant sur celle d'un [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit], un rappel sur le fonctionnement de la plateforme Java peut s'avérer utile.<br />
<br />
Tout d'abord, le Java a la particularité d'être un langage à la fois compilé et interprété. Les tâches de compilation et d'interprétation sont distinctes et réalisées par des composants différents.<br />
Comme on peut le voir sur le schéma ci-dessous, le code Java est d'abord compilé en bytecode par un Java Compiler pour ensuite être interprété et exécuté par une Java Virtual Machine.<br />
<br />
[[File:java_platform_architecture2.png|500px|Composition d'un JDK]]<br />
<br />
Il faut donc distinguer dans cette architecture :<br />
* La [https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Java Virtual Machine] (JVM), qui interprète et exécute le code.<br />
* Le [https://fr.wikipedia.org/wiki/Environnement_d'exécution_Java Java Runtime Environment] (JRE), qui est un environnement d'exécution contenant des librairies et la JVM.<br />
* Le [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit] (JDK), qui est composé de librairies en Java, du JRE et du Java Compiler.<br />
<br />
=GraalVM=<br />
<br />
==Abstract==<br />
<br />
''"GraalVM is a high-performance multilingual runtime. It is designed to accelerate the execution of applications written in Java and other JVM languages while also providing runtimes for JavaScript, Ruby, Python, and a number of other popular languages. GraalVM’s polyglot capabilities make it possible to mix multiple programming languages in a single application while eliminating any foreign language call costs."'' - Documentation officielle de GraalVM<br />
<br />
==Origines==<br />
<br />
===Constats===<br />
<br />
Malgré son apparente popularité, le langage Java est sur le déclin. A l'origine, ce langage conçu par Sun Microsystems et dit "JVM" (comme les langages Kotlin ou Scala) avait été conçu avec l'idée de pouvoir être exécuté sur n'importe quelle plateforme ayant une JVM, affranchissant ainsi le développeur des spécificités d'exécution de la plateforme (d'où le slogan ''"Write Once Run Anywere"'' de Sun). Cependant, à cause la surcouche logicielle induite par la JVM, le langage Java a essuyé des critiques sur sa performance et sur sa verbosité.<br />
<br />
S'ajoute à cela un regain de popularité des langages natifs dans les années 2010, notamment grâce à Apple et son développement mobile iOS en Objective-C qui contraste avec Java ou Kotlin (étant tous deux des langages JVM) en terme de performance.<br />
<br />
Pour répondre à ces problématiques, l'entreprise Oracle se doit d'adapter constamment Java afin de rester compétitive, et sa JVM avec.<br />
<br />
===Ce qui existait déjà===<br />
<br />
Evidemment, Java fonctionnait bien avant l'arrivée de GraalVM, ce qui signifie qu'il existait donc déjà des machines virtuelles. La plus utilisée d'entre elles est [https://fr.wikipedia.org/wiki/HotSpot HotSpot], écrite en C++. Elle a été créé par Sun et appartient désormais à Oracle depuis le rachat de Sun. Notez que toutes les JVM (ou autres composants de la plateforme Java), ne sont pas forcément propriété d'Oracle : par exemple, OpenJ9 est une JVM dont la propriété revient à IBM et à la fondation Eclipse. Ces composants doivent ceci dit respecter des [https://docs.oracle.com/javase/specs/ spécifications dictées par Sun].<br />
<br />
La première version de Hotspot n'était qu'un interpréteur, puis elle a été améliorée avec un ajout de la [https://fr.wikipedia.org/wiki/Compilation_%C3%A0_la_vol%C3%A9e compilation à la volée (Just-In-Time)]. Ensuite elle a été capable de détecter les portions de code les plus fréquemment utilisés (les ''hotspots'') et de les optimiser.<br />
<br />
Ceci dit, GraalVM trouve ses racines dans le projet [https://en.wikipedia.org/wiki/Maxine_Virtual_Machine Maxine] (dévelopé par Sun Microsystems Laboratories en 2005), dont l'objectif était d'écrire une JVM en langage Java pour s'affranchir des problèmes de développement liés au C++, comme la gestion de la mémoire. Le projet s'est avéré trop ambitieux à l'époque mais a servi de point de départ pour GraalVM presque 15 ans plus tard.<br />
<br />
===Solution===<br />
<br />
Les objectifs ayant mené à la création de GraalVM sont multiples :<br />
* Avoir un environnement qui accélère l'exécution des applications écrites en Java ou d'autres langages JVM afin de rivaliser avec les langages natifs<br />
* Fournir un environnement d'exécution qui supporte plusieurs langages de programmation, supprimant ainsi l'isolation entre eux et établissant une véritable inter-opérabilité.<br />
<br />
La solution développée est GraalVM, une machine virtuelle haute performance (d'après les dires d'Oracle) qui prend en fait la forme d'un JDK dont la partie VM a été grandement améliorée.<br />
<br />
==Fonctionnalités==<br />
<br />
Les principaux atouts de GraalVM sont:<br />
* Graal Compiler, un nouveau compilateur [https://fr.wikipedia.org/wiki/Compilation_%C3%A0_la_vol%C3%A9e JIT (Just-In-Time)] pour Java<br />
* GraalVM Native Image, permettant la compilation [https://fr.wikipedia.org/wiki/Compilation_anticip%C3%A9e AOT (Ahead-Of-Time)] pour les applications Java. Le compilateur AOT permet ici de compiler directement le code Java en code machine.<br />
* Truffle Language Implementation framework et GraalVM SDK, fournissant des runtimes pour d'autres langages de programmation<br />
* LLVM Runtime et JavaScript Runtime<br />
<br />
On a en plus la possibilité d'installer des langages et même de définir le nôtre. Actuellement, tous les langages suivants sont compatibles avec Graal (moyennant installations supplémentaires) :<br />
[[File:Languages.png|600px|Listes des langages compatibles avec GraalVM]]<br />
<br />
==Architecture==<br />
<br />
[[File:graal_vm_architecture.jpg | 500px | thumb | right | Architecture de la JVM GraalVM]]<br />
<br />
GraalVM réutilise l'architecture d'OpenJDK (qui est sans grande surprise un JDK), mais avec quelques particularités au niveau de la JVM :<br />
* Il réutilise la VM Hotspot, mais de laquelle on a retiré le JIT Compiler. <br />
* Il bénéficie d'un nouveau compilateur JIT, Graal Compiler, écrit en Java et en dehors de Hotspot. Il a pour mission de transformer du bytecode en code machine (ne pas confondre avec le Java Compiler, plus haut niveau).<br />
* Pour permettre à la JVM Hotspot d'utiliser un compilateur écrit en Java, une couche intermédiaire est nécessaire : la JVM Compiler Interface.<br />
* Tout ce qui doit arriver au compilateur JIT doit être du bytecode. C'est pourquoi les langages non-JVM ne peuvent pas être directement pris en entrée de Graal Compiler. La couche Truffle framework répond à cette problématique. Truffle est un framework open-source qui sert à définir nos propres langages de programmation à travers un AST (Abstract Syntax Tree) et à construire des interpréteurs pour ce dernier. Il est réutilisé dans GraalVM pour définir des implémentations Truffle de Python, Ruby ou encore Javascript. Attention, l'implémentation d'un langage sous Truffle n'est pas le langage en lui-même, ce qui pose quelques problèmes comme on peut le voir dans la partie Limites.<br />
* La couche Truffle suffisait pour les langages interprétés puisque Truffle construit des interpréteurs. Mais pour les langages LLVM (Low Level Virtual Machine) comme le C, le C++ ou le Fortran, une surcouche est nécessaire. Sulong est une LLVM qui permet de produire du bitcode en s'appuyant sur les fonctionnalités de Truffle.<br />
<br />
==Utilisation==<br />
<br />
===Installation===<br />
<br />
GraalVM est très simple à installer.<br />
<br />
* Naviguez sur le [https://github.com/graalvm/graalvm-ce-builds/release git de GraalVM] et téléchargez la version de GraalVM compatible avec notre version de Java/OpenJDK, que l'on peut connaître avec la commande <code>java -version</code>.<br />
<br />
* Dézippez l'archive à l'endroit de votre choix.<br />
<pre>tar -xzf <graalvm-archive>.tar.gz</pre><br />
<br />
* Configurez votre variable d'environnement PATH:<br />
<pre>export PATH=<graalvm>/bin:$PATH</pre><br />
Si vous souhaitez remplacer votre JDK par GraalVM pour toutes vos applications utilisant Java, vous pouvez changer la variable d'environnement <code>JAVA_HOME</code>.<br />
<pre>export JAVA_HOME=<graalvm></pre><br />
Si vous ne souhaitez pas modifier votre <code>JAVA_HOME</code>, vous pouvez définir une variable d'environnement <code>GRAAL_HOME</code> qui vous sera utile pour ne pas avoir à réécrire le chemin complet de Graal.<br />
Notez également que vous pouvez rendre les commandes au-dessus permanentes en les ajoutant à votre fichier <code>.bashrc</code> ou <code>.zshrc</code>.<br />
<br />
===Exécution===<br />
<br />
Le dossier /bin est similaire à un JDK standard, mais contient des launchers additionnels (en plus de <code>javac</code> pour le Java):<br />
* <code>js</code>, un launcher JavaScript<br />
* <code>node</code>, un launcher Node.js<br />
* <code>lli</code>, un launcher LLVM<br />
En d'autres termes, GraalVM ne comprend que le Java, Node.js (grâce au Javascript Runtime) et les langages LLVM (grâce au LLVM Runtime). Cependant, d'autres launchers peuvent être installés avec la commande :<br />
<pre><br />
gu install <nom_du_langage><br />
</pre><br />
<br />
====Par ligne de commande====<br />
<br />
En règle générale, les commandes d'exécution sont de la forme :<br />
<pre><br />
<nom_du_laucher> <nom_du_programme><br />
</pre><br />
Par exemple :<br />
<pre><br />
node app.js<br />
</pre><br />
Les programmes LLVM doivent êtres compilés avant avec l'outil LLVM Toolchain car le launcher lli ne comprend que du bitcode :<br />
<pre><br />
gu install llvm-toolchain<br />
export LLVM_TOOLCHAIN=$(lli --print-toolchain-path)<br />
$LLVM_TOOLCHAIN/clang hello.c -o hello<br />
lli hello<br />
</pre><br />
====Dans un IDE====<br />
<br />
Dans l'IDE, il suffit de remplacer le path du JRE ou du JDK par le path de GraalVM.<br />
Sous eclipse par exemple, cela peut se faire en allant dans ''Window/Preferences/Java/Installed JREs''.<br />
<br />
[[File:installation_ide.png|500px|Spécification du JDK dans l'IDE]]<br />
<br />
====Mixage de langages====<br />
<br />
Au niveau du JDK, Graal propose tout un ensemble de librairies permettant l'inter-opérabilité entre les langages. Par exemple, il est possible depuis un programme Java d'importer la libraire org.graalvm.polyglot pour exécuter les fonctions d'un programme dans un autre langage et en récupérer le résultat.<br />
<br />
==Limites==<br />
<br />
Même si les promesses de GraalVM, à savoir l'amélioration des performances à l'exécution des langages JVM et le polyglottisme, sont respectées, l'outil d'Oracle rencontre quand même quelques limites :<br />
<br />
* On peut regretter que les langages les plus bas niveaux comme le C soient paradoxalement ceux qui traversent le plus de couches logicielles dans l'architecture de GraalVM. Leur interêt en termes de performance est donc extrêmement diminué puisqu'ils nécessitent de nombreuses opérations pour être transformé en bytecode, bytecode qui est logé à la même enseigne que le bytecode issu de code Java au yeux du compilateur.<br />
<br />
* En règle générale, les performances hors langages JVM sont tout de même loins d'être extraordinaires. L'inter-opérabilité entre langages est fonctionnelles mais coûteuse en ressources. A en croire la documentation, l'overhead est quand même évité, c'est à dire que les données sont échangées entre les différents langages sans être dupliquées.<br />
<br />
* Les langages compris par GraalVM étant en fait des implémentations Truffle de langages et pas les langages en eux-mêmes, il manque les librairies utiles à chaque langage. Il est donc impossible par exemple, d'utiliser ''matplolib'' dans un programme Python. Les programmes en sont plus ou moins réduit à de l'algorithmie selon les capacités natives du langage.<br />
<br />
=Demonstration=<br />
<br />
Une démonstration de GraalVM est accessible à ce lien : [[VT2020-GraalVM-Demo|VT2020-GraalVM-Demo]]<br />
<br />
=Sources=<br />
# <div id="GraalVM">[https://www.graalvm.org/docs/getting-started GraalVM Official documentation: '''Getting Started''']</div><br />
# <div id="GraalVM">[https://www.graalvm.org/docs/introduction GraalVM Official documentation: '''Introduction''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/GraalVM Wikipedia: '''GraalVM''']</div><br />
# <div id="GraalVM">[https://medium.com/@nelvadas/a-la-d%C3%A9couverte-de-graalvm-5adbe0487624 Elvadas Nono : '''A la découverte de GraalVM (2020)''']</div><br />
# <div id="GraalVM">[https://www.theserverside.com/definition/GraalVM ServerSide: '''Definition of GraalVM''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Wikipedia: '''Machine Virtuelle Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/HotSpot Wikipedia: '''Hotspot''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/Maxine_Virtual_Machine_Kit Wikipedia: '''Maxine''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Java_Development_Kit Wikipedia: '''Java Development Kit''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://dev.to/abdulfousan/graalvm-polyglot-virtual-machine-4mn2 Abdul Fousan: '''GraalVM Polyglot Virtual Machine''']</div><br />
# <div id="GraalVM">[https://blog.plan99.net/graal-truffle-134d8f28fb69 Mike Hearn: '''GraalVM and Truffle''']</div><br />
# <div id="GraalVM">[https://www.trufflesuite.com/docs/truffle/overview Truffle Official documentation: '''GraalVM and Truffle''']</div><br />
<br />
=Veille Technologique 2020=<br />
* Année : [[VT2020|VT2021]]<br />
* Sujet : GraalVM<br />
* Slides : [[Media:VT2020-GraalVM-Presentation.pdf|Slides]]<br />
* Auteurs : [[User:Alexis.Rollin]]</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Fiche&diff=48342VT2020-GraalVM-Fiche2020-11-14T21:03:41Z<p>Alexis.Rollin: /* Veille Technologique 2020 */</p>
<hr />
<div>GraalVM est une machine virtuelle Java développée par [https://fr.wikipedia.org/wiki/Oracle_(entreprise) Oracle] dite "polyglotte" car elle est capable de comprendre de nombreux langages de programmation.<br />
<br />
=Rappels sur l'architecture de la plateforme Java=<br />
<br />
L'architecture de GraalVM se basant sur celle d'un [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit], un rappel sur le fonctionnement de la plateforme Java peut s'avérer utile.<br />
<br />
Tout d'abord, le Java a la particularité d'être un langage à la fois compilé et interprété. Les tâches de compilation et d'interprétation sont distinctes et réalisées par des composants différents.<br />
Comme on peut le voir sur le schéma ci-dessous, le code Java est d'abord compilé en bytecode par un Java Compiler pour ensuite être interprété et exécuté par une Java Virtual Machine.<br />
<br />
[[File:java_platform_architecture2.png|500px|Composition d'un JDK]]<br />
<br />
Il faut donc distinguer dans cette architecture :<br />
* La [https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Java Virtual Machine] (JVM), qui interprète et exécute le code.<br />
* Le [https://fr.wikipedia.org/wiki/Environnement_d'exécution_Java Java Runtime Environment] (JRE), qui est un environnement d'exécution contenant des librairies et la JVM.<br />
* Le [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit] (JDK), qui est composé de librairies en Java, du JRE et du Java Compiler.<br />
<br />
=GraalVM=<br />
<br />
==Abstract==<br />
<br />
''"GraalVM is a high-performance multilingual runtime. It is designed to accelerate the execution of applications written in Java and other JVM languages while also providing runtimes for JavaScript, Ruby, Python, and a number of other popular languages. GraalVM’s polyglot capabilities make it possible to mix multiple programming languages in a single application while eliminating any foreign language call costs."'' - Documentation officielle de GraalVM<br />
<br />
==Origines==<br />
<br />
===Constats===<br />
<br />
Malgré son apparente popularité, le langage Java est sur le déclin. A l'origine, ce langage conçu par Sun Microsystems et dit "JVM" (comme les langages Kotlin ou Scala) avait été conçu avec l'idée de pouvoir être exécuté sur n'importe quelle plateforme ayant une JVM, affranchissant ainsi le développeur des spécificités d'exécution de la plateforme (d'où le slogan ''"Write Once Run Anywere"'' de Sun). Cependant, à cause la surcouche logicielle induite par la JVM, le langage Java a essuyé des critiques sur sa performance et sur sa verbosité.<br />
<br />
S'ajoute à cela un regain de popularité des langages natifs dans les années 2010, notamment grâce à Apple et son développement mobile iOS en Objective-C qui contraste avec Java ou Kotlin (étant tous deux des langages JVM) en terme de performance.<br />
<br />
Pour répondre à ces problématiques, l'entreprise Oracle se doit d'adapter constamment Java afin de rester compétitive, et sa JVM avec.<br />
<br />
===Ce qui existait déjà===<br />
<br />
Evidemment, Java fonctionnait bien avant l'arrivée de GraalVM, ce qui signifie qu'il existait donc déjà des machines virtuelles. La plus utilisée d'entre elles est [https://fr.wikipedia.org/wiki/HotSpot HotSpot], écrite en C++. Elle a été créé par Sun et appartient désormais à Oracle depuis le rachat de Sun. Notez que toutes les JVM (ou autres composants de la plateforme Java), ne sont pas forcément propriété d'Oracle : par exemple, OpenJ9 est une JVM dont la propriété revient à IBM et à la fondation Eclipse. Ces composants doivent ceci dit respecter des [https://docs.oracle.com/javase/specs/ spécifications dictées par Sun].<br />
<br />
La première version de Hotspot n'était qu'un interpréteur, puis elle a été améliorée avec un ajout de la [https://fr.wikipedia.org/wiki/Compilation_%C3%A0_la_vol%C3%A9e compilation à la volée (Just-In-Time)]. Ensuite elle a été capable de détecter les portions de code les plus fréquemment utilisés (les ''hotspots'') et de les optimiser.<br />
<br />
Ceci dit, GraalVM trouve ses racines dans le projet [https://en.wikipedia.org/wiki/Maxine_Virtual_Machine Maxine] (dévelopé par Sun Microsystems Laboratories en 2005), dont l'objectif était d'écrire une JVM en langage Java pour s'affranchir des problèmes de développement liés au C++, comme la gestion de la mémoire. Le projet s'est avéré trop ambitieux à l'époque mais a servi de point de départ pour GraalVM presque 15 ans plus tard.<br />
<br />
===Solution===<br />
<br />
Les objectifs ayant mené à la création de GraalVM sont multiples :<br />
* Avoir un environnement qui accélère l'exécution des applications écrites en Java ou d'autres langages JVM afin de rivaliser avec les langages natifs<br />
* Fournir un environnement d'exécution qui supporte plusieurs langages de programmation, supprimant ainsi l'isolation entre eux et établissant une véritable inter-opérabilité.<br />
<br />
La solution développée est GraalVM, une machine virtuelle haute performance (d'après les dires d'Oracle) qui prend en fait la forme d'un JDK dont la partie VM a été grandement améliorée.<br />
<br />
==Fonctionnalités==<br />
<br />
Les principaux atouts de GraalVM sont:<br />
* Graal Compiler, un nouveau compilateur [https://fr.wikipedia.org/wiki/Compilation_%C3%A0_la_vol%C3%A9e JIT (Just-In-Time)] pour Java<br />
* GraalVM Native Image, permettant la compilation [https://fr.wikipedia.org/wiki/Compilation_anticip%C3%A9e AOT (Ahead-Of-Time)] pour les applications Java. Le compilateur AOT permet ici de compiler directement le code Java en code machine.<br />
* Truffle Language Implementation framework et GraalVM SDK, fournissant des runtimes pour d'autres langages de programmation<br />
* LLVM Runtime et JavaScript Runtime<br />
<br />
On a en plus la possibilité d'installer des langages et même de définir le nôtre. Actuellement, tous les langages suivants sont compatibles avec Graal (moyennant installations supplémentaires) :<br />
[[File:Languages.png|600px|Listes des langages compatibles avec GraalVM]]<br />
<br />
==Architecture==<br />
<br />
[[File:graal_vm_architecture.jpg | 500px | thumb | right | Architecture de la JVM GraalVM]]<br />
<br />
GraalVM réutilise l'architecture d'OpenJDK (qui est sans grande surprise un JDK), mais avec quelques particularités au niveau de la JVM :<br />
* Il réutilise la VM Hotspot, mais de laquelle on a retiré le JIT Compiler. <br />
* Il bénéficie d'un nouveau compilateur JIT, Graal Compiler, écrit en Java et en dehors de Hotspot. Il a pour mission de transformer du bytecode en code machine (ne pas confondre avec le Java Compiler, plus haut niveau).<br />
* Pour permettre à la JVM Hotspot d'utiliser un compilateur écrit en Java, une couche intermédiaire est nécessaire : la JVM Compiler Interface.<br />
* Tout ce qui doit arriver au compilateur JIT doit être du bytecode. C'est pourquoi les langages non-JVM ne peuvent pas être directement pris en entrée de Graal Compiler. La couche Truffle framework répond à cette problématique. Truffle est un framework open-source qui sert à définir nos propres langages de programmation à travers un AST (Abstract Syntax Tree) et à construire des interpréteurs pour ce dernier. Il est réutilisé dans GraalVM pour définir des implémentations Truffle de Python, Ruby ou encore Javascript. Attention, l'implémentation d'un langage sous Truffle n'est pas le langage en lui-même, ce qui pose quelques problèmes comme on peut le voir dans la partie Limites.<br />
* La couche Truffle suffisait pour les langages interprétés puisque Truffle construit des interpréteurs. Mais pour les langages LLVM (Low Level Virtual Machine) comme le C, le C++ ou le Fortran, une surcouche est nécessaire. Sulong est une LLVM qui permet de produire du bitcode en s'appuyant sur les fonctionnalités de Truffle.<br />
<br />
==Utilisation==<br />
<br />
===Installation===<br />
<br />
GraalVM est très simple à installer.<br />
<br />
* Naviguez sur le [https://github.com/graalvm/graalvm-ce-builds/release git de GraalVM] et téléchargez la version de GraalVM compatible avec notre version de Java/OpenJDK, que l'on peut connaître avec la commande <code>java -version</code>.<br />
<br />
* Dézippez l'archive à l'endroit de votre choix.<br />
<pre>tar -xzf <graalvm-archive>.tar.gz</pre><br />
<br />
* Configurez votre variable d'environnement PATH:<br />
<pre>export PATH=<graalvm>/bin:$PATH</pre><br />
Si vous souhaitez remplacer votre JDK par GraalVM pour toutes vos applications utilisant Java, vous pouvez changer la variable d'environnement <code>JAVA_HOME</code>.<br />
<pre>export JAVA_HOME=<graalvm></pre><br />
Si vous ne souhaitez pas modifier votre <code>JAVA_HOME</code>, vous pouvez définir une variable d'environnement <code>GRAAL_HOME</code> qui vous sera utile pour ne pas avoir à réécrire le chemin complet de Graal.<br />
Notez également que vous pouvez rendre les commandes au-dessus permanentes en les ajoutant à votre fichier <code>.bashrc</code> ou <code>.zshrc</code>.<br />
<br />
===Exécution===<br />
<br />
Le dossier /bin est similaire à un JDK standard, mais contient des launchers additionnels (en plus de <code>javac</code> pour le Java):<br />
* <code>js</code>, un launcher JavaScript<br />
* <code>node</code>, un launcher Node.js<br />
* <code>lli</code>, un launcher LLVM<br />
En d'autres termes, GraalVM ne comprend que le Java, Node.js (grâce au Javascript Runtime) et les langages LLVM (grâce au LLVM Runtime). Cependant, d'autres launchers peuvent être installés avec la commande :<br />
<pre><br />
gu install <nom_du_langage><br />
</pre><br />
<br />
====Par ligne de commande====<br />
<br />
En règle générale, les commandes d'exécution sont de la forme :<br />
<pre><br />
<nom_du_laucher> <nom_du_programme><br />
</pre><br />
Par exemple :<br />
<pre><br />
node app.js<br />
</pre><br />
Les programmes LLVM doivent êtres compilés avant avec l'outil LLVM Toolchain car le launcher lli ne comprend que du bitcode :<br />
<pre><br />
gu install llvm-toolchain<br />
export LLVM_TOOLCHAIN=$(lli --print-toolchain-path)<br />
$LLVM_TOOLCHAIN/clang hello.c -o hello<br />
lli hello<br />
</pre><br />
====Dans un IDE====<br />
<br />
Dans l'IDE, il suffit de remplacer le path du JRE ou du JDK par le path de GraalVM.<br />
Sous eclipse par exemple, cela peut se faire en allant dans ''Window/Preferences/Java/Installed JREs''.<br />
<br />
[[File:installation_ide.png|500px|Spécification du JDK dans l'IDE]]<br />
<br />
====Mixage de langages====<br />
<br />
Au niveau du JDK, Graal propose tout un ensemble de librairies permettant l'inter-opérabilité entre les langages. Par exemple, il est possible depuis un programme Java d'importer la libraire org.graalvm.polyglot pour exécuter les fonctions d'un programme dans un autre langage et en récupérer le résultat.<br />
<br />
==Limites==<br />
<br />
Même si les promesses de GraalVM, à savoir l'amélioration des performances à l'exécution des langages JVM et le polyglottisme, sont respectées, l'outil d'Oracle rencontre quand même quelques limites :<br />
<br />
* On peut regretter que les langages les plus bas niveaux comme le C soient paradoxalement ceux qui traversent le plus de couches logicielles dans l'architecture de GraalVM. Leur interêt en termes de performance est donc extrêmement diminué puisqu'ils nécessitent de nombreuses opérations pour être transformé en bytecode, bytecode qui est logé à la même enseigne que le bytecode issu de code Java au yeux du compilateur.<br />
<br />
* En règle générale, les performances hors langages JVM sont tout de même loins d'être extraordinaires. L'inter-opérabilité entre langages est fonctionnelles mais coûteuse en ressources. A en croire la documentation, l'overhead est quand même évité, c'est à dire que les données sont échangées entre les différents langages sans être dupliquées.<br />
<br />
* Les langages compris par GraalVM étant en fait des implémentations Truffle de langages et pas les langages en eux-mêmes, il manque les librairies utiles à chaque langage. Il est donc impossible par exemple, d'utiliser ''matplolib'' dans un programme Python. Les programmes en sont plus ou moins réduit à de l'algorithmie selon les capacités natives du langage.<br />
<br />
=Demonstration=<br />
<br />
Une démonstration de GraalVM est accessible à ce lien : [[VT2020-GraalVM-Demo|VT2020-GraalVM-Demo]]<br />
<br />
=Sources=<br />
# <div id="GraalVM">[https://www.graalvm.org/docs/getting-started GraalVM Official documentation: '''Getting Started''']</div><br />
# <div id="GraalVM">[https://www.graalvm.org/docs/introduction GraalVM Official documentation: '''Introduction''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/GraalVM Wikipedia: '''GraalVM''']</div><br />
# <div id="GraalVM">[https://medium.com/@nelvadas/a-la-d%C3%A9couverte-de-graalvm-5adbe0487624 Elvadas Nono : '''A la découverte de GraalVM (2020)''']</div><br />
# <div id="GraalVM">[https://www.theserverside.com/definition/GraalVM ServerSide: '''Definition of GraalVM''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Wikipedia: '''Machine Virtuelle Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/HotSpot Wikipedia: '''Hotspot''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/Maxine_Virtual_Machine_Kit Wikipedia: '''Maxine''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Java_Development_Kit Wikipedia: '''Java Development Kit''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://dev.to/abdulfousan/graalvm-polyglot-virtual-machine-4mn2 Abdul Fousan: '''GraalVM Polyglot Virtual Machine''']</div><br />
# <div id="GraalVM">[https://blog.plan99.net/graal-truffle-134d8f28fb69 Mike Hearn: '''GraalVM and Truffle''']</div><br />
# <div id="GraalVM">[https://www.trufflesuite.com/docs/truffle/overview Truffle Official documentation: '''GraalVM and Truffle''']</div><br />
<br />
=Veille Technologique 2020=<br />
* Année : [[VT2020|VT2021]]<br />
* Sujet : GraalVM<br />
* Slides : [[VT2020-GraalVM-Presentation.pdf|Slides]]<br />
* Auteurs : [[User:Alexis.Rollin]]</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Fiche&diff=48341VT2020-GraalVM-Fiche2020-11-14T21:03:31Z<p>Alexis.Rollin: /* Veille Technologique 2020 */</p>
<hr />
<div>GraalVM est une machine virtuelle Java développée par [https://fr.wikipedia.org/wiki/Oracle_(entreprise) Oracle] dite "polyglotte" car elle est capable de comprendre de nombreux langages de programmation.<br />
<br />
=Rappels sur l'architecture de la plateforme Java=<br />
<br />
L'architecture de GraalVM se basant sur celle d'un [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit], un rappel sur le fonctionnement de la plateforme Java peut s'avérer utile.<br />
<br />
Tout d'abord, le Java a la particularité d'être un langage à la fois compilé et interprété. Les tâches de compilation et d'interprétation sont distinctes et réalisées par des composants différents.<br />
Comme on peut le voir sur le schéma ci-dessous, le code Java est d'abord compilé en bytecode par un Java Compiler pour ensuite être interprété et exécuté par une Java Virtual Machine.<br />
<br />
[[File:java_platform_architecture2.png|500px|Composition d'un JDK]]<br />
<br />
Il faut donc distinguer dans cette architecture :<br />
* La [https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Java Virtual Machine] (JVM), qui interprète et exécute le code.<br />
* Le [https://fr.wikipedia.org/wiki/Environnement_d'exécution_Java Java Runtime Environment] (JRE), qui est un environnement d'exécution contenant des librairies et la JVM.<br />
* Le [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit] (JDK), qui est composé de librairies en Java, du JRE et du Java Compiler.<br />
<br />
=GraalVM=<br />
<br />
==Abstract==<br />
<br />
''"GraalVM is a high-performance multilingual runtime. It is designed to accelerate the execution of applications written in Java and other JVM languages while also providing runtimes for JavaScript, Ruby, Python, and a number of other popular languages. GraalVM’s polyglot capabilities make it possible to mix multiple programming languages in a single application while eliminating any foreign language call costs."'' - Documentation officielle de GraalVM<br />
<br />
==Origines==<br />
<br />
===Constats===<br />
<br />
Malgré son apparente popularité, le langage Java est sur le déclin. A l'origine, ce langage conçu par Sun Microsystems et dit "JVM" (comme les langages Kotlin ou Scala) avait été conçu avec l'idée de pouvoir être exécuté sur n'importe quelle plateforme ayant une JVM, affranchissant ainsi le développeur des spécificités d'exécution de la plateforme (d'où le slogan ''"Write Once Run Anywere"'' de Sun). Cependant, à cause la surcouche logicielle induite par la JVM, le langage Java a essuyé des critiques sur sa performance et sur sa verbosité.<br />
<br />
S'ajoute à cela un regain de popularité des langages natifs dans les années 2010, notamment grâce à Apple et son développement mobile iOS en Objective-C qui contraste avec Java ou Kotlin (étant tous deux des langages JVM) en terme de performance.<br />
<br />
Pour répondre à ces problématiques, l'entreprise Oracle se doit d'adapter constamment Java afin de rester compétitive, et sa JVM avec.<br />
<br />
===Ce qui existait déjà===<br />
<br />
Evidemment, Java fonctionnait bien avant l'arrivée de GraalVM, ce qui signifie qu'il existait donc déjà des machines virtuelles. La plus utilisée d'entre elles est [https://fr.wikipedia.org/wiki/HotSpot HotSpot], écrite en C++. Elle a été créé par Sun et appartient désormais à Oracle depuis le rachat de Sun. Notez que toutes les JVM (ou autres composants de la plateforme Java), ne sont pas forcément propriété d'Oracle : par exemple, OpenJ9 est une JVM dont la propriété revient à IBM et à la fondation Eclipse. Ces composants doivent ceci dit respecter des [https://docs.oracle.com/javase/specs/ spécifications dictées par Sun].<br />
<br />
La première version de Hotspot n'était qu'un interpréteur, puis elle a été améliorée avec un ajout de la [https://fr.wikipedia.org/wiki/Compilation_%C3%A0_la_vol%C3%A9e compilation à la volée (Just-In-Time)]. Ensuite elle a été capable de détecter les portions de code les plus fréquemment utilisés (les ''hotspots'') et de les optimiser.<br />
<br />
Ceci dit, GraalVM trouve ses racines dans le projet [https://en.wikipedia.org/wiki/Maxine_Virtual_Machine Maxine] (dévelopé par Sun Microsystems Laboratories en 2005), dont l'objectif était d'écrire une JVM en langage Java pour s'affranchir des problèmes de développement liés au C++, comme la gestion de la mémoire. Le projet s'est avéré trop ambitieux à l'époque mais a servi de point de départ pour GraalVM presque 15 ans plus tard.<br />
<br />
===Solution===<br />
<br />
Les objectifs ayant mené à la création de GraalVM sont multiples :<br />
* Avoir un environnement qui accélère l'exécution des applications écrites en Java ou d'autres langages JVM afin de rivaliser avec les langages natifs<br />
* Fournir un environnement d'exécution qui supporte plusieurs langages de programmation, supprimant ainsi l'isolation entre eux et établissant une véritable inter-opérabilité.<br />
<br />
La solution développée est GraalVM, une machine virtuelle haute performance (d'après les dires d'Oracle) qui prend en fait la forme d'un JDK dont la partie VM a été grandement améliorée.<br />
<br />
==Fonctionnalités==<br />
<br />
Les principaux atouts de GraalVM sont:<br />
* Graal Compiler, un nouveau compilateur [https://fr.wikipedia.org/wiki/Compilation_%C3%A0_la_vol%C3%A9e JIT (Just-In-Time)] pour Java<br />
* GraalVM Native Image, permettant la compilation [https://fr.wikipedia.org/wiki/Compilation_anticip%C3%A9e AOT (Ahead-Of-Time)] pour les applications Java. Le compilateur AOT permet ici de compiler directement le code Java en code machine.<br />
* Truffle Language Implementation framework et GraalVM SDK, fournissant des runtimes pour d'autres langages de programmation<br />
* LLVM Runtime et JavaScript Runtime<br />
<br />
On a en plus la possibilité d'installer des langages et même de définir le nôtre. Actuellement, tous les langages suivants sont compatibles avec Graal (moyennant installations supplémentaires) :<br />
[[File:Languages.png|600px|Listes des langages compatibles avec GraalVM]]<br />
<br />
==Architecture==<br />
<br />
[[File:graal_vm_architecture.jpg | 500px | thumb | right | Architecture de la JVM GraalVM]]<br />
<br />
GraalVM réutilise l'architecture d'OpenJDK (qui est sans grande surprise un JDK), mais avec quelques particularités au niveau de la JVM :<br />
* Il réutilise la VM Hotspot, mais de laquelle on a retiré le JIT Compiler. <br />
* Il bénéficie d'un nouveau compilateur JIT, Graal Compiler, écrit en Java et en dehors de Hotspot. Il a pour mission de transformer du bytecode en code machine (ne pas confondre avec le Java Compiler, plus haut niveau).<br />
* Pour permettre à la JVM Hotspot d'utiliser un compilateur écrit en Java, une couche intermédiaire est nécessaire : la JVM Compiler Interface.<br />
* Tout ce qui doit arriver au compilateur JIT doit être du bytecode. C'est pourquoi les langages non-JVM ne peuvent pas être directement pris en entrée de Graal Compiler. La couche Truffle framework répond à cette problématique. Truffle est un framework open-source qui sert à définir nos propres langages de programmation à travers un AST (Abstract Syntax Tree) et à construire des interpréteurs pour ce dernier. Il est réutilisé dans GraalVM pour définir des implémentations Truffle de Python, Ruby ou encore Javascript. Attention, l'implémentation d'un langage sous Truffle n'est pas le langage en lui-même, ce qui pose quelques problèmes comme on peut le voir dans la partie Limites.<br />
* La couche Truffle suffisait pour les langages interprétés puisque Truffle construit des interpréteurs. Mais pour les langages LLVM (Low Level Virtual Machine) comme le C, le C++ ou le Fortran, une surcouche est nécessaire. Sulong est une LLVM qui permet de produire du bitcode en s'appuyant sur les fonctionnalités de Truffle.<br />
<br />
==Utilisation==<br />
<br />
===Installation===<br />
<br />
GraalVM est très simple à installer.<br />
<br />
* Naviguez sur le [https://github.com/graalvm/graalvm-ce-builds/release git de GraalVM] et téléchargez la version de GraalVM compatible avec notre version de Java/OpenJDK, que l'on peut connaître avec la commande <code>java -version</code>.<br />
<br />
* Dézippez l'archive à l'endroit de votre choix.<br />
<pre>tar -xzf <graalvm-archive>.tar.gz</pre><br />
<br />
* Configurez votre variable d'environnement PATH:<br />
<pre>export PATH=<graalvm>/bin:$PATH</pre><br />
Si vous souhaitez remplacer votre JDK par GraalVM pour toutes vos applications utilisant Java, vous pouvez changer la variable d'environnement <code>JAVA_HOME</code>.<br />
<pre>export JAVA_HOME=<graalvm></pre><br />
Si vous ne souhaitez pas modifier votre <code>JAVA_HOME</code>, vous pouvez définir une variable d'environnement <code>GRAAL_HOME</code> qui vous sera utile pour ne pas avoir à réécrire le chemin complet de Graal.<br />
Notez également que vous pouvez rendre les commandes au-dessus permanentes en les ajoutant à votre fichier <code>.bashrc</code> ou <code>.zshrc</code>.<br />
<br />
===Exécution===<br />
<br />
Le dossier /bin est similaire à un JDK standard, mais contient des launchers additionnels (en plus de <code>javac</code> pour le Java):<br />
* <code>js</code>, un launcher JavaScript<br />
* <code>node</code>, un launcher Node.js<br />
* <code>lli</code>, un launcher LLVM<br />
En d'autres termes, GraalVM ne comprend que le Java, Node.js (grâce au Javascript Runtime) et les langages LLVM (grâce au LLVM Runtime). Cependant, d'autres launchers peuvent être installés avec la commande :<br />
<pre><br />
gu install <nom_du_langage><br />
</pre><br />
<br />
====Par ligne de commande====<br />
<br />
En règle générale, les commandes d'exécution sont de la forme :<br />
<pre><br />
<nom_du_laucher> <nom_du_programme><br />
</pre><br />
Par exemple :<br />
<pre><br />
node app.js<br />
</pre><br />
Les programmes LLVM doivent êtres compilés avant avec l'outil LLVM Toolchain car le launcher lli ne comprend que du bitcode :<br />
<pre><br />
gu install llvm-toolchain<br />
export LLVM_TOOLCHAIN=$(lli --print-toolchain-path)<br />
$LLVM_TOOLCHAIN/clang hello.c -o hello<br />
lli hello<br />
</pre><br />
====Dans un IDE====<br />
<br />
Dans l'IDE, il suffit de remplacer le path du JRE ou du JDK par le path de GraalVM.<br />
Sous eclipse par exemple, cela peut se faire en allant dans ''Window/Preferences/Java/Installed JREs''.<br />
<br />
[[File:installation_ide.png|500px|Spécification du JDK dans l'IDE]]<br />
<br />
====Mixage de langages====<br />
<br />
Au niveau du JDK, Graal propose tout un ensemble de librairies permettant l'inter-opérabilité entre les langages. Par exemple, il est possible depuis un programme Java d'importer la libraire org.graalvm.polyglot pour exécuter les fonctions d'un programme dans un autre langage et en récupérer le résultat.<br />
<br />
==Limites==<br />
<br />
Même si les promesses de GraalVM, à savoir l'amélioration des performances à l'exécution des langages JVM et le polyglottisme, sont respectées, l'outil d'Oracle rencontre quand même quelques limites :<br />
<br />
* On peut regretter que les langages les plus bas niveaux comme le C soient paradoxalement ceux qui traversent le plus de couches logicielles dans l'architecture de GraalVM. Leur interêt en termes de performance est donc extrêmement diminué puisqu'ils nécessitent de nombreuses opérations pour être transformé en bytecode, bytecode qui est logé à la même enseigne que le bytecode issu de code Java au yeux du compilateur.<br />
<br />
* En règle générale, les performances hors langages JVM sont tout de même loins d'être extraordinaires. L'inter-opérabilité entre langages est fonctionnelles mais coûteuse en ressources. A en croire la documentation, l'overhead est quand même évité, c'est à dire que les données sont échangées entre les différents langages sans être dupliquées.<br />
<br />
* Les langages compris par GraalVM étant en fait des implémentations Truffle de langages et pas les langages en eux-mêmes, il manque les librairies utiles à chaque langage. Il est donc impossible par exemple, d'utiliser ''matplolib'' dans un programme Python. Les programmes en sont plus ou moins réduit à de l'algorithmie selon les capacités natives du langage.<br />
<br />
=Demonstration=<br />
<br />
Une démonstration de GraalVM est accessible à ce lien : [[VT2020-GraalVM-Demo|VT2020-GraalVM-Demo]]<br />
<br />
=Sources=<br />
# <div id="GraalVM">[https://www.graalvm.org/docs/getting-started GraalVM Official documentation: '''Getting Started''']</div><br />
# <div id="GraalVM">[https://www.graalvm.org/docs/introduction GraalVM Official documentation: '''Introduction''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/GraalVM Wikipedia: '''GraalVM''']</div><br />
# <div id="GraalVM">[https://medium.com/@nelvadas/a-la-d%C3%A9couverte-de-graalvm-5adbe0487624 Elvadas Nono : '''A la découverte de GraalVM (2020)''']</div><br />
# <div id="GraalVM">[https://www.theserverside.com/definition/GraalVM ServerSide: '''Definition of GraalVM''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Wikipedia: '''Machine Virtuelle Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/HotSpot Wikipedia: '''Hotspot''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/Maxine_Virtual_Machine_Kit Wikipedia: '''Maxine''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Java_Development_Kit Wikipedia: '''Java Development Kit''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://dev.to/abdulfousan/graalvm-polyglot-virtual-machine-4mn2 Abdul Fousan: '''GraalVM Polyglot Virtual Machine''']</div><br />
# <div id="GraalVM">[https://blog.plan99.net/graal-truffle-134d8f28fb69 Mike Hearn: '''GraalVM and Truffle''']</div><br />
# <div id="GraalVM">[https://www.trufflesuite.com/docs/truffle/overview Truffle Official documentation: '''GraalVM and Truffle''']</div><br />
<br />
=Veille Technologique 2020=<br />
* Année : [[VT2020|VT2021]]<br />
* Sujet : GraalVM<br />
* Slides : [[File:VT2020-GraalVM-Presentation.pdf|Slides]]<br />
* Auteurs : [[User:Alexis.Rollin]]</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Fiche&diff=48340VT2020-GraalVM-Fiche2020-11-14T21:02:57Z<p>Alexis.Rollin: /* Sources */</p>
<hr />
<div>GraalVM est une machine virtuelle Java développée par [https://fr.wikipedia.org/wiki/Oracle_(entreprise) Oracle] dite "polyglotte" car elle est capable de comprendre de nombreux langages de programmation.<br />
<br />
=Rappels sur l'architecture de la plateforme Java=<br />
<br />
L'architecture de GraalVM se basant sur celle d'un [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit], un rappel sur le fonctionnement de la plateforme Java peut s'avérer utile.<br />
<br />
Tout d'abord, le Java a la particularité d'être un langage à la fois compilé et interprété. Les tâches de compilation et d'interprétation sont distinctes et réalisées par des composants différents.<br />
Comme on peut le voir sur le schéma ci-dessous, le code Java est d'abord compilé en bytecode par un Java Compiler pour ensuite être interprété et exécuté par une Java Virtual Machine.<br />
<br />
[[File:java_platform_architecture2.png|500px|Composition d'un JDK]]<br />
<br />
Il faut donc distinguer dans cette architecture :<br />
* La [https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Java Virtual Machine] (JVM), qui interprète et exécute le code.<br />
* Le [https://fr.wikipedia.org/wiki/Environnement_d'exécution_Java Java Runtime Environment] (JRE), qui est un environnement d'exécution contenant des librairies et la JVM.<br />
* Le [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit] (JDK), qui est composé de librairies en Java, du JRE et du Java Compiler.<br />
<br />
=GraalVM=<br />
<br />
==Abstract==<br />
<br />
''"GraalVM is a high-performance multilingual runtime. It is designed to accelerate the execution of applications written in Java and other JVM languages while also providing runtimes for JavaScript, Ruby, Python, and a number of other popular languages. GraalVM’s polyglot capabilities make it possible to mix multiple programming languages in a single application while eliminating any foreign language call costs."'' - Documentation officielle de GraalVM<br />
<br />
==Origines==<br />
<br />
===Constats===<br />
<br />
Malgré son apparente popularité, le langage Java est sur le déclin. A l'origine, ce langage conçu par Sun Microsystems et dit "JVM" (comme les langages Kotlin ou Scala) avait été conçu avec l'idée de pouvoir être exécuté sur n'importe quelle plateforme ayant une JVM, affranchissant ainsi le développeur des spécificités d'exécution de la plateforme (d'où le slogan ''"Write Once Run Anywere"'' de Sun). Cependant, à cause la surcouche logicielle induite par la JVM, le langage Java a essuyé des critiques sur sa performance et sur sa verbosité.<br />
<br />
S'ajoute à cela un regain de popularité des langages natifs dans les années 2010, notamment grâce à Apple et son développement mobile iOS en Objective-C qui contraste avec Java ou Kotlin (étant tous deux des langages JVM) en terme de performance.<br />
<br />
Pour répondre à ces problématiques, l'entreprise Oracle se doit d'adapter constamment Java afin de rester compétitive, et sa JVM avec.<br />
<br />
===Ce qui existait déjà===<br />
<br />
Evidemment, Java fonctionnait bien avant l'arrivée de GraalVM, ce qui signifie qu'il existait donc déjà des machines virtuelles. La plus utilisée d'entre elles est [https://fr.wikipedia.org/wiki/HotSpot HotSpot], écrite en C++. Elle a été créé par Sun et appartient désormais à Oracle depuis le rachat de Sun. Notez que toutes les JVM (ou autres composants de la plateforme Java), ne sont pas forcément propriété d'Oracle : par exemple, OpenJ9 est une JVM dont la propriété revient à IBM et à la fondation Eclipse. Ces composants doivent ceci dit respecter des [https://docs.oracle.com/javase/specs/ spécifications dictées par Sun].<br />
<br />
La première version de Hotspot n'était qu'un interpréteur, puis elle a été améliorée avec un ajout de la [https://fr.wikipedia.org/wiki/Compilation_%C3%A0_la_vol%C3%A9e compilation à la volée (Just-In-Time)]. Ensuite elle a été capable de détecter les portions de code les plus fréquemment utilisés (les ''hotspots'') et de les optimiser.<br />
<br />
Ceci dit, GraalVM trouve ses racines dans le projet [https://en.wikipedia.org/wiki/Maxine_Virtual_Machine Maxine] (dévelopé par Sun Microsystems Laboratories en 2005), dont l'objectif était d'écrire une JVM en langage Java pour s'affranchir des problèmes de développement liés au C++, comme la gestion de la mémoire. Le projet s'est avéré trop ambitieux à l'époque mais a servi de point de départ pour GraalVM presque 15 ans plus tard.<br />
<br />
===Solution===<br />
<br />
Les objectifs ayant mené à la création de GraalVM sont multiples :<br />
* Avoir un environnement qui accélère l'exécution des applications écrites en Java ou d'autres langages JVM afin de rivaliser avec les langages natifs<br />
* Fournir un environnement d'exécution qui supporte plusieurs langages de programmation, supprimant ainsi l'isolation entre eux et établissant une véritable inter-opérabilité.<br />
<br />
La solution développée est GraalVM, une machine virtuelle haute performance (d'après les dires d'Oracle) qui prend en fait la forme d'un JDK dont la partie VM a été grandement améliorée.<br />
<br />
==Fonctionnalités==<br />
<br />
Les principaux atouts de GraalVM sont:<br />
* Graal Compiler, un nouveau compilateur [https://fr.wikipedia.org/wiki/Compilation_%C3%A0_la_vol%C3%A9e JIT (Just-In-Time)] pour Java<br />
* GraalVM Native Image, permettant la compilation [https://fr.wikipedia.org/wiki/Compilation_anticip%C3%A9e AOT (Ahead-Of-Time)] pour les applications Java. Le compilateur AOT permet ici de compiler directement le code Java en code machine.<br />
* Truffle Language Implementation framework et GraalVM SDK, fournissant des runtimes pour d'autres langages de programmation<br />
* LLVM Runtime et JavaScript Runtime<br />
<br />
On a en plus la possibilité d'installer des langages et même de définir le nôtre. Actuellement, tous les langages suivants sont compatibles avec Graal (moyennant installations supplémentaires) :<br />
[[File:Languages.png|600px|Listes des langages compatibles avec GraalVM]]<br />
<br />
==Architecture==<br />
<br />
[[File:graal_vm_architecture.jpg | 500px | thumb | right | Architecture de la JVM GraalVM]]<br />
<br />
GraalVM réutilise l'architecture d'OpenJDK (qui est sans grande surprise un JDK), mais avec quelques particularités au niveau de la JVM :<br />
* Il réutilise la VM Hotspot, mais de laquelle on a retiré le JIT Compiler. <br />
* Il bénéficie d'un nouveau compilateur JIT, Graal Compiler, écrit en Java et en dehors de Hotspot. Il a pour mission de transformer du bytecode en code machine (ne pas confondre avec le Java Compiler, plus haut niveau).<br />
* Pour permettre à la JVM Hotspot d'utiliser un compilateur écrit en Java, une couche intermédiaire est nécessaire : la JVM Compiler Interface.<br />
* Tout ce qui doit arriver au compilateur JIT doit être du bytecode. C'est pourquoi les langages non-JVM ne peuvent pas être directement pris en entrée de Graal Compiler. La couche Truffle framework répond à cette problématique. Truffle est un framework open-source qui sert à définir nos propres langages de programmation à travers un AST (Abstract Syntax Tree) et à construire des interpréteurs pour ce dernier. Il est réutilisé dans GraalVM pour définir des implémentations Truffle de Python, Ruby ou encore Javascript. Attention, l'implémentation d'un langage sous Truffle n'est pas le langage en lui-même, ce qui pose quelques problèmes comme on peut le voir dans la partie Limites.<br />
* La couche Truffle suffisait pour les langages interprétés puisque Truffle construit des interpréteurs. Mais pour les langages LLVM (Low Level Virtual Machine) comme le C, le C++ ou le Fortran, une surcouche est nécessaire. Sulong est une LLVM qui permet de produire du bitcode en s'appuyant sur les fonctionnalités de Truffle.<br />
<br />
==Utilisation==<br />
<br />
===Installation===<br />
<br />
GraalVM est très simple à installer.<br />
<br />
* Naviguez sur le [https://github.com/graalvm/graalvm-ce-builds/release git de GraalVM] et téléchargez la version de GraalVM compatible avec notre version de Java/OpenJDK, que l'on peut connaître avec la commande <code>java -version</code>.<br />
<br />
* Dézippez l'archive à l'endroit de votre choix.<br />
<pre>tar -xzf <graalvm-archive>.tar.gz</pre><br />
<br />
* Configurez votre variable d'environnement PATH:<br />
<pre>export PATH=<graalvm>/bin:$PATH</pre><br />
Si vous souhaitez remplacer votre JDK par GraalVM pour toutes vos applications utilisant Java, vous pouvez changer la variable d'environnement <code>JAVA_HOME</code>.<br />
<pre>export JAVA_HOME=<graalvm></pre><br />
Si vous ne souhaitez pas modifier votre <code>JAVA_HOME</code>, vous pouvez définir une variable d'environnement <code>GRAAL_HOME</code> qui vous sera utile pour ne pas avoir à réécrire le chemin complet de Graal.<br />
Notez également que vous pouvez rendre les commandes au-dessus permanentes en les ajoutant à votre fichier <code>.bashrc</code> ou <code>.zshrc</code>.<br />
<br />
===Exécution===<br />
<br />
Le dossier /bin est similaire à un JDK standard, mais contient des launchers additionnels (en plus de <code>javac</code> pour le Java):<br />
* <code>js</code>, un launcher JavaScript<br />
* <code>node</code>, un launcher Node.js<br />
* <code>lli</code>, un launcher LLVM<br />
En d'autres termes, GraalVM ne comprend que le Java, Node.js (grâce au Javascript Runtime) et les langages LLVM (grâce au LLVM Runtime). Cependant, d'autres launchers peuvent être installés avec la commande :<br />
<pre><br />
gu install <nom_du_langage><br />
</pre><br />
<br />
====Par ligne de commande====<br />
<br />
En règle générale, les commandes d'exécution sont de la forme :<br />
<pre><br />
<nom_du_laucher> <nom_du_programme><br />
</pre><br />
Par exemple :<br />
<pre><br />
node app.js<br />
</pre><br />
Les programmes LLVM doivent êtres compilés avant avec l'outil LLVM Toolchain car le launcher lli ne comprend que du bitcode :<br />
<pre><br />
gu install llvm-toolchain<br />
export LLVM_TOOLCHAIN=$(lli --print-toolchain-path)<br />
$LLVM_TOOLCHAIN/clang hello.c -o hello<br />
lli hello<br />
</pre><br />
====Dans un IDE====<br />
<br />
Dans l'IDE, il suffit de remplacer le path du JRE ou du JDK par le path de GraalVM.<br />
Sous eclipse par exemple, cela peut se faire en allant dans ''Window/Preferences/Java/Installed JREs''.<br />
<br />
[[File:installation_ide.png|500px|Spécification du JDK dans l'IDE]]<br />
<br />
====Mixage de langages====<br />
<br />
Au niveau du JDK, Graal propose tout un ensemble de librairies permettant l'inter-opérabilité entre les langages. Par exemple, il est possible depuis un programme Java d'importer la libraire org.graalvm.polyglot pour exécuter les fonctions d'un programme dans un autre langage et en récupérer le résultat.<br />
<br />
==Limites==<br />
<br />
Même si les promesses de GraalVM, à savoir l'amélioration des performances à l'exécution des langages JVM et le polyglottisme, sont respectées, l'outil d'Oracle rencontre quand même quelques limites :<br />
<br />
* On peut regretter que les langages les plus bas niveaux comme le C soient paradoxalement ceux qui traversent le plus de couches logicielles dans l'architecture de GraalVM. Leur interêt en termes de performance est donc extrêmement diminué puisqu'ils nécessitent de nombreuses opérations pour être transformé en bytecode, bytecode qui est logé à la même enseigne que le bytecode issu de code Java au yeux du compilateur.<br />
<br />
* En règle générale, les performances hors langages JVM sont tout de même loins d'être extraordinaires. L'inter-opérabilité entre langages est fonctionnelles mais coûteuse en ressources. A en croire la documentation, l'overhead est quand même évité, c'est à dire que les données sont échangées entre les différents langages sans être dupliquées.<br />
<br />
* Les langages compris par GraalVM étant en fait des implémentations Truffle de langages et pas les langages en eux-mêmes, il manque les librairies utiles à chaque langage. Il est donc impossible par exemple, d'utiliser ''matplolib'' dans un programme Python. Les programmes en sont plus ou moins réduit à de l'algorithmie selon les capacités natives du langage.<br />
<br />
=Demonstration=<br />
<br />
Une démonstration de GraalVM est accessible à ce lien : [[VT2020-GraalVM-Demo|VT2020-GraalVM-Demo]]<br />
<br />
=Sources=<br />
# <div id="GraalVM">[https://www.graalvm.org/docs/getting-started GraalVM Official documentation: '''Getting Started''']</div><br />
# <div id="GraalVM">[https://www.graalvm.org/docs/introduction GraalVM Official documentation: '''Introduction''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/GraalVM Wikipedia: '''GraalVM''']</div><br />
# <div id="GraalVM">[https://medium.com/@nelvadas/a-la-d%C3%A9couverte-de-graalvm-5adbe0487624 Elvadas Nono : '''A la découverte de GraalVM (2020)''']</div><br />
# <div id="GraalVM">[https://www.theserverside.com/definition/GraalVM ServerSide: '''Definition of GraalVM''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Wikipedia: '''Machine Virtuelle Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/HotSpot Wikipedia: '''Hotspot''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/Maxine_Virtual_Machine_Kit Wikipedia: '''Maxine''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Java_Development_Kit Wikipedia: '''Java Development Kit''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://dev.to/abdulfousan/graalvm-polyglot-virtual-machine-4mn2 Abdul Fousan: '''GraalVM Polyglot Virtual Machine''']</div><br />
# <div id="GraalVM">[https://blog.plan99.net/graal-truffle-134d8f28fb69 Mike Hearn: '''GraalVM and Truffle''']</div><br />
# <div id="GraalVM">[https://www.trufflesuite.com/docs/truffle/overview Truffle Official documentation: '''GraalVM and Truffle''']</div><br />
<br />
=Veille Technologique 2020=<br />
* Année : [[VT2020|VT2021]]<br />
* Sujet : GraalVM<br />
* Slides : [[Media:GraalVM.pdf|Slides]]<br />
* Auteurs : [[User:Alexis.Rollin]]</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Fiche&diff=48339VT2020-GraalVM-Fiche2020-11-14T21:02:32Z<p>Alexis.Rollin: /* Exécution */</p>
<hr />
<div>GraalVM est une machine virtuelle Java développée par [https://fr.wikipedia.org/wiki/Oracle_(entreprise) Oracle] dite "polyglotte" car elle est capable de comprendre de nombreux langages de programmation.<br />
<br />
=Rappels sur l'architecture de la plateforme Java=<br />
<br />
L'architecture de GraalVM se basant sur celle d'un [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit], un rappel sur le fonctionnement de la plateforme Java peut s'avérer utile.<br />
<br />
Tout d'abord, le Java a la particularité d'être un langage à la fois compilé et interprété. Les tâches de compilation et d'interprétation sont distinctes et réalisées par des composants différents.<br />
Comme on peut le voir sur le schéma ci-dessous, le code Java est d'abord compilé en bytecode par un Java Compiler pour ensuite être interprété et exécuté par une Java Virtual Machine.<br />
<br />
[[File:java_platform_architecture2.png|500px|Composition d'un JDK]]<br />
<br />
Il faut donc distinguer dans cette architecture :<br />
* La [https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Java Virtual Machine] (JVM), qui interprète et exécute le code.<br />
* Le [https://fr.wikipedia.org/wiki/Environnement_d'exécution_Java Java Runtime Environment] (JRE), qui est un environnement d'exécution contenant des librairies et la JVM.<br />
* Le [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit] (JDK), qui est composé de librairies en Java, du JRE et du Java Compiler.<br />
<br />
=GraalVM=<br />
<br />
==Abstract==<br />
<br />
''"GraalVM is a high-performance multilingual runtime. It is designed to accelerate the execution of applications written in Java and other JVM languages while also providing runtimes for JavaScript, Ruby, Python, and a number of other popular languages. GraalVM’s polyglot capabilities make it possible to mix multiple programming languages in a single application while eliminating any foreign language call costs."'' - Documentation officielle de GraalVM<br />
<br />
==Origines==<br />
<br />
===Constats===<br />
<br />
Malgré son apparente popularité, le langage Java est sur le déclin. A l'origine, ce langage conçu par Sun Microsystems et dit "JVM" (comme les langages Kotlin ou Scala) avait été conçu avec l'idée de pouvoir être exécuté sur n'importe quelle plateforme ayant une JVM, affranchissant ainsi le développeur des spécificités d'exécution de la plateforme (d'où le slogan ''"Write Once Run Anywere"'' de Sun). Cependant, à cause la surcouche logicielle induite par la JVM, le langage Java a essuyé des critiques sur sa performance et sur sa verbosité.<br />
<br />
S'ajoute à cela un regain de popularité des langages natifs dans les années 2010, notamment grâce à Apple et son développement mobile iOS en Objective-C qui contraste avec Java ou Kotlin (étant tous deux des langages JVM) en terme de performance.<br />
<br />
Pour répondre à ces problématiques, l'entreprise Oracle se doit d'adapter constamment Java afin de rester compétitive, et sa JVM avec.<br />
<br />
===Ce qui existait déjà===<br />
<br />
Evidemment, Java fonctionnait bien avant l'arrivée de GraalVM, ce qui signifie qu'il existait donc déjà des machines virtuelles. La plus utilisée d'entre elles est [https://fr.wikipedia.org/wiki/HotSpot HotSpot], écrite en C++. Elle a été créé par Sun et appartient désormais à Oracle depuis le rachat de Sun. Notez que toutes les JVM (ou autres composants de la plateforme Java), ne sont pas forcément propriété d'Oracle : par exemple, OpenJ9 est une JVM dont la propriété revient à IBM et à la fondation Eclipse. Ces composants doivent ceci dit respecter des [https://docs.oracle.com/javase/specs/ spécifications dictées par Sun].<br />
<br />
La première version de Hotspot n'était qu'un interpréteur, puis elle a été améliorée avec un ajout de la [https://fr.wikipedia.org/wiki/Compilation_%C3%A0_la_vol%C3%A9e compilation à la volée (Just-In-Time)]. Ensuite elle a été capable de détecter les portions de code les plus fréquemment utilisés (les ''hotspots'') et de les optimiser.<br />
<br />
Ceci dit, GraalVM trouve ses racines dans le projet [https://en.wikipedia.org/wiki/Maxine_Virtual_Machine Maxine] (dévelopé par Sun Microsystems Laboratories en 2005), dont l'objectif était d'écrire une JVM en langage Java pour s'affranchir des problèmes de développement liés au C++, comme la gestion de la mémoire. Le projet s'est avéré trop ambitieux à l'époque mais a servi de point de départ pour GraalVM presque 15 ans plus tard.<br />
<br />
===Solution===<br />
<br />
Les objectifs ayant mené à la création de GraalVM sont multiples :<br />
* Avoir un environnement qui accélère l'exécution des applications écrites en Java ou d'autres langages JVM afin de rivaliser avec les langages natifs<br />
* Fournir un environnement d'exécution qui supporte plusieurs langages de programmation, supprimant ainsi l'isolation entre eux et établissant une véritable inter-opérabilité.<br />
<br />
La solution développée est GraalVM, une machine virtuelle haute performance (d'après les dires d'Oracle) qui prend en fait la forme d'un JDK dont la partie VM a été grandement améliorée.<br />
<br />
==Fonctionnalités==<br />
<br />
Les principaux atouts de GraalVM sont:<br />
* Graal Compiler, un nouveau compilateur [https://fr.wikipedia.org/wiki/Compilation_%C3%A0_la_vol%C3%A9e JIT (Just-In-Time)] pour Java<br />
* GraalVM Native Image, permettant la compilation [https://fr.wikipedia.org/wiki/Compilation_anticip%C3%A9e AOT (Ahead-Of-Time)] pour les applications Java. Le compilateur AOT permet ici de compiler directement le code Java en code machine.<br />
* Truffle Language Implementation framework et GraalVM SDK, fournissant des runtimes pour d'autres langages de programmation<br />
* LLVM Runtime et JavaScript Runtime<br />
<br />
On a en plus la possibilité d'installer des langages et même de définir le nôtre. Actuellement, tous les langages suivants sont compatibles avec Graal (moyennant installations supplémentaires) :<br />
[[File:Languages.png|600px|Listes des langages compatibles avec GraalVM]]<br />
<br />
==Architecture==<br />
<br />
[[File:graal_vm_architecture.jpg | 500px | thumb | right | Architecture de la JVM GraalVM]]<br />
<br />
GraalVM réutilise l'architecture d'OpenJDK (qui est sans grande surprise un JDK), mais avec quelques particularités au niveau de la JVM :<br />
* Il réutilise la VM Hotspot, mais de laquelle on a retiré le JIT Compiler. <br />
* Il bénéficie d'un nouveau compilateur JIT, Graal Compiler, écrit en Java et en dehors de Hotspot. Il a pour mission de transformer du bytecode en code machine (ne pas confondre avec le Java Compiler, plus haut niveau).<br />
* Pour permettre à la JVM Hotspot d'utiliser un compilateur écrit en Java, une couche intermédiaire est nécessaire : la JVM Compiler Interface.<br />
* Tout ce qui doit arriver au compilateur JIT doit être du bytecode. C'est pourquoi les langages non-JVM ne peuvent pas être directement pris en entrée de Graal Compiler. La couche Truffle framework répond à cette problématique. Truffle est un framework open-source qui sert à définir nos propres langages de programmation à travers un AST (Abstract Syntax Tree) et à construire des interpréteurs pour ce dernier. Il est réutilisé dans GraalVM pour définir des implémentations Truffle de Python, Ruby ou encore Javascript. Attention, l'implémentation d'un langage sous Truffle n'est pas le langage en lui-même, ce qui pose quelques problèmes comme on peut le voir dans la partie Limites.<br />
* La couche Truffle suffisait pour les langages interprétés puisque Truffle construit des interpréteurs. Mais pour les langages LLVM (Low Level Virtual Machine) comme le C, le C++ ou le Fortran, une surcouche est nécessaire. Sulong est une LLVM qui permet de produire du bitcode en s'appuyant sur les fonctionnalités de Truffle.<br />
<br />
==Utilisation==<br />
<br />
===Installation===<br />
<br />
GraalVM est très simple à installer.<br />
<br />
* Naviguez sur le [https://github.com/graalvm/graalvm-ce-builds/release git de GraalVM] et téléchargez la version de GraalVM compatible avec notre version de Java/OpenJDK, que l'on peut connaître avec la commande <code>java -version</code>.<br />
<br />
* Dézippez l'archive à l'endroit de votre choix.<br />
<pre>tar -xzf <graalvm-archive>.tar.gz</pre><br />
<br />
* Configurez votre variable d'environnement PATH:<br />
<pre>export PATH=<graalvm>/bin:$PATH</pre><br />
Si vous souhaitez remplacer votre JDK par GraalVM pour toutes vos applications utilisant Java, vous pouvez changer la variable d'environnement <code>JAVA_HOME</code>.<br />
<pre>export JAVA_HOME=<graalvm></pre><br />
Si vous ne souhaitez pas modifier votre <code>JAVA_HOME</code>, vous pouvez définir une variable d'environnement <code>GRAAL_HOME</code> qui vous sera utile pour ne pas avoir à réécrire le chemin complet de Graal.<br />
Notez également que vous pouvez rendre les commandes au-dessus permanentes en les ajoutant à votre fichier <code>.bashrc</code> ou <code>.zshrc</code>.<br />
<br />
===Exécution===<br />
<br />
Le dossier /bin est similaire à un JDK standard, mais contient des launchers additionnels (en plus de <code>javac</code> pour le Java):<br />
* <code>js</code>, un launcher JavaScript<br />
* <code>node</code>, un launcher Node.js<br />
* <code>lli</code>, un launcher LLVM<br />
En d'autres termes, GraalVM ne comprend que le Java, Node.js (grâce au Javascript Runtime) et les langages LLVM (grâce au LLVM Runtime). Cependant, d'autres launchers peuvent être installés avec la commande :<br />
<pre><br />
gu install <nom_du_langage><br />
</pre><br />
<br />
====Par ligne de commande====<br />
<br />
En règle générale, les commandes d'exécution sont de la forme :<br />
<pre><br />
<nom_du_laucher> <nom_du_programme><br />
</pre><br />
Par exemple :<br />
<pre><br />
node app.js<br />
</pre><br />
Les programmes LLVM doivent êtres compilés avant avec l'outil LLVM Toolchain car le launcher lli ne comprend que du bitcode :<br />
<pre><br />
gu install llvm-toolchain<br />
export LLVM_TOOLCHAIN=$(lli --print-toolchain-path)<br />
$LLVM_TOOLCHAIN/clang hello.c -o hello<br />
lli hello<br />
</pre><br />
====Dans un IDE====<br />
<br />
Dans l'IDE, il suffit de remplacer le path du JRE ou du JDK par le path de GraalVM.<br />
Sous eclipse par exemple, cela peut se faire en allant dans ''Window/Preferences/Java/Installed JREs''.<br />
<br />
[[File:installation_ide.png|500px|Spécification du JDK dans l'IDE]]<br />
<br />
====Mixage de langages====<br />
<br />
Au niveau du JDK, Graal propose tout un ensemble de librairies permettant l'inter-opérabilité entre les langages. Par exemple, il est possible depuis un programme Java d'importer la libraire org.graalvm.polyglot pour exécuter les fonctions d'un programme dans un autre langage et en récupérer le résultat.<br />
<br />
==Limites==<br />
<br />
Même si les promesses de GraalVM, à savoir l'amélioration des performances à l'exécution des langages JVM et le polyglottisme, sont respectées, l'outil d'Oracle rencontre quand même quelques limites :<br />
<br />
* On peut regretter que les langages les plus bas niveaux comme le C soient paradoxalement ceux qui traversent le plus de couches logicielles dans l'architecture de GraalVM. Leur interêt en termes de performance est donc extrêmement diminué puisqu'ils nécessitent de nombreuses opérations pour être transformé en bytecode, bytecode qui est logé à la même enseigne que le bytecode issu de code Java au yeux du compilateur.<br />
<br />
* En règle générale, les performances hors langages JVM sont tout de même loins d'être extraordinaires. L'inter-opérabilité entre langages est fonctionnelles mais coûteuse en ressources. A en croire la documentation, l'overhead est quand même évité, c'est à dire que les données sont échangées entre les différents langages sans être dupliquées.<br />
<br />
* Les langages compris par GraalVM étant en fait des implémentations Truffle de langages et pas les langages en eux-mêmes, il manque les librairies utiles à chaque langage. Il est donc impossible par exemple, d'utiliser ''matplolib'' dans un programme Python. Les programmes en sont plus ou moins réduit à de l'algorithmie selon les capacités natives du langage.<br />
<br />
=Demonstration=<br />
<br />
Une démonstration de GraalVM est accessible à ce lien : [[VT2020-GraalVM-Demo|VT2020-GraalVM-Demo]]<br />
<br />
=Sources=<br />
# <div id="GraalVM">[https://www.graalvm.org/docs/getting-started GraalVM Official documentation: '''Getting Started''']</div><br />
# <div id="GraalVM">[https://www.graalvm.org/docs/introduction GraalVM Official documentation: '''Introduction''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/GraalVM Wikipedia: '''GraalVM''']</div><br />
# <div id="GraalVM">[https://medium.com/@nelvadas/a-la-d%C3%A9couverte-de-graalvm-5adbe0487624 Elvadas Nono : '''A la découverte de GraalVM (2020)''']</div><br />
# <div id="GraalVM">[https://www.theserverside.com/definition/GraalVM ServerSide: '''Definition of GraalVM''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Wikipedia: '''Machine Virtuelle Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/HotSpot Wikipedia: '''Hotspot''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/Maxine_Virtual_Machine_Kit Wikipedia: '''Maxine''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Java_Development_Kit Wikipedia: '''Java Development it''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://dev.to/abdulfousan/graalvm-polyglot-virtual-machine-4mn2 Abdul Fousan: '''GraalVM Polyglot Virtual Machine''']</div><br />
# <div id="GraalVM">[https://blog.plan99.net/graal-truffle-134d8f28fb69 Mike Hearn: '''GraalVM and Truffle''']</div><br />
# <div id="GraalVM">[https://www.trufflesuite.com/docs/truffle/overview Truffle Official documentation: '''GraalVM and Truffle''']</div><br />
<br />
=Veille Technologique 2020=<br />
* Année : [[VT2020|VT2021]]<br />
* Sujet : GraalVM<br />
* Slides : [[Media:GraalVM.pdf|Slides]]<br />
* Auteurs : [[User:Alexis.Rollin]]</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Fiche&diff=48338VT2020-GraalVM-Fiche2020-11-14T21:02:06Z<p>Alexis.Rollin: /* Utilisation */</p>
<hr />
<div>GraalVM est une machine virtuelle Java développée par [https://fr.wikipedia.org/wiki/Oracle_(entreprise) Oracle] dite "polyglotte" car elle est capable de comprendre de nombreux langages de programmation.<br />
<br />
=Rappels sur l'architecture de la plateforme Java=<br />
<br />
L'architecture de GraalVM se basant sur celle d'un [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit], un rappel sur le fonctionnement de la plateforme Java peut s'avérer utile.<br />
<br />
Tout d'abord, le Java a la particularité d'être un langage à la fois compilé et interprété. Les tâches de compilation et d'interprétation sont distinctes et réalisées par des composants différents.<br />
Comme on peut le voir sur le schéma ci-dessous, le code Java est d'abord compilé en bytecode par un Java Compiler pour ensuite être interprété et exécuté par une Java Virtual Machine.<br />
<br />
[[File:java_platform_architecture2.png|500px|Composition d'un JDK]]<br />
<br />
Il faut donc distinguer dans cette architecture :<br />
* La [https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Java Virtual Machine] (JVM), qui interprète et exécute le code.<br />
* Le [https://fr.wikipedia.org/wiki/Environnement_d'exécution_Java Java Runtime Environment] (JRE), qui est un environnement d'exécution contenant des librairies et la JVM.<br />
* Le [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit] (JDK), qui est composé de librairies en Java, du JRE et du Java Compiler.<br />
<br />
=GraalVM=<br />
<br />
==Abstract==<br />
<br />
''"GraalVM is a high-performance multilingual runtime. It is designed to accelerate the execution of applications written in Java and other JVM languages while also providing runtimes for JavaScript, Ruby, Python, and a number of other popular languages. GraalVM’s polyglot capabilities make it possible to mix multiple programming languages in a single application while eliminating any foreign language call costs."'' - Documentation officielle de GraalVM<br />
<br />
==Origines==<br />
<br />
===Constats===<br />
<br />
Malgré son apparente popularité, le langage Java est sur le déclin. A l'origine, ce langage conçu par Sun Microsystems et dit "JVM" (comme les langages Kotlin ou Scala) avait été conçu avec l'idée de pouvoir être exécuté sur n'importe quelle plateforme ayant une JVM, affranchissant ainsi le développeur des spécificités d'exécution de la plateforme (d'où le slogan ''"Write Once Run Anywere"'' de Sun). Cependant, à cause la surcouche logicielle induite par la JVM, le langage Java a essuyé des critiques sur sa performance et sur sa verbosité.<br />
<br />
S'ajoute à cela un regain de popularité des langages natifs dans les années 2010, notamment grâce à Apple et son développement mobile iOS en Objective-C qui contraste avec Java ou Kotlin (étant tous deux des langages JVM) en terme de performance.<br />
<br />
Pour répondre à ces problématiques, l'entreprise Oracle se doit d'adapter constamment Java afin de rester compétitive, et sa JVM avec.<br />
<br />
===Ce qui existait déjà===<br />
<br />
Evidemment, Java fonctionnait bien avant l'arrivée de GraalVM, ce qui signifie qu'il existait donc déjà des machines virtuelles. La plus utilisée d'entre elles est [https://fr.wikipedia.org/wiki/HotSpot HotSpot], écrite en C++. Elle a été créé par Sun et appartient désormais à Oracle depuis le rachat de Sun. Notez que toutes les JVM (ou autres composants de la plateforme Java), ne sont pas forcément propriété d'Oracle : par exemple, OpenJ9 est une JVM dont la propriété revient à IBM et à la fondation Eclipse. Ces composants doivent ceci dit respecter des [https://docs.oracle.com/javase/specs/ spécifications dictées par Sun].<br />
<br />
La première version de Hotspot n'était qu'un interpréteur, puis elle a été améliorée avec un ajout de la [https://fr.wikipedia.org/wiki/Compilation_%C3%A0_la_vol%C3%A9e compilation à la volée (Just-In-Time)]. Ensuite elle a été capable de détecter les portions de code les plus fréquemment utilisés (les ''hotspots'') et de les optimiser.<br />
<br />
Ceci dit, GraalVM trouve ses racines dans le projet [https://en.wikipedia.org/wiki/Maxine_Virtual_Machine Maxine] (dévelopé par Sun Microsystems Laboratories en 2005), dont l'objectif était d'écrire une JVM en langage Java pour s'affranchir des problèmes de développement liés au C++, comme la gestion de la mémoire. Le projet s'est avéré trop ambitieux à l'époque mais a servi de point de départ pour GraalVM presque 15 ans plus tard.<br />
<br />
===Solution===<br />
<br />
Les objectifs ayant mené à la création de GraalVM sont multiples :<br />
* Avoir un environnement qui accélère l'exécution des applications écrites en Java ou d'autres langages JVM afin de rivaliser avec les langages natifs<br />
* Fournir un environnement d'exécution qui supporte plusieurs langages de programmation, supprimant ainsi l'isolation entre eux et établissant une véritable inter-opérabilité.<br />
<br />
La solution développée est GraalVM, une machine virtuelle haute performance (d'après les dires d'Oracle) qui prend en fait la forme d'un JDK dont la partie VM a été grandement améliorée.<br />
<br />
==Fonctionnalités==<br />
<br />
Les principaux atouts de GraalVM sont:<br />
* Graal Compiler, un nouveau compilateur [https://fr.wikipedia.org/wiki/Compilation_%C3%A0_la_vol%C3%A9e JIT (Just-In-Time)] pour Java<br />
* GraalVM Native Image, permettant la compilation [https://fr.wikipedia.org/wiki/Compilation_anticip%C3%A9e AOT (Ahead-Of-Time)] pour les applications Java. Le compilateur AOT permet ici de compiler directement le code Java en code machine.<br />
* Truffle Language Implementation framework et GraalVM SDK, fournissant des runtimes pour d'autres langages de programmation<br />
* LLVM Runtime et JavaScript Runtime<br />
<br />
On a en plus la possibilité d'installer des langages et même de définir le nôtre. Actuellement, tous les langages suivants sont compatibles avec Graal (moyennant installations supplémentaires) :<br />
[[File:Languages.png|600px|Listes des langages compatibles avec GraalVM]]<br />
<br />
==Architecture==<br />
<br />
[[File:graal_vm_architecture.jpg | 500px | thumb | right | Architecture de la JVM GraalVM]]<br />
<br />
GraalVM réutilise l'architecture d'OpenJDK (qui est sans grande surprise un JDK), mais avec quelques particularités au niveau de la JVM :<br />
* Il réutilise la VM Hotspot, mais de laquelle on a retiré le JIT Compiler. <br />
* Il bénéficie d'un nouveau compilateur JIT, Graal Compiler, écrit en Java et en dehors de Hotspot. Il a pour mission de transformer du bytecode en code machine (ne pas confondre avec le Java Compiler, plus haut niveau).<br />
* Pour permettre à la JVM Hotspot d'utiliser un compilateur écrit en Java, une couche intermédiaire est nécessaire : la JVM Compiler Interface.<br />
* Tout ce qui doit arriver au compilateur JIT doit être du bytecode. C'est pourquoi les langages non-JVM ne peuvent pas être directement pris en entrée de Graal Compiler. La couche Truffle framework répond à cette problématique. Truffle est un framework open-source qui sert à définir nos propres langages de programmation à travers un AST (Abstract Syntax Tree) et à construire des interpréteurs pour ce dernier. Il est réutilisé dans GraalVM pour définir des implémentations Truffle de Python, Ruby ou encore Javascript. Attention, l'implémentation d'un langage sous Truffle n'est pas le langage en lui-même, ce qui pose quelques problèmes comme on peut le voir dans la partie Limites.<br />
* La couche Truffle suffisait pour les langages interprétés puisque Truffle construit des interpréteurs. Mais pour les langages LLVM (Low Level Virtual Machine) comme le C, le C++ ou le Fortran, une surcouche est nécessaire. Sulong est une LLVM qui permet de produire du bitcode en s'appuyant sur les fonctionnalités de Truffle.<br />
<br />
==Utilisation==<br />
<br />
===Installation===<br />
<br />
GraalVM est très simple à installer.<br />
<br />
* Naviguez sur le [https://github.com/graalvm/graalvm-ce-builds/release git de GraalVM] et téléchargez la version de GraalVM compatible avec notre version de Java/OpenJDK, que l'on peut connaître avec la commande <code>java -version</code>.<br />
<br />
* Dézippez l'archive à l'endroit de votre choix.<br />
<pre>tar -xzf <graalvm-archive>.tar.gz</pre><br />
<br />
* Configurez votre variable d'environnement PATH:<br />
<pre>export PATH=<graalvm>/bin:$PATH</pre><br />
Si vous souhaitez remplacer votre JDK par GraalVM pour toutes vos applications utilisant Java, vous pouvez changer la variable d'environnement <code>JAVA_HOME</code>.<br />
<pre>export JAVA_HOME=<graalvm></pre><br />
Si vous ne souhaitez pas modifier votre <code>JAVA_HOME</code>, vous pouvez définir une variable d'environnement <code>GRAAL_HOME</code> qui vous sera utile pour ne pas avoir à réécrire le chemin complet de Graal.<br />
Notez également que vous pouvez rendre les commandes au-dessus permanentes en les ajoutant à votre fichier <code>.bashrc</code> ou <code>.zshrc</code>.<br />
<br />
===Exécution===<br />
<br />
Le dossier /bin est similaire à un JDK standard, mais contient des launchers additionnels (en plus de <code>javac<c/ode> pour le Java):<br />
* <code>js</code>, un launcher JavaScript<br />
* <code>node</code>, un launcher Node.js<br />
* <code>lli</code>, un launcher LLVM<br />
En d'autres termes, GraalVM ne comprend que le Java, Node.js (grâce au Javascript Runtime) et les langages LLVM (grâce au LLVM Runtime). Cependant, d'autres launchers peuvent être installés avec la commande :<br />
<pre><br />
gu install <nom_du_langage><br />
</pre><br />
<br />
====Par ligne de commande====<br />
<br />
En règle générale, les commandes d'exécution sont de la forme :<br />
<pre><br />
<nom_du_laucher> <nom_du_programme><br />
</pre><br />
Par exemple :<br />
<pre><br />
node app.js<br />
</pre><br />
Les programmes LLVM doivent êtres compilés avant avec l'outil LLVM Toolchain car le launcher lli ne comprend que du bitcode :<br />
<pre><br />
gu install llvm-toolchain<br />
export LLVM_TOOLCHAIN=$(lli --print-toolchain-path)<br />
$LLVM_TOOLCHAIN/clang hello.c -o hello<br />
lli hello<br />
</pre><br />
====Dans un IDE====<br />
<br />
Dans l'IDE, il suffit de remplacer le path du JRE ou du JDK par le path de GraalVM.<br />
Sous eclipse par exemple, cela peut se faire en allant dans ''Window/Preferences/Java/Installed JREs''.<br />
<br />
[[File:installation_ide.png|500px|Spécification du JDK dans l'IDE]]<br />
<br />
====Mixage de langages====<br />
<br />
Au niveau du JDK, Graal propose tout un ensemble de librairies permettant l'inter-opérabilité entre les langages. Par exemple, il est possible depuis un programme Java d'importer la libraire org.graalvm.polyglot pour exécuter les fonctions d'un programme dans un autre langage et en récupérer le résultat.<br />
<br />
==Limites==<br />
<br />
Même si les promesses de GraalVM, à savoir l'amélioration des performances à l'exécution des langages JVM et le polyglottisme, sont respectées, l'outil d'Oracle rencontre quand même quelques limites :<br />
<br />
* On peut regretter que les langages les plus bas niveaux comme le C soient paradoxalement ceux qui traversent le plus de couches logicielles dans l'architecture de GraalVM. Leur interêt en termes de performance est donc extrêmement diminué puisqu'ils nécessitent de nombreuses opérations pour être transformé en bytecode, bytecode qui est logé à la même enseigne que le bytecode issu de code Java au yeux du compilateur.<br />
<br />
* En règle générale, les performances hors langages JVM sont tout de même loins d'être extraordinaires. L'inter-opérabilité entre langages est fonctionnelles mais coûteuse en ressources. A en croire la documentation, l'overhead est quand même évité, c'est à dire que les données sont échangées entre les différents langages sans être dupliquées.<br />
<br />
* Les langages compris par GraalVM étant en fait des implémentations Truffle de langages et pas les langages en eux-mêmes, il manque les librairies utiles à chaque langage. Il est donc impossible par exemple, d'utiliser ''matplolib'' dans un programme Python. Les programmes en sont plus ou moins réduit à de l'algorithmie selon les capacités natives du langage.<br />
<br />
=Demonstration=<br />
<br />
Une démonstration de GraalVM est accessible à ce lien : [[VT2020-GraalVM-Demo|VT2020-GraalVM-Demo]]<br />
<br />
=Sources=<br />
# <div id="GraalVM">[https://www.graalvm.org/docs/getting-started GraalVM Official documentation: '''Getting Started''']</div><br />
# <div id="GraalVM">[https://www.graalvm.org/docs/introduction GraalVM Official documentation: '''Introduction''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/GraalVM Wikipedia: '''GraalVM''']</div><br />
# <div id="GraalVM">[https://medium.com/@nelvadas/a-la-d%C3%A9couverte-de-graalvm-5adbe0487624 Elvadas Nono : '''A la découverte de GraalVM (2020)''']</div><br />
# <div id="GraalVM">[https://www.theserverside.com/definition/GraalVM ServerSide: '''Definition of GraalVM''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Wikipedia: '''Machine Virtuelle Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/HotSpot Wikipedia: '''Hotspot''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/Maxine_Virtual_Machine_Kit Wikipedia: '''Maxine''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Java_Development_Kit Wikipedia: '''Java Development it''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://dev.to/abdulfousan/graalvm-polyglot-virtual-machine-4mn2 Abdul Fousan: '''GraalVM Polyglot Virtual Machine''']</div><br />
# <div id="GraalVM">[https://blog.plan99.net/graal-truffle-134d8f28fb69 Mike Hearn: '''GraalVM and Truffle''']</div><br />
# <div id="GraalVM">[https://www.trufflesuite.com/docs/truffle/overview Truffle Official documentation: '''GraalVM and Truffle''']</div><br />
<br />
=Veille Technologique 2020=<br />
* Année : [[VT2020|VT2021]]<br />
* Sujet : GraalVM<br />
* Slides : [[Media:GraalVM.pdf|Slides]]<br />
* Auteurs : [[User:Alexis.Rollin]]</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Fiche&diff=48337VT2020-GraalVM-Fiche2020-11-14T20:58:28Z<p>Alexis.Rollin: /* Fonctionnalités */</p>
<hr />
<div>GraalVM est une machine virtuelle Java développée par [https://fr.wikipedia.org/wiki/Oracle_(entreprise) Oracle] dite "polyglotte" car elle est capable de comprendre de nombreux langages de programmation.<br />
<br />
=Rappels sur l'architecture de la plateforme Java=<br />
<br />
L'architecture de GraalVM se basant sur celle d'un [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit], un rappel sur le fonctionnement de la plateforme Java peut s'avérer utile.<br />
<br />
Tout d'abord, le Java a la particularité d'être un langage à la fois compilé et interprété. Les tâches de compilation et d'interprétation sont distinctes et réalisées par des composants différents.<br />
Comme on peut le voir sur le schéma ci-dessous, le code Java est d'abord compilé en bytecode par un Java Compiler pour ensuite être interprété et exécuté par une Java Virtual Machine.<br />
<br />
[[File:java_platform_architecture2.png|500px|Composition d'un JDK]]<br />
<br />
Il faut donc distinguer dans cette architecture :<br />
* La [https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Java Virtual Machine] (JVM), qui interprète et exécute le code.<br />
* Le [https://fr.wikipedia.org/wiki/Environnement_d'exécution_Java Java Runtime Environment] (JRE), qui est un environnement d'exécution contenant des librairies et la JVM.<br />
* Le [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit] (JDK), qui est composé de librairies en Java, du JRE et du Java Compiler.<br />
<br />
=GraalVM=<br />
<br />
==Abstract==<br />
<br />
''"GraalVM is a high-performance multilingual runtime. It is designed to accelerate the execution of applications written in Java and other JVM languages while also providing runtimes for JavaScript, Ruby, Python, and a number of other popular languages. GraalVM’s polyglot capabilities make it possible to mix multiple programming languages in a single application while eliminating any foreign language call costs."'' - Documentation officielle de GraalVM<br />
<br />
==Origines==<br />
<br />
===Constats===<br />
<br />
Malgré son apparente popularité, le langage Java est sur le déclin. A l'origine, ce langage conçu par Sun Microsystems et dit "JVM" (comme les langages Kotlin ou Scala) avait été conçu avec l'idée de pouvoir être exécuté sur n'importe quelle plateforme ayant une JVM, affranchissant ainsi le développeur des spécificités d'exécution de la plateforme (d'où le slogan ''"Write Once Run Anywere"'' de Sun). Cependant, à cause la surcouche logicielle induite par la JVM, le langage Java a essuyé des critiques sur sa performance et sur sa verbosité.<br />
<br />
S'ajoute à cela un regain de popularité des langages natifs dans les années 2010, notamment grâce à Apple et son développement mobile iOS en Objective-C qui contraste avec Java ou Kotlin (étant tous deux des langages JVM) en terme de performance.<br />
<br />
Pour répondre à ces problématiques, l'entreprise Oracle se doit d'adapter constamment Java afin de rester compétitive, et sa JVM avec.<br />
<br />
===Ce qui existait déjà===<br />
<br />
Evidemment, Java fonctionnait bien avant l'arrivée de GraalVM, ce qui signifie qu'il existait donc déjà des machines virtuelles. La plus utilisée d'entre elles est [https://fr.wikipedia.org/wiki/HotSpot HotSpot], écrite en C++. Elle a été créé par Sun et appartient désormais à Oracle depuis le rachat de Sun. Notez que toutes les JVM (ou autres composants de la plateforme Java), ne sont pas forcément propriété d'Oracle : par exemple, OpenJ9 est une JVM dont la propriété revient à IBM et à la fondation Eclipse. Ces composants doivent ceci dit respecter des [https://docs.oracle.com/javase/specs/ spécifications dictées par Sun].<br />
<br />
La première version de Hotspot n'était qu'un interpréteur, puis elle a été améliorée avec un ajout de la [https://fr.wikipedia.org/wiki/Compilation_%C3%A0_la_vol%C3%A9e compilation à la volée (Just-In-Time)]. Ensuite elle a été capable de détecter les portions de code les plus fréquemment utilisés (les ''hotspots'') et de les optimiser.<br />
<br />
Ceci dit, GraalVM trouve ses racines dans le projet [https://en.wikipedia.org/wiki/Maxine_Virtual_Machine Maxine] (dévelopé par Sun Microsystems Laboratories en 2005), dont l'objectif était d'écrire une JVM en langage Java pour s'affranchir des problèmes de développement liés au C++, comme la gestion de la mémoire. Le projet s'est avéré trop ambitieux à l'époque mais a servi de point de départ pour GraalVM presque 15 ans plus tard.<br />
<br />
===Solution===<br />
<br />
Les objectifs ayant mené à la création de GraalVM sont multiples :<br />
* Avoir un environnement qui accélère l'exécution des applications écrites en Java ou d'autres langages JVM afin de rivaliser avec les langages natifs<br />
* Fournir un environnement d'exécution qui supporte plusieurs langages de programmation, supprimant ainsi l'isolation entre eux et établissant une véritable inter-opérabilité.<br />
<br />
La solution développée est GraalVM, une machine virtuelle haute performance (d'après les dires d'Oracle) qui prend en fait la forme d'un JDK dont la partie VM a été grandement améliorée.<br />
<br />
==Fonctionnalités==<br />
<br />
Les principaux atouts de GraalVM sont:<br />
* Graal Compiler, un nouveau compilateur [https://fr.wikipedia.org/wiki/Compilation_%C3%A0_la_vol%C3%A9e JIT (Just-In-Time)] pour Java<br />
* GraalVM Native Image, permettant la compilation [https://fr.wikipedia.org/wiki/Compilation_anticip%C3%A9e AOT (Ahead-Of-Time)] pour les applications Java. Le compilateur AOT permet ici de compiler directement le code Java en code machine.<br />
* Truffle Language Implementation framework et GraalVM SDK, fournissant des runtimes pour d'autres langages de programmation<br />
* LLVM Runtime et JavaScript Runtime<br />
<br />
On a en plus la possibilité d'installer des langages et même de définir le nôtre. Actuellement, tous les langages suivants sont compatibles avec Graal (moyennant installations supplémentaires) :<br />
[[File:Languages.png|600px|Listes des langages compatibles avec GraalVM]]<br />
<br />
==Architecture==<br />
<br />
[[File:graal_vm_architecture.jpg | 500px | thumb | right | Architecture de la JVM GraalVM]]<br />
<br />
GraalVM réutilise l'architecture d'OpenJDK (qui est sans grande surprise un JDK), mais avec quelques particularités au niveau de la JVM :<br />
* Il réutilise la VM Hotspot, mais de laquelle on a retiré le JIT Compiler. <br />
* Il bénéficie d'un nouveau compilateur JIT, Graal Compiler, écrit en Java et en dehors de Hotspot. Il a pour mission de transformer du bytecode en code machine (ne pas confondre avec le Java Compiler, plus haut niveau).<br />
* Pour permettre à la JVM Hotspot d'utiliser un compilateur écrit en Java, une couche intermédiaire est nécessaire : la JVM Compiler Interface.<br />
* Tout ce qui doit arriver au compilateur JIT doit être du bytecode. C'est pourquoi les langages non-JVM ne peuvent pas être directement pris en entrée de Graal Compiler. La couche Truffle framework répond à cette problématique. Truffle est un framework open-source qui sert à définir nos propres langages de programmation à travers un AST (Abstract Syntax Tree) et à construire des interpréteurs pour ce dernier. Il est réutilisé dans GraalVM pour définir des implémentations Truffle de Python, Ruby ou encore Javascript. Attention, l'implémentation d'un langage sous Truffle n'est pas le langage en lui-même, ce qui pose quelques problèmes comme on peut le voir dans la partie Limites.<br />
* La couche Truffle suffisait pour les langages interprétés puisque Truffle construit des interpréteurs. Mais pour les langages LLVM (Low Level Virtual Machine) comme le C, le C++ ou le Fortran, une surcouche est nécessaire. Sulong est une LLVM qui permet de produire du bitcode en s'appuyant sur les fonctionnalités de Truffle.<br />
<br />
==Utilisation==<br />
<br />
===Installation===<br />
<br />
GraalVM est très simple à installer.<br />
<br />
* Naviguez sur le git de GraalVM (https://github.com/graalvm/graalvm-ce-builds/releases) et téléchargez la version de GraalVM compatible avec notre version de Java/OpenJDK, que l'on peut connaître avec la commande :<br />
<pre>java -version</pre><br />
<br />
* Dézippez l'archive à l'endroit de votre choix.<br />
<pre>tar -xzf <graalvm-archive>.tar.gz</pre><br />
<br />
* Configurez votre variable d'environnement PATH:<br />
<pre>export PATH=<graalvm>/bin:$PATH</pre><br />
Si vous souhaitez remplacer votre JDK par GraalVM pour toutes vos applications utilisant Java, vous pouvez changer la variable d'environnement JAVA_HOME.<br />
<pre>export JAVA_HOME=<graalvm></pre><br />
Si vous ne souhaitez pas modifier votre JAVA_HOME, vous pouvez définir une variable d'environnement GRAAL_HOME qui vous sera utile pour ne pas avoir à réécrire le chemin complet de Graal.<br />
Notez également que vous pouvez rendre les commandes au-dessus permanentes en les ajoutant à votre fichier .bashrc ou .zshrc.<br />
<br />
===Exécution===<br />
<br />
Le dossier /bin est similaire à un JDK standard, mais contient des launchers additionnels (en plus de javac pour le Java):<br />
* js, un launcher JavaScript<br />
* node, un launcher Node.js<br />
* lli, un launcher LLVM<br />
En d'autres termes, GraalVM ne comprend que le Java, Node.js (grâce au Javascript Runtime) et les langages LLVM (grâce au LLVM Runtime). Cependant, d'autres launchers peuvent être installés avec la commande :<br />
<pre><br />
gu install <nom_du_langage><br />
</pre><br />
<br />
====Par ligne de commande====<br />
<br />
En règle générale, les commandes d'exécution sont de la forme :<br />
<pre><br />
<nom_du_laucher> <nom_du_programme><br />
</pre><br />
Par exemple :<br />
<pre><br />
node app.js<br />
</pre><br />
Les programmes LLVM doivent êtres compilés avant avec l'outil LLVM Toolchain car le launcher lli ne comprend que du bitcode :<br />
<pre><br />
gu install llvm-toolchain<br />
export LLVM_TOOLCHAIN=$(lli --print-toolchain-path)<br />
$LLVM_TOOLCHAIN/clang hello.c -o hello<br />
lli hello<br />
</pre><br />
====Dans un IDE====<br />
<br />
Dans l'IDE, il suffit de remplacer le path du JRE ou du JDK par le path de GraalVM.<br />
Sous eclipse par exemple, cela peut se faire en allant dans ''Window/Preferences/Java/Installed JREs''.<br />
<br />
[[File:installation_ide.png|500px|Spécification du JDK dans l'IDE]]<br />
<br />
====Mixage de langages====<br />
<br />
Au niveau du JDK, Graal propose tout un ensemble de librairies permettant l'inter-opérabilité entre les langages. Par exemple, il est possible depuis un programme Java d'importer la libraire org.graalvm.polyglot pour exécuter les fonctions d'un programme dans un autre langage et en récupérer le résultat.<br />
<br />
==Limites==<br />
<br />
Même si les promesses de GraalVM, à savoir l'amélioration des performances à l'exécution des langages JVM et le polyglottisme, sont respectées, l'outil d'Oracle rencontre quand même quelques limites :<br />
<br />
* On peut regretter que les langages les plus bas niveaux comme le C soient paradoxalement ceux qui traversent le plus de couches logicielles dans l'architecture de GraalVM. Leur interêt en termes de performance est donc extrêmement diminué puisqu'ils nécessitent de nombreuses opérations pour être transformé en bytecode, bytecode qui est logé à la même enseigne que le bytecode issu de code Java au yeux du compilateur.<br />
<br />
* En règle générale, les performances hors langages JVM sont tout de même loins d'être extraordinaires. L'inter-opérabilité entre langages est fonctionnelles mais coûteuse en ressources. A en croire la documentation, l'overhead est quand même évité, c'est à dire que les données sont échangées entre les différents langages sans être dupliquées.<br />
<br />
* Les langages compris par GraalVM étant en fait des implémentations Truffle de langages et pas les langages en eux-mêmes, il manque les librairies utiles à chaque langage. Il est donc impossible par exemple, d'utiliser ''matplolib'' dans un programme Python. Les programmes en sont plus ou moins réduit à de l'algorithmie selon les capacités natives du langage.<br />
<br />
=Demonstration=<br />
<br />
Une démonstration de GraalVM est accessible à ce lien : [[VT2020-GraalVM-Demo|VT2020-GraalVM-Demo]]<br />
<br />
=Sources=<br />
# <div id="GraalVM">[https://www.graalvm.org/docs/getting-started GraalVM Official documentation: '''Getting Started''']</div><br />
# <div id="GraalVM">[https://www.graalvm.org/docs/introduction GraalVM Official documentation: '''Introduction''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/GraalVM Wikipedia: '''GraalVM''']</div><br />
# <div id="GraalVM">[https://medium.com/@nelvadas/a-la-d%C3%A9couverte-de-graalvm-5adbe0487624 Elvadas Nono : '''A la découverte de GraalVM (2020)''']</div><br />
# <div id="GraalVM">[https://www.theserverside.com/definition/GraalVM ServerSide: '''Definition of GraalVM''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Wikipedia: '''Machine Virtuelle Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/HotSpot Wikipedia: '''Hotspot''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/Maxine_Virtual_Machine_Kit Wikipedia: '''Maxine''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Java_Development_Kit Wikipedia: '''Java Development it''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://dev.to/abdulfousan/graalvm-polyglot-virtual-machine-4mn2 Abdul Fousan: '''GraalVM Polyglot Virtual Machine''']</div><br />
# <div id="GraalVM">[https://blog.plan99.net/graal-truffle-134d8f28fb69 Mike Hearn: '''GraalVM and Truffle''']</div><br />
# <div id="GraalVM">[https://www.trufflesuite.com/docs/truffle/overview Truffle Official documentation: '''GraalVM and Truffle''']</div><br />
<br />
=Veille Technologique 2020=<br />
* Année : [[VT2020|VT2021]]<br />
* Sujet : GraalVM<br />
* Slides : [[Media:GraalVM.pdf|Slides]]<br />
* Auteurs : [[User:Alexis.Rollin]]</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Fiche&diff=48336VT2020-GraalVM-Fiche2020-11-14T20:54:26Z<p>Alexis.Rollin: /* Ce qui existait déjà */</p>
<hr />
<div>GraalVM est une machine virtuelle Java développée par [https://fr.wikipedia.org/wiki/Oracle_(entreprise) Oracle] dite "polyglotte" car elle est capable de comprendre de nombreux langages de programmation.<br />
<br />
=Rappels sur l'architecture de la plateforme Java=<br />
<br />
L'architecture de GraalVM se basant sur celle d'un [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit], un rappel sur le fonctionnement de la plateforme Java peut s'avérer utile.<br />
<br />
Tout d'abord, le Java a la particularité d'être un langage à la fois compilé et interprété. Les tâches de compilation et d'interprétation sont distinctes et réalisées par des composants différents.<br />
Comme on peut le voir sur le schéma ci-dessous, le code Java est d'abord compilé en bytecode par un Java Compiler pour ensuite être interprété et exécuté par une Java Virtual Machine.<br />
<br />
[[File:java_platform_architecture2.png|500px|Composition d'un JDK]]<br />
<br />
Il faut donc distinguer dans cette architecture :<br />
* La [https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Java Virtual Machine] (JVM), qui interprète et exécute le code.<br />
* Le [https://fr.wikipedia.org/wiki/Environnement_d'exécution_Java Java Runtime Environment] (JRE), qui est un environnement d'exécution contenant des librairies et la JVM.<br />
* Le [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit] (JDK), qui est composé de librairies en Java, du JRE et du Java Compiler.<br />
<br />
=GraalVM=<br />
<br />
==Abstract==<br />
<br />
''"GraalVM is a high-performance multilingual runtime. It is designed to accelerate the execution of applications written in Java and other JVM languages while also providing runtimes for JavaScript, Ruby, Python, and a number of other popular languages. GraalVM’s polyglot capabilities make it possible to mix multiple programming languages in a single application while eliminating any foreign language call costs."'' - Documentation officielle de GraalVM<br />
<br />
==Origines==<br />
<br />
===Constats===<br />
<br />
Malgré son apparente popularité, le langage Java est sur le déclin. A l'origine, ce langage conçu par Sun Microsystems et dit "JVM" (comme les langages Kotlin ou Scala) avait été conçu avec l'idée de pouvoir être exécuté sur n'importe quelle plateforme ayant une JVM, affranchissant ainsi le développeur des spécificités d'exécution de la plateforme (d'où le slogan ''"Write Once Run Anywere"'' de Sun). Cependant, à cause la surcouche logicielle induite par la JVM, le langage Java a essuyé des critiques sur sa performance et sur sa verbosité.<br />
<br />
S'ajoute à cela un regain de popularité des langages natifs dans les années 2010, notamment grâce à Apple et son développement mobile iOS en Objective-C qui contraste avec Java ou Kotlin (étant tous deux des langages JVM) en terme de performance.<br />
<br />
Pour répondre à ces problématiques, l'entreprise Oracle se doit d'adapter constamment Java afin de rester compétitive, et sa JVM avec.<br />
<br />
===Ce qui existait déjà===<br />
<br />
Evidemment, Java fonctionnait bien avant l'arrivée de GraalVM, ce qui signifie qu'il existait donc déjà des machines virtuelles. La plus utilisée d'entre elles est [https://fr.wikipedia.org/wiki/HotSpot HotSpot], écrite en C++. Elle a été créé par Sun et appartient désormais à Oracle depuis le rachat de Sun. Notez que toutes les JVM (ou autres composants de la plateforme Java), ne sont pas forcément propriété d'Oracle : par exemple, OpenJ9 est une JVM dont la propriété revient à IBM et à la fondation Eclipse. Ces composants doivent ceci dit respecter des [https://docs.oracle.com/javase/specs/ spécifications dictées par Sun].<br />
<br />
La première version de Hotspot n'était qu'un interpréteur, puis elle a été améliorée avec un ajout de la [https://fr.wikipedia.org/wiki/Compilation_%C3%A0_la_vol%C3%A9e compilation à la volée (Just-In-Time)]. Ensuite elle a été capable de détecter les portions de code les plus fréquemment utilisés (les ''hotspots'') et de les optimiser.<br />
<br />
Ceci dit, GraalVM trouve ses racines dans le projet [https://en.wikipedia.org/wiki/Maxine_Virtual_Machine Maxine] (dévelopé par Sun Microsystems Laboratories en 2005), dont l'objectif était d'écrire une JVM en langage Java pour s'affranchir des problèmes de développement liés au C++, comme la gestion de la mémoire. Le projet s'est avéré trop ambitieux à l'époque mais a servi de point de départ pour GraalVM presque 15 ans plus tard.<br />
<br />
===Solution===<br />
<br />
Les objectifs ayant mené à la création de GraalVM sont multiples :<br />
* Avoir un environnement qui accélère l'exécution des applications écrites en Java ou d'autres langages JVM afin de rivaliser avec les langages natifs<br />
* Fournir un environnement d'exécution qui supporte plusieurs langages de programmation, supprimant ainsi l'isolation entre eux et établissant une véritable inter-opérabilité.<br />
<br />
La solution développée est GraalVM, une machine virtuelle haute performance (d'après les dires d'Oracle) qui prend en fait la forme d'un JDK dont la partie VM a été grandement améliorée.<br />
<br />
==Fonctionnalités==<br />
<br />
Les principaux atouts de GraalVM sont:<br />
* Graal Compiler, un nouveau compilateur JIT (Just-In-Time) pour Java<br />
* GraalVM Native Image, permettant la compilation AOT (Ahead-Of-Time) pour les applications Java<br />
* Truffle Language Implementation framework et GraalVM SDK, fournissant des runtimes pour d'autres langages de programmation<br />
* LLVM Runtime et JavaScript Runtime<br />
<br />
On a en plus la possibilité d'installer des langages et même de définir le nôtre. Actuellement, tous les langages suivants sont compatibles avec Graal (moyennant installations supplémentaires) :<br />
[[File:Languages.png|600px|Listes des langages compatibles avec GraalVM]]<br />
<br />
==Architecture==<br />
<br />
[[File:graal_vm_architecture.jpg | 500px | thumb | right | Architecture de la JVM GraalVM]]<br />
<br />
GraalVM réutilise l'architecture d'OpenJDK (qui est sans grande surprise un JDK), mais avec quelques particularités au niveau de la JVM :<br />
* Il réutilise la VM Hotspot, mais de laquelle on a retiré le JIT Compiler. <br />
* Il bénéficie d'un nouveau compilateur JIT, Graal Compiler, écrit en Java et en dehors de Hotspot. Il a pour mission de transformer du bytecode en code machine (ne pas confondre avec le Java Compiler, plus haut niveau).<br />
* Pour permettre à la JVM Hotspot d'utiliser un compilateur écrit en Java, une couche intermédiaire est nécessaire : la JVM Compiler Interface.<br />
* Tout ce qui doit arriver au compilateur JIT doit être du bytecode. C'est pourquoi les langages non-JVM ne peuvent pas être directement pris en entrée de Graal Compiler. La couche Truffle framework répond à cette problématique. Truffle est un framework open-source qui sert à définir nos propres langages de programmation à travers un AST (Abstract Syntax Tree) et à construire des interpréteurs pour ce dernier. Il est réutilisé dans GraalVM pour définir des implémentations Truffle de Python, Ruby ou encore Javascript. Attention, l'implémentation d'un langage sous Truffle n'est pas le langage en lui-même, ce qui pose quelques problèmes comme on peut le voir dans la partie Limites.<br />
* La couche Truffle suffisait pour les langages interprétés puisque Truffle construit des interpréteurs. Mais pour les langages LLVM (Low Level Virtual Machine) comme le C, le C++ ou le Fortran, une surcouche est nécessaire. Sulong est une LLVM qui permet de produire du bitcode en s'appuyant sur les fonctionnalités de Truffle.<br />
<br />
==Utilisation==<br />
<br />
===Installation===<br />
<br />
GraalVM est très simple à installer.<br />
<br />
* Naviguez sur le git de GraalVM (https://github.com/graalvm/graalvm-ce-builds/releases) et téléchargez la version de GraalVM compatible avec notre version de Java/OpenJDK, que l'on peut connaître avec la commande :<br />
<pre>java -version</pre><br />
<br />
* Dézippez l'archive à l'endroit de votre choix.<br />
<pre>tar -xzf <graalvm-archive>.tar.gz</pre><br />
<br />
* Configurez votre variable d'environnement PATH:<br />
<pre>export PATH=<graalvm>/bin:$PATH</pre><br />
Si vous souhaitez remplacer votre JDK par GraalVM pour toutes vos applications utilisant Java, vous pouvez changer la variable d'environnement JAVA_HOME.<br />
<pre>export JAVA_HOME=<graalvm></pre><br />
Si vous ne souhaitez pas modifier votre JAVA_HOME, vous pouvez définir une variable d'environnement GRAAL_HOME qui vous sera utile pour ne pas avoir à réécrire le chemin complet de Graal.<br />
Notez également que vous pouvez rendre les commandes au-dessus permanentes en les ajoutant à votre fichier .bashrc ou .zshrc.<br />
<br />
===Exécution===<br />
<br />
Le dossier /bin est similaire à un JDK standard, mais contient des launchers additionnels (en plus de javac pour le Java):<br />
* js, un launcher JavaScript<br />
* node, un launcher Node.js<br />
* lli, un launcher LLVM<br />
En d'autres termes, GraalVM ne comprend que le Java, Node.js (grâce au Javascript Runtime) et les langages LLVM (grâce au LLVM Runtime). Cependant, d'autres launchers peuvent être installés avec la commande :<br />
<pre><br />
gu install <nom_du_langage><br />
</pre><br />
<br />
====Par ligne de commande====<br />
<br />
En règle générale, les commandes d'exécution sont de la forme :<br />
<pre><br />
<nom_du_laucher> <nom_du_programme><br />
</pre><br />
Par exemple :<br />
<pre><br />
node app.js<br />
</pre><br />
Les programmes LLVM doivent êtres compilés avant avec l'outil LLVM Toolchain car le launcher lli ne comprend que du bitcode :<br />
<pre><br />
gu install llvm-toolchain<br />
export LLVM_TOOLCHAIN=$(lli --print-toolchain-path)<br />
$LLVM_TOOLCHAIN/clang hello.c -o hello<br />
lli hello<br />
</pre><br />
====Dans un IDE====<br />
<br />
Dans l'IDE, il suffit de remplacer le path du JRE ou du JDK par le path de GraalVM.<br />
Sous eclipse par exemple, cela peut se faire en allant dans ''Window/Preferences/Java/Installed JREs''.<br />
<br />
[[File:installation_ide.png|500px|Spécification du JDK dans l'IDE]]<br />
<br />
====Mixage de langages====<br />
<br />
Au niveau du JDK, Graal propose tout un ensemble de librairies permettant l'inter-opérabilité entre les langages. Par exemple, il est possible depuis un programme Java d'importer la libraire org.graalvm.polyglot pour exécuter les fonctions d'un programme dans un autre langage et en récupérer le résultat.<br />
<br />
==Limites==<br />
<br />
Même si les promesses de GraalVM, à savoir l'amélioration des performances à l'exécution des langages JVM et le polyglottisme, sont respectées, l'outil d'Oracle rencontre quand même quelques limites :<br />
<br />
* On peut regretter que les langages les plus bas niveaux comme le C soient paradoxalement ceux qui traversent le plus de couches logicielles dans l'architecture de GraalVM. Leur interêt en termes de performance est donc extrêmement diminué puisqu'ils nécessitent de nombreuses opérations pour être transformé en bytecode, bytecode qui est logé à la même enseigne que le bytecode issu de code Java au yeux du compilateur.<br />
<br />
* En règle générale, les performances hors langages JVM sont tout de même loins d'être extraordinaires. L'inter-opérabilité entre langages est fonctionnelles mais coûteuse en ressources. A en croire la documentation, l'overhead est quand même évité, c'est à dire que les données sont échangées entre les différents langages sans être dupliquées.<br />
<br />
* Les langages compris par GraalVM étant en fait des implémentations Truffle de langages et pas les langages en eux-mêmes, il manque les librairies utiles à chaque langage. Il est donc impossible par exemple, d'utiliser ''matplolib'' dans un programme Python. Les programmes en sont plus ou moins réduit à de l'algorithmie selon les capacités natives du langage.<br />
<br />
=Demonstration=<br />
<br />
Une démonstration de GraalVM est accessible à ce lien : [[VT2020-GraalVM-Demo|VT2020-GraalVM-Demo]]<br />
<br />
=Sources=<br />
# <div id="GraalVM">[https://www.graalvm.org/docs/getting-started GraalVM Official documentation: '''Getting Started''']</div><br />
# <div id="GraalVM">[https://www.graalvm.org/docs/introduction GraalVM Official documentation: '''Introduction''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/GraalVM Wikipedia: '''GraalVM''']</div><br />
# <div id="GraalVM">[https://medium.com/@nelvadas/a-la-d%C3%A9couverte-de-graalvm-5adbe0487624 Elvadas Nono : '''A la découverte de GraalVM (2020)''']</div><br />
# <div id="GraalVM">[https://www.theserverside.com/definition/GraalVM ServerSide: '''Definition of GraalVM''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Wikipedia: '''Machine Virtuelle Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/HotSpot Wikipedia: '''Hotspot''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/Maxine_Virtual_Machine_Kit Wikipedia: '''Maxine''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Java_Development_Kit Wikipedia: '''Java Development it''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://dev.to/abdulfousan/graalvm-polyglot-virtual-machine-4mn2 Abdul Fousan: '''GraalVM Polyglot Virtual Machine''']</div><br />
# <div id="GraalVM">[https://blog.plan99.net/graal-truffle-134d8f28fb69 Mike Hearn: '''GraalVM and Truffle''']</div><br />
# <div id="GraalVM">[https://www.trufflesuite.com/docs/truffle/overview Truffle Official documentation: '''GraalVM and Truffle''']</div><br />
<br />
=Veille Technologique 2020=<br />
* Année : [[VT2020|VT2021]]<br />
* Sujet : GraalVM<br />
* Slides : [[Media:GraalVM.pdf|Slides]]<br />
* Auteurs : [[User:Alexis.Rollin]]</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Fiche&diff=48335VT2020-GraalVM-Fiche2020-11-14T20:51:12Z<p>Alexis.Rollin: /* Constats */</p>
<hr />
<div>GraalVM est une machine virtuelle Java développée par [https://fr.wikipedia.org/wiki/Oracle_(entreprise) Oracle] dite "polyglotte" car elle est capable de comprendre de nombreux langages de programmation.<br />
<br />
=Rappels sur l'architecture de la plateforme Java=<br />
<br />
L'architecture de GraalVM se basant sur celle d'un [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit], un rappel sur le fonctionnement de la plateforme Java peut s'avérer utile.<br />
<br />
Tout d'abord, le Java a la particularité d'être un langage à la fois compilé et interprété. Les tâches de compilation et d'interprétation sont distinctes et réalisées par des composants différents.<br />
Comme on peut le voir sur le schéma ci-dessous, le code Java est d'abord compilé en bytecode par un Java Compiler pour ensuite être interprété et exécuté par une Java Virtual Machine.<br />
<br />
[[File:java_platform_architecture2.png|500px|Composition d'un JDK]]<br />
<br />
Il faut donc distinguer dans cette architecture :<br />
* La [https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Java Virtual Machine] (JVM), qui interprète et exécute le code.<br />
* Le [https://fr.wikipedia.org/wiki/Environnement_d'exécution_Java Java Runtime Environment] (JRE), qui est un environnement d'exécution contenant des librairies et la JVM.<br />
* Le [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit] (JDK), qui est composé de librairies en Java, du JRE et du Java Compiler.<br />
<br />
=GraalVM=<br />
<br />
==Abstract==<br />
<br />
''"GraalVM is a high-performance multilingual runtime. It is designed to accelerate the execution of applications written in Java and other JVM languages while also providing runtimes for JavaScript, Ruby, Python, and a number of other popular languages. GraalVM’s polyglot capabilities make it possible to mix multiple programming languages in a single application while eliminating any foreign language call costs."'' - Documentation officielle de GraalVM<br />
<br />
==Origines==<br />
<br />
===Constats===<br />
<br />
Malgré son apparente popularité, le langage Java est sur le déclin. A l'origine, ce langage conçu par Sun Microsystems et dit "JVM" (comme les langages Kotlin ou Scala) avait été conçu avec l'idée de pouvoir être exécuté sur n'importe quelle plateforme ayant une JVM, affranchissant ainsi le développeur des spécificités d'exécution de la plateforme (d'où le slogan ''"Write Once Run Anywere"'' de Sun). Cependant, à cause la surcouche logicielle induite par la JVM, le langage Java a essuyé des critiques sur sa performance et sur sa verbosité.<br />
<br />
S'ajoute à cela un regain de popularité des langages natifs dans les années 2010, notamment grâce à Apple et son développement mobile iOS en Objective-C qui contraste avec Java ou Kotlin (étant tous deux des langages JVM) en terme de performance.<br />
<br />
Pour répondre à ces problématiques, l'entreprise Oracle se doit d'adapter constamment Java afin de rester compétitive, et sa JVM avec.<br />
<br />
===Ce qui existait déjà===<br />
<br />
Evidemment, Java fonctionnait bien avant l'arrivée de GraalVM, ce qui signifie qu'il existait donc déjà des machines virtuelles. La plus utilisée d'entre elles est HotSpot, écrites en C++. Elle a été créé par Sun et appartient aujourd'hui à Oracle depuis le rachat de Sun. Notez que toutes les JVM (ou autres composants de la plateforme Java), ne sont pas forcément propriété d'Oracle : par exemple, OpenJ9 est une JVM dont la propriété revient à IBM et à la fondation Eclipse. Ces composants doivent ceci dit respecter des spécifications dictées par Sun (https://docs.oracle.com/javase/specs/).<br />
<br />
La première version de Hotspot n'était qu'un interpréteur, puis elle a été améliorée avec un ajout de la compilation à la volée (Just-In-Time). Ensuite elle a été capable de détecter les portions de code les plus fréquemment utilisés et de les optimiser.<br />
<br />
Ceci dit, GraalVM trouve ses racines dans le projet Maxine (dévelopé par Sun Microsystems Laboratories en 2005), dont l'objectif était d'écrire une JVM en langage Java pour s'affranchir des problèmes de développement liés au C++, plus particulièrement la gestion de la mémoire. Le projet s'est avéré trop ambitieux à l'époque mais a servi de point de départ pour GraalVM presque 15 ans plus tard.<br />
<br />
===Solution===<br />
<br />
Les objectifs ayant mené à la création de GraalVM sont multiples :<br />
* Avoir un environnement qui accélère l'exécution des applications écrites en Java ou d'autres langages JVM afin de rivaliser avec les langages natifs<br />
* Fournir un environnement d'exécution qui supporte plusieurs langages de programmation, supprimant ainsi l'isolation entre eux et établissant une véritable inter-opérabilité.<br />
<br />
La solution développée est GraalVM, une machine virtuelle haute performance (d'après les dires d'Oracle) qui prend en fait la forme d'un JDK dont la partie VM a été grandement améliorée.<br />
<br />
==Fonctionnalités==<br />
<br />
Les principaux atouts de GraalVM sont:<br />
* Graal Compiler, un nouveau compilateur JIT (Just-In-Time) pour Java<br />
* GraalVM Native Image, permettant la compilation AOT (Ahead-Of-Time) pour les applications Java<br />
* Truffle Language Implementation framework et GraalVM SDK, fournissant des runtimes pour d'autres langages de programmation<br />
* LLVM Runtime et JavaScript Runtime<br />
<br />
On a en plus la possibilité d'installer des langages et même de définir le nôtre. Actuellement, tous les langages suivants sont compatibles avec Graal (moyennant installations supplémentaires) :<br />
[[File:Languages.png|600px|Listes des langages compatibles avec GraalVM]]<br />
<br />
==Architecture==<br />
<br />
[[File:graal_vm_architecture.jpg | 500px | thumb | right | Architecture de la JVM GraalVM]]<br />
<br />
GraalVM réutilise l'architecture d'OpenJDK (qui est sans grande surprise un JDK), mais avec quelques particularités au niveau de la JVM :<br />
* Il réutilise la VM Hotspot, mais de laquelle on a retiré le JIT Compiler. <br />
* Il bénéficie d'un nouveau compilateur JIT, Graal Compiler, écrit en Java et en dehors de Hotspot. Il a pour mission de transformer du bytecode en code machine (ne pas confondre avec le Java Compiler, plus haut niveau).<br />
* Pour permettre à la JVM Hotspot d'utiliser un compilateur écrit en Java, une couche intermédiaire est nécessaire : la JVM Compiler Interface.<br />
* Tout ce qui doit arriver au compilateur JIT doit être du bytecode. C'est pourquoi les langages non-JVM ne peuvent pas être directement pris en entrée de Graal Compiler. La couche Truffle framework répond à cette problématique. Truffle est un framework open-source qui sert à définir nos propres langages de programmation à travers un AST (Abstract Syntax Tree) et à construire des interpréteurs pour ce dernier. Il est réutilisé dans GraalVM pour définir des implémentations Truffle de Python, Ruby ou encore Javascript. Attention, l'implémentation d'un langage sous Truffle n'est pas le langage en lui-même, ce qui pose quelques problèmes comme on peut le voir dans la partie Limites.<br />
* La couche Truffle suffisait pour les langages interprétés puisque Truffle construit des interpréteurs. Mais pour les langages LLVM (Low Level Virtual Machine) comme le C, le C++ ou le Fortran, une surcouche est nécessaire. Sulong est une LLVM qui permet de produire du bitcode en s'appuyant sur les fonctionnalités de Truffle.<br />
<br />
==Utilisation==<br />
<br />
===Installation===<br />
<br />
GraalVM est très simple à installer.<br />
<br />
* Naviguez sur le git de GraalVM (https://github.com/graalvm/graalvm-ce-builds/releases) et téléchargez la version de GraalVM compatible avec notre version de Java/OpenJDK, que l'on peut connaître avec la commande :<br />
<pre>java -version</pre><br />
<br />
* Dézippez l'archive à l'endroit de votre choix.<br />
<pre>tar -xzf <graalvm-archive>.tar.gz</pre><br />
<br />
* Configurez votre variable d'environnement PATH:<br />
<pre>export PATH=<graalvm>/bin:$PATH</pre><br />
Si vous souhaitez remplacer votre JDK par GraalVM pour toutes vos applications utilisant Java, vous pouvez changer la variable d'environnement JAVA_HOME.<br />
<pre>export JAVA_HOME=<graalvm></pre><br />
Si vous ne souhaitez pas modifier votre JAVA_HOME, vous pouvez définir une variable d'environnement GRAAL_HOME qui vous sera utile pour ne pas avoir à réécrire le chemin complet de Graal.<br />
Notez également que vous pouvez rendre les commandes au-dessus permanentes en les ajoutant à votre fichier .bashrc ou .zshrc.<br />
<br />
===Exécution===<br />
<br />
Le dossier /bin est similaire à un JDK standard, mais contient des launchers additionnels (en plus de javac pour le Java):<br />
* js, un launcher JavaScript<br />
* node, un launcher Node.js<br />
* lli, un launcher LLVM<br />
En d'autres termes, GraalVM ne comprend que le Java, Node.js (grâce au Javascript Runtime) et les langages LLVM (grâce au LLVM Runtime). Cependant, d'autres launchers peuvent être installés avec la commande :<br />
<pre><br />
gu install <nom_du_langage><br />
</pre><br />
<br />
====Par ligne de commande====<br />
<br />
En règle générale, les commandes d'exécution sont de la forme :<br />
<pre><br />
<nom_du_laucher> <nom_du_programme><br />
</pre><br />
Par exemple :<br />
<pre><br />
node app.js<br />
</pre><br />
Les programmes LLVM doivent êtres compilés avant avec l'outil LLVM Toolchain car le launcher lli ne comprend que du bitcode :<br />
<pre><br />
gu install llvm-toolchain<br />
export LLVM_TOOLCHAIN=$(lli --print-toolchain-path)<br />
$LLVM_TOOLCHAIN/clang hello.c -o hello<br />
lli hello<br />
</pre><br />
====Dans un IDE====<br />
<br />
Dans l'IDE, il suffit de remplacer le path du JRE ou du JDK par le path de GraalVM.<br />
Sous eclipse par exemple, cela peut se faire en allant dans ''Window/Preferences/Java/Installed JREs''.<br />
<br />
[[File:installation_ide.png|500px|Spécification du JDK dans l'IDE]]<br />
<br />
====Mixage de langages====<br />
<br />
Au niveau du JDK, Graal propose tout un ensemble de librairies permettant l'inter-opérabilité entre les langages. Par exemple, il est possible depuis un programme Java d'importer la libraire org.graalvm.polyglot pour exécuter les fonctions d'un programme dans un autre langage et en récupérer le résultat.<br />
<br />
==Limites==<br />
<br />
Même si les promesses de GraalVM, à savoir l'amélioration des performances à l'exécution des langages JVM et le polyglottisme, sont respectées, l'outil d'Oracle rencontre quand même quelques limites :<br />
<br />
* On peut regretter que les langages les plus bas niveaux comme le C soient paradoxalement ceux qui traversent le plus de couches logicielles dans l'architecture de GraalVM. Leur interêt en termes de performance est donc extrêmement diminué puisqu'ils nécessitent de nombreuses opérations pour être transformé en bytecode, bytecode qui est logé à la même enseigne que le bytecode issu de code Java au yeux du compilateur.<br />
<br />
* En règle générale, les performances hors langages JVM sont tout de même loins d'être extraordinaires. L'inter-opérabilité entre langages est fonctionnelles mais coûteuse en ressources. A en croire la documentation, l'overhead est quand même évité, c'est à dire que les données sont échangées entre les différents langages sans être dupliquées.<br />
<br />
* Les langages compris par GraalVM étant en fait des implémentations Truffle de langages et pas les langages en eux-mêmes, il manque les librairies utiles à chaque langage. Il est donc impossible par exemple, d'utiliser ''matplolib'' dans un programme Python. Les programmes en sont plus ou moins réduit à de l'algorithmie selon les capacités natives du langage.<br />
<br />
=Demonstration=<br />
<br />
Une démonstration de GraalVM est accessible à ce lien : [[VT2020-GraalVM-Demo|VT2020-GraalVM-Demo]]<br />
<br />
=Sources=<br />
# <div id="GraalVM">[https://www.graalvm.org/docs/getting-started GraalVM Official documentation: '''Getting Started''']</div><br />
# <div id="GraalVM">[https://www.graalvm.org/docs/introduction GraalVM Official documentation: '''Introduction''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/GraalVM Wikipedia: '''GraalVM''']</div><br />
# <div id="GraalVM">[https://medium.com/@nelvadas/a-la-d%C3%A9couverte-de-graalvm-5adbe0487624 Elvadas Nono : '''A la découverte de GraalVM (2020)''']</div><br />
# <div id="GraalVM">[https://www.theserverside.com/definition/GraalVM ServerSide: '''Definition of GraalVM''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Wikipedia: '''Machine Virtuelle Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/HotSpot Wikipedia: '''Hotspot''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/Maxine_Virtual_Machine_Kit Wikipedia: '''Maxine''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Java_Development_Kit Wikipedia: '''Java Development it''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://dev.to/abdulfousan/graalvm-polyglot-virtual-machine-4mn2 Abdul Fousan: '''GraalVM Polyglot Virtual Machine''']</div><br />
# <div id="GraalVM">[https://blog.plan99.net/graal-truffle-134d8f28fb69 Mike Hearn: '''GraalVM and Truffle''']</div><br />
# <div id="GraalVM">[https://www.trufflesuite.com/docs/truffle/overview Truffle Official documentation: '''GraalVM and Truffle''']</div><br />
<br />
=Veille Technologique 2020=<br />
* Année : [[VT2020|VT2021]]<br />
* Sujet : GraalVM<br />
* Slides : [[Media:GraalVM.pdf|Slides]]<br />
* Auteurs : [[User:Alexis.Rollin]]</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Fiche&diff=48334VT2020-GraalVM-Fiche2020-11-14T20:50:29Z<p>Alexis.Rollin: /* Constats */</p>
<hr />
<div>GraalVM est une machine virtuelle Java développée par [https://fr.wikipedia.org/wiki/Oracle_(entreprise) Oracle] dite "polyglotte" car elle est capable de comprendre de nombreux langages de programmation.<br />
<br />
=Rappels sur l'architecture de la plateforme Java=<br />
<br />
L'architecture de GraalVM se basant sur celle d'un [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit], un rappel sur le fonctionnement de la plateforme Java peut s'avérer utile.<br />
<br />
Tout d'abord, le Java a la particularité d'être un langage à la fois compilé et interprété. Les tâches de compilation et d'interprétation sont distinctes et réalisées par des composants différents.<br />
Comme on peut le voir sur le schéma ci-dessous, le code Java est d'abord compilé en bytecode par un Java Compiler pour ensuite être interprété et exécuté par une Java Virtual Machine.<br />
<br />
[[File:java_platform_architecture2.png|500px|Composition d'un JDK]]<br />
<br />
Il faut donc distinguer dans cette architecture :<br />
* La [https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Java Virtual Machine] (JVM), qui interprète et exécute le code.<br />
* Le [https://fr.wikipedia.org/wiki/Environnement_d'exécution_Java Java Runtime Environment] (JRE), qui est un environnement d'exécution contenant des librairies et la JVM.<br />
* Le [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit] (JDK), qui est composé de librairies en Java, du JRE et du Java Compiler.<br />
<br />
=GraalVM=<br />
<br />
==Abstract==<br />
<br />
''"GraalVM is a high-performance multilingual runtime. It is designed to accelerate the execution of applications written in Java and other JVM languages while also providing runtimes for JavaScript, Ruby, Python, and a number of other popular languages. GraalVM’s polyglot capabilities make it possible to mix multiple programming languages in a single application while eliminating any foreign language call costs."'' - Documentation officielle de GraalVM<br />
<br />
==Origines==<br />
<br />
===Constats===<br />
<br />
Malgré son apparente popularité, le langage Java est sur le déclin. A l'origine, ce langage conçu par Sun Microsystems et dit "JVM" (comme les langages Kotlin ou Scala) avait été conçu avec l'idée de pouvoir être exécuté sur n'importe quelle plateforme ayant une JVM, affranchissant ainsi le développeur des spécifités d'exécution de la plateforme (d'où le slogan ''"Write Once Run Anywere"''). Cependant, à cause la surcouche logicielle induite par la JVM, le langage Java a essuyé des critiques sur sa performance et sur sa verbosité.<br />
<br />
S'ajoute à cela un regain de popularité des langages natifs dans les années 2010, notamment grâce à Apple et son développement mobile iOS en Objective-C qui contraste avec Java ou Kotlin (étant tous deux des langages JVM) en terme de performance.<br />
<br />
Pour répondre à ces problématiques, l'entreprise Oracle se doit d'adapter constamment Java afin de rester compétitive, et sa JVM avec.<br />
<br />
===Ce qui existait déjà===<br />
<br />
Evidemment, Java fonctionnait bien avant l'arrivée de GraalVM, ce qui signifie qu'il existait donc déjà des machines virtuelles. La plus utilisée d'entre elles est HotSpot, écrites en C++. Elle a été créé par Sun et appartient aujourd'hui à Oracle depuis le rachat de Sun. Notez que toutes les JVM (ou autres composants de la plateforme Java), ne sont pas forcément propriété d'Oracle : par exemple, OpenJ9 est une JVM dont la propriété revient à IBM et à la fondation Eclipse. Ces composants doivent ceci dit respecter des spécifications dictées par Sun (https://docs.oracle.com/javase/specs/).<br />
<br />
La première version de Hotspot n'était qu'un interpréteur, puis elle a été améliorée avec un ajout de la compilation à la volée (Just-In-Time). Ensuite elle a été capable de détecter les portions de code les plus fréquemment utilisés et de les optimiser.<br />
<br />
Ceci dit, GraalVM trouve ses racines dans le projet Maxine (dévelopé par Sun Microsystems Laboratories en 2005), dont l'objectif était d'écrire une JVM en langage Java pour s'affranchir des problèmes de développement liés au C++, plus particulièrement la gestion de la mémoire. Le projet s'est avéré trop ambitieux à l'époque mais a servi de point de départ pour GraalVM presque 15 ans plus tard.<br />
<br />
===Solution===<br />
<br />
Les objectifs ayant mené à la création de GraalVM sont multiples :<br />
* Avoir un environnement qui accélère l'exécution des applications écrites en Java ou d'autres langages JVM afin de rivaliser avec les langages natifs<br />
* Fournir un environnement d'exécution qui supporte plusieurs langages de programmation, supprimant ainsi l'isolation entre eux et établissant une véritable inter-opérabilité.<br />
<br />
La solution développée est GraalVM, une machine virtuelle haute performance (d'après les dires d'Oracle) qui prend en fait la forme d'un JDK dont la partie VM a été grandement améliorée.<br />
<br />
==Fonctionnalités==<br />
<br />
Les principaux atouts de GraalVM sont:<br />
* Graal Compiler, un nouveau compilateur JIT (Just-In-Time) pour Java<br />
* GraalVM Native Image, permettant la compilation AOT (Ahead-Of-Time) pour les applications Java<br />
* Truffle Language Implementation framework et GraalVM SDK, fournissant des runtimes pour d'autres langages de programmation<br />
* LLVM Runtime et JavaScript Runtime<br />
<br />
On a en plus la possibilité d'installer des langages et même de définir le nôtre. Actuellement, tous les langages suivants sont compatibles avec Graal (moyennant installations supplémentaires) :<br />
[[File:Languages.png|600px|Listes des langages compatibles avec GraalVM]]<br />
<br />
==Architecture==<br />
<br />
[[File:graal_vm_architecture.jpg | 500px | thumb | right | Architecture de la JVM GraalVM]]<br />
<br />
GraalVM réutilise l'architecture d'OpenJDK (qui est sans grande surprise un JDK), mais avec quelques particularités au niveau de la JVM :<br />
* Il réutilise la VM Hotspot, mais de laquelle on a retiré le JIT Compiler. <br />
* Il bénéficie d'un nouveau compilateur JIT, Graal Compiler, écrit en Java et en dehors de Hotspot. Il a pour mission de transformer du bytecode en code machine (ne pas confondre avec le Java Compiler, plus haut niveau).<br />
* Pour permettre à la JVM Hotspot d'utiliser un compilateur écrit en Java, une couche intermédiaire est nécessaire : la JVM Compiler Interface.<br />
* Tout ce qui doit arriver au compilateur JIT doit être du bytecode. C'est pourquoi les langages non-JVM ne peuvent pas être directement pris en entrée de Graal Compiler. La couche Truffle framework répond à cette problématique. Truffle est un framework open-source qui sert à définir nos propres langages de programmation à travers un AST (Abstract Syntax Tree) et à construire des interpréteurs pour ce dernier. Il est réutilisé dans GraalVM pour définir des implémentations Truffle de Python, Ruby ou encore Javascript. Attention, l'implémentation d'un langage sous Truffle n'est pas le langage en lui-même, ce qui pose quelques problèmes comme on peut le voir dans la partie Limites.<br />
* La couche Truffle suffisait pour les langages interprétés puisque Truffle construit des interpréteurs. Mais pour les langages LLVM (Low Level Virtual Machine) comme le C, le C++ ou le Fortran, une surcouche est nécessaire. Sulong est une LLVM qui permet de produire du bitcode en s'appuyant sur les fonctionnalités de Truffle.<br />
<br />
==Utilisation==<br />
<br />
===Installation===<br />
<br />
GraalVM est très simple à installer.<br />
<br />
* Naviguez sur le git de GraalVM (https://github.com/graalvm/graalvm-ce-builds/releases) et téléchargez la version de GraalVM compatible avec notre version de Java/OpenJDK, que l'on peut connaître avec la commande :<br />
<pre>java -version</pre><br />
<br />
* Dézippez l'archive à l'endroit de votre choix.<br />
<pre>tar -xzf <graalvm-archive>.tar.gz</pre><br />
<br />
* Configurez votre variable d'environnement PATH:<br />
<pre>export PATH=<graalvm>/bin:$PATH</pre><br />
Si vous souhaitez remplacer votre JDK par GraalVM pour toutes vos applications utilisant Java, vous pouvez changer la variable d'environnement JAVA_HOME.<br />
<pre>export JAVA_HOME=<graalvm></pre><br />
Si vous ne souhaitez pas modifier votre JAVA_HOME, vous pouvez définir une variable d'environnement GRAAL_HOME qui vous sera utile pour ne pas avoir à réécrire le chemin complet de Graal.<br />
Notez également que vous pouvez rendre les commandes au-dessus permanentes en les ajoutant à votre fichier .bashrc ou .zshrc.<br />
<br />
===Exécution===<br />
<br />
Le dossier /bin est similaire à un JDK standard, mais contient des launchers additionnels (en plus de javac pour le Java):<br />
* js, un launcher JavaScript<br />
* node, un launcher Node.js<br />
* lli, un launcher LLVM<br />
En d'autres termes, GraalVM ne comprend que le Java, Node.js (grâce au Javascript Runtime) et les langages LLVM (grâce au LLVM Runtime). Cependant, d'autres launchers peuvent être installés avec la commande :<br />
<pre><br />
gu install <nom_du_langage><br />
</pre><br />
<br />
====Par ligne de commande====<br />
<br />
En règle générale, les commandes d'exécution sont de la forme :<br />
<pre><br />
<nom_du_laucher> <nom_du_programme><br />
</pre><br />
Par exemple :<br />
<pre><br />
node app.js<br />
</pre><br />
Les programmes LLVM doivent êtres compilés avant avec l'outil LLVM Toolchain car le launcher lli ne comprend que du bitcode :<br />
<pre><br />
gu install llvm-toolchain<br />
export LLVM_TOOLCHAIN=$(lli --print-toolchain-path)<br />
$LLVM_TOOLCHAIN/clang hello.c -o hello<br />
lli hello<br />
</pre><br />
====Dans un IDE====<br />
<br />
Dans l'IDE, il suffit de remplacer le path du JRE ou du JDK par le path de GraalVM.<br />
Sous eclipse par exemple, cela peut se faire en allant dans ''Window/Preferences/Java/Installed JREs''.<br />
<br />
[[File:installation_ide.png|500px|Spécification du JDK dans l'IDE]]<br />
<br />
====Mixage de langages====<br />
<br />
Au niveau du JDK, Graal propose tout un ensemble de librairies permettant l'inter-opérabilité entre les langages. Par exemple, il est possible depuis un programme Java d'importer la libraire org.graalvm.polyglot pour exécuter les fonctions d'un programme dans un autre langage et en récupérer le résultat.<br />
<br />
==Limites==<br />
<br />
Même si les promesses de GraalVM, à savoir l'amélioration des performances à l'exécution des langages JVM et le polyglottisme, sont respectées, l'outil d'Oracle rencontre quand même quelques limites :<br />
<br />
* On peut regretter que les langages les plus bas niveaux comme le C soient paradoxalement ceux qui traversent le plus de couches logicielles dans l'architecture de GraalVM. Leur interêt en termes de performance est donc extrêmement diminué puisqu'ils nécessitent de nombreuses opérations pour être transformé en bytecode, bytecode qui est logé à la même enseigne que le bytecode issu de code Java au yeux du compilateur.<br />
<br />
* En règle générale, les performances hors langages JVM sont tout de même loins d'être extraordinaires. L'inter-opérabilité entre langages est fonctionnelles mais coûteuse en ressources. A en croire la documentation, l'overhead est quand même évité, c'est à dire que les données sont échangées entre les différents langages sans être dupliquées.<br />
<br />
* Les langages compris par GraalVM étant en fait des implémentations Truffle de langages et pas les langages en eux-mêmes, il manque les librairies utiles à chaque langage. Il est donc impossible par exemple, d'utiliser ''matplolib'' dans un programme Python. Les programmes en sont plus ou moins réduit à de l'algorithmie selon les capacités natives du langage.<br />
<br />
=Demonstration=<br />
<br />
Une démonstration de GraalVM est accessible à ce lien : [[VT2020-GraalVM-Demo|VT2020-GraalVM-Demo]]<br />
<br />
=Sources=<br />
# <div id="GraalVM">[https://www.graalvm.org/docs/getting-started GraalVM Official documentation: '''Getting Started''']</div><br />
# <div id="GraalVM">[https://www.graalvm.org/docs/introduction GraalVM Official documentation: '''Introduction''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/GraalVM Wikipedia: '''GraalVM''']</div><br />
# <div id="GraalVM">[https://medium.com/@nelvadas/a-la-d%C3%A9couverte-de-graalvm-5adbe0487624 Elvadas Nono : '''A la découverte de GraalVM (2020)''']</div><br />
# <div id="GraalVM">[https://www.theserverside.com/definition/GraalVM ServerSide: '''Definition of GraalVM''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Wikipedia: '''Machine Virtuelle Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/HotSpot Wikipedia: '''Hotspot''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/Maxine_Virtual_Machine_Kit Wikipedia: '''Maxine''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Java_Development_Kit Wikipedia: '''Java Development it''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://dev.to/abdulfousan/graalvm-polyglot-virtual-machine-4mn2 Abdul Fousan: '''GraalVM Polyglot Virtual Machine''']</div><br />
# <div id="GraalVM">[https://blog.plan99.net/graal-truffle-134d8f28fb69 Mike Hearn: '''GraalVM and Truffle''']</div><br />
# <div id="GraalVM">[https://www.trufflesuite.com/docs/truffle/overview Truffle Official documentation: '''GraalVM and Truffle''']</div><br />
<br />
=Veille Technologique 2020=<br />
* Année : [[VT2020|VT2021]]<br />
* Sujet : GraalVM<br />
* Slides : [[Media:GraalVM.pdf|Slides]]<br />
* Auteurs : [[User:Alexis.Rollin]]</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Fiche&diff=48333VT2020-GraalVM-Fiche2020-11-14T20:50:02Z<p>Alexis.Rollin: /* Abstract */</p>
<hr />
<div>GraalVM est une machine virtuelle Java développée par [https://fr.wikipedia.org/wiki/Oracle_(entreprise) Oracle] dite "polyglotte" car elle est capable de comprendre de nombreux langages de programmation.<br />
<br />
=Rappels sur l'architecture de la plateforme Java=<br />
<br />
L'architecture de GraalVM se basant sur celle d'un [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit], un rappel sur le fonctionnement de la plateforme Java peut s'avérer utile.<br />
<br />
Tout d'abord, le Java a la particularité d'être un langage à la fois compilé et interprété. Les tâches de compilation et d'interprétation sont distinctes et réalisées par des composants différents.<br />
Comme on peut le voir sur le schéma ci-dessous, le code Java est d'abord compilé en bytecode par un Java Compiler pour ensuite être interprété et exécuté par une Java Virtual Machine.<br />
<br />
[[File:java_platform_architecture2.png|500px|Composition d'un JDK]]<br />
<br />
Il faut donc distinguer dans cette architecture :<br />
* La [https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Java Virtual Machine] (JVM), qui interprète et exécute le code.<br />
* Le [https://fr.wikipedia.org/wiki/Environnement_d'exécution_Java Java Runtime Environment] (JRE), qui est un environnement d'exécution contenant des librairies et la JVM.<br />
* Le [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit] (JDK), qui est composé de librairies en Java, du JRE et du Java Compiler.<br />
<br />
=GraalVM=<br />
<br />
==Abstract==<br />
<br />
''"GraalVM is a high-performance multilingual runtime. It is designed to accelerate the execution of applications written in Java and other JVM languages while also providing runtimes for JavaScript, Ruby, Python, and a number of other popular languages. GraalVM’s polyglot capabilities make it possible to mix multiple programming languages in a single application while eliminating any foreign language call costs."'' - Documentation officielle de GraalVM<br />
<br />
==Origines==<br />
<br />
===Constats===<br />
<br />
Malgré son apparente popularité, le langage Java est sur le déclin. A l'origine, ce langage conçue par Sun Microsystems et dit "JVM" (comme Kotlin ou Scala) avait été conçu avec l'idée de pouvoir être exécuté sur n'importe quelle plateforme ayant une JVM, affranchissant ainsi le développeur des spécifités d'exécution de la plateforme (d'où le slogan ''"Write Once Run Anywere"''). Cependant, à cause la surcouche logicielle induite par la JVM, le langage Java a essuyé des critiques sur sa performance et sur sa verbosité.<br />
<br />
S'ajoute à cela un regain de popularité des langages natifs dans les années 2010, notamment grâce à Apple et son développement mobile iOS en Objective-C qui contraste avec Java ou Kotlin (étant tous deux des langages JVM) en terme de performance.<br />
<br />
Pour répondre à ces problématiques, l'entreprise Oracle se doit d'adapter constamment Java afin de rester compétitive, et sa JVM avec.<br />
<br />
===Ce qui existait déjà===<br />
<br />
Evidemment, Java fonctionnait bien avant l'arrivée de GraalVM, ce qui signifie qu'il existait donc déjà des machines virtuelles. La plus utilisée d'entre elles est HotSpot, écrites en C++. Elle a été créé par Sun et appartient aujourd'hui à Oracle depuis le rachat de Sun. Notez que toutes les JVM (ou autres composants de la plateforme Java), ne sont pas forcément propriété d'Oracle : par exemple, OpenJ9 est une JVM dont la propriété revient à IBM et à la fondation Eclipse. Ces composants doivent ceci dit respecter des spécifications dictées par Sun (https://docs.oracle.com/javase/specs/).<br />
<br />
La première version de Hotspot n'était qu'un interpréteur, puis elle a été améliorée avec un ajout de la compilation à la volée (Just-In-Time). Ensuite elle a été capable de détecter les portions de code les plus fréquemment utilisés et de les optimiser.<br />
<br />
Ceci dit, GraalVM trouve ses racines dans le projet Maxine (dévelopé par Sun Microsystems Laboratories en 2005), dont l'objectif était d'écrire une JVM en langage Java pour s'affranchir des problèmes de développement liés au C++, plus particulièrement la gestion de la mémoire. Le projet s'est avéré trop ambitieux à l'époque mais a servi de point de départ pour GraalVM presque 15 ans plus tard.<br />
<br />
===Solution===<br />
<br />
Les objectifs ayant mené à la création de GraalVM sont multiples :<br />
* Avoir un environnement qui accélère l'exécution des applications écrites en Java ou d'autres langages JVM afin de rivaliser avec les langages natifs<br />
* Fournir un environnement d'exécution qui supporte plusieurs langages de programmation, supprimant ainsi l'isolation entre eux et établissant une véritable inter-opérabilité.<br />
<br />
La solution développée est GraalVM, une machine virtuelle haute performance (d'après les dires d'Oracle) qui prend en fait la forme d'un JDK dont la partie VM a été grandement améliorée.<br />
<br />
==Fonctionnalités==<br />
<br />
Les principaux atouts de GraalVM sont:<br />
* Graal Compiler, un nouveau compilateur JIT (Just-In-Time) pour Java<br />
* GraalVM Native Image, permettant la compilation AOT (Ahead-Of-Time) pour les applications Java<br />
* Truffle Language Implementation framework et GraalVM SDK, fournissant des runtimes pour d'autres langages de programmation<br />
* LLVM Runtime et JavaScript Runtime<br />
<br />
On a en plus la possibilité d'installer des langages et même de définir le nôtre. Actuellement, tous les langages suivants sont compatibles avec Graal (moyennant installations supplémentaires) :<br />
[[File:Languages.png|600px|Listes des langages compatibles avec GraalVM]]<br />
<br />
==Architecture==<br />
<br />
[[File:graal_vm_architecture.jpg | 500px | thumb | right | Architecture de la JVM GraalVM]]<br />
<br />
GraalVM réutilise l'architecture d'OpenJDK (qui est sans grande surprise un JDK), mais avec quelques particularités au niveau de la JVM :<br />
* Il réutilise la VM Hotspot, mais de laquelle on a retiré le JIT Compiler. <br />
* Il bénéficie d'un nouveau compilateur JIT, Graal Compiler, écrit en Java et en dehors de Hotspot. Il a pour mission de transformer du bytecode en code machine (ne pas confondre avec le Java Compiler, plus haut niveau).<br />
* Pour permettre à la JVM Hotspot d'utiliser un compilateur écrit en Java, une couche intermédiaire est nécessaire : la JVM Compiler Interface.<br />
* Tout ce qui doit arriver au compilateur JIT doit être du bytecode. C'est pourquoi les langages non-JVM ne peuvent pas être directement pris en entrée de Graal Compiler. La couche Truffle framework répond à cette problématique. Truffle est un framework open-source qui sert à définir nos propres langages de programmation à travers un AST (Abstract Syntax Tree) et à construire des interpréteurs pour ce dernier. Il est réutilisé dans GraalVM pour définir des implémentations Truffle de Python, Ruby ou encore Javascript. Attention, l'implémentation d'un langage sous Truffle n'est pas le langage en lui-même, ce qui pose quelques problèmes comme on peut le voir dans la partie Limites.<br />
* La couche Truffle suffisait pour les langages interprétés puisque Truffle construit des interpréteurs. Mais pour les langages LLVM (Low Level Virtual Machine) comme le C, le C++ ou le Fortran, une surcouche est nécessaire. Sulong est une LLVM qui permet de produire du bitcode en s'appuyant sur les fonctionnalités de Truffle.<br />
<br />
==Utilisation==<br />
<br />
===Installation===<br />
<br />
GraalVM est très simple à installer.<br />
<br />
* Naviguez sur le git de GraalVM (https://github.com/graalvm/graalvm-ce-builds/releases) et téléchargez la version de GraalVM compatible avec notre version de Java/OpenJDK, que l'on peut connaître avec la commande :<br />
<pre>java -version</pre><br />
<br />
* Dézippez l'archive à l'endroit de votre choix.<br />
<pre>tar -xzf <graalvm-archive>.tar.gz</pre><br />
<br />
* Configurez votre variable d'environnement PATH:<br />
<pre>export PATH=<graalvm>/bin:$PATH</pre><br />
Si vous souhaitez remplacer votre JDK par GraalVM pour toutes vos applications utilisant Java, vous pouvez changer la variable d'environnement JAVA_HOME.<br />
<pre>export JAVA_HOME=<graalvm></pre><br />
Si vous ne souhaitez pas modifier votre JAVA_HOME, vous pouvez définir une variable d'environnement GRAAL_HOME qui vous sera utile pour ne pas avoir à réécrire le chemin complet de Graal.<br />
Notez également que vous pouvez rendre les commandes au-dessus permanentes en les ajoutant à votre fichier .bashrc ou .zshrc.<br />
<br />
===Exécution===<br />
<br />
Le dossier /bin est similaire à un JDK standard, mais contient des launchers additionnels (en plus de javac pour le Java):<br />
* js, un launcher JavaScript<br />
* node, un launcher Node.js<br />
* lli, un launcher LLVM<br />
En d'autres termes, GraalVM ne comprend que le Java, Node.js (grâce au Javascript Runtime) et les langages LLVM (grâce au LLVM Runtime). Cependant, d'autres launchers peuvent être installés avec la commande :<br />
<pre><br />
gu install <nom_du_langage><br />
</pre><br />
<br />
====Par ligne de commande====<br />
<br />
En règle générale, les commandes d'exécution sont de la forme :<br />
<pre><br />
<nom_du_laucher> <nom_du_programme><br />
</pre><br />
Par exemple :<br />
<pre><br />
node app.js<br />
</pre><br />
Les programmes LLVM doivent êtres compilés avant avec l'outil LLVM Toolchain car le launcher lli ne comprend que du bitcode :<br />
<pre><br />
gu install llvm-toolchain<br />
export LLVM_TOOLCHAIN=$(lli --print-toolchain-path)<br />
$LLVM_TOOLCHAIN/clang hello.c -o hello<br />
lli hello<br />
</pre><br />
====Dans un IDE====<br />
<br />
Dans l'IDE, il suffit de remplacer le path du JRE ou du JDK par le path de GraalVM.<br />
Sous eclipse par exemple, cela peut se faire en allant dans ''Window/Preferences/Java/Installed JREs''.<br />
<br />
[[File:installation_ide.png|500px|Spécification du JDK dans l'IDE]]<br />
<br />
====Mixage de langages====<br />
<br />
Au niveau du JDK, Graal propose tout un ensemble de librairies permettant l'inter-opérabilité entre les langages. Par exemple, il est possible depuis un programme Java d'importer la libraire org.graalvm.polyglot pour exécuter les fonctions d'un programme dans un autre langage et en récupérer le résultat.<br />
<br />
==Limites==<br />
<br />
Même si les promesses de GraalVM, à savoir l'amélioration des performances à l'exécution des langages JVM et le polyglottisme, sont respectées, l'outil d'Oracle rencontre quand même quelques limites :<br />
<br />
* On peut regretter que les langages les plus bas niveaux comme le C soient paradoxalement ceux qui traversent le plus de couches logicielles dans l'architecture de GraalVM. Leur interêt en termes de performance est donc extrêmement diminué puisqu'ils nécessitent de nombreuses opérations pour être transformé en bytecode, bytecode qui est logé à la même enseigne que le bytecode issu de code Java au yeux du compilateur.<br />
<br />
* En règle générale, les performances hors langages JVM sont tout de même loins d'être extraordinaires. L'inter-opérabilité entre langages est fonctionnelles mais coûteuse en ressources. A en croire la documentation, l'overhead est quand même évité, c'est à dire que les données sont échangées entre les différents langages sans être dupliquées.<br />
<br />
* Les langages compris par GraalVM étant en fait des implémentations Truffle de langages et pas les langages en eux-mêmes, il manque les librairies utiles à chaque langage. Il est donc impossible par exemple, d'utiliser ''matplolib'' dans un programme Python. Les programmes en sont plus ou moins réduit à de l'algorithmie selon les capacités natives du langage.<br />
<br />
=Demonstration=<br />
<br />
Une démonstration de GraalVM est accessible à ce lien : [[VT2020-GraalVM-Demo|VT2020-GraalVM-Demo]]<br />
<br />
=Sources=<br />
# <div id="GraalVM">[https://www.graalvm.org/docs/getting-started GraalVM Official documentation: '''Getting Started''']</div><br />
# <div id="GraalVM">[https://www.graalvm.org/docs/introduction GraalVM Official documentation: '''Introduction''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/GraalVM Wikipedia: '''GraalVM''']</div><br />
# <div id="GraalVM">[https://medium.com/@nelvadas/a-la-d%C3%A9couverte-de-graalvm-5adbe0487624 Elvadas Nono : '''A la découverte de GraalVM (2020)''']</div><br />
# <div id="GraalVM">[https://www.theserverside.com/definition/GraalVM ServerSide: '''Definition of GraalVM''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Wikipedia: '''Machine Virtuelle Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/HotSpot Wikipedia: '''Hotspot''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/Maxine_Virtual_Machine_Kit Wikipedia: '''Maxine''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Java_Development_Kit Wikipedia: '''Java Development it''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://dev.to/abdulfousan/graalvm-polyglot-virtual-machine-4mn2 Abdul Fousan: '''GraalVM Polyglot Virtual Machine''']</div><br />
# <div id="GraalVM">[https://blog.plan99.net/graal-truffle-134d8f28fb69 Mike Hearn: '''GraalVM and Truffle''']</div><br />
# <div id="GraalVM">[https://www.trufflesuite.com/docs/truffle/overview Truffle Official documentation: '''GraalVM and Truffle''']</div><br />
<br />
=Veille Technologique 2020=<br />
* Année : [[VT2020|VT2021]]<br />
* Sujet : GraalVM<br />
* Slides : [[Media:GraalVM.pdf|Slides]]<br />
* Auteurs : [[User:Alexis.Rollin]]</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Fiche&diff=48332VT2020-GraalVM-Fiche2020-11-14T20:49:41Z<p>Alexis.Rollin: /* Rappels sur l'architecture de la plateforme Java */</p>
<hr />
<div>GraalVM est une machine virtuelle Java développée par [https://fr.wikipedia.org/wiki/Oracle_(entreprise) Oracle] dite "polyglotte" car elle est capable de comprendre de nombreux langages de programmation.<br />
<br />
=Rappels sur l'architecture de la plateforme Java=<br />
<br />
L'architecture de GraalVM se basant sur celle d'un [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit], un rappel sur le fonctionnement de la plateforme Java peut s'avérer utile.<br />
<br />
Tout d'abord, le Java a la particularité d'être un langage à la fois compilé et interprété. Les tâches de compilation et d'interprétation sont distinctes et réalisées par des composants différents.<br />
Comme on peut le voir sur le schéma ci-dessous, le code Java est d'abord compilé en bytecode par un Java Compiler pour ensuite être interprété et exécuté par une Java Virtual Machine.<br />
<br />
[[File:java_platform_architecture2.png|500px|Composition d'un JDK]]<br />
<br />
Il faut donc distinguer dans cette architecture :<br />
* La [https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Java Virtual Machine] (JVM), qui interprète et exécute le code.<br />
* Le [https://fr.wikipedia.org/wiki/Environnement_d'exécution_Java Java Runtime Environment] (JRE), qui est un environnement d'exécution contenant des librairies et la JVM.<br />
* Le [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit] (JDK), qui est composé de librairies en Java, du JRE et du Java Compiler.<br />
<br />
=GraalVM=<br />
<br />
==Abstract==<br />
<br />
''"GraalVM is a high-performance multilingual runtime. It is designed to accelerate the execution of applications written in Java and other JVM languages while also providing runtimes for JavaScript, Ruby, Python, and a number of other popular languages. GraalVM’s polyglot capabilities make it possible to mix multiple programming languages in a single application while eliminating any foreign language call costs."''<br />
<br />
Documentation officielle de GraalVM<br />
<br />
==Origines==<br />
<br />
===Constats===<br />
<br />
Malgré son apparente popularité, le langage Java est sur le déclin. A l'origine, ce langage conçue par Sun Microsystems et dit "JVM" (comme Kotlin ou Scala) avait été conçu avec l'idée de pouvoir être exécuté sur n'importe quelle plateforme ayant une JVM, affranchissant ainsi le développeur des spécifités d'exécution de la plateforme (d'où le slogan ''"Write Once Run Anywere"''). Cependant, à cause la surcouche logicielle induite par la JVM, le langage Java a essuyé des critiques sur sa performance et sur sa verbosité.<br />
<br />
S'ajoute à cela un regain de popularité des langages natifs dans les années 2010, notamment grâce à Apple et son développement mobile iOS en Objective-C qui contraste avec Java ou Kotlin (étant tous deux des langages JVM) en terme de performance.<br />
<br />
Pour répondre à ces problématiques, l'entreprise Oracle se doit d'adapter constamment Java afin de rester compétitive, et sa JVM avec.<br />
<br />
===Ce qui existait déjà===<br />
<br />
Evidemment, Java fonctionnait bien avant l'arrivée de GraalVM, ce qui signifie qu'il existait donc déjà des machines virtuelles. La plus utilisée d'entre elles est HotSpot, écrites en C++. Elle a été créé par Sun et appartient aujourd'hui à Oracle depuis le rachat de Sun. Notez que toutes les JVM (ou autres composants de la plateforme Java), ne sont pas forcément propriété d'Oracle : par exemple, OpenJ9 est une JVM dont la propriété revient à IBM et à la fondation Eclipse. Ces composants doivent ceci dit respecter des spécifications dictées par Sun (https://docs.oracle.com/javase/specs/).<br />
<br />
La première version de Hotspot n'était qu'un interpréteur, puis elle a été améliorée avec un ajout de la compilation à la volée (Just-In-Time). Ensuite elle a été capable de détecter les portions de code les plus fréquemment utilisés et de les optimiser.<br />
<br />
Ceci dit, GraalVM trouve ses racines dans le projet Maxine (dévelopé par Sun Microsystems Laboratories en 2005), dont l'objectif était d'écrire une JVM en langage Java pour s'affranchir des problèmes de développement liés au C++, plus particulièrement la gestion de la mémoire. Le projet s'est avéré trop ambitieux à l'époque mais a servi de point de départ pour GraalVM presque 15 ans plus tard.<br />
<br />
===Solution===<br />
<br />
Les objectifs ayant mené à la création de GraalVM sont multiples :<br />
* Avoir un environnement qui accélère l'exécution des applications écrites en Java ou d'autres langages JVM afin de rivaliser avec les langages natifs<br />
* Fournir un environnement d'exécution qui supporte plusieurs langages de programmation, supprimant ainsi l'isolation entre eux et établissant une véritable inter-opérabilité.<br />
<br />
La solution développée est GraalVM, une machine virtuelle haute performance (d'après les dires d'Oracle) qui prend en fait la forme d'un JDK dont la partie VM a été grandement améliorée.<br />
<br />
==Fonctionnalités==<br />
<br />
Les principaux atouts de GraalVM sont:<br />
* Graal Compiler, un nouveau compilateur JIT (Just-In-Time) pour Java<br />
* GraalVM Native Image, permettant la compilation AOT (Ahead-Of-Time) pour les applications Java<br />
* Truffle Language Implementation framework et GraalVM SDK, fournissant des runtimes pour d'autres langages de programmation<br />
* LLVM Runtime et JavaScript Runtime<br />
<br />
On a en plus la possibilité d'installer des langages et même de définir le nôtre. Actuellement, tous les langages suivants sont compatibles avec Graal (moyennant installations supplémentaires) :<br />
[[File:Languages.png|600px|Listes des langages compatibles avec GraalVM]]<br />
<br />
==Architecture==<br />
<br />
[[File:graal_vm_architecture.jpg | 500px | thumb | right | Architecture de la JVM GraalVM]]<br />
<br />
GraalVM réutilise l'architecture d'OpenJDK (qui est sans grande surprise un JDK), mais avec quelques particularités au niveau de la JVM :<br />
* Il réutilise la VM Hotspot, mais de laquelle on a retiré le JIT Compiler. <br />
* Il bénéficie d'un nouveau compilateur JIT, Graal Compiler, écrit en Java et en dehors de Hotspot. Il a pour mission de transformer du bytecode en code machine (ne pas confondre avec le Java Compiler, plus haut niveau).<br />
* Pour permettre à la JVM Hotspot d'utiliser un compilateur écrit en Java, une couche intermédiaire est nécessaire : la JVM Compiler Interface.<br />
* Tout ce qui doit arriver au compilateur JIT doit être du bytecode. C'est pourquoi les langages non-JVM ne peuvent pas être directement pris en entrée de Graal Compiler. La couche Truffle framework répond à cette problématique. Truffle est un framework open-source qui sert à définir nos propres langages de programmation à travers un AST (Abstract Syntax Tree) et à construire des interpréteurs pour ce dernier. Il est réutilisé dans GraalVM pour définir des implémentations Truffle de Python, Ruby ou encore Javascript. Attention, l'implémentation d'un langage sous Truffle n'est pas le langage en lui-même, ce qui pose quelques problèmes comme on peut le voir dans la partie Limites.<br />
* La couche Truffle suffisait pour les langages interprétés puisque Truffle construit des interpréteurs. Mais pour les langages LLVM (Low Level Virtual Machine) comme le C, le C++ ou le Fortran, une surcouche est nécessaire. Sulong est une LLVM qui permet de produire du bitcode en s'appuyant sur les fonctionnalités de Truffle.<br />
<br />
==Utilisation==<br />
<br />
===Installation===<br />
<br />
GraalVM est très simple à installer.<br />
<br />
* Naviguez sur le git de GraalVM (https://github.com/graalvm/graalvm-ce-builds/releases) et téléchargez la version de GraalVM compatible avec notre version de Java/OpenJDK, que l'on peut connaître avec la commande :<br />
<pre>java -version</pre><br />
<br />
* Dézippez l'archive à l'endroit de votre choix.<br />
<pre>tar -xzf <graalvm-archive>.tar.gz</pre><br />
<br />
* Configurez votre variable d'environnement PATH:<br />
<pre>export PATH=<graalvm>/bin:$PATH</pre><br />
Si vous souhaitez remplacer votre JDK par GraalVM pour toutes vos applications utilisant Java, vous pouvez changer la variable d'environnement JAVA_HOME.<br />
<pre>export JAVA_HOME=<graalvm></pre><br />
Si vous ne souhaitez pas modifier votre JAVA_HOME, vous pouvez définir une variable d'environnement GRAAL_HOME qui vous sera utile pour ne pas avoir à réécrire le chemin complet de Graal.<br />
Notez également que vous pouvez rendre les commandes au-dessus permanentes en les ajoutant à votre fichier .bashrc ou .zshrc.<br />
<br />
===Exécution===<br />
<br />
Le dossier /bin est similaire à un JDK standard, mais contient des launchers additionnels (en plus de javac pour le Java):<br />
* js, un launcher JavaScript<br />
* node, un launcher Node.js<br />
* lli, un launcher LLVM<br />
En d'autres termes, GraalVM ne comprend que le Java, Node.js (grâce au Javascript Runtime) et les langages LLVM (grâce au LLVM Runtime). Cependant, d'autres launchers peuvent être installés avec la commande :<br />
<pre><br />
gu install <nom_du_langage><br />
</pre><br />
<br />
====Par ligne de commande====<br />
<br />
En règle générale, les commandes d'exécution sont de la forme :<br />
<pre><br />
<nom_du_laucher> <nom_du_programme><br />
</pre><br />
Par exemple :<br />
<pre><br />
node app.js<br />
</pre><br />
Les programmes LLVM doivent êtres compilés avant avec l'outil LLVM Toolchain car le launcher lli ne comprend que du bitcode :<br />
<pre><br />
gu install llvm-toolchain<br />
export LLVM_TOOLCHAIN=$(lli --print-toolchain-path)<br />
$LLVM_TOOLCHAIN/clang hello.c -o hello<br />
lli hello<br />
</pre><br />
====Dans un IDE====<br />
<br />
Dans l'IDE, il suffit de remplacer le path du JRE ou du JDK par le path de GraalVM.<br />
Sous eclipse par exemple, cela peut se faire en allant dans ''Window/Preferences/Java/Installed JREs''.<br />
<br />
[[File:installation_ide.png|500px|Spécification du JDK dans l'IDE]]<br />
<br />
====Mixage de langages====<br />
<br />
Au niveau du JDK, Graal propose tout un ensemble de librairies permettant l'inter-opérabilité entre les langages. Par exemple, il est possible depuis un programme Java d'importer la libraire org.graalvm.polyglot pour exécuter les fonctions d'un programme dans un autre langage et en récupérer le résultat.<br />
<br />
==Limites==<br />
<br />
Même si les promesses de GraalVM, à savoir l'amélioration des performances à l'exécution des langages JVM et le polyglottisme, sont respectées, l'outil d'Oracle rencontre quand même quelques limites :<br />
<br />
* On peut regretter que les langages les plus bas niveaux comme le C soient paradoxalement ceux qui traversent le plus de couches logicielles dans l'architecture de GraalVM. Leur interêt en termes de performance est donc extrêmement diminué puisqu'ils nécessitent de nombreuses opérations pour être transformé en bytecode, bytecode qui est logé à la même enseigne que le bytecode issu de code Java au yeux du compilateur.<br />
<br />
* En règle générale, les performances hors langages JVM sont tout de même loins d'être extraordinaires. L'inter-opérabilité entre langages est fonctionnelles mais coûteuse en ressources. A en croire la documentation, l'overhead est quand même évité, c'est à dire que les données sont échangées entre les différents langages sans être dupliquées.<br />
<br />
* Les langages compris par GraalVM étant en fait des implémentations Truffle de langages et pas les langages en eux-mêmes, il manque les librairies utiles à chaque langage. Il est donc impossible par exemple, d'utiliser ''matplolib'' dans un programme Python. Les programmes en sont plus ou moins réduit à de l'algorithmie selon les capacités natives du langage.<br />
<br />
=Demonstration=<br />
<br />
Une démonstration de GraalVM est accessible à ce lien : [[VT2020-GraalVM-Demo|VT2020-GraalVM-Demo]]<br />
<br />
=Sources=<br />
# <div id="GraalVM">[https://www.graalvm.org/docs/getting-started GraalVM Official documentation: '''Getting Started''']</div><br />
# <div id="GraalVM">[https://www.graalvm.org/docs/introduction GraalVM Official documentation: '''Introduction''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/GraalVM Wikipedia: '''GraalVM''']</div><br />
# <div id="GraalVM">[https://medium.com/@nelvadas/a-la-d%C3%A9couverte-de-graalvm-5adbe0487624 Elvadas Nono : '''A la découverte de GraalVM (2020)''']</div><br />
# <div id="GraalVM">[https://www.theserverside.com/definition/GraalVM ServerSide: '''Definition of GraalVM''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Wikipedia: '''Machine Virtuelle Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/HotSpot Wikipedia: '''Hotspot''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/Maxine_Virtual_Machine_Kit Wikipedia: '''Maxine''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Java_Development_Kit Wikipedia: '''Java Development it''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://dev.to/abdulfousan/graalvm-polyglot-virtual-machine-4mn2 Abdul Fousan: '''GraalVM Polyglot Virtual Machine''']</div><br />
# <div id="GraalVM">[https://blog.plan99.net/graal-truffle-134d8f28fb69 Mike Hearn: '''GraalVM and Truffle''']</div><br />
# <div id="GraalVM">[https://www.trufflesuite.com/docs/truffle/overview Truffle Official documentation: '''GraalVM and Truffle''']</div><br />
<br />
=Veille Technologique 2020=<br />
* Année : [[VT2020|VT2021]]<br />
* Sujet : GraalVM<br />
* Slides : [[Media:GraalVM.pdf|Slides]]<br />
* Auteurs : [[User:Alexis.Rollin]]</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Fiche&diff=48331VT2020-GraalVM-Fiche2020-11-14T20:48:20Z<p>Alexis.Rollin: </p>
<hr />
<div>GraalVM est une machine virtuelle Java développée par [https://fr.wikipedia.org/wiki/Oracle_(entreprise) Oracle] dite "polyglotte" car elle est capable de comprendre de nombreux langages de programmation.<br />
<br />
=Rappels sur l'architecture de la plateforme Java=<br />
<br />
L'architecture de GraalVM se basant sur celle d'un [https://fr.wikipedia.org/wiki/Java_Development_Kit Java Development Kit], un rappel sur le fonctionnement de la plateforme Java peut s'avérer utile.<br />
<br />
Tout d'abord, le Java a la particularité d'être un langage à la fois compilé et interprété. Les tâches de compilation et d'interprétation sont distinctes et réalisées par des composants différents.<br />
Comme on peut le voir sur le schéma ci-dessous, le code Java est d'abord compilé en bytecode par un Java Compiler pour ensuite être interprété et exécuté par une Java Virtual Machine.<br />
<br />
[[File:java_platform_architecture2.png|500px|Composition d'un JDK]]<br />
<br />
Il faut donc distinguer dans cette architecture :<br />
* La Java Virtual Machine (JVM), qui interprète et exécute le code.<br />
* Le Java Runtime Environment (JRE), qui est un environnement d'exécution contenant des librairies et la JVM.<br />
* Le Java Development Kit (JDK), qui est composé de librairies en Java, du JRE et du Java Compiler.<br />
<br />
=GraalVM=<br />
<br />
==Abstract==<br />
<br />
''"GraalVM is a high-performance multilingual runtime. It is designed to accelerate the execution of applications written in Java and other JVM languages while also providing runtimes for JavaScript, Ruby, Python, and a number of other popular languages. GraalVM’s polyglot capabilities make it possible to mix multiple programming languages in a single application while eliminating any foreign language call costs."''<br />
<br />
Documentation officielle de GraalVM<br />
<br />
==Origines==<br />
<br />
===Constats===<br />
<br />
Malgré son apparente popularité, le langage Java est sur le déclin. A l'origine, ce langage conçue par Sun Microsystems et dit "JVM" (comme Kotlin ou Scala) avait été conçu avec l'idée de pouvoir être exécuté sur n'importe quelle plateforme ayant une JVM, affranchissant ainsi le développeur des spécifités d'exécution de la plateforme (d'où le slogan ''"Write Once Run Anywere"''). Cependant, à cause la surcouche logicielle induite par la JVM, le langage Java a essuyé des critiques sur sa performance et sur sa verbosité.<br />
<br />
S'ajoute à cela un regain de popularité des langages natifs dans les années 2010, notamment grâce à Apple et son développement mobile iOS en Objective-C qui contraste avec Java ou Kotlin (étant tous deux des langages JVM) en terme de performance.<br />
<br />
Pour répondre à ces problématiques, l'entreprise Oracle se doit d'adapter constamment Java afin de rester compétitive, et sa JVM avec.<br />
<br />
===Ce qui existait déjà===<br />
<br />
Evidemment, Java fonctionnait bien avant l'arrivée de GraalVM, ce qui signifie qu'il existait donc déjà des machines virtuelles. La plus utilisée d'entre elles est HotSpot, écrites en C++. Elle a été créé par Sun et appartient aujourd'hui à Oracle depuis le rachat de Sun. Notez que toutes les JVM (ou autres composants de la plateforme Java), ne sont pas forcément propriété d'Oracle : par exemple, OpenJ9 est une JVM dont la propriété revient à IBM et à la fondation Eclipse. Ces composants doivent ceci dit respecter des spécifications dictées par Sun (https://docs.oracle.com/javase/specs/).<br />
<br />
La première version de Hotspot n'était qu'un interpréteur, puis elle a été améliorée avec un ajout de la compilation à la volée (Just-In-Time). Ensuite elle a été capable de détecter les portions de code les plus fréquemment utilisés et de les optimiser.<br />
<br />
Ceci dit, GraalVM trouve ses racines dans le projet Maxine (dévelopé par Sun Microsystems Laboratories en 2005), dont l'objectif était d'écrire une JVM en langage Java pour s'affranchir des problèmes de développement liés au C++, plus particulièrement la gestion de la mémoire. Le projet s'est avéré trop ambitieux à l'époque mais a servi de point de départ pour GraalVM presque 15 ans plus tard.<br />
<br />
===Solution===<br />
<br />
Les objectifs ayant mené à la création de GraalVM sont multiples :<br />
* Avoir un environnement qui accélère l'exécution des applications écrites en Java ou d'autres langages JVM afin de rivaliser avec les langages natifs<br />
* Fournir un environnement d'exécution qui supporte plusieurs langages de programmation, supprimant ainsi l'isolation entre eux et établissant une véritable inter-opérabilité.<br />
<br />
La solution développée est GraalVM, une machine virtuelle haute performance (d'après les dires d'Oracle) qui prend en fait la forme d'un JDK dont la partie VM a été grandement améliorée.<br />
<br />
==Fonctionnalités==<br />
<br />
Les principaux atouts de GraalVM sont:<br />
* Graal Compiler, un nouveau compilateur JIT (Just-In-Time) pour Java<br />
* GraalVM Native Image, permettant la compilation AOT (Ahead-Of-Time) pour les applications Java<br />
* Truffle Language Implementation framework et GraalVM SDK, fournissant des runtimes pour d'autres langages de programmation<br />
* LLVM Runtime et JavaScript Runtime<br />
<br />
On a en plus la possibilité d'installer des langages et même de définir le nôtre. Actuellement, tous les langages suivants sont compatibles avec Graal (moyennant installations supplémentaires) :<br />
[[File:Languages.png|600px|Listes des langages compatibles avec GraalVM]]<br />
<br />
==Architecture==<br />
<br />
[[File:graal_vm_architecture.jpg | 500px | thumb | right | Architecture de la JVM GraalVM]]<br />
<br />
GraalVM réutilise l'architecture d'OpenJDK (qui est sans grande surprise un JDK), mais avec quelques particularités au niveau de la JVM :<br />
* Il réutilise la VM Hotspot, mais de laquelle on a retiré le JIT Compiler. <br />
* Il bénéficie d'un nouveau compilateur JIT, Graal Compiler, écrit en Java et en dehors de Hotspot. Il a pour mission de transformer du bytecode en code machine (ne pas confondre avec le Java Compiler, plus haut niveau).<br />
* Pour permettre à la JVM Hotspot d'utiliser un compilateur écrit en Java, une couche intermédiaire est nécessaire : la JVM Compiler Interface.<br />
* Tout ce qui doit arriver au compilateur JIT doit être du bytecode. C'est pourquoi les langages non-JVM ne peuvent pas être directement pris en entrée de Graal Compiler. La couche Truffle framework répond à cette problématique. Truffle est un framework open-source qui sert à définir nos propres langages de programmation à travers un AST (Abstract Syntax Tree) et à construire des interpréteurs pour ce dernier. Il est réutilisé dans GraalVM pour définir des implémentations Truffle de Python, Ruby ou encore Javascript. Attention, l'implémentation d'un langage sous Truffle n'est pas le langage en lui-même, ce qui pose quelques problèmes comme on peut le voir dans la partie Limites.<br />
* La couche Truffle suffisait pour les langages interprétés puisque Truffle construit des interpréteurs. Mais pour les langages LLVM (Low Level Virtual Machine) comme le C, le C++ ou le Fortran, une surcouche est nécessaire. Sulong est une LLVM qui permet de produire du bitcode en s'appuyant sur les fonctionnalités de Truffle.<br />
<br />
==Utilisation==<br />
<br />
===Installation===<br />
<br />
GraalVM est très simple à installer.<br />
<br />
* Naviguez sur le git de GraalVM (https://github.com/graalvm/graalvm-ce-builds/releases) et téléchargez la version de GraalVM compatible avec notre version de Java/OpenJDK, que l'on peut connaître avec la commande :<br />
<pre>java -version</pre><br />
<br />
* Dézippez l'archive à l'endroit de votre choix.<br />
<pre>tar -xzf <graalvm-archive>.tar.gz</pre><br />
<br />
* Configurez votre variable d'environnement PATH:<br />
<pre>export PATH=<graalvm>/bin:$PATH</pre><br />
Si vous souhaitez remplacer votre JDK par GraalVM pour toutes vos applications utilisant Java, vous pouvez changer la variable d'environnement JAVA_HOME.<br />
<pre>export JAVA_HOME=<graalvm></pre><br />
Si vous ne souhaitez pas modifier votre JAVA_HOME, vous pouvez définir une variable d'environnement GRAAL_HOME qui vous sera utile pour ne pas avoir à réécrire le chemin complet de Graal.<br />
Notez également que vous pouvez rendre les commandes au-dessus permanentes en les ajoutant à votre fichier .bashrc ou .zshrc.<br />
<br />
===Exécution===<br />
<br />
Le dossier /bin est similaire à un JDK standard, mais contient des launchers additionnels (en plus de javac pour le Java):<br />
* js, un launcher JavaScript<br />
* node, un launcher Node.js<br />
* lli, un launcher LLVM<br />
En d'autres termes, GraalVM ne comprend que le Java, Node.js (grâce au Javascript Runtime) et les langages LLVM (grâce au LLVM Runtime). Cependant, d'autres launchers peuvent être installés avec la commande :<br />
<pre><br />
gu install <nom_du_langage><br />
</pre><br />
<br />
====Par ligne de commande====<br />
<br />
En règle générale, les commandes d'exécution sont de la forme :<br />
<pre><br />
<nom_du_laucher> <nom_du_programme><br />
</pre><br />
Par exemple :<br />
<pre><br />
node app.js<br />
</pre><br />
Les programmes LLVM doivent êtres compilés avant avec l'outil LLVM Toolchain car le launcher lli ne comprend que du bitcode :<br />
<pre><br />
gu install llvm-toolchain<br />
export LLVM_TOOLCHAIN=$(lli --print-toolchain-path)<br />
$LLVM_TOOLCHAIN/clang hello.c -o hello<br />
lli hello<br />
</pre><br />
====Dans un IDE====<br />
<br />
Dans l'IDE, il suffit de remplacer le path du JRE ou du JDK par le path de GraalVM.<br />
Sous eclipse par exemple, cela peut se faire en allant dans ''Window/Preferences/Java/Installed JREs''.<br />
<br />
[[File:installation_ide.png|500px|Spécification du JDK dans l'IDE]]<br />
<br />
====Mixage de langages====<br />
<br />
Au niveau du JDK, Graal propose tout un ensemble de librairies permettant l'inter-opérabilité entre les langages. Par exemple, il est possible depuis un programme Java d'importer la libraire org.graalvm.polyglot pour exécuter les fonctions d'un programme dans un autre langage et en récupérer le résultat.<br />
<br />
==Limites==<br />
<br />
Même si les promesses de GraalVM, à savoir l'amélioration des performances à l'exécution des langages JVM et le polyglottisme, sont respectées, l'outil d'Oracle rencontre quand même quelques limites :<br />
<br />
* On peut regretter que les langages les plus bas niveaux comme le C soient paradoxalement ceux qui traversent le plus de couches logicielles dans l'architecture de GraalVM. Leur interêt en termes de performance est donc extrêmement diminué puisqu'ils nécessitent de nombreuses opérations pour être transformé en bytecode, bytecode qui est logé à la même enseigne que le bytecode issu de code Java au yeux du compilateur.<br />
<br />
* En règle générale, les performances hors langages JVM sont tout de même loins d'être extraordinaires. L'inter-opérabilité entre langages est fonctionnelles mais coûteuse en ressources. A en croire la documentation, l'overhead est quand même évité, c'est à dire que les données sont échangées entre les différents langages sans être dupliquées.<br />
<br />
* Les langages compris par GraalVM étant en fait des implémentations Truffle de langages et pas les langages en eux-mêmes, il manque les librairies utiles à chaque langage. Il est donc impossible par exemple, d'utiliser ''matplolib'' dans un programme Python. Les programmes en sont plus ou moins réduit à de l'algorithmie selon les capacités natives du langage.<br />
<br />
=Demonstration=<br />
<br />
Une démonstration de GraalVM est accessible à ce lien : [[VT2020-GraalVM-Demo|VT2020-GraalVM-Demo]]<br />
<br />
=Sources=<br />
# <div id="GraalVM">[https://www.graalvm.org/docs/getting-started GraalVM Official documentation: '''Getting Started''']</div><br />
# <div id="GraalVM">[https://www.graalvm.org/docs/introduction GraalVM Official documentation: '''Introduction''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/GraalVM Wikipedia: '''GraalVM''']</div><br />
# <div id="GraalVM">[https://medium.com/@nelvadas/a-la-d%C3%A9couverte-de-graalvm-5adbe0487624 Elvadas Nono : '''A la découverte de GraalVM (2020)''']</div><br />
# <div id="GraalVM">[https://www.theserverside.com/definition/GraalVM ServerSide: '''Definition of GraalVM''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Wikipedia: '''Machine Virtuelle Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/HotSpot Wikipedia: '''Hotspot''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/Maxine_Virtual_Machine_Kit Wikipedia: '''Maxine''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Java_Development_Kit Wikipedia: '''Java Development it''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://dev.to/abdulfousan/graalvm-polyglot-virtual-machine-4mn2 Abdul Fousan: '''GraalVM Polyglot Virtual Machine''']</div><br />
# <div id="GraalVM">[https://blog.plan99.net/graal-truffle-134d8f28fb69 Mike Hearn: '''GraalVM and Truffle''']</div><br />
# <div id="GraalVM">[https://www.trufflesuite.com/docs/truffle/overview Truffle Official documentation: '''GraalVM and Truffle''']</div><br />
<br />
=Veille Technologique 2020=<br />
* Année : [[VT2020|VT2021]]<br />
* Sujet : GraalVM<br />
* Slides : [[Media:GraalVM.pdf|Slides]]<br />
* Auteurs : [[User:Alexis.Rollin]]</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020&diff=48330VT20202020-11-14T20:47:41Z<p>Alexis.Rollin: /* Séance 1 : 16/11 */</p>
<hr />
<div>[[VT2019|<< Etudes 2019]] [[VT|Sommaire]] [[VT2021|Etudes 2021 >>]]<br />
<br />
<br />
=Veille Technologique et Stratégique=<br />
* Enseignants: [[User:Gpbonneau|Georges-Pierre Bonneau]], [[User:Donsez|Didier Donsez]]<br />
* UE/Module: EAM (HPRJ9R6B) et EAR (HPRJ9R4B) en 1FO5<br />
<br />
L'objectif de cette UE est de réaliser un travail de synthèse et d’évaluation sur une technologie / spécification / tendance<br />
<br />
Dans votre futur vie d'ingénieur, vous aurez à d'une part, vous former par vous-même sur une technologie émergente et d'autre part à réaliser une veille technologique (et stratégique) par rapport à votre entreprise et projet.<br />
Il s'agira de réaliser<br />
* le positionnement par rapport au marché<br />
* d'être critique<br />
<br />
Votre synthèse fait l'objet d'une présentation orale convaincante devant un auditoire (dans le futur, vos collègues, vos chefs ou vos clients) avec des transparents et un discours répété.<br />
Pour finir de convaincre (Saint Thomas), vous ferez la présentation d'une démonstration.<br />
<br />
Votre présentation sera notée et commentée par tous vos camarades via un sondage (téléphone mobile). Leurs notes et leurs commentaires seront notés en fonction de leur exactitude de jugement.<br />
<br />
Remarque: Le [https://fr.wikipedia.org/wiki/Plagiat plagiat] est incompatible avec l'éthique de l'ingénieur. Le directeur d'école peut demander votre traduction devant la commission disciplinaire de l'université. La sanction peut aller jusqu’à une interdiction d'inscription dans les établissements de l'enseignement supérieur français pendant plusieurs années : Le jeu en vaut-il la chandelle ?<br />
<br />
La présentation peut être réalisée avec [[reveal.js]] ou avec [[remarkjs]]<br />
<br />
[[File:presentation-VT-RICM5-1516.pdf|transparents d'introduction à l'UE]]<br />
<br />
=Planning=<br />
<br />
== Séance 1 : 16/11 ==<br />
Enseignants : [[User:Gpbonneau|Georges-Pierre Bonneau]], [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : 5, 8, 23, 78<br />
<br />
* 16H00 : Alexis ROLLIN, GraalVM, [[VT2020-GraalVM-Fiche|Fiche]], [[File:VT2020-GraalVM-Presentation.pdf|Présentation]], [[VT2020-GraalVM-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, Micronaut, [[VT2020-Micronaut-Fiche|Fiche]], [[File:VT2020-Micronaut-Presentation.pdf|Présentation]], [[VT2020-Micronaut-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, JSONnet, [[VT2020-JSONnet-Fiche|Fiche]], [[File:VT2020-JSONnet-Presentation.pdf|Présentation]], [[VT2020-JSONnet-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, Cryptojacking, [[VT2020-Cryptojacking-Fiche|Fiche]], [[File:VT2020-Cryptojacking-Presentation.pdf|Présentation]], [[VT2020-Cryptojacking-Demo|Démonstration]]<br />
<br />
== Séance 2 : 23/11 ==<br />
Enseignants : [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : 9, 33, 49, 72, 81<br />
<br />
* 16H00 : Prénom NOM, Ballerina, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, Microclimate, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, Voice-First Development, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, Valgrind, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H40 : Prénom NOM, HTTP/3, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
<br />
== Séance 3 : 30/11 ==<br />
Enseignants : [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : 2, 3, 10, 11, 38<br />
<br />
* 16H00 : Prénom NOM, Blazor, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, Website Rendering Types, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, Quarkus, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, Helidon, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H40 : Prénom NOM, WebAssembly, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
<br />
== Séance 4 : 7/12 ==<br />
Enseignants : [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : 4, 15, 16, 19, 21<br />
<br />
* 16H00 : Prénom NOM, MemSQL, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, QuestDB, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, Apache Arrow, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, Apache Pulsar, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H40 : Prénom NOM, Apache Pinot, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
<br />
== Séance 5 : 14/12 ==<br />
Enseignants : [[User:Gpbonneau|Georges-Pierre Bonneau]], [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : 22, 48, 55, 56, 84<br />
<br />
* 16H00 : Prénom NOM, IoT Dataflow Mashup, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, Low-Power Global Area Networks (Sat-IoT), [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, Apollo 2.0, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, Flogo, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H40 : Prénom NOM, Amazon Sidewalk, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
<br />
== Séance 6 : 4/1 ==<br />
Enseignants : [[User:Gpbonneau|Georges-Pierre Bonneau]], [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : 6, 7, 20, 50, 83<br />
<br />
* 16H00 : Prénom NOM, OpenAI GPT-3, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, OpenAI Microscope, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, Deepfake Algorithms, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, Psychométrie, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H40 : Prénom NOM, Godot, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
<br />
== Séance 7 : 11/1 ==<br />
Enseignants : [[User:Gpbonneau|Georges-Pierre Bonneau]], [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : 1, 32, 41, 60, XXXX<br />
<br />
* 16H00 : Prénom NOM, Matrix, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, Peloton, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, DevSecOps, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, BFT, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H40 : Prénom NOM, XXXXXX, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
<br />
== Séance 8 : Asynchrone ==<br />
Enseignants : [[User:Gpbonneau|Georges-Pierre Bonneau]], [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : TBC<br />
<br />
* 16H00 : Prénom NOM, XXXXXX, [[VT2020-XXXXXX-Fiche|Fiche]], [[https://screencast|Présentation filmée]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, XXXXXX, [[VT2020-XXXXXX-Fiche|Fiche]], [[https://screencast|Présentation filmée]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, XXXXXX, [[VT2020-XXXXXX-Fiche|Fiche]], [[https://screencast|Présentation filmée]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, XXXXXX, [[VT2020-XXXXXX-Fiche|Fiche]], [[https://screencast|Présentation filmée]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H40 : Prénom NOM, XXXXXX, [[VT2020-XXXXXX-Fiche|Fiche]], [[https://screencast|Présentation filmée]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
<br />
=Sujets=<br />
# [[Matrix]] : An open network for secure, decentralized communication<br />
# [[Blazor]] (Browser+Razor) : a new web development framework introduced by Microsoft, which allows you to develop browser-based applications using C# and Razor syntax alongside HTML and CSS.<br />
# [[Website Rendering Types]] (Static, Dynamic, Incremetal) : démonstration de [https://nextjs.org/ NextJS]<br />
# [[MemSQL]]<br />
# [[Micronaut]] : Microservice platform ([https://dzone.com/articles/how-to-use-jhipster-to-build-a-secure-micronaut-an démo] avec [https://github.com/jhipster/generator-jhipster-micronaut Micronaut blueprint of JHipster])<br />
# [[OpenAI GPT-3]]<br />
# [[OpenAI Microscope]]<br />
# [[GraalVM]] : Polyglot Virtual Machine<br />
# [[Ballerina]] : open source programming language and platform for cloud-era application programmers to easily write software that just works<br />
# [[Quarkus]] : Supersonic Subatomic Java<br />
# [[Helidon]] : collection of Java libraries for writing microservices.<br />
# [[Flux]] (#fluxlang) new data scripting language to make querying and analyzing time series<br />
# [[Processeurs spécialisés pour l'IA]] : Démonstration avec la carte [https://greenwaves-technologies.com/product/gappoc-a-computer-vision-concept-board/ GAPPoc-A] de GreenWaves. ANNULé<br />
# [[NATS]]: PubSub broker (démonstration avec CampusIoT)<br />
# [[QuestDB]] : time-series database (démostration avec CampusIoT).<br />
# [[Apache Arrow]] : cross-language development platform for in-memory data<br />
# In-memory Distributed Data Grid : démonstration de eCom avec [[Apache Ignite]].<br />
# [[jQAssistant]] : application à eCOM<br />
# [[Apache Pulsar]] Pulsar is a multi-tenant, high-performance solution for server-to-server messaging. Pulsar was originally developed by Yahoo.<br />
# [[Godot Game Engine]]<br />
# [[Apache Pinot]] : realtime distributed OLAP datastore<br />
# [[IoT Dataflow Mashup]] (démo avec [[Eclipse Kura Wires]])<br />
# [[JSONnet]]<br />
# [[Géo-réplication]] : Démo avec [[Apache Kafka MirrorMaker]]<br />
# [[Pulsar]]<br />
# [[Wookey project]] (Demo on a STM32F407 Discovery board) ANNULé<br />
# [[RSocket]]<br />
# [[Nacos]] : open source project by Alibaba for service discovery and service configuration.<br />
# [[NEMU]] : open source hypervisor specifically built and designed to run modern cloud workloads on modern 64-bit Intel and ARM CPUs.<br />
# [[Architecture Serverless]] : démonstration avec le projet https://github.com/serverless/serverless sur votre compte Azure de votre compte GitHub Student Pack ANNULé<br />
# [[Fission]] : open-source serverless function framework for [[Kubernetes]] with a focus on developer productivity and high performance.<br />
# [[Peloton]], a unified resource scheduler<br />
# [[Microclimate]]<br />
# [[AdTech]]<br />
# [[Nearby communications]] (démonstration de [https://ionicframework.com/docs/native/google-nearby/ Nearby Messages API de Google avec Ionic]) --> Réservé Manon Chaix<br />
# [[Conflict-free replicated data type]] (CRDT) RECOMMANDé<br />
# [[Spinnaker]]<br />
# [[WebAssembly]]<br />
# [[Fast Identity Online Alliance]] (FIDO) ANNULé<br />
# [[Apache MXNet]] : Demo avec [[Intel Movidius]] ([https://github.com/tspannhw/rpi-mxnet-movidius-minifi lien]) ANNULé<br />
# [[DevSecOps]] <br />
# [[Apache Beam]] RECOMMANDé<br />
# [[In-Memory Data Grids]] : Démonstration de [[Gigaspaces]] et [[XAP]] Open Source<br />
# Gestionnaires de contenu : démonstration de [[Apache Jackrabbit]] dans le projet [[eCOM]]<br />
# [[Memory-centric virtual distributed storage system]]<br />
# [[ESB]] : démonstration de [[Mule ESB]]<br />
# [[MemCached]]<br />
# [[Low-Power Global Area Network]]s ([[Sat-IoT]])<br />
# [[ Voice-First Development]] : Designing, Developing, and Deploying Conversational Interfaces<br />
# [[Psychométrie]]<br />
# [[WebAssembly]]<br />
# [[DevSecOps]]<br />
# Portails et l'API [[Portlet]] : Démo avec [[Liferay]] ANNULé<br />
# [[Apache Beam]]<br />
# [[plateforme logicielle open source de conduite autonome Apollo 2.0]]<br />
# [[Flogo]] Open Source Framework for IoT Edge Apps & Integration.<br />
# [[Neural Processing Unit]] (NPU) : Demo de la clé [[Intel Movidius]] sur un RPI<br />
# [[Hazelcast]] : Démo avec Spring Boot ([https://dzone.com/storage/assets/6459742-dzone-rc247-gettingstartedwithspringbootandmicrose.pdf lien]) dans un projet [[JHipster]]<br />
# [[In-Memory Data Grids]] : Démonstration de [[Gigaspaces]] et [[XAP]] Open Source<br />
# [[Fautes Byzantines]] : Démonstration de [[BFT-SMaRt]]<br />
# Insport Video<br />
# Gestionnaires de contenu : démonstration de [[Apache Jackrabbit]] dans le projet [[eCOM]]<br />
# [[Memory-centric virtual distributed storage system]]<br />
# [[Performance Monitoring]]<br />
# [[ESB]] : démonstration de [[Mule ESB]] ANNULé<br />
# [[Access Network Query Protocol (ANQP)]]<br />
# [[JCache]] : démonstration avec [[Apache Ignity]]<br />
# [[MemCached]]<br />
# [[Apache Stratos]]<br />
# [[gceasy]] : Universal garbage collection log Analyser<br />
# [[Apache Solr]] : Démonstration avec [http://hortonworks.com/hadoop-tutorial/indexing-and-searching-text-within-images-with-apache-solr/ Tesseract OCR]<br />
# [[Valgrind]]<br />
# [[Content Delivery Network]]s : Démonstration de [[Amazon S3]], Azure, Akamaï ... sur votre projet [[ECOM-RICM|eCOM]]<br />
# [[CMS]] : Demo avec [[Crafter CMS]]<br />
# [[DMS]] (GED) : Demo avec la version Community Edition d'[[Alfresco]] et de son API REST avec [[Swagger]] ANNULé<br />
# [[SIG]] : Démonstration de [[QGIS]]<br />
# [[Apache Airflow]] ANNULé<br />
# [[Cryptojacking]] : démonstration d'un navigateur exécutant [https://github.com/cazala/coin-hive CoinHive] et affichage du coup énergétique de l'opération.<br />
# [[RIOT-OS]] : système d'exploitation pour l'Internet des Objets (Démonstration sur une carte STM32 Nucleo LRWAN1). ANNULé<br />
# [[Zephyr]] : système d'exploitation pour l'Internet des Objets (Démonstration sur une carte [[Intel Quark D2000]]). ANNULé<br />
# [[HTTP/3]] : quoi de neuf ? Démonstration de l'amélioration des performances.<br />
# [[Gyro]] : domain-specific language designed to concisely describe a cloud infrastructure. Démonstration avec votre application eCOM JHipster sur Azure.<br />
# [[Deepfake Algorithms]] et outils.<br />
# [[Amazon Sidewalk]]<br />
# Interfaces Homme-Machine sans contact (sous réserve de démonstrateur)<br />
# Interfaces Homme-Machine haptiques (sous réserve de démonstrateur)</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020&diff=48329VT20202020-11-14T20:47:25Z<p>Alexis.Rollin: /* Séance 1 : 16/11 */</p>
<hr />
<div>[[VT2019|<< Etudes 2019]] [[VT|Sommaire]] [[VT2021|Etudes 2021 >>]]<br />
<br />
<br />
=Veille Technologique et Stratégique=<br />
* Enseignants: [[User:Gpbonneau|Georges-Pierre Bonneau]], [[User:Donsez|Didier Donsez]]<br />
* UE/Module: EAM (HPRJ9R6B) et EAR (HPRJ9R4B) en 1FO5<br />
<br />
L'objectif de cette UE est de réaliser un travail de synthèse et d’évaluation sur une technologie / spécification / tendance<br />
<br />
Dans votre futur vie d'ingénieur, vous aurez à d'une part, vous former par vous-même sur une technologie émergente et d'autre part à réaliser une veille technologique (et stratégique) par rapport à votre entreprise et projet.<br />
Il s'agira de réaliser<br />
* le positionnement par rapport au marché<br />
* d'être critique<br />
<br />
Votre synthèse fait l'objet d'une présentation orale convaincante devant un auditoire (dans le futur, vos collègues, vos chefs ou vos clients) avec des transparents et un discours répété.<br />
Pour finir de convaincre (Saint Thomas), vous ferez la présentation d'une démonstration.<br />
<br />
Votre présentation sera notée et commentée par tous vos camarades via un sondage (téléphone mobile). Leurs notes et leurs commentaires seront notés en fonction de leur exactitude de jugement.<br />
<br />
Remarque: Le [https://fr.wikipedia.org/wiki/Plagiat plagiat] est incompatible avec l'éthique de l'ingénieur. Le directeur d'école peut demander votre traduction devant la commission disciplinaire de l'université. La sanction peut aller jusqu’à une interdiction d'inscription dans les établissements de l'enseignement supérieur français pendant plusieurs années : Le jeu en vaut-il la chandelle ?<br />
<br />
La présentation peut être réalisée avec [[reveal.js]] ou avec [[remarkjs]]<br />
<br />
[[File:presentation-VT-RICM5-1516.pdf|transparents d'introduction à l'UE]]<br />
<br />
=Planning=<br />
<br />
== Séance 1 : 16/11 ==<br />
Enseignants : [[User:Gpbonneau|Georges-Pierre Bonneau]], [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : 5, 8, 23, 78<br />
<br />
* 16H00 : Alexis ROLLIN, GraalVM, [[VT2020-GraalVM-Fiche|Fiche]], [[File:VT2020-GraalVM-Presentation.pdf| Présentation]], [[VT2020-GraalVM-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, Micronaut, [[VT2020-Micronaut-Fiche|Fiche]], [[File:VT2020-Micronaut-Presentation.pdf|Présentation]], [[VT2020-Micronaut-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, JSONnet, [[VT2020-JSONnet-Fiche|Fiche]], [[File:VT2020-JSONnet-Presentation.pdf|Présentation]], [[VT2020-JSONnet-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, Cryptojacking, [[VT2020-Cryptojacking-Fiche|Fiche]], [[File:VT2020-Cryptojacking-Presentation.pdf|Présentation]], [[VT2020-Cryptojacking-Demo|Démonstration]]<br />
<br />
== Séance 2 : 23/11 ==<br />
Enseignants : [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : 9, 33, 49, 72, 81<br />
<br />
* 16H00 : Prénom NOM, Ballerina, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, Microclimate, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, Voice-First Development, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, Valgrind, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H40 : Prénom NOM, HTTP/3, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
<br />
== Séance 3 : 30/11 ==<br />
Enseignants : [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : 2, 3, 10, 11, 38<br />
<br />
* 16H00 : Prénom NOM, Blazor, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, Website Rendering Types, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, Quarkus, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, Helidon, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H40 : Prénom NOM, WebAssembly, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
<br />
== Séance 4 : 7/12 ==<br />
Enseignants : [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : 4, 15, 16, 19, 21<br />
<br />
* 16H00 : Prénom NOM, MemSQL, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, QuestDB, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, Apache Arrow, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, Apache Pulsar, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H40 : Prénom NOM, Apache Pinot, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
<br />
== Séance 5 : 14/12 ==<br />
Enseignants : [[User:Gpbonneau|Georges-Pierre Bonneau]], [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : 22, 48, 55, 56, 84<br />
<br />
* 16H00 : Prénom NOM, IoT Dataflow Mashup, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, Low-Power Global Area Networks (Sat-IoT), [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, Apollo 2.0, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, Flogo, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H40 : Prénom NOM, Amazon Sidewalk, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
<br />
== Séance 6 : 4/1 ==<br />
Enseignants : [[User:Gpbonneau|Georges-Pierre Bonneau]], [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : 6, 7, 20, 50, 83<br />
<br />
* 16H00 : Prénom NOM, OpenAI GPT-3, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, OpenAI Microscope, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, Deepfake Algorithms, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, Psychométrie, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H40 : Prénom NOM, Godot, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
<br />
== Séance 7 : 11/1 ==<br />
Enseignants : [[User:Gpbonneau|Georges-Pierre Bonneau]], [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : 1, 32, 41, 60, XXXX<br />
<br />
* 16H00 : Prénom NOM, Matrix, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, Peloton, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, DevSecOps, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, BFT, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H40 : Prénom NOM, XXXXXX, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
<br />
== Séance 8 : Asynchrone ==<br />
Enseignants : [[User:Gpbonneau|Georges-Pierre Bonneau]], [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : TBC<br />
<br />
* 16H00 : Prénom NOM, XXXXXX, [[VT2020-XXXXXX-Fiche|Fiche]], [[https://screencast|Présentation filmée]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, XXXXXX, [[VT2020-XXXXXX-Fiche|Fiche]], [[https://screencast|Présentation filmée]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, XXXXXX, [[VT2020-XXXXXX-Fiche|Fiche]], [[https://screencast|Présentation filmée]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, XXXXXX, [[VT2020-XXXXXX-Fiche|Fiche]], [[https://screencast|Présentation filmée]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H40 : Prénom NOM, XXXXXX, [[VT2020-XXXXXX-Fiche|Fiche]], [[https://screencast|Présentation filmée]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
<br />
=Sujets=<br />
# [[Matrix]] : An open network for secure, decentralized communication<br />
# [[Blazor]] (Browser+Razor) : a new web development framework introduced by Microsoft, which allows you to develop browser-based applications using C# and Razor syntax alongside HTML and CSS.<br />
# [[Website Rendering Types]] (Static, Dynamic, Incremetal) : démonstration de [https://nextjs.org/ NextJS]<br />
# [[MemSQL]]<br />
# [[Micronaut]] : Microservice platform ([https://dzone.com/articles/how-to-use-jhipster-to-build-a-secure-micronaut-an démo] avec [https://github.com/jhipster/generator-jhipster-micronaut Micronaut blueprint of JHipster])<br />
# [[OpenAI GPT-3]]<br />
# [[OpenAI Microscope]]<br />
# [[GraalVM]] : Polyglot Virtual Machine<br />
# [[Ballerina]] : open source programming language and platform for cloud-era application programmers to easily write software that just works<br />
# [[Quarkus]] : Supersonic Subatomic Java<br />
# [[Helidon]] : collection of Java libraries for writing microservices.<br />
# [[Flux]] (#fluxlang) new data scripting language to make querying and analyzing time series<br />
# [[Processeurs spécialisés pour l'IA]] : Démonstration avec la carte [https://greenwaves-technologies.com/product/gappoc-a-computer-vision-concept-board/ GAPPoc-A] de GreenWaves. ANNULé<br />
# [[NATS]]: PubSub broker (démonstration avec CampusIoT)<br />
# [[QuestDB]] : time-series database (démostration avec CampusIoT).<br />
# [[Apache Arrow]] : cross-language development platform for in-memory data<br />
# In-memory Distributed Data Grid : démonstration de eCom avec [[Apache Ignite]].<br />
# [[jQAssistant]] : application à eCOM<br />
# [[Apache Pulsar]] Pulsar is a multi-tenant, high-performance solution for server-to-server messaging. Pulsar was originally developed by Yahoo.<br />
# [[Godot Game Engine]]<br />
# [[Apache Pinot]] : realtime distributed OLAP datastore<br />
# [[IoT Dataflow Mashup]] (démo avec [[Eclipse Kura Wires]])<br />
# [[JSONnet]]<br />
# [[Géo-réplication]] : Démo avec [[Apache Kafka MirrorMaker]]<br />
# [[Pulsar]]<br />
# [[Wookey project]] (Demo on a STM32F407 Discovery board) ANNULé<br />
# [[RSocket]]<br />
# [[Nacos]] : open source project by Alibaba for service discovery and service configuration.<br />
# [[NEMU]] : open source hypervisor specifically built and designed to run modern cloud workloads on modern 64-bit Intel and ARM CPUs.<br />
# [[Architecture Serverless]] : démonstration avec le projet https://github.com/serverless/serverless sur votre compte Azure de votre compte GitHub Student Pack ANNULé<br />
# [[Fission]] : open-source serverless function framework for [[Kubernetes]] with a focus on developer productivity and high performance.<br />
# [[Peloton]], a unified resource scheduler<br />
# [[Microclimate]]<br />
# [[AdTech]]<br />
# [[Nearby communications]] (démonstration de [https://ionicframework.com/docs/native/google-nearby/ Nearby Messages API de Google avec Ionic]) --> Réservé Manon Chaix<br />
# [[Conflict-free replicated data type]] (CRDT) RECOMMANDé<br />
# [[Spinnaker]]<br />
# [[WebAssembly]]<br />
# [[Fast Identity Online Alliance]] (FIDO) ANNULé<br />
# [[Apache MXNet]] : Demo avec [[Intel Movidius]] ([https://github.com/tspannhw/rpi-mxnet-movidius-minifi lien]) ANNULé<br />
# [[DevSecOps]] <br />
# [[Apache Beam]] RECOMMANDé<br />
# [[In-Memory Data Grids]] : Démonstration de [[Gigaspaces]] et [[XAP]] Open Source<br />
# Gestionnaires de contenu : démonstration de [[Apache Jackrabbit]] dans le projet [[eCOM]]<br />
# [[Memory-centric virtual distributed storage system]]<br />
# [[ESB]] : démonstration de [[Mule ESB]]<br />
# [[MemCached]]<br />
# [[Low-Power Global Area Network]]s ([[Sat-IoT]])<br />
# [[ Voice-First Development]] : Designing, Developing, and Deploying Conversational Interfaces<br />
# [[Psychométrie]]<br />
# [[WebAssembly]]<br />
# [[DevSecOps]]<br />
# Portails et l'API [[Portlet]] : Démo avec [[Liferay]] ANNULé<br />
# [[Apache Beam]]<br />
# [[plateforme logicielle open source de conduite autonome Apollo 2.0]]<br />
# [[Flogo]] Open Source Framework for IoT Edge Apps & Integration.<br />
# [[Neural Processing Unit]] (NPU) : Demo de la clé [[Intel Movidius]] sur un RPI<br />
# [[Hazelcast]] : Démo avec Spring Boot ([https://dzone.com/storage/assets/6459742-dzone-rc247-gettingstartedwithspringbootandmicrose.pdf lien]) dans un projet [[JHipster]]<br />
# [[In-Memory Data Grids]] : Démonstration de [[Gigaspaces]] et [[XAP]] Open Source<br />
# [[Fautes Byzantines]] : Démonstration de [[BFT-SMaRt]]<br />
# Insport Video<br />
# Gestionnaires de contenu : démonstration de [[Apache Jackrabbit]] dans le projet [[eCOM]]<br />
# [[Memory-centric virtual distributed storage system]]<br />
# [[Performance Monitoring]]<br />
# [[ESB]] : démonstration de [[Mule ESB]] ANNULé<br />
# [[Access Network Query Protocol (ANQP)]]<br />
# [[JCache]] : démonstration avec [[Apache Ignity]]<br />
# [[MemCached]]<br />
# [[Apache Stratos]]<br />
# [[gceasy]] : Universal garbage collection log Analyser<br />
# [[Apache Solr]] : Démonstration avec [http://hortonworks.com/hadoop-tutorial/indexing-and-searching-text-within-images-with-apache-solr/ Tesseract OCR]<br />
# [[Valgrind]]<br />
# [[Content Delivery Network]]s : Démonstration de [[Amazon S3]], Azure, Akamaï ... sur votre projet [[ECOM-RICM|eCOM]]<br />
# [[CMS]] : Demo avec [[Crafter CMS]]<br />
# [[DMS]] (GED) : Demo avec la version Community Edition d'[[Alfresco]] et de son API REST avec [[Swagger]] ANNULé<br />
# [[SIG]] : Démonstration de [[QGIS]]<br />
# [[Apache Airflow]] ANNULé<br />
# [[Cryptojacking]] : démonstration d'un navigateur exécutant [https://github.com/cazala/coin-hive CoinHive] et affichage du coup énergétique de l'opération.<br />
# [[RIOT-OS]] : système d'exploitation pour l'Internet des Objets (Démonstration sur une carte STM32 Nucleo LRWAN1). ANNULé<br />
# [[Zephyr]] : système d'exploitation pour l'Internet des Objets (Démonstration sur une carte [[Intel Quark D2000]]). ANNULé<br />
# [[HTTP/3]] : quoi de neuf ? Démonstration de l'amélioration des performances.<br />
# [[Gyro]] : domain-specific language designed to concisely describe a cloud infrastructure. Démonstration avec votre application eCOM JHipster sur Azure.<br />
# [[Deepfake Algorithms]] et outils.<br />
# [[Amazon Sidewalk]]<br />
# Interfaces Homme-Machine sans contact (sous réserve de démonstrateur)<br />
# Interfaces Homme-Machine haptiques (sous réserve de démonstrateur)</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Demo&diff=48328VT2020-GraalVM-Demo2020-11-14T20:42:29Z<p>Alexis.Rollin: /* Installation */</p>
<hr />
<div>Démonstration de GraalVM en lien avec la fiche de synthèse [[VT2020-GraalVM-Fiche | VT2020-GraalVM-Fiche]] dans le cadre du cours de veille technologique 2019.<br />
<br />
=Installation=<br />
<br />
Installer GraalVM et le paramétrer pour l'IDE Eclipse est nécessaire pour exécuter la démonstration.<br />
<br />
La procédure d'installation peut être trouvée dans la section [[VT2020-GraalVM-Fiche#Utilisation | Utilisation]] de la fiche de synthèse.<br />
<br />
=Démonstration=<br />
<br />
Les projets Eclipse ayant servi à la démonstration en classe sont disponibles [https://github.com/AlexisROLLIN/VTS2020-GraalVM-Demo.git ici].<br />
<br />
Le projet <code>perf-testing</code> est un simple benchmark. Il compte 10 000 000 de fois le nombre de majuscules dans une string et mesure le temps d'exécution de chaque itération (une itération tous les 1 000 000) et le temps total d'exécution. Pour l'exécuter, il suffit de l'importer comme un projet Eclipse et de run <code>CountUpperCase.java</code>. Il est intéressant de l'exécuter avec différents JDK pour observer la plus-value de GraalVM en terme de performances.<br />
<br />
Le projet <code>polyglot-calculation</code> teste le polyglottisme de GraalVM en effectuant des calculs basiques mais dans des langages différents Le <code>main</code> est en Java, la fonction <code>add</code> est en Javascript, <code>multiply</code> en Python et <code>power</code> en R. Il suffit de l'importer comme un projet Eclipse et de run <code>Main.java</code>.</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Demo&diff=48327VT2020-GraalVM-Demo2020-11-14T20:42:05Z<p>Alexis.Rollin: /* Démonstration */</p>
<hr />
<div>Démonstration de GraalVM en lien avec la fiche de synthèse [[VT2020-GraalVM-Fiche | VT2020-GraalVM-Fiche]] dans le cadre du cours de veille technologique 2019.<br />
<br />
=Installation=<br />
<br />
Installer GraalVM et le paramétrer pour l'IDE Eclipse est nécessaire pour exécuter la démonstration.<br />
<br />
La procédure d'installation peut être trouvée dans la section [[VT2020-GraalVM-Fiche#Utilisation | VT2020-GraalVM-Fiche#Utilisation]] de la fiche de synthèse.<br />
<br />
=Démonstration=<br />
<br />
Les projets Eclipse ayant servi à la démonstration en classe sont disponibles [https://github.com/AlexisROLLIN/VTS2020-GraalVM-Demo.git ici].<br />
<br />
Le projet <code>perf-testing</code> est un simple benchmark. Il compte 10 000 000 de fois le nombre de majuscules dans une string et mesure le temps d'exécution de chaque itération (une itération tous les 1 000 000) et le temps total d'exécution. Pour l'exécuter, il suffit de l'importer comme un projet Eclipse et de run <code>CountUpperCase.java</code>. Il est intéressant de l'exécuter avec différents JDK pour observer la plus-value de GraalVM en terme de performances.<br />
<br />
Le projet <code>polyglot-calculation</code> teste le polyglottisme de GraalVM en effectuant des calculs basiques mais dans des langages différents Le <code>main</code> est en Java, la fonction <code>add</code> est en Javascript, <code>multiply</code> en Python et <code>power</code> en R. Il suffit de l'importer comme un projet Eclipse et de run <code>Main.java</code>.</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Demo&diff=48326VT2020-GraalVM-Demo2020-11-14T20:33:43Z<p>Alexis.Rollin: /* Démonstration */</p>
<hr />
<div>Démonstration de GraalVM en lien avec la fiche de synthèse [[VT2020-GraalVM-Fiche | VT2020-GraalVM-Fiche]] dans le cadre du cours de veille technologique 2019.<br />
<br />
=Installation=<br />
<br />
Installer GraalVM et le paramétrer pour l'IDE Eclipse est nécessaire pour exécuter la démonstration.<br />
<br />
La procédure d'installation peut être trouvée dans la section [[VT2020-GraalVM-Fiche#Utilisation | VT2020-GraalVM-Fiche#Utilisation]] de la fiche de synthèse.<br />
<br />
=Démonstration=<br />
<br />
Les projets Eclipse ayant servi à la démonstration en classe sont disponibles [[https://github.com/AlexisROLLIN/VTS2020-GraalVM-Demo.git ici]].<br />
<br />
Le projet <code>perf-testing</code></div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Demo&diff=48325VT2020-GraalVM-Demo2020-11-14T20:33:24Z<p>Alexis.Rollin: /* Installation */</p>
<hr />
<div>Démonstration de GraalVM en lien avec la fiche de synthèse [[VT2020-GraalVM-Fiche | VT2020-GraalVM-Fiche]] dans le cadre du cours de veille technologique 2019.<br />
<br />
=Installation=<br />
<br />
Installer GraalVM et le paramétrer pour l'IDE Eclipse est nécessaire pour exécuter la démonstration.<br />
<br />
La procédure d'installation peut être trouvée dans la section [[VT2020-GraalVM-Fiche#Utilisation | VT2020-GraalVM-Fiche#Utilisation]] de la fiche de synthèse.<br />
<br />
=Démonstration=<br />
<br />
Les projets Eclipse ayant servi à la démonstration en classe sont disponibles [[https://github.com/AlexisROLLIN/VTS2020-GraalVM-Demo.git | ici]].<br />
<br />
Le projet <code>perf-testing</code></div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Demo&diff=48324VT2020-GraalVM-Demo2020-11-14T20:08:23Z<p>Alexis.Rollin: Created page with "Démonstration de GraalVM en lien avec la fiche de synthèse VT2020-GraalVM-Fiche dans le cadre du cours de veille technologique 2019. =Installatio..."</p>
<hr />
<div>Démonstration de GraalVM en lien avec la fiche de synthèse [[VT2020-GraalVM-Fiche | VT2020-GraalVM-Fiche]] dans le cadre du cours de veille technologique 2019.<br />
<br />
=Installation=<br />
<br />
La procédure d'installation peut être trouvée dans la</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Fiche&diff=48323VT2020-GraalVM-Fiche2020-11-14T20:06:08Z<p>Alexis.Rollin: </p>
<hr />
<div>=Rappels sur l'architecture de la plateforme Java=<br />
<br />
L'architecture de GraalVM se basant sur celle d'un Java Development Toolkit, un rappel sur le fonctionnement de la plateforme Java peut s'avérer utile.<br />
<br />
Tout d'abord, le Java a la particularité d'être un langage à la fois compilé et interprété. Les tâches de compilation et d'interprétation sont distinctes et réalisées par des composants différents.<br />
Comme on peut le voir sur le schéma ci-dessous, le code Java est d'abord compilé en bytecode par un Java Compiler pour ensuite être interprété et exécuté par une Java Virtual Machine.<br />
<br />
[[File:java_platform_architecture2.png|500px|Composition d'un JDK]]<br />
<br />
Il faut donc distinguer dans cette architecture :<br />
* La Java Virtual Machine (JVM), qui interprète et exécute le code.<br />
* Le Java Runtime Environment (JRE), qui est un environnement d'exécution contenant des librairies et la JVM.<br />
* Le Java Development Toolkit (JDK), qui est composé de librairies en Java, du JRE et du Java Compiler.<br />
<br />
=GraalVM=<br />
<br />
==Abstract==<br />
<br />
''"GraalVM is a high-performance multilingual runtime. It is designed to accelerate the execution of applications written in Java and other JVM languages while also providing runtimes for JavaScript, Ruby, Python, and a number of other popular languages. GraalVM’s polyglot capabilities make it possible to mix multiple programming languages in a single application while eliminating any foreign language call costs."''<br />
<br />
Documentation officielle de GraalVM<br />
<br />
==Origines==<br />
<br />
===Constats===<br />
<br />
Malgré son apparente popularité, le langage Java est sur le déclin. A l'origine, ce langage conçue par Sun Microsystems et dit "JVM" (comme Kotlin ou Scala) avait été conçu avec l'idée de pouvoir être exécuté sur n'importe quelle plateforme ayant une JVM, affranchissant ainsi le développeur des spécifités d'exécution de la plateforme (d'où le slogan ''"Write Once Run Anywere"''). Cependant, à cause la surcouche logicielle induite par la JVM, le langage Java a essuyé des critiques sur sa performance et sur sa verbosité.<br />
<br />
S'ajoute à cela un regain de popularité des langages natifs dans les années 2010, notamment grâce à Apple et son développement mobile iOS en Objective-C qui contraste avec Java ou Kotlin (étant tous deux des langages JVM) en terme de performance.<br />
<br />
Pour répondre à ces problématiques, l'entreprise Oracle se doit d'adapter constamment Java afin de rester compétitive, et sa JVM avec.<br />
<br />
===Ce qui existait déjà===<br />
<br />
Evidemment, Java fonctionnait bien avant l'arrivée de GraalVM, ce qui signifie qu'il existait donc déjà des machines virtuelles. La plus utilisée d'entre elles est HotSpot, écrites en C++. Elle a été créé par Sun et appartient aujourd'hui à Oracle depuis le rachat de Sun. Notez que toutes les JVM (ou autres composants de la plateforme Java), ne sont pas forcément propriété d'Oracle : par exemple, OpenJ9 est une JVM dont la propriété revient à IBM et à la fondation Eclipse. Ces composants doivent ceci dit respecter des spécifications dictées par Sun (https://docs.oracle.com/javase/specs/).<br />
<br />
La première version de Hotspot n'était qu'un interpréteur, puis elle a été améliorée avec un ajout de la compilation à la volée (Just-In-Time). Ensuite elle a été capable de détecter les portions de code les plus fréquemment utilisés et de les optimiser.<br />
<br />
Ceci dit, GraalVM trouve ses racines dans le projet Maxine (dévelopé par Sun Microsystems Laboratories en 2005), dont l'objectif était d'écrire une JVM en langage Java pour s'affranchir des problèmes de développement liés au C++, plus particulièrement la gestion de la mémoire. Le projet s'est avéré trop ambitieux à l'époque mais a servi de point de départ pour GraalVM presque 15 ans plus tard.<br />
<br />
===Solution===<br />
<br />
Les objectifs ayant mené à la création de GraalVM sont multiples :<br />
* Avoir un environnement qui accélère l'exécution des applications écrites en Java ou d'autres langages JVM afin de rivaliser avec les langages natifs<br />
* Fournir un environnement d'exécution qui supporte plusieurs langages de programmation, supprimant ainsi l'isolation entre eux et établissant une véritable inter-opérabilité.<br />
<br />
La solution développée est GraalVM, une machine virtuelle haute performance (d'après les dires d'Oracle) qui prend en fait la forme d'un JDK dont la partie VM a été grandement améliorée.<br />
<br />
==Fonctionnalités==<br />
<br />
Les principaux atouts de GraalVM sont:<br />
* Graal Compiler, un nouveau compilateur JIT (Just-In-Time) pour Java<br />
* GraalVM Native Image, permettant la compilation AOT (Ahead-Of-Time) pour les applications Java<br />
* Truffle Language Implementation framework et GraalVM SDK, fournissant des runtimes pour d'autres langages de programmation<br />
* LLVM Runtime et JavaScript Runtime<br />
<br />
On a en plus la possibilité d'installer des langages et même de définir le nôtre. Actuellement, tous les langages suivants sont compatibles avec Graal (moyennant installations supplémentaires) :<br />
[[File:Languages.png|600px|Listes des langages compatibles avec GraalVM]]<br />
<br />
==Architecture==<br />
<br />
[[File:graal_vm_architecture.jpg | 500px | thumb | right | Architecture de la JVM GraalVM]]<br />
<br />
GraalVM réutilise l'architecture d'OpenJDK (qui est sans grande surprise un JDK), mais avec quelques particularités au niveau de la JVM :<br />
* Il réutilise la VM Hotspot, mais de laquelle on a retiré le JIT Compiler. <br />
* Il bénéficie d'un nouveau compilateur JIT, Graal Compiler, écrit en Java et en dehors de Hotspot. Il a pour mission de transformer du bytecode en code machine (ne pas confondre avec le Java Compiler, plus haut niveau).<br />
* Pour permettre à la JVM Hotspot d'utiliser un compilateur écrit en Java, une couche intermédiaire est nécessaire : la JVM Compiler Interface.<br />
* Tout ce qui doit arriver au compilateur JIT doit être du bytecode. C'est pourquoi les langages non-JVM ne peuvent pas être directement pris en entrée de Graal Compiler. La couche Truffle framework répond à cette problématique. Truffle est un framework open-source qui sert à définir nos propres langages de programmation à travers un AST (Abstract Syntax Tree) et à construire des interpréteurs pour ce dernier. Il est réutilisé dans GraalVM pour définir des implémentations Truffle de Python, Ruby ou encore Javascript. Attention, l'implémentation d'un langage sous Truffle n'est pas le langage en lui-même, ce qui pose quelques problèmes comme on peut le voir dans la partie Limites.<br />
* La couche Truffle suffisait pour les langages interprétés puisque Truffle construit des interpréteurs. Mais pour les langages LLVM (Low Level Virtual Machine) comme le C, le C++ ou le Fortran, une surcouche est nécessaire. Sulong est une LLVM qui permet de produire du bitcode en s'appuyant sur les fonctionnalités de Truffle.<br />
<br />
==Utilisation==<br />
<br />
===Installation===<br />
<br />
GraalVM est très simple à installer.<br />
<br />
* Naviguez sur le git de GraalVM (https://github.com/graalvm/graalvm-ce-builds/releases) et téléchargez la version de GraalVM compatible avec notre version de Java/OpenJDK, que l'on peut connaître avec la commande :<br />
<pre>java -version</pre><br />
<br />
* Dézippez l'archive à l'endroit de votre choix.<br />
<pre>tar -xzf <graalvm-archive>.tar.gz</pre><br />
<br />
* Configurez votre variable d'environnement PATH:<br />
<pre>export PATH=<graalvm>/bin:$PATH</pre><br />
Si vous souhaitez remplacer votre JDK par GraalVM pour toutes vos applications utilisant Java, vous pouvez changer la variable d'environnement JAVA_HOME.<br />
<pre>export JAVA_HOME=<graalvm></pre><br />
Si vous ne souhaitez pas modifier votre JAVA_HOME, vous pouvez définir une variable d'environnement GRAAL_HOME qui vous sera utile pour ne pas avoir à réécrire le chemin complet de Graal.<br />
Notez également que vous pouvez rendre les commandes au-dessus permanentes en les ajoutant à votre fichier .bashrc ou .zshrc.<br />
<br />
===Exécution===<br />
<br />
Le dossier /bin est similaire à un JDK standard, mais contient des launchers additionnels (en plus de javac pour le Java):<br />
* js, un launcher JavaScript<br />
* node, un launcher Node.js<br />
* lli, un launcher LLVM<br />
En d'autres termes, GraalVM ne comprend que le Java, Node.js (grâce au Javascript Runtime) et les langages LLVM (grâce au LLVM Runtime). Cependant, d'autres launchers peuvent être installés avec la commande :<br />
<pre><br />
gu install <nom_du_langage><br />
</pre><br />
<br />
====Par ligne de commande====<br />
<br />
En règle générale, les commandes d'exécution sont de la forme :<br />
<pre><br />
<nom_du_laucher> <nom_du_programme><br />
</pre><br />
Par exemple :<br />
<pre><br />
node app.js<br />
</pre><br />
Les programmes LLVM doivent êtres compilés avant avec l'outil LLVM Toolchain car le launcher lli ne comprend que du bitcode :<br />
<pre><br />
gu install llvm-toolchain<br />
export LLVM_TOOLCHAIN=$(lli --print-toolchain-path)<br />
$LLVM_TOOLCHAIN/clang hello.c -o hello<br />
lli hello<br />
</pre><br />
====Dans un IDE====<br />
<br />
Dans l'IDE, il suffit de remplacer le path du JRE ou du JDK par le path de GraalVM.<br />
Sous eclipse par exemple, cela peut se faire en allant dans ''Window/Preferences/Java/Installed JREs''.<br />
<br />
[[File:installation_ide.png|500px|Spécification du JDK dans l'IDE]]<br />
<br />
====Mixage de langages====<br />
<br />
Au niveau du JDK, Graal propose tout un ensemble de librairies permettant l'inter-opérabilité entre les langages. Par exemple, il est possible depuis un programme Java d'importer la libraire org.graalvm.polyglot pour exécuter les fonctions d'un programme dans un autre langage et en récupérer le résultat.<br />
<br />
==Limites==<br />
<br />
Même si les promesses de GraalVM, à savoir l'amélioration des performances à l'exécution des langages JVM et le polyglottisme, sont respectées, l'outil d'Oracle rencontre quand même quelques limites :<br />
<br />
* On peut regretter que les langages les plus bas niveaux comme le C soient paradoxalement ceux qui traversent le plus de couches logicielles dans l'architecture de GraalVM. Leur interêt en termes de performance est donc extrêmement diminué puisqu'ils nécessitent de nombreuses opérations pour être transformé en bytecode, bytecode qui est logé à la même enseigne que le bytecode issu de code Java au yeux du compilateur.<br />
<br />
* En règle générale, les performances hors langages JVM sont tout de même loins d'être extraordinaires. L'inter-opérabilité entre langages est fonctionnelles mais coûteuse en ressources. A en croire la documentation, l'overhead est quand même évité, c'est à dire que les données sont échangées entre les différents langages sans être dupliquées.<br />
<br />
* Les langages compris par GraalVM étant en fait des implémentations Truffle de langages et pas les langages en eux-mêmes, il manque les librairies utiles à chaque langage. Il est donc impossible par exemple, d'utiliser ''matplolib'' dans un programme Python. Les programmes en sont plus ou moins réduit à de l'algorithmie selon les capacités natives du langage.<br />
<br />
=Demonstration=<br />
<br />
Une démonstration de GraalVM est accessible à ce lien : [[VT2020-GraalVM-Demo|VT2020-GraalVM-Demo]]<br />
<br />
=Sources=<br />
# <div id="GraalVM">[https://www.graalvm.org/docs/getting-started GraalVM Official documentation: '''Getting Started''']</div><br />
# <div id="GraalVM">[https://www.graalvm.org/docs/introduction GraalVM Official documentation: '''Introduction''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/GraalVM Wikipedia: '''GraalVM''']</div><br />
# <div id="GraalVM">[https://medium.com/@nelvadas/a-la-d%C3%A9couverte-de-graalvm-5adbe0487624 Elvadas Nono : '''A la découverte de GraalVM (2020)''']</div><br />
# <div id="GraalVM">[https://www.theserverside.com/definition/GraalVM ServerSide: '''Definition of GraalVM''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Wikipedia: '''Machine Virtuelle Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/HotSpot Wikipedia: '''Hotspot''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/Maxine_Virtual_Machine_Kit Wikipedia: '''Maxine''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Java_Development_Kit Wikipedia: '''Java Development Toolkit''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://dev.to/abdulfousan/graalvm-polyglot-virtual-machine-4mn2 Abdul Fousan: '''GraalVM Polyglot Virtual Machine''']</div><br />
# <div id="GraalVM">[https://blog.plan99.net/graal-truffle-134d8f28fb69 Mike Hearn: '''GraalVM and Truffle''']</div><br />
# <div id="GraalVM">[https://www.trufflesuite.com/docs/truffle/overview Truffle Official documentation: '''GraalVM and Truffle''']</div><br />
<br />
=Veille Technologique 2020=<br />
* Année : [[VT2020|VT2021]]<br />
* Sujet : GraalVM<br />
* Slides : [[Media:GraalVM.pdf|Slides]]<br />
* Auteurs : [[User:Alexis.Rollin]]</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020&diff=48322VT20202020-11-14T19:56:37Z<p>Alexis.Rollin: /* Séance 1 : 16/11 */</p>
<hr />
<div>[[VT2019|<< Etudes 2019]] [[VT|Sommaire]] [[VT2021|Etudes 2021 >>]]<br />
<br />
<br />
=Veille Technologique et Stratégique=<br />
* Enseignants: [[User:Gpbonneau|Georges-Pierre Bonneau]], [[User:Donsez|Didier Donsez]]<br />
* UE/Module: EAM (HPRJ9R6B) et EAR (HPRJ9R4B) en 1FO5<br />
<br />
L'objectif de cette UE est de réaliser un travail de synthèse et d’évaluation sur une technologie / spécification / tendance<br />
<br />
Dans votre futur vie d'ingénieur, vous aurez à d'une part, vous former par vous-même sur une technologie émergente et d'autre part à réaliser une veille technologique (et stratégique) par rapport à votre entreprise et projet.<br />
Il s'agira de réaliser<br />
* le positionnement par rapport au marché<br />
* d'être critique<br />
<br />
Votre synthèse fait l'objet d'une présentation orale convaincante devant un auditoire (dans le futur, vos collègues, vos chefs ou vos clients) avec des transparents et un discours répété.<br />
Pour finir de convaincre (Saint Thomas), vous ferez la présentation d'une démonstration.<br />
<br />
Votre présentation sera notée et commentée par tous vos camarades via un sondage (téléphone mobile). Leurs notes et leurs commentaires seront notés en fonction de leur exactitude de jugement.<br />
<br />
Remarque: Le [https://fr.wikipedia.org/wiki/Plagiat plagiat] est incompatible avec l'éthique de l'ingénieur. Le directeur d'école peut demander votre traduction devant la commission disciplinaire de l'université. La sanction peut aller jusqu’à une interdiction d'inscription dans les établissements de l'enseignement supérieur français pendant plusieurs années : Le jeu en vaut-il la chandelle ?<br />
<br />
La présentation peut être réalisée avec [[reveal.js]] ou avec [[remarkjs]]<br />
<br />
[[File:presentation-VT-RICM5-1516.pdf|transparents d'introduction à l'UE]]<br />
<br />
=Planning=<br />
<br />
== Séance 1 : 16/11 ==<br />
Enseignants : [[User:Gpbonneau|Georges-Pierre Bonneau]], [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : 5, 8, 23, 78<br />
<br />
* 16H00 : Alexis ROLLIN, GraalVM, [[VT2020-GraalVM-Fiche|Fiche]], [[File:VT2020-GraalVM-Presentation.pdf|Présentation]], [[VT2020-GraalVM-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, Micronaut, [[VT2020-Micronaut-Fiche|Fiche]], [[File:VT2020-Micronaut-Presentation.pdf|Présentation]], [[VT2020-Micronaut-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, JSONnet, [[VT2020-JSONnet-Fiche|Fiche]], [[File:VT2020-JSONnet-Presentation.pdf|Présentation]], [[VT2020-JSONnet-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, Cryptojacking, [[VT2020-Cryptojacking-Fiche|Fiche]], [[File:VT2020-Cryptojacking-Presentation.pdf|Présentation]], [[VT2020-Cryptojacking-Demo|Démonstration]]<br />
<br />
== Séance 2 : 23/11 ==<br />
Enseignants : [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : 9, 33, 49, 72, 81<br />
<br />
* 16H00 : Prénom NOM, Ballerina, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, Microclimate, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, Voice-First Development, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, Valgrind, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H40 : Prénom NOM, HTTP/3, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
<br />
== Séance 3 : 30/11 ==<br />
Enseignants : [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : 2, 3, 10, 11, 38<br />
<br />
* 16H00 : Prénom NOM, Blazor, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, Website Rendering Types, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, Quarkus, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, Helidon, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H40 : Prénom NOM, WebAssembly, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
<br />
== Séance 4 : 7/12 ==<br />
Enseignants : [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : 4, 15, 16, 19, 21<br />
<br />
* 16H00 : Prénom NOM, MemSQL, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, QuestDB, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, Apache Arrow, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, Apache Pulsar, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H40 : Prénom NOM, Apache Pinot, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
<br />
== Séance 5 : 14/12 ==<br />
Enseignants : [[User:Gpbonneau|Georges-Pierre Bonneau]], [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : 22, 48, 55, 56, 84<br />
<br />
* 16H00 : Prénom NOM, IoT Dataflow Mashup, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, Low-Power Global Area Networks (Sat-IoT), [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, Apollo 2.0, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, Flogo, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H40 : Prénom NOM, Amazon Sidewalk, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
<br />
== Séance 6 : 4/1 ==<br />
Enseignants : [[User:Gpbonneau|Georges-Pierre Bonneau]], [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : 6, 7, 20, 50, 83<br />
<br />
* 16H00 : Prénom NOM, OpenAI GPT-3, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, OpenAI Microscope, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, Deepfake Algorithms, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, Psychométrie, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H40 : Prénom NOM, Godot, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
<br />
== Séance 7 : 11/1 ==<br />
Enseignants : [[User:Gpbonneau|Georges-Pierre Bonneau]], [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : 1, 32, 41, 60, XXXX<br />
<br />
* 16H00 : Prénom NOM, Matrix, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, Peloton, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, DevSecOps, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, BFT, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H40 : Prénom NOM, XXXXXX, [[VT2020-XXXXXX-Fiche|Fiche]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
<br />
== Séance 8 : Asynchrone ==<br />
Enseignants : [[User:Gpbonneau|Georges-Pierre Bonneau]], [[User:Donsez|Didier Donsez]]<br />
<br />
* Sujets : TBC<br />
<br />
* 16H00 : Prénom NOM, XXXXXX, [[VT2020-XXXXXX-Fiche|Fiche]], [[https://screencast|Présentation filmée]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H25 : Prénom NOM, XXXXXX, [[VT2020-XXXXXX-Fiche|Fiche]], [[https://screencast|Présentation filmée]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 16H50 : Prénom NOM, XXXXXX, [[VT2020-XXXXXX-Fiche|Fiche]], [[https://screencast|Présentation filmée]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H15 : Prénom NOM, XXXXXX, [[VT2020-XXXXXX-Fiche|Fiche]], [[https://screencast|Présentation filmée]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
* 17H40 : Prénom NOM, XXXXXX, [[VT2020-XXXXXX-Fiche|Fiche]], [[https://screencast|Présentation filmée]], [[File:VT2020-XXXXXX-Presentation.pdf|Présentation]], [[VT2020-XXXXXX-Demo|Démonstration]]<br />
<br />
=Sujets=<br />
# [[Matrix]] : An open network for secure, decentralized communication<br />
# [[Blazor]] (Browser+Razor) : a new web development framework introduced by Microsoft, which allows you to develop browser-based applications using C# and Razor syntax alongside HTML and CSS.<br />
# [[Website Rendering Types]] (Static, Dynamic, Incremetal) : démonstration de [https://nextjs.org/ NextJS]<br />
# [[MemSQL]]<br />
# [[Micronaut]] : Microservice platform ([https://dzone.com/articles/how-to-use-jhipster-to-build-a-secure-micronaut-an démo] avec [https://github.com/jhipster/generator-jhipster-micronaut Micronaut blueprint of JHipster])<br />
# [[OpenAI GPT-3]]<br />
# [[OpenAI Microscope]]<br />
# [[GraalVM]] : Polyglot Virtual Machine<br />
# [[Ballerina]] : open source programming language and platform for cloud-era application programmers to easily write software that just works<br />
# [[Quarkus]] : Supersonic Subatomic Java<br />
# [[Helidon]] : collection of Java libraries for writing microservices.<br />
# [[Flux]] (#fluxlang) new data scripting language to make querying and analyzing time series<br />
# [[Processeurs spécialisés pour l'IA]] : Démonstration avec la carte [https://greenwaves-technologies.com/product/gappoc-a-computer-vision-concept-board/ GAPPoc-A] de GreenWaves. ANNULé<br />
# [[NATS]]: PubSub broker (démonstration avec CampusIoT)<br />
# [[QuestDB]] : time-series database (démostration avec CampusIoT).<br />
# [[Apache Arrow]] : cross-language development platform for in-memory data<br />
# In-memory Distributed Data Grid : démonstration de eCom avec [[Apache Ignite]].<br />
# [[jQAssistant]] : application à eCOM<br />
# [[Apache Pulsar]] Pulsar is a multi-tenant, high-performance solution for server-to-server messaging. Pulsar was originally developed by Yahoo.<br />
# [[Godot Game Engine]]<br />
# [[Apache Pinot]] : realtime distributed OLAP datastore<br />
# [[IoT Dataflow Mashup]] (démo avec [[Eclipse Kura Wires]])<br />
# [[JSONnet]]<br />
# [[Géo-réplication]] : Démo avec [[Apache Kafka MirrorMaker]]<br />
# [[Pulsar]]<br />
# [[Wookey project]] (Demo on a STM32F407 Discovery board) ANNULé<br />
# [[RSocket]]<br />
# [[Nacos]] : open source project by Alibaba for service discovery and service configuration.<br />
# [[NEMU]] : open source hypervisor specifically built and designed to run modern cloud workloads on modern 64-bit Intel and ARM CPUs.<br />
# [[Architecture Serverless]] : démonstration avec le projet https://github.com/serverless/serverless sur votre compte Azure de votre compte GitHub Student Pack ANNULé<br />
# [[Fission]] : open-source serverless function framework for [[Kubernetes]] with a focus on developer productivity and high performance.<br />
# [[Peloton]], a unified resource scheduler<br />
# [[Microclimate]]<br />
# [[AdTech]]<br />
# [[Nearby communications]] (démonstration de [https://ionicframework.com/docs/native/google-nearby/ Nearby Messages API de Google avec Ionic]) --> Réservé Manon Chaix<br />
# [[Conflict-free replicated data type]] (CRDT) RECOMMANDé<br />
# [[Spinnaker]]<br />
# [[WebAssembly]]<br />
# [[Fast Identity Online Alliance]] (FIDO) ANNULé<br />
# [[Apache MXNet]] : Demo avec [[Intel Movidius]] ([https://github.com/tspannhw/rpi-mxnet-movidius-minifi lien]) ANNULé<br />
# [[DevSecOps]] <br />
# [[Apache Beam]] RECOMMANDé<br />
# [[In-Memory Data Grids]] : Démonstration de [[Gigaspaces]] et [[XAP]] Open Source<br />
# Gestionnaires de contenu : démonstration de [[Apache Jackrabbit]] dans le projet [[eCOM]]<br />
# [[Memory-centric virtual distributed storage system]]<br />
# [[ESB]] : démonstration de [[Mule ESB]]<br />
# [[MemCached]]<br />
# [[Low-Power Global Area Network]]s ([[Sat-IoT]])<br />
# [[ Voice-First Development]] : Designing, Developing, and Deploying Conversational Interfaces<br />
# [[Psychométrie]]<br />
# [[WebAssembly]]<br />
# [[DevSecOps]]<br />
# Portails et l'API [[Portlet]] : Démo avec [[Liferay]] ANNULé<br />
# [[Apache Beam]]<br />
# [[plateforme logicielle open source de conduite autonome Apollo 2.0]]<br />
# [[Flogo]] Open Source Framework for IoT Edge Apps & Integration.<br />
# [[Neural Processing Unit]] (NPU) : Demo de la clé [[Intel Movidius]] sur un RPI<br />
# [[Hazelcast]] : Démo avec Spring Boot ([https://dzone.com/storage/assets/6459742-dzone-rc247-gettingstartedwithspringbootandmicrose.pdf lien]) dans un projet [[JHipster]]<br />
# [[In-Memory Data Grids]] : Démonstration de [[Gigaspaces]] et [[XAP]] Open Source<br />
# [[Fautes Byzantines]] : Démonstration de [[BFT-SMaRt]]<br />
# Insport Video<br />
# Gestionnaires de contenu : démonstration de [[Apache Jackrabbit]] dans le projet [[eCOM]]<br />
# [[Memory-centric virtual distributed storage system]]<br />
# [[Performance Monitoring]]<br />
# [[ESB]] : démonstration de [[Mule ESB]] ANNULé<br />
# [[Access Network Query Protocol (ANQP)]]<br />
# [[JCache]] : démonstration avec [[Apache Ignity]]<br />
# [[MemCached]]<br />
# [[Apache Stratos]]<br />
# [[gceasy]] : Universal garbage collection log Analyser<br />
# [[Apache Solr]] : Démonstration avec [http://hortonworks.com/hadoop-tutorial/indexing-and-searching-text-within-images-with-apache-solr/ Tesseract OCR]<br />
# [[Valgrind]]<br />
# [[Content Delivery Network]]s : Démonstration de [[Amazon S3]], Azure, Akamaï ... sur votre projet [[ECOM-RICM|eCOM]]<br />
# [[CMS]] : Demo avec [[Crafter CMS]]<br />
# [[DMS]] (GED) : Demo avec la version Community Edition d'[[Alfresco]] et de son API REST avec [[Swagger]] ANNULé<br />
# [[SIG]] : Démonstration de [[QGIS]]<br />
# [[Apache Airflow]] ANNULé<br />
# [[Cryptojacking]] : démonstration d'un navigateur exécutant [https://github.com/cazala/coin-hive CoinHive] et affichage du coup énergétique de l'opération.<br />
# [[RIOT-OS]] : système d'exploitation pour l'Internet des Objets (Démonstration sur une carte STM32 Nucleo LRWAN1). ANNULé<br />
# [[Zephyr]] : système d'exploitation pour l'Internet des Objets (Démonstration sur une carte [[Intel Quark D2000]]). ANNULé<br />
# [[HTTP/3]] : quoi de neuf ? Démonstration de l'amélioration des performances.<br />
# [[Gyro]] : domain-specific language designed to concisely describe a cloud infrastructure. Démonstration avec votre application eCOM JHipster sur Azure.<br />
# [[Deepfake Algorithms]] et outils.<br />
# [[Amazon Sidewalk]]<br />
# Interfaces Homme-Machine sans contact (sous réserve de démonstrateur)<br />
# Interfaces Homme-Machine haptiques (sous réserve de démonstrateur)</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=File:VT2020-GraalVM-Presentation.pdf&diff=48321File:VT2020-GraalVM-Presentation.pdf2020-11-14T19:55:26Z<p>Alexis.Rollin: </p>
<hr />
<div></div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Fiche&diff=48320VT2020-GraalVM-Fiche2020-11-14T17:38:06Z<p>Alexis.Rollin: /* Mixage de langage= */</p>
<hr />
<div>=Rappels sur l'architecture de la plateforme Java=<br />
<br />
L'architecture de GraalVM se basant sur celle d'un Java Development Toolkit, un rappel sur le fonctionnement de la plateforme Java peut s'avérer utile.<br />
<br />
Tout d'abord, le Java a la particularité d'être un langage à la fois compilé et interprété. Les tâches de compilation et d'interprétation sont distinctes et réalisées par des composants différents.<br />
Comme on peut le voir sur le schéma ci-dessous, le code Java est d'abord compilé en bytecode par un Java Compiler pour ensuite être interprété et exécuté par une Java Virtual Machine.<br />
<br />
[[File:java_platform_architecture2.png|500px|Composition d'un JDK]]<br />
<br />
Il faut donc distinguer dans cette architecture :<br />
* La Java Virtual Machine (JVM), qui interprète et exécute le code.<br />
* Le Java Runtime Environment (JRE), qui est un environnement d'exécution contenant des librairies et la JVM.<br />
* Le Java Development Toolkit (JDK), qui est composé de librairies en Java, du JRE et du Java Compiler.<br />
<br />
=GraalVM=<br />
<br />
==Abstract==<br />
<br />
''"GraalVM is a high-performance multilingual runtime. It is designed to accelerate the execution of applications written in Java and other JVM languages while also providing runtimes for JavaScript, Ruby, Python, and a number of other popular languages. GraalVM’s polyglot capabilities make it possible to mix multiple programming languages in a single application while eliminating any foreign language call costs."''<br />
<br />
Documentation officielle de GraalVM<br />
<br />
==Origines==<br />
<br />
===Constats===<br />
<br />
Malgré son apparente popularité, le langage Java est sur le déclin. A l'origine, ce langage conçue par Sun Microsystems et dit "JVM" (comme Kotlin ou Scala) avait été conçu avec l'idée de pouvoir être exécuté sur n'importe quelle plateforme ayant une JVM, affranchissant ainsi le développeur des spécifités d'exécution de la plateforme (d'où le slogan ''"Write Once Run Anywere"''). Cependant, à cause la surcouche logicielle induite par la JVM, le langage Java a essuyé des critiques sur sa performance et sur sa verbosité.<br />
<br />
S'ajoute à cela un regain de popularité des langages natifs dans les années 2010, notamment grâce à Apple et son développement mobile iOS en Objective-C qui contraste avec Java ou Kotlin (étant tous deux des langages JVM) en terme de performance.<br />
<br />
Pour répondre à ces problématiques, l'entreprise Oracle se doit d'adapter constamment Java afin de rester compétitive, et sa JVM avec.<br />
<br />
===Ce qui existait déjà===<br />
<br />
Evidemment, Java fonctionnait bien avant l'arrivée de GraalVM, ce qui signifie qu'il existait donc déjà des machines virtuelles. La plus utilisée d'entre elles est HotSpot, écrites en C++. Elle a été créé par Sun et appartient aujourd'hui à Oracle depuis le rachat de Sun. Notez que toutes les JVM (ou autres composants de la plateforme Java), ne sont pas forcément propriété d'Oracle : par exemple, OpenJ9 est une JVM dont la propriété revient à IBM et à la fondation Eclipse. Ces composants doivent ceci dit respecter des spécifications dictées par Sun (https://docs.oracle.com/javase/specs/).<br />
<br />
La première version de Hotspot n'était qu'un interpréteur, puis elle a été améliorée avec un ajout de la compilation à la volée (Just-In-Time). Ensuite elle a été capable de détecter les portions de code les plus fréquemment utilisés et de les optimiser.<br />
<br />
Ceci dit, GraalVM trouve ses racines dans le projet Maxine (dévelopé par Sun Microsystems Laboratories en 2005), dont l'objectif était d'écrire une JVM en langage Java pour s'affranchir des problèmes de développement liés au C++, plus particulièrement la gestion de la mémoire. Le projet s'est avéré trop ambitieux à l'époque mais a servi de point de départ pour GraalVM presque 15 ans plus tard.<br />
<br />
===Solution===<br />
<br />
Les objectifs ayant mené à la création de GraalVM sont multiples :<br />
* Avoir un environnement qui accélère l'exécution des applications écrites en Java ou d'autres langages JVM afin de rivaliser avec les langages natifs<br />
* Fournir un environnement d'exécution qui supporte plusieurs langages de programmation, supprimant ainsi l'isolation entre eux et établissant une véritable inter-opérabilité.<br />
<br />
La solution développée est GraalVM, une machine virtuelle haute performance (d'après les dires d'Oracle) qui prend en fait la forme d'un JDK dont la partie VM a été grandement améliorée.<br />
<br />
==Fonctionnalités==<br />
<br />
Les principaux atouts de GraalVM sont:<br />
* Graal Compiler, un nouveau compilateur JIT (Just-In-Time) pour Java<br />
* GraalVM Native Image, permettant la compilation AOT (Ahead-Of-Time) pour les applications Java<br />
* Truffle Language Implementation framework et GraalVM SDK, fournissant des runtimes pour d'autres langages de programmation<br />
* LLVM Runtime et JavaScript Runtime<br />
<br />
On a en plus la possibilité d'installer des langages et même de définir le nôtre. Actuellement, tous les langages suivants sont compatibles avec Graal (moyennant installations supplémentaires) :<br />
[[File:Languages.png|600px|Listes des langages compatibles avec GraalVM]]<br />
<br />
==Architecture==<br />
<br />
[[File:graal_vm_architecture.jpg | 500px | thumb | right | Architecture de la JVM GraalVM]]<br />
<br />
GraalVM réutilise l'architecture d'OpenJDK (qui est sans grande surprise un JDK), mais avec quelques particularités au niveau de la JVM :<br />
* Il réutilise la VM Hotspot, mais de laquelle on a retiré le JIT Compiler. <br />
* Il bénéficie d'un nouveau compilateur JIT, Graal Compiler, écrit en Java et en dehors de Hotspot. Il a pour mission de transformer du bytecode en code machine (ne pas confondre avec le Java Compiler, plus haut niveau).<br />
* Pour permettre à la JVM Hotspot d'utiliser un compilateur écrit en Java, une couche intermédiaire est nécessaire : la JVM Compiler Interface.<br />
* Tout ce qui doit arriver au compilateur JIT doit être du bytecode. C'est pourquoi les langages non-JVM ne peuvent pas être directement pris en entrée de Graal Compiler. La couche Truffle framework répond à cette problématique. Truffle est un framework open-source qui sert à définir nos propres langages de programmation à travers un AST (Abstract Syntax Tree) et à construire des interpréteurs pour ce dernier. Il est réutilisé dans GraalVM pour définir des implémentations Truffle de Python, Ruby ou encore Javascript. Attention, l'implémentation d'un langage sous Truffle n'est pas le langage en lui-même, ce qui pose quelques problèmes comme on peut le voir dans la partie Limites.<br />
* La couche Truffle suffisait pour les langages interprétés puisque Truffle construit des interpréteurs. Mais pour les langages LLVM (Low Level Virtual Machine) comme le C, le C++ ou le Fortran, une surcouche est nécessaire. Sulong est une LLVM qui permet de produire du bitcode en s'appuyant sur les fonctionnalités de Truffle.<br />
<br />
==Utilisation==<br />
<br />
===Installation===<br />
<br />
GraalVM est très simple à installer.<br />
<br />
* Naviguez sur le git de GraalVM (https://github.com/graalvm/graalvm-ce-builds/releases) et téléchargez la version de GraalVM compatible avec notre version de Java/OpenJDK, que l'on peut connaître avec la commande :<br />
<pre>java -version</pre><br />
<br />
* Dézippez l'archive à l'endroit de votre choix.<br />
<pre>tar -xzf <graalvm-archive>.tar.gz</pre><br />
<br />
* Configurez votre variable d'environnement PATH:<br />
<pre>export PATH=<graalvm>/bin:$PATH</pre><br />
Si vous souhaitez remplacer votre JDK par GraalVM pour toutes vos applications utilisant Java, vous pouvez changer la variable d'environnement JAVA_HOME.<br />
<pre>export JAVA_HOME=<graalvm></pre><br />
Si vous ne souhaitez pas modifier votre JAVA_HOME, vous pouvez définir une variable d'environnement GRAAL_HOME qui vous sera utile pour ne pas avoir à réécrire le chemin complet de Graal.<br />
Notez également que vous pouvez rendre les commandes au-dessus permanentes en les ajoutant à votre fichier .bashrc ou .zshrc.<br />
<br />
===Exécution===<br />
<br />
Le dossier /bin est similaire à un JDK standard, mais contient des launchers additionnels (en plus de javac pour le Java):<br />
* js, un launcher JavaScript<br />
* node, un launcher Node.js<br />
* lli, un launcher LLVM<br />
En d'autres termes, GraalVM ne comprend que le Java, Node.js (grâce au Javascript Runtime) et les langages LLVM (grâce au LLVM Runtime). Cependant, d'autres launchers peuvent être installés avec la commande :<br />
<pre><br />
gu install <nom_du_langage><br />
</pre><br />
<br />
====Par ligne de commande====<br />
<br />
En règle générale, les commandes d'exécution sont de la forme :<br />
<pre><br />
<nom_du_laucher> <nom_du_programme><br />
</pre><br />
Par exemple :<br />
<pre><br />
node app.js<br />
</pre><br />
Les programmes LLVM doivent êtres compilés avant avec l'outil LLVM Toolchain car le launcher lli ne comprend que du bitcode :<br />
<pre><br />
gu install llvm-toolchain<br />
export LLVM_TOOLCHAIN=$(lli --print-toolchain-path)<br />
$LLVM_TOOLCHAIN/clang hello.c -o hello<br />
lli hello<br />
</pre><br />
====Dans un IDE====<br />
<br />
Dans l'IDE, il suffit de remplacer le path du JRE ou du JDK par le path de GraalVM.<br />
Sous eclipse par exemple, cela peut se faire en allant dans ''Window/Preferences/Java/Installed JREs''.<br />
<br />
[[File:installation_ide.png|500px|Spécification du JDK dans l'IDE]]<br />
<br />
====Mixage de langages====<br />
<br />
Au niveau du JDK, Graal propose tout un ensemble de librairies permettant l'inter-opérabilité entre les langages. Par exemple, il est possible depuis un programme Java d'importer la libraire org.graalvm.polyglot pour exécuter les fonctions d'un programme dans un autre langage et en récupérer le résultat.<br />
<br />
==Limites==<br />
<br />
Même si les promesses de GraalVM, à savoir l'amélioration des performances à l'exécution des langages JVM et le polyglottisme, sont respectées, l'outil d'Oracle rencontre quand même quelques limites :<br />
<br />
* On peut regretter que les langages les plus bas niveaux comme le C soient paradoxalement ceux qui traversent le plus de couches logicielles dans l'architecture de GraalVM. Leur interêt en termes de performance est donc extrêmement diminué puisqu'ils nécessitent de nombreuses opérations pour être transformé en bytecode, bytecode qui est logé à la même enseigne que le bytecode issu de code Java au yeux du compilateur.<br />
<br />
* En règle générale, les performances hors langages JVM sont tout de même loins d'être extraordinaires. L'inter-opérabilité entre langages est fonctionnelles mais coûteuse en ressources. A en croire la documentation, l'overhead est quand même évité, c'est à dire que les données sont échangées entre les différents langages sans être dupliquées.<br />
<br />
* Les langages compris par GraalVM étant en fait des implémentations Truffle de langages et pas les langages en eux-mêmes, il manque les librairies utiles à chaque langage. Il est donc impossible par exemple, d'utiliser ''matplolib'' dans un programme Python. Les programmes en sont plus ou moins réduit à de l'algorithmie selon les capacités natives du langage.<br />
<br />
=Demonstration=<br />
<br />
=Sources=<br />
# <div id="GraalVM">[https://www.graalvm.org/docs/getting-started GraalVM Official documentation: '''Getting Started''']</div><br />
# <div id="GraalVM">[https://www.graalvm.org/docs/introduction GraalVM Official documentation: '''Introduction''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/GraalVM Wikipedia: '''GraalVM''']</div><br />
# <div id="GraalVM">[https://medium.com/@nelvadas/a-la-d%C3%A9couverte-de-graalvm-5adbe0487624 Elvadas Nono : '''A la découverte de GraalVM (2020)''']</div><br />
# <div id="GraalVM">[https://www.theserverside.com/definition/GraalVM ServerSide: '''Definition of GraalVM''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Wikipedia: '''Machine Virtuelle Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/HotSpot Wikipedia: '''Hotspot''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/Maxine_Virtual_Machine_Kit Wikipedia: '''Maxine''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Java_Development_Kit Wikipedia: '''Java Development Toolkit''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://dev.to/abdulfousan/graalvm-polyglot-virtual-machine-4mn2 Abdul Fousan: '''GraalVM Polyglot Virtual Machine''']</div><br />
# <div id="GraalVM">[https://blog.plan99.net/graal-truffle-134d8f28fb69 Mike Hearn: '''GraalVM and Truffle''']</div><br />
# <div id="GraalVM">[https://www.trufflesuite.com/docs/truffle/overview Truffle Official documentation: '''GraalVM and Truffle''']</div><br />
<br />
=Veille Technologique 2020=<br />
* Année : [[VT2020|VT2021]]<br />
* Sujet : GraalVM<br />
* Slides : [[Media:GraalVM.pdf|Slides]]<br />
* Auteurs : [[User:Alexis.Rollin]]</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Fiche&diff=48319VT2020-GraalVM-Fiche2020-11-14T17:37:51Z<p>Alexis.Rollin: /* Utilisation */</p>
<hr />
<div>=Rappels sur l'architecture de la plateforme Java=<br />
<br />
L'architecture de GraalVM se basant sur celle d'un Java Development Toolkit, un rappel sur le fonctionnement de la plateforme Java peut s'avérer utile.<br />
<br />
Tout d'abord, le Java a la particularité d'être un langage à la fois compilé et interprété. Les tâches de compilation et d'interprétation sont distinctes et réalisées par des composants différents.<br />
Comme on peut le voir sur le schéma ci-dessous, le code Java est d'abord compilé en bytecode par un Java Compiler pour ensuite être interprété et exécuté par une Java Virtual Machine.<br />
<br />
[[File:java_platform_architecture2.png|500px|Composition d'un JDK]]<br />
<br />
Il faut donc distinguer dans cette architecture :<br />
* La Java Virtual Machine (JVM), qui interprète et exécute le code.<br />
* Le Java Runtime Environment (JRE), qui est un environnement d'exécution contenant des librairies et la JVM.<br />
* Le Java Development Toolkit (JDK), qui est composé de librairies en Java, du JRE et du Java Compiler.<br />
<br />
=GraalVM=<br />
<br />
==Abstract==<br />
<br />
''"GraalVM is a high-performance multilingual runtime. It is designed to accelerate the execution of applications written in Java and other JVM languages while also providing runtimes for JavaScript, Ruby, Python, and a number of other popular languages. GraalVM’s polyglot capabilities make it possible to mix multiple programming languages in a single application while eliminating any foreign language call costs."''<br />
<br />
Documentation officielle de GraalVM<br />
<br />
==Origines==<br />
<br />
===Constats===<br />
<br />
Malgré son apparente popularité, le langage Java est sur le déclin. A l'origine, ce langage conçue par Sun Microsystems et dit "JVM" (comme Kotlin ou Scala) avait été conçu avec l'idée de pouvoir être exécuté sur n'importe quelle plateforme ayant une JVM, affranchissant ainsi le développeur des spécifités d'exécution de la plateforme (d'où le slogan ''"Write Once Run Anywere"''). Cependant, à cause la surcouche logicielle induite par la JVM, le langage Java a essuyé des critiques sur sa performance et sur sa verbosité.<br />
<br />
S'ajoute à cela un regain de popularité des langages natifs dans les années 2010, notamment grâce à Apple et son développement mobile iOS en Objective-C qui contraste avec Java ou Kotlin (étant tous deux des langages JVM) en terme de performance.<br />
<br />
Pour répondre à ces problématiques, l'entreprise Oracle se doit d'adapter constamment Java afin de rester compétitive, et sa JVM avec.<br />
<br />
===Ce qui existait déjà===<br />
<br />
Evidemment, Java fonctionnait bien avant l'arrivée de GraalVM, ce qui signifie qu'il existait donc déjà des machines virtuelles. La plus utilisée d'entre elles est HotSpot, écrites en C++. Elle a été créé par Sun et appartient aujourd'hui à Oracle depuis le rachat de Sun. Notez que toutes les JVM (ou autres composants de la plateforme Java), ne sont pas forcément propriété d'Oracle : par exemple, OpenJ9 est une JVM dont la propriété revient à IBM et à la fondation Eclipse. Ces composants doivent ceci dit respecter des spécifications dictées par Sun (https://docs.oracle.com/javase/specs/).<br />
<br />
La première version de Hotspot n'était qu'un interpréteur, puis elle a été améliorée avec un ajout de la compilation à la volée (Just-In-Time). Ensuite elle a été capable de détecter les portions de code les plus fréquemment utilisés et de les optimiser.<br />
<br />
Ceci dit, GraalVM trouve ses racines dans le projet Maxine (dévelopé par Sun Microsystems Laboratories en 2005), dont l'objectif était d'écrire une JVM en langage Java pour s'affranchir des problèmes de développement liés au C++, plus particulièrement la gestion de la mémoire. Le projet s'est avéré trop ambitieux à l'époque mais a servi de point de départ pour GraalVM presque 15 ans plus tard.<br />
<br />
===Solution===<br />
<br />
Les objectifs ayant mené à la création de GraalVM sont multiples :<br />
* Avoir un environnement qui accélère l'exécution des applications écrites en Java ou d'autres langages JVM afin de rivaliser avec les langages natifs<br />
* Fournir un environnement d'exécution qui supporte plusieurs langages de programmation, supprimant ainsi l'isolation entre eux et établissant une véritable inter-opérabilité.<br />
<br />
La solution développée est GraalVM, une machine virtuelle haute performance (d'après les dires d'Oracle) qui prend en fait la forme d'un JDK dont la partie VM a été grandement améliorée.<br />
<br />
==Fonctionnalités==<br />
<br />
Les principaux atouts de GraalVM sont:<br />
* Graal Compiler, un nouveau compilateur JIT (Just-In-Time) pour Java<br />
* GraalVM Native Image, permettant la compilation AOT (Ahead-Of-Time) pour les applications Java<br />
* Truffle Language Implementation framework et GraalVM SDK, fournissant des runtimes pour d'autres langages de programmation<br />
* LLVM Runtime et JavaScript Runtime<br />
<br />
On a en plus la possibilité d'installer des langages et même de définir le nôtre. Actuellement, tous les langages suivants sont compatibles avec Graal (moyennant installations supplémentaires) :<br />
[[File:Languages.png|600px|Listes des langages compatibles avec GraalVM]]<br />
<br />
==Architecture==<br />
<br />
[[File:graal_vm_architecture.jpg | 500px | thumb | right | Architecture de la JVM GraalVM]]<br />
<br />
GraalVM réutilise l'architecture d'OpenJDK (qui est sans grande surprise un JDK), mais avec quelques particularités au niveau de la JVM :<br />
* Il réutilise la VM Hotspot, mais de laquelle on a retiré le JIT Compiler. <br />
* Il bénéficie d'un nouveau compilateur JIT, Graal Compiler, écrit en Java et en dehors de Hotspot. Il a pour mission de transformer du bytecode en code machine (ne pas confondre avec le Java Compiler, plus haut niveau).<br />
* Pour permettre à la JVM Hotspot d'utiliser un compilateur écrit en Java, une couche intermédiaire est nécessaire : la JVM Compiler Interface.<br />
* Tout ce qui doit arriver au compilateur JIT doit être du bytecode. C'est pourquoi les langages non-JVM ne peuvent pas être directement pris en entrée de Graal Compiler. La couche Truffle framework répond à cette problématique. Truffle est un framework open-source qui sert à définir nos propres langages de programmation à travers un AST (Abstract Syntax Tree) et à construire des interpréteurs pour ce dernier. Il est réutilisé dans GraalVM pour définir des implémentations Truffle de Python, Ruby ou encore Javascript. Attention, l'implémentation d'un langage sous Truffle n'est pas le langage en lui-même, ce qui pose quelques problèmes comme on peut le voir dans la partie Limites.<br />
* La couche Truffle suffisait pour les langages interprétés puisque Truffle construit des interpréteurs. Mais pour les langages LLVM (Low Level Virtual Machine) comme le C, le C++ ou le Fortran, une surcouche est nécessaire. Sulong est une LLVM qui permet de produire du bitcode en s'appuyant sur les fonctionnalités de Truffle.<br />
<br />
==Utilisation==<br />
<br />
===Installation===<br />
<br />
GraalVM est très simple à installer.<br />
<br />
* Naviguez sur le git de GraalVM (https://github.com/graalvm/graalvm-ce-builds/releases) et téléchargez la version de GraalVM compatible avec notre version de Java/OpenJDK, que l'on peut connaître avec la commande :<br />
<pre>java -version</pre><br />
<br />
* Dézippez l'archive à l'endroit de votre choix.<br />
<pre>tar -xzf <graalvm-archive>.tar.gz</pre><br />
<br />
* Configurez votre variable d'environnement PATH:<br />
<pre>export PATH=<graalvm>/bin:$PATH</pre><br />
Si vous souhaitez remplacer votre JDK par GraalVM pour toutes vos applications utilisant Java, vous pouvez changer la variable d'environnement JAVA_HOME.<br />
<pre>export JAVA_HOME=<graalvm></pre><br />
Si vous ne souhaitez pas modifier votre JAVA_HOME, vous pouvez définir une variable d'environnement GRAAL_HOME qui vous sera utile pour ne pas avoir à réécrire le chemin complet de Graal.<br />
Notez également que vous pouvez rendre les commandes au-dessus permanentes en les ajoutant à votre fichier .bashrc ou .zshrc.<br />
<br />
===Exécution===<br />
<br />
Le dossier /bin est similaire à un JDK standard, mais contient des launchers additionnels (en plus de javac pour le Java):<br />
* js, un launcher JavaScript<br />
* node, un launcher Node.js<br />
* lli, un launcher LLVM<br />
En d'autres termes, GraalVM ne comprend que le Java, Node.js (grâce au Javascript Runtime) et les langages LLVM (grâce au LLVM Runtime). Cependant, d'autres launchers peuvent être installés avec la commande :<br />
<pre><br />
gu install <nom_du_langage><br />
</pre><br />
<br />
====Par ligne de commande====<br />
<br />
En règle générale, les commandes d'exécution sont de la forme :<br />
<pre><br />
<nom_du_laucher> <nom_du_programme><br />
</pre><br />
Par exemple :<br />
<pre><br />
node app.js<br />
</pre><br />
Les programmes LLVM doivent êtres compilés avant avec l'outil LLVM Toolchain car le launcher lli ne comprend que du bitcode :<br />
<pre><br />
gu install llvm-toolchain<br />
export LLVM_TOOLCHAIN=$(lli --print-toolchain-path)<br />
$LLVM_TOOLCHAIN/clang hello.c -o hello<br />
lli hello<br />
</pre><br />
====Dans un IDE====<br />
<br />
Dans l'IDE, il suffit de remplacer le path du JRE ou du JDK par le path de GraalVM.<br />
Sous eclipse par exemple, cela peut se faire en allant dans ''Window/Preferences/Java/Installed JREs''.<br />
<br />
[[File:installation_ide.png|500px|Spécification du JDK dans l'IDE]]<br />
<br />
====Mixage de langage=====<br />
<br />
Au niveau du JDK, Graal propose tout un ensemble de librairies permettant l'inter-opérabilité entre les langages. Par exemple, il est possible depuis un programme Java d'importer la libraire org.graalvm.polyglot pour exécuter les fonctions d'un programme dans un autre langage et en récupérer le résultat.<br />
<br />
==Limites==<br />
<br />
Même si les promesses de GraalVM, à savoir l'amélioration des performances à l'exécution des langages JVM et le polyglottisme, sont respectées, l'outil d'Oracle rencontre quand même quelques limites :<br />
<br />
* On peut regretter que les langages les plus bas niveaux comme le C soient paradoxalement ceux qui traversent le plus de couches logicielles dans l'architecture de GraalVM. Leur interêt en termes de performance est donc extrêmement diminué puisqu'ils nécessitent de nombreuses opérations pour être transformé en bytecode, bytecode qui est logé à la même enseigne que le bytecode issu de code Java au yeux du compilateur.<br />
<br />
* En règle générale, les performances hors langages JVM sont tout de même loins d'être extraordinaires. L'inter-opérabilité entre langages est fonctionnelles mais coûteuse en ressources. A en croire la documentation, l'overhead est quand même évité, c'est à dire que les données sont échangées entre les différents langages sans être dupliquées.<br />
<br />
* Les langages compris par GraalVM étant en fait des implémentations Truffle de langages et pas les langages en eux-mêmes, il manque les librairies utiles à chaque langage. Il est donc impossible par exemple, d'utiliser ''matplolib'' dans un programme Python. Les programmes en sont plus ou moins réduit à de l'algorithmie selon les capacités natives du langage.<br />
<br />
=Demonstration=<br />
<br />
=Sources=<br />
# <div id="GraalVM">[https://www.graalvm.org/docs/getting-started GraalVM Official documentation: '''Getting Started''']</div><br />
# <div id="GraalVM">[https://www.graalvm.org/docs/introduction GraalVM Official documentation: '''Introduction''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/GraalVM Wikipedia: '''GraalVM''']</div><br />
# <div id="GraalVM">[https://medium.com/@nelvadas/a-la-d%C3%A9couverte-de-graalvm-5adbe0487624 Elvadas Nono : '''A la découverte de GraalVM (2020)''']</div><br />
# <div id="GraalVM">[https://www.theserverside.com/definition/GraalVM ServerSide: '''Definition of GraalVM''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Wikipedia: '''Machine Virtuelle Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/HotSpot Wikipedia: '''Hotspot''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/Maxine_Virtual_Machine_Kit Wikipedia: '''Maxine''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Java_Development_Kit Wikipedia: '''Java Development Toolkit''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://dev.to/abdulfousan/graalvm-polyglot-virtual-machine-4mn2 Abdul Fousan: '''GraalVM Polyglot Virtual Machine''']</div><br />
# <div id="GraalVM">[https://blog.plan99.net/graal-truffle-134d8f28fb69 Mike Hearn: '''GraalVM and Truffle''']</div><br />
# <div id="GraalVM">[https://www.trufflesuite.com/docs/truffle/overview Truffle Official documentation: '''GraalVM and Truffle''']</div><br />
<br />
=Veille Technologique 2020=<br />
* Année : [[VT2020|VT2021]]<br />
* Sujet : GraalVM<br />
* Slides : [[Media:GraalVM.pdf|Slides]]<br />
* Auteurs : [[User:Alexis.Rollin]]</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Fiche&diff=48318VT2020-GraalVM-Fiche2020-11-14T17:18:49Z<p>Alexis.Rollin: /* Limites */</p>
<hr />
<div>=Rappels sur l'architecture de la plateforme Java=<br />
<br />
L'architecture de GraalVM se basant sur celle d'un Java Development Toolkit, un rappel sur le fonctionnement de la plateforme Java peut s'avérer utile.<br />
<br />
Tout d'abord, le Java a la particularité d'être un langage à la fois compilé et interprété. Les tâches de compilation et d'interprétation sont distinctes et réalisées par des composants différents.<br />
Comme on peut le voir sur le schéma ci-dessous, le code Java est d'abord compilé en bytecode par un Java Compiler pour ensuite être interprété et exécuté par une Java Virtual Machine.<br />
<br />
[[File:java_platform_architecture2.png|500px|Composition d'un JDK]]<br />
<br />
Il faut donc distinguer dans cette architecture :<br />
* La Java Virtual Machine (JVM), qui interprète et exécute le code.<br />
* Le Java Runtime Environment (JRE), qui est un environnement d'exécution contenant des librairies et la JVM.<br />
* Le Java Development Toolkit (JDK), qui est composé de librairies en Java, du JRE et du Java Compiler.<br />
<br />
=GraalVM=<br />
<br />
==Abstract==<br />
<br />
''"GraalVM is a high-performance multilingual runtime. It is designed to accelerate the execution of applications written in Java and other JVM languages while also providing runtimes for JavaScript, Ruby, Python, and a number of other popular languages. GraalVM’s polyglot capabilities make it possible to mix multiple programming languages in a single application while eliminating any foreign language call costs."''<br />
<br />
Documentation officielle de GraalVM<br />
<br />
==Origines==<br />
<br />
===Constats===<br />
<br />
Malgré son apparente popularité, le langage Java est sur le déclin. A l'origine, ce langage conçue par Sun Microsystems et dit "JVM" (comme Kotlin ou Scala) avait été conçu avec l'idée de pouvoir être exécuté sur n'importe quelle plateforme ayant une JVM, affranchissant ainsi le développeur des spécifités d'exécution de la plateforme (d'où le slogan ''"Write Once Run Anywere"''). Cependant, à cause la surcouche logicielle induite par la JVM, le langage Java a essuyé des critiques sur sa performance et sur sa verbosité.<br />
<br />
S'ajoute à cela un regain de popularité des langages natifs dans les années 2010, notamment grâce à Apple et son développement mobile iOS en Objective-C qui contraste avec Java ou Kotlin (étant tous deux des langages JVM) en terme de performance.<br />
<br />
Pour répondre à ces problématiques, l'entreprise Oracle se doit d'adapter constamment Java afin de rester compétitive, et sa JVM avec.<br />
<br />
===Ce qui existait déjà===<br />
<br />
Evidemment, Java fonctionnait bien avant l'arrivée de GraalVM, ce qui signifie qu'il existait donc déjà des machines virtuelles. La plus utilisée d'entre elles est HotSpot, écrites en C++. Elle a été créé par Sun et appartient aujourd'hui à Oracle depuis le rachat de Sun. Notez que toutes les JVM (ou autres composants de la plateforme Java), ne sont pas forcément propriété d'Oracle : par exemple, OpenJ9 est une JVM dont la propriété revient à IBM et à la fondation Eclipse. Ces composants doivent ceci dit respecter des spécifications dictées par Sun (https://docs.oracle.com/javase/specs/).<br />
<br />
La première version de Hotspot n'était qu'un interpréteur, puis elle a été améliorée avec un ajout de la compilation à la volée (Just-In-Time). Ensuite elle a été capable de détecter les portions de code les plus fréquemment utilisés et de les optimiser.<br />
<br />
Ceci dit, GraalVM trouve ses racines dans le projet Maxine (dévelopé par Sun Microsystems Laboratories en 2005), dont l'objectif était d'écrire une JVM en langage Java pour s'affranchir des problèmes de développement liés au C++, plus particulièrement la gestion de la mémoire. Le projet s'est avéré trop ambitieux à l'époque mais a servi de point de départ pour GraalVM presque 15 ans plus tard.<br />
<br />
===Solution===<br />
<br />
Les objectifs ayant mené à la création de GraalVM sont multiples :<br />
* Avoir un environnement qui accélère l'exécution des applications écrites en Java ou d'autres langages JVM afin de rivaliser avec les langages natifs<br />
* Fournir un environnement d'exécution qui supporte plusieurs langages de programmation, supprimant ainsi l'isolation entre eux et établissant une véritable inter-opérabilité.<br />
<br />
La solution développée est GraalVM, une machine virtuelle haute performance (d'après les dires d'Oracle) qui prend en fait la forme d'un JDK dont la partie VM a été grandement améliorée.<br />
<br />
==Fonctionnalités==<br />
<br />
Les principaux atouts de GraalVM sont:<br />
* Graal Compiler, un nouveau compilateur JIT (Just-In-Time) pour Java<br />
* GraalVM Native Image, permettant la compilation AOT (Ahead-Of-Time) pour les applications Java<br />
* Truffle Language Implementation framework et GraalVM SDK, fournissant des runtimes pour d'autres langages de programmation<br />
* LLVM Runtime et JavaScript Runtime<br />
<br />
On a en plus la possibilité d'installer des langages et même de définir le nôtre. Actuellement, tous les langages suivants sont compatibles avec Graal (moyennant installations supplémentaires) :<br />
[[File:Languages.png|600px|Listes des langages compatibles avec GraalVM]]<br />
<br />
==Architecture==<br />
<br />
[[File:graal_vm_architecture.jpg | 500px | thumb | right | Architecture de la JVM GraalVM]]<br />
<br />
GraalVM réutilise l'architecture d'OpenJDK (qui est sans grande surprise un JDK), mais avec quelques particularités au niveau de la JVM :<br />
* Il réutilise la VM Hotspot, mais de laquelle on a retiré le JIT Compiler. <br />
* Il bénéficie d'un nouveau compilateur JIT, Graal Compiler, écrit en Java et en dehors de Hotspot. Il a pour mission de transformer du bytecode en code machine (ne pas confondre avec le Java Compiler, plus haut niveau).<br />
* Pour permettre à la JVM Hotspot d'utiliser un compilateur écrit en Java, une couche intermédiaire est nécessaire : la JVM Compiler Interface.<br />
* Tout ce qui doit arriver au compilateur JIT doit être du bytecode. C'est pourquoi les langages non-JVM ne peuvent pas être directement pris en entrée de Graal Compiler. La couche Truffle framework répond à cette problématique. Truffle est un framework open-source qui sert à définir nos propres langages de programmation à travers un AST (Abstract Syntax Tree) et à construire des interpréteurs pour ce dernier. Il est réutilisé dans GraalVM pour définir des implémentations Truffle de Python, Ruby ou encore Javascript. Attention, l'implémentation d'un langage sous Truffle n'est pas le langage en lui-même, ce qui pose quelques problèmes comme on peut le voir dans la partie Limites.<br />
* La couche Truffle suffisait pour les langages interprétés puisque Truffle construit des interpréteurs. Mais pour les langages LLVM (Low Level Virtual Machine) comme le C, le C++ ou le Fortran, une surcouche est nécessaire. Sulong est une LLVM qui permet de produire du bitcode en s'appuyant sur les fonctionnalités de Truffle.<br />
<br />
==Utilisation==<br />
<br />
===Installation===<br />
<br />
GraalVM est très simple à installer.<br />
<br />
* Naviguez sur le git de GraalVM (https://github.com/graalvm/graalvm-ce-builds/releases) et téléchargez la version de GraalVM compatible avec notre version de Java/OpenJDK, que l'on peut connaître avec la commande :<br />
<pre>java -version</pre><br />
<br />
* Dézippez l'archive à l'endroit de votre choix.<br />
<pre>tar -xzf <graalvm-archive>.tar.gz</pre><br />
<br />
* Configurez votre variable d'environnement PATH:<br />
<pre>export PATH=<graalvm>/bin:$PATH</pre><br />
Si vous souhaitez remplacer votre JDK par GraalVM pour toutes vos applications utilisant Java, vous pouvez changer la variable d'environnement JAVA_HOME.<br />
<pre>export JAVA_HOME=<graalvm></pre><br />
Si vous ne souhaitez pas modifier votre JAVA_HOME, vous pouvez définir une variable d'environnement GRAAL_HOME qui vous sera utile pour ne pas avoir à réécrire le chemin complet de Graal.<br />
Notez également que vous pouvez rendre les commandes au-dessus permanentes en les ajoutant à votre fichier .bashrc ou .zshrc.<br />
<br />
===Exécution===<br />
<br />
Le dossier /bin est similaire à un JDK standard, mais contient des launchers additionnels (en plus de javac pour le Java):<br />
* js, un launcher JavaScript<br />
* node, un launcher Node.js<br />
* lli, un launcher LLVM<br />
En d'autres termes, GraalVM ne comprend que le Java, Node.js (grâce au Javascript Runtime) et les langages LLVM (grâce au LLVM Runtime). Cependant, d'autres launchers peuvent être installés avec la commande :<br />
<pre><br />
gu install <nom_du_langage><br />
</pre><br />
<br />
====Par ligne de commande====<br />
<br />
En règle générale, les commandes d'exécution sont de la forme :<br />
<pre><br />
<nom_du_laucher> <nom_du_programme><br />
</pre><br />
Par exemple :<br />
<pre><br />
node app.js<br />
</pre><br />
Les programmes LLVM doivent êtres compilés avant avec l'outil LLVM Toolchain car le launcher lli ne comprend que du bitcode :<br />
<pre><br />
gu install llvm-toolchain<br />
export LLVM_TOOLCHAIN=$(lli --print-toolchain-path)<br />
$LLVM_TOOLCHAIN/clang hello.c -o hello<br />
lli hello<br />
</pre><br />
====Dans un IDE====<br />
<br />
Dans l'IDE, il suffit de remplacer le path du JRE ou du JDK par le path de GraalVM.<br />
Sous eclipse par exemple, cela peut se faire en allant dans ''Window/Preferences/Java/Installed JREs''.<br />
<br />
[[File:installation_ide.png|500px|Spécification du JDK dans l'IDE]]<br />
<br />
==Limites==<br />
<br />
Même si les promesses de GraalVM, à savoir l'amélioration des performances à l'exécution des langages JVM et le polyglottisme, sont respectées, l'outil d'Oracle rencontre quand même quelques limites :<br />
<br />
* On peut regretter que les langages les plus bas niveaux comme le C soient paradoxalement ceux qui traversent le plus de couches logicielles dans l'architecture de GraalVM. Leur interêt en termes de performance est donc extrêmement diminué puisqu'ils nécessitent de nombreuses opérations pour être transformé en bytecode, bytecode qui est logé à la même enseigne que le bytecode issu de code Java au yeux du compilateur.<br />
<br />
* En règle générale, les performances hors langages JVM sont tout de même loins d'être extraordinaires. L'inter-opérabilité entre langages est fonctionnelles mais coûteuse en ressources. A en croire la documentation, l'overhead est quand même évité, c'est à dire que les données sont échangées entre les différents langages sans être dupliquées.<br />
<br />
* Les langages compris par GraalVM étant en fait des implémentations Truffle de langages et pas les langages en eux-mêmes, il manque les librairies utiles à chaque langage. Il est donc impossible par exemple, d'utiliser ''matplolib'' dans un programme Python. Les programmes en sont plus ou moins réduit à de l'algorithmie selon les capacités natives du langage.<br />
<br />
=Demonstration=<br />
<br />
=Sources=<br />
# <div id="GraalVM">[https://www.graalvm.org/docs/getting-started GraalVM Official documentation: '''Getting Started''']</div><br />
# <div id="GraalVM">[https://www.graalvm.org/docs/introduction GraalVM Official documentation: '''Introduction''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/GraalVM Wikipedia: '''GraalVM''']</div><br />
# <div id="GraalVM">[https://medium.com/@nelvadas/a-la-d%C3%A9couverte-de-graalvm-5adbe0487624 Elvadas Nono : '''A la découverte de GraalVM (2020)''']</div><br />
# <div id="GraalVM">[https://www.theserverside.com/definition/GraalVM ServerSide: '''Definition of GraalVM''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Wikipedia: '''Machine Virtuelle Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/HotSpot Wikipedia: '''Hotspot''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/Maxine_Virtual_Machine_Kit Wikipedia: '''Maxine''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Java_Development_Kit Wikipedia: '''Java Development Toolkit''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://dev.to/abdulfousan/graalvm-polyglot-virtual-machine-4mn2 Abdul Fousan: '''GraalVM Polyglot Virtual Machine''']</div><br />
# <div id="GraalVM">[https://blog.plan99.net/graal-truffle-134d8f28fb69 Mike Hearn: '''GraalVM and Truffle''']</div><br />
# <div id="GraalVM">[https://www.trufflesuite.com/docs/truffle/overview Truffle Official documentation: '''GraalVM and Truffle''']</div><br />
<br />
=Veille Technologique 2020=<br />
* Année : [[VT2020|VT2021]]<br />
* Sujet : GraalVM<br />
* Slides : [[Media:GraalVM.pdf|Slides]]<br />
* Auteurs : [[User:Alexis.Rollin]]</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Fiche&diff=48317VT2020-GraalVM-Fiche2020-11-14T16:45:01Z<p>Alexis.Rollin: /* Architecture */</p>
<hr />
<div>=Rappels sur l'architecture de la plateforme Java=<br />
<br />
L'architecture de GraalVM se basant sur celle d'un Java Development Toolkit, un rappel sur le fonctionnement de la plateforme Java peut s'avérer utile.<br />
<br />
Tout d'abord, le Java a la particularité d'être un langage à la fois compilé et interprété. Les tâches de compilation et d'interprétation sont distinctes et réalisées par des composants différents.<br />
Comme on peut le voir sur le schéma ci-dessous, le code Java est d'abord compilé en bytecode par un Java Compiler pour ensuite être interprété et exécuté par une Java Virtual Machine.<br />
<br />
[[File:java_platform_architecture2.png|500px|Composition d'un JDK]]<br />
<br />
Il faut donc distinguer dans cette architecture :<br />
* La Java Virtual Machine (JVM), qui interprète et exécute le code.<br />
* Le Java Runtime Environment (JRE), qui est un environnement d'exécution contenant des librairies et la JVM.<br />
* Le Java Development Toolkit (JDK), qui est composé de librairies en Java, du JRE et du Java Compiler.<br />
<br />
=GraalVM=<br />
<br />
==Abstract==<br />
<br />
''"GraalVM is a high-performance multilingual runtime. It is designed to accelerate the execution of applications written in Java and other JVM languages while also providing runtimes for JavaScript, Ruby, Python, and a number of other popular languages. GraalVM’s polyglot capabilities make it possible to mix multiple programming languages in a single application while eliminating any foreign language call costs."''<br />
<br />
Documentation officielle de GraalVM<br />
<br />
==Origines==<br />
<br />
===Constats===<br />
<br />
Malgré son apparente popularité, le langage Java est sur le déclin. A l'origine, ce langage conçue par Sun Microsystems et dit "JVM" (comme Kotlin ou Scala) avait été conçu avec l'idée de pouvoir être exécuté sur n'importe quelle plateforme ayant une JVM, affranchissant ainsi le développeur des spécifités d'exécution de la plateforme (d'où le slogan ''"Write Once Run Anywere"''). Cependant, à cause la surcouche logicielle induite par la JVM, le langage Java a essuyé des critiques sur sa performance et sur sa verbosité.<br />
<br />
S'ajoute à cela un regain de popularité des langages natifs dans les années 2010, notamment grâce à Apple et son développement mobile iOS en Objective-C qui contraste avec Java ou Kotlin (étant tous deux des langages JVM) en terme de performance.<br />
<br />
Pour répondre à ces problématiques, l'entreprise Oracle se doit d'adapter constamment Java afin de rester compétitive, et sa JVM avec.<br />
<br />
===Ce qui existait déjà===<br />
<br />
Evidemment, Java fonctionnait bien avant l'arrivée de GraalVM, ce qui signifie qu'il existait donc déjà des machines virtuelles. La plus utilisée d'entre elles est HotSpot, écrites en C++. Elle a été créé par Sun et appartient aujourd'hui à Oracle depuis le rachat de Sun. Notez que toutes les JVM (ou autres composants de la plateforme Java), ne sont pas forcément propriété d'Oracle : par exemple, OpenJ9 est une JVM dont la propriété revient à IBM et à la fondation Eclipse. Ces composants doivent ceci dit respecter des spécifications dictées par Sun (https://docs.oracle.com/javase/specs/).<br />
<br />
La première version de Hotspot n'était qu'un interpréteur, puis elle a été améliorée avec un ajout de la compilation à la volée (Just-In-Time). Ensuite elle a été capable de détecter les portions de code les plus fréquemment utilisés et de les optimiser.<br />
<br />
Ceci dit, GraalVM trouve ses racines dans le projet Maxine (dévelopé par Sun Microsystems Laboratories en 2005), dont l'objectif était d'écrire une JVM en langage Java pour s'affranchir des problèmes de développement liés au C++, plus particulièrement la gestion de la mémoire. Le projet s'est avéré trop ambitieux à l'époque mais a servi de point de départ pour GraalVM presque 15 ans plus tard.<br />
<br />
===Solution===<br />
<br />
Les objectifs ayant mené à la création de GraalVM sont multiples :<br />
* Avoir un environnement qui accélère l'exécution des applications écrites en Java ou d'autres langages JVM afin de rivaliser avec les langages natifs<br />
* Fournir un environnement d'exécution qui supporte plusieurs langages de programmation, supprimant ainsi l'isolation entre eux et établissant une véritable inter-opérabilité.<br />
<br />
La solution développée est GraalVM, une machine virtuelle haute performance (d'après les dires d'Oracle) qui prend en fait la forme d'un JDK dont la partie VM a été grandement améliorée.<br />
<br />
==Fonctionnalités==<br />
<br />
Les principaux atouts de GraalVM sont:<br />
* Graal Compiler, un nouveau compilateur JIT (Just-In-Time) pour Java<br />
* GraalVM Native Image, permettant la compilation AOT (Ahead-Of-Time) pour les applications Java<br />
* Truffle Language Implementation framework et GraalVM SDK, fournissant des runtimes pour d'autres langages de programmation<br />
* LLVM Runtime et JavaScript Runtime<br />
<br />
On a en plus la possibilité d'installer des langages et même de définir le nôtre. Actuellement, tous les langages suivants sont compatibles avec Graal (moyennant installations supplémentaires) :<br />
[[File:Languages.png|600px|Listes des langages compatibles avec GraalVM]]<br />
<br />
==Architecture==<br />
<br />
[[File:graal_vm_architecture.jpg | 500px | thumb | right | Architecture de la JVM GraalVM]]<br />
<br />
GraalVM réutilise l'architecture d'OpenJDK (qui est sans grande surprise un JDK), mais avec quelques particularités au niveau de la JVM :<br />
* Il réutilise la VM Hotspot, mais de laquelle on a retiré le JIT Compiler. <br />
* Il bénéficie d'un nouveau compilateur JIT, Graal Compiler, écrit en Java et en dehors de Hotspot. Il a pour mission de transformer du bytecode en code machine (ne pas confondre avec le Java Compiler, plus haut niveau).<br />
* Pour permettre à la JVM Hotspot d'utiliser un compilateur écrit en Java, une couche intermédiaire est nécessaire : la JVM Compiler Interface.<br />
* Tout ce qui doit arriver au compilateur JIT doit être du bytecode. C'est pourquoi les langages non-JVM ne peuvent pas être directement pris en entrée de Graal Compiler. La couche Truffle framework répond à cette problématique. Truffle est un framework open-source qui sert à définir nos propres langages de programmation à travers un AST (Abstract Syntax Tree) et à construire des interpréteurs pour ce dernier. Il est réutilisé dans GraalVM pour définir des implémentations Truffle de Python, Ruby ou encore Javascript. Attention, l'implémentation d'un langage sous Truffle n'est pas le langage en lui-même, ce qui pose quelques problèmes comme on peut le voir dans la partie Limites.<br />
* La couche Truffle suffisait pour les langages interprétés puisque Truffle construit des interpréteurs. Mais pour les langages LLVM (Low Level Virtual Machine) comme le C, le C++ ou le Fortran, une surcouche est nécessaire. Sulong est une LLVM qui permet de produire du bitcode en s'appuyant sur les fonctionnalités de Truffle.<br />
<br />
==Utilisation==<br />
<br />
===Installation===<br />
<br />
GraalVM est très simple à installer.<br />
<br />
* Naviguez sur le git de GraalVM (https://github.com/graalvm/graalvm-ce-builds/releases) et téléchargez la version de GraalVM compatible avec notre version de Java/OpenJDK, que l'on peut connaître avec la commande :<br />
<pre>java -version</pre><br />
<br />
* Dézippez l'archive à l'endroit de votre choix.<br />
<pre>tar -xzf <graalvm-archive>.tar.gz</pre><br />
<br />
* Configurez votre variable d'environnement PATH:<br />
<pre>export PATH=<graalvm>/bin:$PATH</pre><br />
Si vous souhaitez remplacer votre JDK par GraalVM pour toutes vos applications utilisant Java, vous pouvez changer la variable d'environnement JAVA_HOME.<br />
<pre>export JAVA_HOME=<graalvm></pre><br />
Si vous ne souhaitez pas modifier votre JAVA_HOME, vous pouvez définir une variable d'environnement GRAAL_HOME qui vous sera utile pour ne pas avoir à réécrire le chemin complet de Graal.<br />
Notez également que vous pouvez rendre les commandes au-dessus permanentes en les ajoutant à votre fichier .bashrc ou .zshrc.<br />
<br />
===Exécution===<br />
<br />
Le dossier /bin est similaire à un JDK standard, mais contient des launchers additionnels (en plus de javac pour le Java):<br />
* js, un launcher JavaScript<br />
* node, un launcher Node.js<br />
* lli, un launcher LLVM<br />
En d'autres termes, GraalVM ne comprend que le Java, Node.js (grâce au Javascript Runtime) et les langages LLVM (grâce au LLVM Runtime). Cependant, d'autres launchers peuvent être installés avec la commande :<br />
<pre><br />
gu install <nom_du_langage><br />
</pre><br />
<br />
====Par ligne de commande====<br />
<br />
En règle générale, les commandes d'exécution sont de la forme :<br />
<pre><br />
<nom_du_laucher> <nom_du_programme><br />
</pre><br />
Par exemple :<br />
<pre><br />
node app.js<br />
</pre><br />
Les programmes LLVM doivent êtres compilés avant avec l'outil LLVM Toolchain car le launcher lli ne comprend que du bitcode :<br />
<pre><br />
gu install llvm-toolchain<br />
export LLVM_TOOLCHAIN=$(lli --print-toolchain-path)<br />
$LLVM_TOOLCHAIN/clang hello.c -o hello<br />
lli hello<br />
</pre><br />
====Dans un IDE====<br />
<br />
Dans l'IDE, il suffit de remplacer le path du JRE ou du JDK par le path de GraalVM.<br />
Sous eclipse par exemple, cela peut se faire en allant dans ''Window/Preferences/Java/Installed JREs''.<br />
<br />
[[File:installation_ide.png|500px|Spécification du JDK dans l'IDE]]<br />
<br />
==Limites==<br />
<br />
Même si les promesses de GraalVM, à savoir l'amélioration des performances à l'exécution des langages JVM et le polyglottisme, sont respectées, l'outil d'Oracle rencontre quand même quelques limites :<br />
<br />
* On peut regretter que les langages les plus bas niveaux comme le C soient paradoxalement ceux qui traversent le plus de couches logicielles dans l'architecture de GraalVM. Leur interêt en termes de performance est donc extrêmement diminué puisqu'ils nécessitent de nombreuses opérations pour être transformé en bytecode, bytecode qui est logé à la même enseigne que le bytecode issu de code Java au yeux du compilateur.<br />
<br />
* En règle générale, les performances hors langages JVM sont tout de même loins d'être extraordinaires. L'inter-opérabilité entre langages est fonctionnelles mais coûteuse en ressources.<br />
<br />
* Les langages compris par GraalVM étant en fait des implémentations Truffle de langages et pas les langages en eux-mêmes, il manque les librairies utiles à chaque langage. Il est donc impossible par exemple, d'utiliser ''matplolib'' dans un programme Python. Les programmes en sont plus ou moins réduit à de l'algorithmie selon les capacités natives du langage.<br />
<br />
=Demonstration=<br />
<br />
=Sources=<br />
# <div id="GraalVM">[https://www.graalvm.org/docs/getting-started GraalVM Official documentation: '''Getting Started''']</div><br />
# <div id="GraalVM">[https://www.graalvm.org/docs/introduction GraalVM Official documentation: '''Introduction''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/GraalVM Wikipedia: '''GraalVM''']</div><br />
# <div id="GraalVM">[https://medium.com/@nelvadas/a-la-d%C3%A9couverte-de-graalvm-5adbe0487624 Elvadas Nono : '''A la découverte de GraalVM (2020)''']</div><br />
# <div id="GraalVM">[https://www.theserverside.com/definition/GraalVM ServerSide: '''Definition of GraalVM''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Wikipedia: '''Machine Virtuelle Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/HotSpot Wikipedia: '''Hotspot''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/Maxine_Virtual_Machine_Kit Wikipedia: '''Maxine''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Java_Development_Kit Wikipedia: '''Java Development Toolkit''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://dev.to/abdulfousan/graalvm-polyglot-virtual-machine-4mn2 Abdul Fousan: '''GraalVM Polyglot Virtual Machine''']</div><br />
# <div id="GraalVM">[https://blog.plan99.net/graal-truffle-134d8f28fb69 Mike Hearn: '''GraalVM and Truffle''']</div><br />
# <div id="GraalVM">[https://www.trufflesuite.com/docs/truffle/overview Truffle Official documentation: '''GraalVM and Truffle''']</div><br />
<br />
=Veille Technologique 2020=<br />
* Année : [[VT2020|VT2021]]<br />
* Sujet : GraalVM<br />
* Slides : [[Media:GraalVM.pdf|Slides]]<br />
* Auteurs : [[User:Alexis.Rollin]]</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Fiche&diff=48316VT2020-GraalVM-Fiche2020-11-14T16:42:54Z<p>Alexis.Rollin: /* Fonctionnalités */</p>
<hr />
<div>=Rappels sur l'architecture de la plateforme Java=<br />
<br />
L'architecture de GraalVM se basant sur celle d'un Java Development Toolkit, un rappel sur le fonctionnement de la plateforme Java peut s'avérer utile.<br />
<br />
Tout d'abord, le Java a la particularité d'être un langage à la fois compilé et interprété. Les tâches de compilation et d'interprétation sont distinctes et réalisées par des composants différents.<br />
Comme on peut le voir sur le schéma ci-dessous, le code Java est d'abord compilé en bytecode par un Java Compiler pour ensuite être interprété et exécuté par une Java Virtual Machine.<br />
<br />
[[File:java_platform_architecture2.png|500px|Composition d'un JDK]]<br />
<br />
Il faut donc distinguer dans cette architecture :<br />
* La Java Virtual Machine (JVM), qui interprète et exécute le code.<br />
* Le Java Runtime Environment (JRE), qui est un environnement d'exécution contenant des librairies et la JVM.<br />
* Le Java Development Toolkit (JDK), qui est composé de librairies en Java, du JRE et du Java Compiler.<br />
<br />
=GraalVM=<br />
<br />
==Abstract==<br />
<br />
''"GraalVM is a high-performance multilingual runtime. It is designed to accelerate the execution of applications written in Java and other JVM languages while also providing runtimes for JavaScript, Ruby, Python, and a number of other popular languages. GraalVM’s polyglot capabilities make it possible to mix multiple programming languages in a single application while eliminating any foreign language call costs."''<br />
<br />
Documentation officielle de GraalVM<br />
<br />
==Origines==<br />
<br />
===Constats===<br />
<br />
Malgré son apparente popularité, le langage Java est sur le déclin. A l'origine, ce langage conçue par Sun Microsystems et dit "JVM" (comme Kotlin ou Scala) avait été conçu avec l'idée de pouvoir être exécuté sur n'importe quelle plateforme ayant une JVM, affranchissant ainsi le développeur des spécifités d'exécution de la plateforme (d'où le slogan ''"Write Once Run Anywere"''). Cependant, à cause la surcouche logicielle induite par la JVM, le langage Java a essuyé des critiques sur sa performance et sur sa verbosité.<br />
<br />
S'ajoute à cela un regain de popularité des langages natifs dans les années 2010, notamment grâce à Apple et son développement mobile iOS en Objective-C qui contraste avec Java ou Kotlin (étant tous deux des langages JVM) en terme de performance.<br />
<br />
Pour répondre à ces problématiques, l'entreprise Oracle se doit d'adapter constamment Java afin de rester compétitive, et sa JVM avec.<br />
<br />
===Ce qui existait déjà===<br />
<br />
Evidemment, Java fonctionnait bien avant l'arrivée de GraalVM, ce qui signifie qu'il existait donc déjà des machines virtuelles. La plus utilisée d'entre elles est HotSpot, écrites en C++. Elle a été créé par Sun et appartient aujourd'hui à Oracle depuis le rachat de Sun. Notez que toutes les JVM (ou autres composants de la plateforme Java), ne sont pas forcément propriété d'Oracle : par exemple, OpenJ9 est une JVM dont la propriété revient à IBM et à la fondation Eclipse. Ces composants doivent ceci dit respecter des spécifications dictées par Sun (https://docs.oracle.com/javase/specs/).<br />
<br />
La première version de Hotspot n'était qu'un interpréteur, puis elle a été améliorée avec un ajout de la compilation à la volée (Just-In-Time). Ensuite elle a été capable de détecter les portions de code les plus fréquemment utilisés et de les optimiser.<br />
<br />
Ceci dit, GraalVM trouve ses racines dans le projet Maxine (dévelopé par Sun Microsystems Laboratories en 2005), dont l'objectif était d'écrire une JVM en langage Java pour s'affranchir des problèmes de développement liés au C++, plus particulièrement la gestion de la mémoire. Le projet s'est avéré trop ambitieux à l'époque mais a servi de point de départ pour GraalVM presque 15 ans plus tard.<br />
<br />
===Solution===<br />
<br />
Les objectifs ayant mené à la création de GraalVM sont multiples :<br />
* Avoir un environnement qui accélère l'exécution des applications écrites en Java ou d'autres langages JVM afin de rivaliser avec les langages natifs<br />
* Fournir un environnement d'exécution qui supporte plusieurs langages de programmation, supprimant ainsi l'isolation entre eux et établissant une véritable inter-opérabilité.<br />
<br />
La solution développée est GraalVM, une machine virtuelle haute performance (d'après les dires d'Oracle) qui prend en fait la forme d'un JDK dont la partie VM a été grandement améliorée.<br />
<br />
==Fonctionnalités==<br />
<br />
Les principaux atouts de GraalVM sont:<br />
* Graal Compiler, un nouveau compilateur JIT (Just-In-Time) pour Java<br />
* GraalVM Native Image, permettant la compilation AOT (Ahead-Of-Time) pour les applications Java<br />
* Truffle Language Implementation framework et GraalVM SDK, fournissant des runtimes pour d'autres langages de programmation<br />
* LLVM Runtime et JavaScript Runtime<br />
<br />
On a en plus la possibilité d'installer des langages et même de définir le nôtre. Actuellement, tous les langages suivants sont compatibles avec Graal (moyennant installations supplémentaires) :<br />
[[File:Languages.png|600px|Listes des langages compatibles avec GraalVM]]<br />
<br />
==Architecture==<br />
<br />
[[File:graal_vm_architecture.jpg | 500px | thumb | right | Architecture de la JVM GraalVM]]<br />
<br />
GraalVM réutilise l'architecture d'OpenJDK (qui est sans grande surprise un JDK), mais avec quelques particularités au niveau de la JVM :<br />
* Il réutilise la VM Hotspot, mais de laquelle on a retiré le JIT Compiler. <br />
* Il bénéficie d'un nouveau compilateur JIT, Graal Compiler, écrit en Java et en dehors de Hotspot. Il a pour mission de transformer du bytecode en code machine (ne pas confondre avec le Java Compiler, plus haut niveau).<br />
* Pour permettre à la JVM Hotspot d'utiliser un compilateur écrit en Java, une couche intermédiaire est nécessaire : la JVM Compiler Interface.<br />
* Tout ce qui doit arriver au compilateur JIT doit être du bytecode. C'est pourquoi les langages non-JVM ne peuvent pas être directement pris en entrée de Graal Compiler. La couche Truffle framework répond à cette problématique. Truffle est un framework open-source qui sert à définir nos propres langages de programmation à travers un AST (Abstract Syntax Tree) et à construire des interpréteurs pour ce dernier. Il est réutilisé dans GraalVM pour définir des implémentations Truffle de Python, Ruby ou encore Javascript.<br />
* La couche Truffle suffisait pour les langages interprétés puisque Truffle construit des interpréteurs. Mais pour les langages LLVM (Low Level Virtual Machine) comme le C, le C++ ou le Fortran, une surcouche est nécessaire. Sulong est une LLVM qui permet de produire du bitcode en s'appuyant sur les fonctionnalités de Truffle.<br />
<br />
==Utilisation==<br />
<br />
===Installation===<br />
<br />
GraalVM est très simple à installer.<br />
<br />
* Naviguez sur le git de GraalVM (https://github.com/graalvm/graalvm-ce-builds/releases) et téléchargez la version de GraalVM compatible avec notre version de Java/OpenJDK, que l'on peut connaître avec la commande :<br />
<pre>java -version</pre><br />
<br />
* Dézippez l'archive à l'endroit de votre choix.<br />
<pre>tar -xzf <graalvm-archive>.tar.gz</pre><br />
<br />
* Configurez votre variable d'environnement PATH:<br />
<pre>export PATH=<graalvm>/bin:$PATH</pre><br />
Si vous souhaitez remplacer votre JDK par GraalVM pour toutes vos applications utilisant Java, vous pouvez changer la variable d'environnement JAVA_HOME.<br />
<pre>export JAVA_HOME=<graalvm></pre><br />
Si vous ne souhaitez pas modifier votre JAVA_HOME, vous pouvez définir une variable d'environnement GRAAL_HOME qui vous sera utile pour ne pas avoir à réécrire le chemin complet de Graal.<br />
Notez également que vous pouvez rendre les commandes au-dessus permanentes en les ajoutant à votre fichier .bashrc ou .zshrc.<br />
<br />
===Exécution===<br />
<br />
Le dossier /bin est similaire à un JDK standard, mais contient des launchers additionnels (en plus de javac pour le Java):<br />
* js, un launcher JavaScript<br />
* node, un launcher Node.js<br />
* lli, un launcher LLVM<br />
En d'autres termes, GraalVM ne comprend que le Java, Node.js (grâce au Javascript Runtime) et les langages LLVM (grâce au LLVM Runtime). Cependant, d'autres launchers peuvent être installés avec la commande :<br />
<pre><br />
gu install <nom_du_langage><br />
</pre><br />
<br />
====Par ligne de commande====<br />
<br />
En règle générale, les commandes d'exécution sont de la forme :<br />
<pre><br />
<nom_du_laucher> <nom_du_programme><br />
</pre><br />
Par exemple :<br />
<pre><br />
node app.js<br />
</pre><br />
Les programmes LLVM doivent êtres compilés avant avec l'outil LLVM Toolchain car le launcher lli ne comprend que du bitcode :<br />
<pre><br />
gu install llvm-toolchain<br />
export LLVM_TOOLCHAIN=$(lli --print-toolchain-path)<br />
$LLVM_TOOLCHAIN/clang hello.c -o hello<br />
lli hello<br />
</pre><br />
====Dans un IDE====<br />
<br />
Dans l'IDE, il suffit de remplacer le path du JRE ou du JDK par le path de GraalVM.<br />
Sous eclipse par exemple, cela peut se faire en allant dans ''Window/Preferences/Java/Installed JREs''.<br />
<br />
[[File:installation_ide.png|500px|Spécification du JDK dans l'IDE]]<br />
<br />
==Limites==<br />
<br />
Même si les promesses de GraalVM, à savoir l'amélioration des performances à l'exécution des langages JVM et le polyglottisme, sont respectées, l'outil d'Oracle rencontre quand même quelques limites :<br />
<br />
* On peut regretter que les langages les plus bas niveaux comme le C soient paradoxalement ceux qui traversent le plus de couches logicielles dans l'architecture de GraalVM. Leur interêt en termes de performance est donc extrêmement diminué puisqu'ils nécessitent de nombreuses opérations pour être transformé en bytecode, bytecode qui est logé à la même enseigne que le bytecode issu de code Java au yeux du compilateur.<br />
<br />
* En règle générale, les performances hors langages JVM sont tout de même loins d'être extraordinaires. L'inter-opérabilité entre langages est fonctionnelles mais coûteuse en ressources.<br />
<br />
* Les langages compris par GraalVM étant en fait des implémentations Truffle de langages et pas les langages en eux-mêmes, il manque les librairies utiles à chaque langage. Il est donc impossible par exemple, d'utiliser ''matplolib'' dans un programme Python. Les programmes en sont plus ou moins réduit à de l'algorithmie selon les capacités natives du langage.<br />
<br />
=Demonstration=<br />
<br />
=Sources=<br />
# <div id="GraalVM">[https://www.graalvm.org/docs/getting-started GraalVM Official documentation: '''Getting Started''']</div><br />
# <div id="GraalVM">[https://www.graalvm.org/docs/introduction GraalVM Official documentation: '''Introduction''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/GraalVM Wikipedia: '''GraalVM''']</div><br />
# <div id="GraalVM">[https://medium.com/@nelvadas/a-la-d%C3%A9couverte-de-graalvm-5adbe0487624 Elvadas Nono : '''A la découverte de GraalVM (2020)''']</div><br />
# <div id="GraalVM">[https://www.theserverside.com/definition/GraalVM ServerSide: '''Definition of GraalVM''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Wikipedia: '''Machine Virtuelle Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/HotSpot Wikipedia: '''Hotspot''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/Maxine_Virtual_Machine_Kit Wikipedia: '''Maxine''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Java_Development_Kit Wikipedia: '''Java Development Toolkit''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://dev.to/abdulfousan/graalvm-polyglot-virtual-machine-4mn2 Abdul Fousan: '''GraalVM Polyglot Virtual Machine''']</div><br />
# <div id="GraalVM">[https://blog.plan99.net/graal-truffle-134d8f28fb69 Mike Hearn: '''GraalVM and Truffle''']</div><br />
# <div id="GraalVM">[https://www.trufflesuite.com/docs/truffle/overview Truffle Official documentation: '''GraalVM and Truffle''']</div><br />
<br />
=Veille Technologique 2020=<br />
* Année : [[VT2020|VT2021]]<br />
* Sujet : GraalVM<br />
* Slides : [[Media:GraalVM.pdf|Slides]]<br />
* Auteurs : [[User:Alexis.Rollin]]</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=VT2020-GraalVM-Fiche&diff=48315VT2020-GraalVM-Fiche2020-11-14T16:42:44Z<p>Alexis.Rollin: /* Fonctionnalités */</p>
<hr />
<div>=Rappels sur l'architecture de la plateforme Java=<br />
<br />
L'architecture de GraalVM se basant sur celle d'un Java Development Toolkit, un rappel sur le fonctionnement de la plateforme Java peut s'avérer utile.<br />
<br />
Tout d'abord, le Java a la particularité d'être un langage à la fois compilé et interprété. Les tâches de compilation et d'interprétation sont distinctes et réalisées par des composants différents.<br />
Comme on peut le voir sur le schéma ci-dessous, le code Java est d'abord compilé en bytecode par un Java Compiler pour ensuite être interprété et exécuté par une Java Virtual Machine.<br />
<br />
[[File:java_platform_architecture2.png|500px|Composition d'un JDK]]<br />
<br />
Il faut donc distinguer dans cette architecture :<br />
* La Java Virtual Machine (JVM), qui interprète et exécute le code.<br />
* Le Java Runtime Environment (JRE), qui est un environnement d'exécution contenant des librairies et la JVM.<br />
* Le Java Development Toolkit (JDK), qui est composé de librairies en Java, du JRE et du Java Compiler.<br />
<br />
=GraalVM=<br />
<br />
==Abstract==<br />
<br />
''"GraalVM is a high-performance multilingual runtime. It is designed to accelerate the execution of applications written in Java and other JVM languages while also providing runtimes for JavaScript, Ruby, Python, and a number of other popular languages. GraalVM’s polyglot capabilities make it possible to mix multiple programming languages in a single application while eliminating any foreign language call costs."''<br />
<br />
Documentation officielle de GraalVM<br />
<br />
==Origines==<br />
<br />
===Constats===<br />
<br />
Malgré son apparente popularité, le langage Java est sur le déclin. A l'origine, ce langage conçue par Sun Microsystems et dit "JVM" (comme Kotlin ou Scala) avait été conçu avec l'idée de pouvoir être exécuté sur n'importe quelle plateforme ayant une JVM, affranchissant ainsi le développeur des spécifités d'exécution de la plateforme (d'où le slogan ''"Write Once Run Anywere"''). Cependant, à cause la surcouche logicielle induite par la JVM, le langage Java a essuyé des critiques sur sa performance et sur sa verbosité.<br />
<br />
S'ajoute à cela un regain de popularité des langages natifs dans les années 2010, notamment grâce à Apple et son développement mobile iOS en Objective-C qui contraste avec Java ou Kotlin (étant tous deux des langages JVM) en terme de performance.<br />
<br />
Pour répondre à ces problématiques, l'entreprise Oracle se doit d'adapter constamment Java afin de rester compétitive, et sa JVM avec.<br />
<br />
===Ce qui existait déjà===<br />
<br />
Evidemment, Java fonctionnait bien avant l'arrivée de GraalVM, ce qui signifie qu'il existait donc déjà des machines virtuelles. La plus utilisée d'entre elles est HotSpot, écrites en C++. Elle a été créé par Sun et appartient aujourd'hui à Oracle depuis le rachat de Sun. Notez que toutes les JVM (ou autres composants de la plateforme Java), ne sont pas forcément propriété d'Oracle : par exemple, OpenJ9 est une JVM dont la propriété revient à IBM et à la fondation Eclipse. Ces composants doivent ceci dit respecter des spécifications dictées par Sun (https://docs.oracle.com/javase/specs/).<br />
<br />
La première version de Hotspot n'était qu'un interpréteur, puis elle a été améliorée avec un ajout de la compilation à la volée (Just-In-Time). Ensuite elle a été capable de détecter les portions de code les plus fréquemment utilisés et de les optimiser.<br />
<br />
Ceci dit, GraalVM trouve ses racines dans le projet Maxine (dévelopé par Sun Microsystems Laboratories en 2005), dont l'objectif était d'écrire une JVM en langage Java pour s'affranchir des problèmes de développement liés au C++, plus particulièrement la gestion de la mémoire. Le projet s'est avéré trop ambitieux à l'époque mais a servi de point de départ pour GraalVM presque 15 ans plus tard.<br />
<br />
===Solution===<br />
<br />
Les objectifs ayant mené à la création de GraalVM sont multiples :<br />
* Avoir un environnement qui accélère l'exécution des applications écrites en Java ou d'autres langages JVM afin de rivaliser avec les langages natifs<br />
* Fournir un environnement d'exécution qui supporte plusieurs langages de programmation, supprimant ainsi l'isolation entre eux et établissant une véritable inter-opérabilité.<br />
<br />
La solution développée est GraalVM, une machine virtuelle haute performance (d'après les dires d'Oracle) qui prend en fait la forme d'un JDK dont la partie VM a été grandement améliorée.<br />
<br />
==Fonctionnalités==<br />
<br />
Les principaux atouts de GraalVM sont:<br />
* Graal Compiler, un nouveau compilateur JIT (Just-In-Time) pour Java<br />
* GraalVM Native Image, permettant la compilation AOT (Ahead-Of-Time) pour les applications Java<br />
* Truffle Language Implementation framework et GraalVM SDK, fournissant des runtimes pour d'autres langages de programmation<br />
* LLVM Runtime et JavaScript Runtime<br />
<br />
On a en plus la possibilité d'installer des langages et même de définir le nôtre. Actuellement, tous les langages suivants sont compatibles avec Graal (moyennant installations supplémentaires) :<br />
[[File:Languages.png|500px|Listes des langages compatibles avec GraalVM]]<br />
<br />
==Architecture==<br />
<br />
[[File:graal_vm_architecture.jpg | 500px | thumb | right | Architecture de la JVM GraalVM]]<br />
<br />
GraalVM réutilise l'architecture d'OpenJDK (qui est sans grande surprise un JDK), mais avec quelques particularités au niveau de la JVM :<br />
* Il réutilise la VM Hotspot, mais de laquelle on a retiré le JIT Compiler. <br />
* Il bénéficie d'un nouveau compilateur JIT, Graal Compiler, écrit en Java et en dehors de Hotspot. Il a pour mission de transformer du bytecode en code machine (ne pas confondre avec le Java Compiler, plus haut niveau).<br />
* Pour permettre à la JVM Hotspot d'utiliser un compilateur écrit en Java, une couche intermédiaire est nécessaire : la JVM Compiler Interface.<br />
* Tout ce qui doit arriver au compilateur JIT doit être du bytecode. C'est pourquoi les langages non-JVM ne peuvent pas être directement pris en entrée de Graal Compiler. La couche Truffle framework répond à cette problématique. Truffle est un framework open-source qui sert à définir nos propres langages de programmation à travers un AST (Abstract Syntax Tree) et à construire des interpréteurs pour ce dernier. Il est réutilisé dans GraalVM pour définir des implémentations Truffle de Python, Ruby ou encore Javascript.<br />
* La couche Truffle suffisait pour les langages interprétés puisque Truffle construit des interpréteurs. Mais pour les langages LLVM (Low Level Virtual Machine) comme le C, le C++ ou le Fortran, une surcouche est nécessaire. Sulong est une LLVM qui permet de produire du bitcode en s'appuyant sur les fonctionnalités de Truffle.<br />
<br />
==Utilisation==<br />
<br />
===Installation===<br />
<br />
GraalVM est très simple à installer.<br />
<br />
* Naviguez sur le git de GraalVM (https://github.com/graalvm/graalvm-ce-builds/releases) et téléchargez la version de GraalVM compatible avec notre version de Java/OpenJDK, que l'on peut connaître avec la commande :<br />
<pre>java -version</pre><br />
<br />
* Dézippez l'archive à l'endroit de votre choix.<br />
<pre>tar -xzf <graalvm-archive>.tar.gz</pre><br />
<br />
* Configurez votre variable d'environnement PATH:<br />
<pre>export PATH=<graalvm>/bin:$PATH</pre><br />
Si vous souhaitez remplacer votre JDK par GraalVM pour toutes vos applications utilisant Java, vous pouvez changer la variable d'environnement JAVA_HOME.<br />
<pre>export JAVA_HOME=<graalvm></pre><br />
Si vous ne souhaitez pas modifier votre JAVA_HOME, vous pouvez définir une variable d'environnement GRAAL_HOME qui vous sera utile pour ne pas avoir à réécrire le chemin complet de Graal.<br />
Notez également que vous pouvez rendre les commandes au-dessus permanentes en les ajoutant à votre fichier .bashrc ou .zshrc.<br />
<br />
===Exécution===<br />
<br />
Le dossier /bin est similaire à un JDK standard, mais contient des launchers additionnels (en plus de javac pour le Java):<br />
* js, un launcher JavaScript<br />
* node, un launcher Node.js<br />
* lli, un launcher LLVM<br />
En d'autres termes, GraalVM ne comprend que le Java, Node.js (grâce au Javascript Runtime) et les langages LLVM (grâce au LLVM Runtime). Cependant, d'autres launchers peuvent être installés avec la commande :<br />
<pre><br />
gu install <nom_du_langage><br />
</pre><br />
<br />
====Par ligne de commande====<br />
<br />
En règle générale, les commandes d'exécution sont de la forme :<br />
<pre><br />
<nom_du_laucher> <nom_du_programme><br />
</pre><br />
Par exemple :<br />
<pre><br />
node app.js<br />
</pre><br />
Les programmes LLVM doivent êtres compilés avant avec l'outil LLVM Toolchain car le launcher lli ne comprend que du bitcode :<br />
<pre><br />
gu install llvm-toolchain<br />
export LLVM_TOOLCHAIN=$(lli --print-toolchain-path)<br />
$LLVM_TOOLCHAIN/clang hello.c -o hello<br />
lli hello<br />
</pre><br />
====Dans un IDE====<br />
<br />
Dans l'IDE, il suffit de remplacer le path du JRE ou du JDK par le path de GraalVM.<br />
Sous eclipse par exemple, cela peut se faire en allant dans ''Window/Preferences/Java/Installed JREs''.<br />
<br />
[[File:installation_ide.png|500px|Spécification du JDK dans l'IDE]]<br />
<br />
==Limites==<br />
<br />
Même si les promesses de GraalVM, à savoir l'amélioration des performances à l'exécution des langages JVM et le polyglottisme, sont respectées, l'outil d'Oracle rencontre quand même quelques limites :<br />
<br />
* On peut regretter que les langages les plus bas niveaux comme le C soient paradoxalement ceux qui traversent le plus de couches logicielles dans l'architecture de GraalVM. Leur interêt en termes de performance est donc extrêmement diminué puisqu'ils nécessitent de nombreuses opérations pour être transformé en bytecode, bytecode qui est logé à la même enseigne que le bytecode issu de code Java au yeux du compilateur.<br />
<br />
* En règle générale, les performances hors langages JVM sont tout de même loins d'être extraordinaires. L'inter-opérabilité entre langages est fonctionnelles mais coûteuse en ressources.<br />
<br />
* Les langages compris par GraalVM étant en fait des implémentations Truffle de langages et pas les langages en eux-mêmes, il manque les librairies utiles à chaque langage. Il est donc impossible par exemple, d'utiliser ''matplolib'' dans un programme Python. Les programmes en sont plus ou moins réduit à de l'algorithmie selon les capacités natives du langage.<br />
<br />
=Demonstration=<br />
<br />
=Sources=<br />
# <div id="GraalVM">[https://www.graalvm.org/docs/getting-started GraalVM Official documentation: '''Getting Started''']</div><br />
# <div id="GraalVM">[https://www.graalvm.org/docs/introduction GraalVM Official documentation: '''Introduction''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/GraalVM Wikipedia: '''GraalVM''']</div><br />
# <div id="GraalVM">[https://medium.com/@nelvadas/a-la-d%C3%A9couverte-de-graalvm-5adbe0487624 Elvadas Nono : '''A la découverte de GraalVM (2020)''']</div><br />
# <div id="GraalVM">[https://www.theserverside.com/definition/GraalVM ServerSide: '''Definition of GraalVM''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Machine_virtuelle_Java Wikipedia: '''Machine Virtuelle Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/HotSpot Wikipedia: '''Hotspot''']</div><br />
# <div id="GraalVM">[https://en.wikipedia.org/wiki/Maxine_Virtual_Machine_Kit Wikipedia: '''Maxine''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Java_Development_Kit Wikipedia: '''Java Development Toolkit''']</div><br />
# <div id="GraalVM">[https://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java Wikipedia: '''Environnement d'exécution Java''']</div><br />
# <div id="GraalVM">[https://dev.to/abdulfousan/graalvm-polyglot-virtual-machine-4mn2 Abdul Fousan: '''GraalVM Polyglot Virtual Machine''']</div><br />
# <div id="GraalVM">[https://blog.plan99.net/graal-truffle-134d8f28fb69 Mike Hearn: '''GraalVM and Truffle''']</div><br />
# <div id="GraalVM">[https://www.trufflesuite.com/docs/truffle/overview Truffle Official documentation: '''GraalVM and Truffle''']</div><br />
<br />
=Veille Technologique 2020=<br />
* Année : [[VT2020|VT2021]]<br />
* Sujet : GraalVM<br />
* Slides : [[Media:GraalVM.pdf|Slides]]<br />
* Auteurs : [[User:Alexis.Rollin]]</div>Alexis.Rollinhttps://air.imag.fr/index.php?title=File:Languages.png&diff=48314File:Languages.png2020-11-14T16:40:42Z<p>Alexis.Rollin: </p>
<hr />
<div></div>Alexis.Rollin