Commit graph

7 commits

Author SHA1 Message Date
Vincent Ambo
6046ff9f25 chore(3p/sources): bump channels & overlays (2025-02-09)
Included changes:

* targeted primary NixOS channel back at `nixos-unstable`

* //3p/chicago95: disable new broken symlink check

* //tvix: omit unnecessary lifetime clippy recommends

* //users/sterni/blipqn: wait a bit for data to arrive in test so it
  succeeds under load.

* //fun/paroxysm: force pkg-config flag of pq-sys by adding a bogus
  dependency on it. Otherwise, pq-sys will try to use pg_config
  which does not work correctly in pkgs.libpq at the moment.

* //users/flokli/keyboards/dilemma: disable temporarily

Change-Id: I6d53bd7bca6886f3457e1f41505e97314f4cd191
Reviewed-on: https://cl.tvl.fyi/c/depot/+/13119
Reviewed-by: tazjin <tazjin@tvl.su>
Tested-by: BuildkiteCI
Reviewed-by: flokli <flokli@flokli.de>
Autosubmit: tazjin <tazjin@tvl.su>
Reviewed-by: aspen <root@gws.fyi>
Reviewed-by: sterni <sternenseemann@systemli.org>
2025-02-18 15:07:10 +00:00
sterni
e8146f9d01 feat(sterni/blipqn): actually rethrow error messages in WithFlipdot
Passing a namespace as 𝕩 to •CurrentError is not allowed since it is
reserved for future use (not sure how it'll change the behavior
exactly). Since WithFlipdot always passes a namespace as 𝕩, this is a
relevant problem for blipqn. To work around it, we wrap the passed
argument in a list (and unwrap it for 𝔾).

Change-Id: I3382f754cbb64ad799e47b7d174d641c43a0f2e0
Reviewed-on: https://cl.tvl.fyi/c/depot/+/13125
Reviewed-by: sterni <sternenseemann@systemli.org>
Autosubmit: sterni <sternenseemann@systemli.org>
Tested-by: BuildkiteCI
2025-02-09 18:05:49 +00:00
sterni
04261c274f refactor(sterni/blipqn): only attempt •CurrentError when it'll work
I've finally figured out what the problem was with •CurrentError:
Passing a namespace as 𝕩 to •CurrentError is not supported as it may
control some kind of special behavior in the future. The right thing to
do seems to check the •Type of 𝕩 and only attempt to use •CurrentError
if it isn't a namespace.

Change-Id: I012009d0f1b913e77d65776ee43062817199baab
Reviewed-on: https://cl.tvl.fyi/c/depot/+/13106
Autosubmit: sterni <sternenseemann@systemli.org>
Tested-by: BuildkiteCI
Reviewed-by: sterni <sternenseemann@systemli.org>
2025-02-06 11:30:44 +00:00
sterni
a031b918b1 test(sterni/blipqn): add sanity check
This tests that a single pixel is set in the correct place and correctly
sent over UDP.

Change-Id: I617dda739262b4c6cf55c0bf99d2f3e141adece3
Reviewed-on: https://cl.tvl.fyi/c/depot/+/13013
Reviewed-by: sterni <sternenseemann@systemli.org>
Tested-by: BuildkiteCI
2025-01-17 15:50:33 +00:00
sterni
10dc365e34 feat(sterni/blipqn): print some extra information when using :debug
Change-Id: I92ebde397e679c7e3f8ddcf6fcecd6af5c84f629
Reviewed-on: https://cl.tvl.fyi/c/depot/+/13012
Reviewed-by: sterni <sternenseemann@systemli.org>
Tested-by: BuildkiteCI
2025-01-17 15:50:33 +00:00
sterni
a9e121380b feat(sterni/blipqn): reuse address and socket for multiple Sends
This is achieved by storing the resources we need to acquire for
interacting with the flipdot (socket fd and addrinfo struct) in a
`struct flipdot` that is dynamically allocated and treated as an opaque
pointer object via the BQN FFI.

To make sure these resources are released correctly, we only provide a
lisp style WithFlipdot to the user which takes care of acquiring and
releasing the `struct flipdot`. This works even if an error occurs in
the function the user provides thanks to _defer_. I'm not sure if
calling it _defer_ is right since Go's error handling works differently,
so defer really is deferred execution in a sense which doesn't really
fit what we're doing here. The closest is probably Haskell's bracket,
but that name references it's triadic nature which doesn't fit our
implementation.

Change-Id: Iff65d277a448dbe0c6ac93e816ece5ab6fa10190
Reviewed-on: https://cl.tvl.fyi/c/depot/+/13011
Reviewed-by: sterni <sternenseemann@systemli.org>
Tested-by: BuildkiteCI
2025-01-17 15:50:33 +00:00
sterni
1027e21eee feat(sterni/blipqn): interact with a flipdot display from BQN
The idea of this “library” is to do the least. The most natural way to
represent the image to render on a flipdot image is a two dimensional
array of booleans. This something BQN is very well equipped for, i.e. it
has primitives that are designed to deal with this type of data
structure. The only thing we have to do is to take care of sending such
arrays to the flipdot display via the μCCC's un(der)documented UDP
protocol.

Compact implements the conversion from a boolean array to a bitmap that
only uses 1 bit per pixel. All socket code is written in C and invoked
via •FFI. Currently, every time a bitmap is sent to a display, the
target host has to be resolved again. This should be fixed in the
future.

Change-Id: Idea7c81baac919da93c88a69f98cbbbd026fa328
Reviewed-on: https://cl.tvl.fyi/c/depot/+/13010
Tested-by: BuildkiteCI
Reviewed-by: sterni <sternenseemann@systemli.org>
2025-01-17 15:50:33 +00:00