DMS8013: Sessions Overview

Below is a list of session titles and the dates they’ll happen. Excited?

1 – Physical Computing, 2nd February

2 – Communication 1 local devices, 9th February

3 – Communication 2 networks, 23rd February

4 – Algorithms and Generatively, 1st March

5 – Working in 3D, 12th April

6 – Terrible interactivity, 19th April

7 – Data wrangling, 26th April

8 – Hacks and collaborating, 3rd May

Current Students

Students currently studying Master in Creative Arts Practice

 

Meena Daneshyar

Maria Clemente – Albacete

Sean Cotterill

Xiyuan Tan

Yue Wang

Riar Rizaldi

Daniel Parry

 

Previous Students

CAP

2014-2015

MeteorEdmund Nesveda

Clive WrightChilly Rain

Wenya ChenTrong Cuong Dao

Yousif AbdulghaniTan

BartiZhang Wei

 

2013-2014

Yinzhen BaoTatiana Fujimori
Jaejun HwangSaksit Knunkitti
Wenchang LinClare Robertson
Tunc Karkutoglu

Mres Digital Media
Adrian ParkBen HoldenIsobel Taylor
James DavollNina LimardoXue Yan
Aaron SmilesAlessandro AltavillaAndrew Nixon
Andrzwej WojtasBen FreethBen Thompson
Helen CollardJane DudmanJoseph Pochciol
Pengfei ZhangSanjay Mortimer
Ewelina Aleksandrowicz (Tikul)

 

DMS8013: 1. Physical Computing: I wish to God these calculations had been made by steam!

IBM_704_mainframe

Session Aims:

  1. To think about what Physical Computing is
  2. To provide some historical contextual background in and out of art practice
  3. To think about why Physical Computing is important
  4. To make a start with learning some physical computing

 

Talk:

How many computers did you touch today?

Which computer has the strongest claim to be the first?

 What is Physical Computing? Tally sticks to abascus to difference engine to Von Neuman architecture

  • A recognition that computers are ‘out there’ or ‘in there’
  • A way of thinking about relationships between people (and particularly bodies) and computers
  • A means of getting away from screens

 

Some History and Context

Ubiquitous Computing (UBICOMP)

  • Mark Weiser and ‘Calm Technology’
  • Adam Greenfield, ‘Everyware’

“Everywhere produces a wide belt of circumstance where human agency, judgement, and will are progressively supplanted by compliance with external, frequently algorithmically-applied standards and norms” Greenfield, Adam. Everyware: The dawning age of ubiquitous computing. New Riders, 2010.

Tangible and Embedded Interaction

“Long before the invention of personal computers, our ancestors developed a variety of specialized physical artifacts to measure the passage of time, to predict the movement of planets, to draw geometric shapes, and to compute [10]. We can find these beautiful artifacts made of oak and brass in museums such as the Collection of Historic Scientific Instruments at Harvard University.

We were inspired by the aesthetics and rich affordances of these historical scientific instruments, most of which have disappeared from schools, laboratories, and design studios and have been replaced with the most general of appliances: personal computers. Through grasping and manipulating these instruments, users of the past must have developed rich languages and cultures which valued haptic interaction with real physical objects. Alas, much of this richness has been lost to the rapid flood of digital technologies.” Ishii, Hiroshi, and Brygg Ullmer. “Tangible bits: towards seamless interfaces between people, bits and atoms.” Proceedings of the ACM SIGCHI Conference on Human factors in computing systems. ACM, 1997.

 

 

Tatsuo Miyajima, Clock for 300 Thousand Years, 1987

Jenny Holzer, Truisms, 1984

Which of the two works above has the stronger claim to be ‘physical computing’? In what ways do they embody different ideas of

  • the computer

  • physicality

  • relationships to technology

  • role of the artist

 

In Art

‘Wearables’ and performance

Atsuko Tanaka, Electric Dress, 1957

New forms of Interactivity

Daniel Rozin, Wooden Mirror, 1999 (this version)

Exploring the Materiality of Computers

Addie Wagenknech, xxxx.xxx, 2014

 

Is this affordance?

Why are we talking about affordance? One of the interesting things about physical computing is the way it can make us think about the way that we ‘fit in’ to the world and how we understand action.

Let’s contrast Norman’s view of ‘perceived affordance’ with Suchman’s ideas below. Norman asks,

“When you first see something you have never seen before, how do you know what to do? The answer, I decided, was that the required information was in the world: the appearance of the device could provide the critical clues required for its proper operation.”

But what does he mean by ‘something you have never seen before’. Norman seems to believe that there is an underlying schema to the way the world works. A set of rules that people follow. Suchman however proposes that,

“…the contingency of action on a complex world of objects, artifacts, and other actors, located in space and time, is no longer treated as an extraneous problem with which the individual actor must contend but rather is seen as the essential resource that makes knowledge possible and gives action its sense. [...] A basic research goal for studies of situated action, therefore, is to explicate the relationship between structures of action and the resources and constraints afforded by material and social circumstances.” (Suchman, L. 2007, Human Machine Reconfigurations, Cambridge University Press, Cambridge, p. 177)

 Doing Physical Computing

 

Project Work #5: Performing Beyond Camera Obscura

I wanted to make this piece quite flexible in term of presenting. It could be an installation and also possible to be presented as a live audiovisual performance while the artifact and concept behind it still the same. Below is the video I tried to perform Beyond Camera Obscura.

Click here to view the embedded video.

I will develop this work further in my spare time. Due time and financial issues (bad reason, but still!) for now this piece only work with three different circuits which produced just three different sound frequencies (low, mid-ish, and high). I wonder how it would be if it was projected in a very big screen, with a tons of kinetic mirror, and multiple circuit devices that will produced various type of sound frequencies attached to, say, surround 15 channel speakers.

Currently reading:

Despite how crazy and radical their ideas, I think they deserve some respect. The idea behind how Antipode against Abrhamic religion as the center of all humankind is one of the other thing on this book that worth to dissect as a concept (or possibly idea) for an interesting creative research and process.

HSS8210 Project Work – Brick of Internet

Following today’s presentation, here is a small piece of documentation of the project in action

I intend to get more detailed documentation soon to upload to my personal website.

Here is a screen recording of the brick in action

[HSS8120 Assessment creative project]-Zooming and scraping on the road

1

The name of this project because of when the code action,

in the window space turning like a scrape of the view,

 the materials of this project are video shootings,

I took more than ten videos all of them visual are driving on the road.

 Such as raining road, mountain path, tunnel, night road and so on,

I try my best to take the different road conditions and walk through the various road sections to record the feeling on the road.

Then cut pictures from video use Photoshop to edit them,

choose every video’s five pictures add into processing programme.

Driving view will fast forward and because of fractals code regular change shape running,

the visual become lots of new visuals every second.

  •  
  • Code:
  • video and picture matiral

HSS8120: ‘Project Work’

 

Final Project Link

HSS8120: Final Processing Sketch

This is now my finished code for my project. This is also being uploaded in 3 chunks of code which are written on 3 different tabs in my processing sketch.

What I have added:

  • I have set up the text to display by calculating the text size and positions based on the number of rows in the table.
  • I set up a custom font and the text colour to white.
  • For fear of a crash if this was left for too long I reduced the frame rate to stop too many table updates
  • The background behind the text is set to black
  • Displays the text at the desired position against the display width while setup() first loops through the table

1st Tab (Main body)

// Create the table, secondsPerYear, note length and myFont variables
Table table;
int secondsPerYear = (365*24*60*60);
float notelength = 0.7;
PFont myFont;
// Set up the URL for the WHO API call to get the 2012 world cause of death information
String sourceURL = “http://apps.who.int/gho/athena/data/xmart.csv?target=GHO/MORT_500&profile=crosstable&filter=MGHEREG:WORLD;GHECAUSES:*;SEX:*;AGEGROUP:*;GHECAUSELEVEL1:-&x-sideaxis=MGHEREG;GHECAUSES&x-topaxis=GHO;YEAR;SEX;AGEGROUP&x-collapse=true”;

void setup() {
frameRate(4); // Lower the framerate from the default 60fps to 4fps to stop too many notes being added into the queue to be played
fullScreen();
background(0,0,0);
table = loadTable(sourceURL, “header, csv”); // Load the table from the source URL and use the first line as headers. Also tells processing to expect a csv file, so look for commas to separate the data.
table.setColumnType(“Number of deaths; 2012; Both sexes; All ages (total) years”, Table.INT); // Tell processing that the number of deaths column contains integers instead of strings

// Trim table down to the first two columns, the only ones we care about
for (int i = 0; i< table.getColumnCount()-2;i++){
table.removeColumn(2);
}

// Generate the A minor scale with the same number of notes as rows in the table
int scalelength = 36; // Generating 36 notes starting from A2 gives an A minor scale from A2 to A7
String [] letters = {“A”, “B”, “C”, “D”, “E”, “F”, “G”};
String [] scale = new String [scalelength];
for (int i=0; i<scalelength; i++){ // Loop the same number of times as notes in the scale
scale[i] = letters[i%(letters.length)];
String a = str((i/7)+2); // Generates the numbers 2 to 7, 7 times each until the end of the scale is reached
scale[i] = scale[i] + a;
}

// Add another column for the seconds in between deaths for each cause
table.addColumn(“Seconds between deaths”);

// Add another column for the notes to be played
table.addColumn(“Note”, Table.STRING);

// Add another column for next time each note should be played.
table.addColumn(“Next time to play note”, Table.FLOAT);

// Add another column for the position of the text to be printed
table.addColumn(“Text position”, Table.FLOAT);

// Sort the table in descending order according to number of deaths
table.sortReverse(“Number of deaths; 2012; Both sexes; All ages (total) years”);

while(table.getRowCount() != scalelength){ // Run the loop until the number of rows in the table is equal to the length of the scale
table.removeRow(table.getRowCount()-1); // Delete the bottom row of the table
}

// Shuffle the scale about so that random notes are assigned to each cause of death
shuffle(scale);

// Calculate the distance between rows of text based on the number of lines of text and the screen height
float distanceBetweenText = (displayHeight-12.5)/table.getRowCount();

// Set the text parameters
textSize(distanceBetweenText-1);
textAlign(CENTER,CENTER);
fill(255,255,255);

// Create the font for the text
myFont = createFont(“daisywhl.otf”, distanceBetweenText/2, true);
textFont(myFont);
// Add the scale notes into the corresponding “Notes” column of the table
for(int i =0; i<table.getRowCount();i++){
table.setString(i, “Note”, scale[i]);
float textpos = distanceBetweenText * (i+1);
table.setFloat(i, “Text position”, textpos);
}

// Performs various operations on the table row by row. Removes the “World; ” that appears before causes of death,
// pulls variables from the table in order to calculate the average time between deaths, and then prints these
// to the console in a human-readable way.
for (TableRow row : table.rows()) { // Tells processing to loop through all the rows in the table
String cause = row.getString(“Region; Causes”); // Creates a new string called cause from the table of causes
cause = cause.substring(7, cause.length()); // Remove the “World;” that starts each cause to give just a list of causes
row.setString(“Region; Causes”, cause); // Overwrites the causes column with the same cause without “World; ” in front of it

int numberofdeaths = row.getInt(“Number of deaths; 2012; Both sexes; All ages (total) years”);
float secondsbetween = float(secondsPerYear)/float(numberofdeaths);
row.setFloat(“Seconds between deaths”, secondsbetween);
float textpos = row.getFloat(“Text position”);
String texttoprint = (cause + ” caused ” + numberofdeaths + ” deaths with an average of ” + secondsbetween + ” seconds between deaths.”);
row.setFloat(“Next time to play note”, secondsbetween);
text(texttoprint, displayWidth/2, textpos);

}

// Set up minim to play notes

minim = new Minim(this);
out = minim.getLineOut();

} // End of setup

// Play the notes! Runs forever
void draw(){
for (TableRow row : table.rows()) { // Tells processing to loop through all the rows in the table as before
String note = row.getString(“Note”); // Creates a new string called note from the table of notes as before
float secondsbetween = row.getFloat(“Seconds between deaths”); // Pull out the time between notes from the “Seconds between deaths” column
float playtime = row.getFloat(“Next time to play note”); // Pull out the “Next time to play note” value
out.playNote( playtime, notelength, new SineInstrument( Frequency.ofPitch( note ).asHz() ) ); // Schedule a note to play at a certain point in the future equal to “Next time to play note”, at the pitch stored in the “Note” column
row.setFloat(“Next time to play note”, playtime + secondsbetween); // Update the “Next time to play the note” value to be the current value plus the amount of “Seconds between deaths”
}
}

2nd Tab (Minim instrument class)

import ddf.minim.*;
import ddf.minim.ugens.*;

Minim minim;
AudioOutput out;
Oscil wave;
// Class for the sine wave synth that will play the notes

class SineInstrument implements Instrument
{
Oscil wave;
Line ampEnv;

SineInstrument( float frequency )
{
// make a sine wave oscillator
// the amplitude is zero because
// we are going to patch a Line to it anyway
wave = new Oscil( frequency, 0.5f, Waves.SINE );
ampEnv = new Line();
ampEnv.patch( wave.amplitude );
}

// this is called by the sequencer when this instrument
// should start making sound. the duration is expressed in seconds.
void noteOn( float duration )
{
// start the amplitude envelope
ampEnv.activate( duration, 0.3, 0 );
// attach the oscil to the output so it makes sound
wave.patch( out );

}

// this is called by the sequencer when the instrument should
// stop making sound
void noteOff()
{
wave.unpatch( out );
}
}

3rd Tab (final Shuffle code)

void shuffle(String[]value){
String temp;
int pick;
for(int i=0;i<value.length;i++){
pick = int(random(value.length)); // picks a random position in the array
temp = value[i]; // stores value of current position
value[i] = value[pick]; // copies picked value into current position
value[pick]= temp; // store original value in picked position
}
}

HSS8120: First working note playing code

This is my first piece of code that I have managed to put together to play notes from the data I scraped. I am uploading it in 3 sections as I have them saved on three different tabs in processing to make it easier to read. So to make this sketch work all 3 sections of code are running at the same time.

1st Tab (scraping the data and setting up the information to be displayed and assigning notes to data)

// Create the table, secondsPerYear and note length variables
Table table;
int secondsPerYear = (365*24*60*60);
float notelength = 0.7;

// Set up the URL for the WHO API call to get the 2012 world cause of death information
String sourceURL = “http://apps.who.int/gho/athena/data/xmart.csv?target=GHO/MORT_500&profile=crosstable&filter=MGHEREG:WORLD;GHECAUSES:*;SEX:*;AGEGROUP:*;GHECAUSELEVEL1:-&x-sideaxis=MGHEREG;GHECAUSES&x-topaxis=GHO;YEAR;SEX;AGEGROUP&x-collapse=true”;

void setup() {
table = loadTable(sourceURL, “header, csv”); // Load the table from the source URL and use the first line as headers. Also tells processing to expect a csv file, so look for commas to separate the data.
table.setColumnType(“Number of deaths; 2012; Both sexes; All ages (total) years”, Table.INT); // Tell processing that the number of deaths column contains integers instead of strings

// Trim table down to the first two columns, the only ones we care about
for (int i = 0; i< table.getColumnCount()-2;i++){
table.removeColumn(2);
}

// Generate the A minor scale with the same number of notes as rows in the table
int scalelength = 36; // Generating 36 notes starting from A2 gives an A minor scale from A2 to A7
String [] letters = {“A”, “B”, “C”, “D”, “E”, “F”, “G”};
String [] scale = new String [scalelength];

for (int i=0; i<scalelength; i++){ // Loop the same number of times as notes in the scale
scale[i] = letters[i%(letters.length)];
String a = str((i/7)+2); // Generates the numbers 2 to 7, 7 times each until the end of the scale is reached
scale[i] = scale[i] + a;
}

// Add another column for the seconds in between deaths for each cause
table.addColumn(“Seconds between deaths”);

// Add another column for the notes to be played
table.addColumn(“Note”, Table.STRING);

// Add another column for next time each note should be played.
table.addColumn(“Next time to play note”, Table.FLOAT);

// Sort the table in descending order according to number of deaths
table.sortReverse(“Number of deaths; 2012; Both sexes; All ages (total) years”);

while(table.getRowCount() != scalelength){ // Run the loop until the number of rows in the table is equal to the length of the scale
table.removeRow(table.getRowCount()-1); // Delete the bottom row of the table
}

// Shuffle the scale about so that random notes are assigned to each cause of death
shuffle(scale);

// Add the scale notes into the corresponding “Notes” column of the table
for(int i =0; i<table.getRowCount();i++){
table.setString(i, “Note”, scale[i]);
}

// Performs various operations on the table row by row. Removes the “World; ” that appears before causes of death,
// pulls variables from the table in order to calculate the average time between deaths
for (TableRow row : table.rows()) { // Tells processing to loop through all the rows in the table
String cause = row.getString(“Region; Causes”); // Creates a new string called cause from the table of causes
cause = cause.substring(7, cause.length()); // Remove the “World;” that starts each cause to give just a list of causes
row.setString(“Region; Causes”, cause); // Overwrites the causes column with the same cause without “World; ” in front of it

int numberofdeaths = row.getInt(“Number of deaths; 2012; Both sexes; All ages (total) years”);
float secondsbetween = float(secondsPerYear)/float(numberofdeaths);
row.setFloat(“Seconds between deaths”, secondsbetween);
row.setFloat(“Next time to play note”, secondsbetween);
}

// Set up minim to play notes

minim = new Minim(this);
out = minim.getLineOut();

} // End of setup

// Play the notes! Runs forever
void draw(){
for (TableRow row : table.rows()) { // Tells processing to loop through all the rows in the table as before
String note = row.getString(“Note”); // Creates a new string called note from the table of notes as before
float secondsbetween = row.getFloat(“Seconds between deaths”); // Pull out the time between notes from the “Seconds between deaths” column
float playtime = row.getFloat(“Next time to play note”); // Pull out the “Next time to play note” value
out.playNote( playtime, notelength, new SineInstrument( Frequency.ofPitch( note ).asHz() ) ); // Schedule a note to play at a certain point in the future equal to “Next time to play note”, at the pitch stored in the “Note” column
row.setFloat(“Next time to play note”, playtime + secondsbetween); // Update the “Next time to play the note” value to be the current value plus the amount of “Seconds between deaths”
}
}

 

2nd Tab (Minim Instrument set up)

import ddf.minim.*;
import ddf.minim.ugens.*;

Minim minim;
AudioOutput out;
Oscil wave;
// Class for the sine wave synth that will play the notes

class SineInstrument implements Instrument
{
Oscil wave;
Line ampEnv;

SineInstrument( float frequency )
{
// make a sine wave oscillator
// the amplitude is zero because
// we are going to patch a Line to it anyway
wave = new Oscil( frequency, 0.5f, Waves.SINE );
ampEnv = new Line();
ampEnv.patch( wave.amplitude );
}

// this is called by the sequencer when this instrument
// should start making sound. the duration is expressed in seconds.
void noteOn( float duration )
{
// start the amplitude envelope
ampEnv.activate( duration, 0.3, 0 );
// attach the oscil to the output so it makes sound
wave.patch( out );

}

// this is called by the sequencer when the instrument should
// stop making sound
void noteOff()
{
wave.unpatch( out );
}
}

 

3rd Tab (shuffle function)

void shuffle(String[]value){
String temp;
int pick;
for(int i=0;i<value.length;i++){
pick = int(random(value.length)); // picks a random position in the array
temp = value[i]; // stores value of current position
value[i] = value[pick]; // copies picked value into current position
value[pick]= temp; // store original value in picked position
}
}

 

Feflective Essay for HSS8120

The image of Madrid as a people’s mental map

This essay explains the module project that this author has been working on. It starts with an introduction about the creative process of the project, focusing primarily there on the literature review. Subsequently is a description of the study case undertaken. The conclusion represents an exposition of module learning outcomes.

INTRODUCTION

Diverse content has been presented for the ‘Creative Digital Practice and Transdisciplinary Theory’ module. Therefore, there were many possible options available for approaching the ‘project work’ of this module. Thus, due to the novelty of every topic, this was a main concern for this author. However, since one of the earliest sessions discussed mapping, this work field was chosen due to a previous research project conducted where the author studied the use of Google Street View for creative projects. Furthermore, said author was keen –at an early stage- to work with Processing, since this would improve her design skills. Hence, it was decided that the ‘Project work’ will involve mapping and Processing.

Everything started when we were asked to read The Map is the Territory by Siergert[1] for the mapping session. I was fascinated by the perspective of ‘Cultural Studies and Cultural Technologies and Techniques’ about maps: maps have more information about who produced them rather than about the territory. This means the map provides more information about “the way it is observed and described” (Siergert, 2011). After reading the aforementioned reference, I discovered other perceptions of maps that were novel and interesting to me. Shortly thereafter, I connected this idea with one that Kevin Lynch developed in his research The Image of a City[2], which is about the image of a city as ‘being perceived by its inhabitants’ (1960, p.3). Linking both ideas, led me to think about the role of the citizens as the creators of maps of their own cities. According to Lynch (1960), there are two active roles in the creation of ‘environmental images’. The first role is played by the `environment’ providing ‘distinctions and relations’ and the second role is played by a person who observes such an ‘environment’, because they ‘select, organizes, and endows with meaning what he sees’ (p. 9). Therefore, the role that the citizen plays in the creation of maps made sense to me, because ultimately, maps are actually created by people for people. In fact, this is the foundation of my case study, explained in depth later. In the case study, a sample of a few persons were asked to draw the map of Madrid. One of the instructions given was to draw thinking that this map would be a guide for a stranger who does not know the city. In addition to these concepts, Julian Oliver[3] talks about ‘the maps of feelings and memories as the best way to describe the world’. He posits that maps are a limited source of information whereas the description of places can offer preciseness.

In his work, Lynch (1960, p.41- 90) explores the meaning that people have about the form of the city and tries to extract from it the image of three specific cities, Los Angeles, Boston and Jersey City. One of the main findings of his study is the list of elements that citizens use to build up their mental image of the city. These elements are:

- Paths: they are ways that the citizen usually or occasionally takes to commute through the city. These include streets, railroads, canals, etc. For instance, a path can be the route that someone takes every day to go to the office.

- Edges: they are the linear spaces ‘between two phases which are considered as paths’. For instance, in London the Thames’ shore could be an edge.

- Districts: they are what we call neighbourhoods. For instance, in London the Soho is a district.

- Nodes: they are joints, points of connection where people walk through. For example, in Newcastle, Greys Monument is the intersection point of many streets into which citizens enter.

- Landmarks: They are references such as stores, monuments, buildings, signs… in which the citizen does not enter. For instance in Newcastle, landmarks could be the Baltic Museum, Jamie’s Oliver restaurant, The Gate…

Another research whose purpose is to see the common elements that people use to create their mental maps of a city is Towards Intelligent Mapping Applications: A Study Of Elements Found In Cognitive Map by Gary Look and Howard Shrobe. The object of the study is the city of Boston, and the study offers two observations. One observation is the use of metro stations as points of reference, especially when they are ‘located near important places’. The other one, is that prominent places are either ‘large parcels of land’, or ‘neighbourhoods’, or areas with a ‘commercial/cultural impact’.

CASE STUDY

The size of the sample group was fairly modest, 10 women and 10 men, who ranged in age from 17 to 64, with a mean age of 27. Participants had lived in Madrid anywhere from 2 years to 64 years. Due to the small size of the sample , it is not possible to generalize any findings or to draw any conclusions.

The participants were asked to draw their mental map of Madrid on a piece of paper. In order to avoid any kind of pressure such as not remembering the name of the streets, they were told that any map imperfections were not significant, because what really matters it is their honest and purest image of Madrid.

By analysing the collection of the participants’ maps, it was noted that they had several common elements. These are discussed below in order of their priority. Firstly, they all have drawn the main streets of Madrid, most of them without names, and their points of joints (the nodes). Indeed, at first glance, the nodes (most of them, squares) were the elements that stood out in almost every map. Secondly, most of the maps were distributed by districts (neighbourhoods). Thirdly, most of the maps have pointed out landmarks such as museums, theatres, cinemas, monuments.

In contrast with the studies that were explained previously, in these maps these elements weren’t used: the metro stations, the edges, and the paths.

On the other hand, there are some curious noteworthy observations regarding the common elements on people’s mental map according to the range of ages. At first, the maps drawn by people who were 17 years have a clear and simple structure of the city with the main streets and nodes. However, they pointed out very few landmarks and there wasn’t any district. As for the people who were in their sixties, their maps were full of icons of landmarks and nodes. As a matter of fact, their centre of Madrid was based on the most cultural venue of Madrid, ‘Paseo del Padro’. Regarding people who were 20 to 35 years old, their maps had many details. Landmarks and districts were the most used points of references. They have also pointed out the main venues.

Furthermore, as Lynch has explained in his work, there seems to be a difference (that I’ve realised in my work too) between the mental maps from people who lived in the suburbs and go to the town centre for work and the mental map from people who lived in the centre or next to it. The first group of people ‘think of the city in terms of topography, large regions’, just highlighting the main structure of the city (main roads and main nodes). On the contrary, the second group of people ‘rely more upon small landmarks and less upon either regions or piths’. Their maps had many details about the city like cafes, monuments, museums, specific buildings, etc.

PROJECT WORK

The project work is a prototype of an interactive map of a city based on people’s mental maps of that city, similar to Google Maps App.

Nowadays, everyone uses Google Maps to look for places, both on the computer and mobile phones. Indeed, recent statistics have shown that the ‘Google Maps app is the most popular app in the world’ (Global Web Index, 2013). According to Schöning, Hecht and Kuhn (2014), when we talk about the ‘modern computing experience’ we have to talk about ‘online and mobile maps’ as one of its fundamental elements. Therefore, it is undeniable that the habitat of the map in the 21st century is the online medium.

This prototype of an interactive people’s mental map could be useful for touristic purposes. Most of the people, when they visit an unknown city, would love their visit to be guided by a local person who shows them the customs, local food, interesting places, spaces frequented by locals… instead of going to the ‘tourist traps’. Hence, this map could be a closer approach to this wish as it would be made by local people offering detailed information about local popular restaurants, curious places to visit, how to move through the city, short-cuts, transportation means, etc.

MODULE LEARNING OUTCOMES

To conclude this reflective essay, I would like to finish with what I have learned in this first semester. As I have mentioned before, digital technologies are a very new field of work for meHowever, after this project, I have the impression that I am on the right track for making most of the second semester.

On one hand, I have experienced the importance of having a theoretical background when we tackle a creative project, for several reasons. Firstly, it acts as guidance for your work. Secondly, it contextualizes the possible findings or improvements that you achieved with your work. Thirdly, it works as boosting point for your creativity, like a place where to start, which is key, at least for me.

On the other hand, I have never done anything related to coding before. I have struggled with the programming software as it has been like (literally) learning a new language for me. Although there is still much for me to learn, I believe that due to the foundation available to me now, coding will be easier in the second semester.. This humble piece of work I have undertaken has encouraged me to keep learning and improving.

REFERENCES -       Siegert, B. (2011) “The map is the territory“, Radical Philosophy 169. Sep/Oct 2011, pp 13-16. -       Lynch, K. (1962). The Image of the City. The MIT Press, Second printing. -       Oliver, J. (2008). Cartofictions: Maps, the Imaginary and GeoSocial Engineering. Madrid:  Inclusiva-net. [Video] Found it (11/15): https://vimeo.com/784263 -       Look, G., & Shrobe, H. (2007). Towards Intellingent Mapping Applications: A Study of Elements Found in Cognitive Maps. Massachusetts: MIT Computer Science and Artificial Intelligence Laboratory. -       Mari, M. (2013). “Top global smartphone apps, who’s in the top 10”. Founded it on Global Web Index  Blog (12/15): www.globalwebindex.net/Top-global-smartphone-apps -       Schöning, J., Hecht, B., & Kuhn, W. (2014).  Informing Online and Mobile Map Design with the Collective Wisdom of Cartographers. Vancouver: Hasselt University, University of Minnesota & UC Santa Barbara.   [1] Siegert, B. (2011). The map is the territory, Radical Philosophy 169. Sep/Oct 2011, pp 13-16. [2] Lynch, K. (1962). The Image of the City. The MIT Press, Second printing. [3]Oliver, J. (2008). Cartofictions: Maps, the Imaginary and GeoSocial Engineering. Madrid:  Inclusiva-net. [Video] Found it (11/15): https://vimeo.com/78426

HSS8120: Using ‘Minim’ in processing

Once I download ‘Minim’ I had to figure out how to use it- the easiest way for me was to look at the examples folder and trying to make it fit what I wanted it to do.

The code below is showing how to write a sine wave instrument. In order to work this out I used the example “SequenceSound” that is provided. For this I created a class for the instrument, which is easier to fit in with the rest of the sketch. I also used an envelope which separates the sound waves (like a fade in/fade out effect), which gives me the result I wanted rather than a long constant pitch that suddenly begins and ends.

import ddf.minim.*;
import ddf.minim.ugens.*;

Minim minim;
AudioOutput out;
Oscil wave;
// Class for the sine wave synth that will play the notes

class SineInstrument implements Instrument
{
Oscil wave;
Line ampEnv;

SineInstrument( float frequency )
{
// make a sine wave oscillator
// the amplitude is zero because
// we are going to patch a Line to it anyway
wave = new Oscil( frequency, 0.5f, Waves.SINE );
ampEnv = new Line();
ampEnv.patch( wave.amplitude );
}

// this is called by the sequencer when this instrument
// should start making sound. the duration is expressed in seconds.
void noteOn( float duration )
{

// start the amplitude envelope
ampEnv.activate( duration, 0.3, 0 );
// attach the oscil to the output so it makes sound
wave.patch( out );

}

// this is called by the sequencer when the instrument should
// stop making sound
void noteOff()
{
wave.unpatch( out );
}
}

Luckily ‘Minim’ can understand scientific notation, which makes it easier to find separate pitches to represent the different causes of death. To make things simpler I stayed away from any semi-tones and therefore ended up writing a collection of notes in A minor (as I personally find C major quite boring). I started from A0 but the pitches at this octave were too low to be picked up from my speakers and anything higher than the 7th octave was quite painful to listen to.

// Generate the A minor scale with the same number of notes as rows in the table
int scalelength = 36; // Generating 36 notes starting from A2 gives an A minor scale from A2 to A7
String [] letters = {“A”, “B”, “C”, “D”, “E”, “F”, “G”};
String [] scale = new String [scalelength];

for (int i=0; i<scalelength; i++){ // Loop the same number of times as notes in the scale
scale[i] = letters[i%(letters.length)]; // Generates A,B,C,D,E,F or G for each loop in order using the "modulo" function
String a = str((i/7)+2); // Generates the numbers 2 to 7, 7 times each until the end of the scale is reached
scale[i] = scale[i] + a; // Put the number after the letter to give a note that can be fed to Minim
}