unrelenting.technology

Posts

Both long-form posts (articles) and short-form posts (notes) in one feed.

Website redesign is live! Don’t have a good homepage yet but really liking how the post view looks now. Plus /photos is a gallery view now.

Very weird Vulkan problem likely nobody else would ever encounter: way back in the day Mesa wrongly installed ICD definitions for i386 too on amd64, e.g. $PREFIX/share/vulkan/icd.d/radeon_icd.i386.json. I’ve installed Mesa manually, and never cleaned them up, so I’ve had these files with last modified date in 2017. They didn’t really cause any problems (well, other than duplicating the GPU in device lists)… until I ran the Vulkano test suite which would run GetPhysicalDeviceFeatures2 on all devices. For whatever reason, it would get a null pointer for that function on the second (described-by-i386-file) device and explode.

sellout engine now has a README. Still have to write a big article about the whole story of my blog engines…

OpenPAM has some very strange behavior for chauthtok since 2007 and I just hit that. Why… would you just completely change the semantics of sufficient for the preliminary check thing?! This literally only seems to accomplish one thing: breaking password changes for additional password sources (that are not the last one).

The micropub backend I mentioned previously is real now! Completely undocumented right now, I’ll need to work on that next. But hey, look, I’m posting from Quill to this now-static site.

Shower thought: Google App Engine was the original AWS Lambda of the late 2000s.

Okay, it literally was not, it was just “platform as a service”, morally equivalent to Heroku, right? Well, sure it didn’t have all the non-web event handling stuff, but it was in many ways closer to Lambda than to Heroku. Namely it did not run just any app, it would “insert itself into your code” – e.g. Python WSGI apps had to be adapted with a special module – which is exactly how it is in Lambda!

And around 2010 GAE did feel like the place for letting someone else run your random hobby project for free “forever”. Well, hm, any PaaS or FaaS with a free tier should be like that. Soooo I just went to check if this ancient project is up. Nope. I guess with the absorption of GAE into Google Cloud, things changed so much that not ever signing into GCloud (and so not accepting new terms etc.) leads to the app being shut down. Well, that kind of thing is very much expected from Google by now.

This website is now fully owned by Bezos very very Serverless™! Built using mildly forked Zola in GitHub Actions, uploaded to S3, content-delivered via CloudFront. And even DNS is now Route 53, otherwise properly having CloudFront on an apex (bare) domain would be difficult. Webmentions are outsourced to Webmention.io (+ a tiny endpoint converting their webhook to GitHub rebuild command is hosted on Glitch) and micropub is gone, at least for now. (When I have nothing better to do I might just make an app running in Lambda that would edit the git repo in response to Micropub requests, send outgoing webmentions, be a custom auth endpoint, eventually also handle incoming webmentions, and so on.)

I’m glad I only did this now: CloudFront Functions did not exist until a few months ago. With this functionality, it is a quite capable CDN. Still clunky and weird in some aspects though (e.g. “Default Root Object” applying even after a Function rewrites /something/ to / was quite surprising)

I really haven’t been posting on my website, have I? Yeah… I kinda don’t always have the energy/motivation/time to maintain a website like this.

BTW the choice to generate static HTML in sweetroll2 really helped with keeping the website up. For the last couple months (?) the backend was down because the Mnesia DB for the job queue somehow got messed up. But that was fine as long as I wasn’t posting, the pages were still up.

Maybe I’ll reinvent the backend once again.. with more “cloud” outsourcing to get rid of as much maintenance as possible.. or something.

Noticed the mgb driver for Microchip LAN7430 (/31) NIC in FreeBSD commit logs. Huh, interesting stuff: Microchip publishes so much documentation.. a “Programmer’s Guide” PDF with lots of driver pseudocode, and even evaluation board design files!

Burstable Graviton2 instances are now a thing. Cool! Changed the instance type for this website from a1.medium to t4g.micro so that Jeff Bezos gets less of my money :P (Basically no money until the end of this year, even — there’s a free trial for t4g.micro for all AWS accounts!)

The touchscreen (both finger and pen support) on my Pixelbook has been broken for a while (the Wacom digitizer was always present on i2c but it wasn’t sending events). There was like one time where I managed to get it to work briefly by holding the pen against it in some way, but that was it. Today I took the laptop out of the bag by the middle part, squeezing the lid a bit. Aaaand… touch works now! Something was going on with wiring somehow inside the lid (not the hinge) I guess? :/

Wi-Fi not connecting (well, getting instantly deauthed due to AP-STA-POSSIBLE-PSK-MISMATCH after connecting) is apparently a relatively common problem with IoT devices. And most people seem to point to ESP8266-based ones.

Well, I’ve never had a problem with ESP, but today I’ve been setting up an RTL8711AF based device (Xiaomi qmi.powerstrip.v1) and it was failing just like that.

Turns out this device just completely fails when 802.11w Management Frame Protection is on (even optionally). Ugh. Thanks Realtek.

Raspberry Pi 4 with the outer metal part of the micro HDMI connector sticking out of the port, micro HDMI adapter with naked pins
Photo parameters 4.755 mm ISO 2500 1/10 ƒ/1.65 Download original

Wow. micro HDMI is the worst connector ever.

(well, at least this particular adapter is terrible.. or the Pi 4 grabs too hard?)

Wow, about a month ago Spot (ex-Spotinst), the service that can auto-restore an EC2 spot instance after it gets killed, fixed their arm64 support! (Used to be that it would always set the AMI’s “architecture” metadata to amd64, haha.)

And of course their support didn’t notify me that it was fixed, the service didn’t auto-notify me that an instance finally was successfully restored after months of trying and failing, AWS didn’t notify either (it probably can but I haven’t set anything up?), so I wasted a few bucks running a spare inaccessible clone server of my website. Oh well, at least now I can use a spot instance again without worrying about manual restore.

UPD: hmm, it still tried i386 on another restore! dang it.

Ported the Firefox Profiler to FreeBSD in order to investigate why WebRender has some jank when scrolling some walls of text on my 4K/HiDPI setup.

The profiler code initially looked somewhat scary: some Google Breakpad code is used, a custom stack unwinder called LUL is used on Linux (which also partially derived from Breakpad code)…

Initially, I got it working with “pre-symbolication” (an option to build the goblin ELF parser into Firefox for this purpose) only, ifdef’ing any Breakpad code out.

Turns out:

  • the only part of Breakpad used is extracting build IDs from shared objects (and in fact the “base profiler”, a copy (for now) of the Gecko profiler used for profiling during the early startup phase, just copied all the relevant code);
  • devel/breakpad was there in FreeBSD Ports (but expires in like three days!), and its patches showed that it’s really trivial to get all it working.

So I got the main symbolication system working. Which, it turns out, runs WebAssembly-compiled goblin in a web worker! Fun stuff. Requires stripping libxul for now tho.

In the end, the patch turned out to be mostly just ifdef’s! The only meaningful parts are: thr_self/thr_kill2 instead of gettid/tgkill, supporting the different mcontext structs, and (for the pre-symbolication code path) ignoring symbol names returned by dladdr because they’re hilariously bad.

BTW, earlier in the dev-tools-on-FreeBSD space: heaptrack! I even used it to find a real memory leak in Wayfire.

Screenshot of Shadertoy in Firefox, with procstat showing C flag on firefox processes

Firefox content process sandboxing with Capsicum: it’s alive! Work in progress, but I have WebGL and audio working :)