ERG::Code-2019-2

De {}
Aller à la navigation Aller à la recherche

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

Lena

Marco

Séances

16/04/2020

import datetime
import time


file = open("frequence.json", "r")
derniere_execution = file.read

#2020-04-16 11:53:56.184902
moment1 = datetime.strptime(derniere_execution, '%Y-%m-%d %H-%M-%S.%f')
print(moment1)


delai = moment2-moment1
print(delai.total_seconds())

if delai.total_seconds() > 2:
    print('ok')
import datetime
import time


moment1 = datetime.datetime.now()
print(moment1)

time.sleep(3)

moment2 = datetime.datetime.now()

print(moment2)

delai = moment2-moment1
print(delai.total_seconds())

if delai.total_seconds() > 2:
    print('ok')

05/03/2020: twitter bots: on avance

#!/usr/bin/python
# -*- coding: utf-8 -*-

import requests
import json
import sys
import time
import datetime

from urllib.request import urlopen
from urllib.parse import quote


#https://api.tomtom.com/search/2/geocode/87%20rue%20du%20Page%2C%20Bruxelles.json?limit=1&countrySet=FR%2CBE&language=fr-FR&key=*****

#https://api.tomtom.com/search/2/geocode/87%20rue%20du%20page%20Bruxelles.json?limit=1&countrySet=BE%2CFR&language=fr-FR&key=*****
apiURL      = "https://api.tomtom.com/search/2/geocode"
# apiKey

adresse   = quote("87 rue du Page, Bruxelles")


tomtomURL = "{0}/{1}.json?limit=1&countrySet=BE,FR&language=fr-FR&key={2}".format(apiURL,adresse,apiKey)
#tomtomURL = apiURL+'/'+adresse+'.json?limit=1&countrySet=BE,FR&language=fr-FR&key='+apiKey

getData = urlopen(tomtomURL).read()
result = json.loads(getData)
print(result['results'][0]['position'])

#0 ON Récupère le fichier json et on le convertit en tableau
dejaTweetes = ['19809898', '1798798798798', '87987987987987']

#1 RÉCUPÉRER UN TWEET QUI CONTIENT LES MOTS "SOUS L'ARBRE"
#2 est-ce que l'id de ce tweet est dans le tableau dejaTweetes?
##Si oui, on ne fait rien
##Si non, on exécute le traitement et on ajoute l'id du tweet au tableau dejaTweetes

#à la fin, on enregistre le tableau dans un fichier json externe

20/02/2020: web scraping

Librairies Python

#!/usr/bin/python
# -*- coding: utf-8 -*-

import mechanize
import lxml.html as parser
import cssselect

#01. naviguer sur le site cible
### on déclare un browser
br = mechanize.Browser()

### on ajoute des infos sur le navigateur
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; Linux x86_64; rv:69.0) Gecko/20100101 Firefox/69.0')]

### on ignore la gestion des robots du serveur
br.set_handle_robots(False)

### on récupère le code source de la page
data = br.open('https://poesie.webnet.fr/lesgrandsclassiques/Authors/B', timeout=10)

#print(data.read())

#02. parser la source pour récupérer les liens
source = data.read()

#unicode_src = source.decode('utf-8', 'ignore')

tree = parser.fromstring(source)

##pour chaque objet de type selector déduit du sélecteur css
for selector in cssselect.parse('.author-list__link'):
    ##on convertit l'objet selector en xpath
    xpath_selector = cssselect.HTMLTranslator().selector_to_xpath(selector)
    ##pour chaque lien trouvé par ce xpath
    for link in tree.xpath(xpath_selector):
        print(link.get('href'))
        print(link.text_content())
#!/usr/bin/python
# -*- coding: utf-8 -*-

import mechanize
import lxml.html as parser
import cssselect
import random

def getHtmlTree(url):
    ### on récupère le code source de la page
    data = br.open(url, timeout=10)

    #print(data.read())

    #02. parser la source pour récupérer les liens
    source = data.read()

    #unicode_src = source.decode('utf-8', 'ignore')

    tree = parser.fromstring(source)

    return tree

def getRandomLink(url, cssSelector):
    tree = getHtmlTree(url)

    ##pour chaque objet de type selector déduit du sélecteur css
    for selector in cssselect.parse(cssSelector):
        ##on convertit l'objet selector en xpath
        xpath_selector = cssselect.HTMLTranslator().selector_to_xpath(selector)
        ##pour chaque lien trouvé par ce xpath
        links = tree.xpath(xpath_selector)
        
        return random.choice(links).get('href')



#01. naviguer sur le site cible
### on déclare un browser
br = mechanize.Browser()

### on ajoute des infos sur le navigateur
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; Linux x86_64; rv:69.0) Gecko/20100101 Firefox/69.0')]

### on ignore la gestion des robots du serveur
br.set_handle_robots(False)

link1 = getRandomLink('https://poesie.webnet.fr/lesgrandsclassiques/Authors/B', '.author-list__link')

#print('https://poesie.webnet.fr'+link1)

url = '%s%s' % ('https://poesie.webnet.fr', link1)

poemeurl = '%s%s' % ('https://poesie.webnet.fr', getRandomLink(url, '.author-list__link'))

poemeTree = getHtmlTree(poemeurl)

#.poem__content

for selector in cssselect.parse('.poem__content'):
    ##on convertit l'objet selector en xpath
    xpath_selector = cssselect.HTMLTranslator().selector_to_xpath(selector)
    ##pour chaque poème trouvé par ce xpath
    poems = poemeTree.xpath(xpath_selector)
    print(poems[0].text_content())

    #print(poem.text_content())

13/02/2020: writing bot: Twitter API

#!/usr/bin/env python3
# coding: utf-8

from acces import *
import tweepy
import time

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)


api = tweepy.API(auth)
'''
while True:
    api.update_status(status='Tu veux un camembert?')
    time.sleep(600)
'''

'''tweets = tweepy.Cursor(api.search, q='fromage', tweet_mode='extended').items(10)
'''
'''
tweets = tweepy.Cursor(api.user_timeline, '@booba', tweet_mode='extended').items(10)

for tweet in tweets:
    print('###'+tweet.full_text+'###')
'''
user = api.get_user('@poete_nrv')
print(user.id)
#api.send_direct_message(user.id, 'tu veux un camembert?')
api.create_friendship(user.id, True)

06/02/2020: writing bot: introduction

À propos de robots qui génèrent du texte.

Imaginer un robot qui intervient en postant du texte sur un ou plusieurs réseaux sociaux; mastodon, youtube, instagram, facebook, twitter, etc. Écrire une description de ce robot et la poster sur le wiki. La description doit répondre aux questions suivantes: - quelle(s) source(s) pour le texte - quels types de traitements sont utilisés pour générer le texte (penser aux traitements développés pendant le premier quadri) - qu'est-ce qui déclenche le post? - quel canal est utilisé pour le post?

@everyword, Allison Parrish: https://twitter.com/everyword

@nicetipsbot, Thricedotted: https://twitter.com/nice_tips_bot

@tinycarebot, Jonny Sun: https://twitter.com/tinycarebot

@infinite_scream, Nora Reed: https://twitter.com/infinite_scream

Darius Kazemi: http://tinysubversions.com/projects/

@predartbot, Maria Roszkowska et Nicolas Maigret: http://artbot.space/

Des bots qui n'écrivent pas mais qui agissent sur le web

https://wwwwwwwwwwwwwwwwwwwwww.bitnik.org/r/

Ressources

https://botwiki.org

Créer un bot Twitter

Voir https://help.twitter.com/en/rules-and-policies/twitter-automation

12/12/2019

La suite

Le poème de base, plus long avec les vers de tout le monde.

Les éditions
"Le Canapé"
m'avaient donné
une mission :
un grand roman
transformiste.
C'est vrai ou faux
un ou zéro
C'est noir ou blanc
larme amme bien
le code binaire
tout est très claire
L'ORDINATEUR
Circuits Immenses
Zéros et uns
Rythment le cod(e).
Répétition,
Zéros et uns
Saut a la ligne,
C'est un secret.
Écrire à l'ordinateur,
ou à la main ?
Écrire sur le passé,
ou sur demain ?
Écrire des mots,
ou un poème ?
Écrire sur l'amour,
ou sur la haine ?
Plus de points
d’interrogation,
écrivez juste
une assertion !

05/12/2019: conception édition suite

Évolution du projet

Un livret pour une feuille A3 recto-verso dans une couverture / pochette sur laquelle figure les instructions de pliage / dépliage. La manipulation permet de voir soit les poèmes les uns à la suite des autres soit les codes et les énoncés.
Chaque code + énoncé est directement derrière le poème associé.

Outils de travail

serveur ftp: curlybraces.be, ergstudent.curlybraces

pad de travail: https://pad.lvh2.com/p/poetry

accès http: http://curlybraces.be/erg/2019-2020/poetry/

21/11/2019: conception édition

Types de contenus:
* l'énoncé en français des programmes
* le code source des programmes
* les liens entre énoncés et codes sources
* le résultat des programmes
* les liens entre codes sources et résultats
* la poésie initiale en binaire
* la poésie initiale en ascii
* date et heure de l'exécution
* auteurs des programmes
* liens entre auteurs et codes sources
* liens entre auteurs et énoncés
* titre?
* typologie de programmes
(ajout d'éléments, inversion, random, suppression de caractères)
* interaction ou pas
* distinguer code source (couleur?)
* vis à vis entre ascii et binaire ou deux parties
* manière de montrer l'interaction/l'éxécution
-> voir le terminal? capture d'écran?
-> date et heure
* nom des programmes : auteur ou autre
* choix des poésies générées : un certain nombre par programme, une sélection, si oui, quels critères
* montrer les échecs d'exécution?

* forme évolutive -> reliure languettes metalliques
* surrimpressions entre texte généré et code (riso?)
* le titre = poème binaire
* dernière chose qu'on voit (4ème de couverture?) -> poème ascii

* note d'intention
* chapitrage -> titres qui sont des chemins dans un disque (/home/lecteur/poesie/titre du poème)
* structure du livre
**titre
**note d'intention
**manipulations
***inversion
****énoncé en français
****résultat
****code python
****énoncé en français
****résultat
****code python
***remplacement
****énoncé en français
****résultat
****code python
**poème en ascii


* quel est le but? rendre clair? jouer sur le brouillage? esthétique du code, choses qui se croisent.
-> la lecture du code pour un être humain, quels dispositifs graphiques mettre en place et pourquoi?

* thèmes: ajout, suppression, remplacement, inversion, aléatoire
* textes résultats: tous les poèmes ont le même nombre de ligne donc ils occupent la même hauteur (celui qui supprime une ligne sur deux -> une ligne sur deux est blanche)
* Raymond Queneau, exercices de style -> différents résultats pour un programme
* chaque chapitre a une police monospace différente
* séparer les résultats des processus de création donc 
-> une partie avec les vers de chacun en binaire et en ascii
-> une partie avec les énoncés et les codes sources classés par typologie
-> une partie que les résultats, classés par typologie 


* deux types de mises en exergue selon les propositions:
-> soit on met l'accent sur la traduction entre énoncé, résultat, code source
-> soit on met l'accent sur le processus de création, donc du contexte avec des éléments comme date, 
   captures d'écran, interactions
-> soit on met l'accent sur le rapport entre les différents résultats et donc leurs similarités et différences

* proposition: trois livrets ou trois parties distinctes pour les trois types de texte:
  énoncé, résultat, code source. -> les trois parties ont une autonomie, l'accent est mis sur les différences
  et similarités entre les textes. La question du contexte d'exécution ou de fabrication se retrouve dans
  la navigation (marges extérieures)

Références publications

http://sync.abue.io/

http://www.coryarcangel.com/things-i-made/2016-061-the-source-digest-srf-038 et http://www.coryarcangel.com/downloads/the-source-digest-2016-061-digital-master-ih.pdf

http://novel.coryarcangel.com/

07/11/2019: Introduction web et html

Notes Internet

INTERNET
réseaux
serveur / client
data (données)
communication (entre machines) -> protocoles
décentralisé

web
navigateur
client ftp

Démo html

<!doctype html>
<html>
  <head>
    <title>Poème</title>
    <meta charset="utf-8">

  </head>

  <body>
    
    <section>
    <header>En-tête de la section</header>
      <h1>Mon poème</h1>
      <h2>Sous-titre</h6>
        <article>
        <p>
        <a href="http://www.curlybraces.be">Transformiste</a> poeme noir
    L'immense plus
    Le secret ecrit
    Les binaires <span>demains</span> rythment
    Les mains,
    Une haine binaire et une juste haine
    L'immense interrogation
    Claire repetition juste
    Une repetition transformiste :
    Des mains, les haines, un plus !
    Les secrets blancs et le faux demain
    Les missions blanches,
    L'assertion vraie ?
    Claire edition transformiste
    Un saut juste
    Claire mission claire
    L'ordinateur juste ou une noire assertion
    Blancs ordinateurs clairs
    Une grande mission ecrit !
    Une noire assertion ecrit,
    Les points immenses et blancs
    Le poeme ecrit
    Noir passe faux
    L'edition.
    La vraie edition m'avait donne ?
      </p>
    </article>
    <footer>pied de page</footer>
</section>
  </body>
</html>

24/10/2019: Poésie algorithmique avec Python suite et fin

Le programme de Lena

#!/usr/bin/env python
# -*- coding: utf-8 -*-

'''
Pourquoi ne pas essayer d'inverser le premier et dernier mot de chaque phrases. Ainsi que la première et la dernière lettre du premier mot de chaque phrases.
'''



with open('poetry', 'r') as teteLecture:
    poeme = teteLecture.read()

poemeLignes = poeme.splitlines()
'''
for ligne in poemeLignes:
    print(ligne)

for compteur in range(0, len(poemeLignes)):
    ligne = poemeLignes[compteur]

'''



for ligne in poemeLignes:

    words = ligne.split(" ")
    #   0      1
    #['la', 'maison']
    premierMot = words[0]

    premiereLettre = premierMot[0]

    #premierMot[0] = premierMot[len(premierMot) - 1]

    premierMot = premierMot[len(premierMot) - 1] + premierMot[1:]
    #naison
    premierMot = premierMot[:len(premierMot)-1] + premiereLettre

    #premierMot[len(premierMot) - 1] = premiereLettre

    words[0] = premierMot


    #la
    words[0] = words[len(words)-1]
    #['maison', 'maison']
    words[len(words)-1] = premierMot
    #['maison', 'maison']

    print(' '.join(words))
    '''newline = ""
    for word in words:
        newline = newline + word + " "


    print newline
    '''

Dernier énoncé

Le programme demande à l'utilisateur le nombre de vers à générer.
Le programme génère autant de vers aléatoires que le nombre entré par l'utilisateur, à partir des mots du poème source et en utilisant la formule syntaxique "article + nom + complément + verbe" 

Une fois que ça marche deux améliorations possibles:
* accorder en genre et en nombre les phrases (ortographe inclusive ou non)
* avoir plusieurs formules syntaxiques et les choisir aléatoirement (ou selon une certaine logique) à chaque vers

Poèmes générés

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).