Posted by david927 3/30/2025
Ask HN: What are you working on? (March 2025)
tl;dr: A 60fps embedded browser on the frontend lets you record manual steps and AI-driven steps (to assert/extract data). It then turns those into test suites. Any test with AI queries can auto-generate an API to be queried later.
Right now, I'm working on an agentic API builder. Example use case: Say you need data from Salesforce and JIRA — you log in, navigate to what you need, add an AI query step (or select elements manually), and set an update interval. The system then handles extraction and monitoring.
Why? Because at all my previous jobs, suggesting hiring QA engineers would get you laughed out of the room. But testing was desperately needed, as well as internal tooling. Burning developer/CTO time on wrangling multiple complex API's just to build some internal tool would take much longer without this. So I'm working on something that makes both vastly simpler for small teams. Hoping to have a workable demo next week!
Here is one:
When the random/rand functions are called with small moduli, well under 32 bits wide, they still draw a 32 bit word from the PRNG. I fixed that. Now the random state has a 32 bit shift register which it can load from the PRNG and take bits from it (in batches of 2, 4, 8 or 16).
There is a way to do this without any additional state other than that 32 bit word to indicate that the register has run out of bits.
We pretend that the register is 33 bits wide, giving it an indicator high bit that is always 1. Thus whenever the value drops to 1 or 0, it has to be reloaded. We cannot fit that indicator bit into the register, so what we do is: when we are reloading it with a fresh value, we immediately take bits we need from that value, shift it right, which creates the space for the bit. We then mask the bit in the right spot, depending on the shift size.
I worked on enhancing brace expansion in the glob* function. The regular glob* function has brace expansion if it is provided by the POSIX C library one, but the extended glob* has its own. I added numeric and string range expansion to it. It's better than the corresponding features in bash, because you can use more than one character, as in {AA..ZZ}. Also, if you use leading zeros in numeric ranges you get leading zeros in the output, as in {000..999}. The step sizes are supported.
Inspired by the step sizes in brace expansion, I added the same to range iteration:
2> [map cons 0..10..2 "a".."z"..3]
((0 . "a") (2 . "d") (4 . "g") (6 . "j") (8 . "m"))
... and other stuff. There are a number of items remaining on the TODO list marked for next release.I know it's been tried before, but I thought I'd attack it with a few different angles - web based, no chrome extension, and thresholds to help verify the article is worth it.
You can see the proof-of-concept here: https://paperwall.io/