This repository has been archived on 2023-02-07. You can view files and clone it, but cannot push or open issues or pull requests.
hkis-au-campus-du-libre-2022/slides.md

233 lines
4.2 KiB
Markdown
Raw Permalink Normal View History

2022-11-18 14:36:16 +00:00
# HackInScience
<!-- .slide: data-background="static/background.jpg" -->
<br/>
<b>Julien Palard</b>
<tt>CPython core dev</tt>
2022-11-23 21:27:56 +00:00
# Demo time !
2022-11-18 14:36:16 +00:00
2022-11-23 21:27:56 +00:00
Parce que vous êtes là pour ça.
::: notes
Qui à dit « C'est moche ! » ? Je ne suis pas dev front !
2022-11-18 14:36:16 +00:00
2022-11-27 14:47:40 +00:00
Ne pas oublier la démo C et Rust !
Ceux pour qui la démo suffit, vous pouvez sortir ♥
2022-11-18 14:36:16 +00:00
## Enseigner le Python
J'ai l'habitude.
2022-11-23 21:27:56 +00:00
Mais à des groupes de ~6 pendant ~3 jours.
2022-11-18 14:36:16 +00:00
## C'est green
![Ruby Rhod](static/ruby-rhod.jpg)
## Enseigner le Python
2022-11-23 21:27:56 +00:00
Un jour on nous a proposé un groupe de 50 pendant 7 jours.
::: notes
En fait il sont arrivés à 80.
2022-11-18 14:36:16 +00:00
## C'est pas green
![Ruby Rhod étranglé](static/pas-green.jpg)
## Mais on est devs
Alors on a automatisé tout ce qui pouvait l'être.
::: notes
Pour passer du temps avec ceux qui en ont besoin.
# HackInScience.org
C'est un petit Django, avec un peu de celery.
::: notes
Pour répartir les corrections sur des machines qui ne font que ça.
2022-11-23 21:27:56 +00:00
## 181 lignes de Python
2022-11-18 14:36:16 +00:00
Ça devrait loger dans quelques slides ;)
::: notes
Aujourd'hui c'est 2700 lignes de code…
## Django models
```python
class Exercise(models.Model):
title = models.CharField(max_length=255)
wording = models.TextField()
2022-11-23 21:27:56 +00:00
check = models.TextField()
2022-11-18 14:36:16 +00:00
```
## Django view
```python
class ExerciseListView(LoginRequiredMixin, ListView):
model = Exercise
template_name = "hkis/exercises.html"
2022-11-23 21:27:56 +00:00
class ExerciseView(LoginRequiredMixin, DetailView):
model = Exercise
template_name = "hkis/exercise.html"
2022-11-18 14:36:16 +00:00
```
::: notes
Vous saviez que la MRO de Python garanti un héritage de gauche à droite ?
Ici il est garanti que les méthodes surchargées par `LoginRequiredMixin`
sont exécutées avant celles de `ListView`.
## Une petite API
```python
2022-11-23 21:27:56 +00:00
class ExerciseSerializer(HyperlinkedModelSerializer):
2022-11-18 14:36:16 +00:00
class Meta:
model = Exercise
fields = '__all__'
class ExerciseViewSet(viewsets.ModelViewSet):
queryset = Exercise.objects.all()
serializer_class = ExerciseSerializer
router = routers.DefaultRouter()
router.register('exercises', ExerciseViewSet)
```
::: notes
Pourquoi un "Router" ? Parce que derrière cette ViewSet il y a plein
de vues !
Démo time !
## Une interface d'admin
```python
from django.contrib import admin
from website.models import Answer, Exercise
admin.site.register(Answer)
admin.site.register(Exercise)
```
::: notes
2022-11-27 14:47:40 +00:00
Comme ça on a pu se concentrer sur les exercices et les moulinettes de correction.
2022-11-18 14:36:16 +00:00
# C'est utilisé ?
Je n'ai pas de « pisteur », mais j'ai une DB.
En octobre 2022 : 730 personnes ont résolu 10_780 exercices
La moulinette a corrigé près de 50k rendus.
::: notes
Google Analytics c'est illégal. Mais je sais écrire du SQL.
Aucun tracker, aucune pub, aucun asset externe.
10k c'est peu ou beaucoup, je ne sais pas.
2022-11-23 21:27:56 +00:00
## Ça tient la charge ?
2022-11-18 14:36:16 +00:00
2022-11-23 21:27:56 +00:00
Les exercices sont corrigés en environ 200ms.
2022-11-18 14:36:16 +00:00
2022-11-23 21:27:56 +00:00
Deux serveurs se répartissent le travail.
2022-11-18 14:36:16 +00:00
Les boucles infinies sont interrompues après 20s.
::: notes
Il est très facile d'ajouter un serveur de correction au besoin.
2022-11-23 21:27:56 +00:00
## C'est rentable ?
2022-11-18 14:36:16 +00:00
2022-11-23 21:27:56 +00:00
Ren…quoi ? Pardon ?
2022-11-18 14:36:16 +00:00
2022-11-23 21:27:56 +00:00
J'ai pas de « business model », et non mon projet ne va pas « mourir demain » pour autant #sry.
2022-11-18 14:36:16 +00:00
2022-11-23 21:27:56 +00:00
::: notes
2022-11-18 14:36:16 +00:00
2022-11-23 21:27:56 +00:00
Afficher la page des sponsors, remercier les sponsors et Gandi.
2022-11-18 14:36:16 +00:00
2022-11-27 14:47:40 +00:00
En fait c'était rentable jusqu'à ce que j'achète des billets de train pour venir ici :D
2022-11-18 14:36:16 +00:00
2022-11-23 21:27:56 +00:00
# Côté sécu
2022-11-18 14:36:16 +00:00
2022-11-23 21:27:56 +00:00
Les rendus sont exécutés côté serveur.
2022-11-18 14:36:16 +00:00
2022-11-23 21:27:56 +00:00
C'est un challenge niveau sécurité.
2022-11-18 14:36:16 +00:00
2022-11-23 21:27:56 +00:00
::: notes
2022-11-18 14:36:16 +00:00
2022-11-23 21:27:56 +00:00
Python est réputé pour ne pas être sandboxable, du moins pas depuis l'intérieur de l'interpréteur.
2022-11-18 14:36:16 +00:00
2022-11-23 21:27:56 +00:00
## seccomp
2022-11-18 14:36:16 +00:00
2022-11-23 21:27:56 +00:00
\+ Linux namespaces
2022-11-18 14:36:16 +00:00
2022-11-23 21:27:56 +00:00
\+ rlimit
2022-11-18 14:36:16 +00:00
2022-11-23 21:27:56 +00:00
::: notes
2022-11-18 14:36:16 +00:00
2022-11-23 21:27:56 +00:00
Pourquoi pas Docker ? Pas besoin d'un filesystem complet, juste d'un processus.
2022-11-18 14:36:16 +00:00
2022-11-23 21:27:56 +00:00
# Vu d'un enseignant
2022-11-18 14:36:16 +00:00
::: notes
2022-11-23 21:27:56 +00:00
Vous êtes libres de quitter la salle.
2022-11-18 14:36:16 +00:00
2022-11-23 21:27:56 +00:00
## L'interface d'admin
2022-11-18 14:36:16 +00:00
2022-11-23 21:27:56 +00:00
## Un repo git
2022-11-18 14:36:16 +00:00
2022-11-23 21:27:56 +00:00
Juste pour les exos.
2022-11-18 14:36:16 +00:00
# L'hébergement d'instances locales
2022-11-27 14:47:40 +00:00
Possible, évidement, j'ignore s'il y en a.
2022-11-23 21:27:56 +00:00
# Mot de la fin
2022-11-18 14:36:16 +00:00
2022-11-23 21:27:56 +00:00
Si vous aimez Python, n'oubliez pas la PyConFr !
2022-11-18 14:36:16 +00:00
2022-11-23 21:27:56 +00:00
Du 16 au 19 février 2023 !
2022-11-18 14:36:16 +00:00
# Questions
- Mastodon : [@mdk@mamot.fr](https://mamot.fr/@mdk)
- XMPP : mdk@chapril.org
- HTTP : https://mdk.fr
- SMTP : julien@python.org
- Whatsapp : HAHAHA jamais.
2022-11-23 21:27:56 +00:00
- Insta : Et puis quoi encore ?
- TikTok : SSTTTTOOOOOOOOP !