ERG::Code-2019-2

De {}
Aller à : navigation, rechercher

Introduction

Ce cours est destiné aux étudiant.e.s de BAC3. Cette année, nous nous concentrons sur le rapport du numérique au texte. Les interactions textuelles avec les machines, le code générateur de poésie, le code en tant que poésie, le code secret, le code caché. Nous serons amenés à créer des poésies algorithmiques, des générateurs de textes, des machines à plagier, des bots twitter, des ordinateurs qui parlent. À travers différentes expérimentations menées en atelier, nous aborderons plusieurs langages de programmation, concepts informatiques et exemples dans les champs de l'art, du design, de l'histoire de l'informatique et autres.


Pages des étudiants

Claudia Stijn Zoe Gesine Thomas Violette


Séances

17/10/2019: Scripts python suite

Les editions
"Le Canape"
m'avaient donne
une mission :
un grand roman
transformiste.
Cest vrai ou faux
un ou zero 
Cest nomr ou blanc 
larme amme bien 
le code binaire 
touts est tres claire
L ORDINATEUR
Circuits Immenses
Zeros et uns
Rythment le cod(e).
Repetition,
Zeros et uns
Saut a la ligne,
C'est un secret.

Le programme de Claudia

Résolution collective de l'énoncé posé par Claudia

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
'''
Un programme qui demande à l'utilisateur « pair ou impair ? ».
Si l'utilisateur répond « pair », ne sont affichées que les lignes paires.
Si l'utilisateur répond « impair », ne sont affichées que les lignes impaires.
'''
 
 
 
with open('poetry', 'r') as teteLecture:
    poeme = teteLecture.read()
 
poemeLignes = poeme.splitlines()
 
'''
      0                  1                  2                 3
['Première ligne', 'Deuxième ligne', 'Troisième ligne', 'Quatrième ligne']
 
'''
 
print("pair ou impair?")
#reponse = input()
reponse = raw_input()
print(poemeLignes)
if reponse == "impair":
    #afficher les lignes paires
    indice = 0
else:
    #afficher les lignes paires
    indice = 1
 
 
while indice < len(poemeLignes):
    print(poemeLignes[indice])
    indice = indice + 2

10/10/2019: Scripts python

Donnez-moi un P!

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from time import sleep
import time
 
print("Qui est-ce?")
 
name = raw_input()
name = unicode(name, "utf-8")
 
message = 10
 
print("Salut %s %s" % (name, message))
 
for i in range(0, len(name)):
    print("Donnez-moi un %s " % name[i])
    for j in range(0, 5):
        print(name[i])
 
    sleep(0.5)
 
 
print("%s!" % name)

Oh ben t'es tout vieux

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
'''
<
>
<=
>=
==
!=
'''
 
 
print("Quel âge as-tu?")
age = int(raw_input())
#age = input()
 
if age < 10:
    print("Oh ben t'es tout petit!")
elif age < 20:
    print ("Oh ben t'es tout jeune")
elif age < 30:
    print ("Oh ben t'es presque tout vieux")
else:
    print("Oh ben t'es tout vieux")

Le programme de Zoé

Résolution collective de l'énoncé posé par Zoé : Le programme permute les mots de moins de 3 lettres, et les mots de plus de 5 lettres.


#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
#Le programme permute les mots de moins de 3 lettres, et les mots de plus de 5 lettres.
 
with open('poetry','r') as lecture:
    poyeme = lecture.read()
 
poyeme_lines = poyeme.splitlines()
 
 
#Etape 1: enregistrer tous les mots de plus de 5 lettres dans un tableau
plus_cinq = []
 
for poyeme_line in poyeme_lines:
    words = poyeme_line.split(' ')
    for word in words:
        nbLettres = len(word)
        if nbLettres > 5:
            plus_cinq.append(word)
 
#print(plus_cinq)
 
 
#Etape 2: enregistrer tous les mots de moins de 3 lettres dans un tableau
moins_trois = []
 
for poyeme_line in poyeme_lines:
    words = poyeme_line.split(' ')
    for word in words:
        nbLettres = len(word)
        if nbLettres < 3 and word != '':
            moins_trois.append(word)
 
#print(moins_trois)
 
#Etape 3: parcourir le texte et remplacer les mots de moins de 3 lettres par les mots de 5 lettres et inversément
compteur_permutations_moins_trois = 0;
compteur_permutations_plus_cinq = 0;
 
for poyeme_line in poyeme_lines:
    words = poyeme_line.split(' ')
    new_line = ''
 
    for word in words:
 
        #une condition qui teste si le mot fait moins de 3 lettres
        if word in moins_trois:
 
            new_word = plus_cinq[compteur_permutations_moins_trois % len(plus_cinq)]
            compteur_permutations_moins_trois = compteur_permutations_moins_trois + 1
            #print(new_word)
            new_line = new_line + " " + new_word
        elif word in plus_cinq:
            new_word = moins_trois[compteur_permutations_plus_cinq % len(moins_trois)]
            compteur_permutations_plus_cinq = compteur_permutations_plus_cinq + 1
            new_line = new_line  + " " +  new_word
            #print(new_word)
        else:
            new_line = new_line  + " " +  word
            #print(word)
 
 
    print(new_line)

03/10/2019 : introduction langages

Poésie binaire: suite

100001001100101010000011100101100101110011111001011101110010000011101101100001110110011101000001101110000111011001110011010000011011011100101110111011100111100101111001101000001111010110100111000111101000000011011101101100101111001011110101100111110110111001011101100110010111011101111110000110110101101101001110010111100100100000100010011000011100111110010111011100100000111011111001011001010001101110010111011100100000110010111001011101110010000011001001100001110011101000001101110110100111001011110100000110110011101101111110111111010011110100010000011011011100101110010111001001000011101001100101111001011101011100111

100110011001011110011010000011001011100100110100111101001101001110111111011101110011000110101000101001100110010101000001000011110000111011101100001111000011001010100010000110111011010100111110000111101101100001110100111001011101110111010001000001100100110111111011101101110110010100011011110101110111011001010100000110110111010011110011111001111010011101111110111001000000111010000110111101011101110010000011001111110010110000111011101100100010000011100101101111110110111000011101110000110111101001110010110000111011101110011110011011011111110010110110111010011110011111010011001010101110

1000011 1100101 1110011 1110100 0100000 1110110 1110010 1100001 1101001 0100000 1101111 1110101 0100000 1100110 1100001 1110101 1111000 0001101 1110101 1101110 0100000 1101111 1110101 0100000 1111010 1100101 1110010 1101111 0100000 0001101 1000011 1100101 1110011 1110100 01000001101110 1101111 1101101 1110010 0100000 1101111 1110101 0100000 1100010 1101100 1100001 1101110 1100011 0100000 0001101 1101100 1100001 1110010 1101101 1100101 0100000 1100001 1101101 1101101 1100101 0100000 1100010 1101001 1100101 1101110 0100000 0001101 1101100 1100101 0100000 1100011 1101111 1100100 1100101 0100000 1100010 1101001 1101110 1100001 1101001 1110010 1100101 0100000 0001101 1110100 1101111 1110101 1110100 1110011 0100000 1100101 1110011 1110100 0100000 1110100 1110010 1100101 1110011 0100000 1100011 1101100 1100001 1101001 1110010 1100101 

10011000100000100111110100101000100100100110011101000001101010010001011010101101001000011011001010101111101010110001010100000101001110000011001110101001101000001000101101001010100101000101101010110100100001101101000010011111010101101001001000001000100100010110100110100000100011110100101001111101001101000001010100101100110100001000101101001100011011000100100010110100110100000101011010010011000101101010110110000100000101000010100101001001100111010000111001001101000010001011010011000110110011001000001010000010101101001001100010101000001000100101010101000001010000101001010010011001110100001110001010001101100110010001010100000100001110010001001111100100110110000100000100010010101010100000101001010011111001001000110110000110100000100010110100111010100010000010101001001111100100101000001010001101010110010010100000101001010010011001110100001110001010001101100001101000001000101101001110101000100000100110110011111001001010000010100011010101100100101000001000010100111110010011010100


100001111010011110010110001111101011101001111010011100110100000100100111011011101101110010111011101110011110010111100110001101101000111010111010010100000111001101001111100001110011111001011101110110001111001011101110111010000011011010110110000111100101101001110000111101001101001110111111011101110011000110110100001110010110111111001101110101111001111010011101111110111001000001100100110010100011010110000010000011001011110100010000011001001100101010000001100010001101100110011000011101110110011111000011100111100101010000011001000100111111010111011100001101100111010111101001110010110010101000001110101110111011010011110110110010111100101110011

1011010110010111100101101111111001101000001100101111010001000001110101110111011100110001101101001011110011110100110100011011011100101110111011101000100000110110011001010100000110001111011111100100010100011001010101001010111000011011010010110010111100001100101111010011010011110100110100111011111101110010110000011011011010110010111100101101111111001101000001100101111010001000001110101110111011100110001101101001111000011110101111010001000001100001010000011011001100001010000011011001101001110011111011101100101010110000011011000011010011111001011110011111010001000001110101110111001000001110011110010111000111110010110010111101000101110

10011111100011110001111010001101001SP1100100SP11101001100001110110011100001100001SP110100111011011110000110110011011111110010110000111011101101111SP11010011101100SP1110010110100111000111101111111001011001001101111CR11001001101001SP1100011110111111011011110000110010111011101110011110000111100101100101SP119991111919911101111SP110001111011001011000SP1100101SP11100111110100110000111101001101111SP111010011011111101100111010011011110101110CR1100001110110011011001100001SP11100111101111110011111101100110100011100001SP110010011001011101100SP110110111010011101111SP11100001100101111010011101001101111SPCR11010001100001SP1100010111010111100111110011110000011110100110111SP11001011100100SP1101000110111SP1100001111000011001011110010111010011011111011110CR100111011001011101100SP1110100110010111100101110010110111111100101100101SP11001001100101110110011011001100001SP1110100110000111011101100001SP1100010111010111010011100001SP0101100CR11001111110000011011100110110011001011100111110011111010011100001110111011101001100101SP11000111110111111011011100101SP111010111011101100001SP1100010110111111000010101100CR11010001101111SP1110010110100011100011110111111011101101111111001111000111101001111010111101001101111SP11011001100001SP111001111001011101110111001111101001110001011010011101100110100111101001100001SP11101011101101110000111011101100001CR110100011101110SP1110101SP11101001101111111001011100111101111SP11001001101001SP11000111100001111001011011101100101SP110001111000011110010110111011000010101110

Le code ci-dessus converti en caractères (binaire vers ASCII) grâce à moulinette.py:

B2P92srw;0v:pv9P6rw9ryP=4qt;2y=3vrv2w?k4ry"0srw;reen een dag nietNooit meedCSKW
Les editions"Le Canape"m'avaient donneune mission :un grand romantransformiste.
Cest vrai ou fauxun ou zero Cest nomr ou blanc larme amme bien le code binaire touts est tres claire
L ORDINATEURJ_+A'&A%%+$&A%&A)3!&-+0A!%!&-A*A!%0A*A%'(A)A#+A%'(A#+A
Circuits ImmensesQkRAfOCOK]GK]heSCiS_]f_MkgS_\AIJ�`AKhAIJ@b]OCOW86:z92P:w4{2y9
Zeros et unsRythment le cod(e).Repetition,Zeros et unsSaut a la ligne,C'est un secret.

Tentatives de classements des langages de programmation

css, html, javascript + jquery
python, ruby, C, Assembleur, PHP
Processing, Java, C++, XML, binaire, ASP, Pascal, Turbo pascal,
C#, SQL


--------------------------------------------------
Langage web
-- langages côté client
css, html, javascript + jquery, XML

-- langages côté serveur
ASP, PHP, ruby, python, java, javascript

-- langage côté serveur spécifique aux bases de données
SQL

Langage pas web
assembleur, binaire
processing, java, python, C, C#, C++,Pascal, Turbo Pascal, ruby
javascript (nodejs), XML, html, css, PHP

-------------------------------------------------
Langages compilés
C, C#, C++,Pascal, Turbo Pascal, assembleur, java, python, Processing

-> le compilateur convertit le langage de haut niveau vers le binaire


Langages interprétés
javascript, XML, html, css, PHP, python, ruby

-----------------------------------------------
Langages orientés objets
C++, Java, Processing, Python, javascript, ruby

Langage procéduraux
C, Pascal, Turbo Pascal, assembleur

-------------------------------------------------
Langages descriptifs
html, css, xml

Langages algorithmiques
Les autres




XML

<users>
  <user>
    <name>Lionel Maes</name>
    <email>lionel@lavillahermosa.com</email>
  </user>
  <user>
    <name>Protch</name>
  </user>
</users>

HTML

<body>
  <h1>Le titre de la page</h1>
  <article>Et le texte de l'article</article>
</body>



javascript
alert('coucou les amis');
alert('vous avez bien dormi?');

-------------------------------------
Processing (Java)
print("coucou les amis");


Javascript
console.log("coucou les amis");

Python
print("coucou les amis")

PHP
echo "coucou les amis";


----------------------------------------------------------
Python
x = 0

PHP
$x = 0;

BASH
x=0

Hello python

#!python
# -*- coding: utf-8 -*-
 
print("Qui est-ce?")
 
name = input()
 
#name = raw_input()
 
#La ligne ci-dessous affiche Salut et le nom de l'utilisateur
#print("Salut "+name)
 
#boucle infinie
'''
while True:
    print("Salut "+name)
    print("Comment ça va?")
'''
 
 
 
#boucle while avec compteur
'''
compteur = 0
while compteur < 10:
    print("Salut "+name)
    compteur = compteur + 1
'''
#boucle for avec compteur
'''
for compteur in range(0, 10):
    print("Salut "+name)
'''
 
'''
  0   1   2   3   4   5
['L'|'i'|'o'|'n'|'e'|'l']
'''
 
print(name[2])
 
indice = 2
print(name[indice])
 
 
 
 
print("boum c'est fini")

Exercice : donnez moi un P, donnez moi un Y...

Écrire un programme Python qui affiche les lettres d'un prénom les unes à la suite des autres.

26/09/2019: texte et code

Notes

spécificité numérique
- virtuel, intangible
- source d'énergie, réseau (électrique ou autre)
- information codée, binaire

0 1


0 1 2 3 4 5 6 7 8 9 10

0 1 2 3 10 11 12 13 20




0 1 10 11 100 101 110 111 1000


16 8 4 2 1
1  0 1 1 1


  90  9
1 0   0

couleur
128 64 32 16  8 4  2  1
1   1  1  1   1 1  1  1       0000 0000          0000 0010

= 255

00000000 = 8 bits = 1 byte = 1 octet

FF 00 00

----------

1 1 1 1 1 1 1

a 1 0 0 0 0 1 1
a 1 1 0 0 0 0 1

b 0 1 0 0 0 1 1 
b 1 1 0 0 0 1 0

c 1 1 0 0 0 1 1
c 1 1 0 0 0 1 1

d 0 0 1 0 0 1 1 
d 1 1 0 0 1 0 0


A 1 0 0 0 0 0 1
A 1 0 0 0 0 0 1

F 0 1 1 0 0 0 1
F 1 0 0 0 1 1 0

Slides

Voir: slides 01: texte et code

1. INTERNATIONAL MORSE CODE, HAND SENDING - https://archive.org/details/gov.archives.arc.36813 Department of Defense. Department of the Army. Office of the Chief Signal Officer. (09/18/1947 - 02/28/1964)

  • Le code morse, inventé par Samuel F. B. Morse en 1832.
  • Directions pour tracer les lettres
  • Les confusions possibles si l'opérateur fait une erreur de rythme

2. TM 11-459 International Morse Code (Instruction) - 1959 - https://archive.org/details/Tm11-4591957/page/n3

  • Le télégraphe "a contribué plutôt à lier inextricablement la technologie et la place de l'humain" (K. Hayles - Lire et penser en milieux numériques p. 223)

3. Direct service guide for telegraphic cipher - 1939 - https://archive.org/details/directservicegui00sldu/page/20

  • Premier objectif: la compression (pour des raisons économiques)
  • 2e objectif: la discrétion
  • 3e objectif: le controle des erreurs

4. Bentley's second phrase code - 1929 - https://archive.org/details/bentleyssecondph00bent/page/778

  • Les codes ne sont plus liés au langage naturel

5. Idem

  • Ici, un "tableau de mutilation" qui permet de corriger un code mal transmis (qui contient une erreur d'une lettre)

6. Teleprinter n°7 - Creed & Company - 1930

  • Frederick G. Creed, inventeur du téléscripteur (vers 1910), ancien télégraphiste, canadien

7. Un exemple de téléscripteur - 1932, Londres

8. Code baudot - 1888

  • Un encodage des caractères sur 5 chiffres, 5 bits
  • Utilisé (dans des versions ultérieures) sur les premiers téléscripteurs
  • Nécessité de définir une vitesse de modulation, "baudrate" en anglais, qui définit le nombre de symboles envoyés en 1 seconde -> la question du début et de la fin!
  • Donald Murray adapte le code baudot en 1902 et attribue aux lettres les plus utilisées de l'alphabet les positions impliquant le moins de trous
  • En 1924, adaptation du code baudot-Murray par l'organisme International Telegraph Union en International Telegraph Alphabet No. 2 (ITA2)

9. ASCII - American Standard Code for Information Interchange - 1963 - pré 1971

  • sur 7 bits

Exercice : poésie binaire

Chaque étudiant.e écrit sur un pad commun au moins deux vers de 4 pieds en binaire en utilisant le tableau de conversion ASCII suivant: USASCII_code_chart.png


Déroulement du cours

Le cours ne nécessite aucun prérequis si ce n'est une capacité d'attention pendant les séances. Cette attention implique qu'à certains moments, par exemple lors des moments de discussions ou de présentations, il sera demandé aux étudiant.e.s de fermer leur ordinateur, que l'usage des smartphones est interdit et que les étudiant.e.s doivent arriver à l'heure au cours (9h, le jeudi matin).

Comme il s'agit d'un cours technique, les travaux se feront majoritairement en classe et il n'est pas absolument nécessaire de travailler en dehors du cours, à part pour documenter les travaux ou préparer leurs présentations (les cotations).

Le cours fonctionne en évaluation continue, ce qui signifie que chaque exercice réalisé en atelier aura une note attribuée. Pour réussir le cours, il faut essentiellement être présent.e.

À cette évaluation continue s'ajoute deux notes en décembre et en mai qui correspondent aux moments de cotations. Il est demandé pour ces cotations de présenter une sélection des travaux réalisés jusque là.

La difficulté technique, bien que présente, ne doit pas constituer une barrière pour assister au cours. Il ne sera pas demandé aux étudiant.e.s d'être performant.e.s mais plutôt de ne pas se braquer et d'accepter d'être inefficaces durant des périodes qui semblent parfois longues (voire trouver du plaisir dans ces périodes de recherches). L'entraide et le partage sont encouragés. Tout sera fait pour éviter des comportements de mise à distance du savoir entre celles et ceux "qui savent" et les "newbies".

Chaque étudiant.e a accès à ce wiki, qui servira durant toute l'année à documenter les travaux. La création des comptes pour le wiki se fait au début du deuxième cours (au moment de l'inscription au cours).