Working through the API and docs in my WebRTC project in Rust. This weekend I’ve finished the API docs (for now, can always document more!) Trying to figure out what else to polish.
Reimplementing some type theory and PLT papers in Ocaml and Reason to help get my interest in writing my own programming language built back up. Working on adding a “digital garden” style wiki to my Obsidian vault at the same time, which will hopefully allow me to better preserve some of my learnings.
I am working on a custom soldering / desoldering hot plate controller board and firmware using RP2040, screen, rotary encoder, thermistor and an external high-power relay.
I have just implemented a simple task scheduler with setjmp-based threads (with different stacks of course) on the prototype board but I have made an error when designing the external push/pulls so I will need a second revision of the board before I can proceed with actually heating a piece of aluminum to couple hundred degrees Celsius.
I don’t know what the rotary encoder is for, but I’m going to pretend it’s for a dial or hand-crank that lets you switch manually from thread to thread.
Rotary encoder controls the menu that allows me to switch between target temperature control (where the chip controls the temperature by turning the relay on/off based on thermistor readings) and several automated soldering profiles (same but with preprogrammed target temperatures and threir durations).
Screen is for target/current temperature display and menu.
It’s kinda hard to write the firmware with only interrupts and I wanted to try to do it without FreeRTOS, so I went for it and implemented the threads myself.
Yesterday at work, discovered a new (to me) kind of bad actor behavior. Immediate mitigation was successful, but probably working through Saturday on a more durable solution.
Hopefully I can conclude before Sunday. I need to build some shelves to put more house plants on, and set up a new NAS unit on behalf of a family member.
Continue working on my new personal project, as I’m using no DB I have to rethink how I approach new features and evolution of the in-disk format to make it future proof, I am taking that opportunity to read through some chapters of Volume 3 of TAOCP, particularly the digital searching and secondary keys chapters as well as brushing off some knowledge on self-balancing trees. I’m also wondering how to implement this in a thread safe way, which TAOCP doesn’t even consider. Anyone has a good recommendation on an explanation or paper in thread safe radix trees? And also some good reference on bloomier filters?
Probably installing a blower on my forge. If the motor ain’t blown, I might use an electric control for managing the speed of the motor instead of controlling air intake by means of blocking out the pipe with a sheet of metal, adjusted for desired flow. Probably cutting a sheet of metal into a square shape, putting holes in it, in order to finish putting the forge to usable shape. Maybe installing the chimney on the forge so that the smoke emitted by the burning coal doesn’t end up in my lungs. That maybe is more of a “maybe this week, maybe next week” kinda deal, I really don’t wanna breathe that shit. Maybe spending a bit of time using my grinder with a metal brush attachment to remove the rust coat from the forge, although I might keep that in, unless it’s actively detrimental.
I’m playing a bit with Electron, https://remirror.io/ and the Notion API to try and build Quick Notes for Notion. I really like what Apple did with Quick Notes for Notes, but Notion tends to be the place where I keep all my information so wanted to port that behaviour to Notion :D
I would like to carve out some time to work on a blog post I am authoring about a practical example of programming by contract in PHP and how cool PHP-DI actually is.
Realised I can move my Shelly devices around to make the double-switched upstairs landing a “smart light” as well, but it means swapping the Shelly 1L in the downstairs hall ceiling for a 1, then installing the 1L upstairs. Lots of fiddling with wago connectors in ceiling holes. At least then I can shout at the HomePod to kill both lights after the kids inevitably leave them on at bedtime.
Picked up a gaming PC (nothing special, Dell Optiplex 3020) which needs setting up. Previous owner hadn’t reinstalled windows, but they also didn’t leave any documents on it. Disappointing twice over, but good from their point of view. Excited to have things like Age of Empires II in my life again, and the list of steam games I have so far will likely run on the Intel HD Graphics in the processor so no need to splurge on a GPU just yet.
I’m playing a little bit with writing a relational in-memory database macro in Rust and benchmarking different data structures with it. So much fun to be had!
I’m going to try to get a new build of hbsdfw out the door. hbsdfw is a HardenedBSD-based build of OPNsense I maintain. I’m making progress on Cross-DSO CFI in HardenedBSD. I’m working in the ports tree now, trying to wrap my brain around all the breakages that come from having the base OS fully built with Cross-DSO CFI.
I’ve been using Github’s copilot for a while now and it always felt like a coin flip whether it’ll add some value to my time or just unnecessarily confuse me. Though, learning new languages is where it trully shines! I got a few Go for Pythonistas articles and onboarding on Go has been breeze so far. I do miss syntax sugar like list comprehensions and default function parameters though.
I’m writing a small interpreter to explore writing a REPL with all the ‘send this function to the interpreter’ fun that you get in lisps. Languages are much more fun once you have an AST to play with, so I’m trying to get the parser over with quickly.
I signed the offer letter for my next job a few hours ago so what I’m not doing this weekend is being stressed about employment :D
Aside from that I’ll probably just do some maintenance on my personal Minecraft server and document some of it in a blog post for future me.
Congrats on the new job!
I need to write up What’s New in Go 1.20 before it’s actually released…
Forgive me that maybe silly question, but why not simply look to the release notes?
I mostly ask because I find them pretty good and they are not just sind list of commits.
Or were you talking about them?
I suppose release notes tell you what has changed and maybe why, but not why it’s super cool and why you should definitely fiddle with it!
I try to go into what’s behind the changes and why you should care. See https://lobste.rs/s/w0vntp/what_s_new_go_1_20_part_i_language_changes
Attempting to port my language translation library to support ARM. Not going to be a fun weekend. https://github.com/kroketio/kotki
Working through the API and docs in my WebRTC project in Rust. This weekend I’ve finished the API docs (for now, can always document more!) Trying to figure out what else to polish.
API docs https://ams3.digitaloceanspaces.com/str0m/doc/str0m/index.html
Project https://github.com/algesten/str0m
The chat example shows how to implement a simple SFU in 600 loc. https://github.com/algesten/str0m/blob/main/str0m/examples/chat.rs
Reimplementing some type theory and PLT papers in Ocaml and Reason to help get my interest in writing my own programming language built back up. Working on adding a “digital garden” style wiki to my Obsidian vault at the same time, which will hopefully allow me to better preserve some of my learnings.
I am working on a custom soldering / desoldering hot plate controller board and firmware using RP2040, screen, rotary encoder, thermistor and an external high-power relay.
I have just implemented a simple task scheduler with setjmp-based threads (with different stacks of course) on the prototype board but I have made an error when designing the external push/pulls so I will need a second revision of the board before I can proceed with actually heating a piece of aluminum to couple hundred degrees Celsius.
EDIT: clarify
I don’t know what the rotary encoder is for, but I’m going to pretend it’s for a dial or hand-crank that lets you switch manually from thread to thread.
Rotary encoder controls the menu that allows me to switch between target temperature control (where the chip controls the temperature by turning the relay on/off based on thermistor readings) and several automated soldering profiles (same but with preprogrammed target temperatures and threir durations).
Screen is for target/current temperature display and menu.
It’s kinda hard to write the firmware with only interrupts and I wanted to try to do it without FreeRTOS, so I went for it and implemented the threads myself.
Yesterday at work, discovered a new (to me) kind of bad actor behavior. Immediate mitigation was successful, but probably working through Saturday on a more durable solution. Hopefully I can conclude before Sunday. I need to build some shelves to put more house plants on, and set up a new NAS unit on behalf of a family member.
MAGFest!
Flying to Bariloche, Argentina, for a bit of vacation.
Continue working on my new personal project, as I’m using no DB I have to rethink how I approach new features and evolution of the in-disk format to make it future proof, I am taking that opportunity to read through some chapters of Volume 3 of TAOCP, particularly the digital searching and secondary keys chapters as well as brushing off some knowledge on self-balancing trees. I’m also wondering how to implement this in a thread safe way, which TAOCP doesn’t even consider. Anyone has a good recommendation on an explanation or paper in thread safe radix trees? And also some good reference on bloomier filters?
It seems like I’ll be learning about lock-free algorithms, anyone knows of some good resources for that?
Maybe https://marabos.nl/atomics/
Probably installing a blower on my forge. If the motor ain’t blown, I might use an electric control for managing the speed of the motor instead of controlling air intake by means of blocking out the pipe with a sheet of metal, adjusted for desired flow. Probably cutting a sheet of metal into a square shape, putting holes in it, in order to finish putting the forge to usable shape. Maybe installing the chimney on the forge so that the smoke emitted by the burning coal doesn’t end up in my lungs. That maybe is more of a “maybe this week, maybe next week” kinda deal, I really don’t wanna breathe that shit. Maybe spending a bit of time using my grinder with a metal brush attachment to remove the rust coat from the forge, although I might keep that in, unless it’s actively detrimental.
I’m playing a bit with Electron, https://remirror.io/ and the Notion API to try and build Quick Notes for Notion. I really like what Apple did with Quick Notes for Notes, but Notion tends to be the place where I keep all my information so wanted to port that behaviour to Notion :D
I would like to carve out some time to work on a blog post I am authoring about a practical example of programming by contract in PHP and how cool PHP-DI actually is.
Realised I can move my Shelly devices around to make the double-switched upstairs landing a “smart light” as well, but it means swapping the Shelly 1L in the downstairs hall ceiling for a 1, then installing the 1L upstairs. Lots of fiddling with wago connectors in ceiling holes. At least then I can shout at the HomePod to kill both lights after the kids inevitably leave them on at bedtime.
Picked up a gaming PC (nothing special, Dell Optiplex 3020) which needs setting up. Previous owner hadn’t reinstalled windows, but they also didn’t leave any documents on it. Disappointing twice over, but good from their point of view. Excited to have things like Age of Empires II in my life again, and the list of steam games I have so far will likely run on the Intel HD Graphics in the processor so no need to splurge on a GPU just yet.
I’m playing a little bit with writing a relational in-memory database macro in Rust and benchmarking different data structures with it. So much fun to be had!
I’m going to try to get a new build of hbsdfw out the door. hbsdfw is a HardenedBSD-based build of OPNsense I maintain. I’m making progress on Cross-DSO CFI in HardenedBSD. I’m working in the ports tree now, trying to wrap my brain around all the breakages that come from having the base OS fully built with Cross-DSO CFI.
A coworker needed a tool to download all of an organization’s repos on GitHub, so I started on a little script to do that. I plan to put the finishing touches on it, enabling support for both public and private repos: https://git.hardenedbsd.org/shawn.webb/random-code/-/blob/main/github/org_repo_clone/org_repo_clone.zsh
GIving Go a shot and writing some web scrapers.
I’ve been using Github’s copilot for a while now and it always felt like a coin flip whether it’ll add some value to my time or just unnecessarily confuse me. Though, learning new languages is where it trully shines! I got a few Go for Pythonistas articles and onboarding on Go has been breeze so far. I do miss syntax sugar like list comprehensions and default function parameters though.
I’m writing a small interpreter to explore writing a REPL with all the ‘send this function to the interpreter’ fun that you get in lisps. Languages are much more fun once you have an AST to play with, so I’m trying to get the parser over with quickly.
I have two user port-to-USB-serial boards for my C128 and SX-64 for a project. :)