User Tools

Site Tools


newsletters:2025-08

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:2025-08 [2025/08/31 02:11] – [August 2025 newsletter (WIP)] osnrnewsletters:2025-08 [2025/09/01 01:46] (current) – [folk2 on the gadget] osnr
Line 67: Line 67:
 If you're familiar with folk2, you might anticipate blinking problems here, because there's a lacuna where the old clock time goes away, the new clock time comes in, but this When block hasn't been evaluated on the new clock time and so the new label statement hasn't appeared. The display subsystem might sample the DB during that lacuna, leading to a visible blink-out of the time: If you're familiar with folk2, you might anticipate blinking problems here, because there's a lacuna where the old clock time goes away, the new clock time comes in, but this When block hasn't been evaluated on the new clock time and so the new label statement hasn't appeared. The display subsystem might sample the DB during that lacuna, leading to a visible blink-out of the time:
  
-{{newsletters:img_3466.mp4?300px}}+{{:newsletters:pasted:20250901-013606.mp4?300px}} 
 + 
  
 You could have a bridge period here, where you ''Wish (keep 10ms) $this is labelled $t'', or use a ''Hold!'' instead, but then you have a different problem: you might see 2 clock times displayed, because the display subsystem happens to sample the DB in a period where both old and new label statements are in place. You could have a bridge period here, where you ''Wish (keep 10ms) $this is labelled $t'', or use a ''Hold!'' instead, but then you have a different problem: you might see 2 clock times displayed, because the display subsystem happens to sample the DB in a period where both old and new label statements are in place.
Line 77: Line 79:
 Basically, the Collect statement above, which figures out the display list to render onto each canvas every frame, won't re-fire/re-Collect until the display list has been stable for 3ms. This prevents the user from seeing those transient/glitch states with 0 or 2 label statements. Basically, the Collect statement above, which figures out the display list to render onto each canvas every frame, won't re-fire/re-Collect until the display list has been stable for 3ms. This prevents the user from seeing those transient/glitch states with 0 or 2 label statements.
  
-TODOSign error+(among other things, had a [[https://github.com/FolkComputer/folk/commit/4e8133df9be4d1c0390cf7c24b08c1f03eed9feb|horrible sign error]] that I had to fix to get this to work)
 === Camera slice blinking fix: destructor inheritance in Collect === === Camera slice blinking fix: destructor inheritance in Collect ===
  
Line 202: Line 204:
 Omar: I've been [[https://github.com/FolkComputer/gadget2/commits/main/|updating]] the documentation for [[https://github.com/FolkComputer/gadget2|gadget2]] as Daniel Pipkin has worked on putting one together (he's needed clarification on what parts I've been using, how to set things up, etc). Omar: I've been [[https://github.com/FolkComputer/gadget2/commits/main/|updating]] the documentation for [[https://github.com/FolkComputer/gadget2|gadget2]] as Daniel Pipkin has worked on putting one together (he's needed clarification on what parts I've been using, how to set things up, etc).
  
 +=== Fasteners ===
 +
 +Spent some time looking into fasteners to try to keep the AnyBeam projector from swiveling/wiggling inside the gadget chassis. (because it's only attached by a single 1/4in bolt, because that's the only mount point in the projector)
 +
 +I got some threadlocker glue, and these washers, which I haven't gotten to try yet:
 +
 +{{:newsletters:pasted:img_3339.jpeg?250px}}
 +
 +=== folk2 on the gadget ===
 +
 +folk2 is a surprisingly nice improvement for the gadget. The text is scaled to be a constant real-world size no matter where you hold the gadget, and the whole critical path of Folk runs faster, so even on this mediocre calibration, it's easier to see how it's doing the same thing as the table:
 +
 +{{:newsletters:pasted:20250901-013703.mp4}}
 +
 +It's hacky and not 100% correct, but to give you an idea of the differences, I have this setup.folk to handle the trigger button and work on both folk1 and folk2:
 +
 +<details>
 +<summary>setup.folk</summary>
 +<code>
 +# Copy this file to ~/folk-live/setup.folk and edit it to make
 +# changes.
 +
 +if {[llength [info commands Assert!]] == 0} {
 +    # We're on folk1.
 +    proc Assert! args { tailcall Assert {*}$args }
 +
 +    set fd [open |[list python3 "/home/folk/UPS_Module_3S_Code/RaspberryPi/UPS Module 3S/INA219.py"] r]
 +    fconfigure $fd -buffering line
 +    fileevent $fd readable [list apply {{fd} {
 +        if {[gets $fd line] < 0} {
 +            if {[eof $fd]} {
 +                close $fd
 +            }
 +        }
 +
 +        if {[regexp {Percent:\s*([0-9\.]+)%} $line -> percent]} {
 +            Hold battery {Claim the battery percentage is $percent}
 +        }
 +    }} $fd]
 +
 +    When display /disp/ has width /w/ height /h/ {
 +        When the button is /state/ {
 +            When the clock time is /t/ {
 +                set color [expr {$state eq "pressed" ? "green" : "white"}]
 +                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 $color width 10 dashlength 40 dashoffset [expr {fmod($t, 10)*-120}]
 +            }
 +        }
 +    }
 +
 +    set cc [c create]
 +    $cc include <wiringPi.h>
 +    $cc proc gpioInit {} void {
 +        // gpio mode 16 up
 +        FOLK_ENSURE(wiringPiSetup() != -1);
 +        pinMode(16, INPUT);
 +        pullUpDnControl(16, PUD_UP);
 +    }
 +    $cc proc gpioRead {} int {
 +        // gpio read 16
 +        return digitalRead(16);
 +    }
 +
 +    c loadlib /home/folk/wiringOP/wiringPi/libwiringPi.so.2.58
 +    $cc compile
 +    exec sudo chmod 666 /dev/mem
 +
 +    gpioInit
 +    When the clock time is /t/ {
 +        set pressed [expr {![gpioRead]}]
 +        Hold button \
 +            {Claim the button is [expr {$pressed ? "pressed" : "unpressed"}]}
 +    }
 +    puts stderr READY!
 +
 +} else {
 +    # We're on folk2.
 +
 +    exec v4l2-ctl --set-ctrl auto_exposure=1
 +    exec v4l2-ctl --set-ctrl exposure_time_absolute=1500
 +
 +    When {
 +        set fd [open |[list python3 "/home/folk/UPS_Module_3S_Code/RaspberryPi/UPS Module 3S/INA219.py"] r]
 +        fconfigure $fd -buffering line
 +        while {[gets $fd line] >= 0} {
 +            if {[eof $fd]} {
 +                close $fd
 +            }
 +
 +            if {[regexp {Percent:\s*([0-9\.]+)%} $line -> percent]} {
 +                Hold! -key battery \
 +                    Claim the battery percentage is $percent
 +            }
 +        }
 +    }
 +
 +    When display /disp/ has width /w/ height /h/ {
 +        When the button is /state/ {
 +            When the clock time is /t/ {
 +                set color [expr {$state eq "pressed" ? "green" : "white"}]
 +                Wish (keep 10ms) to draw a dashed line with points \
 +                    [list [list -1 -1] \
 +                         [list 1 -1] \
 +                         [list 1 1] \
 +                         [list -1 1] \
 +                         [list -1 -1]] \
 +                    color $color width 0.05 dashlength 0.1 dashoffset [expr {fmod($t, 10)*-0.4}]
 +            }
 +        }
 +    }
 +
 +    set cc [C]
 +    $cc include <wiringPi.h>
 +    $cc proc gpioInit {} void {
 +        // gpio mode 16 up
 +        FOLK_ENSURE(wiringPiSetup() != -1);
 +        pinMode(16, INPUT);
 +        pullUpDnControl(16, PUD_UP);
 +    }
 +    $cc proc gpioRead {} int {
 +        // gpio read 16
 +        return digitalRead(16);
 +    }
 +
 +    $cc endcflags -L/home/folk/wiringOP/wiringPi -lwiringPi
 +    set gpioLib [$cc compile]
 +    exec sudo chmod 666 /dev/mem
 +
 +    $gpioLib gpioInit
 +    When the clock time is /t/ {
 +        set pressed [expr {![$gpioLib gpioRead]}]
 +        Hold! -key button \
 +            Claim the button is [expr {$pressed ? "pressed" : "unpressed"}]
 +    }
 +}
 +
 +
 +
 +Assert! $this wishes $::thisNode uses camera "/dev/video0" with \
 +    width 3200 height 1200 \
 +    crop {x 500 y 0 width 1000 height 800}
 +
 +Assert! $this wishes $::thisNode uses display 0
 +
 +
 +When the battery percentage is /percent/ {
 +    Wish to draw text with text "$percent%" x 40 y 40
 +}
 +</code>
 +</details>
 ==== Mason's type proposal ==== ==== Mason's type proposal ====
 +
 +Mason has been [[https://discord.com/channels/956758212152025098/1400736329616068631/1401261049176526848|working on]] a [[https://gist.github.com/smj-edison/473297eacdbf80e3abaad0ca86c8f776|proposal for a type system in Folk]], for things like pixels, percentages, millimeters, stuff like that.
 +
 +{{newsletters:ff2f056b-ee9c-42df-9f2c-3aa107c0926b-84977-000007dcbb110ba9.png?440px}}
 ==== Projects ==== ==== Projects ====
  
-  * Rob Fielding created a full-fledged system for presenting slides that are fully controlled by programs in Folk:+  * Rob Fielding [[https://discord.com/channels/956758212152025098/956758650700046366/1402076995462107258|created a full-fledged system for presenting slides]] that are controlled by programs in Folk:
     * {{youtube>6Xy0YBTyZ3U?}}     * {{youtube>6Xy0YBTyZ3U?}}
  
Line 221: Line 382:
 === New installations === === New installations ===
  
-  * TODO: Fractal setup +  * The Fractal community here in Brooklyn had a "barn-raising" event to set up their Folk system. They had some trouble calibrating with their ultra-short-throw projector, but there seems to be a lot of excitement there 
-  * TODO: Baltimore setup +  * [[https://github.com/FolkComputer/folk/pull/225|Mike Subelsky set up a Folk system in Baltimore]] 
-  * TODO: Cambridge setup+  * Hamish Todd has been continuing to work on his Cambridge, UK installation and was asking questions about geometry and C API in Discord
  
 ===== What we'll be up to in September ===== ===== What we'll be up to in September =====
newsletters/2025-08.1756606269.txt.gz · Last modified: 2025/08/31 02:11 by osnr

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki