Friday, December 25, 2009

New ARM Microcontroller boards

I have found out about some new ARM microcontroller boards:

Mbed - founded by ARM folks, an LPC1768 ARM Cortex-M3 based board. The "special sauce" is that the board looks like a USB drive that you drop your programs onto, as well as providing a web-based development environment, making it more cross-platform and usable even with "locked-down" computers. It comes in a "STAMP-like" 40-pin 0.1" pitch DIP form-factor. C++ programming with many peripheral API libraries. It has 10/100 Ethernet MAC and an IP stack, but you need to add an Ethernet jack (like the MagJack SI-60002-F, which is ~$5). A 100 MHz ARM with 64 KB of SRAM, 512 KB of Flash. It looks like 25 GPIOs pins that can also be 6x12-bit A/D, one 10-bit D/A, 6xPWM out, 2x I2C, 2x CAN, 2x SPI, 3xSerial ports. 4.5v-9.0v input, 3.3v and 5.0v regulated outputs. Pre-order price is $60. Supposedly final MSRP is $99. I think $60 is more reasonable, because at $99 you have to ask yourself why not go Make Controller kit at $120 and have all the motor drivers.

ET-STM32 Stamp Module - ARM Cortex M3 processor in "STAMP" form-factor with 512K flash, 64K RAM. Has 48 GPIO ports including 16x12-bit A/D, 2xD/A, 5 USARTs, CAN, I2C, USB (but no USB connector), needs 3.3VDC, $24.90.

LeafLabs Maple - Another ARM Cortex M3 board in an Arduino form-factor. 128K flash, 20K RAM, 39 digital input/output pins, 16 analog inputs, USB, 3 USARTs, SPI/I2C, 3-18VDC input. Uses an open-source, Arduino like sketch programming interface. $39.99, but sold out right now.






Tuesday, December 22, 2009

Example Phy2Phy Interaction web service

So here is an example of a Phy2Phy interaction web service: http://phy-to-phy.appspot.com

The concept is that the web service is a database of devices and their states. The main URL is a "human interface" that displays the entire database and lets you enter a device name and it's current state.

The "computer interface" is at http://phy-to-phy.appspot.com/update. You perform an HTTP GET, with a URL of the form:

http://phy-to-phy.appspot.com/update?q=[device to query]&d=[device to set state]&s=[state]

So for example, if I want to set the state of device "PIR" to "1" and at the same time query the state of "SolarCell", I'd send:

http://phy-to-phy.appspot.com/update?d=PIR&s=1&q=SolarCell


And the response would be something like:

SolarCell:1.8

Indicating that the device "SolarCell" has a state "1.8". When calling the service, you can leave out the "q=" query if you just want to set a device to a state, or leave out the "d=" and "s=" if you just want to query for a device state.

So for example, on an Arduino you would attach an Xport set to connect using TCP to IP address 74.125.91.141 (phy-to-phy.appspot.com), port 80, and using the NewSoftSerial library, your code snippet to set "PIR" to "1" would look like:

NewSoftSerial xport(3,2);

...

xport.print("GET /update?d=PIR&s=1 HTTP/1.1\r\nHost: phy-to-phy.appspot.com\r\n\r\n");

On a Make Controller, you would send the same string using SocketWrite.

In a few weeks, I will put up some code that also reads queries back from the phy2phy intermediation web service as well.

Sunday, December 20, 2009

Web service for phy2phy working

I have been able to get an Arduino+Xport Direct and a Make Controller to talk to each other over my Google web app for phy2phy interconnection! More details later.


- Posted using BlogPress from my iPhone

Location:World Way,Los Angeles,United States

Friday, December 11, 2009

Google App for Networked Physical Computing

Networked physical computing projects face two major problems: finding each other on the Internet, and dealing with NAT filtering at Internet access routers.

Previously, I have dealt with this using a cheap shell account, where I ran a python server program at a known IP address to receive UDP packets sent by physical computing devices. The server program could then help the devices communicate by sending UDP packets back to the physical computing devices.

Unfortunately, I am finding that UDP, the unreliable datagram protocol, is becoming less and less reliable all the time. In particular, it looks like my cheap shell account system is rejecting small UDP packets with just a few characters of payload.

Given that the world is going to Web services, I figured hey, Google Apps are free (for low-CPU utilization use), so I went ahead and created a Google App for generalized physical computing networking.

The App keeps a database of devices and their states. For example, device "board1lLED" may have the state "1" to indicate an LED is on. If you hit the main "/" URL, you get a human-readable display of all the received devices and their states and an opportunity to enter your own device and state for an update.

Physical computing devices interface with the web service through the "/update" URL using a GET. The "d" parameter is a device to set to a state indicated by the "s" parameter, and a "q" parameter allows you to also query for the state of a device. For example GETing "/update?d=board1LED&s=1&q=button1" sets board1LED to 1 and gets the value of button1, which may return "button1:pressed" if its state is "pressed".

The App uses about 40 CPU mS per run, thus the 6.5 CPU hour/day quota should allow me to hit it 6 times per second all the time without running over the quota.
import cgi
from google.appengine.ext
import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext import db

class DeviceState(db.Model):
device
= db.StringProperty()
device_state
= db.StringProperty()

class MainPage(webapp.RequestHandler):
def get(self):
self.response.out.write(
'<html><body>')
states
=db.GqlQuery("SELECT * FROM DeviceState ORDER BY device")
for state in states:
self.response.out.write(
"<div>"+cgi.escape(state.device)+":"+
cgi.escape(state.device_state)
+"</div>")
self.response.out.write(
"""
<form action="/humanSet" method="get">
<div>Device:<input type="text" name="d"></div>
<div>State:<input type="text" name="s"></div>
<div><input type="submit" value="submit"></div>
</form>
</body>
</html>
""")

class UpdateState(webapp.RequestHandler):
def get(self):
if(self.request.get('d')):
states
=db.GqlQuery("SELECT * FROM DeviceState WHERE device = :1",
self.request.get(
'd'))
if(states.count()>0):
for state in states:
state.device_state
=self.request.get('s')
state.put()
else:
deviceState
= DeviceState()
deviceState.device
= self.request.get('d')
deviceState.device_state
= self.request.get('s')
deviceState.put()
if(self.request.get('q')):
if(self.request.get('q')=='*'):
states
=db.GqlQuery("SELECT * FROM DeviceState ORDER BY device")
else:
states
=db.GqlQuery("SELECT * FROM DeviceState WHERE device='"+
self.request.get(
'q')+"'")
for state in states:
self.response.out.write(cgi.escape(state.device)
+":"+
cgi.escape(state.device_state)
+"\r\n")

class HumanSet(webapp.RequestHandler):
def get(self):
states
=db.GqlQuery("SELECT * FROM DeviceState WHERE device = :1",
self.request.get(
'd'))
if(states.count()>0):
for state in states:
state.device_state
=self.request.get('s')
state.put()
else:
deviceState
= DeviceState()
deviceState.device
= self.request.get('d')
deviceState.device_state
= self.request.get('s')
deviceState.put()
self.redirect(
'/')

class Reset(webapp.RequestHandler):
def get(self):
states
=DeviceState.all()
for state in states:
state.delete()
self.response.out.write(
"All Data Deleted\n")

application
= webapp.WSGIApplication([('/',MainPage),
(
'/humanSet',HumanSet),
(
'/update',UpdateState),
(
'/reset',Reset)],debug=True)

def main():
run_wsgi_app(application)

if __name__ == "__main__":
main()

Wednesday, November 18, 2009

USB debugging Make Controller Kit

One of the problems of the Make Controller system is that there is not too much example code out there on the Net. I was having a very hard time understanding how the Debug system worked. It turns out that the Debug system is done through OSC, so I just gave up and started using the much simpler USB system.

When compiling your program (aka Firmware) in MCBuilder, don't forget to go into "Info" and under the "Config" tab make sure you check "Include USB System".

At least on OS X, once you've built and uploaded your compiled program to the Make Controller board, you need to unplug the USB cable between your computer and the board, and plug it back in. Then bring up the "USB Console". If there is nothing in the "port" selector, unplug the USB cable and plug it back in one more time. This time, you should see some kind of "/dev/..." device in your port list, and that means that the USB system is working. If not, unplug and replug the USB cable again.

Here is a sample code snippet that should output some data to the USB Console:

char buffer[40];
int blen;

Usb_SetActive(1);
blen=sprintf(buffer,"delta=%d\n",my_time-last_time);
Usb_Write(buffer,blen);

Sunday, August 02, 2009

Five servos on the Make Controller Application Board

So can you run five servos on the Make Controller Application board? Yes, four of the "normal" servo connections and one (and possibly more) on the PWM outputs. Here is an example of five servos:


// five servos.c
// created Aug 1, 2009

#include "config.h"
#include "appled.h"
#include "pwmout.h"
#include "servo.h"


void UDPTask( void* p );
void Blink(void* p);
struct netconn* udpSocket;

void Run( ) // this task gets called as soon as we boot up.
{
AppLed_SetActive(0, 1); // enable LED 0
PwmOut_SetActive(0, 1); // between digital outs 0,1
Servo_SetActive(0,1);
Servo_SetActive(1,1);
Servo_SetActive(2,1);
Servo_SetActive(3,1);

Servo_SetSpeed(0,1023);
Servo_SetSpeed(1,1023);
Servo_SetSpeed(2,1023);
Servo_SetSpeed(3,1023);
PwmOut_SetDividerAValue(64); // servo limits duty 25 to 110
TaskCreate( Blink, "Blink", 1000, 0, 1 );
}


void Blink(void* p)
{
(void)p;
int i=25;

Led_SetState(1);
Sleep(1000);
while(1)
{
Led_SetState(0);
Sleep(100);
Led_SetState(1);
Sleep(100);
Servo_SetPosition(0,(i % 85)*12);
Servo_SetPosition(1,((i+20) % 85)*12);
Servo_SetPosition(2,((i+40) % 85)*12);
Servo_SetPosition(3,((i+60) % 85)*12);
PwmOut_SetDuty(0,i);
i++;
if(i>110){
i=25;
}
}
}

Tuesday, July 21, 2009

Ignite LA Tuesday Night July 21

"The first Ignite LA is tomorrow. We've got a great line-ups of talks. The topics range from social engineering to humpback whales. As always speakers will get 20 slides that auto-advance every 15 seconds."
I'm speaking on PHY2PHY. More info here.

Cinesapce
6356 Hollywood Boulevard
Los Angeles, California

6:30pm Geek Dinner starts (with drink specials from 6:30-7)
8pm-9:30 Ignite talks
10pm Cinespace opens to the general public for Dim Mak (you're welcome to stay for the band)


Tuesday, July 14, 2009

Make Controller & Application Board - First Impressions

The sad truth is that I have received report that one side of "Breath" that I shipped across the continent for a test "smoked" when turned on after it was received, and no, I was not shooting for "smoke-over-IP".

I have a love-hate relationship with Arduino. The system is really easy to get going and use, but its limitations in speed, flakey software serial port, and questionable thermal properties of its voltage regulator system always bug me. And for a project like "Breath," I have to add a bunch of other elements (Xport, Solid state relay, etc.)

Needless to say, I was a little despondent about the melt down, but then, in the midst of my preparations for hari kiri, it came to me: I bought a Making Things Make Controller 2.0 and Make Application Board 2.0 (purchased as the Make Controller Kit). This combo packs a good microcontroller with Ethernet and 1 Amp digital outputs, powered by 5-24V DC or USB, with four servo connectors and four on-board LEDs as well, and oh yeah a serial port.

My first day thoughts:

Hardware: a 10/10. Awesome stuff, all on one board, and the Ethernet appears to DHCP correctly (i.e. also grabs a gateway), and no problem with the hefty digi driver outputs driving a small 12V fan (with a 12V power supply). The size is a bit smaller than I had imagined, which is nice:


Make Controller Application Board Size

Documentation: 4/10. All the documents are there, but the organization is very confused. There are several tutorials, but you have to work through a bunch of them to get over the initial hump of understanding what is going on. Plus the two different versions of the board and the many different ways to build firmware are confusing.

So here are some things you should know:

0) Look at the Make Application Board v2.0 documentation. This will help you from going crazy since most of the documentation refers to the older version of the board. Note that the 2.0 board does not have DIP switches or a potentiometer.

1) The Make Controller 2.0 is a board that fits into the Make Application Board (or a few other boards they sell as well).

2) Out-of-the-box, the Make Controller runs firmware called "Heavy" that can do USB & Ethernet I/O and accepts Open Sound Control (OSC) commands. By the way, download the most recent version of "Heavy" as you may want to put it back on the board later after your erase it. Make Controller downloads are here.

3) mchelper is the first program you want. It will show you any Make Boards hooked up via USB, or any Make Boards it can find on the LAN (note: if you are running both wired and wireless LANs on your laptop, you may need to turn the one which your board is not on to find it, it looks like mchelper only searches one LAN). Here is a screenshot:

mchelper on OS X

4) Once you've played around with sending some OSC commands (like "/appled/0/state 1" which turns on one of the LEDs on the board), you can try to write and build your own firmware with mcbuilder. There isn't too much documentation on it, but you can think of it like the Arduino software you run on your PC to write programs and then upload them to the Arduino. I don't think you need those other "toolchains" if you aren't doing anything too bizarre. But to upload your ".bin" built files to the board, you need to first erase the board.

5) I can't get the erase to work with USB or Ethernet from mchelper on OS X! So after looking around, I found out there was an "erase" function on the board: you short 3.3V to "erase" on the upper left of the board, then power cycle. I went ahead and soldered in two header pins and I can short them easily that way, or hook up a pushbutton if I need to erase it often during development. See the upper middle of this photo:

Make Controller Erase

6) Once you have erased the board, you can upload your ".bin" program from either mchelper or mcbuilder.

7) mcbuilder has a small number of "examples" to get you going, much like the Arduino IDE software. For example, there is a web server example that allows you to light up the LEDs on the board through a web form.

So I'm pretty happy: with "Heavy" installed right now, the board DHCPing an IP address from my wired/wireless LAN router, I can send OSC commands using mchelper over wireless through my router to the wired connection to the board, and can drive a small 12V fan with the digital outputs using the "motor" OSC commands. I think there is hope for "breath" to be ported to the Make Controller, but now I need to learn a bit more about writing software for it.

Wednesday, July 08, 2009

Breath-over-IP


The "Breath-over-IP" project is a PHY2PHY project to deliver someone's breath across the Internet. It is based on an Arduino with a double stack of shields. The first shield is a SparkFun Arduino protoshield where I mount some resistors and a solid-state relay. I used wire-wrap sockets to provide a stand-off from the Arduino:

Protoshield with wire wrap sockets

Then on top of that I added an AdaFruit Xport shield, which I populated with a Lantronix Xport Direct:


Stacking Arduino, Protoshield, and Ethernet shield

Arduino, Protoshield, and Ethernet shield

Now I had to build the Breath sensor. I tried using gutted case fans, but they were always a bit too hard to blow. Here I am testing an IR led and IR phototransistor on a breadboard with a gutted case fan:

IR emitter/detector pair and fan

I eventually decided on using a replacement Kestrel anemometer impeller. To provide some kind of structure to mount the IR LED and phototransistor to, I used FastSteel:

FastSteel FastSteel Kestrel Anemometer Impeller Impeller encased in FastSteel

Then I added the side-looking NTE 3029B IR LED (with a 220 Ohm current-limiting resistor off 5V) and NTE 3034A IR Phototransistor detector (with a 10K Ohm pull-up to 5V) held in place with a bit more FastSteel:

Breath Impeller

And for flexibility, I mounted it on a mini-tripod:

Breath Impeller Breath Impeller System

For the "first side" of Breath, I used a solid-state relay capable of AC or DC operation. I figured I might want the Breath to drive a full-sized AC fan, so the "output" is an AC plug. I found a powerful, yet compact AC fan for standard operation. Then I tested it and mounted it in a box:

Breath box in testing

Breath Box


"Home Base" Breath System

I realized that I would be shipping the "other side" of Breath all over the planet, so perhaps it should be a little more compact, and DC only so I wouldn't have to worry about different AC voltages/frequencies in other countries. So I found a powerful 12VDC fan. I mounted the impeller and IR LED and phototransistor into a piece of PVC pipe, and JB Welded the pipe on top of the fan. The pipe is long enough so that the wind from the fan doesn't make the impeller spin, as it is very sensitive! The result:

"Mobile" Breath System

Here is the Arduino program, which used the NewSoftSerial library to talk to the Xport Direct:
#include NewSoftSerial.h

// breath

unsigned long time = 0; // time of last edge
int minTime = 25; // minimum time for edge
int good = 0; // number of consecutive good (fast) edges
int minGoods = 20; // minimum number of consecutive good (fast) edges to indicate breath

int ledPin = 13; // on-board LED pin
int irLedPin = 10; // IR LED attached to pin 12 with 220 ohm resistor
int irDetPin = 0; // IR phototransistor attached to analog 0 with 5V and 10K
int relayPin = 11; // solid-state relay pin

unsigned long onTime = 0; // relay on time'
unsigned long pingTime = 0; // time to "ping" server

int i=0; // counts up received breath packets for diagnostics
int light=0; // whether IR detector sees light or dark
int lastLight=0; // what IR detector saw last time

unsigned long sendTime=0; // last time breath packet was sent out

NewSoftSerial xport(3,2);

void setup()
{
pinMode(relayPin,OUTPUT);
digitalWrite(relayPin, LOW);

Serial.begin(57600);
xport.begin(9600);

pinMode(ledPin, OUTPUT);
pinMode(irLedPin, OUTPUT);
digitalWrite(irLedPin, HIGH);
Serial.print("Starting"); //for debugging
}

void loop()
{
if(analogRead(irDetPin)>850){
light=0;
}
else{
light=1;
}

if(light != lastLight){
// edge
if(millis()-timeminGoods) {
// enough good (fast) edges
digitalWrite(ledPin,HIGH);
if(millis()-sendTime>100){
// send a breath, not too fast though
xport.print("B2");
sendTime = millis();
}
}
else{
// not enough good (fast) edges
digitalWrite(ledPin,LOW);
}

if(millis() - onTime > 100){
digitalWrite(relayPin,LOW);
}

if (xport.available()) {
if((char)xport.read()=='B'){
// receive a breath
digitalWrite(relayPin,HIGH);
onTime = millis();
//Serial.println(onTime);
}
}
if(millis() - pingTime > 1000){
xport.print("A2");
pingTime=millis();
}
}
The last thing needed is a "meet in the middle" server. The two sides of breath send UDP packets to the server. Every second they send a "ping" to make sure the server knows where they are (and this also helps to "punch out" through a firewall). Then when the sides sense a breath, they send a "breath" signal to the server, which relays the breath signal to the other side. Here is the Python program:
from socket import *
s=socket(AF_INET,SOCK_DGRAM) # create UDP socket
s.bind(('[ip address]',[port])) # bind to port
count=0
a1=('10.0.0.0',80) # will hold address of Breath side 1
a2=('10.0.0.0',80) # will hold address of Breath side 2
while 1:
[msg,addr]=s.recvfrom(128) # receive packet of up to 4 bytes
print(addr,':',msg)
if(msg[0:2] == "A1"): # address "ping" from Breath side 1
a1=addr
if(msg[0:2] == "A2"): # address "ping" from Breath side 2
a2=addr
if(msg[0:2] == "B1"): # breath sensed on Breath side 1
a1=addr
s.sendto("B",a2) # relay breath to Breath side 2
if(msg[0:2] == "B2"): # breath sensed on Breath side 2
a2=addr
s.sendto("B",a1) # relay breath to Breath side 1

Monday, July 06, 2009

Dorkbot SoCal 37

Dorkbot SoCal 37

***** Saturday, July 11, 2009
***** 1:00pm
***** Machine Project
***** 1200 D North Alvarado Street
***** Los Angeles, CA 90026
***** Google map of Machine Project

Heather Knight
http://www.marilynmonrobot.com/
A newbie Angelino and recent alumnus from the Personal Robots Group at the MIT Media Lab, Heather is a Social Roboticist who works at the Jet Propulsion Lab. She has two degrees from MIT in Electrical Engineering and Computer Science and a minor in Mechanical Engineering, working in Robotics since 2002 under Professor Cynthia Breazeal. This dorkbot she will present her work enabling robots to understand nonverbal human gestures and talk about the potentials for interactive technology incorporated into everyday objects, such as clothing.




Jody Zellen
http://www.jodyzellen.com/
Jody Zellen is an artist living in Los Angeles, California. She works in many media simultaneously making photographs, installations, net art, public art, as well as artists' books that explore the subject of the urban environment. She employs media-generated representations of contemporary and historic cities as raw material for aesthetic and social investigations.



Xuan "Sean" Li
http://www.way2sky.com/portfolio/
Xuan "Sean" Li creates works that merge concepts and ideas from different disciplines into new digital and electronic expression. He has worked in the areas of web design, game level design, product design, and 3D rendering and animation. His most recent work attempts to expand the role of information visualization as an art form through a novel combination of physical sensors with generative visuals, exploring new aesthetic possibilities by expressing the nature of the wireless data flow.

Sunday, June 14, 2009

Analog TV Termination Results

From the event at Machine Project, first a mechanical television that uses a Nipkow Disk:

Mechanical Television @ Machine Project

So there was a stack of analog TVs:
Analog Termination event @ Machine Project

And just before midnight, they turned off the lights:
Before the analog termination

Then as the minutes ticked away, the analog signals winked out, until finally at midnight:
After the ananlog termination

Thursday, June 11, 2009

Analog TV Termination Party in LA - Friday, June 12

Friday June 12th at 10pm - a talk by Jason Torchinsky about mechanical televisions, to be followed by a midnight countdown to the demise of analog TV. Sometime Friday night (depending on the station) all the old analog television broadcasts will stop, to be replaced by digital signals. That means old TVs without converter boxes won’t work anymore. In memoriam of the TVs we all have known and loved/hated, we’ll be gathering a pyramid of old TVs together for a countdown as they go to static. Please join us, and if you promise to bring it home with you afterwards, bring a TV for the pyramid.

Machine Project 
1200 D North Alvarado 
Los Angeles, CA 90026 

Gel Electrophoresis Artwork

Here is a neat web page about using restriction digestion of DNA samples to make artwork using gel electrophoresis:

Latent Figure Protocol

Thursday, June 04, 2009

Dorkbot SoCal 36

Dorkbot SoCal 36

***** Saturday, June 20, 2009
***** 1:00pm
***** Machine Project
***** 1200 D North Alvarado Street
***** Los Angeles, CA 90026
***** 
Google map of Machine Project

Design Algorithms: Skeuomorphs, Spandrels & Palimpsests 
This event will explore how cultural objects shift over time, with each presenter exploring a single term related to patterns of cultural change. 

Skeuomorphs - Garnet Hertz - UC Irvine
"An ornament or design on an object copied from a form of the object when made from another material or by other techniques" 

Garnet Hertz is an interdisciplinary artist, Fulbright Scholar and doctoral candidate in Visual Studies at UC Irvine. He also holds an MFA from the Arts Computation Engineering program at UCI, has completed UCI's Critical Theory Emphasis and is currently an affiliate of the Laboratory for Ubiquitous Computing and Interaction in the Department of Informatics. His dissertation research explores the creative, historical and cultural advantages of reusing obsolete information technologies in the media arts, and uses these examples to construct a critical theory of a cluster of related activities: circuit bending, D.I.Y., critical design and media archaeology. He has shown his work at several notable international venues in eleven countries including Ars Electronica, DEAF and SIGGRAPH and was awarded the prestigious 2008 Oscar Signorini Award in robotics. He is founder and director of Dorkbot SoCal, a monthly Los Angeles-based DIY lecture and workshop series on electronic art and design. His research is widely cited in academic publications, and popular press on his work has disseminated through 25 countries including The New York Times, Wired, The Washington Post, NPR, USA Today, NBC, CBS, TV Tokyo and CNN Headline News. 

Spandrels - Tim Durfee - Art Center 
"The roughly triangular space between the left or right exterior curve of an arch and the rectangular framework surrounding it" 

Tim Durfee is an architect based in Los Angeles. His independent and collaborative work has produced buildings, exhibitions, temporary installations, furniture, urban sign systems, interfaces, videos, and maps. 

He is a partner of the Los Angeles office Durfee | Regn and teaches at Art Center College of Design in the Graduate Media Design Program. He was director of the Visual Studies Program at the Southern California Institute of Architecture (SCI-Arc), and recently completed a Visiting Professorship at Woodbury University. 

Current projects include several houses, a penthouse loft and rooftop in downtown LA, signs for the Gallery Row district in Los Angeles, and a museum on the history of transportation in Los Angeles near the Port of Los Angeles. With Durfee Regn Sandhaus (DRS), Tim Durfee has also created award-winning exhibitions for museums across the country. 

Palimpsests - Norman Klein - CalArts / Art Center
"A manuscript, typically of papyrus or parchment, that has been written on more than once, with the earlier writing incompletely erased and often legible."

Norman Klein is a cultural critic, and both an urban and media historian, as well as a novelist. His books include "The History of Forgetting: Los Angeles and the Erasure of Memory," "Seven Minutes: The Life and Death of the American Animated Cartoon," and the data/cinematic novel, "Bleeding Through: Layers of Los Angeles, 1920-86" (DVD-ROM with book). His next book will be "The Vatican to Vegas: The History of Special Effects." (Fall, 2003). His essays appear in anthologies, museum catalogs, newspapers, scholarly journals, on the web -- symptoms of a polymath's career, from European cultural history to animation and architectural studies, to LA studies, to fiction, media design and documentary film. His work (including museum shows) centers on the relationship between collective memory and power, from special effects to cinema to digital theory, usually set in urban spaces; and often on the thin line between fact and fiction; about erasure, forgetting, scripted spaces, the social imaginary.

Friday, May 29, 2009

Monochrom on Computers in Popular Music @ Machine Project

The Monochrom folks are awesome...this is worth checking out....

“I can count every star in the heavens above but I have no heart I can’t fall in love…”

The image of computers in popular music

Machine Project
1200 D North Alvarado
Los Angeles, CA 90026
Saturday, June 6th, 2009
8pm

A talk (with audio examples) by monochrom, presented by Johannes Grenzfurthner

Bourgeois culture was paralyzed and finally overrun by modern technologies which broke through the traditional class barriers. It went into a panic and produced these very stupid technophobic manifestos and images e.g. of “the computer”. Pop music discovered and explored the computer not only as a musical instrument but also as something to sing and reflect about in a less aversive way. In doing so it influenced the conception people had of computers. The public image of computers was shaped by groups such as Kraftwerk as well as through obscure Schlager songs such as France Gall’s “Computer No. 3”. Not only was that image influenced by high culture computer panic but also by naïve technomania, and so it delivered the very dialectics of the computer as a means of cultural technology in capitalist society.
monochrom is an art-technology-philosophy group having its seat in Vienna:

Thursday, April 02, 2009

OSC control from iPhone to pd on Mac

Everyone seems to be using Open Sound Control (OSC), so I figured I'd try controlling pd (aka Pure Data) on my MacBook from my iPhone using the TouchOSC app.

Here is how you do it...

1) Get a recent build of pd, I used this build.

2) Set up a new computer-to-computer WiFi network:

Create Computer-to-Computer network

Create Computer-to-Computer network

3) Connect to the WiFi network "osc" on your iPhone.

4) Find your PC's IP address on that computer-to-computer WiFi network:

Check your IP address

5) Put your IP address into the "Host" configuration on TouchOSC on your iPhone, and set your outgoing port:

TouchOSC Configuration

6) Set up your pd patch:

OSC pd Example

"dumpOSC 9999" receives on port 9999, "OSCroute" parses the command, and I use "unpack" to grab the second element of the message, which is the fader value or toggle setting:

6) Play!

Saturday, February 28, 2009

Dorkbot SoCal 34

Next Dorkbot SoCal meeting...

Sunday, March 8, 2009
1:00pm [warning: first day daylight savings time!]
Machine Project
1200 D North Alvarado Street
Los Angeles, CA 90026

Presenters will include:

Dan Goods

Dan is the "Visual Strategist" for NASA's Jet Propulsion Laboratory at CalTech where he develops creative ways of communicating science. He recently has done artwork with aerogel and on a team to develop a 108-foot long data driven sculpture at the San Jose airport.




Eric Gradman and Brent Bushnell

Mindshare LA Labs' Eric and Brent will present ArtFall: a dynamic physical simulation by drawing on a whiteboard.




Brian O'Connor

Arduino + Chumby = Fun!: The Chumby is an open-source, ambient Internet device running Linux while the Arduino is an open-source prototyping platform. Brian will show how to connect an Arduino to the Chumby and develop a simple application that monitors the environment.




Upcoming.yahoo.com Link

Facebook Event

Tuesday, February 24, 2009

Cheap Absolute Optical Encoder

If you need a cheap absolute optical encoder, check out the Bourns EAW which is ~$15 from Mouser.

I'm again considering my spinning head driven by the Parallax PIR sensors.

The only question is whether I use a gearbox servo or build my own motor & encoder.

Monday, January 12, 2009

New Ethernet/USB Microcontrollers

The Cyan Technologies USB/Ethernet-Solved board based on the eCOG1X14Z5 microcontroller looks interesting.  It appears to come with a nice IDE and you can download projects to do Web and FTP servers.  The eval board is $99 from Mouser.

Also ATMEL has a new family of microcontrollers, the AVR32 UC3A which features a 512K bytes Flash, an embedded 10/100 Ethernet MAC, 12 Mbps USB 2.0 and an SRAM/SDRAM external bus interface. .  The eval kit is $129 from Mouser.