User Tools

Site Tools


newsletters:2023-12

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:2023-12 [2023/12/30 00:51] – [Calibration] osnrnewsletters:2023-12 [2023/12/30 23:20] (current) – [What we'll be up to in January] osnr
Line 1: Line 1:
 ====== December 2023 newsletter ====== ====== December 2023 newsletter ======
 +
 +It's been a big year. Hard to believe that a year ago, there was exactly 1 Folk system in the world (the original one, folk0 at Hex House) & it ran about ten times slower than what we have now and could barely do anything besides display text and outlines. But there's still an enormous amount to do :-)
  
 If you're in New York next month, we'd love to have you visit us at **[[https://partiful.com/e/aY32znMk7GWqEqI9t3KU|our next Folk open house]]**, in the evening on Wednesday, January 31. If you're in New York next month, we'd love to have you visit us at **[[https://partiful.com/e/aY32znMk7GWqEqI9t3KU|our next Folk open house]]**, in the evening on Wednesday, January 31.
Line 16: Line 18:
   * Andrés made a [[https://en.wikipedia.org/wiki/Hooke%27s_law|Hooke's law]] spring simulation in Folk:   * Andrés made a [[https://en.wikipedia.org/wiki/Hooke%27s_law|Hooke's law]] spring simulation in Folk:
     * {{newsletters:simulation.gif?0x300}}     * {{newsletters:simulation.gif?0x300}}
-    * Andrés and Charles collaborated on a Folk program that extends this to a ball that bounces around the table+    * Andrés and Charles collaborated on a Folk program that extends this to a ball that bounces around the table.
  
   * During the open house, a visitor asked Cristóbal if he could change the frame rate of his animation tool. It works splendidly:   * During the open house, a visitor asked Cristóbal if he could change the frame rate of his animation tool. It works splendidly:
Line 33: Line 35:
   * We're still pretty pre-release and liable to break things, but we have a [[https://git.folk.computer/folk/|public mirror of the repo]] and have it under an open-source license now, which is nice (it means people can play around with it without getting our permission, and it means writeups like Cristóbal's can link directly to source code. I think it's important that people feel comfortable looking into the core of the system and seeing how things work)   * We're still pretty pre-release and liable to break things, but we have a [[https://git.folk.computer/folk/|public mirror of the repo]] and have it under an open-source license now, which is nice (it means people can play around with it without getting our permission, and it means writeups like Cristóbal's can link directly to source code. I think it's important that people feel comfortable looking into the core of the system and seeing how things work)
  
-  * Merged Cris's [[https://github.com/FolkComputer/folk/pull/111|convex hull code from last month]] after he fixed some memory leak and convex hull algorithm issues+  * Merged Cristóbal's [[https://github.com/FolkComputer/folk/pull/111|convex hull code from last month]] after he fixed some memory leak and convex hull algorithm issues
     * {{newsletters:img_9201.mp4?300}}     * {{newsletters:img_9201.mp4?300}}
 +
 +  * Cris has been working on [[https://github.com/FolkComputer/folk/pull/122|variable printed tag size and font size]], so you can start doing a bit of print design if you want your printed programs to have a specific form/look. You can print a program with a really big tag, for instance. I think this is really important for breaking down the current uniformity of Folk programs and creating new interactions.
 +    * {{:newsletters:pasted:20231230-211849.png?300}} {{:newsletters:pasted:20231230-211906.jpeg?300}}
  
   * Omar has been continuing to do a small amount of messing with an independent parallel Folk trie/evaluator in C. What do the lock-free/RCU data structures look like, can we decouple it from the Tcl heap and have a shared interprocess heap for everything, when do you have to copy, how does scheduling work...   * Omar has been continuing to do a small amount of messing with an independent parallel Folk trie/evaluator in C. What do the lock-free/RCU data structures look like, can we decouple it from the Tcl heap and have a shared interprocess heap for everything, when do you have to copy, how does scheduling work...
Line 40: Line 45:
 ==== Tabletop / in-system editor ==== ==== Tabletop / in-system editor ====
  
-  * Andrés has continued work on the editor. There's now a save hotkey (''Ctrl + S''), separate regions for editing and previewing your program and key repeat now works. There'a couple more keyboard I/O management bugs Andrés is currently working through but they'll all be +  * Andrés has continued work on the in-system editor. There's now a save hotkey (''Ctrl + S''), separate regions for editing and previewing your programand support for repeated key presses. There are a couple keyboard I/O management bugs Andrés is currently working through that will be addressed in January. Once those are ironed out the keyboard will be merged into the core Folk project and will be useful for teaching others how to make Folk programs without a laptop (think casual visits or multi-person workshops), editing the Folk system using Folk itself, and handling keyboard input in other Folk programs.
     * {{newsletters:charles_keyboard-medium.jpeg}}     * {{newsletters:charles_keyboard-medium.jpeg}}
 +    * Charles visited the studio this month and gave Andrés some great ideas for the editor for future releases.
  
 ==== Calibration ==== ==== Calibration ====
Line 88: Line 94:
 Cristóbal and I spent a day trying some tactics to reduce jitter, which I think might be the single biggest impediment to getting this thing merged and usable. The jitter is really noticeable in person. Cristóbal and I spent a day trying some tactics to reduce jitter, which I think might be the single biggest impediment to getting this thing merged and usable. The jitter is really noticeable in person.
  
-The actual 2D AprilTag detection of corners in the camera image is actually very stable and reliable, and the images are clear, so that's not a source of jitter in our view.+The actual 2D AprilTag detection of corners in the camera image is actually very stable and reliable, and the images are clear, so that's not a source of jitter in our view. (We tried some moving-average smoothing stuff on the detected tag corners, but it didn't work that well, even if we made it really aggressive. We concluded that it has to be further on in the pipeline, not the input corners.)
  
 So you have a stable input (locations of the corners in the camera image) and a pure function (camera corners -> 3D pose estimate -> reprojection corners), but somehow the output projection has jitter. So where is the jitter in the function? So you have a stable input (locations of the corners in the camera image) and a pure function (camera corners -> 3D pose estimate -> reprojection corners), but somehow the output projection has jitter. So where is the jitter in the function?
Line 110: Line 116:
 ==== RFID refactor ==== ==== RFID refactor ====
  
-Omar: the long-awaited RFID refactor is finally underway: I've made a lot of progress on it and have kind of broken through the previous point where I was stuck.+Omar: the long-awaited RFID refactor is finally underway: [[https://social.omar.website/@omar/statuses/01HHE44PDWVG067GMBMT1Z47CX|I've made a lot of progress on it]] and have kind of broken through the previous point where I was stuck.
  
 {{newsletters:a59286b1-d8a1-4055-b35d-eedc37c60fb6-957-0001d251ba77870d.png?450}} {{newsletters:a59286b1-d8a1-4055-b35d-eedc37c60fb6-957-0001d251ba77870d.png?450}}
  
-wouldn'say that it'caught up with the original implementation yet, but we now have **tag identities and checksums**, which is a capability we never had before. You can see above that we can carry out a back-and-forth and get that long reply from the tag (which tells us its ID).+haven't caught up with our original branch on actual localization yet, but we now have **tag identities and checksums**, which is a capability we never had before. You can see above that we can carry out a back-and-forth and get that long reply from the tag (which tells us its ID).
  
-{{newsletters:dd5cece8-5188-4cfb-9c04-0cd5468e8903-957-0001d43fe2718e9c.png?400}}+{{newsletters:dd5cece8-5188-4cfb-9c04-0cd5468e8903-957-0001d43fe2718e9c.png?500}}
  
 And here we query the tag a few times in a row and get a valid, checksum-passing ID response each time (although we're not printing the ID itself here, only the expected+received checksums): And here we query the tag a few times in a row and get a valid, checksum-passing ID response each time (although we're not printing the ID itself here, only the expected+received checksums):
Line 128: Line 134:
   * we have an end-to-end way to check channel estimate validity! we've always derived channel estimate from a tag reply packet, but we had no way to check that 1. that packet was legitimate and 2. our decoding of that packet was correct until now; now we can check that it got us a tag ID and that the tag ID passed checksum. this should help keep us from going off the rails with invalid data feeding into location estimate   * we have an end-to-end way to check channel estimate validity! we've always derived channel estimate from a tag reply packet, but we had no way to check that 1. that packet was legitimate and 2. our decoding of that packet was correct until now; now we can check that it got us a tag ID and that the tag ID passed checksum. this should help keep us from going off the rails with invalid data feeding into location estimate
  
-and of course, you ultimately need tag identities to do any interesting application with RFID tags -- that's the point of them -- so we knew we needed to do this sooner or later. It's also the hardest part of implementing an RFID reader on software-defined radio, because it's highly latency-sensitive (you need to decode entire tag packet and respond within 500 microseconds or so to get the tag ID), so it's a huge relief that we are able to do it and won't have to change approach to get it to work.+and of course, you ultimately need tag identities to do any interesting application with RFID tags -- that's the point of them -- so we knew we needed to do this sooner or later. It's also the [[https://youtu.be/QKi1OH8Zstk?feature=shared&t=1090|hardest]] [[https://discourse.myriadrf.org/t/working-passive-uhf-rfid-reader-using-the-limesdr/2949/7|part]] of implementing an RFID reader on software-defined radio, because it's highly latency-sensitive (you need to decode entire tag packet and respond within 500 microseconds or so to get the tag ID), so it's a huge relief that we are able to do it and won't have to change approach to get it to work.
  
  
Line 164: Line 170:
 The cart uses a cheap utility cart from Amazon and some two-foot quick clamps to keep the ultra-short-throw projector from falling over (and some blocks of wood we had lying around Hex House to raise the projector to table height while letting the HDMI and power cords jut down underneath). It's not the most stable thing ever -- you have to hold the projector while rolling it -- but it works well enough, and it's so nice that it's finally a self-contained unit. The cart uses a cheap utility cart from Amazon and some two-foot quick clamps to keep the ultra-short-throw projector from falling over (and some blocks of wood we had lying around Hex House to raise the projector to table height while letting the HDMI and power cords jut down underneath). It's not the most stable thing ever -- you have to hold the projector while rolling it -- but it works well enough, and it's so nice that it's finally a self-contained unit.
  
-(We probably also want it to have a longer power cable. Ten feet is too short, I think.)+(We probably also want it to have a longer power cable so we can wheel it around the space without unplugging and replugging. Ten feet is too short, I think.)
  
 === Folk User Group === === Folk User Group ===
  
-We had a "user group" meeting in Discord on the evening of the 19th, where we got on a call with people in the community (mostly people with running Folk systems). It was fun to see everyone again (the last one we did was a few months ago); we explained some recent and upcoming improvements to the system & we did some Q&A:+We had a "user group" meeting in Discord on the evening of December 19, where we got on a call with people in the community (mostly people with running Folk systems). It was fun to see everyone again (the last one we did was a few months ago); we explained some recent and upcoming improvements to the system & we did some Q&A:
  
-  * TODOImprovement A +  * Andrés discussed editor, cart, CNC system, open-source 
-  * Improvement B+  * Naveen asked about system federation, wall-table (manipulation surface + larger display surface) 
 +  * New calibrationWe walked through the 3D calibration process live on camera (waving the calibration board around and watching it rewarp tags) 
 +  * Omar gave a quick primer about how the evaluator works 
 +    * Printed out and showed the key data structures (statements, trie, evaluator) 
 +      * {{newsletters:08ad425f-9e76-4c77-bdda-9f373bd57c8c-957-00020653ba629c4a.png?200}} {{newsletters:e7b51111-74f1-4063-9367-d60e6cbaa2e8-957-00020606754ea101.png?200}}  
 +    * Daniel asked about events and event statements, so we talked a little about the semantic details there 
 +    * Cris asked for a walk through a single evaluator step, so we did a whiteboard talk about the operations that go into the priority queue (Assert, Retract, Say, Unmatch, Collect) and how that queue gets drained each step 
 +      * {{:newsletters:pasted:20231230-182016.png?300}} {{:newsletters:pasted:20231230-181955.png?200}} 
 +    * Naveen asked about scaling properties: would it scale to thousands/millions of statements 
 +      * (it should.. or at least adding a new statement shouldn't cost if it's not active) 
 +      * Discussion of integrating Box2D or other engines/ways of resolving queries 
 +  * Cris talked about tableshots 
 +    * Omar: "I remember talking to Jacob about this -- how much every little weird capability addition actually opens up, where it's like, oh, we can crop images, or we can display images rotated, or we made a button, and each little thing opens up an entirely new class of applications and demo interactions. That's really exciting, especially as we have more of these things." 
 +  * Ian asked about hand tracking, OCR, and other inputs besides AprilTags, how hard they would be to integrate 
 +    * Andrés talked about the One Fact object recognizer model 
 +    * Ian also asked about X11 or some other way to contain existing graphical applications in a page 
 +  * Talked about next steps, board game format, documentation
  
-Omar gave quick primer about how the evaluator worksTODO+We'll do another one in few months, most likely.
 ===== What we'll be up to in January ===== ===== What we'll be up to in January =====
  
Line 181: Line 203:
     * improving the RFID error recovery / state machine; starting on sync and OOB     * improving the RFID error recovery / state machine; starting on sync and OOB
     * calibration accuracy improvement, some of this can be done on laptop from cached data/poses     * calibration accuracy improvement, some of this can be done on laptop from cached data/poses
-    * maybe hacking on a parallel Folk?+    * maybe hacking on pure evaluator/Tcl/C stuff? a parallel Folk? variables/Observe?
  
   * Finishing up the tabletop editor and getting it merged, then follow-up to make virtual programs table-editable, other niceties like that to minimize laptop dependency   * Finishing up the tabletop editor and getting it merged, then follow-up to make virtual programs table-editable, other niceties like that to minimize laptop dependency
newsletters/2023-12.1703897477.txt.gz · Last modified: 2023/12/30 00:51 by osnr

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki