Programming in Nature

we need to get out more

QaSaC Introduction

:: QaSaC

When we consider a language for programming with cameras we note that visual recognition has a great strength and great weakness.

  • The weakness is that recognition gets harder as we need to accurately disambiguate and classify more things.
  • The strength is that we have two-dimensions to play with.

Our first attempt at a language for this environment is QaSaC (an acronym for Queues and Stacks and Combinators, the elements from which QaSaC is made). QaSac is inspired by and combines elements of “data-flow” programming / languages, such as Pure Data. And stack-based “concatenative” languages such as Forth, and more specifically, Joy.

Both of these programming paradigms help us by reducing the number of names that need to be created and worked with.

Stack-based languages work with local data on an implicit stack. And data is refered to largely based on its “ordering” in the program and positioning on the stack, rather than with local names.

Data-flow languages organize their larger-scale structure in terms of nodes and the connections between them. In visual languages such as PD, no explicit names are given to these nodes, but instead, positioning and the visual arcs between the nodes, provides topological information.

A QaSaC program, then, is a flow-network of nodes, joined by asynchronous queues. Each node is a self-contained, small machine that reads data from its input queues, manipulates it using its local stack, and ultimately passes it on via its output queues.

A node’s program itself is writen in a language largely inspired by Joy.

The topology joining the nodes does have a textual representation, but is intended to be infered from images or created with a visual editor.



See the QaSaC GitHub repository for further details with a working QaSaC virtual machine / interpreter.

PIN @ #15-art

:: papers

This is the original Programming in Nature paper presented at 15-art in Brasilia, 2016.

It contains an overview and rationale of the project with examples of early work-in-progress.

(Please excuse the formating, which is ugly but the required conference style. Some images and ideas will be republished on this blog in a more digestible, easy to link / access form.)

Computer Programming

:: programming, lisp, magic

From the introduction to The Structure and Interpretation of Computer Programs

We are about to study the idea of a computational process. Computational processes are abstract beings that inhabit computers. As they evolve, processes manipulate other abstract things called data. The evolution of a process is directed by a pattern of rules called a program. People create programs to direct processes. In effect, we conjure the spirits of the computer with our spells.

A computational process is indeed much like a sorcerer’s idea of a spirit. It cannot be seen or touched. It is not composed of matter at all. However, it is very real. It can perform intellectual work. It can answer questions. It can affect the world by disbursing money at a bank or by controlling a robot arm in a factory. The programs we use to conjure processes are like a sorcerer’s spells. They are carefully composed from symbolic expressions in arcane and esoteric programming languages that prescribe the tasks we want our processes to perform.

A computational process, in a correctly working computer, executes programs precisely and accurately. Thus, like the sorcerer’s apprentice, novice programmers must learn to understand and to anticipate the consequences of their conjuring. Even small errors (usually called bugs or glitches) in programs can have complex and unanticipated consequences.

Ritual #1 : Hello World

:: rituals

Engaging the dynamic flows in nature to produce the words : “hello world”.

Find a place near an ants’ nest. Mix a small amount of sugar and water. Use a leaf or piece of grass as a quil.

Sugar and Water

Sugar and Water

Write “hello world” in sugar-water and attract the ants to cluster around it.

Hello Ants

Hello Ants