I was intending this to be a blog post, but I guess it'll be a long Fedi post instead since I have a large char limit on my instance :-P Time to explain what I've been doing lately!

Basic, new music player: "Aika". I've named it after the character in Agent Aika because I like that anime and I'm just a lewd girl like that. If you know me well, you should not be surprised. Ask me who my Reika program is named after sometime...

Anyway, Aika is
NOT a replacement for #Benben (that ain't going away, I love it too much). I gotta emphasize that. Benben will continue. Aika is simply another option for people. This one is special in that the UI is entirely based around #ZeroMQ sockets. So imagine having a local player, running like you see here, but then you can securely connect additional "Remote UIs" to it over a network. These can just connect/disconnect whenever you need, however many you want, and Aika will just keep doing its thing. Kinda like MPD, but easier to use, and you always have a local interface like you see here, never just an invisible process in the background. I call these "Remote UIs". Extremely useful for someone like me who goes around the house to multiple computers while wearing Bluetooth headphones... but it could technically also stream the audio over the network in the future, too. Anyway, I call this ZeroMQ UI stuff the "Remote UI Protocol", and it's Aika's main special thing.

Also, unlike Benben, this one will allow you to add and remove files while it's running through a built-in file browser. So whereas Benben was designed to be like a super sexy version of mpg123 from the start, Aika will be more like a terminal version of Audacious. Sorta. It'll still have its own feel.

Oh, and Aika uses plugins so that support for audio formats, playlist formats, backends, etc. can be changed without changing Aika itself (herself?). So that's another difference. They're just .so files.

The video here just shows a
temporary UI that I'm using while I build out the Remote UI Protocol and get things working. It'll look different and more complete in time. This UI here is not yet a true Remote UI, it's entirely local and built into Aika (the "Local UI"), but it is using the Remote UI Protocol over ZeroMQ internally while I design it. Once I have that protocol finished and implemented, I'll convert this Local UI to not use ZeroMQ for some things (for latency reasons), then implement a true example Remote UI that mimics Benben's interface and can run on an entirely separate machine (even across the world if you want).

Lastly, Aika is written in Object
#Pascal, not #CommonLisp. So whereas Benben has a 106mb binary (uncompressed, give or take), Aika currently has a 900kb binary. Whereas Benben uses 133 mb of RAM at runtime to play the Quake 2 soundtrack in FLAC format, Aika currently uses 5mb. Also, Aika has been using about half to one quarter less CPU than Benben so far.

It'll be quite a while until Aika is ready for a v0.1.0 release, but I've got the beginnings going on here. The code will be a bit messy at first until the protocol designs solidify, the UI is very incomplete, there's no resampling yet, and it crashes/deadlocks sometimes... but it's at least able to play albums in FLAC format right now
https://fossil.cyberia9.org/aika/

As for Benben.. I blasted through the milestones for v1.0.0 a lot quicker than I expected, so expect it out sooner than later. Maybe mid summer.

EDIT: Oh, and Aika is specifically targeting any POSIX-compatible OS. I'm actually testing things fairly regularly on
#Haiku to ensure it works there in particular.
So, I have my own bindings for #ZeroMQ for #CommonLisp now: http://fossil.cyberia9.org/cl-remizmq/

Consider this the end of my vacation


This isn't quite 0.1.0 yet, but is already usable. It's a much more complete set of bindings compared to cl-zmq. Things of particular note:

* There's a Low-Level API that has complete (or at least near-complete) low-level bindings for contexts, sockets, messages, atomics, timers and proxies. It also has more extensive knowledge of the error codes, socket options, CURVE stuff, capability detection, etc.
* There's a High-level API that wraps all of the low-level stuff in high-level CLOS classes and/or code.
* The timers are an exception, and were rewritten from scratch in native Lisp code in the High-level API so that they integrate better with Lisp ecosystems, and play nicer when using the REPL.
* The
PROXY high-level class is nicer to use and more Lisp-y. It runs on its own thread so that you can use it in a REPL, and is easier to control.

There are some examples ported from the official guide in the repo. There is no documentation yet, but all of the functions/methods have documentation strings, which should hold you over until I write some actual docs.
CL-RemiZMQ: CL-RemiZMQ

Ma conférence "Server Sent Events et ZeroMQ"

Mardi dernier (16 septembre), j’ai présenté une conférence au meetup organisé par l’AFUP Paris, sur les Server Sent Events (SSE) et la bibliothèque ZeroMQ.

Retrouvez les slides de la conférence dans l'article en lien.

https://www.geek-directeur-technique.com/2025/09/20/ma-conference-server-sent-events-et-zeromq
#php #sse #zeromq #afup

Ma conférence "Server Sent Events et ZeroMQ"

Mardi dernier (16 septembre), j'ai présenté une conférence au meetup organisé par l'AFUP Paris, sur les Server Sent Events (SSE) et la bibliothèque ZeroMQ. Les SSE reposent sur un protocole basé sur le HTTP, et dont l'implémentation est intégrée aux navigateurs via une API Javascript. Ce protocol

De geek à directeur technique

Here is my example of testing PyZMQ client and server code with pytest and pytest-mock. I haven't found much information on this topic. Anyone else have examples of testing PyZMQ code? https://gavinw.me/pythonic/pyzmq/test-client-server.html

#python #pytest #zeromq #pyzmq

Pythonic Programming

Testing a PyZMQ Client and Server

Chapter 4 - The ZeroMQ Process: C4 · Social Architecture

ooh a #zeromq-based project.. haven't seen that in a while https://github.com/zasper-io/zasper
GitHub - zasper-io/zasper: High Performace IDE for Jupyter Notebooks

High Performace IDE for Jupyter Notebooks. Contribute to zasper-io/zasper development by creating an account on GitHub.

GitHub

@b0rk In the interest of sharing failed hypotheses: I’m not finding evidence people use #zeromq for fire-and-forget, blind fanout queues or other spray-n-pray style uses.

For some reason I thought this was an explicit feature given the protocol design, but I’m not seeing it. It explicitly lacks reliable delivery, so an expert may know better.

cppzmq-tour/index.org at master · brettviren/cppzmq-tour

A tour of how to develop with cppzmq, the C++ bindings to ZeroMQ libzmq. - brettviren/cppzmq-tour

GitHub

So if I understand it right, there's no way to use #ZeroMQ with an existing event loop - I can't get the filehandles out of it to poll them myself.

There's also no way to bind multiple socket types (e.g. both a RES and a PUSH) to the same physical endpoint? So I'd need two different ones?

It seems like this library is far less useful than it first appears :(