User:Kimberley

From XPUB & Lens-Based wiki

Vernacular Language Processing (SI16)

"Dear friend and online scroller,

Beloved internet user, Dearest binge watcher and human being IRL, XPUB1 (The Experimental Publishing Master from Piet Zwart Institute) welcomes you to the Special Issue 16 on vernacular language processing: "Learning How to Walk while Catwalking."

Be confident, be ambitious and be ready to fail a lot. Our Special Issue is a toolkit to mess around with language: from its standard taxonomies and tags, to its modes of organizing information and its shaping knowledge. With these tools we want to legitimize failures and amatorial practices by proposing a more vernacular understanding of language.

We decided to release the Special Issue 16-toolkit in the form of an API (Application Programming Interface). APIs often organise and serve data and knowledge.

What is not always evident is that they facilitate the exchange of information between different software programs and systems according to mainly commercial standards and purposes. We chose instead to build a process that responds to the topics we are working with.

Our API is an attempt at a more critical and vernacular approach to such model of distribution. You didn't get a thing yet? Don't worry! We are also on our way and that's the whole point of this experimental enquiry. We will be happy to guide you through the API and the different functions included in it, share our technical struggles and findings.

Since we are working with filters, we realized how every cultural object rejects and filters its public. We want to question these limitations focusing on accessibility and proposing several entry points to our project.(...)"

Transcribing as a decision process

A spontaneous experiment with Carmen and Kamo.
Transcribing three different sceneries from unsecured web cams in real time found on Insecam:

Screenshot of the CCTV at a hairdresser located in France. (www.insecam.org)
The Shoe Shop
Carmen Kamo Kimberley

The smell of new cheap shoes. The sound of Russian in the background. People leaving untidy items around holding other shops' bags while checking shoes with the other hand wearing too many clothes but outside it's cold, not worth it to take off the jacket and hold it an employee shows a customer some high leather boots assortment of waterproof padded jackets in different colors long&just washed high quality russian girls' hair

The pattern on the floor tiles set the stage for new sales offer: 50% on some shiny new boots. Yet kids are not interested: they prefer to bouncing from red tile to red tile in order to spin the speed of shoes shopping. a woman is not shure of buying a pair of shoes. she focuses on the materials and the quality of construction. she weighs the price and reknowed firm. Then she puts the shoes back on the shelves. An old lady pick them up. she feels observed. she feels not confident about her opinions about the shoes. she peeps other people judging other shoes. little stroll through the shop. then returns to the shoes.

Red head woman, indecisive. Sales woman, nonchalantly wearing her face-mask right below nose. There is 50% sales on a selection of items. Small girl shopping for a new pair of shoes, school is starting in a few days Young woman just entered, she is not planning to buy anything But she seems like she will, easy target Her friend is exhausted, she will wait seated on the bench till she takes a decision Red head is still in the store Girl seated on the bench is only checking pairs within her arm reach Possible target audience of the shop: small girls, young girls, older women Girl seated on the bench received a text message.

The Hairdresser
Carmen Kamo Kimberley

The smell of shampoo and cleanness. The mysterious crossed legs from a girl which we are not able to see more. Is the guy standing next to her bending over to kiss her? The deafening sound of the hairdryer. The feel of hot air on your neck. The reflection of the hairdresser in the mirror behind. The feel of expectation - how am I gonna look? - for sure it was worth the money. The cold, slippery touch of these fake leather seats. The standarization of clothing items such as the square pattern shirt, the denim jeans he wears or the black sneakers and black leggings she wears AH! new customer, new hairdresser in frame. He sits, she starts washing his hair. I wonder when was the last time I went to the hairdresser. Should I get a haircut myself

try to focus on the floor tiles, once again. and think to the tiler that put them in place. hey, you did a great job under the seats in front of the mirrors, why you messed up everything on the other side of the room? now there is a guy standing on this feng-shui-wraking four tiles inlays that try to pickup a girl. she's hidden from our point of view and we just see a pair of legs and, again, shoes. You can see how the barber is listening to their conversation, hidden among the noise of a red blow-drier. she seems to focus on the blond hairs she's drying but that's just a performance. the guy is insecure. he rely more on the architecture of the barbershop than on his own body. he tries to seem cool, and steady, and even then two other people enter the barbershop. Or better: they were outside our field of view. One is a barber, the other one a hair owner. The barber

Noisy space. Blow dryer is on. Face-mask seem required but the heat under is unbearable A man doesn't seem to have much to do. He is chatty Chatting to a girl sitting. He doesn't sit, I find it pretty annoying Just sit if you are talking for so long!!! The man crosses and un-crosses his legs, seem nervous Is he nervous because of the seated girl? I would say so WHY DON'T YOU SIT I can't see the seated girl's face at all A standing man, turning his back to the camera is talking to a sitted pair of leg I bet the hairdresser is also bothered by him She is eying his reflection in the mirror Her crossed legs on the armchair has not un-crossed, shows how tensed he makes her feel Dude just sit!

The Farm
Carmen Kamo Kimberley

Unknown number of cows in an unknown-sized farm. Two cows in frame, three bits of cows coming out of the frame. The realisation that whatever you might be doing or busy with, these cows are there. The realisation that whatever you might be busy with is somehow more fun than being a cow? The cow has some hay on top. Who put it there? How could it fall there? did it get stuck somehow Two new pattern cows come in the frame. New gang? did they know each other already? Do they care about being brown or patterned? What is out of the frame? Wondering about that and the sound we cannot hear. Is it cold? well probably, its in Augsburg. The cows melt in the background, such a rich brown palette. EH Human in frame. quickly, crossed the frame in diagonal and left through the upper right corner.

how do you define a group of cows? a flock of cows? a storm of cows? a crowd of cows? a family of cows? a team of cows? a herd of cows? a drove of cows? i will just call them by their name. from this aerial point of view you can recognize flora, in the right bottom corner of the view luca, relaxed in the left corner, with a concern on her rear right leg, notalie enter the stage, followed by sofia. natalie is mooing about the haircut the farmer choosed for her. her black white pattern should be taken more into consideration during the grooming. sofia agree, but then turn away from natalie. i see some not-so-hidden envy here. it happens when you keep so many gracious animals in a so small place.

One cow seem to be full of milk Her milk sack just lies on the hay like a full bag of marbles She got up, wonder how Are they slow or is the camera lagging? Nodding left and right They seem lost in a space that yet hosts them since months Common just cheer up A younger cow is approaching She has more white than brown, makes her look even younger, as if her pattern wasn't yet finished How would it feel to be inside a cow stomach? Warm, dark, and silent Agitation in the stable! One seem especially lazy Hay is wet A farmer passed by The lazy one got up I feel your pressure sister Like when a manager comes and checks you at work

Selection Process

A research on selection and annotation with Alex, Emma, Jian, Kamo and Supi which later resulted on the Annotation Compass, a project from Learning How To Walk While Catwalking (SI16).

Photograph of a room simultaneously annotated by 4 persons.

"Annotation Compass"

A tool for gathering situated impressions in order to create individual, vernacular and poetic readings of various inputs (such as space, image, text)
How do we bring multi-vocality in the work of annotation? The Annotation Compass builds composites from aggregated vernacular impressions, rich of their subjectivity and situatedness. It is the outcome of a three months journey questioning the relationship between vernacular languages and natural language processing tools.

Experiment

The living room

  • Number of participants: 4
  • Location: Supi's living room
  • Aim: Map out each participant's impressions of the living room.
  • Material: The living room's floor plan, InDesign, computers.....
  • Time-frame: 5 minutes
  • Instructions: individually annotate the floor plan with impressions of the living room

After removing the floor plan and looking at the subjective annotations of this experiment, we observed that each outcome forms another 'space'. Each person's set of annotations brings a unique perspective of the living room , an 'individual map'. We then layered the individual maps and the compilation resulted in a vernacular picture of the space. This alternative understanding of the space can only be given to a reader through those descriptions.

Photograph of a room
The same method was applied to the photograph of a room. Each of us used a different set of coloured sticky notes and took 5 minutes to physically annotate the picture on the same surface. The picture was then removed from the background, resulting in a similar outcome as the experiment described above.
From these observations, our interest on subjective annotations that could flow in a common understanding of an image grew. As a tool to collect situated impressions, we elaborated the idea of the Annotation Compass.
On a given surface, such as an image, the tool facilitates the collection of annotations and their coordinates from various users simultaneously. These annotations represent individual knowledges and perspectives in regards to the given surface.

Instructions

To use this tool, let's consider the "host" any person interested in gathering annotation on a specific image; and the "guest" any person invited by the host to annotate the image.

Process for the host of an image
  1. upload an image
  2. add a text to explain the context of the image or to give instructions and helpful advice to the guests
  3. send link to guests and invite them to annotate
  4. download a json-file or text-file that contains the collected data that was gathered so far
  5. try the different functions of SI16 to filter the collected data
Process for the guest
  1. open the link sent by the host
  2. read the information attached to the image by the host
  3. use the cursor to select a specific area that you want to annotate
  4. write and insert your annotation(s)
The data

The Tool not only archives the annotations, but also additional meta-data that can be helpful to analyze the outcome. The collected data is stored in a "json-file" that comes as a list of labels. In each label, one can find the file name of the annotated image, the coordinates of the annotation, the dimension of the annotation 'box', the annotation itself, the index number of the annotation and a user identification.

Outcome

The outcome provided by the Annotation Compass is ever-changing: whenever an individual adds an annotation, the data grows.
After applying the tool to different projects we observed that the collected data can offer a reflexion on the so called "objective": It provides individual perceptions and builds a common experience by including a multiplicity of impressions rather than one objective definition. In conclusion, the Tool can be used to provide alternative ways to define images, images of space, texts, and anything else annotatable.

"Cloverleaf"

Cloverleaf is a tool to navigate a set of text. Through generated short-cuts, it is meant to interrupt the linearity of a text. The result is a collage of excerpts and aims to free unexpected reading paths. The tool can be used to stitch various voices together in a non-hierarchical manner, giving off hybrid constructions where common points and divergences can co-exist.

cloverleaf (noun): an interchange between two major highways that allows traffic to change from one to the other without requiring any left turns or crossings and that from above resembles a 4-leaf clover.
in detail

For two texts in a set of text following an index order, let’s consider a ‘preceding text’ and its succeeding. In a first place, the function bridge() will look for the first identical word occurring in both texts (excluding stop words). Let’s name the position (index) of this word ‘i’ for the preceding text and ‘j’ for the succeeding text:

text, index 0: “Strawberries don’t grow tasty (i) in the Netherlands.” 
text, index 1: “Pineapple is very tasty (j)  with salt (i) and chilli powder.”
text, index 2: “Blocks of salt (j) distract cows (i).”
text, index 3: “There was many field with cows (j) in this area.”

Result: "Strawberries don’t grow tasty with salt distract cows in this area."  

Since every text, in a given set of at least four texts, will alternatively take the ‘preceding’ and the ‘succeeding’ position, each text will hold a word indexed as ‘i’ and a word indexed as ‘j’: marking the identical words occurring between a text and its succeeding. These marks will then determine the start and the end of each excerpt, and open the ‘shortcut’ aforementioned.

As a result, the preceding text will be printed from its index (j)—attributed formerly when this text was in a ’succeeding’ position—until (i), its common word with its current succeeding text. The function will loop until the last two texts of the set (in the index order).

TEXT 1 xxxxxxxxx(J)oooooooooooo(I)xxxxxxxxxxxxx
TEXT 2 xxxxxxxxxxxxxxxxx(J)oooooooooooo(I)xxxxxxxxxx
TEXT 3 xxxxxxxxxxx(J)ooooooo(I)xxxxxxxxxxxxxxxx
TEXT 4 xxxxxx(J)oooooooooooooooo(I)xxxxxxxxxxxxxx

o = printed text
x = rejected text
J = same word's index preceding text
I = same word's index in succeeding text 

In the case no match is found between two texts, the text in succeeding position will be printed from its first word to its last.

Cloverleaf' functions explained during experiment with the Annotation Compass.
"Cloverleaf" and the "Annotation Compass"

Cloverleaf was imagined to navigate the annotations gathered with the Annotation Compass and offers the possibility to process its ever-growing data (json file). Used in complementarity, they become a proliferative environment for collective writing.

Collecting Json file
from nltk.corpus import stopwords
sw = stopwords.words("english")
from urllib.request import urlopen
import json

resultSentences = []
labels_corpus = []

url = f"https://hub.xpub.nl/soupboat/generic-labels/get-labels/?image=think-classify7.jpg"
response = urlopen(url)
data_json = json.loads(response.read()) 

labels = data_json['labels']


for label in labels:
    sent = label['text'].split()
    labels_corpus.append(sent)
    
    
print(labels_corpus)
The Annotation Compass interface facilitating a writing exercise where Cloverleaf is used to navigate the output.

In a first experiment, a group of eight persons was given the following instruction:

"For as long as one minute; you are invited to define, in your own words and logic, the verb on the screen. This definition does not necessarily have to have sense for anyone else but you, although English language will be our common ground in this experiment.

Important: You are required to write for the entire span of this granted minute! Do not lift hands from keyboard, and in case of blockage you are welcome to press any key or write any word, onomatopoeia, etc.

For this experiment, each participant will only fill in one ‘insert’ box per word to be defined."


"S. Vocabulary exercises", excerpt from "Think/Classify" by George Perec.

The terms suggested to define were directly taken from George Perec's "Vocabulary exercises" ("Think/Classify", 1985):

"arrange,
catalogue,
cut up,
divide,
enumerate,
gather,
grade,
group,
list,
number,
order,
organise,
sort"
Bridge()
# The arguments in this functions are 2 texts (text_a and text_b) an index for where the text_a starts and an index for where it ends.
def bridge(text_a, text_b, start_a, isLast):
    
    matchFound = 0
    start_next = 0
    
    # for index i in text_a from a given index until the end of text_a
    for i in range(start_a, len(text_a)):
        if matchFound:
            break
            
        # we name word_a the index i in text_a
        word_a = text_a[i]
        # if word_a is not in the given list of stopwords:
        if word_a not in sw:
            # for index j in the entire text_b:
            for j in range(0, len(text_b)):
                
                # we name word_b the word with index j in text_b
                word_b = text_b[j]
                
                # if word_a equals to word_b:
                if clean_word(word_a) == clean_word(word_b):
                    
                    # resultSentences is a list to which the following informations will add up:
                    resultSentences.append({
                        'text': text_a,
                        'start': start_a,
                        'end': i,
                        'hasMatch': 1
                    })
                    
                    # if the text in position text_a is the last text to be compared:
                    # the same informations as above will be added, except that there will be no index for its end.
                    if isLast:
                        resultSentences.append({
                            'text': text_b,
                            'start': j,
                            'end': None,
                            'hasMatch': 1
                    })
                    
                    # after the match is found between the 2 texts, the function will break
                    matchFound = 1 
                    start_next = j
                    break
    
    if matchFound == 0:
        resultSentences.append({
            'text': text_a,
            'start': start_a,
            'end': None,
            'hasMatch': 0
        })
        
        if isLast:
            resultSentences.append({
                'text': text_b,
                'start': 0,
                'end': None,
                'hasMatch': 0
        })

                        
    # the function returns the index of the 'same word' in the text_b
    return start_next
def bridge_list(corpus):
    start_a = 0
    result = ""
    
    #for all texts indexes within the corpus to be compared:
    for text_index in range(0, len(corpus)-1):

        # the last text_a to be compared has to be the text indexed as corpus[-2];
        # the last text_b will then be the last text of the corpus (corpus[-1]).
        isLast = text_index == len(corpus)-2
        # text_a is a given index of the corpus and text_b is the following index
        text_a = corpus[text_index]
        text_b = corpus[text_index + 1]
            
    
        #start_a is the index (in text_b) of the first 'common word' between text_a and text_b;
        #start_a is the starting point to compare a text and its following (in index order within the corpus); 

        start_next = bridge(text_a, text_b, start_a, isLast)
        start_a = start_next

"Learning How To Walk While Catwalking" Visual Identity

with Gersande, Kamo and Supi
https://www.are.na/si16-visual-identity
ref: https://www.kunstinstituutmelly.nl/en/connect/1039-panel-beyond-identities

Reading list

Productive Play (SI17)

rrrrrr

Lootbox in Westerpark, Amsterdam (2022)

"Experimental Kitchen"

"Experimental Kitchen" is a proposal co-developed with Chae and intended to structure group meetings through the codes of the role-play.

"Welcome to the Experimental Kitchen role play. Each of you will be randomly attributed a role that you will embody until it is revealed, at end of this session.
At the beginning, the discussion will be facilitated by a script and evolve towards a 'free form' discussion towards the end. In the scripted part, each character is invited to type at an allocated moment. During the free form part, characters can converse whenever they want but keeping in mind the constraint imposed by their roles!
The aim of this role play session is to stir a different group dynamic than the one we tend to get used to. It also allows to get acquainted with certain social role than one might not be used to outside of this game."

Roles and specificities

The Table:
Always has to be the first to say something;
Can't ask question;
Super confident in their ideas ;
Always has an opinion on every topic being discussed.


The Toothpick:
Exclusively expressing themselves in short and precise sentences;
Obsessed with pasting definition at any occasion;
Clarifies key-words and ambiguous words.


The Olive Oil:
Keeps track of all the topics and makes sure they are all mentioned;
Has to make sure everyone's voice (esp. Tea Cup) is being heard;
Love making lists


The Bread Knife:
Exclusively starts a debate with a negative sentence (eg. using 'no', 'not', 'do not', etc.);
Doubtful player, wants to create a debate;
Always look for the weakest point of an idea.


The Honey Pot:
Will mostly be in interaction with Bread Knife: Based on BK's doubts, Honey Pot will try to reach compromise;
Always has to start their sentence by agreeing followed by an alternative (eg: "Yes, but...")
Can find help by teaming up with Sea Salt;
Optimistic and arranging.


The Tea Cup:
Only talks when Olive Oil gives them a chance to do so;
(Always write sentences in parentheses);
Introvert but big thinker;
Focus on lesser topics but with more depth, can support or be supported by Toothpick.


The Whisk:
Can only participate with interrogative sentences (meaning, only asking questions);
Never too assertive;
Will mostly address the Table (but cant intervene at any time too).


The Jug:
Has the power to highlight one other character's idea: The Jug will pick a character and will exclusively exchange with them in order to trigger those ideas to a further development;
Rephrase important ideas when they are unclear; seek for potential in someone's idea.


The Sea Salt:
Always open by a sentence starting with "Let's" (eg: "Let's not forget we only have two weeks!...");
Offers concrete and simple alternative when the group/conversation is stuck;
Realistic, pragmatic and sassy;
Can remind the group when something is off topic, when the conversation is too long or repetitive.


The Pepper Mill:
Will build on the Sea Salt idea to make it more complete;
Can only express by stating the 'pro's' and 'con's' of each idea.
Analytical, sharp, clear when they express.

Script

Script for group meeting on Etherpad.

Result

Excerpt from the Experimental Kitchen group meeting #1.

References

Reflection on SI16

Reflection on SI16 partly leading to the elaboration of the Experimental Kitchen with Chae

Fan Fiction/ World Building

First experiment conducted with Chae and Supi in class after focusing on the ideology present in the role play "The Werewolves of Millers Hollow". Inspired by fan fiction and world building practices, we propose a fantasised environment departing from the game itself.

"Fage not Pound"

"Fage not Pound" is a fictitious environment which main axis is "the ideal workplace". This environment, developed collaboratively with Chae, Emma and Miriam, is imagined to host the launch of the Special Issue 17: "This Box Found You For A Reason". It is populated by a series of artefacts such as a site-specific variable clock, a gamified trading system, a suggestive price tag, a flowchart-type navigation, etc.

"AccAcc"

A proposition for the use of a variable temporality during the launch of SI17:

"AccAcc (from Accumulate Accelerate) is a variable time unit synchronising the activities at Fage not Pound. The duration of an (1) AccAcc is directly influenced by the amount of visitor present in the space and gauged by a traffic counter at the entrance.

When the space is empty, the time unit is considered "dormant" and therefore called "AccAccDull". By default, an (1) AccAccDull equals one (1) second (the base unit of time in the International System of Units (SI)).

An AccAccDull becomes an AccAcc at the moment of its activation. The said activation happens when a person enters the space and is invited to press a button. Each time a visitor enters, the AccAcc's value is multiplied by 1,1. Thus, as the space gets crowded, the span of an AccAcc decreases exponentially, allowing time to pass faster."

Analog Clock in Python (First attempt to design a clock with Python, without GUI.)
AccAcc passing, dusty screen... (Using terminal's preferences to personalise the clock.)
speedUp(), slowDown
import time
import os
import math
import datetime
import keyboard

globalTime = time.time() # current time in seconds (eg. 1647790151.79)
sleepDuration = 1.0 # clock updates every second
count = 0 # number of time the key is pressed

def speedUp(param):

  global sleepDuration, count
  if count > 50:
  # not going faster
    return

  newSleepDuration = sleepDuration * 0.9 # clock update time is shorten
  count += 1
  sleepDuration = round(newSleepDuration, 8) # 8 number after decimal

keyboard.on_press_key("p", speedUp) # Press key 'p' to count +1

def slowDown(param):

  global sleepDuration, count
  if count > 50:
  # not going slower
    return

  newSleepDuration = sleepDuration / 0.9 # clock update time is longer
  count += 1
  sleepDuration = round(newSleepDuration, 8) # 8 number after decimal

keyboard.on_press_key("x", slowDown) # Press key 'p' to count +1

while True:
# loop forever

  # We have time in seconds. So we add one second. Convert it to object, then from object to a readable string 

  timeResultSeconds = globalTime + 1 # +1 second to current time (as normal manual clock)
  timeResultObject = time.localtime(timeResultSeconds) # .localtime converts time in second to time 'object'

  result = time.strftime("%H:%M:%S", timeResultObject) # .strftime formats the date from object, to a readable string
  #clear() # erase clock in terminal everytime function is looping
  os.system('clear')

  print("\n")
  print("******** FAGE NOT POUND")
  print("\n")
  print("*************************************************") 
  print("*************************************************")
  print("*************************************************")
  print("******** " + result + " ACCACC")
  print("*************************************************")
  print("*************************************************")
  print("*************************************************")
  print("\n") 
  print("*************************************************")
  print("*************************************************")
  print("******** 18:00:00" + " ACCACC  OPENING")
  print("******** 04:00:00" + " ACCACC  DISCUSSION WITH PLATFORM BK")
  print("******** 10:00:00" + " ACCACC  LOOTBOX REVEAL")
  print("******** 00:00:00" + " ACCACC  CLOSING")
  print("*************************************************")
  print("*************************************************")

  globalTime = timeResultSeconds

  time.sleep(sleepDuration)


AccAcc and launch program projected during the launch of "This Box Found You For A Reason" at Fage not Pound/Page not Found.

SI17 Launch

Reading List

Randomized Prim's Algorithm

Exhibition List

Non-SI material

Workshop with Nor: selfportrait.

Outside XPUB

but still somehow connected

archive at Printroom
RISO at W139

Facilitation of a zine making-workshop with Marly Pierre-Louis at W139.


Template of a collective zine for workshop at W139 with Marly


RISO printing workshop assistance for Noam Youngrak Son at W139 (Sonic Acts).

https://sonicacts.homerun.co/workshop/en
wax book