Technical Program Manager, Coder, MSc, MBA, tinkerer, generalist.

London
Joined May 2008
if you leave twitter, please put your new location in your bio. thanks!
3
10
1
29
oimo.io/works/bubbles/ Released Bubbles, an interactive soap-bubble simulator! Runs on your PCs and smartphones 🌬️🫧 公開しました!シャボン玉をくっつけて遊べます #indiedevs
10
324
25
879
p=f=0,draw=a=>{for(f++||createCanvas(W=400,W,WEBGL,T=translate,S=sphere,F=fill),background(0),z=-W;z<W;z+=8)for(x=-W;x<W;x+=4)push(d=200),T(x,y=99*noise(x/d+3,(z-f)/d)+99,z),F(99*(y-p)+d-22*!(z%8)),p=y,T(0,-99),S(1,d),F(W),pop(T(0,-y),S(140-y<0?0:35-y/4,d))};//#つぶやきProcessing
4
26
2
168
also at @davidedc@mas.to – at Barnet, London
setup=_=>{createCanvas(W=720,W) background("#114") noStroke() R=random for(i=600;i-->39;)fill(W,i/9)+circle(R(W),R(W),i/99)+(i<50?circle(H=360,H,H+i%9*30):0) fill("#D86") circle(H,H,H) drawingContext.clip() for(i=0;i<W;i++){fill(0,i/99)+circle(R(W),R(W),i/3)}} #つぶやきProcessing
1
11
1
36
#つぶやきProcessing f=0;p=[];draw=_=>{f++||createCanvas(W=801,W)&&background(127);p=p.filter(e=>{push();translate(e.x,e.y);rotate(e.a);stroke(e.b%2*W);circle(d=f-e.b,16*asin(sin(d/16)),2);pop();return d<W});p.push({b:f,x:random(W),y:random(W),a:random(TAU)})} #p5js #generativeart
1
2
12
Wildflowers 🌻 dwitter.net/d/26439 #generativeart #javascript #tinycode A=S(B=X=t*t*797%1e3)/4 Y=199+X%57 for(i=t%1>.1||21;i-->-80;x.fillRect(q?X-5+S(a=i+Y)*i:X+=S(A-=.003),q?Y+C(a)*i:Y+=C(A),z=q?9:i/19,z))q=i>0,x.fillStyle=R(z=q&&i*19,q?z/2:B%99) x.scale(s=1.001,s)
3
30
📽️Outsized baubles from a Christmas display have caused chaos on London's Tottenham Court Road after rolling into traffic. Read more here ⬇️ telegraph.co.uk/news/2022/11…
678
2,692
2,959
10,422
t=0 draw=_=>{t||createCanvas(W=720,W) t+=.03 background(0,99) stroke(W) fill(W,99) F=.5 for(r=0;r<TAU;r+=PI/32){ F++ X=Y=360 beginShape() for(d=0;d<60;d++)vertex(X+=cos(R=r+(noise(d/9-t)-.5)*d*d/400*(L=F%4-2))*d/6*L,Y+=sin(R)*d/6*L) endShape()}} #つぶやきProcessing
1
6
22
#つぶやきProcessing f=0 draw=_=>{f++?background(0):createCanvas(W=600,W) beginShape() vertex(0,W) for(n=W*2;n--;vertex(x,y))for(y=x=n-300,m=14;m--;x=X+d*sin(b=atan2(x-X,y-Y)+max(0,W-d)/250*sin(m+f/W*PI)),y=Y+d*cos(b))a=noise(m)*W,d=dist(x,y,X=a*7%W,Y=a*9%W) endShape()}
3
14
Troika, 'Squaring the Circle', 2013
48
1,183
91
7,916
t=0 draw=_=>{t?background(0):createCanvas(W=800,W,WEBGL) colorMode(HSB,99) rotateY(t+=.01) for(N=i=99;i--;){o=~~(t%2) e=2**(-9*(t%1))*sin((t%1*9-.75)*2.1)+1 push(x=i*(o?1-e:e)*6/N) rotateX(o?x:6-x) noFill(stroke(o?i:N-i,N,N)) translate(0,200) pop(box(i))}}//#つぶやきProcessing
2
3
1
16
#つぶやきProcessing 「六角スロット」 f=0 draw=_=>{ f++?background(0):createCanvas(W=500,W) noStroke() for(r=f%50;r<500;r+=50) for(i=0;i<TAU;i+=PI/30){ fill((f-r)%100*W) circle(250+r*cos(I=i+f*(noise(r-f)-.5)/10),250+r*sin(I),r/2*cos(i*3)) } }
1
4
14
//#つぶやきProcessing float d,n,r,t; void setup(){ size(800,800); } void draw(){ clear(); stroke(-1); translate(d=400,d); for(r=0;r<TAU;r+=PI/300){ n=d*noise(sin(r),cos(r),t); line(n*sin(r),n*cos(r),0,0); } t+=.01; }
3
6
t=0 draw=_=>{t||createCanvas(W=720,W) t+=.03 background(0,50) noFill() for(j=0;j++<9;)for(i=0;i++<200;){stroke(W,i/3) beginShape() X=noise(j,I=i/99+t)*W Y=noise(j,I,9)*W for(d=0;d<20;d++)vertex(X+=cos(R=noise(I+d)*99)*(D=(200-i)/9),Y+=sin(R)*D+D) endShape()}} #つぶやきProcessing
3
5
39
//#つぶやきProcessing float x,y,k=1,d; void setup(){size(800,800);} void draw(){ clear();stroke(-1); for(y=0;y<800;y++)for(x=0;x<800;x++)point(x+(d=k-k*2*noise(x/99,y/99)),y+d); k+=.1;}
2
10
36