This is an old revision of the document!
Table of Contents
March 2024 newsletter
What we've been up to
Demos
- (Andrés) Progress on template matching games demo
- This month I started by making the tracking a bit more accurate by adjusting the algorithm OpenCV uses. There's still noise in some lighting conditions but it's generally much more reliable now.
- Basic path drawing demo:
- For me the natural next step once I had highlighting working last month was to make a demo tracking the position over time to enable drawing the path of the image. It's fun to paint little shapes using this.
- Pac-man inspired demo:
- The goal of the project is to explore game interactions using both physical and digital objects. My first mini-game exploring this is inspired by Pac-Man: generate a grid of dots, track the image, if there's an intersection between a dot and the image delete the dots. I'll build on this by having a random path of dots rather than a grid so it's a different experience every time.
- Next step: a pong inspired demo
- I want to get a simplified single-player pong experience working where you move your game piece around and bounce a ball against the wall, each time the ball gets a bit faster. I've started on the basic version of this, simulating a ball bouncing in the confines of a normal Folk program. It's satisfying to watching it move around like a little screensaver:
- I also spent a few days this month figuring out what sorts of game interactions I want in the project. In the end I want a booklet of at least 5 games that show off the unique combination of interactions between physical and digital game pieces that Folk provides.
New evaluator
Omar: lots of progress on new evaluator. I spent much of this month trying different locking and reference counting and memory reclamation schemes.
A lot of it was frustrating and had me stuck, but in the last week or two I think I've figured out something that works, where on each statement and match you have an atomic reference count (number of active pointers to that statement/match) + a bunch of either immutable or individually atomic fields: stuff like clause terms, parent count, whether to free at next opportunity, list of children. Freeing each statement or match is deferred until a pointer release that makes the number of active pointers hit 0 + parent count is 0 (if statement) or free was requested (if match). Note that the pointer count is a reference count, but it's not the full reference count – you have to combine its 'program liveness' information with 'database liveness' information (was match free requested? / did statement parent count hit 0?).
And now that we have reasonable refcount/locking, we've been able to do the long-awaited table test, where we actually run the new parallel evaluator on a physical Folk table with webcam and camera and physical programs. (We expected it to be slow – we need the physical table test to actually know what the performance is like and how we need to go about optimizing things.) It works:
So, still a lot of work to do on performance, top-level flame graph not very informative:
Still need to clean up some memory leaks and dangling pointers:
Nice side benefits: new evaluator boots much faster, faster to iterate and test things, because it's only compiling virtual-program-level C code (Gpu, AprilTags); the kernel is statically compiled into a monolithic folk binary. (this feels like a reasonable tradeoff, since no one was messing with the kernel in practice anyway)
Live USB & distribution
Omar: I've been working on massively simplifying the Folk installation process (reducing the number of steps, reporting the system state better to the user so you don't just boot to black screen or terminal, making a proper calibration/setup process and props).
The main thing is making a live USB that just boots into Folk and walks through calibration & network setup and can install to disk. (the near-term application is to distribute a version of the CNC stuff as a demo that is immediately useful)
I've been using Debian live-build, which seems to be the de facto standard for making live USBs: documentation/resources are pretty good, you can preinstall any packages from Debian, etc. Good resources are https://terkeyberger.wordpress.com/2022/03/07/live-build-how-to-build-an-installable-debian-10-buster-live-cd/ and https://dquinton.github.io/debian-install/netinstall/live-build.html
- Folk running on a $40 used Dell Chromebook 11 laptop:
- Did take a day or two to jailbreak the Chromebook – you actually have to open it up and remove a firmware write-protection screw on the mainboard, then install this EFI firmware stuff which pretty much turns the Chromebook into a normal computer that can boot Windows/Linux. then you can boot it from USB stick
- Neat: built-in webcam & display work out of the box as a quick demo that the system is running and working
- Goal: distribute CNC demo as a live USB that a computer can just boot into
- Lots to do:
- Status report if no programs are out: are we online? IP address? network interfaces? current git revision? number of displays/cameras? are we calibrated?
- Wi-Fi setup process (not strictly necessary if the USB stick is self-contained and the Folk box has a display & keyboard, but useful so you can go to web view and ssh in from your normal computer, so Folk can federate to other Folk instances on network, so Folk can connect to network printer, & so we can pull a newer version of Folk from online if applicable)
- Boot into terminal – may be our first way to do Wi-Fi setup, you just run iwd and dhclient stuff from an embedded terminal in Folk so we don't need to make UI for everything at first
- Calibration (incl a physical rig for it)
- Support addressing multiple projectors & multiple cameras
- (especially important if running Folk on a laptop, since laptop probably has built-in display and webcam but you want to use external display & external webcam)
Friends and outreach
- March Open House: We had a small but really fun open house where we showed the new template matching demo and people got a chance to make a few programs using the table editors.
Other work
What we'll be up to in April
- Our next open house is in the evening on Thursday, April 25th at our studio in East Williamsburg, Brooklyn.
Links we've enjoyed
Omar
Andrés
- tint — a relaxing color mixing game. Really clever puzzles from a seemingly limited premise about color mixing
- same website (1001mathproblems.com) on lattice polygons. I'm interested in what sorts of Folk-powered games you could make using these as a core mechanic