Urban Co-Creation: Envisioning New Digital Tools for Activism and Experimentation in the City, CHI 11 WS

Urban Co-Creation: Envisioning New Digital Tools for Activism and Experimentation in the City.

http://mariandoerk.de/

HCI, Politics, and the City (CHI 2011 workshop), 4 pages, May 2011.

  • Page2
    Place
    ‘Citizens should become curators and patrons of their places’

Design anthropology: Object culture in the 21st century, Alison J Clarke(ed), 2011

  • Design anthropology: Object culture in the 21st century, Alison J Clarke(ed),2011
    • Page 11, at Introduction
      • -….Similarly, design companies, such as IDEO, encourage designers themselves, not just adjunct anthropologists, to use their observational skills and intuition in thinking beyond functional problem solving and into the social realm of things (see Fulton Suri, this volume)

Draft for Inakage PhD Seminar, Dec 1st, 2011

Page0:
Cover picture

Page1:
Update
What I have done so far (from Mid September)
1)Read a lot of books and materials… to find roots of my vague ideas
2)Try locationg my research domain as participative urban landscape design (and DIY urbanism)
3)Regrouping scenarios. Found some tentative design fremeworks along the way.

My Process:
1)Start from inspiraion and tentative scenarios, building reserach subject.
2)
3)Find real situations, places, users, and specialist of the matter. Then revise the tentative scenario to concrete plan
4)

Today’s presentation.
1)Revised introduction part. to explain Research Domain
2)Revised set of scenario. to explain Research Subject

am doing:
1)draft of research proposal (with Chapter2: Literature review, Chapter 3: Concept, and Chapter4: Research plan and validation)
->This weekend. for internal review. Chapter 4 needs a bunch of advice.
->Supposedly done by now.

*
Placemaking efforts and participative urban landscape
1)Laurence halprin and workshop approach
2)Joseph Beuys and Social Sculpture
3)
*
About ‘Reciprocal stweardship’ in Design for ecological democracy

Passive Engagement Active Engagement
Stationed(Garden materials)
Use the park/ Become stewar
*Behavior/Value
Passive Engagement Active Engagement Commitment as an owner Feedback the owner will earn
Stationed  More safety and mood. Not personalized
Mobile  More safety and mood. Not personalized

Expansion of ‘stewardship’ model in to 2 axis.
1)Expand it with mobile materials. This naturally leads expansion of (2)
2)Expand it to both side of the device. Not only End users but Owners.
*

Stationed/ Mobile Scene Main Drawing Story drawing UI,System
Stationed Media Facade x1
Stationed Office and Mall at Friday night.
Stationed Side facade/Jogging course at park
Stationed Cafe / Porch
Mobile Car parking at a street 3
Mobile+Stationed Dance! x2
Mobile Schoolkids are passing by
Stationed Open tool for existing community. Stewardship at Community Housing Realtime camera on smartphone. Use candle light/handmade props

*
3 scenarios
1)Media Facade
2)Car parking
3)Dance!

opticalflow_sketch10435_Nov9th.pde

// Optical Flow 2010/05/28
// Hidetoshi Shimodaira shimo@is.titech.ac.jp 2010 GPL

//DLd from http://www.openprocessing.org/visuals/?visualID=10435

//modified by Nori Fujimura   nori_fujimura@me.com Nov9th, 2011

///////////////////////////////////////////////
// parameters for desktop pc (high performance)
int wscreen=320;
int hscreen=240;
int gs=10; // grid step (pixels)
float predsec=1.0; // prediction time (sec): larger for longer vector

///////////////////////////////////////////////
// use video
import processing.video.*;
Capture video;
PFont font;
color[] vline;
MovieMaker movie;

// capture parameters
int fps=30;

/*
// use sound
import ddf.minim.*;
import ddf.minim.signals.*;
Minim minim;
AudioOutput audioout;
SineWave sine;
*/

// grid parameters

int as=gs*2;  // window size for averaging (-as,…,+as)
int gw=wscreen/gs;
int gh=hscreen/gs;
int gs2=gs/2;
float df=predsec*fps;

// regression vectors
float[] fx, fy, ft;
int fm=3*9; // length of the vectors

// regularization term for regression
float fc=pow(10,8); // larger values for noisy video

// smoothing parameters
float wflow=0.1; // smaller value for longer smoothing

// switch
boolean flagseg=false; // segmentation of moving objects?
//boolean flagball=true; // playing ball game?
boolean flagmirror=true; // mirroring image?
boolean flagflow=true; // draw opticalflow vectors?
//boolean flagsound=true; // sound effect?
boolean flagimage=true; // show video image ?
boolean flagmovie=false; // saving movie?

// internally used variables
float ar,ag,ab; // used as return value of pixave
float[] dtr, dtg, dtb; // differentiation by t (red,gree,blue)
float[] dxr, dxg, dxb; // differentiation by x (red,gree,blue)
float[] dyr, dyg, dyb; // differentiation by y (red,gree,blue)
float[] par, pag, pab; // averaged grid values (red,gree,blue)
float[] flowx, flowy; // computed optical flow
float[] sflowx, sflowy; // slowly changing version of the flow
int clockNow,clockPrev, clockDiff; // for timing check

/*
// playing ball parameters
float ballpx=wscreen*0.5; // position x
float ballpy=hscreen*0.5; // position y
float ballvx=0.0; // velocity x
float ballvy=0.0; // velocity y
float ballgy=0.05; // gravitation
float ballsz=30.0; // size
float ballsz2=ballsz/2;
float ballfv=0.8; // rebound factor
float ballhv=50.0; // hit factor
float ballvmax=10.0; // max velocity (pixel/frame)
*/

void setup(){
// screen and video
size(wscreen, hscreen, P2D);
video = new Capture(this, wscreen, hscreen, fps);
// font
font=createFont(“Verdana”,10);
textFont(font);
// draw
rectMode(CENTER);
ellipseMode(CENTER);
/*
// sound : not essential, only for ball movement
minim = new Minim(this);
audioout = minim.getLineOut(Minim.STEREO, 2048);
sine = new SineWave(440, 0.5, audioout.sampleRate());
sine.portamento(200);
sine.setAmp(0.0);
audioout.addSignal(sine);
*/

// arrays
par = new float[gw*gh];
pag = new float[gw*gh];
pab = new float[gw*gh];
dtr = new float[gw*gh];
dtg = new float[gw*gh];
dtb = new float[gw*gh];
dxr = new float[gw*gh];
dxg = new float[gw*gh];
dxb = new float[gw*gh];
dyr = new float[gw*gh];
dyg = new float[gw*gh];
dyb = new float[gw*gh];
flowx = new float[gw*gh];
flowy = new float[gw*gh];
sflowx = new float[gw*gh];
sflowy = new float[gw*gh];
fx = new float[fm];
fy = new float[fm];
ft = new float[fm];
vline = new color[wscreen];
}

// calculate average pixel value (r,g,b) for rectangle region
void pixave(int x1, int y1, int x2, int y2) {
float sumr,sumg,sumb;
color pix;
int r,g,b;
int n;

if(x1<0) x1=0;
if(x2>=wscreen) x2=wscreen-1;
if(y1<0) y1=0;
if(y2>=hscreen) y2=hscreen-1;

sumr=sumg=sumb=0.0;
for(int y=y1; y<=y2; y++) {
for(int i=wscreen*y+x1; i<=wscreen*y+x2; i++) {
pix=video.pixels[i];
b=pix & 0xFF; // blue
pix = pix >> 8;
g=pix & 0xFF; // green
pix = pix >> 8;
r=pix & 0xFF; // red
// averaging the values
sumr += r;
sumg += g;
sumb += b;
}
}
n = (x2-x1+1)*(y2-y1+1); // number of pixels
// the results are stored in static variables
ar = sumr/n;
ag=sumg/n;
ab=sumb/n;
}

// extract values from 9 neighbour grids
void getnext9(float x[], float y[], int i, int j) {
y[j+0] = x[i+0];
y[j+1] = x[i-1];
y[j+2] = x[i+1];
y[j+3] = x[i-gw];
y[j+4] = x[i+gw];
y[j+5] = x[i-gw-1];
y[j+6] = x[i-gw+1];
y[j+7] = x[i+gw-1];
y[j+8] = x[i+gw+1];
}

// solve optical flow by least squares (regression analysis)
void solveflow(int ig) {
float xx, xy, yy, xt, yt;
float a,u,v,w;

// prepare covariances
xx=xy=yy=xt=yt=0.0;
for(int i=0;i<fm;i++) {
xx += fx[i]*fx[i];
xy += fx[i]*fy[i];
yy += fy[i]*fy[i];
xt += fx[i]*ft[i];
yt += fy[i]*ft[i];
}

// least squares computation
a = xx*yy – xy*xy + fc; // fc is for stable computation
u = yy*xt – xy*yt; // x direction
v = xx*yt – xy*xt; // y direction

// write back
flowx[ig] = -2*gs*u/a; // optical flow x (pixel per frame)
flowy[ig] = -2*gs*v/a; // optical flow y (pixel per frame)
}

void draw() {
if(video.available()){
// video capture
video.read();

// clock in msec
clockNow = millis();
clockDiff = clockNow – clockPrev;
clockPrev = clockNow;

// mirror
if(flagmirror) {
for(int y=0;y<hscreen;y++) {
int ig=y*wscreen;
for(int x=0; x<wscreen; x++)
vline[x] = video.pixels[ig+x];
for(int x=0; x<wscreen; x++)
video.pixels[ig+x]=vline[wscreen-1-x];
}
}

// draw image
if(flagimage) set(0,0,video);
else background(0);

// 1st sweep : differentiation by time
for(int ix=0;ix<gw;ix++) {
int x0=ix*gs+gs2;
for(int iy=0;iy<gh;iy++) {
int y0=iy*gs+gs2;
int ig=iy*gw+ix;
// compute average pixel at (x0,y0)
pixave(x0-as,y0-as,x0+as,y0+as);
// compute time difference
dtr[ig] = ar-par[ig]; // red
dtg[ig] = ag-pag[ig]; // green
dtb[ig] = ab-pab[ig]; // blue
// save the pixel
par[ig]=ar;
pag[ig]=ag;
pab[ig]=ab;
}
}

// 2nd sweep : differentiations by x and y
for(int ix=1;ix<gw-1;ix++) {
for(int iy=1;iy<gh-1;iy++) {
int ig=iy*gw+ix;
// compute x difference
dxr[ig] = par[ig+1]-par[ig-1]; // red
dxg[ig] = pag[ig+1]-pag[ig-1]; // green
dxb[ig] = pab[ig+1]-pab[ig-1]; // blue
// compute y difference
dyr[ig] = par[ig+gw]-par[ig-gw]; // red
dyg[ig] = pag[ig+gw]-pag[ig-gw]; // green
dyb[ig] = pab[ig+gw]-pab[ig-gw]; // blue
}
}

// 3rd sweep : solving optical flow
for(int ix=1;ix<gw-1;ix++) {
int x0=ix*gs+gs2;
for(int iy=1;iy<gh-1;iy++) {
int y0=iy*gs+gs2;
int ig=iy*gw+ix;

// prepare vectors fx, fy, ft
getnext9(dxr,fx,ig,0); // dx red
getnext9(dxg,fx,ig,9); // dx green
getnext9(dxb,fx,ig,18);// dx blue
getnext9(dyr,fy,ig,0); // dy red
getnext9(dyg,fy,ig,9); // dy green
getnext9(dyb,fy,ig,18);// dy blue
getnext9(dtr,ft,ig,0); // dt red
getnext9(dtg,ft,ig,9); // dt green
getnext9(dtb,ft,ig,18);// dt blue

// solve for (flowx, flowy) such that
// fx flowx + fy flowy + ft = 0
solveflow(ig);

// smoothing
sflowx[ig]+=(flowx[ig]-sflowx[ig])*wflow;
sflowy[ig]+=(flowy[ig]-sflowy[ig])*wflow;
}
}

// 4th sweep : draw the flow
if(flagseg) {
noStroke();
fill(0);
for(int ix=0;ix<gw;ix++) {
int x0=ix*gs+gs2;
for(int iy=0;iy<gh;iy++) {
int y0=iy*gs+gs2;
int ig=iy*gw+ix;

float u=df*sflowx[ig];
float v=df*sflowy[ig];

float a=sqrt(u*u+v*v);
if(a<2.0) rect(x0,y0,gs,gs);
}
}
}

// 5th sweep : draw the flow
if(flagflow) {
for(int ix=0;ix<gw;ix++) {
int x0=ix*gs+gs2;
for(int iy=0;iy<gh;iy++) {
int y0=iy*gs+gs2;
int ig=iy*gw+ix;

float u=df*sflowx[ig];
float v=df*sflowy[ig];

// draw the line segments for optical flow
float a=sqrt(u*u+v*v);
if(a>=2.0) { // draw only if the length >=2.0
float r=0.5*(1.0+u/(a+0.1));
float g=0.5*(1.0+v/(a+0.1));
float b=0.5*(2.0-(r+g));
stroke(255*r,255*g,255*b);
line(x0,y0,x0+u,y0+v);
}
}
}
}

/*
///////////////////////////////////////////////////////
// ball movement : not essential for optical flow
if(flagball) {
// updatating position and velocity
ballpx += ballvx;
ballpy += ballvy;
ballvy += ballgy;

// reflecton
if(ballpx<ballsz2) {
ballpx=ballsz2;
ballvx=-ballvx*ballfv;
}
else if(ballpx>wscreen-ballsz2) {
ballpx=wscreen-ballsz2;
ballvx=-ballvx*ballfv;
}
if(ballpy<ballsz2) {
ballpy=ballsz2;
ballvy=-ballvy*ballfv;
}
else if(ballpy>hscreen-ballsz2) {
ballpy=hscreen-ballsz2;
ballvy=-ballvy*ballfv;
}

// draw the ball
fill(50,200,200);
stroke(0,100,100);
ellipse(ballpx,ballpy,ballsz,ballsz);

// find the grid
int ix= round((ballpx-gs2)/gs);
int iy= round((ballpy-gs2)/gs);
if(ix<1) ix=1;
else if(ix>gw-2) ix=gw-2;
if(iy<1) iy=1;
else if(iy>gh-2) iy=gh-2;
int ig=iy*gw+ix;

// hit the ball by your movement
float u=sflowx[ig];
float v=sflowy[ig];
float a=sqrt(u*u+v*v);
u=u/a;
v=v/a;
if(a>=2.0) a=2.0;
if(a>=0.3) {
ballvx += ballhv*a*u;
ballvy += ballhv*a*v;
float b=sqrt(ballvx*ballvx+ballvy*ballvy);
if(b>ballvmax) {
ballvx = ballvmax*ballvx/b;
ballvy = ballvmax*ballvy/b;
}
}

// sound
float pan = map(ballpx, 0, wscreen, -1, 1);
float freq = map(ballpy, 0, hscreen, 1500, 60);
float vol = map(a,0.0,0.8,0.0,1.0);
if(!flagsound) vol=0.0;
sine.setPan(pan);
sine.setFreq(freq);
sine.setAmp(vol);
}
*/
}

///////////////////////////////////////////////////
// recording movie
if(flagmovie) movie.addFrame();

//  print information (not shown in the movie)
fill(255,0,0);
text(clockDiff,10,10); // time (msec) for this frame
if(flagmovie) text(“rec”, 40,10);

}

void stopGame(){
//minim.stop();
super.stop();
}

void keyPressed(){
if(key==’c’) video.settings();
else if(key==’w’) flagseg=!flagseg; // segmentation on/off
// else if(key==’s’) flagsound=!flagsound; //  sound on/off
//else if(key==’e’) stopGame(); // quit
else if(key==’m’) flagmirror=!flagmirror; // mirror on/off
else if(key==’i’) flagimage=!flagimage; // show video on/off
else if(key==’f’) flagflow=!flagflow; // show opticalflow on/off
else if(key==’q’) {
flagmovie=!flagmovie;
if(flagmovie) { // start recording movie
movie = new MovieMaker(this, width, height, “mymovie.mov”,
fps);
}
else { // stop recording movie
movie.finish();
}
}
/*
else if(key==’ ‘) { // kick the ball
ballvy = -3.0;
}
else if(key==’b’) { // show the ball on/off
flagball=!flagball;
if(flagball) { // put the ball at the center
ballpx=wscreen*0.5;
ballpy=hscreen*0.5;
ballvx=ballvy=0.0;
}
}
*/
}

opticalflow_sketch10435.pde

// Optical Flow 2010/05/28
// Hidetoshi Shimodaira shimo@is.titech.ac.jp 2010 GPL

//from http://www.openprocessing.org/visuals/?visualID=10435
///////////////////////////////////////////////
// parameters for desktop pc (high performance)
int wscreen=640;
int hscreen=480;
int gs=10; // grid step (pixels)
float predsec=1.0; // prediction time (sec): larger for longer vector

// parameters for laptop pc (low performance)
//int wscreen=480;
//int hscreen=360;
//int gs=20; // grid step (pixels)
//float predsec=1.0; // prediction time (sec): larger for longer vector

///////////////////////////////////////////////
// use video
import processing.video.*;
Capture video;
PFont font;
color[] vline;
MovieMaker movie;

// capture parameters
int fps=30;

// use sound
import ddf.minim.*;
import ddf.minim.signals.*;
Minim minim;
AudioOutput audioout;
SineWave sine;

// grid parameters

int as=gs*2;  // window size for averaging (-as,…,+as)
int gw=wscreen/gs;
int gh=hscreen/gs;
int gs2=gs/2;
float df=predsec*fps;

// regression vectors
float[] fx, fy, ft;
int fm=3*9; // length of the vectors

// regularization term for regression
float fc=pow(10,8); // larger values for noisy video

// smoothing parameters
float wflow=0.1; // smaller value for longer smoothing

// switch
boolean flagseg=false; // segmentation of moving objects?
boolean flagball=true; // playing ball game?
boolean flagmirror=true; // mirroring image?
boolean flagflow=true; // draw opticalflow vectors?
boolean flagsound=true; // sound effect?
boolean flagimage=true; // show video image ?
boolean flagmovie=false; // saving movie?

// internally used variables
float ar,ag,ab; // used as return value of pixave
float[] dtr, dtg, dtb; // differentiation by t (red,gree,blue)
float[] dxr, dxg, dxb; // differentiation by x (red,gree,blue)
float[] dyr, dyg, dyb; // differentiation by y (red,gree,blue)
float[] par, pag, pab; // averaged grid values (red,gree,blue)
float[] flowx, flowy; // computed optical flow
float[] sflowx, sflowy; // slowly changing version of the flow
int clockNow,clockPrev, clockDiff; // for timing check

// playing ball parameters
float ballpx=wscreen*0.5; // position x
float ballpy=hscreen*0.5; // position y
float ballvx=0.0; // velocity x
float ballvy=0.0; // velocity y
float ballgy=0.05; // gravitation
float ballsz=30.0; // size
float ballsz2=ballsz/2;
float ballfv=0.8; // rebound factor
float ballhv=50.0; // hit factor
float ballvmax=10.0; // max velocity (pixel/frame)

void setup(){
// screen and video
size(wscreen, hscreen, P2D);
video = new Capture(this, wscreen, hscreen, fps);
// font
font=createFont(“Verdana”,10);
textFont(font);
// draw
rectMode(CENTER);
ellipseMode(CENTER);
// sound : not essential, only for ball movement
minim = new Minim(this);
audioout = minim.getLineOut(Minim.STEREO, 2048);
sine = new SineWave(440, 0.5, audioout.sampleRate());
sine.portamento(200);
sine.setAmp(0.0);
audioout.addSignal(sine);

// arrays
par = new float[gw*gh];
pag = new float[gw*gh];
pab = new float[gw*gh];
dtr = new float[gw*gh];
dtg = new float[gw*gh];
dtb = new float[gw*gh];
dxr = new float[gw*gh];
dxg = new float[gw*gh];
dxb = new float[gw*gh];
dyr = new float[gw*gh];
dyg = new float[gw*gh];
dyb = new float[gw*gh];
flowx = new float[gw*gh];
flowy = new float[gw*gh];
sflowx = new float[gw*gh];
sflowy = new float[gw*gh];
fx = new float[fm];
fy = new float[fm];
ft = new float[fm];
vline = new color[wscreen];
}

// calculate average pixel value (r,g,b) for rectangle region
void pixave(int x1, int y1, int x2, int y2) {
float sumr,sumg,sumb;
color pix;
int r,g,b;
int n;

if(x1<0) x1=0;
if(x2>=wscreen) x2=wscreen-1;
if(y1<0) y1=0;
if(y2>=hscreen) y2=hscreen-1;

sumr=sumg=sumb=0.0;
for(int y=y1; y<=y2; y++) {
for(int i=wscreen*y+x1; i<=wscreen*y+x2; i++) {
pix=video.pixels[i];
b=pix & 0xFF; // blue
pix = pix >> 8;
g=pix & 0xFF; // green
pix = pix >> 8;
r=pix & 0xFF; // red
// averaging the values
sumr += r;
sumg += g;
sumb += b;
}
}
n = (x2-x1+1)*(y2-y1+1); // number of pixels
// the results are stored in static variables
ar = sumr/n;
ag=sumg/n;
ab=sumb/n;
}

// extract values from 9 neighbour grids
void getnext9(float x[], float y[], int i, int j) {
y[j+0] = x[i+0];
y[j+1] = x[i-1];
y[j+2] = x[i+1];
y[j+3] = x[i-gw];
y[j+4] = x[i+gw];
y[j+5] = x[i-gw-1];
y[j+6] = x[i-gw+1];
y[j+7] = x[i+gw-1];
y[j+8] = x[i+gw+1];
}

// solve optical flow by least squares (regression analysis)
void solveflow(int ig) {
float xx, xy, yy, xt, yt;
float a,u,v,w;

// prepare covariances
xx=xy=yy=xt=yt=0.0;
for(int i=0;i<fm;i++) {
xx += fx[i]*fx[i];
xy += fx[i]*fy[i];
yy += fy[i]*fy[i];
xt += fx[i]*ft[i];
yt += fy[i]*ft[i];
}

// least squares computation
a = xx*yy – xy*xy + fc; // fc is for stable computation
u = yy*xt – xy*yt; // x direction
v = xx*yt – xy*xt; // y direction

// write back
flowx[ig] = -2*gs*u/a; // optical flow x (pixel per frame)
flowy[ig] = -2*gs*v/a; // optical flow y (pixel per frame)
}

void draw() {
if(video.available()){
// video capture
video.read();

// clock in msec
clockNow = millis();
clockDiff = clockNow – clockPrev;
clockPrev = clockNow;

// mirror
if(flagmirror) {
for(int y=0;y<hscreen;y++) {
int ig=y*wscreen;
for(int x=0; x<wscreen; x++)
vline[x] = video.pixels[ig+x];
for(int x=0; x<wscreen; x++)
video.pixels[ig+x]=vline[wscreen-1-x];
}
}

// draw image
if(flagimage) set(0,0,video);
else background(0);

// 1st sweep : differentiation by time
for(int ix=0;ix<gw;ix++) {
int x0=ix*gs+gs2;
for(int iy=0;iy<gh;iy++) {
int y0=iy*gs+gs2;
int ig=iy*gw+ix;
// compute average pixel at (x0,y0)
pixave(x0-as,y0-as,x0+as,y0+as);
// compute time difference
dtr[ig] = ar-par[ig]; // red
dtg[ig] = ag-pag[ig]; // green
dtb[ig] = ab-pab[ig]; // blue
// save the pixel
par[ig]=ar;
pag[ig]=ag;
pab[ig]=ab;
}
}

// 2nd sweep : differentiations by x and y
for(int ix=1;ix<gw-1;ix++) {
for(int iy=1;iy<gh-1;iy++) {
int ig=iy*gw+ix;
// compute x difference
dxr[ig] = par[ig+1]-par[ig-1]; // red
dxg[ig] = pag[ig+1]-pag[ig-1]; // green
dxb[ig] = pab[ig+1]-pab[ig-1]; // blue
// compute y difference
dyr[ig] = par[ig+gw]-par[ig-gw]; // red
dyg[ig] = pag[ig+gw]-pag[ig-gw]; // green
dyb[ig] = pab[ig+gw]-pab[ig-gw]; // blue
}
}

// 3rd sweep : solving optical flow
for(int ix=1;ix<gw-1;ix++) {
int x0=ix*gs+gs2;
for(int iy=1;iy<gh-1;iy++) {
int y0=iy*gs+gs2;
int ig=iy*gw+ix;

// prepare vectors fx, fy, ft
getnext9(dxr,fx,ig,0); // dx red
getnext9(dxg,fx,ig,9); // dx green
getnext9(dxb,fx,ig,18);// dx blue
getnext9(dyr,fy,ig,0); // dy red
getnext9(dyg,fy,ig,9); // dy green
getnext9(dyb,fy,ig,18);// dy blue
getnext9(dtr,ft,ig,0); // dt red
getnext9(dtg,ft,ig,9); // dt green
getnext9(dtb,ft,ig,18);// dt blue

// solve for (flowx, flowy) such that
// fx flowx + fy flowy + ft = 0
solveflow(ig);

// smoothing
sflowx[ig]+=(flowx[ig]-sflowx[ig])*wflow;
sflowy[ig]+=(flowy[ig]-sflowy[ig])*wflow;
}
}

// 4th sweep : draw the flow
if(flagseg) {
noStroke();
fill(0);
for(int ix=0;ix<gw;ix++) {
int x0=ix*gs+gs2;
for(int iy=0;iy<gh;iy++) {
int y0=iy*gs+gs2;
int ig=iy*gw+ix;

float u=df*sflowx[ig];
float v=df*sflowy[ig];

float a=sqrt(u*u+v*v);
if(a<2.0) rect(x0,y0,gs,gs);
}
}
}

// 5th sweep : draw the flow
if(flagflow) {
for(int ix=0;ix<gw;ix++) {
int x0=ix*gs+gs2;
for(int iy=0;iy<gh;iy++) {
int y0=iy*gs+gs2;
int ig=iy*gw+ix;

float u=df*sflowx[ig];
float v=df*sflowy[ig];

// draw the line segments for optical flow
float a=sqrt(u*u+v*v);
if(a>=2.0) { // draw only if the length >=2.0
float r=0.5*(1.0+u/(a+0.1));
float g=0.5*(1.0+v/(a+0.1));
float b=0.5*(2.0-(r+g));
stroke(255*r,255*g,255*b);
line(x0,y0,x0+u,y0+v);
}
}
}
}
///////////////////////////////////////////////////////
// ball movement : not essential for optical flow
if(flagball) {
// updatating position and velocity
ballpx += ballvx;
ballpy += ballvy;
ballvy += ballgy;

// reflecton
if(ballpx<ballsz2) {
ballpx=ballsz2;
ballvx=-ballvx*ballfv;
}
else if(ballpx>wscreen-ballsz2) {
ballpx=wscreen-ballsz2;
ballvx=-ballvx*ballfv;
}
if(ballpy<ballsz2) {
ballpy=ballsz2;
ballvy=-ballvy*ballfv;
}
else if(ballpy>hscreen-ballsz2) {
ballpy=hscreen-ballsz2;
ballvy=-ballvy*ballfv;
}

// draw the ball
fill(50,200,200);
stroke(0,100,100);
ellipse(ballpx,ballpy,ballsz,ballsz);

// find the grid
int ix= round((ballpx-gs2)/gs);
int iy= round((ballpy-gs2)/gs);
if(ix<1) ix=1;
else if(ix>gw-2) ix=gw-2;
if(iy<1) iy=1;
else if(iy>gh-2) iy=gh-2;
int ig=iy*gw+ix;

// hit the ball by your movement
float u=sflowx[ig];
float v=sflowy[ig];
float a=sqrt(u*u+v*v);
u=u/a;
v=v/a;
if(a>=2.0) a=2.0;
if(a>=0.3) {
ballvx += ballhv*a*u;
ballvy += ballhv*a*v;
float b=sqrt(ballvx*ballvx+ballvy*ballvy);
if(b>ballvmax) {
ballvx = ballvmax*ballvx/b;
ballvy = ballvmax*ballvy/b;
}
}

// sound
float pan = map(ballpx, 0, wscreen, -1, 1);
float freq = map(ballpy, 0, hscreen, 1500, 60);
float vol = map(a,0.0,0.8,0.0,1.0);
if(!flagsound) vol=0.0;
sine.setPan(pan);
sine.setFreq(freq);
sine.setAmp(vol);
}
}

///////////////////////////////////////////////////
// recording movie
if(flagmovie) movie.addFrame();

//  print information (not shown in the movie)
fill(255,0,0);
text(clockDiff,10,10); // time (msec) for this frame
if(flagmovie) text(“rec”, 40,10);

}

void stopGame(){
minim.stop();
super.stop();
}

void keyPressed(){
if(key==’c’) video.settings();
else if(key==’w’) flagseg=!flagseg; // segmentation on/off
else if(key==’s’) flagsound=!flagsound; //  sound on/off
else if(key==’e’) stopGame(); // quit
else if(key==’m’) flagmirror=!flagmirror; // mirror on/off
else if(key==’i’) flagimage=!flagimage; // show video on/off
else if(key==’f’) flagflow=!flagflow; // show opticalflow on/off
else if(key==’q’) {
flagmovie=!flagmovie;
if(flagmovie) { // start recording movie
movie = new MovieMaker(this, width, height, “mymovie.mov”,
fps);
}
else { // stop recording movie
movie.finish();
}
}
else if(key==’ ‘) { // kick the ball
ballvy = -3.0;
}
else if(key==’b’) { // show the ball on/off
flagball=!flagball;
if(flagball) { // put the ball at the center
ballpx=wscreen*0.5;
ballpy=hscreen*0.5;
ballvx=ballvy=0.0;
}
}
}

AmI’11 – International Joint Conference on Ambient Intelligence 16-18 November 2011 – Amsterdam

  • AmI’11 – International Joint Conference on Ambient Intelligence
    16-18 November 2011 – Amsterdam
    • Wednesday 16 November *Workshops*
      WS1: Aesthetic Intelligence: Designing Smart and Beautiful Architectural
      Spaces
      WS2: Role of Ambient Intelligence in Future Lighting Systems
      WS4: Interactive Human Behavior Analysis in Open or Public Spaces
      WS5: Workshop on User Interaction Methods for Elderly, People With Dementia
      WS6: Empowering and integrating senior citizens with virtual coaching
      WS7: Integration of AMI and AAL platforms in the Future Internet (FI)
      Platform initiative
      WS8: Ambient Gaming
      WS9: 2nd Int. Workshop on Human Behavior Understanding: Inducing Behavioral Change
      WS10: Privacy, Trust and Interaction in the Internet of Things
    • Thursday 17 November *Conference*
      *Opening **Emile Aarts, Philips Research*
      *Plenary* *Margie Morris, Intel Labs* *’Left to our own devices’*
      *Sessions* Haptic Interfaces, Smart Sensing, Smart Environments, Novel
      Interaction,
      *Industrial presentations  *Alcatel Bell-labs, Eagle Vision, Noldus, Fource
      labs
      *Landscape papers *
      *Posters and Demos*Friday 18 November *Conference*
      *Plenary **Albrecht Schmidt, University of Stuttgart* *’Beyond Ubicomp –
      Computing is Changing the Way we Live’*
      *Sessions* Ambient Assisted Living, Affecting Human Behavior, Smart
      Environments, Privacy & Trust
      *Landscape papers*
      *Closing*

Meeting with Prof. Inakage, Oct 31st 2011

Ericssonの件

1〜4月から2年間

年内に、予算関係が決着する。

最初の1年でプロジェクトを行い、

次の1年は論文発表などにあてる。

植木先生:もっとビジュアルの資料が欲しい

’具体的な出どころ’5W1Hのこと?面白いだけでない具体性?

issue+a 1、2週間以内にわたします。

研究プロポーザルについて

今年度中にプロポーザル

審査をとうれば、学費は発生しない。

新規性

Leterature review

具体性(概念だけではなくて)

どこで、

どういうことをして

このように評価する

プロトタイプ(卓上レベル)

 

役に立つ、とはどういうことか?

ソウルの地下鉄1号線で健康診断の例:’場所の再定義’

 

体制

  • 主査1名、副査2名
  • 提出前に、主、副査のスケジュールを押さえる。
    • 主査 稲蔭教授 コンテンツ
    • 副査 奥出教授 ドクター、理論面
    • 副査 砂原教授 センサーネットワーク。救急車の情報設計、田畑にセンサーネットワークを敷設、などを研究している。
    • どこかのタイミングでメール、スカイプでもいいから、話をしておく
  • 1回直すことを前提にしたスケジュール
  • 研究科委員会
    • 11月末までに、内部的に(稲蔭ゼミ内で)一度見る。
    • 12月8日
    • 12月22日
    • 1月12日
    • 1月下旬に再提出?となると、12月中に提出。OKがでたら、10日以内に公開プレゼン。
    • 1月21日(臨時)
    • 2月2日
    • 2月16日
    • 3月1日(年度最終)

Future Vision, Microsoft Office Labs, 2004-

Project page

 

Thesis Statement, as of Nov 2nd, 2011

As of Nov2nd, 2011
  • Where: Urban Open Space (Ars Electronica Center and/or a specific site: assuming a public plaza where preconception is *bad*)
  • What/Goal: Create, show and prove a several designs which achieve Placemaking: making space to place by action of its users. Change preconception of a space to something significant to be said as a place.
  • Why: Design of urban open space has certain limitation to follow fast changing nature of society and its activities because of its static material, low frequency of renovation and lack of communication with its users in design process. We need something to fill this gap to keep the space active as a keystone of a city.
Fast changing societyが具体的に何をさすのか、その問題にopen spaceデザインがどのように対応できていて、できていないのか。問題においつくスピードが問題なのか。
  • How: Community Art and Design have a concept of  direct participation to compromise these limits of urban design. And activities with the concept are often called Placemaking effort. Designs we introduce in this research also amplifies the concept into action using following two materials and techniques.
    • 1:Lighting and theater lighting technique to change urban space visually in dynamic but temporary sense.
    • 2: To emphasize capability of participation, adaptation and dynamic change, we also use  ICT technology such as embedded/mobile sensors and network to connect altogether.

ああ、そういうアートとデザインがあって、すでに補完してくれていてよかったね、で終わってしまう。

何故この2つの素材と技術が必要なのかが不明瞭。

  • For Whom: Group of end users of the place. Mostly residents and commuters work nearby. If the place coexists commercial activities, visitors/customers are also important.
  • When: ‘Design of evening time’ :when they pass-by, when they kill time and also when lighting has its max value in terms of aesthetics.

2011年10月21日  山崎亮+乾久美子 「まちへのメッセージ」@東京芸大

http://togetter.com/li/203585

http://geidai-archi.com/

  • 本日開催された山崎亮×乾久美子「まちへのメッセージ」at 東京藝大 http://t.co/NWWQInJV のようすを勝手にまとめます。 #matime
  • 山崎さんと乾さんは、延岡駅前のプロジェクト http://t.co/ZqU8tZLB でご一緒しているのをきっかけに、ただいま往復書簡をやりとりちゅう。 http://t.co/c4IJ1FAb #matime
  • まずは山崎さんから自己紹介を兼ねつつ、手がけているプロジェクトの紹介。今回は「市街地系のプロジェクト」をテーマに、大阪のヤクルトおばさん・有馬富士公園・マルヤガーデンズ・泉佐野丘陵緑地・延岡駅周辺プロジェクトを紹介。 #matime
  • 大阪のヤクルトおばさん:銀行が閉まったあとのシャッター前に勝手にお店を開くおばさん。どこからともなく人が集まってきておしゃべりをして、帰る時にはまわりを掃除して帰る。行政や社会のルールからは少しはみ出してるけど、そうやって町を「使いこなす」一例として。 #matime
  • 歩道の花壇でこっそり野菜を育てていたり、線路脇の空き地で草木を育てていたり。公共空間にそのようにして「住人が出てくる」街づくりはあり得るか。建築は様々な空間を室内化してきたけれど、それらをもう一度外に追い出してみると街の姿も変わるのではないか。 #matime
  • 「街の活性化」と銘打って商店街のシャッターに絵を描いても、果たしてそれで風景は変わるだろうか。それより、アーケードのなかで大人数でエクストリーム・アイロニングでもやるほうが楽しいんじゃない? と、いう発想。 #matime
  • 有馬富士公園・マルヤガーデンズでの取り組みについてはこちらをご参考に→http://t.co/rIHHnnc6 (手前味噌な手抜き) #matime
  • 泉佐野丘陵緑地:公園全体を一気に作るのではなく、手前+園路+トイレや作業小屋のみを最初に作る。そして、市民団体がやりたい事にあわせて自分たちで続きを作っていく。例えば10億+維持費2000万/1年かかるものを、2億+維持費3000万/1年でやれるのではないか。 #matime
  • 10年それを続けられれば12億が5億で済んで、同時に公園運営についての強力なチームもできあがっているという予定だった。が、知事が変わったので…(ごにょごにょ)。現在は大輪会という企業団体が維持費を出している。府営なのに民間が援助するという不思議な構造になっている。 #matime
  • 延岡駅周辺プロジェクト:有馬富士公園と同じ仕組みで、駅前を活性化することはできないか。中心市街地の空洞化は単なる再開発ではなく、人の流れをどう生み出すかなので。多くのNPOの活動場所を駅前に集約させようとしている。行政も柔軟に対応してくれている。 #matime
  • 山崎レクチャのまとめとして:戦前にあった地縁型のコミュニティが失われて以降、公共空間はどうもうまく使われてこなかった。ハード面に問題があったのではなく、違うもので隙間を埋める必要があったのではないか。それは特定のテーマで繋がるコミュニティなのではないか。 #matime
  • 続いて、延岡のプロジェクトを中心とした乾レクチャー。山崎さんによって集められた市民活動を受け止めるハードが必要!ということで、新しく駅舎+公民館という用途の建物を造る事になった。もともとは駅+商業施設という再開発だったが、その発想ではうまく行かないだろうと思った。 #matime
  • 複合的な施設を作るからには、それぞれの利用者が交わるような配置である必要がある。さらにプロジェクト全体を見通すと,駅舎だけで完結してしまっても意味がない。造形作家としては「それのみで完結する」オーバースペック気味のものを作りたくなるが、あえてはみ出す部分を作る。 #matime
  • 駅舎を中心にしつつ、はみ出た活動をする市民が回遊する動線を作る事で、商業施設が活性化し、ひいては居住者の増加も見込めるのではないだろうか。 #matime
  • 似たような発想で設計したものに、浅草文化観光センターがある。公民館+観光案内所という要件を満たしつつ双方が交わるような配置にした。コアを分散させて「隙間のある境界」をいう浅草寺周辺の街並みをモチーフにしながら。http://t.co/yT5e6rsk #matime
  • 乾レクチャー、ここまで。ふたりでのトークは、乾さんからのお題に山崎さんが答える、といったスタイル。えらく建築っぽいテーマだったので(あたりまえ)固有名詞など不確かですがご勘弁を。 #matime
  • 乾:「シチュアシオニスト・インターナショナル」との出会い、そしてそこから受けた影響にはどんなものがあったか? #matime
  • (いや、これちょっと無理。でたらめを書くのはよくないので、キーワードだけ並べておきます)アルドファン・アイク、コンスタント・ニーベンホイフ、空中都市計画”New babylon -Paris”、「状況を作り出すという彼らの手法をどう実務に反映させていくか」 #matime
  • 乾:アンリ・ルフェーブル「空間の生産」は? 山崎:都市は「都市的な理想」からどんどん離れている。カフェで隣り合わせた人に声をかけられて意気投合みたいな「都会的」なことはほとんど起こらない。コミュニケーションを取らなくて済む方向に向かいつつあるけど、果たして。 #matime
  • 乾:つくらないデザイン、というスタイルに変わっていったのは? 山崎:もともとランドスケープデザインは、不特定多数の人が使う・いつでもいていい・オープンスペースであるという特性を持っているので、市民参加の形をとりやすかった。 #matime
  • 一方で参加型のワークショップでできたチームが、ひとたび実際の工事に入ってしまうと解散するのがもったいない気がしていた。その場が供用開始されると共にもっとやれることがあるはずなのに。 #matime
  • 今のスタイルだと専門家として出来る事はとても少ない。「こちらからの提案」という形だと思考停止suruから、それぞれの話をよく聞き試して(失敗して)もらって、試行錯誤の中からよりよい形を見つけてもらう。相手の気持ちを引き出す相づち、折りよいタイミングの情報提供など。 #matime
  • .。oO(なんだかこれ学校のせんせいみたいだな。「言いたい事があってもぐっと我慢して気づくのを待つ」とか) #matime
  • 乾:「かたちをつくる」ことに対して期待はあるか? 山崎:そりゃもちろん。参加する市民を盛り上げる、目をキラキラさせてもらう空間は大切。しかし、それは使いにくさになっては意味がない。造形作家としての欲と、どう兼ね合いをつけるかが大切。 #matime
  • 作り手に期待したいのは、利用者の心理をしつこいくらいに考え続けて欲しいということ。「人をアフォードする」造形にどれだけの(コストをかける)意味があるか。近代以降、どれだけ人を介在させずに人を操作するか、ということに重きが置かれてきたけれど→ #matime
  • →「ひとが座りたくなる場所」なんて、そんなん「はーい、ここみんな座ってー!」って声をかけるファシリテーターがひとりいれば、実は済んじゃうことかもしれない。 #matime
  • 乾:建築家としては非常に耳の痛い指摘ではありますが…(にがわらい) #matime
  • 本編ここまで。質疑応答いろいろ。 #matime
  • A: 確かにそういう側面はある。同じ人たちががんばり続けるのではなく、部活動のように人が入れ替わっていく仕組みを作り、スキルを身に付けてもらおうとしている。リーダーがいると、最後までリーダーが必要になるので。自走できるようになればまわっていくのではないか。 #matime
  • Q:どうやって参加してくれる団体を集めるのか。 A:1対1で話して、何してるの?困ってる事は?面白い人紹介して?って訊く。問題を解決してあげると力になってくれるので。また、多くの団体から名前が挙がる人がキーパーソンになっているということもわかる。 #matime
  • Q:コーディネータはどうやって置くの? A:自発的に参加団体から出るかと思ったけど、調整役なのであんま楽しくない。なんらかの形で予算化して、有償でやるのがいいみたい。 #matime
  • Q: 市民団体のなかに、商売として入ってきたいと言われたらどうするのか。 A: なにかしたいのなら、全体を見て一番有効な事をやってもらうようにする。店閉めて集まりに顔出すくらいなら、街のために店を開け続けてくれ、と。 #matime
  • Q: コミュニティデザインという分野は今後どうなっていくのか? A:あらゆる分野や場で求められるものになると思う。ひとが集まるところすべて、企業や学校などでも。あらゆる場面がちょっとよくなるように関われたら。そのための人材を育てたいとも思っている。 #matime
  • ここでちょうどお時間でした。今回もたいへんエキサイティングでございましたことよ。 往復書簡本がちょう楽しみ! #matime