Response: “Her Code Got Humans on the Moon”

In addition to the multitude of lessons to be learnt from her brief history, Hamilton’s story is also incredibly inspiring. As a spaceship programmer in the sixties, she was quite literally one of a kind, and she was undoubtedly extraordinary as she completely revolutionized and transformed the potential of technology and software all the while navigating a male-dominated industry. This article made me realize the way technology can immensely improve and become more complex yet at the same time also become more simplified- in the span of a few decades. Back then, during Hamilton’s time, programming a spaceship meant punching holes in stacks of punch cards and threading copper wires through magnetic rings- and the computers processing these “words” or commands could only store and compute at a very limited level and speed. Today, this notion has been completely transformed, and programming has become transformed into a series of more “simplified” languages that a computer can understand, with many more options and larger capacities for data storage and computing speeds. To me, reading about the early stages of programming and software building is fascinating but also wildly incomprehensible. How do you encode data on a spaceship using something as “raw” as hole-punched cards? This may be an oversimplification of the process, but it is a question I often found myself asking. I also thought there was a valuable lesson to be learned about testing and troubleshooting from the Appolo 8 flight, what we may think “would never happen” can very much end up happening, and this can be applied all the way from large ventures such as spaceship flights bringing humans to the moon, to smaller-scale projects like our weekly class assignments.

Self Portrait by Tori

int faceShapeX, faceShapeY; 

int rectWidth, rectHeight, rectX, rectY;

ArrayList<Polygon> polygons;
PShape[] shapes = new PShape[3];




void setup() {
  
  
  size (1500, 1200);
  faceShapeX = 1000;
  faceShapeY = 480;
  rectWidth = 200;
  rectHeight = 70;
  rectX = 350;
  rectY = 300;
  
    background(255);   
   
}

void draw() {


 if(mousePressed){
   fill(80,30,0);
   ellipse(mouseX, mouseY, 40, 40);
   
 }


  fill(250, 219, 172);
  ellipse(faceShapeX, faceShapeY, 600, 700); // face shape


  fill(250);
  ellipse(858, 389, 80, 50); // left eye
  ellipse(1126, 389, 80, 50); // right eye

  fill(240, 209, 162);
  ellipse(997, 500, 40, 170); // center nose
  ellipse(970, 572, 37, 17); //left nostril
  ellipse(1025, 572, 37, 17); // right nostril

  fill(230, 190, 190);
  ellipse(999, 654, 150, 30); // top lip
  ellipse(999, 684, 150, 30); // bottom lip

  fill(0, 100, 0);
  ellipse(854, 389, 45, 50); // left iris
  ellipse(1125, 389, 45, 50); // right iris
  fill(0);
  ellipse(854, 389, 20, 20); // left pupil
  ellipse(1125, 389, 20, 20); // right pupil


  line(988, 424, 953, 568); // nose line
  line(1007, 424, 1042, 568); // nose line
  
  line(819, 384, 808, 373); // left eyelashes
  line(825, 376, 817, 361);
  line(836, 369, 829, 354);
  
  line(1162, 376, 1171, 366);  //right eyelashes
  line(1150, 369, 1157, 356);
  line(1139, 366, 1142, 348);


  fill(0);
  triangle(930, 331, 825, 299, 816, 328); // left eyebrow
  triangle(1050, 331, 1160, 299, 1169, 328); // right eyebrow
  
  
  fill(200,240,230);
  rect(rectX, rectY, rectWidth, rectHeight);
 
 fill(0);
 textSize(21);
 text("Give Me Hair!", rectX+30, rectY+45); // how do you make this bigger???
 
 if (mouseX > (rectX)
  && mouseY > (rectY)
  && mouseX < rectX + rectWidth 
  && mouseY < rectY + rectHeight) {
    
 fill(200,240,230);
 rect(rectX, rectY, rectWidth, rectHeight);
 
 fill(0);
 textSize(21);
 text("Beautiful!", rectX+60, rectY+45);
 
}

}

 

The hardest challenge I had to overcome was my hair. How do you program super curly hair??? And I really spent a lot of time trying to figure out some different solutions. I went through the entire “Examples” menu in Processing to see if there was a spring I could use to mimic my hair.

One issue I ran into was that I did this mostly on the airplane while I travelled this spring break. Therefore, I didn’t have wifi access. I couldn’t look up how to do things, but this challenged me to just sit down and figure it out.

My solution, of course, was to just pass the responsibility to someone else.: I’ll just have the interactor draw my hair to complete the self-portrait. There’s probably some deep meaning behind this about like, my own personality being completed by others, but really, I just wanted a more creative way to make my hair!

The text on the side, if you hover over it, changes to say “Beautiful!” ideally, that would happen only after the interactor has drawn hair. I don’t know how to do that so…


Self portrait in processing

void setup () {
 
size(500, 430);
background(500, 500, 500);
 
}
 
void draw() {

noStroke();
fill(61, 49, 16);
ellipse(200, 210, 256, 384);
ellipse(200, 160, 257, 194);
ellipse(200, 190, 272, 170);
ellipse(200, 230, 277, 177);
ellipse(200, 260, 279, 197);
ellipse(200, 308, 283, 167);
ellipse(200, 348, 287, 167);
ellipse(200, 388, 287, 167);


// face ?
fill(240, 222, 195);
stroke(0,0,0);
ellipse(200, 180, 190, 275);

stroke(61, 49, 16);
strokeWeight(20);
line(150,315, 90, 230);
line(239,329, 310, 236);

//hair
noStroke();
fill(61, 49, 16);
//ellipse(240, 75, 65, 95);
arc(265, 44, 90, 150, 70, 190);
arc(275, 75, 60, 130, 60, 140);
arc(250, 35, 90, 130, 60, 170);
arc(215, 20, 50, 90, 60, 170);
arc(305, 130, 70, 110, 70, 190);
arc(179, 73, 90, 80, 160, 360);
arc(130, 95, 60, 60, 130, 330);

// neck ?
fill(227, 212, 191);
ellipse(200, 320, 100, 180);

//shirt
fill(98, 52, 158);
ellipse(200, 448, 350, 210);

//shirt
fill(227, 212, 191);
arc(200, 340, 110, 40, 20, 160);

fill(240, 222, 195);
ellipse(200, 240, 130, 170);

// nose
stroke(153, 141, 131);
strokeWeight(1);
arc(210, 213, 20, 30, 0, 70);
arc(185, 213, 20, 30, 100, 170);
arc(198, 230, 18, 10, 20, 170);

fill(0,0,0);
ellipse(187, 228, 2, 4);
ellipse(210, 228, 2, 4);

//lips
noStroke();
fill(207, 127, 127);
arc(198, 260, 48, 30, 10, 170);
arc(207, 264, 25, 15, 180, 350);
arc(190, 264, 25, 15, 180, 350);

stroke(61, 49, 16);
strokeWeight(2);
line(260,150, 240, 144);
line(135,150, 148, 145);
line(215,145, 240, 144);
line(148,145, 176, 144);

fill(250, 245, 250);
strokeWeight(1);
ellipse(160, 164, 32, 17);
ellipse(234, 164, 32, 17);

fill(107, 83, 68);
ellipse(234, 164, 18, 14);
ellipse(161, 164, 18, 14);

fill(0,0,0);
ellipse(234, 164, 11, 10);
ellipse(161, 164, 11, 10);

 

“Her code got humans on the moon”

This reading tells the outstanding story of Margaret Hamilton, who was one of the main software engineers of Mission Apollo during the 60s. My takeaways of this reading are 1) the importance of coding. One of my biggest learning in this class is the power of coding, before this class, I had only taken an introduction to programme classes,  but now that I have realized all the things that I can build and that I can manipulate through I have realized that software and coding is one of the most powerful tools in the world and the with just a few lines of coding I have been able to do things that I never thought I was going to be able to do before I came into this class.

Self Portrait using Processing

Originally, the wannabe artist in me wanted to make my self portrait look as organic and realistic as possible. But, when that failed, it was very helpful for me to break down every part of the portrait into certain shapes that would suit specific features. I used the quad function for the face shape for a more structured jaw, a combination of rect and ellipse for the hair and body, and so on.

Although challenging, I felt like this assignment helped me learn more about the different functions I could use in Processing, and hopefully next time I can figure out how to use beginShape.

Here’s the code:

float hairR;
float hairG;
float hairB;
PImage lips;

void setup(){
  size(500, 500);
  lips = loadImage("lips.png");
  hairR = 139;
  hairG = 69;
  hairB = 19;
  
} 
  
void draw(){
  
  println ( mouseX + "," + mouseY );
  //background(255, 200, 200);
  background(160,220,232);
  noStroke();
  
  //head
  fill(hairR, hairG, hairB);
  ellipse(250, 120, 258, 120); //head top
  fill(255, 238, 212);
  quad(121, 120, 379, 120, 379, 340, 121, 340);
  quad(121, 340, 360, 340, 300, 360, 200, 360 );
  noStroke();
  fill(hairR, hairG, hairB);
  rect(121,120, 50, 350); //121 + 35 
  rect(345-15 ,120, 50, 350);


  stroke(0);
  strokeWeight(2);
  
  pushMatrix();
  translate(250, 250);
  
  
  fill(250, 200, 200);
  stroke(0);
  strokeWeight(1);
  translate(0,20);
 
  //eyes
  fill(255);
  ellipse(-50,-80,35,35);
  ellipse(50,-80,35,35);
  fill(190, 102, 0);
  ellipse(-50,-80,20,20);
  ellipse(50,-80,20,20);
  fill(0);
  ellipse(-50,-80,10,10);
  ellipse(50,-80,10,10);
  fill(255);
  ellipse(-45,-80,5,5);
  ellipse(55,-80,5,5);
  
  //glasses
  noFill(); 
  stroke(0);
  strokeWeight(2);
  ellipse(-50,-80,60,60);
  ellipse(50,-80,60,60); 
  
 //lips
  image(lips,-50,-20, width/5, height/6);
  
    popMatrix();
 
 //glasses2
 strokeWeight(2);
 line(230,190, 270,190); 
 
 //nose
 stroke(250, 220, 180); 
 triangle(250, 230, 280, 250, 230, 250);

 //neck
 fill(255, 238, 212);
 rect(220,360,70,80);
 
 //body
 fill(140,77,176); 
 stroke(140,77,176);
 rect(65, 440, 75, 120);
 rect(150, 380, 200, 120);
 rect(360, 440, 75, 120);
 ellipse(140, 440, 150, 120);
 ellipse(360, 440, 150, 120);
 
}

void mousePressed(){
  hairR = random(255); 
  hairB = random(255);
  hairG = random(255);
}

And the masterpiece:

Her Code Got Humans On the Moon – And Invented Software and Attractive Things Work Better

 

Her Code Got Humans On the Moon – and Invented Software

This Article talked about Margaret Hamilton, aspects of her life and her struggle as a working mother in a predominantly male industry. The most interesting part of the article, to me, was when Hamilton found an issue which made the simulator crash when she was “toying” with it. This reminded me of something that our professor encourages us to do with our project and it was said more than two times (which is I remember it)- and it is to stress test our projects. To work them over and over again until we find an error and fix it. We shouldn’t just assume that things are never going to happen, because they will and they might, at the wrong time, just like it happened with Jim Lovell.

Attractive Things Work Better

This reading’s whole focus was around the three levels of processing: Visceral, Behavioral and Reflective and how they affect human emotions- specifically when it comes to the design of products. The reading started off with a very funny story which made it clear that emotions when it comes to design is a “human” thing and not specific to ethnicity or race. Then it went on to talk about how people who are happier generally have no problem with minor inconveniences and will ignore them and be as positive about the situation as they can be. This means a human being under stress will not be able to think clearly if one thing goes wrong and are bound to crack/ break down and lose rationality. The example of doors at the cinema is very scary, but an important one. It goes back to thinking about the precaution in the design of buildings and items like the fire extinguisher. Making them functional so people can use them when under stress and fear is very important, but also making them look nice so the aesthetics don’t get ruined.

Self Portrait

Since the self-portrait needs a lot of different shapes other than the given functions such as rect() or ellipse(), I have played around with the beginShape() and endShape(), utilizing vertex and curveVertex to formulate the curves. I have also tried to use the rotate() function, but since the rotate() function rotates the art board and not the configured shape, I was stuck on creating figures using the built-in vertex functions. The image below is the self-portrait I have created following with the source code on Processing.

color backgroundColor = color(0,132,255);
color black = color(0, 0, 0);

color skin = color(255, 219, 172);
color skinDark = color(241,194,125);

int unit = 72;

void setup() {
  size(720, 720);
}

void draw() {
  background(backgroundColor);
  noStroke();
  strokeWeight(1);
  
  // *NECK
  fill(skinDark);
  rect(unit*4, unit*6, unit*2, unit*1);
  
  // *FACE
  
  fill(skin);
  arc(unit*5, unit*3, unit*4, unit*7, 0, PI);
  
  // *UPPERHEAD
  fill(skin);
  arc(unit*5, unit*3, unit*4, unit*4, PI, TWO_PI);
  
  //*HAIR
  fill(0);
  beginShape();
  curveVertex(unit*4, unit*2);
  curveVertex(unit*4, unit*2);
  curveVertex(unit*3.8, unit*2.8);
  curveVertex(unit*3, unit*3);
  curveVertex(unit*3, unit*3);
  endShape();
  
  beginShape();
  curveVertex(unit*4, unit*2);
  curveVertex(unit*4, unit*2);
  curveVertex(unit*5, unit*3);
  curveVertex(unit*7, unit*3);
  curveVertex(unit*7, unit*3);
  endShape();
  
  beginShape();
  curveVertex(unit*3, unit*3);
  curveVertex(unit*3, unit*3);
  curveVertex(unit*3.2, unit*1.3);
  curveVertex(unit*5.05, unit*1);
  curveVertex(unit*5.05, unit*1);
  endShape();
    
  beginShape();
  curveVertex(unit*3.4, unit*1.85);
  curveVertex(unit*3.4, unit*1.85);
  curveVertex(unit*5.5, unit*0.6);
  curveVertex(unit*6.8, unit*1.5);
  curveVertex(unit*7, unit*3);
  curveVertex(unit*7, unit*3);
  endShape();
 
  // *EYEBROW_LEFT
  beginShape();
  vertex(unit*3.5, unit*3.25);
  vertex(unit*4.5, unit*3.25);
  vertex(unit*4.5, unit*3.4);
  vertex(unit*3.5, unit*3.4);
  endShape();
  
  // *EYEBROW_RIGHT
  beginShape();
  vertex(unit*5.5, unit*3.25);
  vertex(unit*6.5, unit*3.25);
  vertex(unit*6.5, unit*3.4);
  vertex(unit*5.5, unit*3.4);
  endShape();
  
  // *EYE_LEFT
  stroke(0);
  strokeWeight(3);
  fill(skin);
  arc(unit*4, unit*3.9, unit, unit*0.2, PI+0.5, TWO_PI);
  
  // *EYE_RIGHT
  arc(unit*6, unit*3.9, unit, unit*0.2, PI, TWO_PI-0.5);
  
  //*NOSE
  beginShape();
  curveVertex(unit*5, unit*4.1);
  curveVertex(unit*5, unit*4.1);
  curveVertex(unit*4.9, unit*4.7);
  curveVertex(unit*4.5, unit*5.1);
  curveVertex(unit*5, unit*5.2);
  curveVertex(unit*5, unit*5.2);
  endShape();
  
  // *MOUTH
  arc(unit*5, unit*5.2, unit*2, unit*1.5, 0.7, PI-0.7);
  
  // *BODY
  noStroke();
  fill(50);
  beginShape();
  vertex(0, unit*10);
  vertex(0, unit*8);
  vertex(unit*4, unit*7);
  vertex(unit*6, unit*7);
  vertex(unit*10, unit*8);
  vertex(unit*10, unit*10);
  endShape();
}

 

“Emotion & Design: Attractive things work better”

There are two ideas approached by this reading that I believed can really improve my strategies as a designer.

The first idea is that attractive things tend to perform better than an ugly thing. To support this claim, the author gives the example of an experiment done in Japan about pretty ATMs having a higher positive impact on people than uglier ATMs. After knowing this, now I realized the importance of the aesthetics of things and how I can use the tendency that human beings prefer pretty things in my favor.  There have been times in this class that even though I  have spent hours working in complicated coding projects and I just don’t feel proud of myself and sometimes I do easy coding things that perform well easily and It does not take a long time to do. Going back to these projects, I realized that the projects that I made that I feel proud of myself to tend to be the ones that have an aesthetic outcome and the ones that I didn’t feel proud were not good looking projects. This teach me that maybe If I ever want to sell a product the aesthetic is as important as the function of the product.

 

The second idea is that anxiety help to focusing but not creativity, This is a mistake that I tend to do to leave things to the end. Now, that I know this, I have decided to at least design my projects when I am in a good mood and happy because as it is mention in the reading this will help me to improve my brainstorms for the project.

My Self Portrait Created in Processing

Oh boy here it is!

Here is the code

int x, y;
float x2,y2,speedX, speedY;

void setup () {
  size (700, 850);
  x= width/2;
  y= height/2;
   x2 = 0;
 y2 = 0;
  speedX =2;
  speedY =5;
}

void draw() {
  background(255);
//  fill(255,150,0);
//quad(180,340,300,340,300,400,300,460);
//quad (180,640,300,300,300,400,600,460);
//fill (100, 205, 30);
//ellipse( 200, 500, 300, 200);
//ellipse(x, y, 100, 100);

//neck
fill(245,230,195);
  stroke(245,230,195);
  quad(230, 600, 500, 600, 470, 900, 180, 900);
  
  fill(220, 187, 153);
  stroke(237, 187, 153);
  quad(150, 700, 500, 700, 400, 800, 230,780);


//face
  fill(255,235,203);
  stroke(255,235,207);
  quad(150, 175, 600, 175,540, 680, 100, 680);
  quad(125, 225, 150, 175,175, 750, 100, 680);
  quad(125, 225, 175, 750,540, 680, 150, 680);
  quad(600, 175, 600, 300,540, 680, 400, 760);
  quad(150, 175, 600, 175,400, 760, 175, 750);



//eyes
  stroke(0);
  fill(255, 240, 240);
  arc(240, 350, 70, 70, PI, PI+PI);
  fill(255, 240, 240);
  
  arc(430, 340, 70, 70, 0, PI+QUARTER_PI, OPEN);
  arc(240, 560, 120, 0, PI+QUARTER_PI, PI);

//pupils
  fill(0);
  ellipse(430, 345, 15, 15);
  ellipse(240, 335, 15, 17);

//nose
  fill(255, 230, 211);
  stroke(255, 230, 211);
  quad(x-40, y, x-20, y- 130, x+10, y-120, y-60, y+60);
  //nose
  fill(245, 210, 200);
  stroke(245, 210, 200);
  quad(320, 475, x+50, 465, x+10, y-120, y-60, y+60);
  //nose
  fill(235, 200, 190);
  stroke(235, 190, 190);
  quad(320, 500, 320, y+40, 400, 460, 380, 500);
  //nose
  fill(255, 230, 211);
  stroke(255, 230, 211);
  quad(x-40, y+100, x-20, y- 130, x+10, y-120, y-60, y+60);

//left eyebrow
  fill(147,81,22);
  stroke(147,81,22);
  quad(190, 300, 280, 295, 300, 330, 210, 315);

//right eyebrow
  fill(147,81,22);
  stroke(147,81,22);
  quad(400, 310, 465, 300, 490, 330, 390, 325);

  stroke(0);
  line(x+10, y-120, y-60, y+60);
  line(y-60, y+60,x-40, y+100);

//top lip
  stroke(203, 67, 53);
  fill(203, 67, 53);
  quad(230, 580, 300, 570, 350, 600, 210, 600);

//top lip
  stroke(203, 67, 53);
  fill(203, 67, 53);
  quad(250, 600, 350, 565, 400, 590, 410, 600);

//bottom lip
  stroke(236, 112, 99);
  fill(236, 112, 99);
  quad(210, 600, 410, 600, 370, 630, 270, 640);

// left ear
  stroke(237, 187, 153);
  fill(237, 187, 153);
  quad(80, 390, 120, 360, 110, 480, 90, 460);
  
  
//right ear
  stroke(237, 187, 153);
  fill(237, 187, 153);
  quad(580, 370, 620, 390, 640, 460, 570, 470);
  
 //hair
 fill(244, 208, 63);
 stroke(244, 208, 63);
 quad(350, 50, 500, 70, 650, 170, 390, 140);
 fill(244, 220, 80);
 stroke(244, 220, 80);
 quad(315, 70, 560, 125, 670, 260, 270, 190);
 fill(250, 240, 80);
 stroke(250, 240, 80);
 quad(201, 60, 320, 80, 390, 200, 170, 220);
 fill(255, 245, 100);
 stroke(255, 245, 100);
 quad(120, 80, 230, 100, 260, 210, 100, 230);
 
 ////fly
 //fill(15, 50, 30);
 //ellipse(x2, y2, 40, 20);
 //x2 += speedX;
 //y2 += speedY;
  
}

I used a lot of quad functions, because I thought it would most accurately represent the picasso-esque cubist ___ I desired.

I thought my portrait looked annoyed, so I was going to program a little fly to bounce around the screen, but ran out of time to make it as desired. I’m pretty happy with how it came out though.

Kyle reads “Physical Computing’s Greatest Hits (and misses)” by Tigoe

This blog post by Tom Igoe is basically a review of different physical computing or interactive media “themes.” These themes are different varieties of common physical computing projects. through the post he describes which ones have the most and least potential for artistic interpretation. As to not discourage the reader, Tigoe prefaces it by noting that despite the fact that  these themes exist and can be defined, it is still possible to find originality within the different interpretations of the themes.

What I think is helpful about his descriptions of the “themes” is that he not only explains how they work and how they are limited, but also provides examples of how to get past their basic functionality and make them original and interesting.

I think the thing that I enjoyed most about this post is that it got me excited about making my final interactive media project. I will definitely look back at this post if i need some inspiration for a place to start from. It might even be fun to combine multiple themes, like the author describes at the end of the post.