Greetings Programs!!
We're back at it tonight working towards @pidgin 3.0 Experimental 3!! Come on by as we figure out what to do next!!

Greetings Programs!!
We're back at it tonight working towards @pidgin 3.0 Experimental 3!! Come on by as we figure out what to do next!!
Today, I implemented the #async / #await pattern (as known from #csharp and meanwhile quite some other languages) ...
... in good old #C!
Well, at least sort of.
* It requires some standard library support, namely #POSIX user context switching with #getcontext and friends, which was deprecated in POSIX-1.2008. But it's still available on many systems, including #FreeBSD, #NetBSD, #Linux (with #glibc). It's NOT available e.g. on #OpenBSD, or Linux with some alternative libc.
* I can't do anything about the basic language syntax, so some boilerplate comes with using it.
* It has some overhead (room for extra stacks, even extra syscalls as getcontext unfortunately also always saves/restores the signal mask)
But then ... async/await in C!
Here are the docs:
https://zirias.github.io/poser/api/latest/class_p_s_c___async_task.html
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):
https://github.com/Zirias/swad/blob/57eefe93cdad0df55ebede4bd877d22e7be1a7f8/src/bin/swad/cred/pamchecker.c
More #ai vibe #code garbage. Seriously...RedBull and Drum and Bass. I'm sure it works well with like #python but systems languages, like #pascal which I'm a master at or #c or #assmbler and I'm sure #lisp is like this where you have to keep an internal data structure map in your head or it just won't work. You have to have continuity between things. And those things are very abstract. They can't build an OS or a compiler https://www.howtogeek.com/i-tried-using-vibe-coding-to-create-my-own-productivity-app/
A practical hacker's guide to the C programming language via @RunxiYu https://lobste.rs/s/eiannc #c
https://github.com/codr7/hacktical-c
I don't understand something: if the null pointer was a billion dollar mistake, and has caused pain and system crashes for decades, then why weren't there any attempts to just not implement it in an object-oriented system?
#programming #oop #nullsafety #nullpointer #null #billiondollarmistake #algol #java #c #question
HashiCorp is hiring Senior Engineer - Boundary Reliability Engineering
#c #golang #aws #seniorengineer
United States
Full-time
HashiCorp
Job details https://jobsfordevelopers.com/jobs/senior-engineer-boundary-reliability-engineering-at-hashicorp-com-apr-1-2025-66b520?utm_source=mastodon.world&utm_medium=social&utm_campaign=posting
#jobalert #jobsearch #hiring
https://www.europesays.com/uk/25777/ When To See It At Its Best #Aquariids #C/1861G1Thatcher #comets #EtaAquarid #EtaAquariid #fireballs #Lyrid #Lyrids #MeteorShower #Science #ShootingStars #Space #UK #UnitedKingdom
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?
Want to write cleaner C code? Functions help break down complex problems into manageable pieces!
Learn how to organize your programs effectively in my latest guide https://www.spsanderson.com/steveondata/posts/2025-04-16/
Want to write cleaner C code? Functions help break down complex problems into manageable pieces!
Learn how to organize your programs effectively in my latest guide https://www.spsanderson.com/steveondata/posts/2025-04-16/
Hey guys, I'm studying #computersci
#ComSci
So far I've ben learning about #python and soon going to do #c soon.
Would people benefit from me posting about what I've learned? I'm assuming not, after-all, there's lot of documentation online and Mastodon isn't a documentation site, obviously.
Ultimately I'd like to connect in some way with learners/the programming community out there on the fediverse!
One reason why I've been thinking about posting what I've learned is: I really, really hated programming for the first and most of the second semesters of college,I struggled to understand concepts, but suddenly one day it clicked that actually, I do love making programs and this isn't actually so hard!
Don't give up people! Programming is a rough ride for the first while, but it's well worth it and eventually you'll experience that wow/feeling of inspiration moment. Work is hard, but it does pay off in the longterm.
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;
https://zirias.github.io/poser/api/latest/class_p_s_c___random.html
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-steading (n)
The creation of #C programs that do not conform to any known standards.
Let's bring back #ManPageMonday.
My pick for today is the manpage for checkint.h: https://manp.gs/mac/3/check_int32_add
These functions enable C programmers to do integer addition, subtraction, multiplication, and division and detect when those operations overflow.
Greetings Programs!! We're back at it working on @pidgin 3.0 Experiemental 3!! Come on by!!