What are you doing this week? Feel free to share!
Keep in mind it’s OK to do nothing at all, too.
I just accepted a new job offer! I will be putting in my 2 weeks tomorrow morning.
36% pay raise, more stable company, and bonus: my first day at the new job will be spent in HAWAII for a well-timed company meetup! I’m pretty stoked about it all.
Sad to leave behind Python (my sweet prince) for Typescript, but excited to expand my horizons again!
I got the first blog post mentioned in https://lobste.rs/s/8jndcr/what_are_you_doing_this_weekend#c_cspwsi drafted, and started on the second. Not sure when I’ll post the first, but probably after I finish drafting the second?
Not exactly an inspired pace–but it’s progress :)
Wrangling Nix to move some under-maintained software forwards.
I got promoted to Principal Engineer! Will be doing some hiring, planning, deploying our new infrastructure and writing up documentation, best practices, and design decisions.
On vacation, not thinking much about $JOB or really tech in general. TBH, I’m enjoying having headspace freed up and hope the time is restful.
I finished reading the Pathless Path which discusses the authors approach to a “non-default approach to work”, and I have a lot to think about. Would be nice to have a clearer vision about where to head in my career and what I want, but it is wiser not to pin expectations on times of rest.
trying to get nix going at current $JOB. Going to try to introduce it to speed up dev between various services that run various databases. I’ve been learning more and more about dockerTools and baking my own images with nix and it’s been both insightful and fun. I hope I can spread the joy of nix since at a previous job it didn’t get a great reception but I think it was a “pearls before swine” type thing…or more so my lack of imparting information clearly shrug
Working on finishing a PowerPoint slide and get on other work.
I’ve been a little burnt out on work but I already have vacations planned in may and august and I don’t have enough vacation days to take a break right now, so I’m just trying to push through it. I’m around the end of some projects that I’ve been working on for the last few months and I just can’t find the energy to make the final push. I’ve just been churning out the same kind of web dashboards for a while now and I’d really like to focus on something else, I’ve talked to some coworkers and managers about it so I’m hoping something will come out of it soon.
Thankfully next week we have a national holiday on thursday and I’m taking friday off to go to a friend’s wedding so at least I have something to look forward to :)
At home I’m slowly trying to pick back up xobl and I’m trying to generate enough code to display a window, which means connecting to X11 and generating code to encode/decode the handshake and a couple requests and events, and then fixing the inevitable bugs… but I’m almost done with it, I just need to handle a couple cases in the request encoding bit so it feels like a reachable objective.
I’ve also been enjoying the steam deck, I’ve been longing for some device to play visual novels/adventure games away from the desk for a while and the deck is pretty much my dream device for those kinds of games! I’m playing Ace Attorney and Muv-Luv and greatly enjoying both.
Play a bit with libjit if i can find the free time in the midst of other non programming hobbies.
I have figured out part of what makes Stardew Valley so addictive! It saves your game automatically at the start of each day, and afaict you can’t save during the day. This is a fairly reasonable technical decision that makes saving games a lot simpler, but… the start of the day is also when you get all your routine chores done. Water your crops, pet your chickens, etc. This is part of the comfortable flow of the game, and also has payoff ‘cause it’s the stuff that makes you money. So you automatically do all that stuff, get the serotonin hit, then you go “well I might as well finish out the rest of this day then”. Just one more turn!
So now that I recognize that, maybe I can get some actual work done this week.
Want to do more langdev stuff! I am stepping back a little from theoretical junk and trying to wrap my head around practical things instead, actually writing code in my language even if it can’t compile yet. I think that I really do want to go with a generic mechanism more like OCaml modules than Haskell typeclasses/Rust traits, because then A) you get functors, B) you can express them simply as compile-time structs and functions where type is a valid type (kinda like Zig comptime, might be time to seriously look at Zig), and C) I feel like you have to be a bit more explicit about them in general, which mayyyyyyyy simplify a bit of the metaprogramming magic that you can get so absorbed by in Rust/Haskell.
And afaik C) the implementation-to-interface relationship becomes many-to-many rather than one-to-many. Or at least avoids the ad hoc complications in Haskell of instantiating two separate implementations of the same typeclasses.
(I’m not sure if Haskell calls the implementation behind a typeclass an “implementation” exactly, I’ve mostly only read about this stuff from SML land).
Does the underlying language have higher order functions? Trying to reason over why type becomes a valid type.
Yeah that seems to be the case. I thiiiiiiink this is the reason Haskell and Rust can use typeclasses/traits for operator overloading and OCaml can’t, which is enough to give me pause on the idea. On the other hand, making instantiation of a new type just be a function (functor) call instead of its own magical operation is potentially nice.
And, of course the underlying language has higher order functions, I’m not a barbarian! :P Higher-kinded types though, Iiiii dunno about that. My thinking is basically that OCaml modules don’t need to be their own separate thing, they’re just normal(ish) structs. Associated types just become values in the struct with type type, maybe potentially with generics attached such as type<T>. Rossberg’s 1ML paper shows this is more or less possible, I believe, but I have yet to figure out whether it is at all useful or convenient. But having “struct”, “code module”, “interface” and “implementation of an interface” all become a single thing called a “struct” is pretty darn appealing.
I have a test case of a simple Hash trait that has helped me think through the basic shape of it, now I need to go deeper.
This very much aligns with the thinking in my language (Sasquach). Code modules are just singleton structs. Anywhere you can pass in a struct, you can pass a module assuming it has the right fields. It should fit in nicely with row polymorphism when I get to it.
Yeah I think associated types “private” to the module are hidden with existential quantification. I’m not sure about “public” types.
Yeah I meant higher kinded types hehe
Agreed that having module and struct be the same concept is appealing. Afaik an interface is an existential type, and the implementation is a pack/unpack existential package. Maybe the interface type has a bound name in the context of type names. Or put differently, it has a single DeBruijin index in the context of types.
I haven’t given any thought to operator overloading, so am not sure about that.
Professor Robert Harper has mentioned coalescing abstract datatypes and modules into a single concept. The constructors for modules would hook into the pattern matcher. I believe both can be elaborated to existential packages. Here’s the example I’ve made of manually writing out the abstract data type. I haven’t worked through a module example though.
Landing a few things at work, thinking about how to get to a better place than we currently are in tech/maintenance wise and then how we work towards that in incremental steps.
JOB: Continuing work on the cross-database diff tool - https://github.com/datafold/data-diff
I’m supporting devs with platform/infra/CI engineering, cleaning up a bunch of Github Actions workflows that were smashed together in a hurry to get the project moving, setting up autoscaling rules on a few ECS clusters, standardising a bunch of AWS CDK (Typescript) code and running a retro.