Project – 06 – clock

Its spooky season so I decided to make a jack-o-lantern clock. With this clock the idea is that the stem counts down the seconds, every minute the knife on the table moves right and at 60 minutes the knife is far right off the screen as if someone picked it up. Every hour a line is carved into the pumpkin so it is like someone picked up the knife and made a cut the n the knife goes back to the left side of the table as if it was put back down. Every 12 hours the jack-o-lantern is fully carved! The background represents AM or PM.

pumpkinclockDownload
var knifeX; // changes knife position by min
var stemY; // height of stem
var H; //hour

function setup() {
    createCanvas(480, 480);
    background(220);
}

function draw() {
    H = hour();
    knifeX = minute() * 8; // knife moves right every minute
    stemY = -220 + second();
    strokeWeight(1);
    noStroke();
    //set up background so that it changes from am to pm
	if(H < 12){ //am
        background(107, 144, 255);
        fill(237, 214, 100);
        circle(0, 0, 250);
    } else { //pm
        background(28, 37, 74);
        fill(177, 179, 186);
        circle(100, 55, 100);
        fill(28, 37, 74);
        circle(125, 55, 100);
    }
    //clouds
    fill(255);
    //right side cloud
    ellipse(400, 150, 200, 30);
    circle(400, 130, 50);
    circle(350, 125, 75);
    circle(430, 140, 25);
    //left side cloud
    ellipse(100, 250, 200, 30);
    circle(100, 230, 50);
    circle(150, 225, 75);
    circle(70, 240, 25);
	//table
	fill(125, 90, 29);
	rect(0, 350, width, height - 130);
	push();
    translate(240, 240); //changes to center
    stem()
    pumpkin();
    face()
    pop();
    knife();
}

function pumpkin(){
	stroke(214, 129, 58);
	fill(245, 147, 66); //orange
    ellipse(0,0, 300, 250); //pumpkin body
    //pumpkin details
    noFill();
    strokeWeight(5)
    ellipse(0, 0, 100, 250);
    ellipse(0, 0, 200, 250);
}

function stem(){
	//stem 
    noStroke();
    fill(18, 102, 13);
    triangle(-20, -125, 20, -125, 0, -150);
    rect(-15, stemY, 30, 250)
}

function knife(){
    noStroke();
    fill(10);
    rect(knifeX, 410, 6, 50); //knife handle
    fill(100);
    rect(knifeX, 370, 6, 40);
    arc(knifeX, 390, 20, 40, PI/2, (PI/2)*3)
}

function face(){
    H = hour()
    stroke(0);
    strokeWeight(5);
    if (H == 1 || H == 13){ //left eye
        line(-100, 0, -75, -50); // left diag
    } else if (H == 2 || H == 14){
        line(-100, 0, -75, -50);// left diag
        line(-75, -50, -50, 0); //right diag
    } else if (H == 3 || H == 15){
        fill(0);
        triangle(-100, 0, -50, 0, -75, -50); // left eye
    } else if (H == 4 || H == 16){
        fill(0);
        triangle(-100, 0, -50, 0, -75, -50); // left eye
        //right eye
        line(100, 0, 75, -50);// right diag
    } else if (H == 5 || H == 17){
        fill(0);
        triangle(-100, 0, -50, 0, -75, -50); // left eye
        //right eye
        line(100, 0, 75, -50);// right diag
        line(75, -50, 50, 0); //left diag
    } else if (H == 6 || H == 18){
        fill(0);
        triangle(-100, 0, -50, 0, -75, -50); // left eye
        triangle(100, 0, 50, 0, 75, -50); // right eye
    } else if (H == 7 || H == 19){
        fill(0);
        triangle(-100, 0, -50, 0, -75, -50); // left eye
        triangle(100, 0, 50, 0, 75, -50); // right eye
        //start mouth
        line(-120, 30, -75 , 30); // left straight line 
    } else if (H == 8 || H == 20){
        fill(0);
        triangle(-100, 0, -50, 0, -75, -50); // left eye
        triangle(100, 0, 50, 0, 75, -50); // right eye
        //start mouth
        line(-120, 30, -75 , 30); // left straight line 
        //tooth left
        line(-75 , 30, -75 , 50);
        line(-75, 50, -25, 50);
        line(-25, 30, -25, 50);
    } else if (H == 9 || H == 21){
        fill(0);
        triangle(-100, 0, -50, 0, -75, -50); // left eye
        triangle(100, 0, 50, 0, 75, -50); // right eye
        //start mouth
        line(-120, 30, -75 , 30); // left straight line 
        //tooth left
        line(-75 , 30, -75 , 50);
        line(-75, 50, -25, 50);
        line(-25, 30, -25, 50);
        // middle straight line
        line(-25, 30, 25, 30);
    } else if (H == 10 || H == 22){
        fill(0);
        triangle(-100, 0, -50, 0, -75, -50); // left eye
        triangle(100, 0, 50, 0, 75, -50); // right eye
        //start mouth
        line(-120, 30, -75 , 30); // left straight line 
        //tooth left
        line(-75 , 30, -75 , 50);
        line(-75, 50, -25, 50);
        line(-25, 30, -25, 50);
        // middle straight line
        line(-25, 30, 25, 30);
        //tooth right
        line(75 , 30, 75 , 50);
        line(75, 50, 25, 50);
        line(25, 30, 25, 50);
    } else if (H == 11 || H == 23){
        fill(0);
        triangle(-100, 0, -50, 0, -75, -50); // left eye
        triangle(100, 0, 50, 0, 75, -50); // right eye
        //start mouth
        line(-120, 30, -75 , 30); // left straight line 
        //tooth left
        line(-75 , 30, -75 , 50);
        line(-75, 50, -25, 50);
        line(-25, 30, -25, 50);
        // middle straight line
        line(-25, 30, 25, 30);
        //tooth right
        line(75 , 30, 75 , 50);
        line(75, 50, 25, 50);
        line(25, 30, 25, 50);
        // right straight line
        line(120, 30, 75 , 30);
    }else{
        fill(0);
        triangle(-100, 0, -50, 0, -75, -50); // left eye
        triangle(100, 0, 50, 0, 75, -50); // right eye
        //start mouth
        line(-120, 30, -75 , 30); // left straight line 
        //tooth left
        line(-75 , 30, -75 , 50);
        line(-75, 50, -25, 50);
        line(-25, 30, -25, 50);
        // middle straight line
        line(-25, 30, 25, 30);
        //tooth right
        line(75 , 30, 75 , 50);
        line(75, 50, 25, 50);
        line(25, 30, 25, 50);
        // right straight line
        line(120, 30, 75 , 30);
        //whole mouth
        arc(0, 30, 240, 120, 2 * PI, PI);
        fill(245, 147, 66)
        noStroke();
        rect(-75 , 25, 50, 20);
        rect(25, 25, 50, 20);
    }
}

LO – 06

Gerhard Richter is an artist that utilizes randomness in his art. Richter’s “4900 Colours: Version II” was exhibited at Serpentine Gallery back in 2008.
This work consisted of 196 panels each with a 5 x 5 square. The randomness comes from a computer program that assigned colors to each square by random from a 25 color palette. The panels could be hung together to create one large display but in the exhibit they were arranged by random in sets of 4.
The intriguing part about the work is the pure randomness. One may not look at it and immediately see random colors because some panels seemed to be dominated by one certain color, but that is the beauty of pure randomness because in random nature patterns may actually occur.

Project – 05 – wallpaper

drippyDownload
var size = 60
function setup() {
    createCanvas(420, 470);
    background(220);
    
}

function draw() {
	background (255, 143, 233);
	for (var y = size/2 ; y < height + size/2 ; y += size *2){
		for (var x = size/2; x< width + size / 2 ; x += size *2){
			//stripes
			noStroke();
			fill(93, 146, 245, 30);
            rect(x + 45, 0, width/14, height);
			noStroke();
			//face
			fill(245, 237, 93);
			circle(x, y, size);
			//drips
			ellipse(x, y + size/2, 10, 40);
			circle(x, y + size/2 + 18, 12);
			ellipse(x - size/2 + 8, y + size/2 - 8, 10, 30);
			circle(x - size/2 + 8, y + size/2 + 2, 12);
			ellipse(x + size/2 - 7, y + size/2 - 4, 8, 30);
			circle(x + size/2 - 7, y + size/2 + 6, 10);
			//eyes
			stroke(0);
			line(x-15, y - 15, x-5, y - 5);
			line (x - 15, y - 5, x -5, y - 15);
			line(x+15, y - 15, x+5, y - 5);
			line (x + 15, y - 5, x + 5, y - 15);
			//lightning bolt
			noStroke();
			fill(255, 156, 253);
			quad (x + 50, y + 45, x + 75, y + 45, x + 65, y + 65,
			 x + 45, y + 65);
			quad(x + 65, y + 65,  x + 45, y + 65, x + 60, y + 80,
				x + 75, y + 80);
			triangle(x + 60, y + 80, x + 75, y + 80, x + 55, y + 110)
			//mouth
			if (x == y){
				noFill();
				stroke(0);
				arc(x, y + 20, size/2, size/2, PI, 2*PI); // frown
				fill(93, 146, 245);
				noStroke();
				circle(x - 15, y+3, 5);
				triangle(x - 17.5, y +3, x - 12.5, y+ 3, x - 15, y - 5)
				//text
			    textSize(15);
			    stroke(245, 237, 93);
			    fill(93, 146, 245);
		        text("drippy", x - 20, y + size + 10);

			}else{
				noFill();
				stroke(0);
				arc(x, y, size / 2, size /2, .1*PI, .9 * PI); // smile
			}
		}
	}
	noLoop();
}

I based this design off a doodle that i have been drawing for a while and decided to play with gradients, shapes, and texts to create a textile fabric pattern that I would love to wear.

LO – 05

When hearing about the topic I immediately thought about @liliquela on instagram.
This account is an influencer account but the difference here is that the “person” Miquela is actual created with AI.
One of the first instances where I remember seeing this technology happening is during the Fast and Furious seventh movie when they utilized CGI to make Paul Walker’s face for the end scene.
It is crazy to think how graphic art has evolved so muc hso that now there is actually Miquela who is entirely created by AI working as a fashion influencer, essentially she is an AI model.
Not only is she attracting attention and followers but also recognition as she graces the pages of multiple magazines wearing the latest fashions.
This is super intriguing to me as the fashion industry is something Ilove and it’s crazy to see how much tech has developed where it is even permating the model industry.

Project 04 String Art

For this project I drew an eye using string art. I attempted to include face shadows by “cross-hatching” with the string art.

stringartDownload
//skin lines
var dx1;
var dy1;
var dx2;
var dy2;
var numLines1 = 75
var dx3;
var dy3;
var dx4;
var dy4;
//eyebrow lines
var ba1;
var bb1;
var ba2;
var bb2;
var numLines2 = 20


function setup() {
    createCanvas(400, 300);
    background(220);
}

function draw() {
	background(255);
	//background "skin" (x,y) coordinates
	stroke(172, 134, 120); // left-bottom
	dx1 = (0-0)/numLines1;
	dy1 = (300 - 0)/numLines1;
	dx2 = (400 - 0) / numLines1;
	dy2 = (300 - 300) / numLines1;
	var x1 = 0;
	var y1 = 0;
	var x2 = 0;
	var y2 = 300;
	for(var i = 0; i <= numLines1; i+= 1){
		line(x1,y1,x2,y2);
		x1 += dx1;
		y1 += dy1;
		x2 += dx2;
		x2 += dy2;
	}
	//right to bottom
	dx3 = (400 - 400) / numLines1;
	dy3 = (300 - 0) / numLines1;
	var x3 = 400
	var y3 = 0
	for(var i = 0; i <= numLines1; i += 1){
		line(x3, y3, x2, y2);
		x2 -=dx2
		y2 -= dy2
		x3 += dx3
		y3 += dy3
	}
	//top to left
	dx4 = (400 - 0) / numLines1;
	dy4 = (0 - 0) / numLines1;
	var x4 = 400
	var y4 = 0
	for(var i = 0; i <= numLines1; i += 1){
		line(x1, y1, x4, y4);
		x1 += dx1
		y1 += dy1
		x4 -= dx4
		y4 -= dy4
	}
	//top to right
	push();
	translate((width/3)*2, 0)
	scale(0.33);
	for(var i = 0; i <= numLines1; i += 1){
		line(x3, y3, x4, y4);
		x3 += dx3
		y3 += dy3
		x4 += dx4
		y4 += dy4
	}
	pop();

	//start eyebrow lines (a,b) coordinates
	stroke (52, 41,41);
	//line(20, 175, 50, 225); reference lines
	//line(350, 10, 370, 20);
	ba1 = (50 - 20)/ numLines2;
	bb1 = (225 - 175) / numLines2;
	ba2 = (370-350) / numLines2;
	bb2 = (20 -10) / numLines2;
	var a1 =20
	var b1 = 175
	var a2 = 350
	var b2 = 10
	for(var i = 0; i <= numLines2; i += 1){
		line(a2, b2, a1, b1);
		a1 += ba1
		b1 += bb1
		a2 -= ba2
		b2 -= bb2
	}
	push();
	//start pupil, bigger square (c,d) coordinates
	stroke(102, 108, 95);
	noFill();
	var sc1; 
	var sd1;
	var sc2;
	var sd2;
	var sc3;
	var sd3;
	var sc4;
	var sd4;
	var numlinesS = 25
	sc1 = (150-150) / numlinesS;
	sd1 = (190-265) / numlinesS;
	sc2 = (225 -150) / numlinesS;
	sd2 = (190- 190) / numlinesS;
	var c1 = 150
	var d1 = 265
	var c2 = 150
	var d2 = 190
	for (var i = 0; i <= numlinesS; i += 1){ //top left
		line(c1, d1, c2, d2);
		c1 += sc1
		d1 += sd1
		c2 += sc2
		d2 += sd2
	}
	sc3 = (225-225) / numlinesS;
	sd3 = (190- 265)/ numlinesS;
	var c2 = 225
	var d2 = 190
	var c3 = 225
	var d3 = 265
	for(var i = 0; i <= numlinesS; i += 1){ //top left
		line(c2, d2, c3, d3);
		c2 -= sc2
		d2 -= sd2
		c3 += sc3
		d3 += sd3
	}
	sc4 = (150 -225)/ numlinesS;
	sd4 = (265- 265) / numlinesS;
	var c4 = 225
	var d4 = 265
	for(var i = 0; i <= numlinesS; i += 1){ //top left
		line(c3, d3, c4, d4);
		c3 -= sc3
		d3 -= sd3
		c4 += sc4
		d4 += sd4
	}
	for(var i = 0; i <= numlinesS; i += 1){ //top left
		line(c4, d4, c1, d1);
		c4 -= sc4
		d4 -= sd4
		c1 -= sc1
		d1 -= sd1
	}
	//smaller square
	scale(.5);
	translate(185, 225);
    stroke(0);
	noFill();
	for (var i = 0; i <= numlinesS; i += 1){ //top left
		line(c1, d1, c2, d2);
		c1 += sc1
		d1 += sd1
		c2 += sc2
		d2 += sd2
	}
	sc3 = (225-225) / numlinesS;
	sd3 = (190- 265)/ numlinesS;
	var c2 = 225
	var d2 = 190
	var c3 = 225
	var d3 = 265
	for(var i = 0; i <= numlinesS; i += 1){ //top left
		line(c2, d2, c3, d3);
		c2 -= sc2
		d2 -= sd2
		c3 += sc3
		d3 += sd3
	}
	sc4 = (150 -225)/ numlinesS;
	sd4 = (265- 265) / numlinesS;
	var c4 = 225
	var d4 = 265
	for(var i = 0; i <= numlinesS; i += 1){ //top left
		line(c3, d3, c4, d4);
		c3 -= sc3
		d3 -= sd3
		c4 += sc4
		d4 += sd4
	}
	for(var i = 0; i <= numlinesS; i += 1){ //top left
		line(c4, d4, c1, d1);
		c4 -= sc4
		d4 -= sd4
		c1 -= sc1
		d1 -= sd1
	}
	pop();
	// details
	translate(25, 20);
	stroke(172, 134, 120); //skin color
	var shade1;
	var shadf1;
	var shade2;
	var shadf2;
    shade1 = (50 - 20)/ numLines2;
	shadf1 = (225 - 200) / numLines2;
	shade2 = (370-300) / numLines2;
	shadf2 = (20 -10) / numLines2;
	var e1 =20
	var f1 = 200
	var e2 = 300
	var f2 = 10
	for(var i = 0; i <= numLines2; i += 1){
		line(e1, f1, e2, f2);
		e1 += shade1
		f1 += shadf1
		e2 += shade2
		f2 += shadf2
	}
	

    noLoop()
}

LO 04 -Weather Thingy

Weather Thingy is a real time climate sound controller created by Adrien Kaesar at ECAL.
The creation consists of two main parts, the weather station and the custom built sounds controller.
The device is designed to control and modify the settings of musical instruments using real time climate-related events.
I was drawn to this project because the thought of connecting music and weather had never occured to tme before. I think this project is incredibly interesting as it allows the audience to experience weather as a sound.
I highly recommend watching the video for the project as the creator goes on to describe how each of the three weather measuring components contribute to the sound of the instrument.

Project – 03 – dynamic drawing: le fleur

Inspired by the fun and colorful designs of brand : GOLF le FLEUR.

le fleurDownload
function setup() {
    createCanvas(600, 450);
    background(220);

}

function draw() {
    background(0);
    var m = max(min(mouseX, 600), 0);
    var Xsize = m * 550 / 600;
    var mY = max(0, min(mouseY, 450));
    var Ysize = mY * 400 / 450 - 200;
    noStroke();
    translate(300, 225); //center of canvas
    push();
    if(Xsize > 100){
        background(93, 240,235) // teal
    }else{
    	background(255) //white
    }
    fill(255);
    circle(0, 0, -Xsize);
    push();
    fill(242, 156, 56);
    rotate(radians(45));
    translate(200, 0)
    ellipse(0, 0, Xsize, Ysize); //right angled petal
    translate(-400, 0);
    ellipse(0, 0, Xsize, Ysize); //left angled petal
    translate(200, 100);
    ellipse(0, 0, Ysize , Xsize); //bottom angled petal
    translate(0, -200);
    ellipse(0, 0, Ysize, Xsize); //top angled petal
    pop()
    translate(200, 0); //right
    if (mouseY > height/2){
    	 fill(245, 89, 174); // pink
    } else{
    	fill(240, 186, 93); //orange
    }
    ellipse(0, 0, Xsize, Ysize - 200); //right petal
    translate(-400, 0);
    ellipse(0, 0, Xsize, Ysize - 200); //left petal
    translate(200, 100);
    ellipse(0, 0, Ysize - 200 , Xsize); //bottom petal
    translate(0, -200);
    ellipse(0, 0, Ysize - 200, Xsize); //top petal
    pop();
    fill(136, 218, 97); //green
    Xsize = 600 - Xsize
    circle(0, 0, Xsize); //stem
    if(Xsize > 500){
    	fill(255);
    	textSize(40)
    	text("le fleur", -50, 0);

    }
    

}

LO – 03 – Meshu

One project that is incredibly inspiring to me is Meshu. Meshu is an on-demand business created by Rachel Binx and Sha Hwang. The company makes custom jewelry with a 3-D printer.
The algorithmic technique used in this project is meant to generate graphs in 3D form. These graphs are based off the locations in which a person has traveled.
This project really caught my eye because I had never thought about the implimentation of coding in the fashion world. I have always loved the fashion industry and with this project it is clear to me how endless the options are. Meshu really opened my mind to the plethora of possibilities of coding applications within this industry.

brass pendant necklace
poster map

Variable Face

variableface
var faceWidth = 300;
var faceHeight = 320;
var eyeSize = 60;
var faceC = 180
var eyeC = 255
var pC = 0
var maskC = 200
var eyebC = 50
var hairC = 255
function setup() {
    createCanvas(640, 480);
    background(220);
}

function draw() {
	var colorR = random(0, 255); //red
    var colorG = random(0, 255); //green
    var colorB = random(0, 255); //blue
    background(colorR, colorG, colorB)
    stroke(0)
    strokeWeight(1)
    fill(0,0,0)
    rect(25, 25, 590, 430)
    //hair back
    fill(hairC)
    noStroke()
    ellipse(width / 2, height / 2, faceWidth + 150, faceHeight + 150)
    //face
    stroke(0)
    fill(faceC)
    strokeWeight(1)
    ellipse(width / 2, height/ 2, faceWidth, faceHeight);
    var eyeL = width / 2 - faceWidth * .25
    var eyeR = width / 2 + faceWidth * .25
    //hair front
    fill(hairC)
    noStroke()
    ellipse(width / 2, height / 6, faceWidth/ 1.3, faceHeight / 3.1)
    fill(eyeC)
    stroke(0)
    ellipse(eyeL, height / 2, eyeSize, eyeSize); //eyeLeft
    ellipse(eyeR, height / 2, eyeSize, eyeSize); //eye Right
    var eyeP = 30
    fill(pC)
    ellipse(eyeL + eyeSize / 8, height / 2 + eyeSize / 5, eyeP, eyeP); //pupil L
    ellipse(eyeR + eyeSize / 8, height / 2 + eyeSize / 5, eyeP, eyeP); //pupil R
    //mask string
    noFill()
    stroke(hairC)
    strokeWeight(10)
    ellipse(eyeL - 60, height / 1.4, faceWidth / 3, faceHeight / 3)
    ellipse(eyeR + 50, height / 1.4, faceWidth / 3, faceHeight / 3)
    //mask
    fill(maskC)
    strokeWeight(1)
    rect(eyeL - 25, height/1.7, faceWidth / 1.5, faceHeight /3.5 ) //mask
    fill(0)
    line(eyeL - 25, height/1.7 + 10, eyeL - 25 + faceWidth / 1.5, height / 1.7 + 10 ) // mask lines
    line(eyeL - 25, height/1.7 + 20, eyeL - 25 + faceWidth / 1.5, height / 1.7 + 20 )
    line(eyeL - 25, height/1.7 + 30, eyeL - 25 + faceWidth / 1.5, height / 1.7 + 30 )
    line(eyeL - 25, height/1.7 + 40, eyeL - 25 + faceWidth / 1.5, height / 1.7 + 40 )
    line(eyeL - 25, height/1.7 + 50, eyeL - 25 + faceWidth / 1.5, height / 1.7 + 50 )
    line(eyeL - 25, height/1.7 + 60, eyeL - 25 + faceWidth / 1.5, height / 1.7 + 60 )
    line(eyeL - 25, height/1.7 + 70, eyeL - 25 + faceWidth / 1.5, height / 1.7 + 70 )
    line(eyeL - 25, height/1.7 + 80, eyeL - 25 + faceWidth / 1.5, height / 1.7 + 80 )
    //eyelash
    stroke(0)
    strokeWeight(5)
    line(eyeL- eyeSize/ 2, height/2, eyeL - eyeSize / 2 - 20, height/2.1)
    line(eyeR + eyeSize/ 2, height/2, eyeR + eyeSize / 2 + 20, height/2.1)
    line(eyeL - eyeSize/2, height/2.1, eyeL - eyeSize / 2 - 20, height/2.2)
    line(eyeR + eyeSize/2, height/2.1, eyeR + eyeSize / 2 + 20, height/2.2)
    //eyebrow
    noStroke()
    fill(eyebC)
    rect(eyeL - eyeSize / 2, height/3, eyeSize, eyeSize / 6)
    rect(eyeR - eyeSize / 2, height/3, eyeSize, eyeSize / 6)
}

function mouseClicked(){
    faceWidth = random(250, 450);
    faceHeight = random(270, 470);
    eyeSize = random(40, 80);
    eyeP = random(20, 40);
    faceC = color(random (0, 255), random(0, 255), random (0, 255))
    maskC = color(random (0, 255), random(0, 255), random (0, 255))
    eyeC = color(random (180, 255), random(180, 255), random (180, 255))
    pC = color(random (0, 255), random(0, 255), random (0, 255))
    eyebC = color(random (0, 255), random(0, 255), random (0, 255))
    hairC = color(random (0, 150), random(0, 150), random (0, 150))

}

For this project I decided I wanted a face with the mask. As I started coding I chose to make a female face that would change colors and sizes. The hard part was getting the mask to align correctly with each face same goes for the top of the hair. I wanted my faces to look like a cartoon would during Covid.

LO 2 – generative art : “Please Smile”

When researching generative art, I stumbled upon a piece titled “Please Smile” it is a robotic installation done in 2011 by artist Hye Yeon Nam and the robotics were done by Changhyun Choi along with assistant programmer Sam Mendenhall.
I was instantly drawn to the piece as the concept is very intriguing. The exhibit consists of five robotic skeleton arms which are designed to interact with humans in three different ways. First if no human is in view of the camera the robotic arms stay in the default position if a human comes in view the arms are designed to point at the human following the person if he or she were to move. Finally the third way is if the person were to smile the robot would then wave with all five arms.
The piece sounds simple but, with my knowledge of robotics, it is not the easiest thing to program. I’m very inspired by not only the thought process behind the art but also the execution. The video I watched about this piece showed the robot running very smoothly which must have required a sound program.
There is a clear indication of time effort and creativity that went into this piece making it not only cool to look at but also interactive.
It is clear that the artist had a definite vision going into the project and worked alongside others to make her idea reality.

Hye Yeon Nam - Please Smile, Robotic Installation 2011 - YouTube
pictured here is the piece “Please Smile”