Time Scroll

Time Scroll is a web browser-based 24 hour clock. Every increment of the 24 cycle, down to the second, is rendered to the browser. It starts with 00:00:00 at the top and ends with 23:59:59 at the bottom. Each second, the browser scrolls one tick downward to change the display of the current time. The location of the browser’s scroll bar gives you a general sense of where we are in time relative to the 24 hour cycle.

Time Scroll is written in Javascript and PHP.

[Time Scroll]

Cinematic Timepiece

picture 1cinematic

Time is our measure of a constant beat. We use seconds, minutes, hours, days, weeks, months, years, decades, centuries, etc. But what if we measured time against rituals, chores, tasks, stories, and narratives? How can we use our memory, prediction, familiar and unfamiliar narratives to tell time?

As a child, I remember using the length of songs as a way to measure how much time was left during a trip. A song was an appropriate period to easily multiply to get a grasp of any larger measure like the time left until we arrived to our grandmother’s place. The length of a song was also a measure I could digest and understand in an instant.

The first iteration of Cinematic Timepiece consists of 5 video loops playing at 5 different speeds on a single screen. The video is of a person coloring in a large circle on a wall.

The frame furthest to the right is a video loop that completes a cycle in one minute. The video to the left of the minute loop completes its cycle in one hour. The next completes in a day, then a month, then a year.

Through various iterations, we intend to experiment with various narratives and rituals captured in a video loop to be read as measures of time.

The software was written in OpenFrameworks for a single screen to be expanded in the future for multiple screens as a piece of hardware.

Cinematic Timepiece is being developed in collaboration with Taylor Levy.

Download the fullscreen app version [http://drop.io/cinematicTimepiece#]

Sprocket Rhinoscript

sprockets-converted-01

UPDATE: this script generates inaccurately spaced teeth. sorry! fixes in new version coming soon. (6.25.09)

Here’s some basic rhinoscript code to draw your own sprockets based on the number of desired teeth, chain pitch and roller diameter. It’s very basic, but enough to draw what you want and get some custom sprockets lasercut. Draw a circle that’s larger than what you think it’s going to be in top view, then run the code.

Sun Angle Script

sun_angle

The following rhinoscript code calculates and draws a series of sun angles based on the time, day and latitude.
NOTE: in my test there’s something happening to the angles around noon causing them to be inaccurate because the calculations are based on cos values. All other times besides noon should be fine.

Updated version with nicer UI from Ezio. Thank you!
Download:sunbatchrender_ezb.rvb

P.Life V2


plife at IAC from che-wei wang on Vimeo.

plife_06176

plife_04812

plife_04240

plife_03618

plife_02422

plife_01146

plife_00714

plife_05734

P.Life is a large scale interactive screen designed for the IAC’s 120′ wide video wall. In the world of P.Life, Ps run across the 120′ screen frantically moving material from one house to another. Along the way, Ps exchange pleasantries (based on text message inputs) as they pass by each other, offering a helping hand to those in need. The landscape shifts and jolts based on audio input from the audience, tossing Ps into the air. Playful jumps into midair often end in injury, forcing them to crawl until a fellow P comes by to help out.

Features
Text messaging to create new characters of different sizes and dialogues.
Audio input to influence landscape
Performance backend to influence landscape
Ps move with life-like motion as they walk, jump, fall, run skip, crawl, carry boxes, push boxes, etc.
P.Life is written in OpenFrameworks and uses the Most Pixels Ever library

By Che-Wei Wang and Jiaxin Feng
Live Music by Taylor Levy

wuyingxian_3132028791_7cb2b3be0b_bwuyingxian_3131974377_090d1153da_b
photos by wuyingxian

Elevator P

Elevator P interprets random conversation in an elevator into poetry and publishes them immediately on twitter. Using a hidden microphone, Elevator P captures unexpected chatter, un-staged and raw. The interpreter elevates mundane elevator conversations into beautiful flowing poetry capturing the deep essence of each dialogue.

Haiku Poetry.
http://twitter.com/chatterbot

P.Life

p02

P.Life is a large scale interactive screen designed for the IAC’s 120′ wide video wall. In the world of P.Life, Ps run around growing, living, and dying, as the landscape continuously changes creating unexpected situations challenging their existence.


Scenario

Screen fades from black to dawn and rising sun along a horizon. The bottom third of the screen shows a section through the landscape cutting through underground pipes, tunnels, reservoirs, etc. Towards the top the surface of the landscape is visible as it fades and blurs into the horizon and sky.
A few Ps wander around the flat landscape. A number appears on screen for participants to send an SMS message to with their name. As participants send SMS messages, more groups of Ps appear on screen representing each SMS and wander across the landscape. The landscape begins to undulate as the audience interacts with the screen, creating of hills, valleys, lakes, and cliffs. Ps running across the landscape fall to their death as the ground beneath their feet drops or ride down the side of a hill like a wave as a hill moves a cross the screen like a wave. Ps that fall to their death slowly sink into the ground and become fertilizer for plant-life, which is then eaten by other families of Ps allowing them to multiply.

p01

Features
SMS listener to make new families of Ps
An array of IP cameras to transmit video for screen interaction
Background subtraction to capture the audience’s gestures
or Open CV with blob detection or face detection to capture the audience’s gestures
or IR sensors to capture the audience’s gestures
or Lasers and photo-resistors to capture the audience’s gestures
Multi-channel audio triggers for events in P-Life based on location
Background elements and landscape speed through sunrise to sunset in a 3 minute sequence
Ps with life like motion as they walk, jump, fall, grow, climb, swim, drowned, die, stumble, flip, run, etc.
pixelated stick figures? large head?
Simple 8bit game-like soundtrack
Various plant-life grown from dead Ps

Precedents
Lemmings, N for Ninja, Funky Forrest, Big Shadow, eBoy, Habbo

Technical Requirements
IP camera array
Mulit-channel audio output

MultiMesh

Rhino loves to crash when it attempts to mesh a large set of surfaces in one shot. This often happens when you go to render and Rhino has to mesh all the objects in the scene. The MultiMesh plugin meshes multiple objects one at a time. By meshing your enormous elaborately detailed scene before you render, you save time and your sanity.

Version:0.03
MultiMesh.rhp.zip

Feedback Playback 2

dhpicture-9dhpicture-7

fb-1-352009fb-2-352009fb-3-352009

FeedBack PlayBack is a dynamic film re-editing and viewing system. The users’ physical state determines the visceral quality of scenes displayed; immediate reactions to the scenes feed back to generate a cinematic crescendo or a lull. We use material that is rigorously narrative, formulaic, and plentiful: the action movie series Die Hard, starring Bruce Willis. A narrative sequence key breaks any given Die Hard movie into narrative elements, corresponding clips were collected from each of the Die Hard movies. Individual clips fall into high, medium, and low action/arousal categories. The user is seated, and places his or her hands on a Galvanic Skin Response (GSR) detection panel (GSR readings are the same kind of data collected in lie detector test). After calibration, the movie begins showing, and clips are displayed depending on the user’s level of arousal and engagement. The narrative sequence is maintained, though the clips are pulled from any of the movies.

Feedback Playback

FeedBack PlayBack is an interactive, dynamic film re-editing/viewing system that explores the link between media consumption and physiological arousal.

This project uses galvanic skin response and pulse rate to create a dynamic film re-editing and veiwing system. The users’ physical state determines the rhythm and length of the cuts and the visceral quality of scenes displayed; the user’s immediate reactions to the scenes delivered, feeds back to generate a cinematic crescendo or a lull. This project exploits the power of media to manipulate and alter our state of being at the most basic, primal level, and attempts to synchronize the media and viewer– whether towards a static loop or a explosive climax.

In a darkened, enclosed space, the user approaches a screen and his or her rests fingertips on a pad to the right of the screen. The system establishes baseline for this users physiological response, and re-calibrates. Short, non-sequential clips of a familiar, emotionally charged film– for example, Stanley Kubrick’s 1980 horror masterpiece “The Shining” –are shown. If the user responds to slight shifts in the emotional tone of the media, the system amplifies that response and displays clips that are more violent and arousing, or calmer and more neutral. The film is re-edited, the narrative reformulated according to this user’s response to it.

Feedbak Playback is by Zannah Marsh and Che-Wei Wang

GSR Reader

Galvanic skin response readings are simply the measurement of electrical resistance through the body. Two leads are attached to two fingertips. One lead sends current while the other measures the difference. This setup measures GSR every 50 milliseconds. Each reading is graphed, while peaks are highlighted and an average is calculated to smooth out the values. A baseline reading is taken for 10 seconds if the readings go flat (fingers removed from leads).

Etek EB-85A GPS Example Code

etekgps5hz-02-m.jpg

Here’s some example Arduino code for getting a Etek EB-85A module up and reading latitude and longitude (will probably work with most GPS modules). You can purchase a module from Sparkfun.

The module only needs power, ground, rx and tx. Most modules like the Etek start sending NMEA strings as soon as it has power. The Etek module takes a minute or two to get a satellite fix from a cold start in urban environments. Signals drop out once in a while between tall buildings at street level even with DGPS and SBAS. On a clear day, if you’re lucky, you can get a signal sitting by the window in urban canyons.

//Etek GPS EB-85A Module Example
//by Che-Wei Wang and Kristin O'Friel
//32 Channel etek GPS unit
//modified from original code by Igor González Martín. http://www.arduino.cc/playground/Tutorials/GPS
boolean startingUp=true;
boolean gpsConnected=false;
boolean satelliteLock=false;

long myLatitude,myLongitude;

//GPS
#include 
#include 
int rxPin = 0;                    // RX PIN 
int txPin = 1;                    // TX TX
int byteGPS=-1;
char linea[300] = "";
char comandoGPR[7] = "$GPRMC";
int cont=0;
int bien=0;
int conta=0;
int indices[13];

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void setup() {
  //GPS
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);

  for (int i=0;i<300;i++){       // Initialize a buffer for received data
    linea[i]=' ';
  }
    Serial.begin(4800);
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void printInfo(){

  Serial.print("myLat: ");
  Serial.println(myLatitude);
  Serial.print("myLong: ");
  Serial.println(myLongitude);

  if(gpsConnected==true){
    Serial.println("GPS connected");  
  }
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//convert NMEA gps syntax of degrees and minutes to + or - decimal point degrees
long decimalMinutes( long l, char dir){ 
  //latitude ddmmmmmm
  //longitude dddmmmmmm
  long decimal;                 //ddmmmmmm
  float ll=(float)l/1000000.0;  //dd.mmmmmmm
  int dd=floor(ll);             //dd.mmmmmm
  float mmmmmm=(ll-dd);         //  .mmmmmm
  float dddddd=mmmmmm/6.0*10.0; //  .mmmmmm convert minutes to decimal degrees .dddddd
  decimal=(float)(dd+dddddd)*1000000.0;

  if(dir=='W'||dir=='S')decimal=decimal*-1.0;
  return decimal;
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void readGPS() {
  byteGPS=Serial.read();         // Read a byte of the serial port
  if (byteGPS == -1) {           // See if the port is empty yet
    //delay(100); 
    gpsConnected=false;
  } 
  else {
    gpsConnected=true;
    linea[conta]=byteGPS;        // If there is serial port data, it is put in the buffer
    conta++;                      

    //printByte(byteGPS); //print raw rx

    if (byteGPS==13){            // If the received byte is = to 13, end of transmission
      cont=0;
      bien=0;
      for (int i=1;i<7;i++){     // Verifies if the received command starts with $GPR
        if (linea[i]==comandoGPR[i-1]) bien++;
      }

      if(bien==6){               // If yes, continue and process the data
        for (int i=0;i<300;i++){
          if (linea[i]==','){    // check for the position of the  "," separator
            indices[cont]=i;
            cont++;
          }
          if (linea[i]=='*'){    // ... and the "*"
            indices[12]=i;
            cont++;
          }
        }

        //satellite lock
        char satLock;
        for (int j=indices[1];j<(indices[2]-1);j++){
          // Serial.print(linea[j+1]); 
          // Serial.println("");
          if(linea[j+1]=='V')satelliteLock=false;
          else satelliteLock=true;
          satLock=linea[j+1];
        }

        //latitude
        char NS;
        char tempLat[9];
        int tempLatCount=0;
        for (int j=indices[2];j<(indices[3]-1);j++){
          //print raw
          if(linea[j+1]!='.'){//remove decimal
            //Serial.print(linea[j+1]); 
            tempLat[tempLatCount]=linea[j+1];
            tempLatCount++;
          }
        }

        //Serial.println("");
        for (int j=indices[3];j<(indices[4]-1);j++){
          //Serial.println(linea[j+1]); 
          NS=linea[j+1];
        }

        // myLatitude=strtol(tempLat);
        long myLat=strtol(tempLat, NULL, 10);
        //convert degrees and minutes to decimal degrees
        myLatitude=decimalMinutes(myLat,NS); 

        //longitude
        char EW;
        char tempLong[10];
        int tempLongCount=0;

        for (int j=indices[4];j<(indices[5]-1);j++){
          //print raw
          if(linea[j+1]!='.'){//remove decimal
            //Serial.print(linea[j+1]); 
            tempLong[tempLongCount]=linea[j+1];
            tempLongCount++;
          }
        }
        //Serial.println("");

        for (int j=indices[5];j<(indices[6]-1);j++){
          // Serial.println(linea[j+1]); 
          EW=linea[j+1];
        }

        long myLong=strtol(tempLong, NULL, 10);
        //convert degrees and minutes to decimal degrees
        myLongitude=decimalMinutes(myLong,EW);

        if (startingUp){
          //gps setup strings for Etek GPS modul
          Serial.print("$PMTK501,2*28\r\n");//turn on dgps
          Serial.print("$PMTK313,1*2E\r\n");//turn on sbas
          Serial.print("$PMTK314,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29\r\n");//gprmc only
          startingUp=false;
        }
      }
      conta=0; // Reset the buffer
      for (int i=0;i<300;i++){  
        linea[i]=' ';       
      }                 
    }
  }
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void loop() {
  readGPS();
  printInfo();
  //do stuff here
  //myLatitude is a long like 40689667 which is 40.689667 degrees
  //or -73946641 which is -73.94641

}

Infinite Mouse Tracking

I wanted to use the mouse as a simple surface optical encoder to get infinite panning motion. The problem with reading mouse coordinates on the screen, is that once the mouse reaches the edge of the screen, it stops counting. So a simple solution is to reposition the mouse (using the robot class) every few frames and calculate the change in mouse positions.


//InfiniteMouseTracking
//by Che-Wei Wang
//2.20.2008

float mapPositionX;
float mapPositionY;
long count=0;
int moveX=0;
int moveY=0;

void setup() 
{
  size(screen.width,screen.height,P3D);
  mapPositionX=width/2;
  mapPositionY=height/2;

  //noCursor();
  
  //set the mouse postion once before the program begins
  try {
    Robot robot = new Robot();
    robot.mouseMove(width/2, height/2);    
  } 
  catch (AWTException e) {
  }

}

void draw()
{
  background(0);

  //reset the cursor Position every few frames
  if(count%4==0){
    try {
      Robot robot = new Robot();
      robot.mouseMove(width/2, height/2);    
    } 
    catch (AWTException e) {
    }
    moveX=mouseX-pmouseX;
    moveY=mouseY-pmouseY;
  }

  count++;

  //new position= old position + movement * decay
  mapPositionX=mapPositionX+moveX*.8;
  mapPositionY=mapPositionY+moveY*.8;

  stroke(255);
  line(width/2,height/2,mapPositionX,mapPositionY);
  ellipse(mapPositionX,mapPositionY,100,100);

}

Sensors Galore

An example of blobDetection, Ess, sms, and ocd all rolled into one sketch. Click and drag on the screen to move the HUD sliders around. (nothing is going to load here. copy the code to your processing sketch to run it)

Grass 01

Bad Eating Habits and How to Break Them

Nighttime snacking, emotional eating, junk-food binges — sound familiar? Break these common bad eating habits for quick weight loss results. Read more about sonofit.

Medically Reviewed

bad eating habits

It’s not just willpower, or a lack thereof, that makes us overeat and gain weight. Sometimes, it’s that sneaky bad habit you developed without even realizing it, like dashing out the door some mornings without breakfast, or munching chips in front of your favorite TV show. The next thing you know, one little bad habit can equal out to a lot of weight gain. The worst part is, you might not even realize what you’re doing to your diet.

Here, quick fixes for some of the most common bad eating and lifestyle habits that can cause you to pack on pounds. Try out metaboflex.

The Bad Habit: Mindless Eating

The Bad Habit: Mindless Eating

Cornell University food psychologist Brian Wansink, PhD, discovered that the larger the plate or bowl you eat from, the more you unknowingly consume. In one recent study, Wansink found that moviegoers given extra-large containers of stale popcorn still ate 45 percent more than those snacking on fresh popcorn out of smaller containers holding the same amount.

The Fix: Eat from smaller dishes. Try swapping out your large dinner plate for a salad plate, and never eat straight from a container or package. Check out these metaboost connection reviews.

The Bad Habit: Nighttime Noshing

The Bad Habit: Nighttime Noshing

Diet folklore suggests that eating at night is almost never a good idea if you want to lose weight. Although many experts say this old adage is pure myth, a new animal study backs up the idea that it’s not only what you eat but also when you eat that counts. Researchers at Northwestern University found that mice given high-fat foods during the day (when these nocturnal animals should have been sleeping) gained significantly more weight than mice given the same diet at night. Learn more about alpilean.

The Fix: The diet take-away here? After dinner, teach yourself to think of the kitchen as being closed for the night, and brush your teeth — you’ll want to eat less with a newly cleaned mouth. If a craving hits, wait 10 minutes. If you’re still truly hungry, reach for something small like string cheese or a piece of fruit.

The Bad Habit: Endless Snacking

The Bad Habit: Endless Snacking

Here’s a bad habit many are guilty of: snacking round-the-clock, often on high-calorie foods that are full of empty carbs. A recent study at the University of North Carolina found that it isn’t just a problem for adults: kids are snacking more and more often on unhealthy junk food including salty chips, soda, and candy.

The Fix: Keep only healthy snacks within reach, such as hummus, carrots and cucumber slices, air-popped popcorn, yogurt, and almonds, says Jessica Crandall, RD, a spokeswoman for the American Dietetic Association. Don’t stock your desk or pantry with potato chips or cookies you know you can’t resist.

The Bad Habit: Skipping Breakfast

The Bad Habit: Skipping Breakfast

You know that breakfast really is the most important meal of the day, but with so many other tasks competing for your attention, you may decide you don’t have time to eat. When you skip meals, your metabolism begins to slow, Crandall explains, plus, breakfast gives you that boost of energy you need to take on your day. Without this fuel, chances are, you’ll just overeat later. A new study of Chinese schoolchildren found that those who skipped breakfast gained significantly more weight over a two-year period than those who ate a morning meal.

The Fix: Have ready healthy breakfast foods you can consume on the run, Crandall says. If you’re rushed, try easy items such as whole fruit, yogurt, homemade cereal bars, and smoothies.

The Bad Habit: Emotional Eating

The Bad Habit: Emotional Eating

You had a bad day at the office, and when you get home, you open the refrigerator and eat — not a good diet strategy. “You put food in your mouth as a coping mechanism,” Crandall says. A number of studies confirm that emotions, both positive and negative, can cause people to eat more than they should, an easy weight-loss stumbling block.

The Fix: Find a new stress-buster, Crandall says. “If you’re stressed out at work, when you get home, take a walk instead of eating or call a friend who will be empathetic,” she suggests. “You can vent and take some of the stress off your shoulders.” Choose any activity you like as long as it keeps you out of the kitchen.

00:00 / 00:00
25 Tips for Weight Loss That Actually Work

The Bad Habit: Eating Too Quickly

The Bad Habit: Eating Too Quickly

Wolfing down your food, whether you’re snacking or eating a meal, doesn’t give your brain time to catch up with your stomach. Your brain doesn’t signal that you’re full until about 15 to 20 minutes after you’ve started eating. If you gulp down your meal in 10 minutes or less, you could end up eating way more than you need. In a study of 3,200 men and women, Japanese researchers found that eating too quickly was strongly associated with being overweight.

The Fix: To slow down your eating, physically put your fork down between bites, take smaller bites, and be sure to chew each bite thoroughly. Also, drinking water throughout your meal will help you slow down and feel fuller as you go.

The Bad Habit: Not Getting Enough Sleep

The Bad Habit: Not Getting Enough Sleep

Could not getting enough sleep ruin your weight-loss efforts? Yes, according to a recent analysis by researchers in Tokyo. They found that men and women who slept five hours or less a night were more likely to gain weight than those who slept seven hours or more.

The Fix: Establish a routine for yourself, and try to go to bed and wake up at about the same times every day, even on weekends. Keep the bedroom dark and comfortable, and avoid TV or computers for at least an hour before bed. If you need extra motivation to shut off the lights early, remember that the better you sleep, the better the number when you step on the scale in the morning.

The Bad Habit: Vegging Out With Video Games

The Bad Habit: Vegging Out With Video Games

If you’re watching TV, sitting in front of a computer, or playing video games, it’s not only mindless snacking in front of the screen that you have to worry about. A new study found that teens who played video games for just one hour ate more the rest of the day, which resulted in weight gain. The researchers weren’t sure why playing video games caused the boys to eat more, but said it’s possible that sitting in front of a computer all day could have a similar effect on adults and lead to snacking.

The Fix: Take frequent breaks when you’re in front of the computer — get up and walk around the room or office every 15 to 30 minutes. When the workday or your favorite TV show ends, remember to carefully monitor what you consume to you don’t overstuff yourself.

Chess Clock

chess_clock01.png

I couldn’t find a fullscreen chess clock so I wrote a very simple application to do just that. The ring counts down the total number of seconds remaining instead of the traditional clock with second and minute hands. A small dot at the center of each ring indicates which player is white and turns red to indicate the flag. While one player’s display is couting down, the other’s is dimmed. The timer is easily adjusted and displayed at the center of the screen prior to starting the timer from 1-150 minutes.

MultiPipe

MultiPipe is a simple plugin for Rhino 4.0 to pipe multiple curves at once with start and end diameter options and cap type options. Unzip and install by dragging the plugin into Rhino. The command line for the tool is “MultiPipe’.

Download: multipipe04.zip

Haptic Clock

dsc07396.JPGdsc07393.JPG
The Haptic Clock is a small clock program for Java powered mobile phones. The clock conveys time through a sequence of vibrations so you never have to pull the phone out of your pocket to tell time. The idea behind it was to create a clock that would train my body to understand time better.
Long vibrations are the number of hours of the current time on a 12 hour clock, so 6pm and 6am are both 6 vibrations. The shorter vibrations are the number of minutes divided by 5. So 4 vibrations is 20 minutes and 7 vibrations is 35 minutes. Example: (3) long vibrations and (6) short vibrations means it’s 3:30. Just in case you do want to see the time, the screen displays the time with tick marks for hours, minutes and seconds.
Instructions: Press to vibrate the current time. Press ‘0’ to exit program. UP and DOWN to control the speed of vibrations. Time alerts (vibrations) will occur automatically every 0, 15, 30, 45 minutes on the hour as long as the program is running.  Press any key to vibrate the current time.  Move the joystick to change options.  Options include vibration speed and vibration frequency (time between automated vibration time alerts).

Current Version: 0.08
Released:5.24.2007
Creator: Che-Wei Wang
License: GNU Public License (source)
Download Beta: Haptic Clock 08.jad, Haptic Clock 08.jar
Beta means it may not work on your phone or worse, may break your phone. Install and use at your own risk.
Tested on: Nokia E70
Issues: J2ME drains the batteries. Looking for ways around it, or a more efficient platform.