Aaron Lee – Looking Outwards – 06

by courtesy of Spotify

These articles talk about how the shuffle mode in the music streaming app such as Spotify seems to be random when it is not actually so random. Despite the fact that people use shuffle mode to discover new music, they often realize same musicians appearing over and over and abruptly conclude that there is a certain pattern in algorithm. Soon, many complaints were made by Spotify users and various conspiracies arose that the company was advocating certain musicians only. However interestingly, the playlist the Spotify provided were actually random. It was just that the people didn’t find it random enough. The article focuses that there is a clear difference between the true randomness vs randomness that people conceive. This may be similar to other media that deals with randomness. For example, although Jackson Pollock’s painting may seem random at first glance, there still are many biases and certainties actively decided by the vision of the painter. Therefore, the same logic applies to the music streaming apps. The developers carefully articulate the randomness of shuffle mode so that the people can feel the right randomness.

https://www.independent.co.uk/life-style/gadgets-and-tech/news/why-random-shuffle-feels-far-from-random-10066621.html

https://www.quora.com/Is-Spotifys-shuffle-feature-truly-random-I-keep-hearing-the-same-songs-in-my-library-too-often-for-it-to-be-a-mere-coincidence-Does-Spotify-use-some-kind-of-special-algorithm-to-determine-what-song-plays-If-so-why/answer/Mattias-Petter-Johansson

Katrina Hu – Project-06 – Abstract Clock

sketch_project06

/*Katrina Hu
15104-C
kfh@andrew.cmu.edu
Project-06-Abstract Clock*/

var h;
var s;
var m;
var posHour;
var posSecond;
var posMinute;
var starting = 0;
var hoursCount = [0.0417];
var secCount = [0.01667];
var minCount = [0.01667];

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

function draw() {
    h = hour();
    s = second();
    m = minute();

    background(0);
    noStroke();
//lime (hour)
    push();
    translate(-30, -27);
    fill(57, 120, 40);
    ellipse(150, 150, 245, 245);
    fill(220, 237, 190);
    ellipse(150, 150, 225, 225);
    fill(172, 219, 125);
    ellipse(150, 150, 207, 207);
    stroke(220, 237, 190);
    strokeWeight(8);
    line(120, 50, 180, 250);
    line(65, 84, 230, 215);
    line(45, 150, 255, 150);
    line(65, 216, 235, 95);
    line(185, 50, 120, 250);
    fill(220, 237, 190)
    ellipse(150, 150, 60, 60);
    pop();
//orange (seconds)
    push();
    translate(-100, -80);
    noStroke();
    fill(255, 140, 0);
    ellipse(250, 450, 245, 245);
    fill(255, 244, 209);
    ellipse(250, 450, 225, 225);
    fill(255, 201, 54);
    ellipse(250, 450, 207, 207);
    stroke(255, 244, 209);
    strokeWeight(8);
    line(220, 350, 280, 550);
    line(165, 384, 330, 515);
    line(145, 450, 355, 450);
    line(165, 516, 335, 395);
    line(285, 350, 220, 550);
    noStroke();
    fill(255, 244, 209);
    ellipse(250, 450, 60, 60);
    pop();
//watermelon (minutes);
    push();
    translate(-95, -35);
    fill(26, 156, 14);
    ellipse(450, 250, 245, 245);
    fill(255);
    ellipse(450, 250, 225, 225);
    fill(255, 146, 140);
    ellipse(450, 250, 210, 210);
    fill(0);
    ellipse(445, 260, 10, 15);
    ellipse(500, 200, 10, 15);
    ellipse(420, 180, 10, 15);
    ellipse(480, 245, 10, 15);
    ellipse(460, 310, 10, 15);
    ellipse(510, 280, 10, 15);
    ellipse(390, 250, 10, 15);
    ellipse(410, 300, 10, 15);
    ellipse(435, 220, 10, 15);
    pop();


//hour clock
    push();
    translate(-30, -27);
    for(posHour = 0; posHour <= h; posHour++) {
        noStroke();
        fill(0);
        arc(150, 150, 250, 250, starting, starting + 2 * PI * hoursCount);
        starting += (2 * PI * hoursCount);
    }
    if (posHour = h){
            starting = 0;
    }
    pop();

//seconds clock
    push();
    translate(-100, -80);
    for(posSecond = 0; posSecond <= s; posSecond++) {
        noStroke();
        fill(0);
        arc(250, 450, 250, 250, starting, starting + 2 * PI * secCount);
        starting += (2 * PI * secCount);
    }
    if (posSecond = s){
            starting =  0;
    }
    pop();

//minutes clock
    push();
    translate(-95, -35);
    for(posMinute = 0; posMinute <= m; posMinute++) {
        fill(0);
        arc(450, 250, 250, 250, starting, starting + 2 * PI * minCount);
        starting += (2 * PI * minCount);
    }
    if (posMinute = m){
            starting = 0;
    }
    pop();
    






}

The lime represents the hour, and a slice is eaten every hour. The watermelon represents the minute, and a slice is taken every minute. Similarly, the orange represents the seconds and a slice is taken every second. The fruit resets every minute/hour/day.

This was a very fun project to do, both in drawing the actual fruits and figuring out how to take a slice from each every second/minute/hour. It was interesting to learn about the time functions and how to creatively implement them into the project. Finally, I was really happy with the way it turned out.

original sketch of the clock

Jai Sawkar – Looking Outwards – 06

wave fields IV (2016)

This week, I found the work of Holger Lippmann. Lippmann uses a rework of an ongoing script to slowly morph lines and curves into landscape paintings.

Most of the technical aspects are pretty simple, adding a mix of ellipses, noise, and color arrays. He also notes that these numbers are randomly generated, and he creates these drawings by sorting the values and allowing the randomness to blossom.

I always find computational designs so interesting, as changing just one aspect of the control can play a discernible role in changing the project completely.

Link

Katrina Hu – Looking Outwards – 06

Mark Wilson’s e4708

A photo of Mark Wilson’s work

The following work is titled ‘e4708‘ by Mark Wilson. Throughout the 80s, it was challenging to create artwork involving a machine. Wilson started to learn programming in 1980, after he bought himself a microcomputer. He then began using this computer to create artwork. His work generally consists of repetition in order to create complex layers that result in very intricate art pieces. Some of the aspects of his art are specifically chosen by him, while some other aspects are left to chance and chosen randomly by the computer.

Wilson’s work has also been exhibited all across the world. His distinct technological style and geometric imagery have made him famous in computer art. I admire the color and style that Wilson uses in his work. It makes the piece very complex and interesting to look at. He also includes many geometric pieces in his work, giving it a very distinct look.

Jai Sawkar Project 06 – Abstract Clock

Sketch

//Jai Sawkar
//Section C
//jsawkar@andrew.cmu.edu
//Project 06: Abstract Clock

var prevSec;
var millisRolloverTime;

function setup() {
    createCanvas(300, 480);
    millisRolloverTime = 0;
}

function draw() {
    background('BLACK'); 
    
    // Current time
    var H = hour();
    var M = minute();
    var S = second();
    var D = day();
    var M = month();

    var SecondColor = 100
    var Flicker = 255

    // Current millisecond if the second has rolled over
    if (prevSec != S) {
          millisRolloverTime = millis();
      }

    prevSec = S;

    var mils = floor(millis() - millisRolloverTime);

    var hourBarYPosition   = map(H, 0, 23, 0, height); //mapped to fit y postion of hours
    var minuteBarYPosition = map(M, 0, 59, 0, width); //mapped to fit y postion of minutes
    var secondBarWidth = map(S, 0, 59, 30, width); //mapped to fit width postion of seconds
  
    var secondsWithFraction   = S + (mils / 1000.0); //creates fraction to interpolate smooth transition
    var secondBarWidthSmooth  = map(secondsWithFraction, 0, 60, 6.5, width/2 - 6.5); //mapping seconds to allow them to fit within desired bounds
    var dayXPosition = map(D, 0, 31, 7, width - 7) //mapped to fit x postion of days
    var monthXPosition = map(M, 0, 12, 7, width - 7) //mapped to fit x postion of month
  
    fill(126, 168, 130, 200)
        rect(dayXPosition, 7, 5, 15); //represents day
        rect(monthXPosition, 7, 5, height - 14) //represents month

    rectMode(CENTER)
      noStroke();
    fill('#a87f7e'); 
        rect(width/2, hourBarYPosition,width - 13, 20); //represents hour



  
  rectMode(CORNER)
  if (S > 58) { // once the two second bars come together, it turns white to signal one minute
        SecondColor = 255
      }

  push() //reverses the canvas for the second rectangle to mirror it on canvas
    rotate(PI)
    fill(SecondColor) 
        rect(-width + 6.5, -minuteBarYPosition, secondBarWidthSmooth, -10); //represents seconds on right
  pop()
    fill(SecondColor)
        rect(6.5, minuteBarYPosition, secondBarWidthSmooth, 10) //represents seconds on left

    if (S % 2 != 0){ //if it is not odd numbered second, it will turn off
        Flicker = 0
      } 
      
    fill(Flicker) 
        rect(2, height - 7, width - 4, 5) //represents second flashes
        rect(width-7, 2, 5, height - 4)
}

I was trying to decide what to make my abstract clock about, and I read into Rietveld Shroder; his designs included a lot of different proportioned rectangles. I decided to use this as inspiration. For this project, I wanted to use rectangles to create a succession of movements, creating a dynamic, truly abstract clock

Sketch of Idea

lee chu – looking outwards 06


one of many real-time generations

Matt Deslauriers, a creative director, designed a real-time rendered randomly generative art piece. He uses Node.js to quickly render output the program’s results. Simplex noise is utilized to drive the particles, with each particle affected directly by the noise to curl a lot or move straight. Photographs were also used as distortion maps to further refine the end result. According to Deslauriers, photographs of snails, flowers, architecture, and geometry seemed to work the best. For instance, this photo of a rose window at Notre-Dame (rip). Check out more real-time renderings here

Jasmine Lee – Looking Outwards – 06

Siebren Versteeg is a digital artist who uses algorithmic code to generate his pieces. He observes existing abstract paintings and then writes code based on his perceived understandings of those paintings. His works are a result of layers and layers of algorithmic generated strokes, which are then captured at a random point in time. Since Versteeg’s works are so complex and layer-based, the varying times at which they are captured can drastically change the end result.

Truisms, 2018. Images based on Jenny Holzer’s text were googled and compiled in real-time before being refreshed every 3 minutes and disappearing forever.

Before painting, Versteeg chooses the different variables he uses to create his art. These variables range from the color of the paint, the type of binder used, the way the paint sticks, and the way the paint drips, as well as more. Versteeg’s artistic sensibility is definitely visible in the way he chooses to compile his pieces, with a combination of dream-like strokes and more image-based cutouts. His pieces range dramatically, from abstract fractals to more collage inspired pieces.

Imploder, 2013. A slightly older piece of Versteeg’s.

lrchu – project 06 – abstract clock

lrchu

// lee chu
// section c
// lrchu@andrew.cmu.edu
// project - 06

var h;
var m;
var s;
var rad = 50;
var start = 58;

var mer;
var ce;
var des;

function setup() {
    createCanvas(480, 300);
    mer = 12;
    ce = 30;
    des = 30;
}

function draw() {
    background(252, 245, 225);
    h = hour();
    m = minute();
    s = second();

    // spinning animation
    mer += 1/60 ; ce += 1/12 ; des += 1/12;

    // digits
    firstDigit(start, 90);
    secondDigit(start + 2 * rad, 90);
    thirdDigit(start + 4.25 * rad, 90);
    fourthDigit(start + 6.25 * rad, 90);

    // second counting dots
    fill(150);
    strokeWeight(0);
    if (s % 2 == 0) {
        ellipse(start + 3.625 * rad, 90 + rad / 2, 10, 10);
        ellipse(start + 3.625 * rad, 90 + 3 * rad / 2, 10, 10);
    }
}

// conditinals for each digit
function firstDigit(x, y) {
    if (h < 10) {
        zero(x, y);
    }
    else if (h > 9 & h < 20) {
        one(x, y);
    }
    else if (h > 19) {
        two(x, y);
    }

}

function secondDigit(x, y) {
    if (h % 10 == 0) {
        zero(x, y);
    }
    else if (h % 10 == 1) {
        one(x, y);
    }
    else if (h % 10 == 2) {
        two(x, y);
    }
    else if (h % 10 == 3) {
        three(x, y);
    }
    else if (h % 10 == 4) {
        four(x, y);
    }
    else if (h % 10 == 5) {
        five(x, y);
    }
    else if (h % 10 == 6) {
        six(x, y);
    }
    else if (h % 10 == 7) {
        seven(x, y);
    }
    else if (h % 10 == 8) {
        eight(x, y);
    }
    else if (h % 10 == 9) {
        nine(x, y);
    }
}

function thirdDigit(x, y) {
    if (m < 10) {
        zero(x, y);
    }
    else if (m > 9 & m < 20) {
        one(x, y);
    }
    else if (m > 19 & m < 30) {
        two(x, y);
    }
    else if (m > 29 & m < 40) {
        three(x, y);
    }
    else if (m > 39 & m < 50) {
        four(x, y);
    }
    else if (m > 49 & m < 60) {
        five(x, y);
    }
}

function fourthDigit(x, y) {
    if (m % 10 == 0) {
        zero(x, y);
    }
    else if (m % 10 == 1) {
        one(x, y);
    }
    else if (m % 10 == 2) {
        two(x, y);
    }
    else if (m % 10 == 3) {
        three(x, y);
    }
    else if (m % 10 == 4) {
        four(x, y);
    }
    else if (m % 10 == 5) {
        five(x, y);
    }
    else if (m % 10 == 6) {
        six(x, y);
    }
    else if (m % 10 == 7) {
        seven(x, y);
    }
    else if (m % 10 == 8) {
        eight(x, y);
    }
    else if (m % 10 == 9) {
        nine(x, y);
    }
}

// pre-assigned positions for each number variation
function zero(x, y) {
    clock(x, y, 3, 30, 15);
    clock(x, y + rad, 12, 30, 0);
    clock(x, y + 2 * rad, 12, 15, 0);
    clock(x + rad, y, 9, 30, 45);
    clock(x + rad, y + rad, 12, 30, 0);
    clock(x + rad, y + 2 * rad, 12, 45, 0);
}

function one(x, y) {
    // mer ce des
    clock(x, y, mer, ce, des);
    clock(x, y + rad, mer, ce, des);
    clock(x, y + 2 * rad, mer, ce, des);

    clock(x + rad, y, 6, 30, 30);
    clock(x + rad, y + rad, 12, 30, 30);
    clock(x + rad, y + 2 * rad, 12, 0, 0);
}

function two(x, y) {
    clock(x, y, 3, 15, 15);
    clock(x + rad, y, 9, 30, 45);
    clock(x + rad, y + rad, 12, 45, 0);
    clock(x, y + rad, 3, 30, 15);
    clock(x, y + 2 * rad, 12, 15, 0);
    clock(x + rad, y + 2 * rad, 9, 45, 45);
}

function three(x, y) {
    clock(x, y, 3, 15, 15);
    clock(x + rad, y, 9, 30, 45);
    clock(x + rad, y + rad, 12, 30, 45);
    clock(x, y + rad, 3, 15, 15);
    clock(x, y + 2 * rad, 3, 15, 15);
    clock(x + rad, y + 2 * rad, 12, 45, 0);
}

function four(x, y) {
    clock(x, y, 6, 30, 30);
    clock(x, y + rad, 12, 15, 15);
    clock(x + rad, y, 6, 30, 30);
    clock(x + rad, y + rad, 12, 30, 45);
    clock(x + rad, y + 2 * rad, 12, 0, 0);
    clock(x, y + 2 * rad, mer, ce, des);
}

function five(x, y) {
    clock(x, y, 3, 30, 15);
    clock(x + rad, y, 9, 45, 45);
    clock(x, y + rad, 12, 15, 15);
    clock(x + rad, y + rad, 9, 30, 45);
    clock(x, y + 2 * rad, 3, 15, 15);
    clock(x + rad, y + 2 * rad, 12, 45, 0);
}

function six(x, y) {
    clock(x, y, 3, 30, 15);
    clock(x + rad, y, 9, 45, 45);
    clock(x, y + rad, 12, 30, 15);
    clock(x, y + 2 * rad, 12, 15, 0);
    clock(x + rad, y + rad, 9, 30, 45);
    clock(x + rad, y + 2 * rad, 12, 45, 0);
}

function seven(x, y) {
    clock(x, y, 3, 15, 15);
    clock(x + rad, y, 9, 30, 45);
    clock(x + rad, y + rad, 12, 30, 0);
    clock(x + rad, y + 2 * rad, 12, 0, 0);
    clock(x, y + rad, mer, ce, des);
    clock(x, y + 2 * rad, mer, ce, des);
}

function eight(x, y) {
    clock(x, y, 3, 30, 15);
    clock(x + rad, y, 9, 30, 45);
    clock(x + rad, y + rad, 12, 30, 45);
    clock(x, y + rad, 12, 30, 15);
    clock(x, y + 2 * rad, 12, 15, 0);
    clock(x + rad, y + 2 * rad, 12, 45, 0);
}

function nine(x, y) {
    clock(x, y, 3, 30, 15);
    clock(x + rad, y, 9, 30, 45);
    clock(x, y + rad, 12, 15, 0);
    clock(x + rad, y + rad, 12, 30, 45);
    clock(x + rad, y + 2 * rad, 12, 0, 0);
    clock(x, y + 2 * rad, mer, ce, des);
}

// basic clock unit

function clock(x, y, h, m, s) {
    push();
    translate(x, y);
    strokeWeight(0);
    fill(150);
    circle(5, 5, rad - 2);
    strokeWeight(0.75);
    fill('white');
    circle(0, 0, rad - 2);

    // hour hand
    push();
    strokeWeight(2);
    rotate(h / 12 * 2 * PI);
    line(0, 0, 0, -rad / 2 + 6);
    pop();

    // minute hand
    push();
    strokeWeight(2);
    rotate(m / 60 * 2 * PI);
    line(0, 0, 0, -rad / 2 + 4);
    lastM = m;
    pop();

    // second hand
    push();
    strokeWeight(1.5);
    rotate(s / 60 * 2 * PI);
    line(0, 0, 0, -rad / 2 + 3);
    lastS = s;
    pop();
    pop();
}

I had seen a clock made of multiple clocks somewhere on the internet before, and I wanted to replicate that effect. However, a main issue I had a difficult time grasping was having each clock rotate its hands to the next assigned position, which would probably require arrays of the old positions and new positions.

Sarah Kang- Looking Outwards – 06

“Medusa”, by Fabio Morreale, PHD

Fabio Morreale’s research focuses on how understanding the influence of computer technologies in shaping the way people compose, learn, listen to, and perform music. “Medusa” is one of his few visual works that “explore the redistribution of control between human and computer agents in the creation of visual artworks” (Morreale). What first drew me to this artwork was the fluidity and organic nature of the composition. This project was coded on Processing. Morreale uses the initial position of a virtual pen on his virtual canvas as his driver, and traces lines that produce numbers of autonomous agents that independently begin to roam the canvas, while leaving a trail. The only human control in this artwork is the original location of the agents, not the control over their evolution. Through this artwork, Morreale explores the cause and effect evolution paths between the relationship of humans with computer technologies, and the ratio of control between the two spectrums.

Another piece from “Medusa”, by Fabio Morreale, PHD

https://fabio.kiwi/medusa

Joanne Chui – Looking Outwards – 06

generative art by Manolo Gamboa Naon

What is extremely interesting about Manolo’s art is that he basically mimics certain design logic of existing paintings, but with a twist. He reduces the paintings into their simplest geometries, and with that pieces back the painting through code and algorithms to produce a fresh and more modern version of the precedents. Manolo manages to keep the spirit and core of each art piece but putting a more computation spin onto them. It is really interesting to see how minute changes in variables can produce such beautiful and unique artworks, and in a way makes the art more accessible to viewers by having a more recognizable methodology of computation.