Upgraded my gaming OS install to Windows 11. Took several hours because of me trying to be “clever” with bootloaders back when I was installing 10.

So, error 0x800701b1 when updating means Windows is confused about UEFI boot entries. In my case, the Windows SSD had no ESP (just the one NTFS partition… that did have an EFI directory on it somehow?!), while the other SSD had everything on its ESP — rEFInd, FreeBSD loader.efi, and Windows Boot Manager. It all worked fine, but turns out bcdedit is really confused about this setup and spews some error about a nonexistent or unrecognized device. Fiddling with it and stuff actually broke my Windows install in a weird way (first it booted into safe mode, then any boot would result in a BSOD related to kernel exception something). Booting a Windows-to-Go install from an external hard drive, shrinking the NTFS partition (damn that takes ages on a 2TB SSD) and adding an ESP fixed the install, and I was able to update to Windows 11 just fine.

This is kinda my fault for ending up with such a bizzare setup but I still wanna say, “ARRGGHHH Stupid Windows!!”

My first PCB project is a success! It’s a tiny STM32L1 board. USB in Rust works on it after some development (yeah the Rust HAL for the L1 series was the one that wasn’t maintained…)

Happy new year! Since I haven’t been posted in a while, here’s what I’ve been up to lately:

  • adopted Wezterm as my terminal emulator, contributing a bunch of (mostly Wayland-related) patches in process
  • figured out a minimal tool to make Xiaomi power strips work without the “cloud”
  • saw a SIMD-accelerated tac line-reversing utility and immediately ported it to arm64 NEON/AdvSIMD
  • helped out with firmware and EC (just testing with the latter) patches for the Thinkpad L430/L530
  • developed a FreeBSD driver for the SPI keyboard/touchpad attachment in Apple MacBooks (currently only in my fork and only tested on the 2015 MBP, spibus-side prerequisites are in review)
    • related: got the Magic Trackpad 2 (which uses a compact packet format but similar surroundings to bcm5974) working too
  • started learning PCB design with Horizon EDA
  • found bugs in the mold linker and zlib-ng
  • made new Wayfire plugins: wf-globalgestures, wf-dynspaces, wf-touchpad-gesture-drag (yeah, turns out 3-finger drag is easy with current libinput: it’s a hold-cancel-swipe sequence!)
  • finally made a freebsd-embedded-hal Rust crate
  • just now added dark mode to micro-panel where I’m writing this

Unusually, I do have a legit new year’s resolution this time: I should blog more! Want to publish some long-form things here.

Sometimes I waste hours of debugging on really really silly things…

Why do I keep thinking that e.g. 0 || 69 (typically written with variables obviously) in C would return 69 rather than 1?! Well it must be because C’s “booleans are just numbers” thing makes me think that the operators would also do… number things. No they don’t! >_<

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.