hyt-Final-Project: Will you be my friend on a cold night?

hyt-final-proj

// helen tsui
// 15-104 section d
// hyt@andrew.cmu.edu
// final-project


// image gallery
var poke; 
var hugWhite;
var heart;

// welcomePage() global var.
var startRadius = 100;
var lightOn = false;
var endWelcome = false;

// drawPerson() global var.
var headX;
var headY;
var headSize;

// array and other things for bubble and warmth functions
var bubbleX = [];
var bubbleY = []; 
var heartArr = [];
var heartV = 0;
var heartPos = []; // heart position in warmUp()

// for setGradient() function
var Y_AXIS = 1;
var X_AXIS = 2;

// rgb values for figure
var r = 161; 
var g = 190; 
var b = 255; 
var addColor = 10;

// check if button is hovered over
var isOverWarmth;
var isOverBubbles; 
var clickedBubbleButton = false;
var clickedWarmthButton = false;
var happy = false; // happy face? 

// for mouth movement
var endAngle;
var startAngle; 



function preload() {
    // first icon's courtesy of elon lastad from noun project
    hugWhite = loadImage("https://i.imgur.com/LdCyCn9.png");
    poke = loadImage("https://i.imgur.com/CV9mms1.png");
    heart = loadImage("https://i.imgur.com/DK1JVMP.png");
}



function setup() {
    createCanvas(480, 480);
    frameRate(16);
}



function draw() {

    welcomePage();
    if (endWelcome == true) {
    //making gradient background
    var grad1 = color(42, 46, 127); // gradient color 1
    var grad2 = color(156, 83, 156); // gradient color 2
    var grad3 = color(78, 83, 107); // gradient color 3
    background(0);
    setGradient(0, 0, width, height * 0.75, grad1, grad2, Y_AXIS); 
    setGradient(0, height * 0.75, width, height, grad2, grad3, Y_AXIS); 
    fill(0, 40);
    noStroke();
    // land shape
    arc(width / 2, height + 20, width * 1.3, height * 0.4, 180, 0, OPEN);
    makeSnow();
    buttonForBubble();
    buttonForWarmth();
    drawPerson();
    }

}



function welcomePage() { 
    var bg = 0;
    noStroke();
    fill(0);
    rect(0, 0, width, height);
    fill(255, 226, 104, 200); // mustard yellow color
    // yellow circle expands
    ellipse(width - 20, height - 20, startRadius, startRadius); 
    var mouseDist = dist(mouseX, mouseY, width - 30, height - 30);
    if (mouseDist < 50) {
        lightOn = true;
    }
    if (lightOn == true) {
        startRadius += 10;
    }
    textSize(15);
    textFont("Courier New");
    text("Will You Be My Friend ", 90, 100);
    text("On a Cold Night? ", 90, 120);
    textSize(12);
    text("• Pat my head to keep me warm", 80, 250);
    text("• Drag your mouse and draw bubbles with me", 80, 270);
    text("• Click and send me some warm fuzzy hearts", 80, 290);
    text("• Happy xmas :)", 80, 310);
    // if whole screen yellow, go to second screen
    if (startRadius >= 1500) { 
        endWelcome = true;
    }
}



function makeSnow() {
    this.x = random(width);
    this.y = random(height);
    for (var h = 0; h < 150; h++) {
            fill(255, 50); // white alpha
            ellipse(this.x, this.y, 10, 10, 50);
    }
}



function buttonForBubble() {
    // make button first 
    var posX = width - 100;
    var posY = 100;
    var dist2 = dist(mouseX, mouseY, posX, posY);
    if (dist2 < 25) {
        isOverBubbles = true;
    } else {
        isOverBubbles = false;
    }
    if (isOverBubbles == true) {
        push();
        fill(161, 190, 255);
        text("Draw bubbles with me!", 50, 50);
        cursor(HAND);
        stroke(200); // ocean color
        strokeWeight(4);
        if (mouseIsPressed) {
            clickedWarmthButton = false;
            clickedBubbleButton = true;
        }
        pop();
    } 
    if (isOverBubbles == false) {
        fill(69, 103, 178);
        cursor(ARROW);
    }
    ellipse(posX, posY, 50, 50); // draw button shape

    // draw bubble icon on button
    push();
    fill(255);
    ellipse(posX - 9, posY + 7, 10, 10);
    ellipse(posX + 6, posY - 6, 16, 16);
    ellipse(posX + 7, posY + 12, 8, 8);
    pop();

    // call function for drawing bubbles
    drawBubbles();
}



function buttonForWarmth() {
    // make button for hearts and hugs
    var posX1 = width - 100;
    var posY1 = 180;
    var dist1 = dist(mouseX, mouseY, posX1, posY1);

    if (dist1 < 25) {
        isOverWarmth = true;
    } else {
        isOverWarmth = false;
    }
    if (isOverWarmth == true) {
        push();
        fill(255, 206, 216);
        text("feeling loved <3", 50, 50);
        cursor(HAND);
        stroke(200);
        strokeWeight(4);
        if (mouseIsPressed) {
            clickedBubbleButton = false;
            clickedWarmthButton = true;
        }
        pop();
    } 
    if (isOverWarmth == false) {
        fill(173, 140, 147);
        //noStroke();
        cursor(ARROW);
    }

    // draw button
    ellipse(posX1, posY1, 50, 50); // where the button is
    // input icon image
    push();
    imageMode(CENTER);
    scale(0.08, 0.08);
    image(hugWhite, posX1 * 12.5, posY1 * 12.5);
    pop();
    // execute warmUp function
    warmUp();
}

function drawBubbles() {

    if(!clickedBubbleButton) {
        return;
    }
    // limit bubbles array to 20 circles
    if (bubbleX.length > 20) {
        bubbleX.shift();
        bubbleY.shift();
    }
    // draw bubble
    for (var i = 0; i < bubbleX.length; i++) {
        var bubbleInc = random(-10, 10); // bubble increments
        var bubblePosX = bubbleX[i] + random(-10, 10); // random X or Y position
        var bubblePosY = bubbleY[i] + random(-10, 10); // random X or Y position
        var bubbleR = 10 + random(-2, 4); 
        noStroke();
        fill(255, 160);
        ellipse(bubblePosX, bubblePosY, bubbleR, bubbleR);
    }
}



function warmUp() {
    // if warmth button not clicked, warmUp will not be executed
    if(!clickedWarmthButton) {
        return;
    }
    // send heart falling rain
    heartV += 5;
    for (var x = 0; x < heartArr.length; x++) {
        push();
        scale(0.5, 0.5);   
        image(heart, heartArr[x], heartPos[x]+heartV);
        pop();
    }
    if (heartPos[x] >= width + 5) {
        heartPos = [];
    }
}



function drawPerson() {
    headX = width / 3;
    headY = height / 3;
    headSize = 85;
    // change body temperature as time goes by
    for (var i = 0; i < 1000; i++) {
        r -= 0.001;
        b += 0.001; 
        fill(r, g, b);
    }
    noStroke();
    // head
    ellipse(headX, headY, headSize, headSize); 
    image(poke, headX + 50, headY - 20);
    // body
    rect(headX - 25, headY + 35, 50, 120, 30); 
    // left arm
    rect(headX - headSize * 0.58, headY + 50, 20, 50 * 2, 30);
    // right arm
    rect(headX + headSize * 0.33, headY + 50, 20, 50 * 2, 30); 
    // left leg
    rect(headX - 25, headX + 120, 18, 130, 30);
    // right leg
    rect(headX + 7, headX + 120, 18, 130, 30);
    // eyes
    fill(0);
    ellipse(headX - 30, headY, 10, 10);
    ellipse(headX, headY, 10, 10);
    // blush
    fill(252, 204, 255, 150);
    ellipse(headX - 35, headY + 21, 14, 12);
    ellipse(headX + 4, headY + 21, 14, 12);
    fill(0);
    // mouth
    push();
    stroke(0);
    strokeWeight(3);
    noFill();
    angleMode(DEGREES); 
    if (happy == false) {
        startAngle = 180; 
        endAngle = 0;
    }
    if (happy == true) {
        startAngle = 0;
        endAngle = 180;
    }
    arc(headX - 18, headY + 20, 8, 3, startAngle, endAngle, OPEN);
    pop();
    }



function mousePressed() {
    // when mouse is pressed, the array restarts (new drawing action on canvas)
    bubbleX = [];
    bubbleY = [];
    // push new heart position into array
    heartArr.push(mouseX * 2);
    heartPos.push(mouseY * 0.5);
    // finding distance between mouse and head
    var distance = dist(mouseX, mouseY, width/2, height/3); 
    if (distance < 90) {
        cursor(HAND);
        r += addColor;
        b -= addColor;
        if (r >= 160) {
            happy = true;
        } else {
            happy = false;
        }
    }
}



function mouseDragged() {
    if (clickedBubbleButton) {
        bubbleX.push(mouseX);
        bubbleY.push(mouseY);
    }
}



// ---- HELPER CODE REFERENCED FROM P5.JS WEBSITE ---- //



function setGradient(x, y, w, h, c1, c2, axis) {
  noFill();
  if (axis == Y_AXIS) {  // Top to bottom gradient
    for (var i = y; i <= y+h; i++) {
      var inter = map(i, y, y+h, 0, 1);
      var c = lerpColor(c1, c2, inter);
      stroke(c);
      line(x, i, x+w, i);
    }
  }  
  else if (axis == X_AXIS) {  // Left to right gradient
    for (var i = x; i <= x+w; i++) {
      var inter = map(i, x, x+w, 0, 1);
      var c = lerpColor(c1, c2, inter);
      stroke(c);
      line(i, y, i, y+h);
    }
  }
}


For the final project, I wanted to create something that is warm and fuzzy to play for this winter, so I made a simple interactive mouse-moving game about a small person looking for company on a cold snowy night.

The game starts with a menu screen, showing the title and instructions for the game. There are three different interactions in the game: patting head for warmth, sending hearts, and drawing bubbles with the character. The user would activate the game by placing the cursor over the yellow circle (on the bottom right side), and then you would see the second screen. When the character reaches a certain temperature, it would have a smiley face showing its happiness; the other two buttons are also clicked on and have separate functions. Have fun exploring and happy holidays 🙂

hyt-Project-12: Final Proposal

For the final project, my initial idea is to create an interactive, animation-like game that aims to raise awareness for those affected by ALS. In the game that I am envisioning, I want to create a set of actions the users can interact with the “person” — cleaning, patting, hugging, etc. Since the person will be automatically set to blue-ish color, signifying his coldness as ice cracks climbs up to his feet, these set of actions will activate warmness to take away his pale blue colors and turn his body into warmer hues, signifying his rise of vitality. The source of warmness will come from his animated heart, and the users would have to occasionally interact with the “person” for a better mood and vitality.

Even though at this point I am not yet sure about how to execute it, I hope to learn more about creating animation in P5.JS, as well as different mouse functions that could optimally turn the mouse shape into customized patterns. Below is a visualized sketch for what I am thinking right now.

hyt-Looking-Outward-12: Project Inspiration

Neko Atsume

For my project inspiration, I found a widely-popular phone app developed by Hit-Point Co., Ltd three years ago (2014), which is named “Neko Atsume”, meaning literally cat garden in Japanese. In this kitten-collecting simulation game, you could buy different types of toys to place in your backyard, and it would attract random cats showing up at your house and play with your collection of toys, and then as gratitude they would leave you collection momentos, or silver/gold fish as a “currency” in this game. I think one of the critiques I have for the app is that it has a rather slow-paced, low-commitment kind of game to play, but I think it creates a sense of calmness and happiness that corresponds with the game developer’s initial idea. I think this model could be helpful to incorporate within my final project; the layout and illustration is quite simple yet effective, as many users become fans for these cuteness-overload cats.

An expanded (3-screen) view of the backyard!

INKS

Another source of inspiration is also a mobile-platform game called Inks, developed by State of Play starting in 2008. It is a creative application that intermixes the art of splash painting with the classic pinball machine. I think the graphics are especially aesthetically beautiful in terms of the colors and motions, and I’d hope to somehow reference this method into my interactive mini-game. The only concern / improvement I can think of is the repetitiveness may not seem too appealing for the wider audience, but I personally have enjoyed this game a lot, both functionally and aesthetically.

[Caption: Three different stages of the pinball game. The idea is that you need to splatter all the shapes (point the balls to all possible directions) to pass through the level. ]

hyt-Looking-Outward-11: Sound Art

Live performance documentation of Samson Young’s Nocturne (2015)

For this week’s Looking Outward post, I found inspiration through Samson Young’s work of art. He is described as a rising sound artist based in Hong Kong and with a strong background in music composition. While he’s concentrated on the expression using sounds, he also incorporate them into live performances, visual drawings and films. The particular project that interested me was Nocturne (2015), a live performance that he conducted in team gallery, NYC. He sits in a position surrounded by drummer’s set, various instruments, found objects and connected amplifiers attached to the objects. A old television screen is also placed in front of him, playing muted footages of night bombings found on the Internet, most of which are US attacks in the middle east as well as ISIS gulf war, etc. He aims to improvise the explosion sounds with “foley technique” and broadcast it on a pirated radio frequency so that the audience could experience the performance using transportable radios. Since the found footages are political and pointing to the specific war-torn countries, the performance seems to be a playful yet sarcastic commentary toward the authority.

Even though the sound is mainly created by the artist, the computation element lies within the video footages, as it shows the frequency of the bombing and the artist aligns his action based off of the frequency. I think the imitation of everyday / common-heard sounds is definitely something I am interested in, and I wonder if it would be possible to recreate them by playing with the p5.sound library for future projects.

 

hyt-Project-11: Turtle Abstract Drawing

hyt-project-11

// helen tsui
// 15-104 section d
// hyt@andrew.cmu.edu
// project-11-turtles-freestyle


var img; 
var px = 0; // set one variable as x position 
var py = 0; // set one variable as y position
    
// preload image onto canvas
function preload() {
    img = loadImage("https://i.imgur.com/BRPnejy.jpg");    
}

// basic setup, load pixels and display image
function setup() {
    createCanvas(480, 480);
    background(0);
    img.loadPixels();
    image(img, 0, 0);
}

function draw() {

    // retrieve brightness value
    var rgb = img.get(px, py);
    var brightnessVal = brightness(rgb);

    // create new turtle pixel + other properties
    var pixel = makeTurtle(px, py);
    pixel.setWeight(5);
    print(brightnessVal)

    // restrain px position within canvas
    if (px <= width) { 

        // draw in the lighter zones
        if (brightnessVal >= 92 & brightnessVal < 100) { 
            pixel.setColor(color(200, 191, 201, 150));
            pixel.forward(1);

        } 
        // draw in dark zones
        if (brightnessVal < 92) {
            pixel.setColor(color(128, 122, 128, 150));
            pixel.forward(1);
        }

        // draw in gray-ish zones
        if (brightnessVal >= 100) {
            pixel.setColor(color(251, 244, 238, 150));
            pixel.forward(1);
        }
    }

    // if out of canvas then reset
    if (px > width) {
        px = 0;
        py += 8;
    }

    // make the turtles move! 
    px += 2;
}










// turtle function
function turtleLeft(d){this.angle-=d;}function turtleRight(d){this.angle+=d;}
function turtleForward(p){var rad=radians(this.angle);var newx=this.x+cos(rad)*p;
var newy=this.y+sin(rad)*p;this.goto(newx,newy);}function turtleBack(p){
this.forward(-p);}function turtlePenDown(){this.penIsDown=true;}
function turtlePenUp(){this.penIsDown = false;}function turtleGoTo(x,y){
if(this.penIsDown){stroke(this.color);strokeWeight(this.weight);
line(this.x,this.y,x,y);}this.x = x;this.y = y;}function turtleDistTo(x,y){
return sqrt(sq(this.x-x)+sq(this.y-y));}function turtleAngleTo(x,y){
var absAngle=degrees(atan2(y-this.y,x-this.x));
var angle=((absAngle-this.angle)+360)%360.0;return angle;}
function turtleTurnToward(x,y,d){var angle = this.angleTo(x,y);if(angle< 180){
this.angle+=d;}else{this.angle-=d;}}function turtleSetColor(c){this.color=c;}
function turtleSetWeight(w){this.weight=w;}function turtleFace(angle){
this.angle = angle;}function makeTurtle(tx,ty){var turtle={x:tx,y:ty,
angle:0.0,penIsDown:true,color:color(128),weight:1,left:turtleLeft,
right:turtleRight,forward:turtleForward, back:turtleBack,penDown:turtlePenDown,
penUp:turtlePenUp,goto:turtleGoTo, angleto:turtleAngleTo,
turnToward:turtleTurnToward,distanceTo:turtleDistTo, angleTo:turtleAngleTo,
setColor:turtleSetColor, setWeight:turtleSetWeight,face:turtleFace};
return turtle;}

For this project, I wanted to create an abstract landscape work that’s based off of a found minimalist photo, and the turtle drawing process would imitate a machine printing out the pixelated drawing. I didn’t really have a sketch, since the found image itself is my inspiration. I think the most challenging part was to incorporate the brightness() function into turtles, which took me a long time to figure out (for quite a while the brightness value was not calling the right (px, py) position) however I am quite satisfied with the foggy, pastel painting that generated.

* i’m using a grace day for this week!

The first image is an iteration without the original image, and the second image incorporates both the original + iterated turtles. Enjoy!

hyt-Project-10: Generative Landscape

hyt-10-project

// helen tsui
// 15-104 section d
// hyt@andrew.cmu.edu
// project-10-Generative-Landscape

var frames = [];
var framesIndex = 0;
var dino = [];

var terrainSpeed = 0.001;
var terrainDetail = 0.005;

var SkySpeed = 0.0003;
var SkyDetail = 0.01;

var t; // terrain in for loop
var y; // terrain y coordinate



function preload() {
    var filenames = [];
    filenames[0] = "https://i.imgur.com/nNc7b23.png";
    filenames[1] = "https://i.imgur.com/XMA7PM4.png";
    filenames[2] = "https://i.imgur.com/kN7pKft.png";
    filenames[3] = "https://i.imgur.com/0BpdBta.png";
    filenames[4] = "https://i.imgur.com/FZ6hBbP.png";
    for (var i = 0; i < filenames.length; i++) {
        frames[i] = loadImage(filenames[i]); 
    }
}

function setup() {
    createCanvas(480, 300); 
    frameRate(10);

    for (var i = 0; i < 5; i++) {
        var rx = random(width);
        dino[i] = makeDinosaur(rx);
    }
}    


function makeStar() {
    stroke(200, 0, 0);
    strokeWeight(8);
    var starx = random(0, width);
    var stary = random(0, height);
    line(starx, stary, starx + 7, stary + 7);
}

// function makeStar2() {
//     stroke(200, 0, 0);
//     strokeWeight(8);
//     var starx2 = random(0, width);
//     var stary2 = random(0, height);
//     line(starx2, stary2, starx2 + 7, stary2 + 7);
// }

// background desert
    
// foreground - terrain that changes color
function makeTerrain() {
    noFill();
    noStroke();
    beginShape(); 
    for (var x = 0; x < width; x++) {
        t = (x * terrainDetail) + (millis() * terrainSpeed);
        y = map(noise(t), 0, 1, 150, height);
        vertex(x, y); 
        stroke(200-frameCount*0.5, 141, 103);
        line(x, y, x, height);
    }
    endShape();
}

// background - make sky 
function makeSky() {
    noFill();
    noStroke();
    beginShape(); 
    for (var x = 0; x < width; x++) {
        t = (x * SkyDetail) + (millis() * SkySpeed);
        y = map(noise(t), 0, 1, 0, 200);
        vertex(x, y); 
        stroke(219, 239, 240, 200, 200); // sky color
        line(x, 0, x, y);
    }
    endShape();
}



// making an object - dinosaur
function makeDinosaur(birthPos) { 
    var dino = {x: birthPos, 
                speed: 1,
                display: displayDinosaur,
                move: moveDinosaur
                }
    return dino;
}

// create dinosaur movement by using frames[]
function displayDinosaur() {
    push();
    scale(0.5);
    //makeDinosaur();
    framesIndex = frameCount % 4; // frameIndex keeps track with the framecount
    image(frames[framesIndex], t, y + 100);
    pop();
}

// give dinosaur speed
function moveDinosaur() {
    this.x += this.speed;
}

function AddNewDinosaur() { 
// With a very tiny probability, add new dinosaur to the end
    var newDinoLikelihood = 0.7; 
    if (random(0,1) < newDinoLikelihood) {
        dino.push(makeDinosaur(width));
    }
}

function UpdateAndDisplayDinosaur() {
    for (var i = 0; i < dino.length; i++) {
        dino[i].move();
        dino[i].display();
    }
}

// call function
function draw() {
    background(236, 163, 130, 200);
    makeTerrain();
    makeSky();
    makeStar();
    makeStar();
    UpdateAndDisplayDinosaur();
        AddNewDinosaur();
        displayDinosaur();
}




For this project, I had a concept of creating animation-like short clip of running away, and therefore I captured a GIF from found source and broken into five different images, and then created the foreground and background using the noise() function, and the different dimensions have a changing gradient and opacity based off of the frameCount. Unfortunately the results were not as good as I expected, and I struggled a bit to figure out the objects’ properties and creating the constant movement. Below is a sketch that I have, and I hope to make some other alterations more as I delve more into the concepts.

hyt-Looking-Outwards-10: Chris Sugrue

Chris Sugrue is an audiovisual artist, experimental designer, programmer and educator. Coincidentally, the eye-tracking assignment that we did last week was in fact developed by her as well — an augmented smart device that allows drawing and writing through eye movements.

One of my favorite artworks of hers is Delicate Boundaries (2007), an interactive installation that dissolves the boundary between digital flat screens and physical space, specifically using human body as a “medium” to explore our relationship between these spaces. She created projections of tiny bugs that are able to climb from the screens onto your arms and hands. In a way, the illusory projection confuses our sense of virtuality and reality.

From a technical perspective, the project was written in openFrameworks on C++ platform, as well as incorporating the use of digital projector, video camera, and infrared lightings in order to detect human movements. I think these interactive installations are very intriguing and informative and I hope to reference these artworks into my own practice.

Press converage of the artist and project: https://news.gestalten.com/news/delicate-boundaries

More on Chris Sugrue’s website: http://csugrue.com/

hyt-Project-09: Pixel Portrait

hyt-09-project

// helen tsui
// 15-104 section d
// hyt@andrew.cmu.edu
// project-09-Pixel-Portraits

var portrait;

function preload() {
    var portraitURL = "https://i.imgur.com/kQn5qoD.jpg";
    portrait = loadImage(portraitURL);
}


function setup() {
    // retrieve and load pixels + other properties
    createCanvas(450, 450);
    background(193, 226, 177);
    portrait.loadPixels();
    frameRate(100);
}


function draw() {
    // initialize dots' location
    var px = random(0, width); 
    var py = random(0, height);

    // retrieve color at specific pixels
    var ix = constrain(floor(px), 0, width-1);
    var iy = constrain(floor(py), 0, height-1);
    var theColorAtLocationXY = portrait.get(ix, iy);

    var brightnessVal = brightness(theColorAtLocationXY);
    fill(theColorAtLocationXY);
    var circleSize;

    // set brightness value if statement for drawing lines or circles
    if (brightnessVal > 40) {    
        strokeWeight(3);
        stroke(theColorAtLocationXY);
        //var circleSize = random(5, 10);
        line(px - random(0, 10), py - random(-10, 10), px, py);
    } if (brightnessVal <= 40) {
        fill(theColorAtLocationXY);
        noStroke();
        circleSize = random(5, 15);
        ellipse(px, py, circleSize, circleSize);
    }
}

For this project, I primarily focused on the relationship between color values and the shape used. When I was looking at the photo, I wanted to pixelate and highlight my face in a more detailed manner, so I decided to illustrate that part with lines; the hair and background part, according to my color meter, were mostly under 40 (brightness) and therefore I set it so that it creates more blurry circles. I think this project was helpful in terms of understanding retrieving the pixels, brightness, as well as pixel location properties better.

The Original Portrait
Progress and finished screenshot
Other Strange Variations (not this project)

hyt-Looking-Outward-09: Peer Evaluation

 

ikrsek-Looking Outwards-05

Zolloc GIFs - Find & Share on GIPHY

When I saw Hayden Zezula’s project, I was completely mesmerized and at the mean time touched by its visceral use of repetitive elements — human body parts, graphic 3D waves, etc. Similar to what the original post said, I think it’s particularly relevant to some of the physics features we are currently learning in class — law of attraction, gravity, etc., and I think it would be interesting to do some research on the technical motions. Also, its choice of colors and dimensionality is also something to learn more about.

Another topic that I related to this artist is the boundary between commercial and conceptual artworks. After seeing his collaboration with lots of big-name commercial brands, as well as exposing himself on Instagram and GIF pop-culture websites, it may be hard for many to categorize him as a traditional artist, but I think his creativity is unparalleled to others, and that he is a concrete evidence of further interdisciplinary blend between technology and art.

You can view more of his works here: https://www.instagram.com/zolloc/

 

hyt-Looking-Outward-08: Morehshin Allahyari

Artworks

Eyeo 2017 talk: https://vimeo.com/search?q=eyeo+morehshin

Morehshin Allahyari is an artist, thinker and activist originally born in Iran and later immigrated to the US. I was particularly drawn to her work  because of her selected focuses on social and political activism using experimental artforms — animation, 3d printing, web art, etc. Two of the projects that interested me in the lecture was the manifesto of Additivism and Material Speculation on ISIS. Specifically, for the latter one, she created 3D printed objects of old artifacts with a memory drive inside the artifact, supposedly preserving it for future generations for reference. I like the combination that the artist works between physicality and digital preservedness.

More work of hers can be viewed here: http://www.morehshin.com/material-speculation-isis/

(Sorry it seems like the Vimeo links were very hard to embed into this post, so I pasted the address link below.)