Welcome to Etherpad!

This pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!

Get involved with Etherpad at http://etherpad.org Later pads:

Proposal : http://pad.constantvzw.org/p/Frankenstein_revisited_proposal

Detailed description of workshop, planning & chatbots: http://pad.constantvzw.org/p/Frankenstein_revisited_proposal_detailed

Botlist http://pad.constantvzw.org/public_pad/Frankenstein_revisited_botlist

Public Domain sources & annotations : http://pad.constantvzw.org/p/Frankenstein_PD

Pad for meeting on 25-26 J une : http://pad.constantvzw.org/public_pad/Frankenstein_revisited_160625

Pad for meeting on 26-27 May: http://pad.constantvzw.org/public_pad/Frankenstein_revisited_160526

Pad for meeting on 2-3 April : http://pad.constantvzw.org/public_pad/Frankenstein_revisited_160402

Pad for Meeting on 4-5 March : http://pad.constantvzw.org/public_pad/Frankenstein_revisited_160304

For all public pads on Constant: http://etherdump.constantvzw.org

Summary of the Novel By Chapter: http://pad.constantvzw.org/public_pad/frankenstein_summary

Tasks & planning http://pad.constantvzw.org/public_pad/publication_overview

Hovelbot Vitrine : http://pad.constantvzw.org/public_pad/hovelbot_vitrine

HTML Page Frankenstein: http://pad.constantvzw.org/public_pad/html

******************************

Algolit meeting Python & bots
Saturday 30-1-15
with: Catherine, Anja, Anne, Yao, Piero, An , James ...

This workshop was first prepared in collaboration with Michael Murtaugh http://automatist.org/ and Anne Laforet http://sakasama.net for the Relearn Summerschool http://relearn.be at Constant Variable in Brussels, August, 2014.
It inspired us later to create The Death of the Authors, 1943 - a chatbotopera for Constant http://publicdomainday.constantvzw.org/#1943
The material was reworked in collaboration with Michael again for the Summerschool of Hackers & Designers in Amsterdam: http://summer.hackersanddesigners.nl/
This sessions re-uses some of the scripts developed by the participants of bot Summerschools. Thanks for that!

Agenda
10-11.15: Introduction Frankenstein / Piero & An
11.30-13:00 Introduction to botnet/IRC & presentation of some existing bots
13-14: Lunch
14-17: Developing bots
17-18: Sharing the work

Piero presentation
http://thiswork.net/frankenstein/
philosophical brainstorm , interest in Frankenstein's brain
what if technology uses itself to find itself
inspect through algorithms
-> 3 Frankensteins: novel, monster, scientist
what is the brain of these 3?
software/language as a symbolic tool -> coding language
*giving names to variables is very 'fleshy', human thing to do
* what if every word in the novel is a function? every word returns a function -> make list of functions?
* what with white spaces? find brain of the novel in missing parts of the novel, not in the words? transformed letters in 0 / whitespaces in 1
-> transformed in ascii/bitart
top of the page: jodi 95 atomic bomb   http://wwwwwwwww.jodi.org

Research on fractals in novel:
http://www.eurekalert.org/pub_releases/2016-01/thni-twg012116.php
based on length of sentences -> a practical approach; what does this mean? 

create a page on Algolit wiki : http://algolit.constantvzw.org/index.php/Main_Page

 
 What about the subtitle:
     'A Modern Prometheus'
     Dr is giving gift to modern humanity 19th century
     people have difficulties with 'monster', monster has difficulties with its creator
     
     https://en.wikipedia.org/wiki/Frankenstein 's_monster
     people working for bots
     
     Simple terminal examples: http://wiki.hackersanddesigners.nl/mediawiki/index.php/Terminal
     
https://pypi.python.org/pypi/irc

## A history of IRC
http://daniel.haxx.se/irchistory.html


## IRC specifications
http://www.irchelp.org/irchelp/rfc/rfc.html


## Preparing
- Install virtual environment - follow step by step
http://docs.python-guide.org/en/latest/dev/virtualenvs/
- sudo apt-get install python-pip
- pip install irc
- http://www.nltk.org/install.html if necessary


## Introduction to botnet
- Pidgin , colloquy, konversation, xchat, etc
we're on irc.freenode.net #algolit

- launch terminal, go into your project folder (not in your venv-folder!):
    $ cd Documents/....
- launch virtual environment: 
    $ source venv/bin/activate
-> you should see something like this:
    (venv)ana@anagram:

- do some simple bot tests:
You find set of scripts & texts here: http://algolit.net/scripts/botnet_frankenstein.zip
Open a terminal
$ ls  -> lists the folders in environment where you are

## listen to the channel & print messages in terminal
python ircpipebot.py --server irc.freenode.net --channel '#algolit' --nickname your_botname

-> to stop a bot: type in terminal:
    Ctrl C

## listen to channel & log chat
python ircpipebot.py --server irc.freenode.net --channel '#algolit' --nickname monk > monk_writes.txt

-> see what goes on in the file, type:
    tail -f monk_writes.txt

## adapt the script so that it transforms the messages
The monk goes mad!!!
python ircpipebot.py --server irc.freenode.net --channel '#algolit' --nickname monk | python pass.py > monk_rewrites.txt
--> this overwrites the same file each time you launch the bot
---> if you want to append text to the file:
    python ircpipebot.py --server irc.freenode.net --channel '#algolit' --nickname monk | python pass.py >> monk_rewrites.txt
    
-> split message into date/nick/text
parts = i.split (" ", 2)
print parts
or
date, nick, msg = i.split(" ", 2)
print date

## reads message, rewrites in uppercase and reads the message out using espeak
python ircpipebot.py --server irc.freenode.net --channel '#algolit' --nickname monk | python upper.py > monk_writes_and_reads.txt
-> if you use Mac:
    in upper.py: replace 'espeak' with 'say'


## make the bot act!
cat bot | python -u ircpipebot.py --server irc.freenode.net --channel '#algolit' --nickname josephbuys | python -u pass.py > bot

## make the bot react!
cat bot | python -u ircpipebot.py --server irc.freenode.net --channel '#algolit' --nickname fembot | python -u fembot.py > bot

## join connecting parts in bot.sh so that you don't have to retype everything
first create your script in terminal using python
f.ex. python pass.py
then add your script to bashfile bot_example.sh and launch script:
$ bash bot.sh

--> you can also join different python behviours: see bot_example.sh in folder 0_ircpipebot_exercise_with_fifo

## would be the same as joining everything in 1 script (see scripts in folders 1/2/3)
 python 1_bot_to_tob.py irc.freenode.net  '#algolit' beatrix

## work with text
cat bot | python -u ircpipebot.py --server irc.freenode.net --channel '#algolit' --nickname frankenstein | python -u filter_with_text.py > bot

## install pip on MacOS

there is also for MacOS: 
sudo easy_install pip

IDEAS
* Anja: 
steps towards frank-nick-mesh bot
> recognize the nickname of the last message
> taking the first 2 letters of the nick 
> adding them to the end of the original nickname
> changing the original bots nickname

* Anne :
    two ideas : one collaborative, one antisocial
    - collaborative : combining different python scripts (by different persons) : each make a script/limb (or different scripts from history, like f.ex. Eliza) , and we see if it makes some output aka sense
    - antisocial : "killing" (with commands like kick, ban or kill) users who chats with a 'target" (the creator/dr frankenstein) (it could be a bot that's chatty but i think it's better if it's a human) : it could have private message of menace and kicking (perhaps even banning/killing) 

About the Year Without Summer : https://en.wikipedia.org/wiki/Year_Without_a_Summe r

Workshop in Mad Scientist?
invite people to react on bots - explore public emotional reaction / conversation with bots & humans on Frankenstein
play with different roles of Frankenstein (novel, monster, scientific researcher)
read/write?
new version of the novel at the end?
say that at beginning that there will be a publication / log the chat / print by plotter / printed on paper in the end - do a reading session

Friday 4th March 13h - Saturday 5th 18h
Saturday 2nd April 13h - Sunday 3rd April 18h
Friday 13th May 13h - Saturday 14th May 18h
Friday 10th June 13h - Saturday 11th June 18h
Friday 16th September 13h - Saturday 17th Sept 18h

Budget
* Minimum
Travel 6 people / 2 Amsterdam-3 Brussels-Zurich | 1 France-Zurich
Per diem 70€/day per person - 1260€
Lodging in the villa!
Production: printing costs 950€ (min 100 copies)
* Maximum
Fee workshop 3 days 150€/day = 2700€
Fee workshop 3 days 250€/day = 4500€

An: check date with Roland 
Title: Frankenstein revisited|revived?
Proposal: http://pad.constantvzw.org/p/Frankenstein_revisited_proposal


## Some useful commands

____ Launching bots
- Launch a script in terminal
python fembot.py
- Launch script as a bot in IRC-channel
cat bot | python -u ircpipebot.py --server irc.freenode.net --channel '#algolit' --nickname name_bot | python -u your_script.py > bot
--> could be any online service, like: --server irc.freenode.net
- Log activities of chatroom in file
python -u ircpipebot.py --server irc.freenode.net --channel '#algolit' --nickname name_bot > log.txt
- Look at content of file in terminal
tail -f log.txt

____ Advanced bot activity
- Send activities chatbot to another program ( this is called a PIPE)
cat log.txt | python upper.py
join the chat : python ircpipebot.py --server irc.freenode.net --channel '#algolit' --nickname jaraco | python -u filter.py 

- Pipe the processed activities back to chat channel

// save this as chatbot.sh
mkfifo bot
cat bot | \
    python -u ircpipebot.py --server irc.freenode.net --channel "#botnet" --nickname jaraco | \
    python -u filter.py | \
    python -u split.py > bot 
rm bot

// save this as filter.py
import sys
import os
# infinite loop that keeps reading & responding
while True:
    zin = sys.stdin.readline()
    if not zin:
        break
    # do something to xform zin to out
    out = zin.strip("\n")
    out = out.split(" ", 2)
    if out[1] == "spam:":
        out = out[-1]
        print(out)

// save this as split.py
import sys
import os
# infinite loop that keeps reading & responding
while True:
    zin = sys.stdin.readline()
    if not zin:
        break
    out = zin.upper()
    sys.stdout.write(out)
    os.system("espeak \""+ out.strip() + "\"")