kander – last project

 

 

 

 

 

 

My original idea was to use a Raspberry Pi to run a Processing sketch that printed generative horoscopes to the AdaFruit Mini Thermal Printer. However, after being unable to connect the rpi to the internet, I tried simply making an Arduino sketch that would print something more simplistic, and I could just stick the printer in a little box and have a cute little object that spits out something random (I was going to go with morbid variations on lyrics from popular Christmas carols)

This is what comes with the printer. The kit I got also had a power supply and adapter. It was very easy to set up with Processing (red and black cable is power, green, yellow, and black is dataOut, dataIn, and ground). All I had to do was install the thermal printer library and connect everything according to the instructions at https://learn.adafruit.com/mini-thermal-receipt-printer/microcontroller

 

so cute! so fragile!

 

 

 

 

 

 

 

 

However, through human error, the printer got plugged into a 12V power supply instead of the 5V one it required, and got fried. Since there’s no undo command for ruining your hardware, I ended up simply creating an interface in Processing that displays the horoscope when you click on the star sign. Not as cool, funny, or as well suited to the material (I really liked the low quality of receipt paper matching these dumb little horoscopes).

I used rita.js’s markov class to generate the text for the horoscopes, using the text from a lot of horoscopes that I found online. I also had my first experience of dealing with Unicode characters in Processsing, so that was nice.

Project Github

I also think that I ought to include some of the materials and processes from my attempts with the Raspberry Pi and the Arduino, since learning through failure was such an integral part of this project!

Pi: I had never used one of these before, and I was pretty amazed at its capabilities. I learned about downloading the latest image and installed it on the pi. I ran into issues when I was trying to connect to wifi, which is necessary to setting up printing. I got a lot of practice with the linux terminal though (lol)

Arduino: I had used these before, but it had been a while. Golan and I wrote a sketch called kander1 (accessible in GitHub branch) that printed random characters. It actually worked for a little bit! I also got some practice breadboarding, which was fun.

Random side note: I also made this drawing program in Processing that I kind of like. It’s good for drawing human heads. It was part of my experimentation when I was considering including a drawing that corresponds to each star sign rather than the Unicode symbol. I wanted to be able to manipulate the drawing in other programs, so I saved the points that formed the ends of the curves into a JSON file, which can be loaded and parsed in another program to do the actual drawing again (instead of loading a png, for example).

drawing program on github

 

 

kander – lookingoutwards09

For my final project, I want to make generative horoscopes, so I investigated different projects in the same vein. The one I chose to focus on was the Horoscope Bot on Twitter, which tweets out random horoscopes, which tweets out random horoscopes created from the compilation of two user tweets.

Visit the bot here

Project Github here

Selected tweets:

horoscope1 horoscope2 horoscope3

The results have a range of tones (the second selection is actually pretty deep, while the third selection is much funnier in a “wtf” sort of way). However, after scrolling through the bot’s tweets, I realized that all of them take the form “you will …., but you will …”, which seems pretty canned after a while. I would like there to be more variation in the formatting of the horoscopes. The bot also filters out tweets with swear words, which I appreciate because it adds to the horoscope-y feel of the tweets (one doesn’t see horoscopes with swear words).

kander – mocap plus!

So this was actually as assignment I did for Concept Studio, not this class, but it’s very much in the same vein as the motion capture assignment, so I thought I’d throw it up here for anyone who cares. The prompt was the imagine a scene that would tell the story of our lives 2000 years in the future (not exactly obvious from the final product).

kander – proposal

For my final project, I want to create a generative horoscopes, generating astrological symbols that resemble the shape of existing symbols (Aquarius, Libra, etc.), as well as generate names that resemble the Greek names. I’d also like to use Rita.js to generate “horoscopes” for the signs. I’m not sure what I’d want the final product to be — maybe a set of cards or a plot

kander + lumar – object

For our Networked Object, we decided to make one of Lumar’s long-desired ideas, a bubble wrap dispenser, under the assumption that everybody finds popping bubble wrap useful to relieve nervous energy. We improved upon it by installing a roll trigger, and every time a piece of bubble wrap is pulled out, the trigger is pulled, and the connected CloudBit activates the IFTTT Applet that posts to the slack channel called “#stresspopper (you should all subscribe). Now everybody can feel your pain!

img_1791
Diagram of the StressPopper. The power source is connected to a roll trigger, which it triggered every time a piece of bubble wrap is pulled out. The trigger is connected to a CloudBit, which activates the IFTTT Applet that posts to the #stresspopper Slack channel

We used a ceramic flower pot to house the bubble wrap, and we laser cut a top with a slit for the bubble wrap to come out of. We had to do several iterations of the top, as the first tops we made broke. We also had to figure out how to fold the bubble wrap so that pulling one piece brings the next piece out of the slit (like Kleenex), and used a little bit of rubber cement between each piece to aid in this process.

img_1782

Our original idea was to create a stress ball with a push button inside, and every time the ball was squeezed, it posted to the Slack channel, but the balloons we were using kept tearing, and we were worried about the Little Bits getting crushed.

img_1779 img_1778 img_1776

 

kander – lookingoutwards08

For this Looking Outwards assignment, I chose to focus on the bioLogic project from the MIT Tangible Media Group. Hiroshi Ishii discussed it in his lecture, but I didn’t understand it the first time around, and I wanted to research it because I am very interested in the idea of biological entities that play an active role in art, and especially in new media, which is often regarded as an art form that is often associated with tech more than anything else.

Essentially, bioLogic was an investigation into programming “living organisms and invent responsive and transformable interfaces of the future.” The group focused on the Bacillus subtilis natto, which expands and contracts in response to atmospheric moisture. The group utilized this property of the bacteria to make several products including little synthetic flowers, but most notably, a garment that ventilates based on the sweat coming off of the body.

Their process documentation is very helpful in understanding how their project actually works:

Finally, their project webpage contains a couple of interviews — one with a representative of New Balance, who talks about the importance of bioLogic to the atheltic industry, highlighting the success of the team in making an interesting and useful product.

 

 

 

kander – mocap

 

I spent a lot of time thinking about what I wanted to do with this project. My initial idea was to create little monsters (see sketchbook), but the level of detail I wanted was hard to do with the 3D environment in Processing. I then investigated Perlin noise, which had some interesting results (I wanted to have multiple characters, and have the noise of each affect the other), but I wasn’t super into that project either.

img_1743
the sketching for the monster
perlin
Some of my experiments with Perlin noise to generate forms
perlin2
Some of my experiments with Perlin noise to generate forms

Then, while looking at some of my preliminary code for the monsters idea, I came up with the idea of making “corn people” (perhaps this idea subconsciously stemmed from me missing the Midwest?). I then adapted the Bvh data to make a corn person class, shown below, and my final product is a pair of corn people dancing in sync to techno music (the original data comes from my dancing). An earlier version had different bvh files, and the flailing corn people remind me of awkward dances of my high school days.

sketches of my ideas
corn_primiitve
the OG ear of corn

corn295 corn425

While dancing, I had to be cognizant about the leaf-like way in which the arms should move, and I was careful not to hop about, because corn people would be unlikely to move their feet in such a way. Overall, I am quite happy with how this assignment turned out, especially considering the late start I got due to investigation of other topics. I really thought it was crucial to have the leaf-like limbs, and I’m glad I was about to accomplish that. I also think it’s pretty funny.

Github Repository

 

kander – manifesto

It seemed that most of the “critical engineer” points were concerned with considering the implications of technological developments on the world. They were mainly about acknowledging that technology doesn’t exist in a bubble, and implied things like ethics and impact shouldn’t be disregard for the sake of “progress.” I found item #6 particularly interesting:

“The Critical Engineer expands “machine” to describe interrelationships encompassing devices, bodies, agents, forces and networks.”

In other words, technology shouldn’t be exclusively defined to be an item comprised of solely physical elements/hardware. The definition of technology and machines needs to take into account the space in which the item occupies in the world — an iPhone would have very different implications if it was an item owned by only the wealthiest, or was something that everyone in the world had access to. To continue with the iPhone example, it’s uses would be much different if it couldn’t connect to the Internet.

This last example brings up the interesting idea that part of the iPhone’s invention is the Internet. If we extend this principle — that all technologies that interact with other innovations include said innovations in their own makeup — then we begin to see modern technology not as a set of individual components, but a web of connected ideas and devices that build upon each other.

 

 

kander – Visualization

For my visualization, I made a line chart that tracks the number of bike rentals each day over the course of the ~12 week 3rd quarter. You can see there are 13 spikes, which I hypothesize correspond to weekends, when bike rentals for recreational purposes would rise. The second largest spike occurs on the 4th of July.

kander viz

To do this project, I first pared down the Healthy Ride Data downloaded form the website using Excel, and then created an array of the sum of all the trips made in each day using Processing. I then returned to Excel to edit the dates (it turned out that the d3 block I was using required a different format) and create the tsv. Finally, I plugged my data into the d3 block and uploaded it on my server.

I think it was really easy to get carried away with this assignment, because it’s a lot of fun to come up with things to ask the data — I really wanted to figure out the fastest bike, and then categorize them by if they were “sprinters” or “distance runners”. I also thought it would be cool to track the cardinal directions in which the bikes move, or figure out which bike gets used most in the wee hours of the morning. But the technical challenges of this assignment made it so that we had to keep ourselves grounded. New respect for data scientists/artists.

Code on GitHub:

Processing

data file

d3

 

 

 

kander – LookingOutwards07

For this Looking Outwards assignment, I looked at the work of Ingrid Burrington (who, it should be noted, has”lifewinning.com” as her web domain name). She doesn’t focus exclusively on visualizations, but she has a really interesting map-based visualization that seeks to measure the impact of a hike in the public transit fare in New York City. There are a few issues with the visualization, and I think it could be synthesized a little further, but I enjoy the nature of the data that she chose to analyze.

Burrington’s map allows you to zoom in and out of different areas of NYC, which is broken up into it’s different census tracts. Mousing over a tract brings up on the side information about the median income (the map is also color coded based on this data), percent of public transit uses, income of those riding public transit, and population. Clicking on a station brings up a little pop up that tells you the type of pass bought at each location, the total increase in spending by full-far riders that would result from the pay hike.

Visit the project here

info_vis1

info_vis2

I think there are a lot of parts of the visualization that could be less confusing. First, it might be a good idea to break it up into several visualizations — perhaps one about ridership and types of passes and one about the pay hike — or otherwise have a way to pare down the data that is shown. Additionally, I don’t feel it was necessary to color code the subway lines (maybe if I was a New Yorker, I’d feel differently). I think it adds confusion.

I also think that this high number of types of of data muddies the message, and drowns out perhaps some more interesting facts that could be drawn from the visualization. For example, it might be far more revealing to have a visualization that shows the ratio of average cost increase per public-transport rider to median income of the area. Or perhaps a comparison between the amount that an area would pay and the percentage of the pop. that actually took public transport. It felt like a lot of simpler visualizations crammed into one, but without a larger synthesis.

Still, there are some very redeeming aspects of the visualization. Each of the individual elements is done well and clearly, and the overall aesthetic is pleasing. Public transport fare increases, and which areas would pay the most, is a very interesting data set, because it’s hard to conceptualize how much money actually stands to be made from a small fare increase on each rider. Furthermore, all of this data existing in the same text-based document or spreadsheet would be absolutely impossible to interpret, so this visualization is definitely a step-up.

Additionally, I perused other parts of the website, and I love the informal, ever-so-slightly flippant style in which she writes and speaks (the use of the word “hella” in a description of one of her projects really sealed the deal for me). Her Seven on Seven talk with Meredith Whittaker, which includes a discussion of magic, is pretty cool as well.

kander – book

“Ideally We Meeta Few Times xa Week and Have Bottle Rocket Sex” juxtaposes randomly generated cartoon phalluses with sentences from “Men Seeking Women” advertisements from the Pittsburgh Craigslist. There is much comedy to be found in both the images and the sheer absurdity of many of the captions. Each combination makes a different comment on the aims of the poster: some give off an air of patheticness, some douchebaggery, some downright skeeze — highlighting the unexpectedly complex and layered meaning of a ubiquitous form of imagery in our society: the dick drawing.

The idea to draw phalluses actually came from some rather lewd commentary from one of my neighbors about my FaceOSC project. I had been wanting to do some more generative work since seeing Xastol’s generative plotter faces, and I thought the idea of little cartoon dicks would be hilarious. Additionally, right off the bat, I knew I wanted to include some sort of interesting data set or other information with comedic value. For me, having text was a must for this project — not that I couldn’t have worked with text for other projects, but all of my favorite examples from this project in particular (Death Death Death and Crazy But True Cat Stories included) were heavily reliant on text.

I first thought that I could collect data about, oddly enough, bathroom cleaning schedules (the little timesheets that they have in bathrooms of chain restaurants or gas stations that let us know when the bathroom has last been cleaned). Then, I thought I might want to caption the drawings with text messages from my ex-boyfriend, or perhaps from tweets containing a certain hashtag (I was thinking #TGIFridays).  After I made my final decision about the text, I ended up hand-selecting the Craigslist ads (although I was algorithmic in the sense that I used the most recent ones) for several reasons:

1) Craisglist doesn’t have an easily accessible API, and I didn’t have the coding prowess to figure out how to scrape Craigslist from scratch without sacrificing other elements of the project.

2) More importantly, I wanted to minimize the trolling posts that I used in the book (a few are thrown in there) because the genuine ones are much funnier.

3) Going through the posts was a hilariously good time.

Although the posts were selected manually, they were formatted computationally with Basil.js.

I’m glad I finally decided on Pittsburgh Craigslist ads — I think this project is hard to pull off if it’s not funny, and the sentences from the ads really bolster the humor.

I spent a lot of time trying to figure out the best way to draw a dick. At first, I went with the to-be expected two ellipses and a rectangle, but I realized that this approached made boring images. Once I had some of the concrete mathematical details down, I elected to create custom PShapes for the shaft and the head, and have the length, testicle diameter vary, and have the perspective vary slightly as well. Retrospectively, I would have included more variation, hairs, and maybe even warts, and if we’re really dreaming big, I might have even done the whole thing in 3d (but, at the same time, I like the cartooney quality of my result).

Click here to see the interior of the book.

Click here to see the GitHub repository for the project.

This is the original sketch for the idea, showing the variation in dimensions and orientation that I was going for.

unnamed

This was one of my first attempt to get the alignment right with ellipses and a rectangle

prelim_program

This is a later attempt using lines. I kind of like where this one was going — I think if I had adapted it to use curves, it could have also turned out nice.

prelim_program2

A fairly run-of-the-mill representative of the final product

image-19


Here’s a video shot by the professor, flipping through the book:

Below is the code for each respective element:

Image generation:

PShape d;
PShape b;
PShape h;
float theta;
float theta2;
float x;
float y;
float xHold;
float yHold;
float offSetX;
float offSetY;
float scale;
float yScale;
float len;
float isFlipped;
float translation;
float headWidth;
float headHeight;
float girth = random(3, 7);
color d1;
color d2;
int page_num = 0;

void setup() {
  background(255);
  size(550, 550);
  frameRate(30);
}

void draw() {
  background(255);
  stroke(0, 200);
  isFlipped = random(1, 3);
  yScale = random(15, 35);
  len = random(20, 200);
  scale = random(1, 1.2);
  float col = random(1, 4);
  if (col < 2) { setColorsPinks(); } if (col >=2 && col < 3) {
    setColorsBrowns();
  } else {
    setColorsTans();
  }
  //background(100);
  translation = random(30, 50);
  translate(width/2, height/2);
  float angle = random(-PI/2, PI/2);
  rotate(angle);
  translate(-width/2, -height/2);
  if (isFlipped <= 2) {
    translate(width/2, height/2);
    scale(-1, 1);
    translate(-width/2, -height/2);
  }
  drawDick(d1);
  translate(width/2, height/2);
  scale(-scale, scale);
  translate(translation, 0);
  translate(-width/2, -height/2);

  drawDick(d2);

  translate(-translation/2, 5);
  drawHead(d2);
  for (int j = 0; j < random(2, 3); j++) {
    stroke(0);
    drawVeins();
  }
  if(page_num < 30){
    saveFrame("image-" + str(page_num) +".png");
  }
  page_num += 1;
}

void setColorsPinks() {
  d1 = color(random(240, 255), random(210, 225), random(160, 180), 220);
  d2 = color(random(240, 255), random(210, 225), random(160, 180));
  //head = color(random(240, 255), random(210, 225), random(160, 180));
}

void setColorsBrowns() {
  d1 = color(random(75, 85), random(40, 47), random(0, 30), 220);
  d2 = color(random(75, 85), random(40, 47), random(0, 30));
  //head = color(random(75, 85), random(40, 47), random(0, 30));
}

void setColorsTans() {
  d1 = color(random(195, 205), random(150, 160), random(110, 115), 220);
  d2 = color(random(195, 205), random(150, 160), random(110, 115));
  //head = color(random(195, 105), random(150, 160), random(110, 115));
}

void drawDick(color c) {
  stroke(0, 200);
  d = createShape();
  d.beginShape();
  d.strokeWeight(2.5);
  d.fill(c);
  x = width/2;
  y = height/2;

  d.vertex(x, y);
  x = x - girth;
  y = y + len;
  d.vertex(x, y);
  xHold = x + 20*cos(-PI/2) + girth/2;
  yHold = y + 17;
  for (int i = 0; i < 100; i++) {
    theta = map(i, 0, 99, -PI/2, PI);
    x = xHold + 30*cos(theta);
    y = yHold + yScale*sin(theta)*1.25;
    d.vertex(x, y);
  }
  x = x - girth;
  y = height/2;
  d.vertex(x, y);
  d.endShape();
  shape(d);
}

void drawHead(color c) {
  stroke(0, 200);
  headHeight = random(35, 50);
  h = createShape();
  h.beginShape();
  h.fill(c);
  h.strokeWeight(2);
  h.vertex(width/2, height/2);
  h.vertex(width/2 - 20, height/2);
  for (int i = 0; i < 100; i++) {
    theta = map(i, 0, 99, 52*PI/50, 98*PI/50);
    x = width/2 + 27*cos(theta);
    y = height/2 + headHeight*sin(theta);
    h.vertex(x, y);
  }
  h.vertex(width/2 + 20, height/2);
  h.vertex(width/2, height/2);
  h.endShape();

  shape(h);
  stroke(0);
  float ay = height/2 + headHeight*sin(3*PI/2);
  float divLen = random(10, 20);
  stroke(0, 100);
  line(width/2, ay, width/2, ay + divLen);
}

void drawVeins() {
  stroke(0);
  strokeWeight(2);
  float ax = random(width/2 - 5, width/2 + 10);
  float ay = random(height/2, height/2 + len);
  line(ax, ay, ax, ay + random(10, (height/2 + len - ay)));
}

Text generation:

import rita.*;
String entries[] = new String[30];
JSONObject json;

void setup() {
  //basically just initializes all the craiglist entries I'll be using

  entries[0] = "Im in search of a beautiful young woman between the age of does not matter-23 who is seeking an older man for a relationship and to treat her like a princess inside and outside of the bedroom. She should be tall have long hair long legs and a gorgeous butt and on birth control, highly recommended but not a deal breaker. She will receive alot of presents and affection . I am very serious about treating a very special young lady this way and if your interested I expect you to be very serious about accepting. SERIOUS REPLIES ONLY. Send a full clothed body pic with face along with stats. The closer you are to me the more you will be spoiled. Your pic will get mine once you prove your serious enough.";
  entries[1] = "I have a big, roomy Suv and I've got a taste kink. Any women out there feel the same way? I've got all the time in the world today and I'm looking to have some fun. Put your favorite color in the subject line so I know you're not a bot. Let's chat a little bit and see what we'd like to do on this dreary day.";
  entries[2] =
    "I think it's finally reached the point where i should throw in the towel with craigslist. I get "
    +"almost no replies from real people. I used to at least get the occasional interesting reply or two." 
    +" I'm bored. Are you tired of the same old/same old too? Let's talk and take it from there. I'm " 
    + "pretty open-minded even if that means we just talk. Please reply with a picture and a little about"
    + " yourself. Excuse the cheesy pictures, but I'm not putting my face on cl so I figured these were" 
    + " better than nothing. Note: Someone stole one of my pics and is using it to post ads. If you see an"
    + " ad with my picture talking about bi-guys, bi-girls, and hsv...know that it is NOT me. I am not bi."
    + " I do not have hsv. Nothing in the ad is true about me. That is someone using my picture without my"
    + " permission.";

  entries[3] = "Hi! Is anyone else bored tonight? It's so nice outside. Anyways... I'm new-ish to the area and have"
    + " been single for about a year. I miss cuddling and making out. Anyone up for a movie late tonight? I" 
    + " am. Who me? 33, white, attractive, 6'1, financially stable, four twenty friendly, movie lover," 
    + " crazy about kissing.You? Pic for pic! Yours gets mine." 
    + " Ps you can pick the movie.";

  entries[4] = "Swm, 6' tall, average looks, good body, tight tush, great sense of humor, will buy dinner for any" 
    + " female on one condition: you wear a skirt and hose/nylons. I bet I will be eating alone tonight.";

  entries[5] = "Oh it has a first name!!"
    + " Looking for a fwb scenario so my kabossy can fit that bun!!"
    + " Ideally we meeta few times xa week and have bottle rocket sex."
    + " I have skills that will blow you're mind."
    + " In fact if you don't get with me you're missing out on the treat of a lifetime." 
    + " My kabossy is in charge!!";

  entries[6] = "hello , Im 33 yo white male , 6ft1 180lbs, SINGLE ,in good shape,two part time jobs,no kids,been" 
    + " told im goodlooking.looking for a Long term relationship . I have my own place and i drive.. I am a" 
    + " country/redneck/metalhead type guy all wrapped in one...some fav bands...Misfits,Metallica,Social" 
    + " D, Dropkick Murphys, AC-DC, Disturbed, Fear Factory, and thats all i can think of right now.I have" 
    + " 4 tattoos, one on right bicep and 3 on left forearm, id like to get more in the future...I am" 
    + " hoping to meet the right one in 2016 since its been a few years since ive had a relationship...Not"
    + " looking for liars , whores , wana be gangsters , gold diggers , game players ,and drama queens, or" 
    + " women still attached to their ex.";

  entries[7] = "Me:"
    + " I am tall, in shape, and intelligent. I hear I am easy on the eyes, and have all of my teeth. I"
    + " have a decent job and my own place, although I am new to the area. I am 420 friendly, but other" 
    + " wise drug free. I am disease and drama free as well and have no kids or anything."
    + " You:"
    + " Honesty is pretty crucial."
    + " Cute although you dont exactly have to think so haha"
    + " Smart"
    + " Job, car, school, art, or something you do with your life"
    + " 420 friendly is a plus"
    + " Piercings and tattoos are also a plus"
    + " Disease/kid/drama free";

  entries[8] = "Anyone up late this evening and want to chat and see where it leads? Maybe make a friend or maybe" 
    + " something more? Send me an email so we can chat! I am open to any age, relationship status, race," 
    + " etc. as long as you are female lol so don't be shy :)";

  entries[9] = "Anybody feel like hangin out and having good conversation? We could talk about anything you feel" 
    + " like.";

  entries[10] ="I'm white male regular build not bad looking. I have no tats, no piercings, never married, no kids." 
    + " No crazy friends, no crazy ex's. I'm more of a homebody and stay out of trouble. I like going out "
    + " to all depending on what to do. I'm looking for someone to talk too who is just a normal regular "
    + " person,"
    + " I'm friendly and nice. Down to earth and chill. If you wanna know more..."
    + " Put 'email' in subject line or send me a text"
    + " FOUR ONE TWO NINE FIVE ONE FOUR FIVE SEVEN TWO";


  entries[11] = "Hey ladies, I guess I just wanna keep it quick and to the point lol. I'm not looking for a"
    + " relationship or anything serious, just a girl to hangout and mess around with on occasion. If you"
    + " would be interested in that kind of thing reply to my post and let's see what happens. Please"
    + " attach a picture of yourself and put your boob size in the subject line so I know you're legit.";

  entries[12] = "I am not picky tonight. Invite me over already. I can travel to you if things feel right.";

  entries[13] = "Hi There!! I am from California... I live in San Diego, I've always wanted to travel but I haven't" 
    + " been here :/ only through CL haha... But I don't want to go without finding someone who I can trust"
    + " and who can show me around so I have a good time :)"
    + " Possibly to meet and have a connection."
    + " About Me: I'm a chubby white guy, long blond hair and blue eyes :)" 
    + " I'm 27, have a good job and I'm easy going."
    + " You can email me or KIK me at"
    + " Tcandee";

  entries[14] = "Contact me tonight....discreet fun wanted..I'm in shape,sense of humor, 40s..text 'I'm in' to"
    + " fouronetwothreeeightninetwoonefivesix. Married / attached ,couples welcome";

  entries[15] = "Howz about a nice collaboration between friends? We can have pizza pie as I spice it up with my" 
    + " sausage as the perfect ingredient.";

  entries[16] = "Hey anybody want to get together tonight? We can catch a movie or do oral? We can Iggy wiggy liol.";

  entries[17] = "I am at the point where making time to slowdown, relax and enjoy is important, I like the" 
    + " interaction of dinning in, dinning out, the connection created by preparing and sharing a meal" 
    + " together, an evening set aside for a nice wine, conversation, candles, teasing, pleasing and an" 
    + " antipasto to nibble on. Lol";

  entries[18] = "Laughter is important, my sense of humor can range from playful to sarcastic. Not looking to change" 
    + " my life or anyone else's other than filling the void. Passionate, expressive and looking for the"
    + " same. Definitely not an out of sight out of mind person, I like to keep in touch throughout the" 
    + " day, share thoughts, feelings and events. For me the mental connection is important and" 
    + " communication is key. I don't mean to offend anyone but please be local to the Pittsburgh area," 
    + " over 45, ready to slowdown and enjoy, willing and able to make time to do so and looking to share" 
    + " and enjoy plenty of pleasure, passion and fun. If interested message me, put your favorite wine in" 
    + " the subject line, please include a photo, what you're looking for, what you enjoy/find pleasure in" 
    + " and PLEASE!!! Be serious and looking for something regular and ongoing, the more we have to build" 
    + " on the hotter it will get. Thank you.";

  entries[19] = "would love to be a live in companion and a lover to a naughty older woman 60-85,any race," 
    + " religion. I am an east Indian male NY raised 55 years old and an American citizen. I don't have" 
    + " Indian accent when I speak English and I have an MBA. I need a place to stay. I will caress you" 
    + " allover, give full body massages, give you great sex, cook and your chores. Please respond with" 
    + " your phone number.";

  entries[20] = "For reals. I love breast play. Yours, not mine lol. Hoping to find someone out there that loves" 
    + " having your nipples sucked. Such a turn on for me. Well and kissing too." 
    + " I can drive or host. Anyone curious? Please include a face picture of yourself and I'll return the" 
    + " favor. Thanks!";

  entries[21] = "Ok who on this site really wants to meat? Let's meat today and meat consistently if that's okay. So" 
    + " let's do this.";

  entries[22] = "I'm a nightime person who likes to stay up past midnight. Any women on here looking to chat who" 
    + " likes to stay up past midnight? If so put midnight in subject line";

  entries[23] = "Looking for guys and girls who want to throw down some fun. We got the dunking stix so you supply" 
    + " the honey buns.";

  entries[24] = "So as I have stated just out of a bad relationship. My ex just could not understand my experiments" 
    + " with men. So maybe you will understand? Hey we all have needs right?";

  entries[25] = "I'm looking for a nice young thick girl to spoil and give gifts to. This can be one time or" 
    + " ongoing. Please no bbw. Please reply with favorite color in subject. Also send pics and a phone #";

  entries[26] = "This is a long shot I know. And I know most if not all of you that read this will judge and form" 
    + " your opinions. That's okay. Hopefully there is one woman out there that is adventurous and open" 
    + " minded enough or maybe in a similar situation that they understand."
    + " I guess I will just lay it all out on the table. I am a 54 yr old married man. Due to wife's lack" 
    + " of interest, there hasn't been much in the way of 'sex' for quite some time. My release comes from," 
    + " you guessed it, masturbation. I am looking for a woman who is possibly in the same situation that" 
    + " might be interested in getting together for some mutual masturbation. Not looking for intercourse." 
    + " We could watch each other or we could lend a hand and help each other. The choice would be yours." 
    + " Absolute discretion is a must !! Prefer you be over 40 yrs old. Married or single. If this sounds" 
    + " like something you would like to possibly discuss, please send me an email and tell me your" 
    + " thoughts on the subject and we can go from there. Women Only Please !!!!";

  entries[27] = "Are there any cute girls out there who might be interested in a tribute? If you don't know what" 
    + " that is it is when a girl sends a sexy pic or 2 to a guy who then drops his load on the picture and" 
    + " takes a picture of that and sends it back to the girl."
    + " It's just a fun flirty activity and doesn't require any personal meets or anything like that. If" 
    + " this is something you'd be interested in please send me a pic and what you're looking for and" 
    + " please put tribute in the title so I know you're real."
    + " I'm real -- today is Friday and has been sunny but cooler but the weekend will warm up nicely.";

  entries[28] = "I am a mature, married busy workaholic & needing assistance with stress relief from time to time. I" 
    + " am seeking a steady & reliable massage therapist( don't worry about experience, I can teach you the" 
    + " techniques) who can host with great hands for a good sensual full body massage at least once a" 
    + " week. No need to look for a p/t job, do more with the time saved and let's help each other out." 
    + " Deal with one sane and decent guy, no need to hook up with random men. Ideal candidate would be a" 
    + " woman who is uninhibited with a great sense of humor and understands the need for privacy. Looking" 
    + " to start soon. This is a perfect opportunity for stay at home mom (after the kids are at school)" 
    + " retired woman( age is not an issue), college student or any woman looking to supplement her income." 
    + " I have a flexible schedule which will enable us to work around yours. Please put relief in subject"
    + " line so I will know that you are real and sincere.";


  entries[29] = "Quit flagging and sending racist emails, haters. Live and let live."
    + " Some guys like blondes. Some guys like BBWs. I prefer ladies who have a darker skin tone. Don't ask" 
    + " me why. Don't know. Don't care. And it isn't just a phase. I haven't dated a white woman in 10"
    + " years. I'm not looking for anything serious (though I definitely want to keep the option open) nor" 
    + " am I interested in anything financial including a SD/SB arrangement."
    + " What I'm seeing is a situation where we get dinner sometimes, or a happy hour. We catch a movie," 
    + " hear some live music. And there is lots of naked time. We aren't up under each other all the time," 
    + " but we're friends, confidants and lovers. I'm college educated, been told I have a good sense of" 
    + " humor and can usually keep up on the conversation."
    + " Anyway, if that has a beat for you, drop me a note. Put 'Maybe I'm the one' in the subject and"
    + " lets's get coffee."
    + " Please make the subject of your reply something interesting so i know ur not a dbag or spam bot."
    + " Thanks.";

  json = new JSONObject();
  for (int i = 0; i < 30; i++) {
    String result[] = RiTa.splitSentences(entries[i]);
    String sent = result[int(random(0, result.length))];
    json.setInt("id", i);
    json.setString("sentence", sent);
    String add = str(i);
    saveJSONObject(json, "data/text" + add+ ".json");
  }
}

Scripting Illustrator with Basil.js:

#includepath "~/Documents/;%USERPROFILE%Documents";
#include "basiljs/bundle/basil.js";

var jsonString = b.loadString("text.json");
var jsonData;

//--------------------------------------------------------
function setup() {

  // Clear the document at the very start. 
  b.clear (b.doc());

  // Make a title page. 
  b.fill(0,0,0);
  b.textSize(24);
  b.textFont("Helvetica","Light"); 
  b.textAlign(Justification.LEFT_ALIGN); 
  b.text("Ideally we meeta few times xa week and have bottle rocket sex", 72,72,360,36);
  b.text("Katie Tender", 72,108,360,36);

  jsonData = b.JSON.decode( jsonString );
  b.println("Number of elements in JSON: " + jsonData.length);

  var titleX = 72; 
  var titleY = 72;
  var titleW = 72;
  var titleH = 72;

  var captionX = 72; 
  var captionY = b.height - 108;
  var captionW = b.width-144;
  var captionH = 36;

  var imageX = 72*1.5; 
  var imageY = 72; 
  var imageW = 72*4.5; 
  var imageH = 72*4.5; 

  for (var i = 0; i < jsonData.length; i++) {
 
    b.addPage();

    b.noStroke();  // no border around image, please.
    var anImageFilename = "images/" + jsonData[i].image;
    var anImage = b.image(anImageFilename, imageX, imageY, imageW, imageH);
    anImage.fit(FitOptions.PROPORTIONALLY);

    b.noStroke(); 
    b.fill(b.random(180,220),b.random(180,220),b.random(180,220)); 
    b.ellipseMode(b.CORNER);
    b.ellipse (titleX,titleY,titleW,titleH);

    b.fill(255);
    b.textSize(56);
    b.textFont("Helvetica","Bold"); 
    b.textAlign(Justification.CENTER_ALIGN, VerticalJustification.CENTER_ALIGN );
    b.text(jsonData[i].title, titleX,titleY,titleW,titleH);

    b.fill(0);
    b.textSize(36);
    b.textFont("Helvetica","Regular"); 
    b.textAlign(Justification.LEFT_ALIGN, VerticalJustification.TOP_ALIGN );
    b.text(jsonData[i].caption, captionX,captionY,captionW,captionH);

  };
}

b.go(); 

kander – LookingOutwards06

For this Looking Outwards assignment, I selected Citation Needed (@needsref) by Allison Parrish, which is a bot that crawls through Wikipedia and tweets out sentences that are marked “citation needed.” Seeing a feed full of assertions that we would normally believe in the context of a full-length Wikipedia article, but we actually have no way of actually checking their accuracy, highlights the willingness with which we will accept information. There’s also a certain humorousness to seeing sentences completely out of context, as well as a more subtle humor to seeing sentences that are probably very subjective and up for debate being attempted to be passed off as fact, such as “England is considered the home of the game of football.”

Parrish works primarily in fields of text, and seems to be especially interested in poetry , and words and code.

tweet_1 tweet_2 tweet_3

 

 

kander – FaceOSC

For my FaceOSC project, I made a program that allows the user to make a composition using horizontal lines that are located at each eye The tilt of the head controls color, the height of your mouth controls line length, and the distance from eyes to eyebrows controls stroke weight. I liked the idea of being able to generate art using your face, as opposed to just controlling an object. I wish I could have expanded the concept beyond lines — my original idea (second picture) was to generate particles so you could “paint” with your eyes.

My first idea was to control a Michael Jackson face, and clicking through would modify the face through the different stages of his appearance (lol). They I thought about making a game where you use your mouth to catch objects, before I decided I wanted to make a composition using my face.

img_1668 img_1667

img_1669

GIF of me making a composition using FaceOSC
GIF of me making a composition using FaceOSC
import oscP5.*;
OscP5 oscP5;

// num faces found
int found;

// pose
float poseScale;
PVector posePosition = new PVector();
PVector poseOrientation = new PVector();

// gesture
float mouthHeight;
float mouthWidth;
float eyeLeft;
float eyeRight;
float eyebrowLeft;
float eyebrowRight;
float jaw;
float nostrils;

//drawing variables
int arePainting = 0;
PImage bg;
float weightMapped;

void setup() {
  size(800, 500);
  frameRate(30);
  background(100);
  save("drawing_so_far.jpg");
  bg = loadImage("drawing_so_far.jpg");
  oscP5 = new OscP5(this, 8338);
  oscP5.plug(this, "found", "/found");
  oscP5.plug(this, "poseScale", "/pose/scale");
  oscP5.plug(this, "posePosition", "/pose/position");
  oscP5.plug(this, "poseOrientation", "/pose/orientation");
  oscP5.plug(this, "mouthWidthReceived", "/gesture/mouth/width");
  oscP5.plug(this, "mouthHeightReceived", "/gesture/mouth/height");
  oscP5.plug(this, "eyeLeftReceived", "/gesture/eye/left");
  oscP5.plug(this, "eyeRightReceived", "/gesture/eye/right");
  oscP5.plug(this, "eyebrowLeftReceived", "/gesture/eyebrow/left");
  oscP5.plug(this, "eyebrowRightReceived", "/gesture/eyebrow/right");
  oscP5.plug(this, "jawReceived", "/gesture/jaw");
  oscP5.plug(this, "nostrilsReceived", "/gesture/nostrils");
}

void setStrokeWeight(float brow1, float brow2, float eye1, float eye2) {
  float leftDist = eye1 - brow1;
  float rightDist = eye2 - brow2;
  float leftWeight = map(leftDist, 0, 25, 0, 5);
  float rightWeight = map(rightDist, 0, 25, 0, 5);
  float weightAvg = (abs(leftWeight) + abs(rightWeight))/2;
  weightMapped = map(weightAvg, 0.7, 2, 0, 6);
  strokeWeight(pow(abs(weightMapped), 2));
}


void drawLine(float y1, float y2) {
  float halfLength = map(mouthHeight, 0, 6, 0, width/3);

  line(-halfLength, y1, halfLength, y2);
} 

void mousePressed() {
  save("drawing_so_far.jpg");
  bg = loadImage("drawing_so_far.jpg");
}

void draw() {  
  if (found > 0) {
    translate(posePosition.x, posePosition.y);
    float bValueMapped = map(poseOrientation.z, -1.5, .5, 0, 255);
    stroke(255, 200, bValueMapped);
    setStrokeWeight(eyebrowLeft, eyebrowRight, eyeLeft, eyeRight); 
    background(bg);
    drawLine(eyeLeft, eyeRight);
  }
}

kander – LookingOutwards05

I was drawn to Martha Hipley’s work after viewing her project “Ur Cardboard Pet” in the VR Salon, which I found to be a tongue-in-cheek role-reversal of men’s attitudes towards women (I think her description said that it commented on the male gaze, but I don’t remember exactly).

Anyway, for this assignment, I looked at “Wobble Wonder” which is an immersive VR segway experience that Hipley collaborated upon with 3 other artists and engineers. The user stands on a platform, and they can tilt their body forward and backwards to move (like a segway). There are fans mounted to the users head, so if the user is moving “fast enough”, the fans will simulate air resistance. The project employs an Occulus headset through which the user can experience the world, which was largely modeled by Hipley. The world has a similar expressive feeling and color scheme to Hipley’s other work — she often uses paint in combination with code (for example, the images in “Ur Cardboard Pet” were hand painted).

I like this project because it has appreciation for what VR can actually do. The project is about VR, rather than simply using VR as a media to display something that could have been displayed on a flat screen. “Wobble Wonder” is a project that allows VR to shape the conceptualization of the project. Furthermore, it goes beyond simply constraining the users world to the visual, with the use of fans and movement. 

An onscreen rendering of what the user of “Wobble Wonder” would experience.

I couldn’t embed a video, but this page has a video of about the project.

 

 

Kander – LookingOutwards04

I looked at design I/O’s (Theo Watson and Emily Gobeille) interactive puppet installation called “Puppet Parade.” This project utilizes openFrameworks and Kinect to track a user’s hand movement and arm movement to control a projected bird.

I love the whimsy with which the birds and their environment are created in this project. The colors and shapes are lovely to look at, and I think, considering that this project is meant for children, they hit the nail on the stylistic head. However, the flip side to this artwork interacting with kids’ gesticulations is that the movement of the birds can often be quite jerky and uncomfortable (watch the video below, and you’ll see that nearly every kid is jumping up and down and waving their arms like Tigger after 3 bottles of 5-hr Energy. If they could have somehow found a way to smooth out that jerky movement, that would have improved the project. Additionally, I would love to see more interaction between the two bird being possible.

I think kids are an easy target for interactive art of this nature. Not that I’m saying there’s anything wrong with that — I applaud design I/O for recognizing that they have the perfect audience. But I a

lso think that interactive art has great potential to make a statement, as it incorporates the users into the artwork, and I’m not really seeing that in this piece.

Project Page (I love the last image on this page!)

 

I also found a video of Theo and Emily describing a prototype of their project. It has a bit more explication on how it works:

 

 

 

 

kander – Plot

img_1618

I knew right off the bat that I wanted to explore the some sort of curve, so I just clicked around on math world until I found a curve that I liked (this one is called a lituus), and went from there. I figured out the properties and arranged them in a composition I found compelling. I then generated a pdf and plotted it.

The quality of the picture that I’ve attached isn’t particularly high, so all of the spirals look like they’re silver, when in reality, they’re different metallic colors. But the lines are so thin that the variation in the color is quite subtle, creating an effect that I really like.

hand

 

kander-Clock-Feedback

Pretty much everybody who commented on my clock mentioned that sometimes the balls move way too fast and sometimes glitch out, which I respect, because it is true. (especially with the hours balls. I made the mistake of making the clock at two in the morning and not considering how disturbing the output might be 7 hours later). A few people liked the chaos and the energy of the piece, which I wasn’t necessarily going for, but now that it’s mentioned, there is a sense of urgency evident in my clock (especially when you take the glitches into account). Time is so often associated with urgency/stress, so I’m glad that feeling was evoked in some viewers.

kander – AnimatedLoop

I had a heck of a time trying to get my program to output frames, and when I finally got it to, I couldn’t figure out how to get it to output png or jpg — it would only output a generic “file” type. So I’ve just embedded my code the old-fashioned way. This assignment didn’t go amazingly — I eventually decided that I wanted to actually make a non-abstract composition, but the one I came out with is kind of simplistic. I think the faces communicate tone nicely, but they could be vastly improved with more attention. And the whole gif thing is a bummer.

sketch

 

img_1515

img_1517

img_1518

kander – Interruptions

  1. The border size is varied (I think that’s a feature of the printing, rather than an intentional concept of the artwork, but it is nonetheless a feature of the work)
  2. The lines are all the same length
  3. The lines are about 1/25 the length of one of the sides of the square
  4. The lines are black
  5. The background is white
  6. The artwork is square
  7. There are spaces where lines do not generate
  8. The number of these spaces varies
  9. Lines do not get cut off by the borders of the page (there are no little amputated lines)
  10. A similar number of lines is generated each time the program runs
  11. The lines are not cut off by the spaces. Rather, they simply do not generate there
  12. Line density is similar in areas where there are not the spaces
  13. It’s almost as though there are spaces where line density is lower, rather than spaces where they specifically don’t generate from
  14. There doesn’t seem to be a specification for the angle at which the lines generate, but they tend to generate to the same angle
  15. The date is written in the bottom
  16. Sometimes the movement in the picture is horizontal, and sometimes it is more vertical
  17. Lines do not necessarily have to intersect with each other

Click in the white space below to start my program!

sketch-60.js

Github Repository Link

I initially noticed that the line placement seems to be based off of distribution, so I went through the p5.js function library looking for functions that could help me with distribution. I eventually decided I should try using random() and randomGaussian() and spent a long time trying to create the gaps by editing the distribution of the first x-coord of the lines. I tried using randomGaussian() to control the value the x-coord increments by each time, and I even tried messing with the angles of the segments. Eventually, I realized editing the properties of the lines wasn’t working well, so I instead defined the white spaces and simply didn’t render any segment whose first point was in that space.

Overall, I think this final strategy worked pretty well. The margins look a little odd, and I feel as though the nature of my white spaces and Molnar’s white spaces are slightly dissimilar. I now appreciate the complex thinking required to make an algorithm behave in a way that implies random accident. It would have been so much easier to simply render the lines to the screen, but that work would be so much more lifeless than Interruptions.

kander – Reading03

1a: I think a honeycomb displays effective complexity. It’s on the more ordered side of the spectrum, as the tessellation of hexagons is fairly noticeable, but from far away, the  actual shape of the honeycomb itself (the larger shape that the little hexagons form) can seem random, rather than generated by an algorithm of tiny hexagons.

1b: I read the section titled The Problem of Authorship.  I think that it’s rather nitpicky to complain about an artist not personally making the brushstrokes/lines/whatever medium himself. After all, artists have had assistants to carry out their artistic vision forever. It takes the same sort of visualization and insight – if not more – to give a machine instructions to make art as it does to do it yourself.

kander – LookingOutwards03

Pixtil is a French textile design company that creates generative textile design patterns. Each time their program, called Génératif, is run, a unique textile design is generated, which can either be printed with ink or weaved (with each pixel representing the crossing of a warp and weft thread). The patterns are generated in Processing, and then converted to a binary file so it can be printed. There are some limitations on each series – for example, they might be different configurations of the same components, or they might have the same color scheme, or they might be symmetrical. From what I can tell, color is generated from within a specified range, and shapes are randomly generated, but have an algorithm that places them. For the symmetrical designs, perhaps 1/4 of the design is generated and it is then rotated accordingly to fill the other 3 quadrants?

The patterns (and the cloths that carry them) are often very lighthearted and carefree, and the artists’ understanding of textile patterns clearly makes its way into the art, as many of the patterns feel like they belong on fabric. The randomness is definitely implied – the algorithm doesn’t generate a completely repetitive pattern, but there is repetition in the shapes that are used. Each shape that the algorithm generates “matches” the others of that pattern. I applaud the artists for using code-generated art in a non-digital format – I’d imagine that it’s not that difficult to transfer the pattern to the loom once it’s generated, but it’s still an interesting application of generative art. More complicated algorithms is probably the next step for Pixtil – right now, the patterns feel very digital. But still a cool project!

Company Page

Creative Applications Article about their 2015 table napkin series

One of their table napkins
One of their table napkins

Below is a video detailing an earlier design from 2013, and giving an overview of their project

kander – Clock

github link

sketch

My first idea, which is probably the one that came closest to actually transpiring, was three cups. Each time a new hour, minute, or second happened, a ball would drop into the cup. When the unit of time rolled over, the balls would drop out.

img_1465

Although my final result is much simpler than the original idea from which it was drawn, I’m not upset that I wasn’t able to implement all of my original plans.

The gradual chaos built up to the point when the screen contains however many hours balls, 59 minutes balls and 59 seconds balls is, and then its release when the time rolls over and the balls disappear reminds me of the fresh start that each new hour seems to bring. I would like to see my clock somehow implemented mechanically, with a bunch of actual balls being shot out of different compartments. The balls are sized and their alpha value is adjusted according to their “importance” in telling time. I tried to balance the focus the viewer would place on each element of the clock — the seconds were tinier, so they moved much faster than the hours, for example. It would be an interesting modification to reverse the attributes — for example, the seconds are huge and slow moving, while the hours zoom around the canvas — and see if it still reads as a clock.

Some of my other ideas:

My second idea had to do with coloring the background

img_1466

 

Another idea was centipede, which gave characteristics to little bugs on the screen according to time

img_1467

My final idea was a light up grid, where the units of time were represented by different areas, and the areas flashed according to how many hours, minutes, or seconds there were.img_1468

 

kander-lookingoutwards02

I feel really basic writing this Looking Outwards assignment about a blockbuster film, but I hadn’t had much exposure to interactive art prior to this course, and my response does reflect one of my sources of information, so screw it, I’ll be basic. When I saw The Jungle Book last spring, I was completely blown away by its unprecedented vfx. I’m too young to remember when Fellowship of the Ring came out in 2001, but my hippocampus was firing on all cylinders by 2009, and the release of  The Jungle Book inspired a level of CGI hype that hasn’t been reached since Avatar.

The graphics in The Jungle Book are almost realer than life. It’s almost gets so real that it returns back into the realm of the imaginary from which it came. It took 800 computer graphics artists to bring the story to life, utilizing motion capture and compositing, among other techniques. In fact, the only physically real components were Mowgli and the pieces of the set that he immediately interacted with — all of the animals and about 80% of the jungle were computer generated. Since Hollywood isn’t allowed to keep exotic animals for reference, each animal had to be researched extensively.

I assumed that most of the art for The Jungle Book was done using preexisting software, but in researching for this project, I learned that there were some challenges that required software engineering to surmount. For example, the CGI characters didn’t throw shadows onto the live-action Mowgli, so they had to develop software that would project the animals’ shadows.

See the movie’s website here

kander-LookingOutwards01

 

I chose “Mapping Police Violence,” a project by activist DeRay McKesson (who is also famous for this one blue vest he wears, apparently) and activist, policy analyst, and data scientist Sam Sinyangwe. This project utilizes data visualization to help raise awareness about the problem of police violence, specifically police violence towards African Americans. The pair’s work is based off of two separate online databases of police brutality, which they cross-referenced against each other and supplemented with their own research. They then created info graphics, maps (like the one pictured above), and a police-rating tool based off of the accumulated data, to contribute to what they describe as a “digital Harlem renaissance” that will help people visualize the solutions to and unintended consequences of oppression of blacks in America.

As admirable as their project is, from an artistic perspective, their work isn’t particularly revolutionary. We’ve all seen maps and infographics before. That being said, their work is presented in a clear manner, which is of great importance when presenting data (their color scheme was nice as well.) One thing that DeRay McKesson said that particularly struck me was “the truth is damning enough that it should radicalize people.” Here, he is speaking in the context that he doesn’t have to embellish the facts to portray injustice. However, if art’s purpose is, as many argue, to reveal the truth, one can deduce that based off of this statement, art can be the most direct tool for effecting social change.

 

I’ve included the link to McKesson’s Twitter feed, as he himself in the video states the extreme importance of Twitter in his activism

See some of Sinyangwe’s visualizations for the project here.

The above links to one of my favorite pieces of their work, where the pair track data from specific police departments. In the lecture, they explain how the purpose of tracking police dept. data is to identify good policy or pinpoint when good policy isn’t being followed.