1. 17

What are you doing this week? Feel free to share!

Keep in mind it’s OK to do nothing at all, too.

  1.  

  2. 19

    Going to write a blog post on my personal tech stack. OpenBSD, relayd, Golang, and YAML. Also known as the ORGY stack.

    1. 20

      If you make a distributed solution on top of that, would it then become a clusterfuck?

      1. 2

        Distributed solution to flat files, has to be NFS right? shudder

      2. 4

        I’m interested in reading it, do you mind sharing the link to your post once you publish it?

        1. 2

          I’ve posted it here

          1. 1

            Thanks!

          2. 2

            Yeah of course, will do

            Edit: I actually finished the example application at least, I’ll publish the code for it too of course but if you’re interested in a semi-early-bird-alpha-preview it’s here

          3. 3

            Please post the link when you’re finished. I’d love to read this implementation.

            1. 1

              I’ve posted it here; sorry I missed tagging you.

              1. 1

                No problem. Thank you very much.

            2. 2

              What are you using Relayd for?

              1. 2

                TLS termination and other proxy stuff

                1. 1

                  other proxy stuff

                  I’m intending to switch (back) to OpenBSD once my current VPS contract expiries, and one of the things I want to figure out is how to implement a reverse-HTTP-proxy using Reladyd. So all requests to foo.example.com are directed to localhost:9090, all requests to bar.example.com are directed to localhost:9091. Didn’t manage to get it working last time I tried, so I hope your posts might give me some hints.

                  1. 2

                    Yep 100% possible with not that much config. This specific post will contain how to do that but I am also planning a “how everything on this website” hangs together post which will be more in-depth on that subject. I’ll ping you once I’ve written it

                    1. 1

                      Great, looking forward to that!

                      1. 2

                        I’ve posted it here

                        1. 1

                          Thank you!

              2. 2

                I always thought that Go on OpenBSD would be solid. Do you use pledge or unveil in your Go application? Or does relayd pretty much take care of that?

                P.S. I’m pretty green with OpenBSD, etc.

                1. 2

                  Go has support for it (unveil, pledge), and there are additional packages that wrap it such as suah.dev/protect that allow transparent use on non-OpenBSD systems

                2. 1

                  I assume if you mess things up, it becomes the GORY stack.

                3. 8

                  Over the weekend I setup my raspberry pi + pos58 receipt printer so that my friends and family can print messages in our living room. The backend is a PostgreSQL queue on Heroku’s free tier with a thin API.

                  I also use it to ping messages to my wife who’s in there most of the day with my son (maternity leave). I have it aliased it in my bash config so I don’t even need to leave my terminal.

                  I’ll be doing more hacking on it this week, building features that definitely aren’t required — like reporting the current operating temperature — and generally having fun with code!

                  1. 2

                    Did you get a printer with automatic cutting?

                    1. 1

                      No, just the cheapest pos58 I could find. However, I’ll probably be getting another printer for my desk and will look into how much automatic cutting and other features are :)

                  2. 7

                    Offboarding from my current job. I accepted a role at Shopify so I’ll be writing reviews, updating career plans, and just generally extricating myself from the endless parade of planning meetings. I have a week off during which I intend to do absolutely nothing other than ride my bike.

                    1. 5

                      Prototyping a spiritual successor to Neuron on top of Ema.

                      1. 5

                        Waiting for the fiber technicians to schedule an appointment to get us gigabit fiber

                        1. 4

                          A few years ago at a FreeBSD DevSummit, I wrote a clang tool that would parse structure definitions and generate things to parse and serialise them with UCL. I wanted something to make it easier to adopt UCL (which is awesome as a configuration file format / library and should be used by more things). I eventually gave up and decided this was the wrong approach.

                          More recently, I was writing a C++ program that wanted to use UCL for configuration and I decided to use the C APIs (the C++ ones are… not great) and wrap them in some adaptor classes, where each adaptor is a value type that just owns a (refcounted) pointer to the UCL object. These support ranges (if I want to iterate over an array, I just use a range adaptor, which iterates over the UCL objects and uses another adaptor specified as a template argument ). Using classes that are written with this is easy, but writing them is a bit cumbersome (lots of copy-and-paste).

                          After writing a few of these, I started thinking about how to validate the config files and realised that libucl could already handle validations using JSON Schema (which can be written with UCL syntax). I then realised that there was going to be a complete duplication of everything between the C++ and the JSON schema and (especially with the UCL syntax) the C++ was a lot more verbose than the schema.

                          So this weekend I started writing something that would take a schema for a config file and generate a friendly C++ interface for that specific config, using the adaptors that I’d started writing previously. It’s using some fun C++20 features so that I can declare a templated type that looks like EnumAdaptor<Key{"one"}, 1, Key{"two"}, 2> or whatever and have a field that returns the type of the enum and whose body is just a return statement with that adaptor created from the correct child of the UCL object. I plan on working on it a bit more during the week. I want to get it to the state where it can generate the C++ code for the schema itself.

                          1. 3

                            Stack traces when the Mu computer crashes.

                            Play involving the Mandelbrot set.

                            1. 3

                              Refreshing my ML skills by building some Magic The Gathering models. Most MTG AIs are wacky GANs producing nonsense unique card effects. But most real MTG cards are simple variations on each other. I think I could make some more useful tools for the CustomMagic community, like a mana cost predictor.

                              1. 3

                                ${HOME}: I made homemade ricotta and it turned out great. That is step one in making homemade syrniki. (I need to point out that I have never made either of these things before….well, I had one abortive attempt at making ricotta that failed miserably.)

                                ${HOBBY}: Hopefully finishing up my custom regex engine.

                                ${WORK}: Creating a completely hands-free installer for our code for deployment in airgapped situations with untrained technicians.

                                1. 2

                                  I would be happy to know how you made your ricotta. I tend to do labneh at home from time to time.

                                  1. 2

                                    I sent you a message. Let me know how it turns out!

                                2. 3

                                  Learning about 1ML. It sounds like a nice elaboration of OCaml’s type and module system that does things I want for the “Rust but smol” programming language I’m working on. In particular, it looks like it unifies reasoning about structs (ie, data structures) and modules (ie, traits, typeclasses, AST interfaces, stuff like that). If your “trait” type is just a struct full of function pointers and associated types, and you can reason about it like both a struct and a type, and whether you get static or dynamic dispatch is just a matter of how you use it, and your program laguage namespaces are pretty much the exact same thing… well, that sounds pretty hot.

                                  Unfortunately it seems like I’m going to have to catch up on 35 years of type theory to understand what the heck all these papers are talking about. I don’t even like type theory. And type theory doesn’t like me; the 1ML implementation will happily evaluate expressions but doesn’t actually print the resulting value by default, it prints the type of the expression. Very pragmatic demonstration of what the writer’s priorities are.

                                  1. 3

                                    Going to write a presentation about infrastructure metrics based on prometheus, loki and grafana to help developers design and monitor their applications using our k8s cluster.

                                    Trying to debug mysterious latency spikes (from 120ms to 250ms) on an http layer. The spikes don’t affect clients. We had issues with DigitalOcean’s VMs last week, three VMs from a small cluster of ~20 VMs were misbehaving driving the latency 8x up on this layer. We’re in the ms ballpark (latency measured from the ingress), I strongly suspect DO’s instances again although there are no visible hiccups this time around.

                                    Tomorrow, I’ll rotate all VMs and see if that brings down latency. If that’s the problem, I’ll have to start being creative, because I CPU steal is fairly common 2+ and this means that nodes will be going up/down consistently. We don’t monitor for bandwidth rate changes and given that our app is heavy on bandwidth usage (webRTC), it’s going to be tricky understanding when an event stopped vs when there’s an actual problem. Interesting challenges though.

                                    I need to write a blog post on DO Managed K8s vs EKS at some point.

                                    1. 3

                                      Taxes. I know I should have started sooner, but alas, this week is tax week. Also, I’m helping my girlfriend file her’s. Yay…..:|

                                      Personal projectwise, probably more OS research. I’m really enjoying the Genode Framework. With that, I want to add mmore support for RISCV. This will be a fun dive into the nitty gritty of Genode, the build system, and RISCV assembly.

                                      1. 2

                                        I always mean to do mine ahead of time, but somehow never manage it. You’d think we’d learn 😬

                                      2. 2

                                        So far:

                                        • reset my iPhone for the first time ever
                                        • testing changes

                                        On my list:

                                        • write code to read and making sense of a bunch of json5 files
                                        • finish the mini greenhouse I started during the weekend
                                        • fixing the rabbit fence so Kevin (our rabbit) can be allowed to go outdoors again
                                        1. 2
                                          • Preparing teaching for next week (currently teaching a course on transformer models @ Uni Tübingen).

                                          • Polishing a nixpkgs PR that extends buildRustPackage so that it can directly use Cargo.lock files to generate fixed-output derivations for all transitive dependencies as an alternative to the current vendoring method which stretches the notion of fixed-output derivations (and breaks regularly).

                                          • Time permitting, participate a bit in NixOS 21.05 Zero Hydra Failures.

                                          • Clean two of my bikes and degrease + oil the chains.

                                          1. 2

                                            Working on a small IBM 5150 demo for the PCjam competition.

                                            1. 2

                                              I’m revising the image format used for the shared memory framebuffer in Advanced Mac Substitute. It’s now called SKIF (Simple Kinetic Image Format). The new version specifies color pixel formats more flexibly.

                                              This involves making programs that create image files use the new format (without merging those changes yet) and updates to programs that view images to work with both formats, with extensive testing to make sure I haven’t broken anything in the process.

                                              1. 2

                                                Finish my blog post on Value Objects in TypeScript.

                                                1. 2

                                                  Reading up more on writing a bot service for Pleroma. I want some fake data and activity for my beta setup to make sure I know how to make it all work and test the admin/moderator features. Then I also need to get a better idea of how I will manage the wild west of the fediverse. I might just keep my instance isolated for the time being. Not sure yet.

                                                  1. 2

                                                    Remotely training a bunch of new (in the company) guys in our line of business software. Most of them are 20+ years older than me. I’m no trainer by occupation, so I’m trying to walk them through how we do things and why with a hands-on… workshop?

                                                    1. 1

                                                      Had an introductory meeting for external leadership training/coaching sponsored by my employer. Will be doing more of that this week.

                                                      Playing plenty of Monster Hunter: Rise. It’s my first real experience with the series and I’m loving it.

                                                      Decluttering: I’ve accrued enough on my desk, for example, that I’ve noticed a subconscious impact on my focus. How cluttered is your workspace?

                                                      1. 1

                                                        It’s HumbleBrag time! I’m keynoting at StepIN Forum and have to write some ML examples to show in my talk.

                                                        I’m also trying to force MailChimp to play nice so I can launch a personal newsletter. I have a Christmas newsletter called The Gentlehacker Advent, and I want to use the same audience to do the dev newsletter, and you’d think MailChimp would let you have a custom signup page that signs people up just for that, and not for both.

                                                        You’d think.

                                                        1. 1

                                                          Performance tuning and figuring out how to scale both MySQL and our infrastructure without doing everything at once. Nice problems to have, but still problems.

                                                          Day off, in which I intend to wash my car and get outside on my bike simply because this weekend is lots of cycling.

                                                          1. 1
                                                            • Continue onboarding at $work.
                                                            • Discovering and playing Exploding Kittens and Azul (card and boardgame respectively)
                                                            • Reading Georges Perec - L’art et la manière d’aborder son chef de service pour lui demander une augmentation (Translated it would be “The art of asking your boss for a raise”). It is not a motivational book, it is an absurd novel. Georges Perec write it without any punctuation at all and the impact on the reading experience is very uneasy. It is a one sentence novel about professional life and the loose of sanity and identity by an employee trying to ask their boss a raise.