• Slidy
  • Toolbending:Déclaration d'Amour

    De Ustensile
    Aller à : navigation, rechercher

    Code & Love

    They (hackers, FS) create and use a broad variety of technological prosthetics to manifest a different view of the purpose of communication technology, and their continual and casual association with the cutting edge of that technology has molded them and their machines -- separately and jointly -- in novel and promising ways. In particular, because they are thoroughly accustomed to engaging in nontrivial social interactions through the use of their computers -- social interactions in which they change and are changed, in which commitments are made, kept, and broken, in which they may engage in intellectual discussions, arguments, and even sex -- they view computers not only as tools but also as arenas for social experience.[1]

    Loveletter.jpg

    Lettre d'amour écrit par Christopher Strachey et/ou Ferranti Mark 1 (1954) et re-enactment de David Link (2009): http://www.alpha60.de/art/love_letters/video/

    Iloveyou.jpg

    ILOVEYOU virus (2000)

    Lovemachine de Julien Deswaef (2012) automates Facebook love giving: http://lovemachine.cc

    What a beautiful voice! "Samantha" et Theodore dans Her (2014): http://www.youtube.com/watch?v=3n5muEWaE_Q

    Love Poem in Python http://code.activestate.com/recipes/496781-romantic-love-poem-in-python/

    Loveletter2.png

    Love-letter L'Ax-28 script apparut tout d'abord avec les dactylotypes Brother. Cette version dessiné par OSP est redessinée sur base d'une lettre d'amour trouvée dans la rue.

    Mission: Développer un Déclaration d'amour en Python

    Pseudo-code.png

    • Utilise bien les ingrédients dans la boite à outils mis à disposition dans les six sessions de Toolbending: ligne de commande, enscript, bash, core-utils, espeak, virtual machine, fontforge, graphviz, tinytypetools, python ...
    • Pour profiter du débogage et développement collective, c'est mieux d'arriver avec des questions, et des idées.
    • La Déclaration peut être adressée à quelqu’un(e), à plusieurs personnes, à des choses, idées ...
    • Commence par écrire ton programme en "pseudo-code"
    • La résultat a remettre sera un programme en python, à publier sur ta page utilisateur avant 23:59 CET 24/03/14. Le résultat du programme peut être un fichier pdf, un print dans le terminal, du son, une image ...
    • Avec uniquement les ingrédients de base traités ici, c'est bien possible d’écrire un beau programme! :)

    Python fonctions

    Une fonction permet de décrire une série de commandes qui seront réutilisées souvent:

    • Réduction de la duplication
    • Décomposition des problèmes complexes en morceaux simples
    • La clarté du code est amélioré
    • Plus facile de réutiliser du code

    Déclaration d’une fonction:

    <syntaxhighlight lang="python"> >>> def nom_fonction(paramètres optionnels): >>> "Description de la fonction." >>> commande >>> (commande) </syntaxhighlight>

    2 types de fonctions: Built-in functions et ceux définis par l'utilisateur. Les Built-in functions font partie du langage Python. Des fonctions intégrées déjà utilisées:

    <syntaxhighlight lang="python"> raw_input() # prompt for user input str() # turn an integer or a float into a string open() # open a file </syntaxhighlight>

    User defined functions are functions created with the def keyword. Avec return, la fonction renvoie un résultat qui sera enregistré dans une variable:

    <syntaxhighlight lang="python"> >>> def printme(str): >>> "This prints a passed string into this function" >>> print str; </syntaxhighlight>

    Appel de la fonction:

    <syntaxhighlight lang="python"> >>> printme("The Life Instinct: unification; the eternal return!"); >>> printme("the perpetuation and MAINTENANCE of the species;"); >>> printme("survival systems and operations; equilibrium;"); </syntaxhighlight>

    Function with parameter (sauver dans un fichier, happybirthday.py):

    <syntaxhighlight lang="python"> def happyBirthday(toolbender): print("Happy Birthday to you!") print("Happy Birthday to you!") print("Happy Birthday, dear " + toolbender + ".") print("Happy Birthday to you!")

    1. Appel de la fonction

    happyBirthday('Cleo') happyBirthday('Thibault') </syntaxhighlight>

    Dans le terminal:

    $ python happybirthday.py
    

    Fonction avec plusieurs arguments:

    <syntaxhighlight lang="python"> def happyBirthday(toolbender,moment): print("Happy " + moment + " to you!") print("Happy " + moment + " to you!") print("Happy " + moment + ", dear " + toolbender + ".") print("Happy " + moment + " to you!")

    1. Appel de la fonction avec 2 arguments

    happyBirthday('Moussa','carnaval') </syntaxhighlight>

    Nous pouvons utiliser les fonctions dans une boucle:

    <syntaxhighlight lang="python"> def happyBirthday(toolbender): print("Happy Birthday to you!") print("Happy Birthday to you!") print("Happy Birthday, dear " + toolbender + ".") print("Happy Birthday to you!")

    toolbenders = ('Moussa', 'Benoit', 'Cleo', 'Vito', 'Elliot', 'Morgan', 'Gaelle', 'Marouchka', 'Julien', 'Maxime', 'Thibault', 'Andy', 'Maryl')

    1. Appel de la fonction dans un boucle

    for toolbender in toolbenders: happyBirthday(toolbender) </syntaxhighlight>

    More about functions: http://anh.cs.luc.edu/python/hands-on/3.1/handsonHtml/ch1.html

    Tutoriels

    Le but de ce tutoriel sera de discuter vos propositions, idées, préparations pour la Déclaration d'amour, à publier sur ta page utilisateur avant 23:59 CET 24/03/14 et aussi, de voir comment présenter vos projets dans la session Open Source/Open Course pendant les portes ouvertes. Préparez des questions et du pseudo-code en avance!

    Exercices

    Solutions: Toolbending:Python_solutions

    Itération

    Motifs

    Écrivez un programme qui affiche la suite de symboles suivante:

    +
    ++
    +++
    ++++
    +++++
    ++++++
    +++++++
    

    Renversement

    Écrivez un programme qui renverse une liste des mots. I LOVE YOU devient:

    YOU LOVE I
    

    Les données alphanumériques

    Pour la théorie: p46-48 http://www.inforef.be/swi/download/python_notes.pdf

    Recherche d'un caractère

    Écrivez un script qui détermine si une chaîne contient ou non le caractère a.

    Insertion d'un caractère

    Écrivez un script qui recopie une chaîne (dans une nouvelle variable), en insérant des ♥ entre les caractères. Ainsi par exemple, amour devra devenir a♥m♥o♥u♥r. Voir aussi: http://www.fileformat.info/info/unicode/char/2665/index.htm

    Inversion

    Écrivez un script qui recopie une chaîne (dans une nouvelle variable) en l'inversant. Ainsi par exemple, « déclarations » deviendra « snoitaralcéd ».

    Secret Letters

    Solution: http://thinkpython.com/code/rotate.py

    ROT13.png

    ROT13 is a weak form of encryption that involves 'rotating' each letter in a word by 13 places. To rotate a letter means to shift it through the alphabet, wrapping around to the beginning if necessary, so A shifted by 3 is D and Z shifted by 1 is A. http://fr.wikipedia.org/wiki/ROT13 + http://www.rot13.com

    Write a function called rotate_word that takes a string and an integer as parameters, and that returns a new string that contains the letters from the original string “rotated” by the given amount.

    For example, “cheer” rotated by 7 is “jolly” and “melon” rotated by -10 is “cubed”.

    You might want to use the built-in functions ord, which converts a character to a numeric code, and chr, which converts numeric codes to characters.

    Potentially offensive jokes on the Internet are sometimes encoded in ROT13. If you are not easily offended, find and decode some of them.

    1. Allucquere Rosanne Stone: Desire and technology at the close of the mechanical age, MIT (1996)

    Exemple Espeak/Python

    <syntaxhighlight lang="python">

    1. essayer de comprendre pourquoi espeak ne lit pas les espaces
    2. SV: parce qu'il faut entourer la variable "déclaration" de guillemets, ou effectivement, échapper les espaces avec "\"

    import os

    declaration = "Hello what are you doing ?"

    print "1" + declaration

    commande = "espeak --stdout '" + declaration + "' | paplay" os.system(commande)

    print "2" + declaration </syntaxhighlight>

    Les Déclarations