C4 is an open source framework built to make creative-coding easy for designers.
C4 is an open source framework built to make creative-coding easy for designers.
C4 is an open source framework built to make creative-coding easy for designers.
C4 is an open source framework built to make creative-coding easy for designers.



You can create beautiful interactive experiences with it.
You can create beautiful interactive experiences with it.
You can create beautiful interactive experiences with it.
You can create beautiful interactive experiences with it.




A light installation I made with Alex, from Tangible Interaction.
A light installation I made with Alex, from Tangible Interaction.
A light installation I made with Alex, from Tangible Interaction.
A light installation I made with Alex, from Tangible Interaction.
The language is simple, expressive, and easy to learn.
The language is simple, expressive, and easy to learn.
The language is simple, expressive, and easy to learn.
The language is simple, expressive, and easy to learn.








var pts = (Point(), Point())
var step = 0.0
repeat {
let w = pow(1.1, step)
let dy = Vector(x: 0, y: w+1)
pts.0 += dy
pts.1 += dy
let newLine = Line(points)
newLine.lineWidth = w
canvas.add(newLine)
step += 1.0
}
var pts = (Point(), Point())
var step = 0.0
repeat {
let w = pow(1.1, step)
let dy = Vector(x: 0, y: w+1)
pts.0 += dy
pts.1 += dy
let newLine = Line(points)
newLine.lineWidth = w
canvas.add(newLine)
step += 1.0
}
var pts = (Point(), Point())
var step = 0.0
repeat {
let w = pow(1.1, step)
let dy = Vector(x: 0, y: w+1)
pts.0 += dy
pts.1 += dy
let newLine = Line(points)
newLine.lineWidth = w
canvas.add(newLine)
step += 1.0
}
var pts = (Point(), Point())
var step = 0.0
repeat {
let w = pow(1.1, step)
let dy = Vector(x: 0, y: w+1)
pts.0 += dy
pts.1 += dy
let newLine = Line(points)
newLine.lineWidth = w
canvas.add(newLine)
step += 1.0
}
let dy = Vector(x: 0, y: 100)
let a = ViewAnimation(1.0) {
line1.endPoints.0 += dy
line2.endPoints.1 -= dy
}
a.repeats = true
a.autoreverses = true
a.animate()
let dy = Vector(x: 0, y: 100)
let a = ViewAnimation(1.0) {
line1.endPoints.0 += dy
line2.endPoints.1 -= dy
}
a.repeats = true
a.autoreverses = true
a.animate()
let dy = Vector(x: 0, y: 100)
let a = ViewAnimation(1.0) {
line1.endPoints.0 += dy
line2.endPoints.1 -= dy
}
a.repeats = true
a.autoreverses = true
a.animate()
let dy = Vector(x: 0, y: 100)
let a = ViewAnimation(1.0) {
line1.endPoints.0 += dy
line2.endPoints.1 -= dy
}
a.repeats = true
a.autoreverses = true
a.animate()




It is rooted in my practice developing installation artworks and teaching.
It is rooted in my practice developing installation artworks and teaching.
It is rooted in my practice developing installation artworks and teaching.
It is rooted in my practice developing installation artworks and teaching.



I often gave lectures on artistic expression through software.
I often gave lectures on artistic expression through software.
I often gave lectures on artistic expression through software.
I gave many lectures on artistic expression using code.



I led many creative coding workshops over the years.
I led many creative coding workshops over the years.
I led many creative coding workshops over the years.
I led many creative coding workshops over the years.
Everything is possible. Touch interfaces, randomization, media control, ux components, and more…
Everything is possible. Touch interfaces, randomization, media control, ux components, and more…
Everything is possible. Touch interfaces, randomization,
media control, ux components, and more…
Everything is possible. Touch interfaces, randomization, media control, ux components, and more…
















These examples show randomization animations, icon animations, and touch tracking.
These examples show randomization animations, icon animations, and touch tracking.
Examples showing randomization, ux animation, and touch tracking.
These examples show randomization animations, icon animations, and touch tracking.
Click any image below to view the Automata project