Assignment 2- Dillon Reisman

Observation:

Before describing specific class observations, I would like to comment on a few general trends that I found fairly surprising. First, more people outwardly appeared to be “doing nothing” than I would have thought. By “doing nothing” I mean that a number of people took their seats, pulled out their notebooks, and simply stared straight ahead or down at a blank sheet of paper.

In general I can divide the majority of people observed into three groups- these people who had nothing in front of them (nor were they interacting with anyone), people engaged with their smart phones, and students with laptops out (both of which were doing a diverse numbers of things on said devices). For the following specific observations I looked at three distinct classes and one specific student within each class: a Thursday 1:30 PM “Social Networks” precept with junior “Dan,” my Imagined Languages class on Wednesday at 1:30 PM with junior “Nikitas”, and COS 340 on Wednesday at 3:00 PM with sophomore  “Nicky.” I also conducted an outside-of-class interview with a junior student named “Wendy.” The following are my notes:

 

-Dan and Wendy, along with several other observed students, use the time before class to catch-up on emails that are missed over the course of the day (the average student receives tons of emails, that can often go unread). While people could conceivably check their phones for emails this appears to be done more often on laptops, the option taken by Dan and Wendy.

-A minority of people who spend their time before class on laptops do it in activities other than email- one big one I saw was shopping. It did not appear to me that people on laptops often review their notes before lecture.

-Students who had out smart phones (a large portion of students outside of students on laptops) were often texting friends in outside classes. Only in a minority of cases were people playing phone games (of the “Temple Run,” “Angry Birds” variety).

-Nicky was a rare student in that he had pulled out his physical notebook and was looking over notes from the previous class. In “Imagined Languages” with Nikitas, the professor opens up every class by asking what we did in the last class. No one ever answers quickly.

-In big lecture halls it is often a problem that people do not move into the middle of a row of seats, making it difficult for someone who came late to class to find a good seat to sneak into. Perhaps there’s something there that could be done to encourage people to “clump” towards the middle of a row for more efficient seating.

-Very, very few people actually spoke to their neighbors. It would be nice to get people to interact more.

 

Brainstorming:

  1. ClassChat: Web-based app to open a pre-class chatroom to all members of a class, discuss past lecture or upcoming assignments.
  2. ClassCompanions: Pre-class chatroom open to your friends in other classes, also waiting for class to start (alternative to texting with only one friend).
  3. KnowYourProfessor: Phone-based trivia questions about your professor
  4. Class-a-sketch: A phone/web-based sketchpad for a cooperative doodle between members of a class.
  5. Anony-notes: Phone-based: Leave a message of your thoughts, random musings, etc. to the person who will sit in your same seat in the next class.
  6. QuickReview: Web-based game that takes prior lecture’s notes, creates fill-in-the-blank style quiz to help student review past lectures.
  7. Email Attack!: A game that displays your emails one at a time on your laptop and demands either an ‘ignore’ or a ‘reply’ in a set amount of time for points.
  8. Study Snacks:  Order snacks (cookies, muffins, etc.) for pick-up at food carts situated around campus on your way to class- all charged to your University account.
  9. Questioner: App to solicit questions from the class before class starts, to be displayed on the projector and addressed by the professor at the start of lecture.
  10. Icebreakers!: App that takes in the name of a neighbor and returns your closest mutual friend (based on Facebook activity).
  11. “I can’t remember!”: App takes your iCal/calendar information and tests your memory of your upcoming commitments.
  12. iKartoj: Phone-based Esperanto flash-cards/exercises for learning new Esperanto root words in your free time.
  13. Musical Roulette: Each member of the class proposes a song to play in lecture before class, one of which is selected at random as that lecture’s song.
  14. Good eve’: An app that lets you coordinate previously unscheduled evening plans with friends in your free time during the day.
  15. The Amazon Games: App that lets you choose one product from Amazon everyday- at end of week, lets you eliminate items in round-robin to determine best item you found that you might want to buy.

 

Two Favorite Ideas:

7. Email Attack!: The desire in a lot of people to use the free time productively was strong, and this app can make a mundane but important task fun and even more efficient.

14. Good eve’: Throughout the course of a busy day it might be difficult to plan recreational time with friends in the evening before it is too late, so this app could help people organize their often-unscheduled night plans early in the day.

 

Paper Prototypes for both:

Good Eve’ Paper Prototype:

 

Good Eve' paper prototype 1

Welcome screen, friend group management screen, and “Add friends to group…” screen shown. These all flow from the “Manage Friends” button on the welcome screen

 

 

 

 

Good Eve' Paper Prototype 2

When you select the “Make Plans” option on the welcome screen, you are taken to a screen where you select a group to send a plan out to, and then a screen where you select a category of plans and add a location and comments.

Email Attack! Paper Prototype:

Email Attack! Paper Prototype 1

Game starts when selected in email. You are shown an email and you can either ignore or reply. There is a timer to the right of the screen showing how much time is left.

 

Shows reply screen.

When you select reply a separate window pops up for you to type your reply, and send. When you hit send you go the next email.

Game over

When the timer on the left runs out, the game ends.

User Testing:

Ballard Metcalfe, User 1:

Ballard making evening plans with friends

Ballard making evening plans with friends

Ballard selecting group to invite

Ballard selecting group to invite

Ballard managing his groups

Ballard managing his groups

Ballard adding a friend to a group.

Ballard adding a friend to a group.

Here, Ballard was a bit confused about the nature of the names he was adding. Were they users on Facebook? Contacts on his phone? Other users in this service?

Karenna Martin, User 2:

Karenna testing 1 Karenna testing 2 Karenna testing 3 Karenna testing 4

Karenna had similar questions, but otherwise the flow of the screens seemed logical. She also pointed out that several very obvious options were missing, such as when an event was to be planned.

 

Insights:

-The friend menu, Ballard pointed out, had failed to implement a “remove friend” option. I imagine that it would look like most menus of this type on the iPhone, where you can swipe across a name and a “delete” button will appear on the name.

-I should have a menu in which you can add contacts, or sync the app to Facebook. That way messages can be sent out fairly naturally to a large array of users who may not even have this app necessarily

-I had envisioned a push notification on your phone when another user sends you plans, but it might be smarter to just have it sent through Facebook messages or a mass-text for non-Facebook users.

– A calendar-esque format might help for making plans further in advance.

-Rather than only have the ability to send to an entire group, future revisions should have the ability to invite multiple groups, or to only select certain members of a group.

-With multiple friend groups you should have the ability to view past plans made with a group, or manage multiple plans at a time with different groups. A “plan manager” menu should be added in which plans are treated as separate objects that can be moved around and edited with other members of the group.

-Might want to implement something akin to a scheduler that can coordinate meeting times between multiple people as a part of the app.

The Color Matching Game!

Group Members: Sam Payne, Prerna Ramachandra, Dillon Reisman, Abbi Ward

Early idea sketches:

1) Gummi-Bear RGB color-mixer!

Cool!

Sliding your finger on a slide-sensor transfers light between three R-G-B gummi bears!

3) The “Waker-Upper”

A device that detects when your head leans, indicating that you fell asleep. Triggers LEDs in glasses to wake you up

A device that detects when your head leans, indicating that you fell asleep. Triggers LEDs in glasses to wake you up

Idea actually implemented:

We built a color matching game. The computer will generate a random color, then the user must use a touch sensitive slide control to try and match that color. When the user thinks that they have matched the color they press a button to accept. A blue LED will flash if the colors match and a red LED will flash if they do not match. The game then resets and repeats. There is no score, or meta-game these can be added to later models if desired. The difficulty of the game can be adjusted to change how closely the colors must match. This first model of the game was built with a sensor which was not ideal for the task – the resistance characteristic is exponential rather than linear depending where the user presses on it. The controls were adjusted to correct for this, but the next model should be built with a sensor with a linear characteristic to improve the feel of the user’s controls.

Graph showing linear mixing of colors as finger slides across the sensor.

Graph showing linear mixing of colors as finger slides across the sensor.

Sam explains gameplay: 

Pictures of action:

Player attempts to match right diffuser to left diffuser.

Player attempts to match right diffuser to left diffuser.

Diffuser shows off vibrant light in the dark

Diffuser shows off vibrant light in the dark

 

Parts:

Parts List

2 RGB LEDs
1 blue LED
1 red LED
8 330-Ohm Resistors
1 1-kOhm Resistor
1 10-kOhm Resistor (for the switch)
1 slider sensor
1 button switch
2 square sheets of paper for the diffusers
1 paper napkin

Instructions to recreate:

Follow the given schematic(below) to construct the circuit. The diffusers are built using small square pieces of paper (~3×3 inches) that are folded into origami paper ballons (see: http://www.youtube.com/watch?v=tSMLk_zGzf4). Cut a hole in the bottom of the balloon so that the LED can fit. Also, inside the balloon place a small sheet of 1-ply paper napkin to help diffuse the light. Finally, program the Arduino with the following code.

Schematic view of Color game

Schematic view of Color game

Close-up of diffuser

Close-up of diffuser

 

Code used for Arduino:


/*
* Names: Sam Payne, Abbi Ward, Dillon Reisman, Prerna Ramachandra
* Date: 2/10/13
* Class: COS 469, L0
*
* Description: Color Game -- player
*
* Hardware:
* 2 RGB LEDs, 1 red LED, 1 green LED
* 1 slider sensor
* 1 button switch
*
*/

//pin assignments
//user LED
int redUser = 11;  
int greenUser = 10;
int blueUser = 9;
//NPC LED
int redNPC = 6;    
int greenNPC = 5;
int blueNPC = 3;
//victory indicators
int redLED = 13;
int greenLED = 12;
//analog in's
int sensorPin = A0;

//colors assigned user and computer
int targetRed;
int targetGreen;
int targetBlue;
int selRed;
int selGreen;
int selBlue;

int buttonPin = 2;
int buttonState = HIGH;
int sensorValue = 0;

int tolerance = 64; //this can be adjusted for difficulty (lower = more difficult)
int victory = 0;

void setup()  { 
  pinMode(buttonPin, INPUT);
} 

void loop()  { 
  //generate random color
  targetRed = random(0,255);
  targetGreen = random(0,255);
  targetBlue = random(0,255);

  //ensure that color can be selected by slider
  if((targetRed <= targetGreen) && (targetRed <= targetBlue))
  targetRed = 0;
  else if((targetGreen < targetRed) && (targetGreen < targetBlue))
  targetGreen = 0;
  else
  targetBlue = 0;

  //ensure that color can be selected by slider
  if((targetRed >= targetGreen) && (targetRed >= targetBlue))
  targetRed = 255;
  else if((targetGreen > targetRed) && (targetGreen > targetBlue))
  targetGreen = 255;
  else
  targetBlue = 255;

  analogWrite(redNPC, targetRed);
  analogWrite(greenNPC, targetGreen);
  analogWrite(blueNPC, targetBlue);

  selRed = 0;
  selGreen = 0;
  selBlue = 0;
  //adjust user input
  while(1) {
     //read user input color
     sensorValue = analogRead(sensorPin);

     //set display colors based on slider
     setColors_slider(sensorValue);

     //display user color
     analogWrite(redUser, selRed);
     analogWrite(greenUser, selGreen);
     analogWrite(blueUser, selBlue);

     //when user presses accept, save color
     buttonState = digitalRead(buttonPin);

     if(buttonState == LOW) {
        break;
     }

  }
  victory = 1;
  //determine if we are within tolerance
  if(selRed > (targetRed + tolerance)) victory = 0;
  if(selRed < (targetRed - tolerance)) victory = 0;
  if(selGreen > (targetGreen + tolerance)) victory = 0;
  if(selGreen < (targetGreen - tolerance)) victory = 0;
  if(selBlue > (targetBlue + tolerance)) victory = 0;
  if(selBlue < (targetBlue - tolerance)) victory = 0;

  //if user color is in tolerance, flash green LED
  if(victory == 1) {
    for(int i = 0; i < 5; i++) {
      digitalWrite(greenLED, HIGH);
      delay(100); 
      digitalWrite(greenLED, LOW);
      delay(100); 
    }
  } else {
  //else flash red LED
    for(int i = 0; i < 5; i++) {
      digitalWrite(redLED, HIGH);
      delay(100); 
      digitalWrite(redLED, LOW);
      delay(100); 
    }
  }
}

// reads in the value from the slider and sets the RGB LED
/* This function maps from 1D on the slider to 3D (R, G, B)
At any time, one of the 3 dimensions is 0, and another is 255. 
The last scales linearly within particular ranges of color. 
*/
void setColors_slider(int readValA) {
  int readVal = map(readValA, 100, 550, 160, 256);
  /* linear scale
  int R = 160;
  int Y = 176;
  int G = 192;
  int GB = 208;
  int B = 224;
  int P = 240;
  int RH = 256;
  */
  // exponential scale - wrong way
  /*
  int R = 160;
  int Y = 193; 
  int G = 215; 
  int GB = 230; 
  int B = 239;
  int P = 248; 
  int RH = 256; 
  */
  // exponential scale - right way
  // 33, 22, 15, 9, 9, 8
  int R = 160;
  int Y = 168; 
  int G = 177; 
  int GB = 186; 
  int B = 201;
  int P = 223; 
  int RH = 256; 
  //set Red
  if(readVal <= Y) 
     selRed = 255;
  else if(readVal > Y && readVal <= G) 
     selRed = (255 - ((readVal - Y) * 255/(G-Y)));
  else if(readVal > B && readVal <= P)
    selRed = ((readVal - B) * 255/(P-B));
  else if((readVal > P && readVal <= RH) || readVal > RH)
    selRed = 255;
  else
    selRed = 0;

  //set green
  if(readVal > Y && readVal <= GB)
    selGreen = 255;
  else if(readVal <= Y && readVal > R)
    selGreen = ((readVal - R) * 255/(Y-R))-1;
  else if(readVal > GB && readVal <= B)
    selGreen = (255 - ((readVal - GB) * 255/(B-GB)));
  else
    selGreen = 0;

  //set blue
  if(readVal > G && readVal <= GB)
    selBlue = ((readVal - G) * 255/(GB-G));
  else if(readVal > GB && readVal <= P)
    selBlue = 255;
  else if(readVal > P && readVal <= RH)
    selBlue = (255 - ((readVal - B) * 255/(RH-P)));
  else
    selBlue = 0;
}