Category: Uncategorized

Financial Seismograph

Based on your control and data ripped from live stock trades the financial seismograph is meant to disorient and remind the user of the fragile nature of their financial system by allowing them to control the chaotic state of their world’s digital representation.

(The live data doesn’t work yet, but it will soon…)

Stock stockValue;

int prevSign = 0;

int centerScreenX;
int centerScreenY;

void setup() {
  size(1200,500);
  background(100);
  stockValue = new Stock();
  centerScreenX = displayWidth/2 - (width/2);
  centerScreenY = displayHeight/2 - (height/2);
  ellipseMode(CENTER);
  
}


void draw() {
  background(100);
  drawBackground();
  drawTicker();
  if (frameCount % 1 == 0) {
    makeStock();
  }
  makeLines();
  updateStock();
  frame.setLocation(centerScreenX,centerScreenY + stockValue.change);
  drawSeismo();
  //drawStock(); 
}

void drawBackground() {
    for (int x = 0; x < width; x += width/10) {
        stroke(127);
        line(x,0, x,height);
    }
    for (int y = 0; y < height; y += height/10) {
        line(0, y, width, y);
    }
}   

void mousePressed() {
  stockValue.y = height/2;
}

void drawSeismo() {
  line(width,height/2, stockValue.x,stockValue.y);
  fill(0);
  ellipse(width,height/2,height/20,height/20);
}

void drawTicker() {
  strokeWeight(2);
  stroke(color(map(stockValue.average, height/2, height, 0, 155)+100, 0,0));
  line(0,stockValue.average, int(width), stockValue.average);
}

void makeLines() { 
  for (int i = 0; i &lt; circleList.size(); i++) {
    if (i &gt; 0) { 
      Circle left = circleList.get(i-1);
      Circle right = circleList.get(i);
      Line currLine = new Line(left.x,left.y,right.x, right.y,right.fillColor);
      currLine.drawMe();
    }
  }
}

  
void makeStock() {
  circleList.add(new Circle(stockValue.x,stockValue.y));
}

void updateStock() {
  int total = 0;
  for (Circle circ: circleList) {
    circ.move(circ.velX, circ.velY);
    circ.formatPos();
    total += circ.y;
    circ.update();
  }
  
  for (int i =0; i &lt; circleList.size(); i++) {
    if (!(circleList.get(i).alive)) {
      circleList.remove(i);
    }
  }
  stockValue.update();
  stockValue.average = total /(circleList.size()+1);
}

void drawStock() {
  for (Circle circ: circleList) {
    circ.drawMe();
  }
}


class Stock {
  int change;
  int x;
  int y;
  float average;
  int prevSign;
  int prevVal;
  int valChange;
 
  Stock() {
    this.x = int(width * .9);
    this.y = int(height * .5);
    this.change = 0;
    this.valChange = this.y;
    this.prevSign = 1;
    this.prevVal = this.y;
  }
 
  void update() {
    this.change = this.checkChange();
    this.y += change;  
  }
  
  int checkChange() {
    float changeConstant = .2; //Value between 1 and 0, higher numbers = rapid changes
    float upperBound = height * changeConstant ;
    int ratio = int(map(mouseX, 0,width,0,upperBound));
    
    int sign;
    int check;

    float a1 = height * .1;
    float a2 = height * .2;
    float b2 = height * .8;
    float b1 = height * .9;
    
    if (stockValue.y &lt; 0) {
      check = 0;
    } else if (stockValue.y &lt; a1) {
      check = 1;
    } else if (stockValue.y &lt; a2) {
      check = 3;
    } else if (stockValue.y &gt; height) {
      check = 10;
    } else if (stockValue.y &gt; b2) { 
      check = 9;
    } else if (stockValue.y &gt; b1) {
      check = 7;
    } else {
      check = 5;
    }
    
    float randomNum = random(0,10);
    if (randomNum &lt; check) {
      sign = -1;
    } else {
      sign = 1;
    }
    
    if (sign != this.prevSign) {
      this.valChange = this.prevVal + int(map(this.y,0,height,height/2,0)) - height/2;
    }
      
    float smallestChange = random(ratio/5.0);
    int largestChange = ratio;
    
    return sign * (int(random(smallestChange,largestChange)));
  }
}

class Shape {
  int x;
  int y;
  int regX;
  int regY;
  color fillColor = color(0);
  int sWeight = 1;
  boolean alive = true;
  int diameter;
  int velX;
  int velY;
  
  Shape(int x, int y) {
    this.regX = x;
    this.regY = y;
    this.formatPos();
  }
  
  void move(int xVel,int yVel) {
    this.regX += xVel;
    this.regY += yVel;
  }
  
  void check() {
    if ((this.x + this.diameter) &lt; 0) {
      this.alive = false;
    }
  }
      
  void update() {
    this.check();
  }
  
  void formatPos() {
    this.y = this.regY + stockValue.change;
    this.x = this.regX;
  }
}
  
class Circle extends Shape {
  int size;
  int velY;
  int velX;
  int diameter;
  
  Circle(int x, int y) {
    super(x,y);
    this.size = 5;
    this.velY = 0;
    this.velX = -1;
    this.diameter = this.size;
    this.fillColor = this.chooseColor();
  }
  
  void drawMe() {
    fill(this.fillColor);
    noStroke();  
    ellipse(this.x, this.y, this.size, this.size);
  }
  
  color chooseColor() {
    return color(map(this.y, height/2, height, 0, 155)+100, 0,0);
  }
}

class Line extends Shape {
  int x1;
  int y1;
  int x2;
  int y2;
  color strokeColor;
  
  Line(int x1, int y1, int x2, int y2, color strokeColor) {
    super(x1,y1);
    this.x1 = x1;
    this.y1 = y1;
    this.x2 = x2;
    this.y2 = y2;
    this.strokeColor = strokeColor;
  }
  
  void drawMe() {
    stroke(this.strokeColor);
    line(this.x1, this.y1, this.x2, this.y2);
  }
}

Blink ===> Indoor Sunrise/Sunset Lighting

image

This design creates an indoor lighting system that changes color depending on outdoor sky color during sunsets and sunrises. For demonstration purposes we have a small cloud system with a Blink LED light inside that changes color when it recieves the correct IFTTT signal.

Here are our recipes:

Screen Shot 2014-09-10 at 5.40.25 PMOnce the trigger is… triggered, either the SUNSET or SUNRISE pattern is triggered for the lighting system, as seen here:

Screen Shot 2014-09-10 at 5.39.23 PM

Screen Shot 2014-09-10 at 5.39.43 PM

Screen Shot 2014-09-10 at 5.39.54 PMScreen Shot 2014-09-10 at 5.40.13 PM

Demo modes are available, cycling through sunset/sunrise colors at 2seconds per color, but the live version takes approx. 3 minutes to complete (average sunset/sunrise time is 2-3min).

Project by Hizal Celik and Matthew Kellogg

 

Blink Project

For this project I collaborated with Bo Ri Lee. Our concept was travel and communication. We had this idea, two really, of creating a air plane, since we’re both from foreign countries, that blinks every time there is a change in weather conditions in our respective countries. We used my IFTTT account and created an IFTTT recipe that was supposed to send a message to the blink usb (which we placed in an airplane as you’ll see down below), every time it was raining in Korea.

0blink2

Well….that didn’t turn out as we’d planned. Though supposedly, the recipe did work, there seemed to be no weather changes over the span of time in which we conducted our project so instead we went with an earlier idea which essentially made the blink light up everytime I tweeted something. That worked, and we had better control of the timing of the blink-despite the lags which occurred in between tweets. With that, we kept that system and kept our original plane and documented it as seen below.

0blink

EMS II Blinks project from Elizabeth Agyemang on Vimeo.

Looking outwards: Generative Art

Piece I Admired

On the surface, the finished piece for Robert Hodgin’s project, “Stippling”, may appear to be image simply utilizing Photoshop filters. At first, that’s what I assumed however, after reading Hodgin’s in depth explanation about the program and watching the video created through it, I found that this piece was a lot more complicated than I had first perceived. Basically, Hodgin’s piece functions on an array that checks pixels in images and deciphers what shade of grey is needed to represent it. The algorithm is constantly deciphering the shades of different grays necessary, growing bigger, or smaller, depending on the shade, and pushing back against other dots in a way akin to a magnetic field.

4193175521_d10bd51106_b

The whole process is stunning to watch (you can see it down below). But what’s more, the finished piece even seems to have a remnant of movement in it from the way the circles and the black and white seem to be constantly expanding and shrinking.

Laocoön and His Sons from flight404 on Vimeo.

I found this project by looking at a project made by SamS who was describing his own piece on a student page  at Writtle School of Design.   Sam’s piece was actually inspired by this one and though I prefer Hodgin’s piece (it appears both more visually appealing and complicated) I defiantly could see how SamS’ piece was inspired by this one. The great thing I’ve learned about generative art is that, once the whole system is established, the amount of pieces you are able to create from it is almost infinite. Even simple experimentation can result in stunning pieces. With this in mind, I think it’d be interesting if Hodgin randomized the images rendered through the program, or merged them in a similar fashion to what SamS looked to do in his piece. Simply seeing the results of such effort would be interesting in themselves.

http://roberthodgin.com/stippling/

One project that surprised me
3_905

2_905

I found a series of generative drawings created by Leonardo Solaas, again, haha, it seems I’m really liking his works. What I really like about this project is just how organic the works appear. They look like landscape drawings, created through a series of lines. Yet they’re not just a series of lines and circles rendered over and over again through a loop. One of his pieces that I really liked was called void. The piece is an application/video piece that is interactive. It allows the viewer to influence the behavior of the particles through button keys and mouse pressed, or to simply watch the chaos of the lines take shape and form on their own. What’s interesting is that Solaas uses processing and Dreamlines, a project I had mentioned before (check it out here), to create these vivid scenes.

http://solaas.com.ar/node/13

One project that disappointed you

Melanie Hoff’s piece surprised me because it uses electricity as a means of creating generative art. In Melanie’s piece she sends electrical currents into wood, speeding and slowing it down which sends thousands of fractal like patterns through the wood.   The pieces she creates through this process all a similar tone and feel, but there is a certain randomness in the burns and the curves of the currents that essentially makes the pieces so interesting to view.

1

As a whole, I’m not really sure what one could add to the piece. I feel like this is one of those pieces where because the process plays the most important role in the outcome of the piece, and because of the fact that—aside for changing the voltage range on the piece—the resulting patterns are random, it simply has to be done over and over again in an effort to see what new results you can get. For that reason I think that the project could be a little disappointing since it can only just be so random.

melaniehoff.squarespace.com/#/15000volts/