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:27] – [Infinite plasticity] 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: | ||
| In [[https:// | In [[https:// | ||
| - | I argued that, instead of thinking of software as a | + | I argued that instead of thinking of software as a |
| mechanism to automate existing processes, it was better understood as a | mechanism to automate existing processes, it was better understood as a | ||
| language for defining systems or materials with a combinatorial set of | language for defining systems or materials with a combinatorial set of | ||
| 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.1702952847.txt.gz · Last modified: by discord
