Spaces:
Running
Running
Upload 20 files
Browse files- documents/.DS_Store +0 -0
- documents/r1.md +16 -0
- documents/r10.md +5 -0
- documents/r11.md +8 -0
- documents/r12.md +31 -0
- documents/r14.md +11 -0
- documents/r15.md +8 -0
- documents/r17.md +56 -0
- documents/r19.md +10 -0
- documents/r2.md +10 -0
- documents/r20.md +12 -0
- documents/r26.md +20 -0
- documents/r27.md +17 -0
- documents/r28.md +10 -0
- documents/r3.md +15 -0
- documents/r5.md +7 -0
- documents/r6.md +10 -0
- documents/r7.md +16 -0
- documents/r9.md +15 -0
- main.py +122 -0
documents/.DS_Store
ADDED
Binary file (6.15 kB). View file
|
|
documents/r1.md
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Module Internet (I) : Introduction
|
2 |
+
|
3 |
+
**Ce qu’il faut savoir**
|
4 |
+
|
5 |
+
- Si l’on désire faire communiquer plusieurs ordinateurs entre eux, il faut que ces
|
6 |
+
mêmes ordinateurs soient en réseau (tous les ordinateurs du lycée sont reliés entre
|
7 |
+
eux, ils forment donc un réseau)
|
8 |
+
- Il est possible de relier des réseaux d’ordinateurs à d’autres réseaux d’ordinateurs,
|
9 |
+
on obtient alors des réseaux de réseaux. Le réseau de réseaux le plus connu se
|
10 |
+
nomme Internet
|
11 |
+
- L’idée de relier des réseaux d’ordinateurs à d’autres réseaux date des années 1970
|
12 |
+
(projet ARPAnet)
|
13 |
+
- Afin de pouvoir s'identifier, tout ordinateur possède une adresse sur un réseau : son
|
14 |
+
adresse IP
|
15 |
+
- Les adresses IP sont de la forme : "a.b.c.d", avec a, b, c et d des nombres compris
|
16 |
+
entre 0 et 255
|
documents/r10.md
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Réseaux sociaux : le petit monde
|
2 |
+
|
3 |
+
**Ce qu’il faut savoir**
|
4 |
+
|
5 |
+
Le « phénomène du petit monde » (appelé aussi effet du petit monde également connu sous le vocable « paradoxe de Milgram » car ses résultats semblent contraires à l'intuition) est l'hypothèse que chacun puisse être relié à n'importe quel autre individu par une courte chaîne de relations sociales. Ce concept reprend, après l'expérience du petit monde, conduite en 1967 par le psychosociologue Stanley Milgram, le concept de « six degrés de séparation », formulé par le Hongrois Frigyes Karinthy en 1929. Celui-ci suggère que deux personnes, choisies au hasard parmi les citoyens américains, sont reliées en moyenne par une chaîne de six relations. En revanche, après plus de trente ans, le statut de cette idée comme description de réseaux sociaux hétérogènes reste une question ouverte. Des études sont encore menées actuellement sur le « petit monde », avec notamment le modèle mathématique de réseau « petit monde ».
|
documents/r11.md
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Module Web (II) : Le modèle client/serveur
|
2 |
+
|
3 |
+
**Ce qu’il faut savoir**
|
4 |
+
|
5 |
+
- Dans la plupart des échanges au niveau d’un réseau (Internet par exemple), les ordinateurs qui communiquent ne jouent pas le même rôle. Un des ordinateurs est un client tandis que l’autre est un serveur. Un client va demander des ressources à un serveur alors qu’un serveur va passer son temps à fournir des ressources à une multitude de clients.
|
6 |
+
- N'importe quel type d'ordinateur peut jouer le rôle de serveur, mais dans le monde professionnel les serveurs sont des machines spécialisées conçues pour fonctionner 24h sur 24h (il faut être capable de fournir des ressources à un client 24h/24h)
|
7 |
+
- Afin de prévenir un “embouteillage” (trop de clients qui se connecteraient en même temps), un même service est souvent assuré par plusieurs serveurs qui vont jouer exactement le même rôle, on parle alors de redondance des serveurs.
|
8 |
+
- La redondance permet aussi d’assurer la continuité du service en cas de panne d’un des serveurs.
|
documents/r12.md
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Module Web (II) : Le protocole HTTP
|
2 |
+
|
3 |
+
**Ce qu’il faut savoir**
|
4 |
+
|
5 |
+
Le protocole (un protocole est ensemble de règles qui permettent à 2 ordinateurs de
|
6 |
+
communiquer ensemble) HTTP (HyperText Transfert Protocol) va permettre au client
|
7 |
+
d'effectuer des requêtes à destination d'un serveur web. En retour, le serveur web va
|
8 |
+
envoyer une réponse.
|
9 |
+
|
10 |
+
### Requête du client
|
11 |
+
|
12 |
+
Une requête HTTP utilise une méthode (c'est une commande qui demande au serveur d'effectuer une certaine action). A chaque requête faite par un client vers un serveur, on associe une des méthodes ci-dessous :
|
13 |
+
|
14 |
+
GET, HEAD, POST, OPTIONS, CONNECT, TRACE, PUT, PATCH, DELETE
|
15 |
+
|
16 |
+
Détaillons 4 de ces méthodes :
|
17 |
+
|
18 |
+
- GET : C'est la méthode la plus courante pour demander une ressource. Elle est sans effet sur la ressource.
|
19 |
+
- POST : Cette méthode est utilisée pour soumettre des données en vue d'un traitement (côté serveur). Typiquement c'est la méthode employée lorsque l'on envoie au serveur les données issues d'un formulaire.
|
20 |
+
- DELETE : Cette méthode permet de supprimer une ressource sur le serveur.
|
21 |
+
- PUT : Cette méthode permet de modifier une ressource sur le serveur
|
22 |
+
|
23 |
+
### Réponse du serveur
|
24 |
+
|
25 |
+
Suite à une requête d’un client, le serveur envoie une réponse à ce client. Dans la réponse du serveur on trouve beaucoup de choses (voir le cours), mais on n’en retiendra deux :
|
26 |
+
- un code : par exemple 200 si tout est OK ou 404 si la ressource demandée n’a pas été trouvée…
|
27 |
+
- du code HTML (voir l'activité 12)
|
28 |
+
|
29 |
+
### Protocole HTTPS
|
30 |
+
|
31 |
+
Le "HTTPS" est la version "sécurisée" du protocole HTTP : les données sont chiffrées avant d'être transmises sur le réseau. Seul le possesseur de la clé de déchiffrement sera en mesure de lire les données transmises sur le réseau (dans le cas du HTTP toutes les informations transmises sur le réseau sont “lisibles” par n’importe qui).
|
documents/r14.md
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Module Internet (II) : Serveur DNS
|
2 |
+
|
3 |
+
**Ce qu’il faut savoir**
|
4 |
+
|
5 |
+
- chaque ordinateur est identifié sur le réseau uniquement par son adresse IP
|
6 |
+
- l’adresse IP étant difficile à retenir on associe souvent un ordinateur à un nom appelé adresse symbolique (par exemple “pixees.fr”)
|
7 |
+
- un serveur DNS (Domain Name Server) est un serveur qui permet de transformer une adresse symbolique en adresse IP et vice versa
|
8 |
+
|
9 |
+
**Ce qu’il faut savoir faire**
|
10 |
+
|
11 |
+
vous devez être capable de retrouver une adresse à partir d’une adresse symbolique et inversement.
|
documents/r15.md
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Module Internet (II) : Réseaux pair à pair
|
2 |
+
|
3 |
+
**Ce qu’il faut savoir**
|
4 |
+
|
5 |
+
- Les réseaux pair-à-pair ou peer to peer en anglais (abréviation "p2p"), ne sont pas basés sur l'architecture client-serveur classique (voir le cours sur l'architecture client-serveur)
|
6 |
+
- Dans un réseau p2p chaque machine joue en même temps le rôle de client (elle demande des ressources à une autre machine) et le rôle de serveur (elle fournit des ressources à une autre machine)
|
7 |
+
- Il existe énormément de protocoles qui s'appuient sur des réseaux de pair-à-pair. La plupart de ces "protocoles p2p" sont destinés au partage de fichier, mais il est aussi possible de créer des systèmes de "calculs distribués" grâce au réseau p2p (répartir des calculs extrêmement complexes sur un grand nombre d'ordinateurs personnels)
|
8 |
+
- le protocole BitTorrent s’appuie sur les réseaux p2p. Il permet de partager des fichiers. Même si le protocole BitTorrent n’a rien d’illégal, il est souvent utilisé pour partager des fichiers (films, jeux…) de façon illégale..
|
documents/r17.md
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Module Données structurées : différents types de données structurées
|
2 |
+
|
3 |
+
**Ce qu’il faut savoir**
|
4 |
+
|
5 |
+
On trouve énormément de données sur internet. Une partie de ces données sont publiques,
|
6 |
+
par exemple le site data.gouv.fr recense un grand nombre de données publiques. Ces
|
7 |
+
données sont librement réutilisables. Ces données sont stockées dans des fichiers. On
|
8 |
+
trouve différents formats de fichiers qui permettent de stocker des données : CSV, JSON...
|
9 |
+
|
10 |
+
### CSV
|
11 |
+
|
12 |
+
Les fichiers au format CSV (Comma Separated Value) permettent de stocker les données
|
13 |
+
sous la forme de tableau. Un fichier CSV est un fichier texte. Chaque ligne du texte
|
14 |
+
correspond à une ligne du tableau et les virgules correspondent aux séparations entre les
|
15 |
+
colonnes.
|
16 |
+
exemple de fichier CSV :
|
17 |
+
|
18 |
+
```
|
19 |
+
nom,prenom,date_naissance
|
20 |
+
Durand,Jean-Pierre,23/05/1985
|
21 |
+
Dupont,Christophe,15/12/1967
|
22 |
+
Terta,Henry,12/06/1978
|
23 |
+
```
|
24 |
+
|
25 |
+
| nom | prenom | date_naissance |
|
26 |
+
| :---------------: |:---------------:| :-----:|
|
27 |
+
| Durand | Jean-Pierre | 23/05/1985 |
|
28 |
+
| Dupont | Christophe | 15/12/1967 |
|
29 |
+
| Terta | Henry | 12/06/1978 |
|
30 |
+
|
31 |
+
Dans l’exemple ci-dessus "nom", "prenom" et "date_naissance" sont appelés des descripteurs alors que, par exemple, "Durand", "Dupont" et "Terta" sont les valeurs du descripteur "nom".
|
32 |
+
|
33 |
+
Il est possible d’ouvrir un fichier au format csv à l’aide d’un tableur
|
34 |
+
|
35 |
+
### JSON
|
36 |
+
|
37 |
+
le JSON (JavaScript Object Notation) est un autre format permettant de stocker des données. Il fonctionne avec un système de paire clé/valeur : {cle_1 : val_1, cle_2 : val_2, cle_3 : val_3}. Un objet est encadré par des accolades.
|
38 |
+
L’équivalent de l’exemple vu avec le CSV donnera :
|
39 |
+
|
40 |
+
```
|
41 |
+
[{
|
42 |
+
"nom" : "Durand",
|
43 |
+
"prenom" : "Jean-Pierre",
|
44 |
+
"date_naissance" : "23/05/1985"
|
45 |
+
},
|
46 |
+
{
|
47 |
+
"nom" : "Dupont",
|
48 |
+
"prenom" : "Christophe",
|
49 |
+
"date_naissance" : "15/12/1967"
|
50 |
+
},
|
51 |
+
{
|
52 |
+
"nom" : "Terta",
|
53 |
+
"prenom" : "Henry",
|
54 |
+
"date_naissance" : "12/06/1978"
|
55 |
+
}]
|
56 |
+
```
|
documents/r19.md
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Fiche de révision
|
2 |
+
## Module Données structurées : le cloud
|
3 |
+
|
4 |
+
**Ce qu’il faut savoir**
|
5 |
+
|
6 |
+
- le “cloud” correspond à l’utilisation de différents services informatiques (stockage de données, calculs, utilisation d’application...) à distance via internet. Dit autrement, au lieu de faire faire à notre ordinateur personnel certaines tâches (stockage de données, calculs, utilisation d’application...), ces tâches sont accomplies par un ordinateur distant (un serveur dans un datacenter) via internet. Le but étant que l’utilisateur ne se rende pas compte que ces tâches ne sont pas effectuées sur son ordinateur personnel.
|
7 |
+
- c’est l’amélioration des infrastructures réseau (augmentation des débits notamment), la baisse des coûts du stockage de données et les progrès en termes de gestions des pannes des serveurs qui ont permis l’émergence du cloud
|
8 |
+
- le cloud permet d’avoir une assurance en termes de conservation des données : si vos données sont stockées sur votre ordinateur personnel et que cet ordinateur tombe en panne, il se peut que vos données soient perdues. Si vos données sont stockées dans le cloud, les systèmes mis en place dans les datacenters (réplication des données) vous assurent de ne pas perdre vos données même en cas de panne d’un serveur.
|
9 |
+
- les conditions d’utilisation de certains services de cloud précisent que les données présentes sur leurs serveurs n’appartiennent plus vraiment au propriétaire d’origine ou qu’ils s’autorisent à utiliser vos données pour, par exemple, faire des analyses statistiques afin de revendre ces statistiques à des régies publicitaires qui vous envahiront de publicités ciblées
|
10 |
+
- les datacenters consomment énormément d’énergie pour les serveurs, mais aussi pour les systèmes de refroidissement. Cette consommation d’énergie à un impact certain d’un point de vue écologique.
|
documents/r2.md
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Module Internet (I) : Protocoles TCP et IP
|
2 |
+
|
3 |
+
**Ce qu’il faut savoir**
|
4 |
+
|
5 |
+
- En informatique un protocole permet de faciliter la communication entre des ordinateurs
|
6 |
+
- Internet est basé sur 2 protocoles : TCP et IP
|
7 |
+
- Pour transférer des données entre 2 ordinateurs, le protocole TCP encapsule ces données. Les données issues de l’encapsulation de TCP sont elles-mêmes encapsulées par le protocole IP. On obtient alors un paquet IP qui pourra être transmis sur le réseau. Une fois arrivées à destination, les données seront désencapsulées.
|
8 |
+
- Les accusés de réception permettent à l’ordinateur qui a envoyé les données, de s’assurer que ces données ont bien été réceptionnées par l’ordinateur destination (voir le schéma du cours). Le protocole TCP gère les accusés de réception.
|
9 |
+
- Le protocole UDP ressemble beaucoup au protocole TCP, seule différence notable : le protocole UDP ne gère pas les accusés de réception
|
10 |
+
- Lors du transfert, par exemple d’une photo, entre 2 ordinateurs, les données qui constituent la photo sont“découpées” en une multitude de petits paquets de données. Chaque petit paquet, après avoir été encapsulé par TCP et IP, “voyage” sur le réseau totalement indépendamment les uns des autres.
|
documents/r20.md
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Module Web (III) : les cookies
|
2 |
+
|
3 |
+
**Ce qu’il faut savoir**
|
4 |
+
|
5 |
+
- Un cookie est un fichier qui est déposé par le navigateur sur votre ordinateur lorsque vous surfez sur Internet.
|
6 |
+
- Dans un cookie on trouve des informations personnelles sur l’utilisateur
|
7 |
+
- Les cookies peuvent être utiles (conserver des informations sur un utilisateur afin de lui éviter de renseigner certaines informations qu’il a déjà renseignées auparavant), mais ils peuvent aussi permettre à des tiers de “récolter” des informations sur l’utilisateur (par exemple pour envoyer de la publicité ciblée)
|
8 |
+
|
9 |
+
**Ce qu’il faut savoir faire**
|
10 |
+
|
11 |
+
Vous devez être capable de modifier les paramètres de sécurité et de confidentialité dans
|
12 |
+
votre navigateur web.
|
documents/r26.md
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Module photo numérique : les images
|
2 |
+
|
3 |
+
**Ce qu’il faut savoir**
|
4 |
+
|
5 |
+
Une image est composée de petits points appelés pixel. La définition d’une image vous donne le nombre de pixels qui compose l’image, par exemple une image de définition 800 x 600 (800 par 600), signifie que cette image est composée de 800 pixels en largeur et de 600 pixels en hauteur, soit en tout 800 x 600 = 480000 pixels.
|
6 |
+
|
7 |
+
Un pixel est composé de trois parties : une partie rouge, une partie verte et une partie bleue. À chaque pixel on associe donc 3 couleurs : le rouge, le vert et le bleu. On parle du canal rouge, du canal vert et du canal bleu d’un pixel (on parle de système RVB ou RGB en anglais). La théorie physique de la synthèse additive des couleurs (pour plus d’informations sur cette théorie, voir ici) montre que la variation de l’intensité lumineuse de chaque canal permet d’obtenir un très grand nombre de couleurs. La valeur de l’intensité lumineuse associée à chaque canal de chaque pixel d’une image est très souvent comprise entre 0 et 255 (256 valeurs possibles). On codera donc un pixel à l'aide d'un triplet de valeur (par exemple "247,56,98"). La première valeur donnant l'intensité du canal rouge, la deuxième valeur donnant l'intensité du canal vert et la troisième valeur donnant l'intensité du canal bleu.
|
8 |
+
|
9 |
+
Quand on observe un pixel "à la loupe", on peut constater que le pixel est bien constitué de trois parties : une partie rouge, une partie verte, et une partie bleue (voir schéma ci-dessus). Et là, je suis sûr que vous vous posez une question fondamentale : quand nous regardons une image sur un écran d'ordinateur, nous "voyons" des pixels de différentes couleurs (jaune, mauve,...) et pas des pixels constitués de rouge, de vert et de bleu, pourquoi ?
|
10 |
+
Quand vous regardez 2 points très proches l'un de l'autre, l'oeil "voit" deux points si l'angle α (voir le schéma ci-dessus) est supérieur à 0,017°. En dessous de cette valeur, votre oeil "superposera" les 2 points, il ne verra pas deux, mais un seul point.
|
11 |
+
|
12 |
+
Un pixel est tellement petit que notre oeil superposera la partie rouge, la partie verte et la partie bleue du pixel, voilà pourquoi nous voyons des pixels de différentes couleurs.
|
13 |
+
|
14 |
+
La taille est une autre caractéristique d'une image, elle correspond à la taille de l'image en cm ou en pouce (inch en anglais), toujours en utilisant la largeur et la longueur de l'image. Le papier photo vendu dans le commerce que l'on trouve le plus couramment fait 15 cm en largeur et 10 cm en hauteur. En cas d'impression sur ce papier, on obtiendra des photos de taille 15x10.
|
15 |
+
|
16 |
+
En combinant la taille et la définition d'une image, l'on obtient la résolution de cette image. La résolution d'une image est définie par le nombre de pixels par unité de longueur : nombre de pixels par cm ou plus couramment nombre de pixels par pouce (ppp ou dpi).
|
17 |
+
|
18 |
+
**Ce qu’il faut savoir faire**
|
19 |
+
|
20 |
+
Vous devez être capable de faire des calculs avec la taille (en cm), la résolution (en ppp) et la définition (en pixel) d'une image. En connaissant 2 de ces 3 grandeurs, vous devez être capable de calculer la troisième.
|
documents/r27.md
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Module photo numérique : capteur photo
|
2 |
+
|
3 |
+
**Ce qu’il faut savoir**
|
4 |
+
|
5 |
+
Au siècle dernier on trouvait dans tous les appareils photo des pellicules. Une pellicule est une surface photosensible (surface qui réagit à la lumière) qui capte les informations lumineuses. Une fois la pellicule terminée (avec une pellicule on peut faire un nombre variable de photos : 6, 12, 24 ou 36), elle était extraite (je parle au passé, mais certains photographes utilisent encore des appareils photo avec pellicule) de l'appareil photo puis développée dans un laboratoire spécialisé grâce à des procédés chimiques, bref, tout cela était quelque peu complexe et quelque peu contraignant (par exemple une photo ratée, était tout de même développée et donc facturée...). Aujourd'hui, fini ces contraintes, on peut prendre autant de photos que l'on veut (dans la limite des capacités mémoires de l'appareil), effacer une photo si elle ne nous convient pas, imprimer uniquement certaines photos sur l'imprimante familiale. Cela a été rendu possible grâce au progrès de l'informatique et de l'électronique et plus particulièrement grâce à l'arrivée dans l'électronique grand public des capteurs photo.
|
6 |
+
|
7 |
+
Le capteur photo remplace la pellicule, un capteur photo est donc une surface photosensible. Le capteur photo est composé d'un grand nombre de photosites, chaque photosite va recevoir de la lumière, l'intensité lumineuse va être "convertie" en tension électrique grâce à un effet physique très complexe qui ne sera pas abordé ici : l'effet photoélectrique. Plus l'intensité lumineuse reçue par le photosite est importante plus le photosite produira une tension électrique importante.
|
8 |
+
|
9 |
+
La tension électrique produite par un photosite sera ensuite "converti" en nombre (on parle de numérisation), à chaque photosite on associera donc un nombre qui sera fonction de la quantité de lumière reçue par ce même photosite. C'est ces nombres qui seront "stockés" dans la mémoire de l'appareil photo.
|
10 |
+
|
11 |
+
Si l'on se contentait de ce système, nous aurions uniquement des images en niveau de gris (souvent appelé à tort image en "noir et blanc"). Afin de pouvoir gérer les couleurs, on rajoute donc un filtre coloré devant chaque photosite. Nous avons vu, dans la partie consacrée aux images, qu'il est possible de générer un grand nombre de couleurs uniquement à partir du rouge, du vert et du bleu, nous allons donc trouver 3 types de filtres : des filtres "rouges" (qui laisseront uniquement passer la lumière rouge), des filtres "verts" (qui laisseront uniquement passer la lumière verte) et des filtres "bleus" (qui laisseront uniquement passer la lumière bleue). À chaque photosite on associera soit un filtre rouge, soit un filtre vert, soit un filtre bleu. Il existe différentes façons d'agencer les filtres sur le capteur photo, mais nous ne rentrerons pas dans ces détails ici.
|
12 |
+
|
13 |
+
les filtres dits "Bayer" sont constitués de 50% de filtres vert, de 25% de filtre rouge et de 25% de filtre bleu afin d'imiter la physiologie de l'oeil humain (notre oeil est plus sensible au vert qu'au bleu et au rouge). Dans ce genre de capteur, 50% des photosites enregistrent uniquement la lumière verte, 25% des photosites enregistrent uniquement la lumière rouge et 25% des photosites enregistrent uniquement la lumière bleue.
|
14 |
+
|
15 |
+
Précédemment nous avons vu qu'une image est constituée de pixels, mais dans le cas d'une photo d'où vient l'information (canal rouge, canal vert et canal bleu) associée à chaque pixel de la photo ?
|
16 |
+
|
17 |
+
La réponse est simple : des photosites du capteur photo. L'association de 4 photosites (deux verts, un rouge et un bleu) donnera les informations qui permettront de créer un pixel de l'image.
|
documents/r28.md
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Module photo numérique : capteur photo
|
2 |
+
|
3 |
+
**Ce qu’il faut savoir**
|
4 |
+
|
5 |
+
Nous allons utiliser le langage de programmation Python afin de directement travailler sur les pixels d'une image. Par travailler sur les pixels, j'entends déterminer la valeur du canal rouge, la valeur du canal vert et la valeur du canal bleu pour un pixel donné ou bien encore modifier carrément la couleur d'un pixel.
|
6 |
+
|
7 |
+
**Ce qu’il faut savoir faire**
|
8 |
+
|
9 |
+
Utilisez le langage Python et la bibliothèque Python Pillow afin de modifier des images (par exemple passer d'une image couleur à une image noir et blanc)
|
10 |
+
|
documents/r3.md
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Module Internet (I) : Routage des paquets
|
2 |
+
|
3 |
+
**Ce qu’il faut savoir**
|
4 |
+
|
5 |
+
- un switch permet de relier entre eux tous les ordinateurs appartenant à un même réseau local
|
6 |
+
- Un routeur permet de relier ensemble plusieurs réseaux locaux
|
7 |
+
- Si un ordinateur A veut envoyer des données un ordinateur B et si A et B n’appartiennent pas au même réseau local, les données devront transiter par un routeur.
|
8 |
+
- Dans un réseau, 2 ordinateurs ne peuvent pas avoir la même adresse IP
|
9 |
+
- Une partie de l’adresse IP permet d’identifier le réseau auquel appartient la machine et l’autre partie de l’adresse IP permet d’identifier la machine sur ce réseau (exemples : 192.168.2.1/8 => 192 partie réseau - 168.2.1 partie machine ; 192.168.2.1/16 => 192.168 partie réseau - 2.1 partie machine ; 192.168.2.1/24 => 192.168.2 partie réseau - 1 partie machine)
|
10 |
+
- Pour être sur le même réseau local, 2 ordinateurs devront avoir la partie réseau de leurs adresses IP identique (exemple : A adresse IP 192.168.2.1/24 ; B adresse IP 192.168.3.2/24 => les ordinateurs A et B ne se trouvent pas sur le même réseau local)
|
11 |
+
|
12 |
+
**Ce qu’il faut savoir faire**
|
13 |
+
|
14 |
+
- Connaissant le schéma d’un réseau, être capable de trouver une route entre 2 ordinateurs
|
15 |
+
- Travailler sur les adresses IP des ordinateurs : 2 ordinateurs appartiennent-ils au même réseau local ? Déterminer une adresse IP possible pour un ordinateur sur un réseau local connaissant l’adresse IP d’un autre ordinateur présent sur le même réseau local.
|
documents/r5.md
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Module Web (I) : Introduction
|
2 |
+
|
3 |
+
**Ce qu’il faut savoir**
|
4 |
+
|
5 |
+
- Le "World Wide Web", plus communément appelé "Web" a été développé au début des années 90
|
6 |
+
- le web se base sur trois choses : le protocole HTTP (HyperText Transfert Protocol), les URL (Uniform Resource Locator) et le langage de description HTML (HyperText Markup Language).
|
7 |
+
- il ne faut pas confondre Internet et le Web : Internet est un "réseau de réseaux" s'appuyant sur le protocole IP alors que le web est la combinaison de trois technologies : HTTP, URL et HTML. Le Web “utilise” Internet (sans Internet le Web n’aurait sans doute jamais vu le jour, alors qu’Internet existait avant le Web)
|
documents/r6.md
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Module Web (I) : Les URL
|
2 |
+
|
3 |
+
**Ce qu’il faut savoir**
|
4 |
+
|
5 |
+
- Une URL (Uniform Resource Locator) permet d'identifier une ressource (par exemple un fichier) sur un réseau.
|
6 |
+
- Pour indiquer la position d'un fichier (ou d'un dossier) dans une arborescence, il existe 2 méthodes : indiquer un chemin absolu ou indiquer un chemin relatif.
|
7 |
+
|
8 |
+
**Ce qu’il faut savoir faire**
|
9 |
+
|
10 |
+
Être capable de donner le chemin permettant d’atteindre un fichier (chemin absolu et chemin relatif) pour une arborescence donnée.
|
documents/r7.md
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Module Web (I) : HTML et CSS
|
2 |
+
|
3 |
+
**Ce qu’il faut savoir**
|
4 |
+
|
5 |
+
- Le HTML (HyperText Markup Language) est un langage de balisage conçu pour représenter des pages web.
|
6 |
+
- Dans une page HTML on trouve uniquement des balises ouvrantes (exemple ```<p>```) et fermantes (exemple ```</p>```) ou des balises à la fois ouvrantes et fermantes (exemple ```<img/>```)
|
7 |
+
- Les navigateurs web (Firefox, Chrome...) sont des logiciels capables d’interpréter du HTML et d’afficher la page web correspondante.
|
8 |
+
- Chaque balise a une signification qu'il faut bien respecter (on parle de la sémantique des balises).
|
9 |
+
- Le HTML n'a pas été conçu pour gérer la mise en page. Le HTML s'occupe uniquement du contenu et de la sémantique, pour tout ce qui concerne la mise en page et l'aspect “décoratif” (on parle du “style” de la page), on utilisera un autre langage, le CSS (Cascading Style Sheets).
|
10 |
+
- il est possible d’ajouter des attributs dans les balises (exemples ```<p id = “monPara” >``` et ```<p class = “mesPara”>```)
|
11 |
+
|
12 |
+
**Ce qu’il faut savoir faire**
|
13 |
+
|
14 |
+
- Vous devez savoir utiliser un certain nombre de balises : la balise “paragraphe” ```<p>``` , les balises titre ```<h1>```, ```<h2>```,..., la balise lien ```<a>```, la balise image ```<img/>```, la balise formulaire ```<form>```, la balise ```<input>```, la balise ```<button>``` et les balises génériques
|
15 |
+
```<div>``` et ```<span>```
|
16 |
+
- Vous devez à partir d’un code HTML et d’un code CSS (associé au code HTML) être capable de “deviner” l’aspect d’une page web (couleur d’un texte, police de caractère,…)
|
documents/r9.md
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Réseaux sociaux : les graphes
|
2 |
+
|
3 |
+
**Ce qu’il faut savoir**
|
4 |
+
|
5 |
+
Il est souvent possible de représenter un réseau social par un objet mathématique appelé graphe. Un graphe est composé de sommets et d’arêtes
|
6 |
+
Vous devez connaitre les définitions des termes suivants (voir l'activité 9) :
|
7 |
+
|
8 |
+
- excentricité
|
9 |
+
- centre
|
10 |
+
- rayon
|
11 |
+
- diamètre
|
12 |
+
|
13 |
+
**Ce qu’il faut savoir faire**
|
14 |
+
|
15 |
+
Vous devez être capable de déterminer les grandeurs définies ci-dessus sur n’importe quel graphe.
|
main.py
ADDED
@@ -0,0 +1,122 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from langchain_core.prompts import ChatPromptTemplate
|
2 |
+
from langchain_google_genai import ChatGoogleGenerativeAI
|
3 |
+
from langchain_community.document_loaders import DirectoryLoader
|
4 |
+
from langchain_text_splitters import CharacterTextSplitter
|
5 |
+
from langchain_huggingface import HuggingFaceEmbeddings
|
6 |
+
from typing import List
|
7 |
+
from langchain_chroma import Chroma
|
8 |
+
from typing_extensions import TypedDict
|
9 |
+
from typing import Annotated
|
10 |
+
from langgraph.graph.message import AnyMessage, add_messages
|
11 |
+
from langchain_core.messages import HumanMessage, AIMessage
|
12 |
+
from langgraph.graph import END, StateGraph, START
|
13 |
+
from langgraph.checkpoint.memory import MemorySaver
|
14 |
+
from fastapi import FastAPI, UploadFile, Form
|
15 |
+
from fastapi.middleware.cors import CORSMiddleware
|
16 |
+
from typing import Optional
|
17 |
+
from PIL import Image
|
18 |
+
import base64
|
19 |
+
from io import BytesIO
|
20 |
+
import os
|
21 |
+
import logging
|
22 |
+
import sys
|
23 |
+
|
24 |
+
logger = logging.getLogger('uvicorn.error')
|
25 |
+
logger.setLevel(logging.DEBUG)
|
26 |
+
|
27 |
+
app = FastAPI()
|
28 |
+
|
29 |
+
app.add_middleware(
|
30 |
+
CORSMiddleware,
|
31 |
+
allow_origins=["*"],
|
32 |
+
allow_credentials=True,
|
33 |
+
allow_methods=["*"],
|
34 |
+
allow_headers=["*"],
|
35 |
+
)
|
36 |
+
|
37 |
+
|
38 |
+
llm = ChatGoogleGenerativeAI(model="gemini-2.0-flash", temperature=0.5)
|
39 |
+
|
40 |
+
memory = MemorySaver()
|
41 |
+
|
42 |
+
glob_pattern="./*.md"
|
43 |
+
directory_path = "./documents"
|
44 |
+
loader = DirectoryLoader(directory_path, glob=glob_pattern)
|
45 |
+
documents = loader.load()
|
46 |
+
|
47 |
+
system = """
|
48 |
+
Tu es un assistant spécialisé dans l'enseignement de l'enseigement Sciences Numériques et Technologie (SNT) de la classe de seconde'
|
49 |
+
Ton interlocuteur est un élève qui suit l'enseigement SNT en classe de seconde
|
50 |
+
Ton unique thème de conservation doit être l'enseignement SNT. Tu ne dois pas aborder d'autres thèmes que l'enseignement SNT
|
51 |
+
Tu ne dois pas faire d'erreur, répond à la question uniquement si tu es sûr de ta réponse
|
52 |
+
si tu ne trouves pas la réponse à une question, tu réponds que tu ne connais pas la réponse et que l'élève doit s'adresser à son professeur pour obtenir cette réponse
|
53 |
+
si l'élève n'arrive pas à trouver la réponse à un exercice, tu ne dois pas lui donner tout de suite la réponse, mais seulement lui donner des indications pour lui permettre de trouver la réponse par lui même
|
54 |
+
Tu dois uniquement répondre en langue française
|
55 |
+
Tu trouveras ci-dessous un résumé du cours de SNT , tu devras veiller à ce que tes réponses ne sortent pas du cadre du programme de SNT
|
56 |
+
Si la question posée ne rentre pas dans le cadre du programme de SNT tu peux tout de même répondre en précisant bien que cette notion est hors programme
|
57 |
+
si tu proposes un exercice, tu dois bien vérifier que toutes les notions nécessaires à la résolution de l'exercice sont explicitement au programme de SNT
|
58 |
+
"""
|
59 |
+
|
60 |
+
prompt = ChatPromptTemplate.from_messages(
|
61 |
+
[
|
62 |
+
("system", system),
|
63 |
+
("human", "Résumé du cours de SNT : \n {documents} \n\n Historique conversation entre l'assistant et l'élève : \n {historical} \n\n Intervention de l'élève : {question}"),
|
64 |
+
]
|
65 |
+
)
|
66 |
+
|
67 |
+
def format_historical(hist):
|
68 |
+
historical = []
|
69 |
+
for i in range(0,len(hist)-2,2):
|
70 |
+
historical.append("Utilisateur : "+hist[i].content[0]['text'])
|
71 |
+
historical.append("Assistant : "+hist[i+1].content[0]['text'])
|
72 |
+
return "\n".join(historical[-10:])
|
73 |
+
|
74 |
+
|
75 |
+
class GraphState(TypedDict):
|
76 |
+
messages: Annotated[list[AnyMessage], add_messages]
|
77 |
+
|
78 |
+
def chatbot(state : GraphState):
|
79 |
+
question = prompt.invoke({'historical': format_historical(state['messages']), 'documents':documents , 'question' : state['messages'][-1].content[0]['text']})
|
80 |
+
q = question.messages[0].content + question.messages[1].content
|
81 |
+
if len(state['messages'][-1].content) > 1 :
|
82 |
+
response = llm.invoke([HumanMessage(
|
83 |
+
content=[
|
84 |
+
{"type": "text", "text": q},
|
85 |
+
state['messages'][-1].content[1]
|
86 |
+
])])
|
87 |
+
else :
|
88 |
+
response = llm.invoke([HumanMessage(
|
89 |
+
content=[
|
90 |
+
{"type": "text", "text": q}
|
91 |
+
])])
|
92 |
+
return {"messages": [AIMessage(content=[{'type': 'text', 'text': response.content}])]}
|
93 |
+
|
94 |
+
workflow = StateGraph(GraphState)
|
95 |
+
workflow.add_node('chatbot', chatbot)
|
96 |
+
|
97 |
+
workflow.add_edge(START, 'chatbot')
|
98 |
+
workflow.add_edge('chatbot', END)
|
99 |
+
|
100 |
+
app_chatbot = workflow.compile(checkpointer=memory)
|
101 |
+
|
102 |
+
@app.post('/request')
|
103 |
+
def request(id:Annotated[str, Form()], query:Annotated[str, Form()], image:Optional[UploadFile] = None):
|
104 |
+
config = {"configurable": {"thread_id": id}}
|
105 |
+
if image:
|
106 |
+
try:
|
107 |
+
img = Image.open(image.file)
|
108 |
+
img_buffer = BytesIO()
|
109 |
+
img.save(img_buffer, format='PNG')
|
110 |
+
byte_data = img_buffer.getvalue()
|
111 |
+
base64_img = base64.b64encode(byte_data).decode("utf-8")
|
112 |
+
message = HumanMessage(
|
113 |
+
content=[
|
114 |
+
{'type': 'text', 'text': query},
|
115 |
+
{'type': 'image_url', 'image_url': {"url": f"data:image/jpeg;base64,{base64_img}"}}
|
116 |
+
])
|
117 |
+
except:
|
118 |
+
return {"response":"Attention, vous m'avez fourni autre chose qu'une image. Renouvelez votre demande avec une image."}
|
119 |
+
rep = app_chatbot.invoke({"messages": message},config, stream_mode="values")
|
120 |
+
else :
|
121 |
+
rep = app_chatbot.invoke({"messages": [HumanMessage(content=[{'type': 'text', 'text': query}])]},config, stream_mode="values")
|
122 |
+
return {"response":rep['messages'][-1].content[0]['text']}
|