User Tools

Site Tools


newsletters:2026-05

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
newsletters:2026-05 [2026/06/02 19:33] – add TODOs adminnewsletters:2026-05 [2026/06/03 22:29] (current) – [General system improvements] osnr
Line 6: Line 6:
 }} }}
  
-Our next Folk open house will be on [[https://luma.com/niypr5av|June TODO, 2026]].+//Our next Folk open house will be on [[https://luma.com/niypr5av|Tuesday, June 30th, 2026]].//
  
 ===== What we've been up to ===== ===== What we've been up to =====
Line 12: Line 12:
 ==== General system improvements ==== ==== General system improvements ====
  
-  * Omar [[https://github.com/FolkComputer/folk/pull/264/commits/daa6fc8b78ccd4f185ae50271061c983254d2e33|added column numbers to Jim Tcl stack traces]], so we can get the exact position of an expression like ''[Field _______]'' in both x and y (until now, Jim only recorded line numbers, so this change pervades the whole interpreter)+  * [[https://github.com/FolkComputer/folk/pull/264/commits/daa6fc8b78ccd4f185ae50271061c983254d2e33|Added column numbers to Jim Tcl stack traces]], so we can get the exact position of an expression like ''[Field _______]'' in both x and y (until now, Jim only recorded line numbers, so this change pervades the whole interpreter)
     *      * 
-  * Omar [[https://github.com/FolkComputer/folk/commit/7703e0eb75b851917a7eb4f9f7228228996d87b5|made fn-created procs get destroyed at end of scope]], so you can hot-reload fns (they no longer stick around in global scope when the new code is injected) +  * [[https://github.com/FolkComputer/folk/commit/7703e0eb75b851917a7eb4f9f7228228996d87b5|Made fn-created procs get destroyed at end of scope]], so you can hot-reload fns (they no longer stick around in global scope when the new code is injected) 
-  * Omar changed calibrate tag size to be the same as printed tag size, which should help most tracking be more accurate even if you mis-measure tags+  * Changed calibrate tag size to be the same as printed tag size in [[newsletters/2026-05#editor-based-print-typesetting-and-layout|the print/calibration changes]], which should help most tracking be more accurate even if you mis-measure tags (note: **you need to recalibrate**)
     * {{.:pasted:20260601-174322.png?450px}}     * {{.:pasted:20260601-174322.png?450px}}
-  * Omar added [[https://github.com/FolkComputer/folk/pull/259/changes/0931c0b4e949d7fb0f254ce0ebc5629a8d08c916|support for array length as a virtual parameter in C calls]], which lets us get rid of a lot of extra parameters/cruft at the caller where we were passing pointer + array length separately+  * Added [[https://github.com/FolkComputer/folk/pull/259/changes/0931c0b4e949d7fb0f254ce0ebc5629a8d08c916|support for array length as a virtual parameter in C calls]], which lets us get rid of a lot of extra parameters/cruft at the caller where we were passing pointer + array length separately
     * {{.:pasted:20260601-174159.png?500px}}     * {{.:pasted:20260601-174159.png?500px}}
-  * Omar fixed a big memory leak where every block execution was allocating new Jim channels for the stdout/stderr files+  * [[https://github.com/FolkComputer/folk/commit/8296b08f17fd83b56faabf605f517df2dfef5d18|Fixed a big memory leak]] where every block execution was allocating new Jim channels for the stdout/stderr files
     * Helpful: this RAM checker program:     * Helpful: this RAM checker program:
       * {{newsletters:img_4796.jpeg?500px}}       * {{newsletters:img_4796.jpeg?500px}}
 +  * [[https://github.com/FolkComputer/folk/commit/66d771a4557a8e3194908da36721512bdd0800d0|Fixed epoch thread slot cleanup]] so you can keep churning threads without running out of epoch slots in the epoch-based reclamation system
 +  * [[https://github.com/FolkComputer/folk/commit/8caf5ca89c9629931bd3480ba75a134cc393e972|Debounced/reduced canvas creation churn]] when the statement's parent goes away and comes back a lot
 +  * [[https://github.com/FolkComputer/folk/commit/dfbc6b0dce918d6ad99d277cd907a31622b710eb|Fixed RAM exhaustion check]] which had been broken by using meminfo file instead of API (this fix makes it harder to fully break systems such that you can't even ssh in)
 +  * [[https://github.com/FolkComputer/folk/commit/1c4fac2910827b28d578007c0d976842e152ac90|Fixed -atomically]] flag for When which wasn't actually getting the When pattern to distinguish between blocks on the same origin, so you'd get unnecessary blinking
 +    * Also now use atomicallyWithKey to control blinking on titles/footnotes/etc
 +    * Hoping now that we know how to work it, we can use -atomically more aggressively to stomp out blinking + start thinking about how to automatically introduce it so Folk code 'does the right thing' out of the box most of the time
  
 === Fix match destruction and insertion race/crash === === Fix match destruction and insertion race/crash ===
  
-https://github.com/FolkComputer/folk/commit/4c491168f8535d2b3bdfe990cd737f8f815bc1f5+A [[https://github.com/FolkComputer/folk/commit/4c491168f8535d2b3bdfe990cd737f8f815bc1f5|pretty tricky and subtle]] bug in how we dealt with match slots: we were marking slots as free by setting childStatements to NULL, but then disposing the slot's destructor set later, so there was a chance that the slot got reused in that middle period. Then the destructor set is destroyed while the match slot is used for another match, meaning that you have a null pointer that crops up when you try to destroy the new match / clear its destructors, or you lose the new destructors (which means stuff sticks around forever, I guess). 
 + 
 +Fixed by adding a third state for childStatements that indicates they're in the middle of removal process and you shouldn't reuse the slot (that field is atomic already anyway).
  
 === Fix texture exhaustion crash === === Fix texture exhaustion crash ===
Line 104: Line 112:
 </details> </details>
  
-=== QueryOne! changes and new Expect! construct ===+ 
 +=== Handle HTTPS proxies === 
 +Andrés: [[https://github.com/FolkComputer/folk/pull/260|Handle WebSocket header behind HTTPS proxies 
 +(PR #260)]] fixes an edge case where Folk's ''/new'' endpoint was crashing behind a Tailscale reverse proxy. Previously we used case-sensitive dictionary lookups (e.g., ''dict get $headers Content-Length''). This would throw an error if headers were missing or had unexpected capitalization. 
 + 
 +To fix this we now have a new ''headerGet'' proc: 
 + 
 +<code tcl> 
 +proc headerGet {headers name args} { 
 +    foreach {k v} $headers { 
 +        if {[string equal -nocase $k $name]} { return $v } 
 +    } 
 +    if {[llength $args] > 0} { return [lindex $args 0] } 
 +    error "missing HTTP header $name" 
 +
 +</code> 
 + 
 +This helper adds support for **case-insensitive matching** and **default fallback values**. For example, instead of crashing when a client attempts a WebSocket connection without a ''Sec-WebSocket-Key'', the server can now safely detect the missing key and return a clean HTTP 400 response: 
 + 
 +<code tcl> 
 +- WsConnection upgrade $chan [dict get $headers Sec-WebSocket-Key] 
 ++ set clientKey [headerGet $headers Sec-WebSocket-Key ""
 ++ if {$clientKey eq ""} { 
 ++     puts -nonewline $chan "HTTP/1.1 400 Bad Request\r\n...Missing Sec-WebSocket-Key\r\n" 
 ++     close $chan 
 ++     return 
 ++ } 
 +</code> 
 + 
 + 
 + 
 +==== QueryOne! changes and new Expect! construct ====
  
 Omar: [[https://github.com/FolkComputer/folk/pull/265|Added support for ''-default'' option and 'nameless return value binding' ''/./'' to ''QueryOne!''. Also added ''Expect!'' which directly makes bindings in the caller scope.]] Omar: [[https://github.com/FolkComputer/folk/pull/265|Added support for ''-default'' option and 'nameless return value binding' ''/./'' to ''QueryOne!''. Also added ''Expect!'' which directly makes bindings in the caller scope.]]
Line 121: Line 160:
  
 Thanks to Mason Jones for design input on defaults and s-ol for suggesting the direct-binding ''Expect!'' syntax. Thanks to Mason Jones for design input on defaults and s-ol for suggesting the direct-binding ''Expect!'' syntax.
-=== Handle HTTPS proxies === 
-  * Andrés: TODO 
 ==== Shapes, new and improved ==== ==== Shapes, new and improved ====
   * Andrés: Now that the semester is over and I'm done teaching at Parsons and SVA part time I've been able to go to the studio nearly every day. Most days in May I was working on [[https://github.com/FolkComputer/folk/pull/261|Revive drawing capabilities (new and improved!) (PR #261)|]], which has resulted in enabling a much more consistent and capable set of shape drawing wishes, e.g.:   * Andrés: Now that the semester is over and I'm done teaching at Parsons and SVA part time I've been able to go to the studio nearly every day. Most days in May I was working on [[https://github.com/FolkComputer/folk/pull/261|Revive drawing capabilities (new and improved!) (PR #261)|]], which has resulted in enabling a much more consistent and capable set of shape drawing wishes, e.g.:
-    * {{newsletters:600402193-0cbe158b-4208-4547-999d-ca80ee7ec8ac.mp4?500px}}+    * {{newsletters:600402193-0cbe158b-4208-4547-999d-ca80ee7ec8ac_no_hdr.mp4?500px}}
     * In order, left to right, we added the ability to draw:     * In order, left to right, we added the ability to draw:
       * filled shapes       * filled shapes
Line 137: Line 174:
       * draw Bezier curves       * draw Bezier curves
       * GIFs (not new)       * GIFs (not new)
 +    * The PR needs a bit of refactoring but I expect it to be merged by the end of the first week of June.
  
 ==== Screen sharing experiments ==== ==== Screen sharing experiments ====
-  * Andrés: TODO+Andrés: [[https://www.linkedin.com/in/brianshlee/|Brian Lee]] and I were pairing on enabling [[https://www.webrtc-experiment.com/Pluginfree-Screen-Sharing/#4897161650215401|screen sharing via WebRTC]]. We got it working [[https://github.com/FolkComputer/folk/tree/ac/screenshare|on a branch]] (''ac/screenshare'') and tried out sharing Google Maps and the news on the table: 
 +  * {{newsletters:img_5803_no_hdr.mp4}} {{newsletters:img_5802_no_hdr.mp4}} 
 + 
 +There's something really magical about seeing your screen as a little, live texture you can control, [[https://hackaday.com/2021/10/29/muggle-uses-e-paper-for-daily-prophet-replica/|Daily Prophet]]-like, even! Brian's really interested in using newspaper-sized sheets of paper to project large, movable versions of screens as a kind of presenter mode. We'll prototype that + try to land this PR next month! 
 ==== Editor-based print typesetting and layout ==== ==== Editor-based print typesetting and layout ====
  
-Omar: You may remember that I've been interested in [[newsletters/2025-01#handwriting-recognition-proposal|fields on the printed code]] for a while:+Omar: I've changed around the editor and print logic so that printouts come out looking exactly like the editor (and line up perfectly when calibration and pose estimation are good enough): 
 + 
 +{{newsletters:img_5302.mp4?200px}} {{newsletters:img_5303.jpeg?200px}} {{newsletters:img_5266.jpeg?200px}} 
 + 
 +so typeface, margins, line spacing, text size, etc are all aligned. 
 + 
 +You may remember that I've been interested in [[newsletters/2025-01#handwriting-recognition-proposal|fields on the printed code]] for a while:
  
 > I think it would be cool to provide an API like this: > I think it would be cool to provide an API like this:
Line 164: Line 212:
  
 Also got rid of word wrap (you can choose how to wrap it yourself by hand, since you see how it'll get cut off -- I like giving these presentational decisions to the user) and made the editing happen on the page itself, which has downsides. Also got rid of word wrap (you can choose how to wrap it yourself by hand, since you see how it'll get cut off -- I like giving these presentational decisions to the user) and made the editing happen on the page itself, which has downsides.
 +
 +(It's also a good way to motivate making the calibration really good, since it's obvious when it's off by more than a millimeter or so)
 +
 +The new print system emits a much richer geometry that says where the paper edges, the tag, and the code margins are.
 +
 +It also **requires you to print a new calibration board and recalibrate** so the system can understand the print properties of your printer and print stuff at exact metric positions on the page (which is an important advance for us). Here's how the new calibration looks:
 +
 +{{.:pasted:20260603-213522.png?500px}}
 +
  
 ==== Experimental Tcl interpreter update (Zicl) ==== ==== Experimental Tcl interpreter update (Zicl) ====
Line 241: Line 298:
  
 We met [[https://ktrosenberg.github.io/|Karl Rosenberg from NYU]] at the SVA talk and have since been working a bit with him on integrating his [[https://ktrosenberg.github.io/drawtalking/|DrawTalking]] project into Folk. It's exciting to have an external collaborator and to be doing more drawing and external-computer interactions (again, not just moving pieces of paper around). We met [[https://ktrosenberg.github.io/|Karl Rosenberg from NYU]] at the SVA talk and have since been working a bit with him on integrating his [[https://ktrosenberg.github.io/drawtalking/|DrawTalking]] project into Folk. It's exciting to have an external collaborator and to be doing more drawing and external-computer interactions (again, not just moving pieces of paper around).
 +
 +{{youtube>Kgt48theqi0?}}
  
 His external system (iPad app + server) is sort of stateful and opinionated, so we want to use it to drive story/behavior and use Folk as a 'view' at first. Eventually, it would be great to do storyboard interactions to draw on physical paper, and also have the animation/game interact with real-world objects on the table (beyond just tagged pieces of paper, too). His external system (iPad app + server) is sort of stateful and opinionated, so we want to use it to drive story/behavior and use Folk as a 'view' at first. Eventually, it would be great to do storyboard interactions to draw on physical paper, and also have the animation/game interact with real-world objects on the table (beyond just tagged pieces of paper, too).
Line 250: Line 309:
  
 == Setup == == Setup ==
 +
 +Omar, Andrés, and Brian worked on installing a Folk system permanently in a small cubby/study area at School of Visual Arts in Manhattan. It might be our cleanest setup yet -- we like this method of hanging from a dowel and drilled into the ceiling -- it is easily able to support the weight, and it's adjustable.
  
 {{newsletters:img_4477.jpeg?200px}} {{newsletters:img_4485.jpeg?200px}} {{newsletters:img_4486.jpeg?200px}} {{newsletters:img_4493.jpeg?200px}} {{newsletters:img_4477.jpeg?200px}} {{newsletters:img_4485.jpeg?200px}} {{newsletters:img_4486.jpeg?200px}} {{newsletters:img_4493.jpeg?200px}}
Line 257: Line 318:
 Andrés working on the final setup of the table: Andrés working on the final setup of the table:
    
-{{newsletters:img_4617.mp4?400px}}+{{newsletters:img_4617_no_hdr.mp4?400px}}
  
 == The talk == == The talk ==
Line 265: Line 326:
 === folk-recurse === === folk-recurse ===
  
-The Folk instance at the Recurse Center is back up, thanks to [[https://audreygu.io/|Audrey Gu]] and [[https://jaza.xyz/|Jaza Syed]]:+The Folk instance at the [[https://www.recurse.com/|Recurse Center]] is back up, thanks to [[https://audreygu.io/|Audrey Gu]] and [[https://jaza.xyz/|Jaza Syed]]:
  
-{{newsletters:2361.mp4?200px}}+{{newsletters:2361_no_hdr.mp4?200px}}
  
 Audrey and other Recursers have been playing with the system and poking at Jessie Grosen's SuperCollider programs: Audrey and other Recursers have been playing with the system and poking at Jessie Grosen's SuperCollider programs:
  
-{{newsletters:img_3069.jpg?220px}} {{newsletters:3066.mp4?165px}}+{{newsletters:img_3069.jpg?220px}} {{newsletters:3066_no_hdr.mp4?165px}}
  
 === Open house === === Open house ===
Line 287: Line 348:
 Danny made a 'kaleidoscope': Danny made a 'kaleidoscope':
  
-{{newsletters:img_5388.jpeg?300px}} {{newsletters:img_5387.mp4?300px}}+{{newsletters:img_5388.jpeg?300px}} {{newsletters:img_5387_no_hdr.mp4?300px}}
  
  
-===== What we'll be up to in April =====+===== What we'll be up to in June =====
  
-  * [[https://luma.com/niypr5av|RSVP for the Folk open house on TODO, June TODO]], at our studio in Williamsburg.+  * [[https://luma.com/niypr5av|RSVP for the Folk open house on Tuesday, June 30th]], at our studio in Williamsburg. 
 +  * Andrés: landing the shapes PR 
 +  * Andrés: working on getting HTTPS and screensharing working 
 +  * Omar: fix crashes, improve performance 
 +  * Omar: go back to working on SAM2 demos and object tracking 
 +  * Omar: work with Karl on DrawTalking demo 
 +  * Omar: continue working on new editor (needs better user experience, calibration accuracy) + fields interactions (hand-writing, drawing, getting those as objects in Folk) 
 +  * Help tune up the Recurse Center Folk system
  
 ===== Links we've enjoyed ===== ===== Links we've enjoyed =====
  
 ==== Andrés ==== ==== Andrés ====
-  * TODO+  * [[https://www.instagram.com/reels/DXWqD1oigMV/|A pen and paper game, kind of like a 2-player minesweeper? Very interesting to see people developing new games like this!]] 
 +  * [[https://www.instagram.com/reels/DY65ZWZJIvN/|A scissor hinge, make totally out of (heavy weight) paper!!]] 
 +  * [[https://mitchellh.com/writing/my-ai-adoption-journey?utm_source=vicki&utm_medium=email&utm_campaign=we-should-be-more-tired-than-the-model#user-content-fnref-1|My AI Adoption Journey]] (Mitchell Hashimoto) — the only one of these sorts of posts I've actually found reasonable 
 +  * [[https://sre.google/resources/practices-and-processes/no-heroes/|Why Heroism Is Bad And What We Can Do To Stop It]] (Alexander Malmberg) — an oldie (2015 ... which was 11 years ago) but a goodie, from Google, on changing team dynamics to avoid depending on "heros" (who often burn out) 
 +  * [[https://www.surfabeam.com/?utm_source=ig&utm_medium=social&utm_content=link_in_bio|Sufabeam]] — weird but interesting little app that let's you do planar projection mapping pretty easily 
 +  * [[https://www.youtube.com/watch?v=zokKqP0plrM|IBM CONFIDENTIAL: SYSTEM/360 FILE ORGANIZATION]] — This is a video on the filesystem of IBM's System/360; intended for salesmen, it's interesting to appreciate how much this has and hasn't become irrelevant to modern computing. 
 +  * [[https://x.com/picardie_aurora/status/1547967294533316614|"someone said they were a ‘cloud architect’, for a moment i imagined the most incredible job in the world before i realized they mean like software"]] 
 +  * [[https://lifelatelymag.framer.website/|A website that takes your camera roll and turns it into a magazine to send to your friends]] - maybe this specific service isn't so great, I haven't tried it myself, but the rise of services like this (see also: [[https://www.getprinternet.com/|Printernet]], a monthly internet reading list, printed and mailed to your house!) is very Folk-Computer-y (folky?) 
 +  * https://omnifixo.com/en-us 
 +  * [[https://www.instagram.com/reels/DYk00XXpjXG/|QR codes as scrapbooking]] 
 +  * I keep thinking about the E.A.T. exhibition opening, "Some More Beginnings: Experiments in Art and Technology" which was hosted at the Brooklyn Museum, New York in 1968. [[https://rosettaapp.getty.edu/delivery/DeliveryManagerServlet?dps_pid=IE1715894|The online archvie of photos is fascinating]], here's a small selection: 
 +    * {{newsletters:gri_2014_r_20_e0606_13948_r.jpg?150px}} {{newsletters:gri_2014_r_20_e0606_13949_r.jpg?150px}} {{newsletters:gri_2014_r_20_e0606_13951_r.jpg?150px}} {{newsletters:gri_2014_r_20_e0606_13954_r.jpg?150px}} {{newsletters:gri_2014_r_20_e0606_13946_r.jpg?150px}} {{newsletters:gri_2014_r_20_e0606_13943_r.jpg?150px}}  
 ==== Omar ==== ==== Omar ====
  
newsletters/2026-05.1780428824.txt.gz · Last modified: by admin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki