===== Workshop at University of the Arts Berlin | 1. December 2017 =====
In her book »[[https://www.amazon.co.uk/Function-Ornament-Farshid-Moussavi/dp/8496540502/ref=sr_1_1?ie=UTF8&qid=1308150333&sr=8-1|The Function of Ornament]]« [[https://en.wikipedia.org/wiki/Farshid_Moussavi|Farshid Moussavi]] describes visible and invisible forces that will shape the architecture of the future. The combination of new mechanisms with cultural, political and temporal effects will manifestate in new aesthetic compositions and affects. In the workshop the participants will concentrate on the visible forces (structural, functional and physical) to develop paper prototypes for future exhibition designs in the context of »Media in Space«.
**Workshop Participants**
* Prof. Felix Beck (Assistant Professor of Practice of Design New York University Abu Dhabi)
* Prof. Pablo Dornhege (Guest Professor University of the Arts Berlin, Class for Exhibitiondesign)
* Cristina Achury
* Nils Hoepke
* Junqiao Huang
* Ting Liu
* Edgar Ludert
* Ismael Sanou
* Afra Schanz
* Sandra Stiehler
* Julius Winckler
**Documentation**
{{:wiki:udk_workshop_2017:udk_workshop_01.jpg?direct&200|}}
{{:wiki:udk_workshop_2017:udk_workshop_02.jpg?direct&200|}}
{{:wiki:udk_workshop_019.jpg?direct&200|}}
{{:wiki:udk_workshop_024.jpg?direct&200|}}
{{:wiki:udk_workshop_016.jpg?direct&200|}}
{{:wiki:udk_workshop_017.jpg?direct&200|}}
{{:wiki:udk_workshop_2017:udk_workshop_04.jpg?direct&200|}}
{{:wiki:udk_workshop_020.jpg?direct&200|}}
{{:wiki:udk_workshop_021.jpg?direct&200|}}
{{:wiki:udk_workshop_022.jpg?direct&200|}}
{{:wiki:udk_workshop_023.jpg?direct&200|}}
{{:wiki:udk_workshop_2017:udk_workshop_03.jpg?direct&200|}}
{{:wiki:udk_workshop_2017:udk_workshop_05.jpg?direct&200|}}
{{:wiki:udk_workshop_2017:udk_workshop_06.jpg?direct&200|}}
{{:wiki:udk_workshop_2017:udk_workshop_08.jpg?direct&200|}}
{{:wiki:udk_workshop_2017:udk_workshop_09.jpg?direct&200|}}
{{:wiki:udk_workshop_2017:udk_workshop_010.jpg?direct&200|}}
{{:wiki:udk_workshop_2017:udk_workshop_011.jpg?direct&200|}}
{{:wiki:udk_workshop_2017:udk_workshop_012.jpg?direct&200|}}
{{:wiki:udk_workshop_2017:udk_workshop_013.jpg?direct&200|}}
{{:wiki:udk_workshop_2017:udk_workshop_014.jpg?direct&200|}}
{{:wiki:udk_workshop_018.jpg?direct&200|}}
{{:wiki:udk_workshop_2017:udk_workshop_07.jpg?direct&200|}}
===== Session 1 => Paper Folding =====
**Example Structures**
{{:wiki:paper_folding_structure_001.jpg?direct&200}}
{{:wiki:paper_folding_structure_003.jpg?direct&200}}
{{:wiki:paper_folding_structure_005.jpg?direct&200}}
{{:wiki:paper_folding_structure_006.jpg?direct&200}}
{{:wiki:paper_folding_structure_004.jpg?direct&200}}
{{:wiki:paper_folding_structure_002.jpg?direct&200}}
Look at the above structures and set them into an architectural context. Imagine those structures to become a carrier of information using different media: For instance printed images (e.g. as [[https://www.arch2o.com/wp-content/uploads/2013/01/Arch2O-Optical-illusion-Anamorphosis-Felice-Varini-23.jpg|anamorphosis]]), or medial augmentation (e.g. through [[http://projection-mapping.org/wp-content/uploads/2014/09/Climent2.jpg|projection mapping]]) – in combination with the right media such structures create interesting spatial environments to transmit content.
===== Session 2 => Shortcut for switching layer compositions in Photoshop =====
My favourite Photoshop feature is the [[https://helpx.adobe.com/photoshop/using/layer-comps.html|layer composition]] tool. A layer comp is a snapshot of a state of the Layers panel. To switch between different layer comps you can click onto the arrow-icons (see red box in screenshot below),…
{{:wiki:layer_comp_shortcut_01.png?direct&850}}
…or create an individual short-cut. The screenshots below lead you through the steps of how to create such a short-cut.
{{:wiki:layer_comp_shortcut_02.png?direct&850}}{{:wiki:layer_comp_shortcut_03.png?direct&850}}{{:wiki:layer_comp_shortcut_04.png?direct&850}}
===== Session 3 => Arduino Sketch =====
// Including necessary libraries
#include
//10 Mega Ohm Resistor between pins 7 and 8, you may also connect the antenna on pin 8
CapacitiveSensor cs_7_8 = CapacitiveSensor(7, 8);
// Declaring required variables
unsigned long csSum;
bool initial = true;
char val;
// Initial setup that runs only once in the beginning
void setup() {
// Initiating the serial connection between Arduino and computer
Serial.begin(9600);
// Letting Arduino know that the builtin LED will be used
pinMode(LED_BUILTIN, OUTPUT);
}
// Main program loop
void loop() {
// The loop for the inital handshake with the Processing code
// Basically, Arduino board broadcasts "1" to the computer until
// it receives "2" from the computer. Later, Arduino sends "2"
// back to the computer to show that it received the message
while (initial) {
// Keep sending "1" to the computer
Serial.println("1");
// Wait for 50 milliseconds
delay(50);
// If any data is available to read from the serial connection
if (Serial.available()) {
// Read it and store it in val
val = Serial.read();
// If the read value is 2
if (val == '2') {
for (int x = 0; x < 5; x++) {
// Send "2" to the computer
Serial.println("2");
// Wait for 50 milliseconds
delay(50);
}
// Get out of the hand shake process
initial = false;
}
}
}
// Read the pins and communicate with the computer
// This function does the main job of letting the
// computer know that someone has touched to the pin 8
CSread();
}
// Function definition
void CSread() {
// Sensor resolution is set to 80
long cs = cs_7_8.capacitiveSensor(80);
// Arbitrary number to detect the chnages
if (cs > 100) {
// Accumulate the reading values
csSum += cs;
// This value is the threshold, a High value means it takes longer to trigger
if (csSum >= 4000) {
if (csSum > 0) {
csSum = 0; //Reset
}
//Stops readings
cs_7_8.reset_CS_AutoCal();
// turn the LED on (HIGH is the voltage level)
digitalWrite(LED_BUILTIN, HIGH);
// Send "1" to the computer to indicate that button is activated
Serial.println("1");
// Wait for 50 milliseconds
delay(50);
} else {
//Timeout caused by bad readings
csSum = 0;
// turn the LED off by making the voltage LOW
digitalWrite(LED_BUILTIN, LOW);
}
}
}
===== Session 4 => Processing Sketch =====
// Import required libraries
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.io.IOException;
import processing.serial.*;
// Declare required variables
Serial myPort;
int maxPort;
int correctPort;
String val;
boolean found = false;
boolean initial = true;
boolean setupFinished = false;
int x = 1;
PImage tick;
PFont f;
//////////////////////////////////////////////////////////////////////////////
/******************** KEYBOARD SHORTCUT IS DEFINED HERE *********************/
// Command key + Shift key + Number One (1)
int keyInput[] = {
KeyEvent.VK_META,
KeyEvent.VK_SHIFT,
KeyEvent.VK_1
};
/* KeyEvent.VK_META is the cmd key for **macs** */
/* KeyEvent.VK_CONTROL is the ctrl key for **windows** pcs */
/* KeyEvent.VK_ALT is the alt key */
/* KeyEvent.VK_SPACE is the space bar */
/* KeyEvent.VK_GREATER is the ">" key */
/* KeyEvent.VK_A is the "A" key and others letters follow the same syntax */
/****************** Check the website below for other keys ******************/
/** https://docs.oracle.com/javase/7/docs/api/java/awt/event/KeyEvent.html **/
//////////////////////////////////////////////////////////////////////////////
// Initial setup that runs only once in the beginning
void setup() {
size(250, 250);
// List all the available serial ports
printArray(Serial.list());
// Get the number of the avaliable ports
maxPort = Serial.list().length;
// Required initializations //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\//
tick = loadImage("tick.jpg"); //\ DON'T FORGET TO PUT THE "tick.png" IN THE SAME DIRECTORY WITH THE CODE \//
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\//
f = createFont("Arial", 16);
background(255, 255, 255);
textFont(f);
fill(0);
text("Please wait...", 10, 30);
delay(1000);
}
// The main program loop
void draw() {
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/****************************************************** PART 1 **************************************************/
/* This part of the program finds the port which is connected to the Arduino board. Later, it initiates the */
/* handshake between the Arduino board and processing code */
// Find the correct port which arduino is connected
while (!setupFinished) {
while (!found) {
for (int x = 0; x < maxPort; x++) {
try {
// Try to connect to the port
myPort = new Serial(this, Serial.list()[x], 9600);
// read it and store it in val
val = myPort.readStringUntil('\n');
val = trim(val);
// If read data is "1" which is the data that Arduino sends
if (val.equals("1") == true) {
found = true;
correctPort = x;
// Print it out in the console
println("Correct port is found");
}
}
catch (Exception e) {
// Handle the error, or just print it, like:
println("Error: " + e.getMessage());
println("Trying another port");
try {
myPort.clear();
myPort.stop();
}
catch(Exception b) {
}
}
println(" ----- ");
// Wait for 100 milliseconds
delay(100);
}
}
// Print it out in the console
println("Connected to the port"); //print it out in the console
try {
// Try to send "2" to the Arduino to initiate the handshake
myPort.write("2");
}
catch (Exception h) {
// Handle the error, or just print it, like:
println(h.getMessage());
// Try again to connect to the port
myPort.clear();
myPort.stop();
myPort = new Serial(this, Serial.list()[correctPort], 9600);
}
try {
// read it and store it in val
val = myPort.readStringUntil('\n');
val = trim(val);
if (val.equals("2") == true) {
setupFinished = true;
// Print it out in the console
println(" ---- ");
println("Connected to the Arduino Board");
println(" ---- ");
} else {
// Print it out in the console
println("Trying to connect to the Arduino Board");
}
}
catch (Exception z) {
}
delay(100);
background(255, 255, 255);
textFont(f);
fill(0);
text("Connected to the Arduino Board", 10, 30);
image(tick, 47, 45, tick.width/2, tick.height/2);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/****************************************************** PART 2 **************************************************/
/* This part of the program is the main part that send the key stokes to the operating system */
// The main program loop
try {
// read it and store it in val
val = myPort.readStringUntil('\n');
val = trim(val);
// If button is touched
if (val.equals("1") == true) {
setupFinished = true;
try {
Robot robot = new Robot();
robot.delay(500);
// Start sending key strokes to the operating system
for (int i = 0; i < keyInput.length; i++) {
robot.delay(25);
robot.keyPress(keyInput[i]);
robot.delay(25);
}
// Finish sending key strokes to the operating system
for (int i = 0; i < keyInput.length; i++) {
robot.delay(25);
robot.keyRelease(keyInput[i]);
robot.delay(25);
}
// Print it out in the console
if (x == 1) {
println("Action completed");
x = 0;
} else {
println("--Action completed");
x = 1;
}
// Get the current date time information
int s = second(); // Values from 0 - 59
int m = minute(); // Values from 0 - 59
int h = hour(); // Values from 0 - 23
String sVal, mVal, hVal;
if (s<10) {
sVal = Integer.toString(s);
sVal = "0" + sVal;
} else {
sVal = Integer.toString(s);
}
if (m<10) {
mVal = Integer.toString(m);
mVal = "0" + mVal;
} else {
mVal = Integer.toString(m);
}
if (h<10) {
hVal = Integer.toString(h);
hVal = "0" + hVal;
} else {
hVal = Integer.toString(h);
}
fill(255);
stroke(255);
rect(0, 203, 250, 50);
textFont(f);
fill(0);
text("Button last pressed on:", 10, 220);
text(hVal +":" + mVal + ":" + sVal, 10, 240);
}
catch (Exception r) {
// Handle the error, or just print it, like:
r.printStackTrace();
exit();
}
}
}
catch (Exception m) {
}
}
Here is the "tick.jpg"
{{:wiki:tick.jpg?50|}}
===== Bibliography =====
* Gjerde, Eric, [[https://www.amazon.de/Origami-Tessellations-Awe-Inspiring-Geometric-Designs/dp/1568814518|Origami Tessellations: Awe-Inspiring Geometric Designs]], CRC Press, 2009
* Jackson, Paul, [[https://www.amazon.de/Folding-Techniques-Designers-Sheet-Form/dp/1856697215/ref=sr_1_1?s=books-intl-de&ie=UTF8&qid=1511267097&sr=1-1&keywords=Folding+Techniques+for+Designers&dpID=51u4exQ8oTL&preST=_SX198_BO1,204,203,200_QL40_&dpSrc=srch|Folding Techniques for Designers]], Laurence King, 2014
* Jackson, Paul, [[https://www.amazon.de/Cut-Fold-Techniques-Pop-Up-Designs/dp/1780673272/ref=sr_1_1?s=books-intl-de&ie=UTF8&qid=1511267120&sr=1-1&keywords=Cut+and+Fold+Techniques+for+Pop-Up+Designs&dpID=517D56fNScL&preST=_SX198_BO1,204,203,200_QL40_&dpSrc=srch|Cut and Fold Techniques for Pop-Up Designs]], Laurence King, 2014
* Moussavi, Farshid, [[https://www.amazon.de/Function-Form-Farshid-Moussavi/dp/8496954730/ref=sr_1_3?s=books-intl-de&ie=UTF8&qid=1511267141&sr=1-3&keywords=The+Function+of+Form&dpID=51sg%252Bjqci1L&preST=_SX198_BO1,204,203,200_QL40_&dpSrc=srch|The Function of Form]], Havard University, 2009
* Moussavi, Farshid, [[https://www.amazon.de/Function-Ornament-Second-Printing/dp/1940291690/ref=sr_1_1?s=books-intl-de&ie=UTF8&qid=1511267169&sr=1-1&keywords=The+Function+of+Ornament&dpID=41--NLipZEL&preST=_SY264_BO1,204,203,200_QL40_&dpSrc=srch|The Function of Ornament]], Havard University, 2006
* Zeier, Franz, [[https://www.amazon.de/Papier-Versuche-zwischen-Geometrie-Spiel/dp/3258046948/ref=sr_1_1?s=books-intl-de&ie=UTF8&qid=1511267191&sr=8-1&keywords=Papier%2C+Versuche+zwischen+Geometrie+und+Spiel&dpID=11QDDDXGPML&preST=_BO1,204,203,200_QL40_&dpSrc=srch|Papier, Versuche zwischen Geometrie und Spiel]], Haupt Berne, 2009