Sociable Objects: Romantic light sensor
rry
From a few months ago:
Meredith giving CPR to the ITP mannequin:
A quick brick breaker game run in processing and controlled via mobile phone.
Commands are passed to the game over the phone network and internet using Asterisk and Java.
Here’s the Google link to a short presentation I gave in Redial today about the “Golden Age” of Phone Phreaking from 1960-1980. I sourced heavily from 2600 Magazine’s Last H.O.P.E conference (lots of YouTube videos), Wikipedia, Telephreaks, and Phone Trips. I had a great time putting together this presentation and big ups to 2600 and guys like Mark Bernay, whose documentation gives the world a rich view of a bygone era. This presentation is a dumbed down distillation of their hard work.

Realtime link. (Works best in safari…processing.js/canvas is a little buggy)
Documentation put together by ML.
For the mesh network that we’re creating as a class, LJ, Michael, and I are working together to log, mine, and visualize incoming sensor data.
LJ (The Wizard) built a pseudo data generator, a processing sketch which filters/stores the data in a database, and a website that provides a query API. He’s posted more about it in his blog.
Tomorrow we’ll meet as a group and start building out the web interface and visualization. In the meantime, I’ve mocked up an interface and some basic visualizations:
Our assignment for this week was to create a web page that accepts user input and stores it in a database table.
I created a little interactive “to-do” list, something I’ve been looking for since my Remember The Milk free trial ended.
Now that I’ve been playing with CodeIgniter for about a month, and we’re starting to build larger “web apps” in class, I’m realizing how helpful frameworks are for web development. Coding everything by hand seems so tedious and it’s so much harder to stay disciplined about keeping logic/presentation separated.
User registration with phone verification:
I’m working on a trading platform for virtual goods (game items) and as part of that project, I’m exploring different mechanisms for minimizing fraud. In addition to piggybacking off of “passport” APIs like OpenSocial and Facebook Connect for user transparency, it would be nice to verify something in the “physical world.” Phones might work.
My midterm proposal is a registration form with a phone “captcha” field:

On the back-end, PHP+Asterisk AGI+mySQL for generating code, calling users, and storing registration information. Expand to text messages later?
After Googling a bit, I found a company that offers this kind of service: Telesign, so nothing earth-shattering here, but would be good to have the call data and probably cheaper, more flexible to do it in-house.
Potential issues:
- easy to get soft phone #’s anywhere in the world (is there a way to filter?)
- annoy your users with lengthy registration
- long term: scale/cost
ALTERNATE IDEAS:
- phone interface to iTunes library (or small set of it)…..inspired by This American Life –> Dial-a-Song
- phone interface to open source audio books (http://librivox.org/) –> The Illiad (oral tradition)
- Telephone booth confessional (phone-in sacrament of penance)
- Singing telegrams (tajtunes)
- Asterisk + Evernote API or Asterisk + Remember the Milk API
For dynamic web development this week, we were asked to create and manipulate a simple mySQL table
I created a table for Golden Era Russian literature. (link)
For Sociable Objects this week, we were asked to create a doorbell using a pair of XBees (one board attached to a button and the other board attached to a buzzer). Mike K and I made a combination lock (a la physical computing last semester). The user must push three buttons in the correct order to set off the buzzer. Each XBee is connected to an Arduino for managing the logic.
Video documentation:
Arduino code for buzzer:
void setup(){
pinMode(BELL, OUTPUT);
Serial.begin(9600);
}
void loop(){
if(Serial.available() > 0){
serialValue=Serial.read();
Serial.println(serialValue);
if(serialValue!=serialValueOld){
password[counter]=serialValue;
serialValueOld=serialValue;
counter++;
}
delay(10);
if(counter==3){
Serial.print(password[0]);
Serial.print(‘,’);
Serial.print(password[1]);
Serial.print(‘,’);
Serial.println(password[2]);
if (password[0]==’A'&&password[1]==’B'&&password[2]==’C'){
digitalWrite(BELL,HIGH);
for(int i=0; i<300; i++){
Serial.print(‘G’); //correct password has been entered (green light)
delay(10);
}
digitalWrite(BELL,LOW);
counter=0;
} else {
for(int i=0; i<300; i++){
Serial.println(‘R’); //incorrect password has been entered (red light)
delay(10);
}
}
counter=0;
for(int i=0; i<300; i++){
Serial.println(‘H’); //we are ready for the next code entry
delay(10);
}
Serial.flush();
}
}
}