#poser

Felix Palmen :freebsd: :c64:zirias@bsd.cafe
2025-05-05

Hmm. Now that I have a working "generic" #signal handling in #poser, I'd like to optimize a bit by picking up @david_chisnall's suggestion to use #kqueue for the job if available. Would have a clear advantage: No need to fiddle with the signal mask around every call to #kevent.

I still had the doubt whether a signal delivered via kqueue would still remain pending when it is just blocked, so I wrote some little test code and the unfortunate answer is: yes. Unfortunate because I want my library code to restore everything as it was found (signal mask and handlers) on exit, but I certainly don't want a batch of spurious signals handled when unblocking them.

Kind of obvious solution: Set the signals temporarily to ignored when unblocking them, as shown in the screenshot. Now I have the next doubt: Is it guaranteed to have pending signals delivered instantly when unblocking them? 🤔

#FreeBSD #coding

Some C code trying to avoid "spurious" signal deliveries on unblocking them after already getting them from kqueue ... by setting SIG_IGN during unblock.
Beautiful Downtown Mannheim 🗑️ 🔥bdm@iceshrimp.de
2025-05-01

Ein #Raser / #Poser weniger in #Mannheim 🌈

"Am Dienstag kontrollierte um kurz vor 21:30 Uhr eine Streife des Polizeireviers Mannheim-Innenstadt einen BMW in der Marktstraße. Das Fahrzeug war der Streife aufgrund einer übermäßigen Geräuschentwicklung aufgefallen. Bei der genauen Inaugenscheinnahme des Fahrzeugs fanden sich zahlreiche Mängel und Veränderungen. So war die Abgasanlage manipuliert worden, damit sie deutlich lauter war, als eigentlich erlaubt. Auch am Fahrwerk und den Reifen konnten unzulässige Veränderungen festgestellt werden. Die Polizei untersagte dem 22-Jährigen Fahrer aufgrund der schwerwiegenden Mängel die Weiterfahrt und stellte das Auto sicher. Der 22-Jährige muss nun mit einem Bußgeld rechnen."

presseportal.de/blaulicht/pm/14915/6023343

#Autoterror #Autoterroristen #Lärmterror

Felix Palmen :freebsd: :c64:zirias@bsd.cafe
2025-04-30

I'm trying to add "genric" #signal handling to #poser. Ultimate goal is to provide a way for #swad to handle #SIGHUP, although signal handling must be done in poser's main event loop (signals are only ever unblocked while waiting for file descriptor events).

Okay, I could just add explicit handling for SIGHUP. But a generic solution would be nicer. Just for example, a consumer might be interested in #SIGINFO which doesn't even exist on all platforms ... 🤔

Now, #POSIX specs basically just say signal constants are "integer values". Not too helpful here. Is it safe to assume an upper bound for signal numbers on "real world" OS implementations, e.g. 64 like on #Linux? Should I check #NSIG and, if not defined, just define it to 64? 🙈

#C #coding #question

Beautiful Downtown Mannheim 🗑️ 🔥bdm@iceshrimp.de
2025-04-22

#polizeiludwigshafen Originalschlagzeile mit #verantwortungsdiffusion

"Auto fährt in Straßenbahnhaltestelle"

"kam ein 24-Jähriger mit seinem Auto in der Saarlandstraße von der Fahrbahn ab, durchbrach das Glasgeländer der Straßenbahnhaltestelle "Wittelsbachplatz" und blieb auf dem Dach im Gleisbett liegen. Durch den Unfall wurden weder der Fahrer, noch andere Personen verletzt. An der Haltestelle befanden sich nach Zeugenaussagen keine wartenden Fahrgäste. Durch den Unfall entstand ein Sachschaden in Höhe von rund 10.000 Euro. Gegen den Fahrer wird wegen des Verdachts der Straßenverkehrsgefährdung ermittelt, da
Zeugen beobachteten, dass der er mit überhöhter Geschwindigkeit den Unfall verursacht haben soll. Der Führerschein des 24-Jährigen wurde sichergestellt. Der Straßenbahnverkehr musste für über eine Stunde eingestellt werden."

Mal wieder nur Glück, dass keine unbeteiligten Passanten getötet wurden.

#Autoterror #Raser #Poser #Ludwigshafen

presseportal.de/blaulicht/pm/117696/6017123

Beautiful Downtown Mannheim 🗑️ 🔥bdm@iceshrimp.de
2025-04-19

In #Hockenheim hat ein Raser ohne Führerschein ein Kassenhaus des Hockenheimrings zerstört: Am #Motodrom

#PoizeiMannheim mit heftiger #verantwortungsdiffusion "möglicherweise auch aufgrund mangelnder Fahrpraxis" - wtf? #Framing #Autopolizei

Oder lag es doch daran, dass er gar keinen Führerschein hatte und mit völlig überhöhter Geschwindigkeit unterwegs war?

Und warum "vergißt" (?) PolizeiMannheim im Pressebericht zu erwähnt, dass das Kfz von einem Autohaus gemietet war?

Der Mieter beschreibt den Unfall so: "Ich habe gesehen, wie das Auto von hinten angeschossen kam, auf dem Schotter die Kontrolle verloren hat, sich quergelegt hat, gerutscht ist, bis an den Baum. Am Baum ist es dann mit der Front eingeschlagen, hat sich noch mal gedreht in die andere Richtung, ist dann hitner uns in die Hütte reingeschossen."

"Ein Totalschaden an einem BMW 850i und ein Gesamtschaden in Höhe von 80.000 - 100.000 Euro sind das Ergebnis des Fahrversuchs eines 19-Jährigen aus Hockenheim. ... Aufgrund nicht angepasster Geschwindigkeit und möglicherweise auch aufgrund mangelnder Fahrpraxis kam er nach rechts von der Straße ab, entwurzelte beim Aufprall mit dem PKW einen Baum und zerstörte ein zum
#Hockenheimring gehörendes Kassenhäuschen.
Der 19-Jährige, der nicht im Besitz der erforderlichen Fahrerlaubnis ist, muss sich nun wegen Gefährdung des Straßenverkehrs, fahrlässiger Körperverletzung und Fahrens ohne Fahrerlaubnis verantworten."

youtube.com/watch?v=qvciG-cWmeg

presseportal.de/blaulicht/pm/14915/6016070

#Autoterror #Poser #Raser #carfriday

Beautiful Downtown Mannheim 🗑️ 🔥bdm@iceshrimp.de
2025-04-19

Grüße aus laut Politik angeblicher #Fahrradstadt #Mannheim:

HIer die Kontrollergebnisse von nur 1 (in Worten: einer) Nacht:

"Von Freitagabend bis in die Morgenstunden des Samstages wurden 132 Fahrzeuge und 176 Personen den Kontrollmaßnahmen unterzogen. Knapp 90 Verstöße konnten festgestellt und geahndet werden. Hierunter fielen diverse Verstöße bezüglich erkannter unzulässiger technische Veränderungen / Manipulationen von Fahrzeugen, unnötige Lärm und Abgasbelästigungen, als auch anderweitige verkehrsrechtliche Zuwiderhandlungen mit und ohne direkten Posing- und illegalem Tuningbezug. 6 Mal musste die Weiterfahrt mit dem jeweiligen Pkw untersagt und 6 Mal mussten die Fahrzeuge an sich sichergestellt werden, da die Verkehrssicherheit nicht unwesentlich durch die gegebenen gravierenden Mängel beeinträchtigt wurde.
Ferner fielen den Beamtinnen und Beamten auch zwei illegal geführte Kraftfahrzeugrennen mit fünf beteiligten Fahrzeugen auf. Dementsprechende Ermittlungsverfahren wurden eingeleitet. Vier Führerscheine und vier von fünf der beteiligten Pkw wurden letztlich beschlagnahmt."

#Poser #Raser #Carfriday Danke an #PolizeiMannheim, dass sie es wenigstens versucht haben. Gerne heute Nacht gleich wieder.

presseportal.de/blaulicht/pm/14915/6016115

Felix Palmen :freebsd: :c64:zirias@bsd.cafe
2025-04-17

I finally eliminated the need for a dedicated #thread controlling the pam helper #process in #swad. 🥳

The building block that was still missing from #poser was a way to await some async I/O task performed on the main thread from a worker thread. So I added a class to allow exactly that. The naive implementation just signals the main thread to carry out the requested task and then waits on a #semaphore for completion, which of course blocks the worker thread.

Turns out we can actually do better, reaching similar functionality like e.g. #async / #await in C#: Release the worker thread to do other jobs while waiting. The key to this is user context switching support like offered by #POSIX-1.2001 #getcontext and friends. Unfortunately it was deprecated in POSIX-1.2008 without an obvious replacement (the docs basically say "use threads", which doesn't work for my scenario), but still lots of systems provide it, e.g. #FreeBSD, #NetBSD, #Linux (with #glibc) ...

The posercore lib now offers both implementations, prefering to use user context switching if available. It comes at a price: Every thread job now needs its private stack space (I allocated 64kiB there for now), and of course the switching takes some time as well, but that's very likely better than leaving a task idle waiting. And there's a restriction, resuming must still happen on the same thread that called the "await", so if this thread is currently busy, we have to wait a little bit longer. I still think it's a very nice solution. 😎

In any case, the code for the PAM credential checker module looks much cleaner now (the await "magic" happens on line 174):
github.com/Zirias/swad/blob/57

#C #coding

Felix Palmen :freebsd: :c64:zirias@bsd.cafe
2025-04-16

On a #coding mission to improve my #poser lib 😎.

In the current implementation of #swad, I don't really like that I need an extra thread, just to control a child #process. A first piece to add to poser is generic "child process support", which I'm testing right now. I realized I could reuse my #Connection class, which was built for #sockets, but works just as well with #pipes 🙃

TODO now is mostly testing. See screenshots for some mimimal testing code and its output ... would you like this kind of interface? 🤔

#C #programming

Testing code for the new PSC_Process classTerminal output of the testing code
Felix Palmen :freebsd: :c64:zirias@bsd.cafe
2025-04-16

Having to deprecate a part of #poser's API for the first time, I added support for the #deprecated attribute supported by #GCC and #clang and then found #Doxygen couldn't automatically use it.

I didn't want to document deprecation *twice*, so I came up with a little hackery, see screenshots. 🙈

It's not perfect, requiring to type the message in plain text as a macro argument forbids the usage of a comma 😉 But hey, it works!

zirias.github.io/poser/api/lat

#C #coding

Definition of an OBSOLETE macro for GCC/clang preprocessor, constructing a "deprecated" attribute with the argument stringifiedDefinition of an OBSOLETE macro for Doxygen, here expanding to a comment block with the \deprecated property.The OBSOLETE macro in action with the clang compilerThe OBSOLETE macro in action with Doxygen
Felix Palmen :freebsd: :c64:zirias@bsd.cafe
2025-04-15

I revisited that, AGAIN. Getting #random data in #poser now has yet another fallback, in case we don't have #arc4random and we also don't have #getrandom: read from /dev/random and/or /dev/urandom, "old style" 🙈. Still better to try this before resorting to a simple little #xorshift.

In the best case — arc4random found — this is still all the code of PSC_Random_bytes() 😆:

arc4random_buf(buf, count);
return count;

zirias.github.io/poser/api/lat

#C #coding

Felix Palmen :freebsd: :c64:zirias@bsd.cafe
2025-04-15

More #poser improvements:

* Use arc4random() if available, avoids excessive syscalls just to get high-quality random data
* Add a "resolver" to do #reverse #DNS lookups in a batch, remove the reverse lookup stuff from the connection which was often useless anyways, when a short-lived connection was deleted before resolving could finish 🙈

As a result, #swad can now reliably log requests with reverse lookups enabled 🥳

#C #coding

syslog excerpt of swad's request logging with resolving remote hosts enabled
Felix Palmen :freebsd: :c64:zirias@bsd.cafe
2025-04-14

Still working on #swad, and currently very busy with improving quality, most of the actual work done inside my #poser library.

After finally supporting #kqueue and #epoll, I now integrated #xxhash to completely replace my previous stupid and naive hashing. I also added a more involved #dictionary class as an alternative to the already existing #hashtable. While the hashtable's size must be pre-configured and collissions are only ever resolved by storing linked lists, the new dictionary dynamically nests multiple hashtables (using different bits of a single hash value). I hope to achieve acceptable scaling while maintaining also acceptable memory overhead that way ...

#swad already uses both container classes as appropriate.

Next I'll probably revisit poser's #threadpool. I think I could replace #pthread condition variables by "simple" #semaphores, which should also reduce overhead ...

github.com/Zirias/swad

#c #coding

Felix Palmen :freebsd: :c64:zirias@bsd.cafe
2025-04-11

First change since #swad 0.2 will actually be a (huge?) improvement to my #poser lib. So far, it was hardwired to use the good old #POSIX #select call. This is perfectly fine for handling around up to 100 (or at least less than 1000, YMMV) clients.

Some #select implementations offer defining the upper limit for checked file descriptors. Added support for that.

POSIX also specifies #poll, which has very similar #scalability issues, but slightly different. Added support for this as well.

And then, I went on to add support for the #Linux-specific #epoll and #BSD-specific #kqueue (#FreeBSD, #NetBSD, #OpenBSD, ...) which are both designed to *solve* any scalability issues 🥳

A little thing that slightly annoyed me about kqueue was that there's no support for temporarily changing the signal mask, so I had to do the silly dance shown in the screenshot. OTOH, it offers changing event filters and getting events in a single call, which I might try to even further optimize ... 😎

#C #coding

kqueue client code, manually relaxing the signal mask for just the single kevent() call waiting for new events.
2025-04-10

Moin liebe Toots

Erfolgreich geschlafen?
Ich ja!

Meine Erkenntnis aus dieser Nacht:
Die Welt, wie wir sie jede:r für sich wahrnehmen, ist nur eine Simulation, die unser Hirn herstellt.
Also keine Ängste nötig vor dem kommenden Tag! Alles nur Brainfuck!

Wer sich aber, in seiner infantilen Hirnlosigkeit, mal anfangen sollte Gedanken zu machen, sind die Kleinaffen in ihren grossen, lauten Penisersatzmaschinen.

Also ... einen schönen Tag Euch

#poser

srf.ch/news/schweiz/pilotversu

Beautiful Downtown Mannheim 🗑️ 🔥bdm@iceshrimp.de
2025-04-07

Gibt es neben Stadtbahnliga auch eine #Ampelmastliga? ​:think_bread:​

Anyhow ... Treffer in Mannheim:

"Am Samstagabend, gegen 21.41 Uhr, befuhr ein 48-jähriger Mercedesfahrer mit weiteren drei Insassen den Friedrichsplatz stadteinwärts. Als er beabsichtigte auf den linken Fahrstreifen zu wechseln, näherte sich auf diesem ein nicht näher bekannter PKW mit überhöhter Geschwindigkeit. Daraufhin erschrak der Fahrer des Mercedes und lenkte sein Fahrzeug ruckartig nach rechts. Dabei kollidierte er mit dem Bordstein, wobei der rechte Vorderreifen platzte. Hierdurch verlor er die Kontrolle über sein Fahrzeug und prallte gegen eine Ampel. Der Fahrer erlitt eine Thoraxprellung, seine 48-jährige Beifahrerin eine Prellung am Unterarm. Die beiden 16- und 17-jährigen Mitfahrerinnen auf der Rückbank erlitten jeweils einen Schock. Alle vier Personen kamen zur weiteren Abklärung in umliegende Krankenhäuser. Der PKW war nicht mehr fahrbereit und musste abgeschleppt werden. An der Ampel entstand erheblicher Sachschaden, sodass es zum Ausfall der Ampel kam. Bis diese repariert war, wurde der Verkehr durch die Polizei geregelt."

Bei Kfz-Infrastruktur funktioniert es auf einmal:

- Verkehr wird durch Polizei geregelt
- insgesamt 3 oder mehr Streifenwagen mit Blaulicht bis nachts nach 2:00 h im Einsatz, um die Zufahrt dort zu sperren
- auch am Wochenende nachts um 2:00 h Spezialfirma mit gleich zwei Fahrzeugen im Einsatz, um den Ampelmast zu demontieren und Behilfsampel zu installieren

Ich würde mir nur 5 % dieses Engagements und Einsatzes wünschen, wenn es um die Sicherheit von Radverkehr geht.

Auch wenn die Geschichte plausibel klingt bin ich jedes mal überrascht, wie unkritisch Polizei Mannheim die Erzählungen der Kfz-Fahrenden 1:1 übernimmt
- Wie schnell war denn der Wagen selbst?
- Wurde das Telefon überprüft, ob es zum Unfallzeitpunkt bedient wurde?
- Ist das Kennzeichen des anderen Kfz bekannt? Der Friedrichsplatz ist absolut zentral und prominent in Mannheim. Es muss viele Zeugen geben, die das Geschehen beobachtet haben - erst recht an einem Samstagabend.
- Ist das Kennzeichen des anderen Kfz bekannt?
- Falls nicht, warum enthielt die Pressemitteilung keinen Zeugenaufruf?

presseportal.de/blaulicht/pm/14915/6006973

#Raser #Poser #Mannheim

MЯGЯΣΣПGӨᄂDmrgreengold@devianze.city
2025-04-04

B!tch, you a poser
B!tch, you a poser
B!tch, you a poser (Strike a pose)
B!tch, you a #poser (Strike a pose, hoe) 🎤

Felix Palmen :freebsd: :c64:zirias@bsd.cafe
2025-04-03

Fixed cancelling a thread job in #poser's #threadpool. Using a semaphore to do this seems reliable 😎

Oh my. #Multithreading, #synchronization, async #Unix #signals, this is pure "fun" ... 🙈

github.com/Zirias/poser/commit

#C #coding

Felix Palmen :freebsd: :c64:zirias@bsd.cafe
2025-04-03

DId lots of smaller improvements to #swad ... but first, I had to hunt down a crash 🤯. Finally found it was caused by my #poser lib (to be fixed later): A connection there can resolve the hostname of a remote end and does so in a thread job to avoid blocking. If the connection dies meanwhile, the job is canceled. Seems my canceling mechanism relying on a signal to the thread is, well, not reliable (the signal can arrive delayed). Ok, for now just disabled name resolution to sidestep that.

Now, integration with #nginx is much better. I intrdoduced (optional) custom headers to transport the authentication realm and the redirect URI, plus state management in the session, so these can be passed to the "auth" endpoint. This requires to make sure nginx always passes the session #cookie, Unfortunately, I still need a "hacky" redirect configuration for login in nginx. If auth_request could just pass the response body, this would be unnecessary .... 🙄

The nginx configuration shows #swad running on "files" and another nginx running on "wwwint" serving #poudriere output there. This nginx instance helpfully adds cache hints, which I have to override, so a redirect works as expected when for example the swad session times out.

#C #coding

Full nginx configuration integrating swad for authenticationswad log output showing bots trying unauthenticated access
Beautiful Downtown Mannheim 🗑️ 🔥bdm@iceshrimp.de
2025-03-31

Auch 2025 kündigen #PolizeiMannheim und die die konservative Zeitung Mannheimer Morgen Blitzerstellen an, obwohl dies nachweislich die Wirkung mindert.

Der Blitzeranhänger der derzeit am Luisenpark steht wurde dieses Wochenende übrigens mit Farbe übersprüht. Mannheim halt
🥴

#Autoterror #Autoterroristen #Autostadt #Poser #Raser #Mannheim

Client Info

Server: https://mastodon.social
Version: 2025.04
Repository: https://github.com/cyevgeniy/lmst