<commit_before>= Cours IF (formation classique)
:toc:
:sectanchors:

== Références générales
* http://math.hws.edu/eck/cs124/javanotes7/[Eck]’s book (free): Introduction to Programming Using Java, Seventh Edition
* https://github.com/oliviercailloux/samples[Échantillons] ; https://github.com/javaee-samples/javaee8-samples[javaee8-samples]
* Goncalves - Beginning Java EE 7 : http://doi.org/10.1007/978-1-4302-4627-5[Springer], https://proxy.bu.dauphine.fr/http/doi.org/10.1007/978-1-4302-4627-5[BU] 
* XML in a nutshell : https://portail.bu.dauphine.fr/bibliodata.html?record_id=ALEPH000026526&rtype=book[BU 1], https://portail.bu.dauphine.fr/bibliodata.html?record_id=ALEPH000013764&rtype=book[BU 2], https://portail.bu.dauphine.fr/bibliodata.html?record_id=ALEPH000035938&rtype=book[BU (en français)]
* https://www.getpostman.com/[Postman]
* Servlets multi-formats
** JSON https://github.com/oliviercailloux/java-course/blob/master/JSON.adoc[Processing], https://github.com/oliviercailloux/java-course/blob/master/JSON-B.adoc[JSON-B]
** XML : voir références générales ci-dessus
** JAXB : exemple https://github.com/oliviercailloux/XMCDA-2.2.1-JAXB[classique], https://github.com/xmcda-modular/jaxb[avancé] (http://pyxb.sourceforge.net/[PyXB], https://docs.microsoft.com/en-us/dotnet/standard/serialization/xml-schema-definition-tool-xsd-exe[.NET], …)

Voir aussi la section références de chaque ensemble de diapositives, par sujet.

== Projets
Énoncés : voir https://github.com/oliviercailloux/projets/tree/master/EE[Projets] Java EE (sur GitHub)

=== Démarrage du projet
* Vous pouvez utiliser le `groupId` `io.github.oliviercailloux.y2018`
* Utilisez _obligatoirement_ comme `artifactId` le nom de votre projet (avec espaces transformés en traits d’union)
* Lire les bonnes pratiques Maven
* Placez votre projet sur un dépôt sur GitHub (un seul pour tout le groupe) qui s’appelle _exactement_ comme votre artifactId

=== Consignes générales
* Pour chaque fonctionnalité dont vous vous occupez : créer une issue sur votre projet GitHub. Son nom _doit_ être strictement égal au nom dans l’énoncé du projet. Vous enregistrer à deux (un binôme) dessus. Lorsque vous l’estimez terminée (je peux corriger), et que vous avez fusionné votre code sur la branche master, vous fermez l’issue. (Idée : https://fr.wikipedia.org/wiki/Int%C3%A9gration_continue[Intégration continue])
* Vous pouvez implémenter les fonctionnalités dans l’ordre de votre choix, mais tenez compte des contraintes de précédence (non explicitement indiquées dans l’énoncé, à vous d’y réfléchir ou de m’interroger).
* Je vous donne une note qualité (la même pour les deux membres du binôme) pour cette issue. Je commente l’issue sur GitHub pour vous aider à améliorer votre code (et vos points) si nécessaire. Cette note qualité est temporaire (au moins) jusqu’à la livraison suivante.
* Conseil : changez partiellement chaque binôme à chaque issue pour faire tourner les connaissances et varier les plaisirs (et augmenter les points).
* Un travail régulier est attendu (et la note le prendra en compte).
* Attendu : 9 heures de travail par personne entre chaque séance en moyenne ; 18 points de difficulté en tout pour les groupes de 6 personnes (20 points pour 7 personnes).
* La note CC est la moyenne de vos notes qualité.
* La note projet est une évaluation finale de la qualité de votre projet, avec une composante individuelle (ce sur quoi vous avez travaillé) et une composante de groupe (le résultat final du projet entier). Elle prend en compte vos fonctionnalités accomplies et leurs corrections, la diversité des fonctionnalités, la cohérence du tout, la présentation finale. Notez que toute amélioration des fonctionnalités déjà notées pour la note CC vous rapportera pour la note projet.
* Les commentaires utilisent les abréviations E1, E2, etc, pour se référer aux exigences ci-dessus ; S2.1 pour le point indiqué en 1 sous S2 ci-dessous ; BP Maven (par exemple) pour les Bonnes Pratiques Maven (voir lien ci-dessus).

=== Exigences
. Approche par contrat
.. Gestion appropriée des exceptions
.. Avec Javadoc pour documenter le contrat lorsque nécessaire
.. Sans commentaires auto-générés (ne servent à rien et noient les commentaires importants)
. Avec tests unitaires ou fonctionnels appropriés (_au moins_ un test fonctionnel par servlet)
. Utilisation appropriée des classes de la JRE et de bibliothèques tierces
. Logs de l’application via JUL
. Utilisation privilégiée des standards (exemple : JSON) (déviation permise mais il faut m’en parler et apporter des arguments)
. Suivi des consignes de style données au cours (exemple : pom Maven)
. Coder en anglais
. Dépôt clair (responsabilité de _tous_ les membres)
.. Pas de produits transformés (.class par exemple)
.. Pas de fichiers propres à l’IDE (.project, .classpath, .settings pour Eclipse)
.. Projet Java (donc pom.xml) à la racine du dépôt
.. POM correct
. Répondre aux attentes du client : vérifier la compréhension !
. Respecter les https://github.com/oliviercailloux/java-course/tree/master/Best%20practices[bonnes pratiques]

=== Livraisons
* Livraison 1 : trois jours avant S4. Exigence : au moins 5 points de difficulté accomplis (selon exigences ci-dessus) ; Travis CI en place. Note : 1/6 pour chaque fonctionnalité et 1/6 pour Travis.
* Livraison 2 : trois jours avant S6 (≥ 12 points de difficulté)
* Livraison 3 : trois jours avant S8 (≥ 18 ou 20 points de difficulté)

À chaque livraison, certaines notes qualités deviennent définitivement part de la note CC (à hauteur du nombre de points de difficulté requis). Si vous avez fait plus que votre quota, ce sont les meilleures notes qui deviennent définitivement part de la note CC.

Deux jours avant Sx signifie : au plus tard deux jours avant le jour de la séance x, à 23h59 + 1 min. (Exemple : si S4 a lieu lundi 3 octobre, deux jours avant S4 signifie : au plus tard samedi 1 octobre, 23h59 + 1 min.)

== Plan
=== S1 (jeudi 30 novembre 2017)
* https://github.com/oliviercailloux/java-course/raw/master/Pr%C3%A9sentation%20du%20cours%20EE/presentation.pdf[Présentation] du cours
* https://github.com/oliviercailloux/java-course/tree/4fbf56d4a8f2a2501c679783c5c582b1ea151347/Git/presentation.pdf[Git & exercices]
* Affectation en projets
* Client WS, https://github.com/oliviercailloux/java-course/tree/master/WS%20client.adoc[exercices]

À faire

. https://github.com/oliviercailloux/java-course/tree/master/Tools.adoc[Tools.adoc]
. Se créer un compte sur GitHub
. Terminer exercices git (voir diapositives git)
. Exercices curl (voir exercices client WS)
. Me fournir le nom d’utilisateur, si nécessaire : via devoir https://mycourse.dauphine.fr/webapps/blackboard/execute/launcher?type=Course&id=_38078_1[MyCourse]
. Rediriger vos e-mails @ Dauphine si nécessaire pour vous assurer de recevoir les annonces

=== S2 (jeudi 21 décembre 2017)
// 13h45
// vidéo
// 13h55 (env.)
// Maven
// 14h20 (exact)
// exercices Maven
// 14h50
// exercices client WS
// 15h15
// pause
// 15h30

* L’Open Data https://www.youtube.com/watch?v=aHxv_2BMJfw[à la loupe]
* https://github.com/oliviercailloux/java-course/raw/master/Maven/presentation.pdf[Maven] & https://github.com/oliviercailloux/java-course/tree/master/Maven.adoc[exercices]
* Exercices client WS (lien ci-dessus)
* https://github.com/oliviercailloux/java-course/raw/master/Java%20EE/presentation.pdf[Intro] Java EE, https://github.com/oliviercailloux/java-course/tree/master/GlassFish.adoc[Familiarisation] avec GlassFish
* https://github.com/oliviercailloux/java-course/tree/master/Servlets.adoc[Servlets.adoc]
** Compilation avec Maven et déploiement manuel
** Compilation et déploiement via Eclipse

À faire : Démarrage du projet.

=== S3 (jeudi 11 janvier 2018)
* Tests unitaires (ou fonctionnels !) : http://www.vogella.com/tutorials/JUnit/article.html[Tutoriel] Vogella
* Travis https://github.com/oliviercailloux/java-course/blob/master/CI.adoc[CI]
* https://github.com/oliviercailloux/java-course/tree/master/GlassFish.adoc#log[Logs] dans GlassFish
* Usage de git en équipe : dépôt propre ; ignore ; formattage & imports
** Fusionner à temps
* Discussion projets
* https://github.com/oliviercailloux/java-course/blob/master/CDI[CDI]
* https://github.com/oliviercailloux/java-course/raw/master/Annotations/presentation.pdf[Annotations]
* Fail-fast, exceptions, protection contre `null` : cf. Best practices
* Servlets multi-formats : cf. refs générales
* NB machine virtuelle

À faire

* Mettre en place le système d’intégration continue Travis sur votre dépôt de groupe. (Voir document ci-dessus.) Ajouter le badge au fichier README. Également à rendre pour deux jours avant S4. Vérifier que votre projet est ok, d’après Travis, au moment de la remise. (Les tests fonctionnels de vos servlets ne doivent pas nécessairement passer.)

=== S4 (jeudi 25 janvier 2018)
* Note sur la réutilisation intelligente (recompensée !) et le droit d’utilisation, ainsi que les licences
* https://tools.ietf.org/html/rfc6265[Cookies]
* https://github.com/oliviercailloux/java-course/raw/master/REST/presentation.pdf[REST] : https://github.com/oliviercailloux/sample-jax-rs[exemple]
* http://arquillian.org/[Arquillian]

=== S5 (vendredi 23 février 2018)<commit_msg>Deadlines<commit_after>= Cours IF (formation classique)
:toc:
:sectanchors:

== Références générales
* http://math.hws.edu/eck/cs124/javanotes7/[Eck]’s book (free): Introduction to Programming Using Java, Seventh Edition
* https://github.com/oliviercailloux/samples[Échantillons] ; https://github.com/javaee-samples/javaee8-samples[javaee8-samples]
* Goncalves - Beginning Java EE 7 : http://doi.org/10.1007/978-1-4302-4627-5[Springer], https://proxy.bu.dauphine.fr/http/doi.org/10.1007/978-1-4302-4627-5[BU] 
* XML in a nutshell : https://portail.bu.dauphine.fr/bibliodata.html?record_id=ALEPH000026526&rtype=book[BU 1], https://portail.bu.dauphine.fr/bibliodata.html?record_id=ALEPH000013764&rtype=book[BU 2], https://portail.bu.dauphine.fr/bibliodata.html?record_id=ALEPH000035938&rtype=book[BU (en français)]
* https://www.getpostman.com/[Postman]
* Servlets multi-formats
** JSON https://github.com/oliviercailloux/java-course/blob/master/JSON.adoc[Processing], https://github.com/oliviercailloux/java-course/blob/master/JSON-B.adoc[JSON-B]
** XML : voir références générales ci-dessus
** JAXB : exemple https://github.com/oliviercailloux/XMCDA-2.2.1-JAXB[classique], https://github.com/xmcda-modular/jaxb[avancé] (http://pyxb.sourceforge.net/[PyXB], https://docs.microsoft.com/en-us/dotnet/standard/serialization/xml-schema-definition-tool-xsd-exe[.NET], …)

Voir aussi la section références de chaque ensemble de diapositives, par sujet.

== Projets
Énoncés : voir https://github.com/oliviercailloux/projets/tree/master/EE[Projets] Java EE (sur GitHub)

=== Démarrage du projet
* Vous pouvez utiliser le `groupId` `io.github.oliviercailloux.y2018`
* Utilisez _obligatoirement_ comme `artifactId` le nom de votre projet (avec espaces transformés en traits d’union)
* Lire les bonnes pratiques Maven
* Placez votre projet sur un dépôt sur GitHub (un seul pour tout le groupe) qui s’appelle _exactement_ comme votre artifactId

=== Consignes générales
* Pour chaque fonctionnalité dont vous vous occupez : créer une issue sur votre projet GitHub. Son nom _doit_ être strictement égal au nom dans l’énoncé du projet. Vous enregistrer à deux (un binôme) dessus. Lorsque vous l’estimez terminée (je peux corriger), et que vous avez fusionné votre code sur la branche master, vous fermez l’issue. (Idée : https://fr.wikipedia.org/wiki/Int%C3%A9gration_continue[Intégration continue])
* Vous pouvez implémenter les fonctionnalités dans l’ordre de votre choix, mais tenez compte des contraintes de précédence (non explicitement indiquées dans l’énoncé, à vous d’y réfléchir ou de m’interroger).
* Je vous donne une note qualité (la même pour les deux membres du binôme) pour cette issue. Je commente l’issue sur GitHub pour vous aider à améliorer votre code (et vos points) si nécessaire. Cette note qualité est temporaire (au moins) jusqu’à la livraison suivante.
* Conseil : changez partiellement chaque binôme à chaque issue pour faire tourner les connaissances et varier les plaisirs (et augmenter les points).
* Un travail régulier est attendu (et la note le prendra en compte).
* Attendu : 9 heures de travail par personne entre chaque séance en moyenne ; 18 points de difficulté en tout pour les groupes de 6 personnes (20 points pour 7 personnes).
* La note CC est la moyenne de vos notes qualité.
* La note projet est une évaluation finale de la qualité de votre projet, avec une composante individuelle (ce sur quoi vous avez travaillé) et une composante de groupe (le résultat final du projet entier). Elle prend en compte vos fonctionnalités accomplies et leurs corrections, la diversité des fonctionnalités, la cohérence du tout, la présentation finale. Notez que toute amélioration des fonctionnalités déjà notées pour la note CC vous rapportera pour la note projet.
* Les commentaires utilisent les abréviations E1, E2, etc, pour se référer aux exigences ci-dessus ; S2.1 pour le point indiqué en 1 sous S2 ci-dessous ; BP Maven (par exemple) pour les Bonnes Pratiques Maven (voir lien ci-dessus).

=== Exigences
. Approche par contrat
.. Gestion appropriée des exceptions
.. Avec Javadoc pour documenter le contrat lorsque nécessaire
.. Sans commentaires auto-générés (ne servent à rien et noient les commentaires importants)
. Avec tests unitaires ou fonctionnels appropriés (_au moins_ un test fonctionnel par servlet)
. Utilisation appropriée des classes de la JRE et de bibliothèques tierces
. Logs de l’application via JUL
. Utilisation privilégiée des standards (exemple : JSON) (déviation permise mais il faut m’en parler et apporter des arguments)
. Suivi des consignes de style données au cours (exemple : pom Maven)
. Coder en anglais
. Dépôt clair (responsabilité de _tous_ les membres)
.. Pas de produits transformés (.class par exemple)
.. Pas de fichiers propres à l’IDE (.project, .classpath, .settings pour Eclipse)
.. Projet Java (donc pom.xml) à la racine du dépôt
.. POM correct
. Répondre aux attentes du client : vérifier la compréhension !
. Respecter les https://github.com/oliviercailloux/java-course/tree/master/Best%20practices[bonnes pratiques]

=== Livraisons
* Livraison 1 : trois jours avant S4. Exigence : au moins 5 points de difficulté accomplis (selon exigences ci-dessus) ; Travis CI en place. Note : 1/6 pour chaque fonctionnalité et 1/6 pour Travis.
* Livraison 2 : trois jours avant S6 (≥ 12 points de difficulté)
* Livraison 3 : trois jours avant S8 (≥ 18 ou 20 points de difficulté)

À chaque livraison, certaines notes qualités deviennent définitivement part de la note CC (à hauteur du nombre de points de difficulté requis). Si vous avez fait plus que votre quota, ce sont les meilleures notes qui deviennent définitivement part de la note CC.

Trois jours avant Sx signifie : au plus tard trois jours avant le jour de la séance x, à 23h59 + 1 min. (Exemple : si S4 a lieu vendredi 4 octobre, trois jours avant S4 signifie : au plus tard mardi 1 octobre, 23h59 + 1 min.)

== Plan
=== S1 (jeudi 30 novembre 2017)
* https://github.com/oliviercailloux/java-course/raw/master/Pr%C3%A9sentation%20du%20cours%20EE/presentation.pdf[Présentation] du cours
* https://github.com/oliviercailloux/java-course/tree/4fbf56d4a8f2a2501c679783c5c582b1ea151347/Git/presentation.pdf[Git & exercices]
* Affectation en projets
* Client WS, https://github.com/oliviercailloux/java-course/tree/master/WS%20client.adoc[exercices]

À faire

. https://github.com/oliviercailloux/java-course/tree/master/Tools.adoc[Tools.adoc]
. Se créer un compte sur GitHub
. Terminer exercices git (voir diapositives git)
. Exercices curl (voir exercices client WS)
. Me fournir le nom d’utilisateur, si nécessaire : via devoir https://mycourse.dauphine.fr/webapps/blackboard/execute/launcher?type=Course&id=_38078_1[MyCourse]
. Rediriger vos e-mails @ Dauphine si nécessaire pour vous assurer de recevoir les annonces

=== S2 (jeudi 21 décembre 2017)
// 13h45
// vidéo
// 13h55 (env.)
// Maven
// 14h20 (exact)
// exercices Maven
// 14h50
// exercices client WS
// 15h15
// pause
// 15h30

* L’Open Data https://www.youtube.com/watch?v=aHxv_2BMJfw[à la loupe]
* https://github.com/oliviercailloux/java-course/raw/master/Maven/presentation.pdf[Maven] & https://github.com/oliviercailloux/java-course/tree/master/Maven.adoc[exercices]
* Exercices client WS (lien ci-dessus)
* https://github.com/oliviercailloux/java-course/raw/master/Java%20EE/presentation.pdf[Intro] Java EE, https://github.com/oliviercailloux/java-course/tree/master/GlassFish.adoc[Familiarisation] avec GlassFish
* https://github.com/oliviercailloux/java-course/tree/master/Servlets.adoc[Servlets.adoc]
** Compilation avec Maven et déploiement manuel
** Compilation et déploiement via Eclipse

À faire : Démarrage du projet.

=== S3 (jeudi 11 janvier 2018)
* Tests unitaires (ou fonctionnels !) : http://www.vogella.com/tutorials/JUnit/article.html[Tutoriel] Vogella
* Travis https://github.com/oliviercailloux/java-course/blob/master/CI.adoc[CI]
* https://github.com/oliviercailloux/java-course/tree/master/GlassFish.adoc#log[Logs] dans GlassFish
* Usage de git en équipe : dépôt propre ; ignore ; formattage & imports
** Fusionner à temps
* Discussion projets
* https://github.com/oliviercailloux/java-course/blob/master/CDI[CDI]
* https://github.com/oliviercailloux/java-course/raw/master/Annotations/presentation.pdf[Annotations]
* Fail-fast, exceptions, protection contre `null` : cf. Best practices
* Servlets multi-formats : cf. refs générales
* NB machine virtuelle

À faire

* Mettre en place le système d’intégration continue Travis sur votre dépôt de groupe. (Voir document ci-dessus.) Ajouter le badge au fichier README. Également à rendre pour trois jours avant S4. Vérifier que votre projet est ok, d’après Travis, au moment de la remise. (Les tests fonctionnels de vos servlets ne doivent pas nécessairement passer.)

=== S4 (jeudi 25 janvier 2018)
* Note sur la réutilisation intelligente (recompensée !) et le droit d’utilisation, ainsi que les licences
* https://tools.ietf.org/html/rfc6265[Cookies]
* https://github.com/oliviercailloux/java-course/raw/master/REST/presentation.pdf[REST] : https://github.com/oliviercailloux/sample-jax-rs[exemple]
* http://arquillian.org/[Arquillian]

=== S5 (vendredi 23 février 2018)
{'fraction_non_alphanumeric': 0.09738640060730941, 'fraction_numerical': 0.02591909771174493, 'mean_word_length': 4.845641838351822, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 66, 'lorem ipsum': 0, 'www.': 6, 'xml': 4}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1494594', 'n_tokens_mistral': 6634, 'n_tokens_neox': 6301, 'n_words': 1933}