Wow, I think this is the first one of these “what are you doing” threads I’ve posted in since I joined.
Well, I should probably be looking for a job, but I’m terribly work averse. I’ll probably be working on my new pet project: The Blind and Low-Vision Unix Users Group. And do I ever have a lot of work to do.
I’ve been getting back into Linux over the last few years and as a partially blind person I’ve gotta say it’s been a bit of a struggle.
The biggest issue plaguing me recently has been This bug in Ubuntu and derivatives which showed up in 19.10 and has been there ever since. Apparently it doesn’t happen on laptops, but on very large screens like mine (I have a 34” monitor) if you turn on the Zoom feature, your mouse pointer leaves little square droppings as it travels across the screen. Pretty hard to work that way.
Just signed up to the mailing list. Looking forward to getting involved. Thanks for putting this together!
Finishing (fingers crossed) my patch series to U-Boot to convert the QEMU firmware config driver to the new device model, adding Arm support along the way.
Keep looking for jobs, got a few interviews lined up this week. Due to the scarcity of job offers in my core field (GIS, remote sensing, geospatial data), I apply for a lot of adjacent data-oriented position where I feel almost dumb reading some job offers. Some of then could have been generated by a hype tech/stat dictionary putting random words together.
Go deeper in my understanding of Spark and Scala.
Try to finish to set-up a zola site and finish some drafts to begin to publish a bit.
You probably already know this but the list of required qualifications in job descriptions are not hard constraints. While HR filtering can be very inflexible and a hurdle to overcome, but the people who are actually looking to hire you are mostly flexible.
Yes, I know. It is mostly mental fatigue at this point tbh. When after screening so much job offers looking like shopping lists, your mind will slip and ask itself “What if”.
The cover letter is not written with any expectation of readership or audience. It is written with hope and desperation in equal measures. One writes under conditions of duress, anxiety, optimism, nausea, arrogance, and deep insecurity. And in these respects, the address to no one—writing for an imagined and idealized audience—might be the only redeeming quality of the whole endeavor.
Some job offers seems to also be written without any expectation of readership or audience. A job offer has a one-to-many relationship with the expected audience and would gain to be design as an API with clear point of entrance and valid alternatives coupled with a story-telling for what can’t be conveyed by technical entry points. Like all subjects you may be actively exposed to, you just develop a strong opinion out of thin air, biases and a few data points :).
I was thinking going back and try to compile job offers where, what I consider good practices, are used at some point.
Puppy-sitting for my daughter. So far, Daniel vs. Puppy seems to be working out well
Making another go at FParsec. For whatever reason, although I understand the idea of parsing combinators, I can’t seem to get the dang things working in an AST. This is probably just a matter of applying butt-to-seat for the appropriate amount of time along with focus.
Perhaps setting up some more online chats. I really like reaching out and recording online chats with other tech folks, whether or not it ends up being something others can use or not. I have a couple of opportunities I need to chase down.
I’m writing a blogpost on how I got VRChat to work as a virtual camera for meetings at work using an incomprehensively large chain of bullshit that is needed to get an Oculus Quest 2 to act as a locally attached VR headset. This Twitter thread explains a lot of the parts that are at play. I forgot to include Virtual audio cable and the Oculus ADB drivers. There’s so much lol. It just barely works and I think that’s the best part.
I’ve been scheduling an hour at the end of my day for personal development. Since it’s often work related my manager/coworkers are happy that I do it, I recommend doing the same to others.
I mostly plan to continue work on libquassel, which is quite interesting, as I’m not only splitting it out from Quasseldroid, and rewriting it partially, I’m also moving from kapt to ksp for code generation, cleaning that part up properly using the good old visitor pattern, moving from rxjava to kotlin coroutines+flow, and moving from android xml UI to jetpack compose.
Lots of changes, and all at once, but luckily I started by porting the tests over, and now I’m adding many more tests, as the goal is to build a very reliable base for the new version (before integrating it into the new Quasseldroid version).
Plus adding more automated CI, further improving backups, and renaming all primary git branches from master to main.
Gonna be working on an x86 16-bit real-mode operating system. I’ve tried 32-bit operating system development before, but I’ve always had problems entering C from my bootloader, so this will be all assembly + BIOS routines.
I’ll look around! I TA’d an “Advanced Operating Systems” course a long time ago and I probably still have my bootloader + “jump to 32-bit protected mode main()” code kicking around somewhere.
I’m laughing a little, with you, about the pain we went through. War story time:
This course had been offered a number of times in the past, but most years didn’t end up making a whole lot of progress. They’d either bite off way too much (we’re going to do a microkernel!) or get hung up somewhere early on (we can’t get it to run in 32-bit mode!). The year I took it in undergrad, we had pretty much the all-star team of systems folks in the course, half of us were EE/CS dual majors, and we all agreed that we were going to do the most bare minimum end-to-end functional spike instead of trying to make something beautiful. And… it worked! We got it booting by around mid-February and still had the rest of the term to build on top of that core. Memory manager? Super simple but it worked. File system? Just a RAMFS that got added to the floppy image. Processes? Trivial once we had a memory manager and filesystem!
How did we get it to work, though? Like you, we had a really hard time getting all of the things just right to make 32-bit protected mode work. Ultimately our hack was to add printf statements inside qemu that dumped the state of the CPU after every instruction so that we could walk through and manually verify the state of each register after each step..
Sounds like a great group project, would love to know someone IRL who actually cared about this kind of stuff…
I agree, there are so many finnicky things about the x86 platform that exist purely for backwards-compatibility reasons. Makes RISC-V quite alluring indeed.
That printf thing is a nice idea for debugging. How did you do that, exactly?
I couldn’t even begin to remember where exactly we shimmed the printfs in, but it would have been somewhere around https://github.com/qemu/qemu/blob/6b63d126121a9535784003924fcb67f574a6afc0/target/i386/cpu.c We basically treated it like a debugging exercise on the emulator itself: the emulator isn’t happy, so lets find the code inside the emulator that’s not happy and add some logging :D
Edit: the Makefile from my project might have some helpful bits for you too. I can’t say, 13 years later, I write Makefiles that nice very often :). Might have to go back through there and get a refresher myself!
I’m on vacation for the next two weeks, which is lucky. I am very tired.
I’ve been dropping the ball on talking to friends & family, on getting exercise, and on doing anything that isn’t staring at my growing to-do list, so I’m going to take the next while to build back up the energy and happiness that I feel like has been draining away. I cleaned my apartment this morning, which felt like a good start :)
$PERSONAL: Caddy made me realize it’s super nice to be able to modify configuration remotely without files and deploys and other annoying stuff. Will finish my own “Caddy” for DNS, a little DNS server written in Common Lisp, where I can inspect and change configuration from inside emacs. After this will probably do the same for a server (Caddy is nice, but I don’t like the JSON interface to it)
Recently I had to deal with a lot of small PKIs (like 1 root, 2-3 inter, ~10 leafs). At first I automated it with bash scripts, but it was starting to be painful because each one started to be a bit different (like different SANs).
So instead of continuing this path, I’ve written a small (~250loc) python script that takes a yaml configuration[1] of the PKI and outputs the PKI. It handles a few things like:
Outputs to PKCS12 or PEM
Certificate bundles (chain and fullchain) + PKCS12 truststores for the JVM
Multi-root support (a tree is built to represent the PKI starting at each root defined by no issuer)
Re-use of what’s already present, it’ll load keys, certificates etc.. compare them with what has already been generated and will generate new certs if the configuration doesn’t match.
I’d like to add features like:
Cloud backend support like Azure Key Vault for storing cryptographic material and passwords.
Support of PKCS11 to be used with security keys (just to learn about them).
Teaching myself how to implement depth/breadth first searches in Python because I’m still struggling with the island counting algorithms exercise I mentioned last week. Right around rewrite #3 I realized I needed to take a giant step back and figure out what was going wrong.
This is IMO a strong argument for why semi-formal algorithms training is important. I’d love to find more resources on algorithms that aren’t Comer. I owned the 1st edition of his book but found it to be incredibly hard to penetrate.
I see Algorithms by Sedgewick & Wayne is part of my Safari subscription. Maybe I’ll put some time into trying to get through that.
Introduction to Algorithms requires Mathematics for Computer Science as a pre-requisite, which requires Calculus, which I do not have.
My former co-workers are telling me I could probably get by the Math for CS course and not conquer the Calculus dragon and be fairly well prepared for the course.
I do believe that most of 6.042 (Math for CS) and 6.006 (Intro to Algorithms) do not require calculus. I don’t recall 6.046 (Design and Analysis of Algorithms) being particularly calculus-laden either, but my memory is fuzzy and unwilling to clarify.
If at some point you do wish to slay the calculus dragon, and enjoy watching YouTube videos, there’s a wonderful set of videos by 3blue1brown that gives a very nice introduction to it. Of course, to actually learn it (or anything), the best way is always to do exercises or tasks that require calculus.
If you have any questions, feel free to ask (through a lobste.rs message, IRC, email, etc), and I can attempt to answer. No guarantee I’ll give good answers, it’s been a little while and I’m not as adept with mathematics as I’d like to be. However, I find it’s easier for me to learn from talking to other people, than it is for me to learn from staring at a lecture or lecture notes, so I figured I’d extend the offer anyway.
That is awesome, thank you very much! I think the intro is probably about all I can handle right now :)
I actually dream about retiring and taking some of the free open to the public summer session “for fun” courses MIT offers. I worked there for a few years and the community is downright magical - I don’t care what anyone says about institutional rot and fund raising foibles :)
Trying to deal with a mighty mess of emails spread across multiple inboxes and multiple domains, accrued over years of undiagnosed executive dysfunction.
Feels like my best hope is to mass-delete as many mailing list and promotional emails as I can, cherry-pick the most relevant messages from the last 6-18 months, and declare “bankruptcy” on the rest.
Any advice for tactics, strategies, and tools are appreciated. I plan to get back into the Getting Things Done (GTD) workflow, for example, as part of the process.
Took a couple of days off to help my younger sister revise for her CS and Physics learning for university. She’s experiencing university online this year and it’s not ideal.
Other than that, I’m playing around with some serverless tech (learning lambda/dynamodb), and my usual fooling around with bootloaders. Outside of tech, I’m reading some graphic novels and learning to make cocktails.
First online workshop session went good enough. Have to improve over the rest of the week (since it was recorded, I’m finding all sorts of faults with my presentation)
Hope to finish my blog post and pending todo items for ebook update that I started last week
Continuing to reverse engineer the RPAK format using r2cutter and working on my FAT32 dissection tool.
Going to revise the draft of my article “Is privacy in all our interests?” - should be posted today or tomorrow. Get ready for some controversial thoughts :)
Wow, I think this is the first one of these “what are you doing” threads I’ve posted in since I joined.
Well, I should probably be looking for a job, but I’m terribly work averse. I’ll probably be working on my new pet project: The Blind and Low-Vision Unix Users Group. And do I ever have a lot of work to do.
Wow what an exciting find!
I’ve been getting back into Linux over the last few years and as a partially blind person I’ve gotta say it’s been a bit of a struggle.
The biggest issue plaguing me recently has been This bug in Ubuntu and derivatives which showed up in 19.10 and has been there ever since. Apparently it doesn’t happen on laptops, but on very large screens like mine (I have a 34” monitor) if you turn on the Zoom feature, your mouse pointer leaves little square droppings as it travels across the screen. Pretty hard to work that way.
Just signed up to the mailing list. Looking forward to getting involved. Thanks for putting this together!
Finishing (fingers crossed) my patch series to U-Boot to convert the QEMU firmware config driver to the new device model, adding Arm support along the way.
You probably already know this but the list of required qualifications in job descriptions are not hard constraints. While HR filtering can be very inflexible and a hurdle to overcome, but the people who are actually looking to hire you are mostly flexible.
Yes, I know. It is mostly mental fatigue at this point tbh. When after screening so much job offers looking like shopping lists, your mind will slip and ask itself “What if”.
Reading the article The art of the cover letter :
Some job offers seems to also be written without any expectation of readership or audience. A job offer has a one-to-many relationship with the expected audience and would gain to be design as an API with clear point of entrance and valid alternatives coupled with a story-telling for what can’t be conveyed by technical entry points. Like all subjects you may be actively exposed to, you just develop a strong opinion out of thin air, biases and a few data points :).
I was thinking going back and try to compile job offers where, what I consider good practices, are used at some point.
Aside from the usual stuff,
Puppy-sitting for my daughter. So far, Daniel vs. Puppy seems to be working out well
Making another go at FParsec. For whatever reason, although I understand the idea of parsing combinators, I can’t seem to get the dang things working in an AST. This is probably just a matter of applying butt-to-seat for the appropriate amount of time along with focus.
Perhaps setting up some more online chats. I really like reaching out and recording online chats with other tech folks, whether or not it ends up being something others can use or not. I have a couple of opportunities I need to chase down.
Resisting the urge to rewrite my blog with Next.js
Trying to find a good way to use my computers without my hands (occupied by baby) e.g. scrolling, focusing, writing
(Maybe) creating a Hacker News comment graph (with comments linking to other comments counted as links) as a Roam Research(-esque) database
Do it. It’s worth experimenting with stuff. I’ve rewritten my blog site 4 times and I’ve learned so much each time.
A foot pedal actually sounds perfect for such a scenario, maybe combined with eye tracking!
I rewrote my website in Next.js and it was worth it
Perhaps you are already aware of this, but did you look into baby slings? They can be very comforting for your child and they free your hands.
I’m writing a blogpost on how I got VRChat to work as a virtual camera for meetings at work using an incomprehensively large chain of bullshit that is needed to get an Oculus Quest 2 to act as a locally attached VR headset. This Twitter thread explains a lot of the parts that are at play. I forgot to include Virtual audio cable and the Oculus ADB drivers. There’s so much lol. It just barely works and I think that’s the best part.
I want to do and read so much stuff, but eventually will do too few since I need to work for work.
I’ve been scheduling an hour at the end of my day for personal development. Since it’s often work related my manager/coworkers are happy that I do it, I recommend doing the same to others.
I mostly plan to continue work on libquassel, which is quite interesting, as I’m not only splitting it out from Quasseldroid, and rewriting it partially, I’m also moving from kapt to ksp for code generation, cleaning that part up properly using the good old visitor pattern, moving from rxjava to kotlin coroutines+flow, and moving from android xml UI to jetpack compose.
Lots of changes, and all at once, but luckily I started by porting the tests over, and now I’m adding many more tests, as the goal is to build a very reliable base for the new version (before integrating it into the new Quasseldroid version).
Plus adding more automated CI, further improving backups, and renaming all primary git branches from master to main.
Gonna be working on an x86 16-bit real-mode operating system. I’ve tried 32-bit operating system development before, but I’ve always had problems entering C from my bootloader, so this will be all assembly + BIOS routines.
I’ll look around! I TA’d an “Advanced Operating Systems” course a long time ago and I probably still have my bootloader + “jump to 32-bit protected mode main()” code kicking around somewhere.
Did you find anything? Would be nice to see how you actually do it. Random internet tutorials have loads of mistakes, usually.
I did! Just pulling everything down off my old university drive right now and I’ll get it bundled up for you with some pointers.
Funny thing, actually got it working myself around an hour ago. A reference might still be handy though, thanks for doing this!
Nice!!! To start with: https://github.com/tonyarkles/cmpt432-build-kit
I’m laughing a little, with you, about the pain we went through. War story time:
This course had been offered a number of times in the past, but most years didn’t end up making a whole lot of progress. They’d either bite off way too much (we’re going to do a microkernel!) or get hung up somewhere early on (we can’t get it to run in 32-bit mode!). The year I took it in undergrad, we had pretty much the all-star team of systems folks in the course, half of us were EE/CS dual majors, and we all agreed that we were going to do the most bare minimum end-to-end functional spike instead of trying to make something beautiful. And… it worked! We got it booting by around mid-February and still had the rest of the term to build on top of that core. Memory manager? Super simple but it worked. File system? Just a RAMFS that got added to the floppy image. Processes? Trivial once we had a memory manager and filesystem!
How did we get it to work, though? Like you, we had a really hard time getting all of the things just right to make 32-bit protected mode work. Ultimately our hack was to add printf statements inside qemu that dumped the state of the CPU after every instruction so that we could walk through and manually verify the state of each register after each step..
Sounds like a great group project, would love to know someone IRL who actually cared about this kind of stuff…
I agree, there are so many finnicky things about the x86 platform that exist purely for backwards-compatibility reasons. Makes RISC-V quite alluring indeed.
That printf thing is a nice idea for debugging. How did you do that, exactly?
I also put my project on github, here: https://github.com/opFez/os
My problem right now is that my Makefile is a mess and the kernel can’t print things properly (see the BUGS file in the project).
Thanks for the story and the link though, I appreciate it!
I couldn’t even begin to remember where exactly we shimmed the printfs in, but it would have been somewhere around https://github.com/qemu/qemu/blob/6b63d126121a9535784003924fcb67f574a6afc0/target/i386/cpu.c We basically treated it like a debugging exercise on the emulator itself: the emulator isn’t happy, so lets find the code inside the emulator that’s not happy and add some logging :D
Edit: the Makefile from my project might have some helpful bits for you too. I can’t say, 13 years later, I write Makefiles that nice very often :). Might have to go back through there and get a refresher myself!
I’m on vacation for the next two weeks, which is lucky. I am very tired.
I’ve been dropping the ball on talking to friends & family, on getting exercise, and on doing anything that isn’t staring at my growing to-do list, so I’m going to take the next while to build back up the energy and happiness that I feel like has been draining away. I cleaned my apartment this morning, which felt like a good start :)
$WORK: Big project, lots of work
$PERSONAL: Caddy made me realize it’s super nice to be able to modify configuration remotely without files and deploys and other annoying stuff. Will finish my own “Caddy” for DNS, a little DNS server written in Common Lisp, where I can inspect and change configuration from inside emacs. After this will probably do the same for a server (Caddy is nice, but I don’t like the JSON interface to it)
Recently I had to deal with a lot of small PKIs (like 1 root, 2-3 inter, ~10 leafs). At first I automated it with bash scripts, but it was starting to be painful because each one started to be a bit different (like different SANs).
So instead of continuing this path, I’ve written a small (~250loc) python script that takes a yaml configuration[1] of the PKI and outputs the PKI. It handles a few things like:
I’d like to add features like:
[1] Example of the configuration:
Teaching myself how to implement depth/breadth first searches in Python because I’m still struggling with the island counting algorithms exercise I mentioned last week. Right around rewrite #3 I realized I needed to take a giant step back and figure out what was going wrong.
This is IMO a strong argument for why semi-formal algorithms training is important. I’d love to find more resources on algorithms that aren’t Comer. I owned the 1st edition of his book but found it to be incredibly hard to penetrate.
I see Algorithms by Sedgewick & Wayne is part of my Safari subscription. Maybe I’ll put some time into trying to get through that.
May I suggest MIT OCW as a potential resource?
Introduction to Algorithms requires Mathematics for Computer Science as a pre-requisite, which requires Calculus, which I do not have.
My former co-workers are telling me I could probably get by the Math for CS course and not conquer the Calculus dragon and be fairly well prepared for the course.
Wish me luck :)
I do believe that most of 6.042 (Math for CS) and 6.006 (Intro to Algorithms) do not require calculus. I don’t recall 6.046 (Design and Analysis of Algorithms) being particularly calculus-laden either, but my memory is fuzzy and unwilling to clarify.
If at some point you do wish to slay the calculus dragon, and enjoy watching YouTube videos, there’s a wonderful set of videos by 3blue1brown that gives a very nice introduction to it. Of course, to actually learn it (or anything), the best way is always to do exercises or tasks that require calculus.
If you have any questions, feel free to ask (through a lobste.rs message, IRC, email, etc), and I can attempt to answer. No guarantee I’ll give good answers, it’s been a little while and I’m not as adept with mathematics as I’d like to be. However, I find it’s easier for me to learn from talking to other people, than it is for me to learn from staring at a lecture or lecture notes, so I figured I’d extend the offer anyway.
Good luck! :)
That is awesome, thank you very much! I think the intro is probably about all I can handle right now :)
I actually dream about retiring and taking some of the free open to the public summer session “for fun” courses MIT offers. I worked there for a few years and the community is downright magical - I don’t care what anyone says about institutional rot and fund raising foibles :)
Trying to deal with a mighty mess of emails spread across multiple inboxes and multiple domains, accrued over years of undiagnosed executive dysfunction.
Feels like my best hope is to mass-delete as many mailing list and promotional emails as I can, cherry-pick the most relevant messages from the last 6-18 months, and declare “bankruptcy” on the rest.
Any advice for tactics, strategies, and tools are appreciated. I plan to get back into the Getting Things Done (GTD) workflow, for example, as part of the process.
Took a couple of days off to help my younger sister revise for her CS and Physics learning for university. She’s experiencing university online this year and it’s not ideal.
Other than that, I’m playing around with some serverless tech (learning lambda/dynamodb), and my usual fooling around with bootloaders. Outside of tech, I’m reading some graphic novels and learning to make cocktails.
Building a brand new RESTful API for internal organization use. That’s about it.
I’m working on our team’s paper. I’m excited to be doing technical writing!
Continuing to reverse engineer the RPAK format using r2cutter and working on my FAT32 dissection tool.
Going to revise the draft of my article “Is privacy in all our interests?” - should be posted today or tomorrow. Get ready for some controversial thoughts :)
Doing what feels like janitorial work on a code base. At least it’s nice to be “in the rear with the gear”, as it were.