Skip to content

Commit 63cbb10

Browse files
committed
bump
1 parent 92f49d5 commit 63cbb10

File tree

8 files changed

+165
-23
lines changed

8 files changed

+165
-23
lines changed

_pages/archives/2023/projects.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: Projets Interfaces web pour le TAL 2023
33
layout: default
4-
permalink: /projects/
4+
permalink: /2023/projects/
55
---
66

77
[comment]: <> "LTeX: language=fr"

_pages/archives/2024/projects.md

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
---
2+
title: Projets Interfaces web pour le TAL 2023
3+
layout: default
4+
permalink: /2024/projects/
5+
---
6+
7+
[comment]: <> "LTeX: language=fr"
8+
9+
Projets
10+
========
11+
12+
Votre travail sera de réaliser une interface web en Python pour un système de TAL, de traitement ou
13+
d'accès à des données. Elle devra au moins comprendre une interface programmatique sous la forme
14+
d'une API REST utilisable par un serveur ASGI (c'est par exemple le cas de celles réalisée en
15+
FastAPI que vous avez vues en cours) et une interface utilisateur qui pourra prendre la forme d'un
16+
script ou très, très préférablement d'une interface web HTML + CSS [+ js]
17+
18+
Ce projet peut évidemment être en lien avec d'autres cours, d'autres projets ou votre travail en
19+
entreprise (mais assurez-vous avant que ce soit OK de partager votre code avec moi dans ce cas).
20+
21+
On peut éventuellement relaxer ces exigences si vous avez une idée spécifique, mais commencez par
22+
m'en parler avant.
23+
24+
## Consignes
25+
26+
- Projet à rendre le 1er mars 2023 *au plus tard*
27+
- Projet de préférence collectif, par groupe de 2 ou 3
28+
- Si c'est un problème pour vous, venez me voir, tout est négociable
29+
- S'il y a un problème — quel qu'il soit — dans votre groupe, n'hésitez pas à m'en parler
30+
31+
Le rendu devra comporter :
32+
33+
1. Une documentation du projet traitant les points suivants :
34+
35+
- Les objectifs du projet
36+
- Une description du système ou des données auxquelles l'interface permet d'accéder
37+
- La méthodologie (comment vous vous êtes répartis le travail, comment vous avez identifié les
38+
problèmes et les avez résolus, différentes étapes du projet…)
39+
- L'implémentation ou les implémentations (modélisation le cas échéant, modules et/ou API
40+
utilisés, différents langages le cas échéant)
41+
- Les résultats (fichiers output, visualisations…) et une discussion sur ces résultats (ce que
42+
vous auriez aimé faire et ce que vous avez pu faire par exemple)
43+
44+
On attend de la documentation technique, pas une dissertation. Elle pourra prendre le format d'un
45+
ou plusieurs fichiers, d'un site web, d'un notebook de démonstration, à votre convenance
46+
47+
**La documentation ne doit pas, jamais, sous aucun prétexte, comporter de capture d'écran de
48+
code.**
49+
50+
2. Le code Python et les codes annexes (JS par ex.) que vous avez produit. Le code *doit* être
51+
commenté. **Évitez les notebooks** (de toute façon ce n'est pas idéal pour des interfaces web).
52+
53+
3. Les éventuelles données en input et en output (ou un échantillon si le volume est important)
54+
55+
N'hésitez pas à vous servir de git pour versionner vos projets !
56+
57+
## Conseils
58+
59+
Écrivez ! Tenez un carnet : vos questions, un compte-rendu de vos discussions,
60+
les problèmes rencontrés, tout est bon à prendre et cela vous aidera à rédiger
61+
la documentation finale.
62+
63+
## Ressources
64+
65+
### Hébergement
66+
67+
- [Python Anywhere](https://help.pythonanywhere.com/pages/Education)
68+
69+
### Données géo-localisées
70+
71+
Il existe beaucoup de choses pour travailler avec des données géo-localisées. Allez voir en vrac :
72+
[Geo-JSON](http://geojson.org/), [uMap](http://umap.openstreetmap.fr/fr/) pour créer facilement des
73+
cartes en utilisant les fonds de carte d'OpenStreetMap, [leaflet](http://leafletjs.com/) une lib JS
74+
pour les cartes interactives, [overpass turbo](http://overpass-turbo.eu/) pour interroger facilement
75+
les données d'OpenStreetMap (il y a une [api !](http://www.overpass-api.de/)).
76+
77+
### Ressources linguistiques
78+
79+
N'hésitez pas à aller fouiller dans [Ortolang](https://www.ortolang.fr/) ou
80+
[Clarin](https://lindat.mff.cuni.cz/repository/xmlui/) des ressources linguistiques exploitables
81+
librement et facilement. Vous pouvez aussi aller voir du côté de l'API twitter pour récupérer des
82+
données (qui ne sont pas nécessairement uniquement linguistiques)
83+
84+
### Open Data
85+
86+
Quelques sources : [Paris Open Data](https://opendata.paris.fr),
87+
[data.gouv.fr](https://data.gouv.fr), [Google dataset
88+
search](https://toolbox.google.com/datasetsearch)
89+
90+
## Idées
91+
92+
### Accès aux données
93+
94+
Réaliser une interface pour exploiter une ressource (linguistique ou autre).
95+
96+
- Soit en rendant lisible des données massives en faisant des stats
97+
- Soit en faisant apparaître des représentations pertinentes de données
98+
individuelles complexes (syntaxe, entités nommées, sentiment…)
99+
100+
### Interfaces systèmes
101+
102+
Réaliser une interface permettant d'accéder facilement à un système de TAL, dans l'esprit de
103+
[UDPipe](https://lindat.mff.cuni.cz/services/udpipe/) par exemple.

_pages/projects.md

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
title: Projets Interfaces web pour le TAL 2024
2+
title: Projets Interfaces web pour le TAL 2025
33
layout: default
44
permalink: /projects/
55
---
@@ -21,12 +21,26 @@ entreprise (mais assurez-vous avant que ce soit OK de partager votre code avec m
2121
On peut éventuellement relaxer ces exigences si vous avez une idée spécifique, mais commencez par
2222
m'en parler avant.
2323

24+
Contrainte spécifique pour 2025 : pas de chatbot ou d'interface pour LLM. Vous en voyez déjà bien
25+
assez par ailleurs, ça vous changera les idées.
26+
2427
## Consignes
2528

26-
- Projet à rendre le 8 mars 2024 *au plus tard*
29+
- Composition des groupes et sujets des projets à envoyer avant le 20 janvier 2025 (envoyer un mail
30+
par groupe avec vos noms, prénoms et établissements et une description concise, mais précise du
31+
projet). Si vous avez un doute sur la pertinence ou la faisabilité du projet, venez m'en parler
32+
avant.
33+
- Projet à rendre le 8 mars 2025 *au plus tard*
2734
- Projet de préférence collectif, par groupe de 2 ou 3
2835
- Si c'est un problème pour vous, venez me voir, tout est négociable
2936
- S'il y a un problème — quel qu'il soit — dans votre groupe, n'hésitez pas à m'en parler
37+
- Rendus par mail à `lgrobol@parisnanterre.fr` avec en objet `[web2025] Projet final` et les noms,
38+
prénoms et établissements de tous les membres du groupe dans le corps du mail.
39+
- **Si l'objet est différent, je ne verrai pas votre rendu**. Et si un nom manque, vous risquez de
40+
ne pas avoir de note.
41+
- J'accuserai réception sous trois jours ouvrés dans la mesure du possible, relancez-moi si ce
42+
n'est pas le cas.
43+
3044

3145
Le rendu devra comporter :
3246

index.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ layout: default
88

99
## News
1010

11+
- **2024-12-17** Les [consignes pour les projets]({{site.url}}{{site.baseurl}}/projects) sont en
12+
ligne.
1113
- **2024-11-19** Premier cours du semestre le 28/11/2023.
1214

1315
## Infos pratiques
@@ -84,6 +86,20 @@ nom de fichier devra être de la forme `prénom_nom-établissment.zip`, `établi
8486
- {% notebook_badges slides/07-fastapi/solutions.py.md %}
8587
[Solutions]({{site.url}}{{site.baseurl}}/slides/07-fastapi/solutions.py.ipynb)
8688

89+
### 2024-12-17 — Outils de debug et HTML
90+
91+
- {% notebook_badges slides/08-html/html-slides.py.md %} [Slides
92+
HTML]({{site.url}}{{site.baseurl}}/slides/08-html/html-slides.py.ipynb)
93+
- [Exemples](https://github.com/{{site.repository}}/tree/main/slides/08-html/examples)
94+
- {% notebook_badges slides/08-html/solutions.py.md %}
95+
[Solutions]({{site.url}}{{site.baseurl}}/slides/08-html/solutions.py.ipynb)
96+
- {% notebook_badges slides/09-debug/debug-slides.py.md %} [Slides
97+
Debug]({{site.url}}{{site.baseurl}}/slides/09-debug/debug-slides.py.ipynb)
98+
- [`factorial.py`]({{site.url}}{{site.baseurl}}/slides/09-debug/factorial.py).
99+
- [`lintme.py`]({{site.url}}{{site.baseurl}}/slides/09-debug/lintme.py).
100+
- [`debugme.py`]({{site.url}}{{site.baseurl}}/slides/09-debug/debugme.py).
101+
- [`ancor.txt`]({{site.url}}{{site.baseurl}}/slides/09-debug/ancor.txt).
102+
87103
## Utilisation en local
88104

89105
Les supports de ce cours sont écrits en Markdown, convertis en notebooks avec

slides/06-functions++/functions++.py.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1310,8 +1310,6 @@ temps ajouté (avec `time.sleep`) à chaque appel de fonction.
13101310
<!-- #endregion -->
13111311

13121312
<!-- #region slideshow={"slide_type": "slide"} -->
1313-
## ⏳ Exo ⏳
1314-
13151313
## Et après
13161314

13171315
Allez lire [le tuto de Real

slides/08-html/html-slides.py.md

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,8 @@ def make_ul(elems: List[str], path: str):
144144

145145
# Pour tester
146146
make_ul(["The Beths", "Beirut", "Death Cab for Cutie"], "local/moody_bands.html")
147-
print(open("local/moody_bands.html").read())
147+
with open("local/moody_bands.html") as in_stream:
148+
print(in_stream.read())
148149
```
149150

150151
<!-- #region slideshow={"slide_type": "fragment"} -->
@@ -184,7 +185,12 @@ HTML(lxml.html.tostring(html, encoding=str))
184185
## Avec FastAPI
185186

186187
Pour afficher du HTML quand on accède à votre point d'accès FastAPI, vous pouvez utiliser
187-
`fastapi.responses.HTMLResponse`, ce qui indique par exemple au navigateur qu'il faut interpréter les données reçues comme une page web.
188+
[`fastapi.responses.HTMLResponse`](https://fastapi.tiangolo.com/reference/responses/?h=html#fastapi.responses.HTMLResponse)
189+
(qui n'est en fait rien de plus qu'un wrapper de
190+
[`starlette.responses.HTMLResponses](https://www.starlette.io/responses/#htmlresponse)).
191+
Fondamentalement, ça ne fait que mettre vos données dans une réponse générique avec un header
192+
`media_type = "text/html"`, mais c'est plus lisible comme ça
193+
188194
<!-- #endregion -->
189195

190196
```python slideshow={"slide_type": "subslide"}
@@ -227,9 +233,9 @@ Et allez voir <http://localhost:8000>
227233
<!-- #endregion -->
228234

229235
<!-- #region -->
230-
1\. Concevoir une API avec FastAPI qui reçoit des requêtes de type POST contenant une liste de
231-
chaînes de caractère et répond avec une page HTML qui contient une liste ordonnée dont les
232-
éléments sont les chaînes de caractères reçus.
236+
1\. Concevoir une API qui reçoit des requêtes de type POST contenant une liste de chaînes de
237+
caractère et répond avec une page HTML qui contient une liste ordonnée dont les éléments sont les
238+
chaînes de caractères reçus.
233239

234240
Bien entendu, vérifiez que votre HTML passe au [valideur du W3C](https://validator.w3.org).
235241

@@ -270,12 +276,9 @@ Ce qui serait **bien** ça serait de pouvoir écrire du HTML normalement et en P
270276
Jinja.
271277
<!-- #endregion -->
272278

273-
```python slideshow={"slide_type": "fragment"}
274-
%pip install -U Jinja2
275-
```
276-
277279
<!-- #region slideshow={"slide_type": "subslide"} -->
278-
Jinja est un « moteur de templates » (*template engine*), c'est un genre de `str.format` ou de *f-string*. Voyez plutôt :
280+
Jinja est un « moteur de templates » (*template engine*), c'est un genre de `str.format` ou de
281+
*f-string*. Voyez plutôt :
279282
<!-- #endregion -->
280283

281284
```python
@@ -285,12 +288,17 @@ t.render(something="World")
285288
```
286289

287290
<!-- #region slideshow={"slide_type": "subslide"} -->
288-
OK, super mais ça on sait déjà faire
291+
OK, super, mais ça on sait déjà faire
289292
<!-- #endregion -->
290293

291294
```python slideshow={"slide_type": "fragment"}
292295
s = "Hello {something}"
293-
s.format(something="World")
296+
print(s.format(something="World"))
297+
```
298+
299+
```python slideshow={"slide_type": "fragment"}
300+
something="World"
301+
print(f"Hello {something}")
294302
```
295303

296304
<!-- #region slideshow={"slide_type": "fragment"} -->
@@ -419,8 +427,9 @@ En plus, les bons IDE supportent la syntaxe de Jinja, vous devriez donc au moins
419427

420428
<!-- #region slideshow={"slide_type": "subslide"} -->
421429
Parmi les autres fonctions intéressantes, Jinja permet d'échapper automatiquement le HTML, afin de
422-
se prémunir des injections de code. Par exemple si on reprend l'environnement précédent mais qu'on
423-
change un peu les données (ce qui peut arriver si les données en question ne sont pas gérées directement par vous, mais sont issues des utilisateurs de votre application).
430+
se prémunir des injections de code. Par exemple si on reprend l'environnement précédent, mais qu'on
431+
change un peu les données (ce qui peut arriver si les données en question ne sont pas gérées
432+
directement par vous, mais sont issues des utilisateurices de votre application).
424433
<!-- #endregion -->
425434

426435
```python
@@ -436,7 +445,9 @@ display(HTML(lst))
436445
```
437446

438447
<!-- #region slideshow={"slide_type": "subslide"} -->
439-
Évidemment ici ce n'est pas très grave, `<strong>` n'est pas un tag très dangereux. En revanche on peut faire beaucoup de choses avec `<script>`. Pour un exemple, décommentez la dernière ligne de la cellule suivante, puis exécutez la.
448+
Évidemment ici ce n'est pas très grave, `<strong>` n'est pas un tag très dangereux. En revanche on
449+
peut faire beaucoup de choses avec `<script>`. Pour un exemple, décommentez la dernière ligne de la
450+
cellule suivante, puis exécutez-la.
440451
<!-- #endregion -->
441452

442453
```python
@@ -451,7 +462,7 @@ print(lst)
451462
# display(HTML(lst))
452463
```
453464

454-
Pour éviter ça :
465+
Pour éviter ça :
455466

456467

457468
```python
@@ -488,7 +499,7 @@ Voici le contenu de [`examples/templates/hello.html.jinja`](examples/templates/j
488499
</head>
489500
<body>
490501
<h1>Hello, {{name}}</h1>
491-
<p>How do you do, fellow nerd?</p>
502+
<p>How do you do, fellow kids?</p>
492503
</body>
493504
</html>
494505
```
@@ -523,5 +534,5 @@ Lancez cette API avec `uvicorn jinja_api:app` et allez à <http://localhost:8000
523534
<!-- #region slideshow={"slide_type": "slide"} -->
524535
## 🙄 Exo 🙄
525536

526-
Reprenez les APIs de 🧊 et réécrivez-les en Jinja. Si, si, c'est pour votre bien.
537+
Reprenez les APIs de 🧊 et réécrivez-les en Jinja. C'est pour votre bien.
527538
<!-- #endregion -->
File renamed without changes.

0 commit comments

Comments
 (0)