diff --git a/src/main/java/org/parisjug/eventpublisher/eventpage/HtmlEventPage.java b/src/main/java/org/parisjug/eventpublisher/eventpage/HtmlEventPage.java index a45c788..97470e0 100644 --- a/src/main/java/org/parisjug/eventpublisher/eventpage/HtmlEventPage.java +++ b/src/main/java/org/parisjug/eventpublisher/eventpage/HtmlEventPage.java @@ -47,26 +47,121 @@ public String getDetails() { } public String getBuffet() { - return doc.select("#buffet").first().html().replaceAll("href=\"/", "href=\"https://www.parisjug.org/"); + Elements buffet = doc.select("#buffet"); + if (buffet.isEmpty()) { + Elements detailh3 = doc.select("#détails"); + if(detailh3.isEmpty()) { + return ""; + } + String buffethtml = ""; + Elements elements = detailh3.parents().first().children(); + // for each element, in elements.stream() start at h3 with id contains buffet and append html until next h3 + boolean start = false; + for(int i = 0; i < elements.size(); i++) { + if(elements.get(i).tagName().equals("h3") && elements.get(i).id().contains("buffet")) { + start = true; + } + if(elements.get(i).tagName().equals("h3") && !elements.get(i).id().contains("buffet")) { + start = false; + continue; + } + if(start) { + buffethtml += elements.get(i).outerHtml(); + } + } + return buffethtml.replaceAll("href=\"/", "href=\"https://www.parisjug.org/"); + } + return buffet.first().html().replaceAll("href=\"/", "href=\"https://www.parisjug.org/"); } @Override public String getPart1() { - return doc.select("#part1").first().html().replaceAll("href=\"/", "href=\"https://www.parisjug.org/"); + Elements part1 = doc.select("#part1"); + if(part1.isEmpty()) { + Elements detailh3 = doc.select("#détails"); + if(detailh3.isEmpty()) { + return ""; + } + String part1html = ""; + Elements elements = detailh3.parents().first().children(); + // for each element, in elements.stream() start at h3 with id détail and append html until next h3 + boolean start = false; + for(int i = 0; i < elements.size(); i++) { + if(elements.get(i).tagName().equals("h2") && elements.get(i).id().equals("détails")) { + start = true; + continue; + } + if(elements.get(i).tagName().equals("h2") && !elements.get(i).id().equals("détails")) { + start = false; + continue; + } + if(elements.get(i).tagName().equals("h3") && elements.get(i).id().contains("buffet")) { + start = false; + continue; + } + if(start) { + part1html += elements.get(i).outerHtml(); + } + } + return part1html.replaceAll("href=\"/", "href=\"https://www.parisjug.org/"); + + } + return part1.first().html().replaceAll("href=\"/", "href=\"https://www.parisjug.org/"); } @Override public String getPart2() { Elements part2 = doc.select("#part2"); if (part2.isEmpty()) { - return ""; + Elements detailh3 = doc.select("#détails"); + if(detailh3.isEmpty()) { + return ""; + } + String part2html = ""; + Elements elements = detailh3.parents().first().children(); + // for each element, in elements.stream() start at h3 with id contains buffet and append html until next h3 with id contains "3ème-mi-temps" + boolean start = false; + boolean buffet = false; + for(int i = 0; i < elements.size(); i++) { + if(elements.get(i).tagName().equals("h3") && buffet) { + start = true; + } + if(elements.get(i).tagName().equals("h3") && elements.get(i).id().contains("buffet")) { + buffet = true; + continue; + } + if(elements.get(i).tagName().equals("h3") && elements.get(i).id().contains("3ème-mi-temps")) { + start = false; + continue; + } + if(start) { + part2html += elements.get(i).outerHtml(); + } + } + return part2html.replaceAll("href=\"/", "href=\"https://www.parisjug.org/"); } return part2.first().html().replaceAll("href=\"/", "href=\"https://www.parisjug.org/"); } @Override public String getDateTime() { - return doc.select("#datetime").first().text(); + Elements dateTimeElement = doc.select("#datetime"); + if (dateTimeElement.isEmpty()) { + // in the section starting with h2 id="date-et-lieu", get the first ul li element + Elements elements = doc.select("#date-et-lieu").parents().first().children(); + for(int i = 0; i < elements.size(); i++) { + if(elements.get(i).tagName().equals("ul")) { + Elements lis = elements.get(i).children(); + for(int j = 0; j < lis.size(); j++) { + if(lis.get(j).tagName().equals("li")) { + return lis.get(j).text(); + } + } + } + } + + } + return dateTimeElement.first().text(); } @Override @@ -88,7 +183,7 @@ public String getEndTime() { if (isVirtual()) { eventDateTime = eventDateTime.plusMinutes(75); } else { - eventDateTime = eventDateTime.plusMinutes(165); + eventDateTime = eventDateTime.plusMinutes(180); } return eventDateTime.format(DateTimeFormatter.ISO_INSTANT).replace(":", "").replace("-", ""); } @@ -109,7 +204,19 @@ public String getLongTitle() { @Override public String getLocation() { - String attr = doc.select("#location a").first().attr("href"); + Elements locationElement = doc.select("#location a"); + if (locationElement.isEmpty()) { + // in the section starting with h2 id="date-et-lieu", get the second li element + Elements elements = doc.select("#date-et-lieu").parents().first().getElementsByTag("li"); + if(elements.size() > 1) { + locationElement = elements.get(1).getElementsByTag("a"); + } + else { + return ""; + } + } + + String attr = locationElement.first().attr("href"); if (attr.startsWith("/")) { attr = "https://www.parisjug.org" + attr; } @@ -141,12 +248,7 @@ public String getIntro() { @Override public boolean isVirtual() { - if (doc.select("#location").first().text().contains("Dans les locaux de notre chaîne")) { - return true; - } - ; - - return false; + return getTitle().contains("Soirée Virtuelle"); } } diff --git a/src/test/java/org/parisjug/eventpublisher/eventpage/EventPageTest.java b/src/test/java/org/parisjug/eventpublisher/eventpage/EventPageTest.java index 1eabae3..26ee06a 100644 --- a/src/test/java/org/parisjug/eventpublisher/eventpage/EventPageTest.java +++ b/src/test/java/org/parisjug/eventpublisher/eventpage/EventPageTest.java @@ -7,33 +7,33 @@ import java.io.File; -import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import io.quarkus.test.junit.QuarkusTest; @QuarkusTest -public class EventPageTest { +class EventPageTest { @Test - public void test_working_page() { - File file = new File(this.getClass().getResource("parisjug-20201208.html").getFile()); + void test_virtual_event_page() { + File file = new File(this.getClass().getResource("newsite_parisjug-20201208.html").getFile()); EventPage page = EventPage.fromHtmlLocalFile(file); - // EventPage page = - // EventPage.fromUrl("https://www.parisjug.org/xwiki/wiki/oldversion/view/Meeting/20201208"); - assertNotNull(page, "should be able to load from a xwiki html file"); + assertNotNull(page, "should be able to load from a HUGO html file"); // title - assertEquals("Le Java nouveau est arrivé : Java SE 15", page.getTitle(), "Title from page"); + assertEquals("Soirée Virtuelle : Le Java nouveau est arrivé : Java SE 15", page.getTitle(), "Title from page"); + + String details = page.getDetails(); // details - assertTrue(page.getDetails().contains("18h45 à 19h00 : Accueil")); - assertFalse(page.getDetails().contains("Code de Conduite")); + assertTrue(details.contains("18h45 à 19h00 : Accueil")); + assertTrue(details.contains("Jean-Michel")); + assertFalse(details.contains("Replays")); assertTrue( page.getDetails() - .contains("https://www.parisjug.org/xwiki/wiki/oldversion/view/Speaker/DoudouxJeanMichel"), - "should contain link https://www.parisjug.org/xwiki/wiki/oldversion/view/Speaker/DoudouxJeanMichel"); + .contains("https://www.parisjug.org/speakers/jean-michel-doudoux"), + "should contain link https://www.parisjug.org/speakers/jean-michel-doudoux"); // is virtual ? assertTrue(page.isVirtual(), "should be virtual"); @@ -56,58 +56,98 @@ public void test_working_page() { } @Test - public void should_provide_clear_error_if_missing_title() { - File file = new File(this.getClass().getResource("parisjug-20201208_missing_title.html").getFile()); + public void test_inRealLifeEvent_with_div_ids() { + File file = new File(this.getClass().getResource("parisjug-iRL-div-id-20231114.html").getFile()); + EventPage page = EventPage.fromHtmlLocalFile(file); + assertNotNull(page, "should be able to load from a HUGO html file"); - EventPageCheckException ex = Assertions.assertThrows(EventPageCheckException.class, () -> { - page.getTitle(); - }); - assertEquals( - "The page should contain an element with the id \"title\". For instance:
Quarkus World Tour
.", - ex.getMessage()); + // title + assertEquals("Soirée Loom", page.getTitle(), "Title from page"); - } + // details + String details = page.getDetails(); + assertTrue(details.contains("19h00 : Accueil")); + assertFalse(page.getDetails().contains("Code de Conduite")); + assertTrue( + page.getDetails() + .contains("https://www.parisjug.org/speakers/david-pequegnot"), + "should contain link https://www.parisjug.org/speakers/david-pequegnot"); + + // date time + assertEquals("Mardi 14 Novembre 2023 à 19h00", page.getDateTime(), "Date and time"); + + // is virtual ? + assertFalse(page.isVirtual(), "should be in Real life"); + // start time + assertEquals("20231114T180000Z", page.getStartTime(), "start time"); + + // end time + assertEquals("20231114T210000Z", page.getEndTime(), "end time"); + + // long title + assertEquals("Paris JUG - Soirée Loom (2023/11/14)", + page.getLongTitle(), "Long title"); + + // location + assertEquals("https://www.parisjug.org/location/sfeir", page.getLocation(), "location"); + + } @Test public void test_inRealLifeEvent() { - File file = new File(this.getClass().getResource("parisjug-iRL-20211214.html").getFile()); + File file = new File(this.getClass().getResource("parisjug-iRL-20230110-yb.html").getFile()); EventPage page = EventPage.fromHtmlLocalFile(file); - // EventPage page = - // EventPage.fromUrl("https://www.parisjug.org/xwiki/wiki/oldversion/view/Meeting/20201208"); - assertNotNull(page, "should be able to load from a xwiki html file"); + assertNotNull(page, "should be able to load from a HUGO html file"); // title - assertEquals("Développe dans ton cloud pour le cloud - Gitpod et Eclipse Che", page.getTitle(), "Title from page"); + assertEquals("Soirée Young Blood X", page.getTitle(), "Title from page"); + + // assert page.getPart1 should contains "19h30 : 204VS404 le duel du bon code http" but not "21h20 : Tech Lead REX" + assertTrue(page.getPart1().contains("19h30 : 204VS404 le duel du bon code http"), "part1 should contains 19h30 : 204VS404 le duel du bon code http"); + assertFalse(page.getPart1().contains("21h20 : Tech Lead REX"), "part1 should not contains 21h20 : Tech Lead REX"); + assertFalse(page.getPart1().contains("20h30 à 21h00 : Buffet"), "part1 should not contains 20h30 à 21h00 : Buffet"); + + // assert page.getPart2 should contains "21h20 : Tech Lead REX" but not "19h30 : 204VS404 le duel du bon code http" + assertTrue(page.getPart2().contains("21h20 : Tech Lead REX"), "part2 should contains 21h20 : Tech Lead REX"); + assertFalse(page.getPart2().contains("19h30 : 204VS404 le duel du bon code http"), "part2 should not contains 19h30 : 204VS404 le duel du bon code http"); + assertFalse(page.getPart2().contains("figure"), "part2 should not contains figure (part of buffet)"); + // details - assertTrue(page.getDetails().contains("19h15 à 19h30 : Accueil")); + String details = page.getDetails(); + assertTrue(details.contains("18h45 à 19h00: Accueil")); + assertTrue(details.contains("20h30 à 21h00 : Buffet"), "details should contains 20h30 à 21h00 : Buffet"); assertFalse(page.getDetails().contains("Code de Conduite")); assertTrue( page.getDetails() - .contains("https://www.parisjug.org/xwiki/wiki/oldversion/view/Speaker/HoracioGonzalez"), - "should contain link https://www.parisjug.org/xwiki/wiki/oldversion/view/Speaker/HoracioGonzalez"); + .contains("Pierre Cheucle"), + "should contain speaker Pierre Cheucle"); // date time - assertEquals("Mardi 14 décembre 2021 à 19h15", page.getDateTime(), "Date and time"); + assertEquals("Mardi 10 janvier 2023 à 19h00", page.getDateTime(), "Date and time"); // is virtual ? assertFalse(page.isVirtual(), "should be in Real life"); // start time - assertEquals("20211214T181500Z", page.getStartTime(), "start time"); + assertEquals("20230110T180000Z", page.getStartTime(), "start time"); // end time - assertEquals("20211214T210000Z", page.getEndTime(), "end time"); + assertEquals("20230110T210000Z", page.getEndTime(), "end time"); // long title - assertEquals("Paris JUG - Soirée en présentiel : Développe dans ton cloud pour le cloud - Gitpod et Eclipse Che (2021/12/14)", + assertEquals("Paris JUG - Soirée Young Blood X (2023/01/10)", page.getLongTitle(), "Long title"); // location - assertEquals("https://www.parisjug.org/xwiki/wiki/oldversion/view/Location/Datadog", page.getLocation(), "location"); + assertEquals("https://www.parisjug.org/location/agorapulse/", page.getLocation(), "location"); + + + + } } \ No newline at end of file diff --git a/src/test/resources/org/parisjug/eventpublisher/eventpage/newsite_parisjug-20201208.html b/src/test/resources/org/parisjug/eventpublisher/eventpage/newsite_parisjug-20201208.html new file mode 100644 index 0000000..b110159 --- /dev/null +++ b/src/test/resources/org/parisjug/eventpublisher/eventpage/newsite_parisjug-20201208.html @@ -0,0 +1,279 @@ + + + + + + + + Soirée Virtuelle : Le Java nouveau est arrivé : Java SE 15 - Paris Java User Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+
+
+
+

Soirée Virtuelle : Le Java nouveau est arrivé : Java SE 15

+
+
+

Date et lieu

+ +

Détails

+

18h45 à 19h00 : Accueil

+

19h00 à 20h00 : Le Java nouveau + est arrivé : Java SE 15

+

Java a fêté ses 25 ans cette année. En application du rythme de releases semestrielles, + Java 15 a été diffusé le 15 septembre 2020. + Le but de cette session est de faire un tour détaillé des dernières nouveautés :

+
    +
  • les nouvelles fonctionnalités
  • +
  • les fonctionnalités mises à jour
  • +
  • les fonctionnalités qui deviennent standard ou production ready
  • +
  • les fonctionnalités qui restent en preview ou en incubator
  • +
  • les fonctionnalités qui sont dépréciées ou supprimées
  • +
+

Par Jean-Michel + Doudoux

+

Replays

Visionner les replays de l'évènement sur notre chaîne YouTube: +

Sponsors de l'évènement

+

Platinium

+ +

Gold

+ +

Code de Conduite

+

Les conférences Paris JUG se veulent des expériences sans harcèlement, quel que soit + votre sexe, votre identité sexuelle, votre âge, votre orientation sexuelle, votre + handicap, votre apparence physique, votre poids, votre race ou votre religion. + Nous ne tolérons aucun harcèlement des participants à la conférence, quel que soit sa + forme. + Les expressions et les images à connotation sexuelle ne sont pas appropriées lors des + événements ou sur les médias en ligne. + Les participants à une conférence qui violent ces règles peuvent être sanctionnés, voire + exclus de la conférence.

+
+
+ +
+
+
+
+ +
+ +
+ + + + + \ No newline at end of file diff --git a/src/test/resources/org/parisjug/eventpublisher/eventpage/parisjug-20201208.html b/src/test/resources/org/parisjug/eventpublisher/eventpage/parisjug-20201208.html deleted file mode 100644 index ea8516b..0000000 --- a/src/test/resources/org/parisjug/eventpublisher/eventpage/parisjug-20201208.html +++ /dev/null @@ -1,660 +0,0 @@ - - - - -Soirée Virtuelle: Le Java nouveau est arrivé : Java SE 15 (2020/12/08) (Meeting.20201208) - XWiki - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
-
-
-
-
-
-
-
-
-
-

Soirée Virtuelle: Le Java nouveau est arrivé : Java SE 15 (2020/12/08)

-
-Last modified by sunix sunix on 2020/11/30 22:59 -
-
-
-
- Edit - - -
-
-
-
-
-
-

Le Java nouveau est arrivé : Java SE 15

Date et lieu

Edit

Détails

Edit

-

-

-18h45 à 19h00 : Accueil -

-19h00 à 20h00 : Le Java nouveau est arrivé : Java SE 15

Java a fêté ses 25 ans cette année. En application du rythme de releases semestrielles, Java 15 a été diffusé le 15 septembre 2020. -
Le but de cette session est de faire un tour détaillé des dernières nouveautés :

  • les nouvelles fonctionnalités
  • les fonctionnalités mises à jour
  • les fonctionnalités qui deviennent standard ou production ready
  • les fonctionnalités qui restent en preview ou en incubator
  • les fonctionnalités qui sont dépréciées ou supprimées

par Jean-Michel Doudoux

-

Sponsors de l'association

Edit
-
  • Platinium
-
Novencia -renault-digitalSofteam -
-RedHat -Mirakl -
-Arolla -Codeworks -Oxiane
-
-
  • Gold
-
-Maplr -
-

Code de Conduite

EditLes conférences ParisJUG se veulent des expériences sans harcèlement, quel que soit votre sexe, votre identité sexuelle, votre âge, votre orientation sexuelle, votre handicap, votre apparence physique, votre poids, votre race ou votre religion. Nous ne tolérons aucun harcèlement des participants à la conférence, quel que soit sa forme. Les expressions et les images à connotation sexuelle ne sont pas appropriées lors des événements ou sur les médias en ligne. Les participants à une conférence qui violent ces règles peuvent être sanctionnés, voire exclus de la conférence. -
-
-
-
-
-
-Tags: - -
-
-
Created by sunix sunix on 2020/11/29 13:58
-
-
-
-
-
-    
-
- -
-
-
-

No comments for this document

-
-
-Add comment -
sunix sunix
- - - - - -
- - -
-
- -Cancel -
-
-
-
- - - -
- -
-
-

Evènements partenaires

-Jlove -

-

- -
-
-

Sponsors Platinium

- - - - - - - - - - - - - -
-renault-digital -
-mirakl -
-Arolla
-Redhat -
-Oxiane
-Softeam
-Novencia
-Codeworks
-

Sponsors Gold

-

- - - -
Maplr
-

-

Sponsors Platinium

- - - - -
JetBrains
PluralSight
-
-
-
-
This wiki is licensed under a Creative Commons 2.0 license
-
XWiki Enterprise 6.2.4 - Documentation
-
-
- \ No newline at end of file diff --git a/src/test/resources/org/parisjug/eventpublisher/eventpage/parisjug-20201208_missing_title.html b/src/test/resources/org/parisjug/eventpublisher/eventpage/parisjug-20201208_missing_title.html deleted file mode 100644 index 3523777..0000000 --- a/src/test/resources/org/parisjug/eventpublisher/eventpage/parisjug-20201208_missing_title.html +++ /dev/null @@ -1,660 +0,0 @@ - - - - -Soirée Virtuelle: Le Java nouveau est arrivé : Java SE 15 (2020/12/08) (Meeting.20201208) - XWiki - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
-
-
-
-
-
-
-
-
-
-

Soirée Virtuelle: Le Java nouveau est arrivé : Java SE 15 (2020/12/08)

-
-Last modified by sunix sunix on 2020/11/30 22:59 -
-
-
-
- Edit - - -
-
-
-
-
-
-

Le Java nouveau est arrivé : Java SE 15

Date et lieu

Edit

Détails

Edit

-

-

-18h45 à 19h00 : Accueil -

-19h00 à 20h00 : Le Java nouveau est arrivé : Java SE 15

Java a fêté ses 25 ans cette année. En application du rythme de releases semestrielles, Java 15 a été diffusé le 15 septembre 2020. -
Le but de cette session est de faire un tour détaillé des dernières nouveautés :

  • les nouvelles fonctionnalités
  • les fonctionnalités mises à jour
  • les fonctionnalités qui deviennent standard ou production ready
  • les fonctionnalités qui restent en preview ou en incubator
  • les fonctionnalités qui sont dépréciées ou supprimées

par Jean-Michel Doudoux

-

Sponsors de l'association

Edit
-
  • Platinium
-
Novencia -renault-digitalSofteam -
-RedHat -Mirakl -
-Arolla -Codeworks -Oxiane
-
-
  • Gold
-
-Maplr -
-

Code de Conduite

EditLes conférences ParisJUG se veulent des expériences sans harcèlement, quel que soit votre sexe, votre identité sexuelle, votre âge, votre orientation sexuelle, votre handicap, votre apparence physique, votre poids, votre race ou votre religion. Nous ne tolérons aucun harcèlement des participants à la conférence, quel que soit sa forme. Les expressions et les images à connotation sexuelle ne sont pas appropriées lors des événements ou sur les médias en ligne. Les participants à une conférence qui violent ces règles peuvent être sanctionnés, voire exclus de la conférence. -
-
-
-
-
-
-Tags: - -
-
-
Created by sunix sunix on 2020/11/29 13:58
-
-
-
-
-
-    
-
- -
-
-
-

No comments for this document

-
-
-Add comment -
sunix sunix
- - - - - -
- - -
-
- -Cancel -
-
-
-
- - - -
- -
-
-

Evènements partenaires

-Jlove -

-

- -
-
-

Sponsors Platinium

- - - - - - - - - - - - - -
-renault-digital -
-mirakl -
-Arolla
-Redhat -
-Oxiane
-Softeam
-Novencia
-Codeworks
-

Sponsors Gold

-

- - - -
Maplr
-

-

Sponsors Platinium

- - - - -
JetBrains
PluralSight
-
-
-
-
This wiki is licensed under a Creative Commons 2.0 license
-
XWiki Enterprise 6.2.4 - Documentation
-
-
- \ No newline at end of file diff --git a/src/test/resources/org/parisjug/eventpublisher/eventpage/parisjug-iRL-20211214.html b/src/test/resources/org/parisjug/eventpublisher/eventpage/parisjug-iRL-20211214.html deleted file mode 100644 index 3897f07..0000000 --- a/src/test/resources/org/parisjug/eventpublisher/eventpage/parisjug-iRL-20211214.html +++ /dev/null @@ -1,452 +0,0 @@ - - - - -Soirée en présentiel : Développe dans ton cloud pour le cloud - Gitpod et Eclipse Che (Meeting.20211214) - XWiki - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
-
-
-
-
-
-
-
-
-
-

Soirée en présentiel : Développe dans ton cloud pour le cloud - Gitpod et Eclipse Che

-
-Last modified by sunix sunix on 2021/12/06 19:44 -
-
-
-
- - -
-
-
-
-
-
-

Développe dans ton cloud pour le cloud - Gitpod et Eclipse Che

Date et lieu

  • Mardi 14 décembre 2021 à 19h15
  • Dans les locaux de Datadog

Détails

-

19h15 à 19h30 : Accueil

19h30 à 20h30 : Gitpod - de la Terre à la Lune pour atterrir dans le Cloud

-

-Comment l'envie de vacances en plein air peut conduire au Cloud ? -Comment devoir organiser un atelier technique pour 100 personnes peut passer d'une tâche redoutable à quelque chose de simple ? -Comment un projet open-source peut abaisser les barrières d'entrée pour des nouveaux contributeurs au point qu'on puisse commencer à contribuer avec un simple clic ? -La réponse à ces questions est GitPod, un outil qui vous permettra d'avoir accès à un environnement de développement très complet depuis n'importe quel navigateur.

  • première tentative de développement en mobilité : un ipad, des apps et un raspberry
  • seconde tentative : découverte de Gitpod et usage pour des articles sur tinygo
  • définition du concept derrière Gitpod, quel est le service fourni ?
  • comment y accéder : détail des différents moyens d'accéder à l'offre de Gitpod depuis un repository git
  • le concept de workspace, coeur de Gitpod : le container mis à disposition, ses possibilité de paramètrages
  • comparatif avec la solution Github Codespaces
  • les outils additionnels : utilisation du VSCode de votre poste, le local companion, l'intégration Jetbrains
  • l'installation de GitPod on-premises sur un cluster Kubernetes (ou même sur un petit Raspberry Pi avec un K3s)
Une série de démos viendra illustrer de manière concrète chacun des points évoqués, de manière progressive :
  • présentation de la doc officielle, riche et essentielle
  • accéder à Gitpod depuis un repository GitLab et un repository Github : présentation de tous les éléments du workspace
  • le VSCode en ligne, ses menus spécifiques
  • démonstration de l'usage du container par quelques manipulations
  • à partir d'un repository sans configuration Gitpod : les mécaniques de gestion des ports et URL
  • automatisation du repository précédent avec explication de l'usage de la cli de gitpod
  • utilisation d'un repository sur une technologie nécessitant une image docker personnalisée :
  • mise au point depuis gitpod de cette image docker
  • démonstration d'un projet basé sur cette image.
Que vous soyez :
  • adepte de GitLab, de Github ou de Bitbucket
  • organisateur d'ateliers qui aimeraient commencer à l'heure avec tous les outils installés sur tous les postes
  • gestionnaire d'un projet OpenSource qui aimerait faciliter la contribution de toutes et tous
  • un maker avec des projets embarqués ou des jeux en wasm -Vous repartirez avec toutes les informations pour vous lancer à votre tour.

-

par Horacio Gonzalez et Thierry Chantier

-
-

-20h30 à 21h00 : Buffet -
-
-Buffet offert par : datadog

-

-

21h00 à 21h30 : Che un beau roman, Che une belle histoire

-

-Eclipse Che est un peu la grande sœur de Gitpod. Iels sont nés de la même communauté (celle qui cache le soleil). Comme dans toutes les fratries, il y a parfois des embrouilles mais aussi et surtout, des bons moments et de bons souvenirs. -Voilà 8 ans que je contribue au projet Eclipse Che et je l’utilise quotidiennement pour tous mes développements. En termes de cas d’utilisation et de fonctionnalités, Che et Gitpod sont assez semblables. Ainsi, plutôt que de vous refaire un talk similaire à celui de Gitpod, je vais vous raconter la belle histoire de Che, ses différentes évolutions et ce qu’iel est devenu(e). Si vous l’avez déjà connu dans le passé, Che a bien changé. -Il y aura bien sûr quelques sessions de live demo pendant lesquelles vous découvrirez comment j’utilise Che quotidiennement. -

-

par Sun Tan

21h30 à 22h00 : Gitpod et Eclipse Che, la table ronde

-

-Pour finir, nous terminerons sur une petite table ronde et discussions ouvertes. -

-

par Horacio Gonzalez, par Sun Tan et Thierry Chantier

-

-22h00 à ... : 3ème mi-temps des juggers dans un lieu sélectionné par votre Crew ;-) -

Sponsors de l'association


-
  • Platinium
-
Novencia -renault-digital -Softeam -
-RedHat -Mirakl -
-Arolla -Codeworks -Oxiane
-
-
  • Gold
-
-Maplr -
-

Code de Conduite

Les conférences ParisJUG se veulent des expériences sans harcèlement, quel que soit votre sexe, votre identité sexuelle, votre âge, votre orientation sexuelle, votre handicap, votre apparence physique, votre poids, votre race ou votre religion. Nous ne tolérons aucun harcèlement des participants à la conférence, quel que soit sa forme. Les expressions et les images à connotation sexuelle ne sont pas appropriées lors des événements ou sur les médias en ligne. Les participants à une conférence qui violent ces règles peuvent être sanctionnés, voire exclus de la conférence. -
-
-
-
-
-
-Tags: -
-
-
Created by sunix sunix on 2021/12/05 17:25
-
-
-
-
-
-    
-
- -
- - - - -
- -
-
- -
-
-

Sponsors Platinium

- - - - - - - - - - - - - -
-renault-digital -
-mirakl -
-Arolla
-Redhat -
-Oxiane
-Softeam
-Novencia
-Codeworks
-

Sponsors Gold

- - - - -
Maplr
-

-

Sponsors Platinium

- - -
JetBrains
-
-
-
-
This wiki is licensed under a Creative Commons 2.0 license
-
XWiki Enterprise 6.2.4 - Documentation
-
-
- \ No newline at end of file diff --git a/src/test/resources/org/parisjug/eventpublisher/eventpage/parisjug-iRL-20230110-yb.html b/src/test/resources/org/parisjug/eventpublisher/eventpage/parisjug-iRL-20230110-yb.html new file mode 100644 index 0000000..0781576 --- /dev/null +++ b/src/test/resources/org/parisjug/eventpublisher/eventpage/parisjug-iRL-20230110-yb.html @@ -0,0 +1,54 @@ +Soirée Young Blood X - Paris Java User Group +

Soirée Young Blood X

Date et lieu

Les sessions sont filmées et le public est photographié. Les photographies sont ensuite publiées sur le site du Paris JUG et autres médias de l’associations Paris JUG. En acceptant cette invitation, vous autorisez le Paris JUG à publier votre photo sur les médias sus-mentionnés.

Comme chaque année depuis 10 ans, notre session du mois de janvier sera notre session Young Blood ! +Le principe du Young Blood est que les présentations sont faites par des personnes qui n’ont jamais présenté auparavant, du moins en public. +Notre but est de donner une première opportunité aux personnes qui souhaitent se lancer et de les aider dans leurs premiers pas. +Parler en public peut paraître intimidant. +Afin de les aider, nous leur proposons une présentation de 20mn, et un accompagnement dans la préparation avec des séances d’entraînement en privé et en petit comité.

Notre soirée Young Blood se déroule toujours dans une très bonne ambiance, nous organisons un vote du public et la meilleure présentation est donnée en quickie à Devoxx France.

Consulter toutes nos soirées Young Blood.

Détails

18h45 à 19h00: Accueil

19h30 : 204VS404 le duel du bon code http

En API REST, la maturité avançant tout semble être établie en terme de norme. +Pourtant il y a encore un débat dans le cas du DELETE quand la ressource n’existe pas. Alors 404 ou 204 ? +Pour répondre de manière sérieuse je pars de la RFC 7231. +J’étudie le cas coté client et coté serveur. +Ce talk sera un format revisité de cette vidéo. Je rajouterai du livecoding en prenant le client http openFeign comme exemple pour appuyer mon propos et rendre le talk vivant.

Par Christophe Agoero

19h50 : Collections Java : Exploiter la puissance des Lambda

Format live coding : Petite tour d’horizon de l’utilisation des expressions lambda avec les collections.

  • Manipulation des données avec (map, peak, flatmap)
  • Tris et filtres
  • Collecte de données (En collection simple, groupée (group by))
  • Agrégations (Reduce)

Par Hicham Bellahcene

20h10 : Faire du web ou du mobile ? Et pourquoi pas les deux !

Chez Agorapulse, nous avons relevé un défi : créer une application iOS et Android à moindre effort. +Mais comment ? +Grâce à l’étonnante similarité entre le développement web sur Angular et mobile sur Ionic, un framework hybride. +Notre recette : un backend partagé, un store partagé côté frontend, des releases automatisées… +Et surtout, une bonne collaboration entre des développeurs qui parlent le même language. +Nous allons partager avec vous nos expériences et nos réussites, ainsi que les pièges à éviter.

Par Coline Therial

20h30 à 21h00 : Buffet

21h00 : Une API OpenGL pour le CPU qui défie tous les dilemmes de compatibilité

La JVM a permis depuis le début des années 2000 de développer des applications de rendu 3D. +Initiés par Sun Microsystem, poursuivis par la communauté open source, les bindings natif OpenGL ont permis de construire des applications scientifiques open source comme commerciales. +L’accès à OpenGL se fragilise avec le temps et la multiplication des versions de JVM, d’OS, et d’architectures matérielles. +Lors de cette session nous expliquerons les raisons de ces difficultés mais nous pencherons surtout sur les possibilités pour les contourner : rendu 3D software par le CPU notamment, mais également rendu 3D hardware en accédant à OpenGL par l’API Foreign Function.

Par Martin Pernollet

21h20 : Tech Lead REX

Tech Lead est un rôle multifacette pour lequel il existe de nombreuses définitions en fonction de l’entreprise, de la taille des projets ou encore du niveau d’expérience du développeur. +Est-ce un architecte ? Un développeur expert ? Un manager ? +Dans ce talk, je vous partagerai ma vision du Tech Lead, en puisant dans mon expérience de ces dernières années.

Par Pierre Cheucle

21h40: Vote et remise des diplômes

22h00 : 3ème mi-temps des juggers

Replays

Visionner les replays de l'évènement sur notre chaîne YouTube:

Feedback

Code de Conduite

Les conférences Paris JUG se veulent des expériences sans harcèlement, quel que soit votre sexe, votre identité sexuelle, votre âge, votre orientation sexuelle, votre handicap, votre apparence physique, votre poids, votre race ou votre religion. +Nous ne tolérons aucun harcèlement des participants à la conférence, quel que soit sa forme. +Les expressions et les images à connotation sexuelle ne sont pas appropriées lors des événements ou sur les médias en ligne. +Les participants à une conférence qui violent ces règles peuvent être sanctionnés, voire exclus de la conférence.

\ No newline at end of file diff --git a/src/test/resources/org/parisjug/eventpublisher/eventpage/parisjug-iRL-div-id-20231114.html b/src/test/resources/org/parisjug/eventpublisher/eventpage/parisjug-iRL-div-id-20231114.html new file mode 100644 index 0000000..ce3b7a1 --- /dev/null +++ b/src/test/resources/org/parisjug/eventpublisher/eventpage/parisjug-iRL-div-id-20231114.html @@ -0,0 +1,323 @@ + + + + + + + + Soirée Loom - Paris Java User Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+
+
+
+

Soirée Loom

+
+
+

Date et lieu

+ +
+

Les sessions sont filmées et le public est photographié. Les photographies sont + ensuite publiées sur le site du Paris JUG et autres médias de l’associations + Paris JUG. En acceptant cette invitation, vous autorisez le Paris JUG à publier + votre photo sur les médias sus-mentionnés.

+
+
+

Les inscrits à l’évènement non présents 5 minutes + avant le début de la session, soit à 19h25, verront leurs + places remises à disposition.
Les non inscrits + à l’évènement ne pourront donc y assister que sous réserve de places + disponibles sur place 5 min avant le début de la + session, soit à 19h25.
L’inscription implique de posséder une + adresse mail valide sur laquelle vous recevrez une demande de confirmation à + laquelle il vous faudra répondre afin de valider votre inscription. + Toute inscription non confirmée ne sera pas prise en compte ! +

+
+

Détails

+
+

19h00 : Accueil

+

19h30 : Les promesses de Loom… + Soyez au rendez-vous

+

Le projet Loom fait parler de lui depuis plusieurs mois. Il marque une avancée + technique majeure de la plateforme Java en améliorant le système de concurrence à + travers 3 nouvelles fonctionnalités : les Virtual Threads (JEP 444), Structured + Concurrency (JEP 453) et ScopedValue (JEP 446). La JEP 444 est d’ores et déjà stable + avec la nouvelle LTS, Java 21, depuis septembre. C’est donc pour maintenant !

+

Cette perspective n’est pas sans poser de questions :

+
    +
  • Les promesses d’amélioration techniques seront-elles (toujours) au rendez-vous ? +
  • +
  • Comment l’écosystème va-t-il s’adapter ?
  • +
  • Quels impacts sur les frameworks ?
  • +
  • Faudra-t-il modifier le code métier ?
  • +
  • La programmation asynchrone va-t-elle devenir inutile ?
  • +
+

À travers cette présentation, nous prendrons le point de vue développeur et + architecte Java pour faire un tour d’horizon complet. Nous vous partagerons nos + résultats de benchmarks ainsi que des exemples de code. Bref, nous verrons comment + préparer concrètement l’arrivée de Loom dans nos projets Java pour les années à + venir !

+

Par David Pequegnot + et Jean-François + James

+
+
+

20h30 : Buffet + offert par Sfeir

+
+
+

+ 21h00 : Loom : de l’observabilité du virtuel à une réelle adoption et mise en + production

+

En poussant les limites runtime de Java à son extrême, Loom nécessite une + observabilité adaptée : quels sont les moyens disponibles à ce jour ? Quoi mesurer + et comment ?

+

Passons en revue l’état de l’art dans le domaine sur Java 21 et couvrons + quels cas de figure illustrés par des rapports d’analyse réalisés avec Jeyzer. +

+

Sur la base de ces points, discutons enfin d’une adoption pragmatique des + threads virtuels au sein de projets, en vue d’une mise en production.

+

Rejoignez-nous pour cette passionnante session d’exploration qui nous éclairera + sur cette virtualité si attendue et devenue bien réelle avec Java 21.

+

Par François Joubaud +

+
+

22h00 : 3ème mi-temps des juggers

+

Feedback

+

Sponsors de l'évènement

+

Platinium

+ +

Code de Conduite

+

Les conférences Paris JUG se veulent des expériences sans harcèlement, quel que soit + votre sexe, votre identité sexuelle, votre âge, votre orientation sexuelle, votre + handicap, votre apparence physique, votre poids, votre race ou votre religion. + Nous ne tolérons aucun harcèlement des participants à la conférence, quel que soit sa + forme. + Les expressions et les images à connotation sexuelle ne sont pas appropriées lors des + événements ou sur les médias en ligne. + Les participants à une conférence qui violent ces règles peuvent être sanctionnés, voire + exclus de la conférence.

+
+
+ +
+
+
+
+ +
+ +
+ + + + + \ No newline at end of file