notes:tableshots
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
notes:tableshots [2023/12/19 02:26] – [Towards a folk computer] discord | notes:tableshots [2024/02/17 00:46] (current) – osnr | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Towards a folk computer ====== | ====== Towards a folk computer ====== | ||
+ | |||
+ | // | ||
Folk Computer is a research & art project, led by Omar Rizwan and Andrés Cuervo, centered around designing | Folk Computer is a research & art project, led by Omar Rizwan and Andrés Cuervo, centered around designing | ||
Line 28: | Line 30: | ||
and display their outputs. You can see my setup in the [[https:// | and display their outputs. You can see my setup in the [[https:// | ||
- | {{ notes:hello_world.gif?600 }} | + | {{ notes:hello_folk_1.gif?600 }} |
The program is identified by its AprilTag, a variant of QR-code specialized for | The program is identified by its AprilTag, a variant of QR-code specialized for | ||
Line 37: | Line 39: | ||
<code tcl> | <code tcl> | ||
- | Wish $this is labelled " | + | Wish $this is labelled " |
- | Wish $this is outlined green | + | |
</ | </ | ||
- | |||
Programs are written in the Folk programming language, a domain-specific | Programs are written in the Folk programming language, a domain-specific | ||
Line 49: | Line 49: | ||
==== Fulfilling wishes ==== | ==== Fulfilling wishes ==== | ||
- | All clauses | + | All statements |
- | a '' | + | a '' |
- | comes with some default " | + | example, we can write a second program which affects |
- | physically activated. One of these determines how to draw lines, another how to | + | |
- | draw text. Note that there' | + | |
- | arbitrary in-fixed parameters. This leads to very readable code, even | + | |
- | approaching English. The choice of TCL, a string-based programming language, is | + | |
- | the central reason such a design is possible. | + | |
+ | {{ notes: | ||
<code tcl> | <code tcl> | ||
- | When /someone/ wishes /program/ is labelled | + | When /someone/ wishes /p/ is labelled |
- | # Find the region which corresponds to the program. | + | Wish $p is outlined green |
- | # Draw the text at the centroid of the region. | + | |
} | } | ||
</ | </ | ||
+ | |||
+ | Notice how, as soon as I drop the second program on the table, the first gets outlined | ||
+ | green. The variable '' | ||
+ | outlined. The same happens when a put a copy of the first program on the table. Another | ||
+ | '' | ||
+ | Note that there' | ||
+ | arbitrary in-fixed parameters. This leads to very readable code, even | ||
+ | approaching English. The choice of TCL, a string-based programming language, is | ||
+ | the central reason such a design is possible. | ||
+ | |||
+ | Somewhere else in our system there is a program which [[https:// | ||
+ | another that [[https:// | ||
<code tcl> | <code tcl> | ||
Line 73: | Line 80: | ||
</ | </ | ||
- | The OS works something like a spreadsheet. On each frame, | + | But where are these programs, if not on the table? |
- | that are currently running, figures out the dependency tree, and then executes | + | always running despite not being physically activated. |
- | the programs in sequence. This style of programming is far from traditional | + | On each frame of execution, the OS sees all statements |
- | imperative programming. Here we simply define behavior we'd like to see happen, | + | figures out a dependency tree of '' |
- | closer to a language like Prolog. | + | programming is far from traditional imperative programming. Here we simply define |
+ | behavior we'd like to see happen, closer to a language like Prolog. | ||
===== Interacting with peripherals ===== | ===== Interacting with peripherals ===== | ||
Line 89: | Line 97: | ||
webcams, RFID tag readers, or receipt printers. | webcams, RFID tag readers, or receipt printers. | ||
- | Another reason Folk is implemented on top of TCL is for its excellent | + | Another reason Folk is implemented on top of TCL is for its excellent |
- | with C. This is the same reason why Redis and SQLite have adopted it. In | + | interoperability and ability to embed sublanguages such as C inline. This is |
- | particular, this lets us read from ''/ | + | the same reason why Redis and SQLite have adopted it. In |
- | graphics API to draw to the buffer that is then displayed by the projector. For now, let's just stick to images to see what we can build. Since there' | + | particular, this lets us read from ''/ |
- | table to detect AprilTags, we can ask the system for its image and display it: | + | graphics API to draw to a buffer that is then displayed by the projector. For now, let's just stick to images to see what we can build. Since there' |
+ | table to detect AprilTags, we can ask the system for the image of the whole table and display it: | ||
{{ notes: | {{ notes: | ||
Line 152: | Line 161: | ||
</ | </ | ||
- | The two helper programs began as printed | + | The two helper programs began as printed |
==== Inline device drivers ==== | ==== Inline device drivers ==== | ||
Line 203: | Line 212: | ||
<code tcl> | <code tcl> | ||
When $this has region /r/ { | When $this has region /r/ { | ||
- | Claim $this' has region [region move $r down 350px] | + | Claim $this' has region [region move $r down 110%] |
} | } | ||
When $this' has camera slice /slice/ { | When $this' has camera slice /slice/ { | ||
- | Wish $this displays $slice | + | Wish $this displays |
} | } | ||
</ | </ | ||
Line 290: | Line 299: | ||
With inspiration from the tradition of [[https:// | With inspiration from the tradition of [[https:// | ||
- | some further interface ideas emerge. A simple, and very clever, way to start is "paper button". | + | some further interface ideas emerge. A simple, and very clever, way to start is [[https:// |
- | We a physical mechanism to impede detection until a user action is made: | + | We use physical mechanism to impede detection until a user action is made: |
{{ notes: | {{ notes: | ||
Line 481: | Line 490: | ||
proc regionFromBox {program x1 y1 x2 y2} { | proc regionFromBox {program x1 y1 x2 y2} { | ||
- | | + | |
- | set edges [list [list 0 1] [list 1 2] [list 2 3] [list 3 0]] | + | set edges [list [list 0 1] [list 1 2] [list 2 3] [list 3 0]] |
- | Claim $program has region [region create $vertices $edges] | + | Claim $program has region [region create $vertices $edges] |
} | } | ||
</ | </ | ||
Line 528: | Line 537: | ||
set w [image width $im] | set w [image width $im] | ||
set c [list [+ $x [/ $w 2]] [+ $y [/ $h 2]]] | set c [list [+ $x [/ $w 2]] [+ $y [/ $h 2]]] | ||
- | Wish to draw an image with center $c image $im radians 3.1415 scale 1\ | + | Wish to draw an image with center $c image $im radians 3.1415 scale 1 |
set y [+ $y $h] | set y [+ $y $h] | ||
} | } | ||
Line 543: | Line 552: | ||
physical programs and paper interfaces, instead of mouse and screen. This folk | physical programs and paper interfaces, instead of mouse and screen. This folk | ||
interface is just one of many supported by the Folk operating system, a means | interface is just one of many supported by the Folk operating system, a means | ||
- | to coordinate peripherals (camera and projector) in a reactive manner. | + | to coordinate peripherals (including, but not limited to, camera and projector) |
+ | in a reactive manner. | ||
{{ notes: | {{ notes: | ||
Line 555: | Line 565: | ||
objects into the material world. | objects into the material world. | ||
- | While Folk retains | + | While Folk currently |
class, it should not be confused with mere post-modern pastiche. The primary | class, it should not be confused with mere post-modern pastiche. The primary | ||
function of the system is //not// the sign. It avoids the temptation of | function of the system is //not// the sign. It avoids the temptation of | ||
Line 566: | Line 576: | ||
plasticity of computation lightens the finitude of the material world. | plasticity of computation lightens the finitude of the material world. | ||
- | // | ||
notes/tableshots.1702952795.txt.gz · Last modified: by discord