User Tools

Site Tools


notes:tableshots

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
notes:tableshots [2023/12/19 13:39] – [Origami interfaces] discordnotes:tableshots [2024/02/17 00:46] (current) osnr
Line 1: Line 1:
 ====== Towards a folk computer ====== ====== Towards a folk computer ======
 +
 +//[[https://cristobal.space|Cristóbal Sciutto]], December, 2023//
  
 Folk Computer is a research & art project, led by Omar Rizwan and Andrés Cuervo, centered around designing  new physical computing interfaces. The aims are, among others: Folk Computer is a research & art project, led by Omar Rizwan and Andrés Cuervo, centered around designing  new physical computing interfaces. The aims are, among others:
Line 28: Line 30:
 and display their outputs. You can see my setup in the [[https://folk.computer/directory#folk-zeca-manhattan-ny-usa|Folk directory]]. Here's a first program: and display their outputs. You can see my setup in the [[https://folk.computer/directory#folk-zeca-manhattan-ny-usa|Folk directory]]. Here's a first program:
  
-{{ 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 "hello world!" +Wish $this is labelled "hello folk!"
-Wish $this is outlined green+
 </code> </code>
- 
  
 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 ''Wish'' using+All statements get stored in a reactive database. We can react to a statement using
 a ''When''. If the clauses match, then some code gets executed in response. For a ''When''. If the clauses match, then some code gets executed in response. For
-example, to fulfill the  wish to label and outline in our "Hello folk!" program, +example, we can write a second program which affects the first. 
-we'write something along the lines of:+ 
 +{{ notes:hello_folk_2.gif?600 }}
  
 <code tcl> <code tcl>
-When /someone/ wishes /program/ is labelled /text/ +When /someone/ wishes /p/ is labelled "hello folk!" 
-  # Find the region which corresponds to the program. +    Wish $p is outlined green
-  # Draw the text at the centroid of the region.+
 } }
 </code> </code>
  
-The first ''When'' determines how to draw lines by establishing a pattern with the +Notice how, as soon as I drop the second program on the table, the first gets outlined 
-same language as the ''wish'' of our first program. The variable ''/program/'' will +green. The variable ''p'' is bound to the identifier of the first program, and it gets 
-be bound to ''$this'' and ''text'' to ''hello world!''Similarlyfor the outline, we'd write:+outlined. The same happens when a put a copy of the first program on the tableAnother 
 +''p'' is bound, which also gets outlined green. 
 +Note that there's very little syntax and clause-matching supports 
 +arbitrary in-fixed parameters. This leads to very readable code, even 
 +approaching EnglishThe choice of TCLa string-based programming language, is 
 +the central reason such a design is possible. 
 + 
 +Somewhere else in our system there is a program which [[https://git.folk.computer/folk/tree/virtual-programs/label.folk#n13|draws text]] on the table, and 
 +another that [[https://git.folk.computer/folk/tree/virtual-programs/outline.folk#n12|draws colored lines]]. They are implemented just as our second program aboveusing the ''When'' primitive to execute some code.
  
 <code tcl> <code tcl>
Line 72: Line 80:
 </code> </code>
  
-Note that there's very little syntax and clause-matching supports +But where are these programs, if not on the table? The system has some default "virtual programs",
-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 ''when'' clauses? The system has some default "virtual programs",+
 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 158: Line 161:
 </code> </code>
  
-The two helper programs began as printed program, but eventually became a stable "virtual-program" that are always running in the background. The face that programs are always running, waiting to be matched, makes it much more natural to bootstrap off of previous code you've written. You slowly build your own personal language that lets you express the things you want to make.+The two helper programs began as printed programs, but eventually will become stable "virtual-programs" that run in the background. The fact that some programs are always running, waiting to be matched, makes it much more natural to bootstrap off of previous code you've written. You slowly build your own personal language that lets you express the things you want to make.
  
 ==== Inline device drivers ==== ==== Inline device drivers ====
Line 212: Line 215:
 } }
 When $this' has camera slice /slice/ { When $this' has camera slice /slice/ {
-    Wish $this displays $slice+    Wish $this displays camera slice $slice
 } }
 </code> </code>
Line 549: 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:paper.gif?600 }} {{ notes:paper.gif?600 }}
Line 561: Line 565:
 objects into the material world. objects into the material world.
  
-While Folk retains the playful aesthetic of paper collages from a child's art+While Folk currently retains playful aesthetic of paper collages from a child's art
 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 572: Line 576:
 plasticity of computation lightens the finitude of the material world. plasticity of computation lightens the finitude of the material world.
  
-//Cristóbal Sciutto, December, 2023// ====== 
  
notes/tableshots.1702993188.txt.gz · Last modified: by discord

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki