supercollider
branch of Folk for the syntax Wish $this plays note A
. She and Andrés and Arcade Wise got together for some crafting and SuperCollider time, made a lot of buttons, and built a paper 'piano' on the Recurse Center Folk system:Daniel Pipkin has been working on hand tracking. (using Robert Xiao's technique to ultimately get touch tracking, so you can touch things with your fingers)
Depth and IR data from the Kinect can now be piped through folk.
Alt
-F1
to stop FolkAlt
-F1
, and then you can use sudo nmtui
by hand to set up Wi-Fi without needing to outrace the Folk process reastartingOmar: Made a new gadget design that can also fit the older/more-encased Nebra AnyBeam. Built a second gadget for Andrés (to take to Berlin!) with the Nebra AnyBeam that we had lying around, so now we have 2 gadgets.
The gadget design is now on GitHub. (Not everything is specified yet – I need to measure some bolt lengths and link some Amazon stuff.) 3D print has been fairly stable for a month or two but probably needs a new revision where the front panel is more solid (doesn't wobble, camera doesn't get knocked off).
Two big camera fixes:
These fixed the worst issues – it now actually calibrates! We can project onto programs! (it's still fairly annoying to calibrate, takes 20-30 minutes, but it's doable, and you ideally only have to do it once. I feel like we should ultimately be able to calibrate it really well because the projector is a laser scanning projector and has no lens distortion, also.)
First calibrated use of Omar's gadget (gadget-blue) and of Andrés's gadget (gadget-red), respectively:
Slow, but that also motivates performance improvements…
When display /disp/ has width /w/ height /h/ { When the clock time is /t/ { Wish to draw a dashed stroke with points \ [list [list 0 0] [list $w 0] [list $w $h] \ [list 0 $h] [list 0 0]] \ color white width 10 dashlength 40 \ dashoffset [expr {fmod($t, 10)*-120}] } }
Omar has been continuing to work on the new evaluator – it really does feel like the biggest remaining issues in Folk are performance & reliability issues, so this is important.
There's a mix of little reliability/safety issues and big semantic issues with the evaluator (how do we schedule stuff onto threads? how do we make sure things don't blink out or, conversely, transiently get multiple states at once? when/how do we abort invalidated work items?)
Started working on sysmon thread which wakes up every few milliseconds and manages the size of the thread pool (too many threads looking for work? kill some; too few threads compared to number of CPUs? spawn some).
There are subtleties here where you want to avoid churning the thread pool and constantly killing and re-spawning stuff. Haven't figured out yet. It needs heuristics about what threads are occupied and how long they'll be occupied (microseconds? milliseconds? seconds?) to determine this.
Idea: sustain/TTL field where statements can get held for some number of milliseconds after their parent is retracted.
sysmon (which previously was just managing the size of the thread pool) is extended (maybe will rename to custodian) to also handle reaping sustained statements when they hit their deadline. it feels nice to do it here rather than complicating the priority queue further, since sysmon is already waking up every couple milliseconds anyway (and it doesn't need to run any more than that, fixed ticks are fine).
We had a good discussion about this proposal in Discord:
Added workqueue display on /threads Web page, which made it clear that many of the random issues with folk2 are just that work-stealing was breaking down and work items would get permanently stuck on some thread that was stuck running a permanent task (instead of the work getting stolen and executed elsewhere).
Fixed some keyboard issues where the keyboard process was erroring or exec-ing stuff all the time (because of lack of persistence / because of blinking), and where the grabber was broken because it wasn't inter-thread-safe.
Scheming about this memory management idea again, since it could simplify a lot of the implementation: