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/09/01 01:32] – [Fasteners] 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}}
  
  
Line 210: Line 210:
 I got some threadlocker glue, and these washers, which I haven't gotten to try yet: I got some threadlocker glue, and these washers, which I haven't gotten to try yet:
  
-{{:newsletters:pasted:20250901-013248.jpeg}}+{{:newsletters:pasted:img_3339.jpeg?250px}}
  
 === folk2 on the gadget === === 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 working on a proposal for a type system in Folk, for things like pixels, percentages, millimeters, stuff like that.+Mason has been [[https://discord.com/channels/956758212152025098/1400736329616068631/1401261049176526848|working on]] [[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?}}
  
newsletters/2025-08.1756690371.txt.gz · Last modified: 2025/09/01 01:32 by osnr

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki