User Tools

Site Tools


newsletters:2026-06

This is an old revision of the document!


June 2026 newsletter

  • Our next Folk open house will be on TODO

What we've been up to

General system improvements

Fields + local feedback calibration / nudging experiment

Omar: After the to-scale printing we added last month, I started working on 'fields' that are inline in the source code:

img_5482.jpeg

This is an interaction we've wanted for a long time, where the code becomes an interaction surface and not just documentation for people. The idea is you'd write in those green boxes and then your writing would get OCRed and returned to the caller of the Field function.

But our calibration is still not quite accurate/stable enough for the projected green fields to precisely hit the expressions in the code. How can we have more of a closed loop where we can nudge the calibration to exactly hit targets on the page?

Idea: print each program with this black ring below the line numbers:

20260705-041244.jpeg

Then, at runtime, try to project a dot into the black ring, using the existing calibration and known page geometry:

20260705-041119.jpeg

Now you can (hopefully) look at the camera slice for the black ring and see how far off the projected dot is from the center. That's the offset that your projection is from the 'correct' place to project to hit the physical page.

Nudge the projection by whatever that offset is (in pixels? meters? unclear) such that the white dot will perfectly hit the center of the black ring.

This makes sense in theory, but doesn't do much in practice yet. But I think we want some way to self-calibrate and account for these sub-centimeter inaccuracies in projection mapping, so I probably want to keep digging into this.

DrawTalking project

We've been continuing to work with Karl Rosenberg at NYU on an integration with Karl's DrawTalking system.

img_5517.jpeg

We started by building a 'viewport' system to act as an arena for the storytelling to happen, where you can dynamically define the viewport by moving pages to control its corners:

20260705-033601.jpeg 20260705-033734.jpeg

Then you can print your viewport as a fixed page that locks that region of the table in:

20260705-033625.jpeg

Karl was able to cast shapes from his iPad DrawTalking onto the table, so it seems like we'll be able to use the iPad to hold the model and then use Folk as a view.

Next step is to track physical objects and expose them into DrawTalking as entities for the drawn characters to interact with. Karl brought in this blue cup as an example object to track:

TODO blue cup

We spent a while on object tracking, which led to the contour demos that we'll detail next. Omar, Andrés, Audrey Gu, and Karl all got together to discuss object-tracking strategies:

june_19_group_photo.jpeg

Contours

Inspired by this paper, we started by trying out pure contour tracking to track the cup in the viewport. Omar ported Lingdong Huang's PContour from Java to C (equivalent to OpenCV's findContours – we just didn't want to pull in OpenCV, and this is a self-contained function anyway, and it's easy for Folk to bind to C).

TODO contour video

I would say there are a few big issues to deal with here.

Object identity

First, you can see how the contour colors flicker from frame to frame – we can't identify that a contour is 'the same' object from frame to frame without additional logic.

There are tricks for this…

Contour failures

Contours are traced from a binarized image, so all dark areas that are adjacent get merged into the same contour. Problematic if you have a cup and its shadow and they merge into a giant blob contour. Also very lighting-dependent, which makes it hard to make a turnkey solution. The thresholds have to continuously adjust based on lighting conditions. There are tricks for this…

Distortion

This is a subtle issue, but it might be the hardest issue.

ShaderToy compatibility

TODO

https://github.com/FolkComputer/folk/pull/271

Some shaders (copied from ShaderToy) in action on the table:

20260705-212644.jpeg

Performance quest

Mason's cross-thread branch from last year

magic-trace

Omar: I've been trying magic-trace. It was pretty annoying.

Out of the box, it didn't work with the latest version of perf. (th perf traces were outputting syntax that it couldn't parse). So I had to use this random fork. Then I had to make a bunch of changes to get it to compile with llvm-18, including changes to the build process to explicitly link libraries, and using the llvm ld instead of GNU ld.

But magic-trace seems extremely, extremely useful for debugging the Tcl interpreter itself, where individual operations can be a few nanoseconds (so don't show up on sampling), and the behavior isn't consistent enough to aggregate well (it's super branchy since programs do all sorts of different things).

Mason and I have started using magic-trace to figure out what is slow in the run blocks and in particular, why his cross-thread branch last year is moderately slower than main (we would expect it to be faster!)

Outreach

Visitors

Recurse Center system

* TODO: Omar and Andrés worked with Audrey Gu at Recurse

Open house

We had a really lively open house this month. Brian brought a lot of friends from ITP Camp who were curious about Folk.

20260705-214209.jpeg 20260705-214213.jpeg 20260705-214239.jpeg 20260705-214250.jpeg 20260705-214315.jpeg 20260705-214333.jpeg 20260705-214400.jpeg 20260705-214419.jpeg 20260705-214600.jpeg

Amanda Yeh made a color spinner (program that changes hue based on angle) and put it on a dolly and made it circular:

20260705-214441.jpeg 20260705-214536.jpeg

What we'll be up to in July

Andrés

  • TODO

Omar

newsletters/2026-06.1783367401.txt.gz · Last modified: by osnr

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki