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 13:34] – [Fulfilling wishes] 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 statements get stored in a reactive database. We can react to a '' | + | All statements get stored in a reactive database. We can react to a statement |
| a '' | a '' | ||
| - | example, | + | example, we can write a second program which affects |
| - | we' | + | |
| + | {{ notes:hello_folk_2.gif? | ||
| <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. | + | |
| } | } | ||
| </ | </ | ||
| - | The first '' | + | Notice how, as soon as I drop the second program on the table, the first gets outlined |
| - | same language as the '' | + | green. The variable |
| - | be bound to '' | + | outlined. The same happens when a put a copy of the first program |
| + | '' | ||
| + | Note that there's very little syntax | ||
| + | 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 72: | Line 80: | ||
| </ | </ | ||
| - | Note that there' | + | But where are these programs, if not on the table? The system has some default " |
| - | 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. | + | |
| - | + | ||
| - | But where are these '' | + | |
| always running despite not being physically activated. | always running despite not being physically activated. | ||
| On each frame of execution, the OS sees all statements that are live in the database, | On each frame of execution, the OS sees all statements that are live in the database, | ||
| Line 94: | 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 157: | Line 161: | ||
| </ | </ | ||
| - | The two helper programs began as printed | + | The two helper programs began as printed |
| ==== Inline device drivers ==== | ==== Inline device drivers ==== | ||
| Line 208: | 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 295: | 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 548: | 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 560: | 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 571: | Line 576: | ||
| plasticity of computation lightens the finitude of the material world. | plasticity of computation lightens the finitude of the material world. | ||
| - | // | ||
notes/tableshots.1702992870.txt.gz · Last modified: by discord
