1. 14

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

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


  2. 11

    I decided to take a few months off to study economics, politics, and history. It seems like everyone I speak to is evacuating the political center, and I want to feel like I can open my mouth without being so uninformed. It’s amazing how little getting a degree in economics actually helped me to understand the societal implications of applying the formulas I had learned, although there were glimmers of interesting bits like learning about externalities.

    One of the interesting things I’ve learned about, which was completely absent from my university education, was the Cambridge capital controversy in which leading neoclassical (still a mainstream viewpoint) economists conceded that their microeconomic models could not be extended to model production in a society. This result has largely been completely ignored by US economists, who continue to justify all kinds of exploitative firm behavior through these microeconomic foundations whose creators openly abandoned them.

    This week, I’m trying to better understand the question of “if GPT-3 is racist for essentially reproducing the racist reality it learned from us, can any general purpose software that serves to reproduce the current reality uncritically be anything other than racist as well?”. GPT-3 simply had the ability to say its racist bits out-loud, but in form and function most of our software probably performs similar functions by making the current messed up reality cheaper to reproduce. It’s a thorny issue and will probably further impact my database work over time.

    In engineering, I’m starting a new storage engine for sled which will aim to replace the current disk and memory-wasteful single-log + GC architecture with a more traditional page heap + ARIES log, unlocking much more efficient space usage both on-disk and in-memory. I’m continuing to strongly prioritize low-latency workloads at the expense of high-throughput, because I believe that high-throughput analytical workloads tend to be used disproportionately to further surveillance capitalism. It’s not a perfect model, but I feel good letting someone else build the tools applicable to the platforms that are undermining our democracies worldwide.

    1. 5

      This week, I’m trying to better understand the question of “if GPT-3 is racist for essentially reproducing the racist reality it learned from us, can any general purpose software that serves to reproduce the current reality uncritically be anything other than racist as well?”

      This is an interesting and difficult issue that I feel can be generalized as, “how much do we blame tools or the creators of tools for the uses those tools are put to?” If your tool is a hammer, then the answer is pretty clear cut; a hammer makes no decisions. If your tool is a database, as you say it can become more subjective: we give a database a pile of information and math, and use that to shortcut our own decision making in an automated way. If your tool is a neural network, that gets even weirder because the purpose of your tool is to make decisions. Yet it’s trained on what the real world looks like, ie what decisions people make and have made, which aren’t necessarily the sorts of decisions you want it to make.

      1. 2

        Wow, this is beautifully put. I also think there are definitely some more malicious “uses” of this dilemma. For instance, places that “want” to discriminate [1] can rely on neural networks or what-have-you for the decision making, and try to remain blameless. For instance, this happened with the Apple credit card where men were given much higher credit limits than women.[2]

        [1] I put “wants” in quotes because I don’t believe it is always actively discriminatory, but more to maximize profits. [2] https://www.businessinsider.com/apple-card-sexism-steve-wozniak-2019-11?op=1

        1. 1

          Yeah! To some extent an information tool may crystallize consent for a particular state of the world, reproducing it through automated decisions. After putting in the effort to model some aspects of reality and encode it in a DB, NN, SoA, org chart, logstics network etc… it becomes beneficial to some extent to prevent that modeled state of the world from changing too much. Retooling due to a change in society has a pricetag. Change causes our information capital to depreciate. I’m curious where these lines of thought will lead. I think maybe it will have some impact on how I view free software, or general purpose foundational libraries, etc…

        2. 1

          GPT-3 simply had the ability to say its racist bits out-loud, but in form and function most of our software probably performs similar functions by making the current messed up reality cheaper to reproduce. It’s a thorny issue

          I really don’t think it’s thorny. It’s pretty clear cut.

          If some AI reinforces current racist systems, it just shouldn’t be used. Who cares if it’s the AI’s “fault” or not. Anyone who uses the tool in that way is complicit in reinforcing the racist system. If it can only be used in ways that reinforce racist systems, it should absolutely be abolished entirely.

          1. 2

            One thing I’m uncertain about is where the line is. Imagine you wrote a piece of software that was incredibly simple, but it had the impact of taking the existing world, and multiplying it by 1% every year. It increased all of the good things in the world, but at the same time, it increased all of the bad things in the world. This is kind of how I see GPT-3 and some other applications of ML. It takes some originally-human decisions and allows them to happen more cheaply, without anything that can really “filter out” the racist parts. You can’t solve GPT-3’s racism with a regex, because even though you can prevent it from saying certain racial slurs, you can’t stop it from somehow making decisions that mirror those of structurally racist humans, as long as it is using its training sets from a world where such discrimination occurs. The structural problems are challenging to detect, but result in much of the day-to-day suffering without ever saying a slur. Garbage in -> garbage out. Racism in -> racism out. It recreates the decisions that lead to structural racism in ways that are difficult or impossible to know how to filter in advance.

            From this perspective, any other simple program that made the current world grow more quickly would have this same effect. On the one hand, it is only growing the economy, putting more people into jobs, creating more education, etc… literally everything we have now, but just more of it. But we seem to actually want more of the things we like and less of the things we don’t like, not 10% $GROWTH, regardless of what the economists tell us we should want. Intuitively it’s not that simple.

            The one thing this does make clear is that every model or program or information tool, even the most abstract economic metric, has deep political implications. You can’t say you want growth without consenting to the state of the world as it is. But the thing that is unclear to me is where the racism stops in this chain. We can play regex whack-a-mole to hide the cosmetically offensive aspects of the structurally racist optimization program, but how do we build and use machines that can prevent this structural racism from being reproduced?

        3. 6

          I plan to add support for floating point to my low-level but safe language that maps 1:1 with 32-bit x86. Lately I’ve been playing speculatively with a postfix teaching environment for the Mu computer but I’m starting to keenly feel the absence of a proper division operation.

          The hardest part is already behind me: deciding what subset of x86 to support. x87 is a stack machine so doesn’t fit with the rest of Mu. Instead I’m planning to support the scalar subset of the original SSE instructions. They operate on 32-bit floats, and so are nicely symmetric with the rest of Mu.

          1. 5

            I’m going to hopefully get started on fiddling with some electronics! I got some hall-effect sensors and a Raspberry Pi and I want to see if I can wire them up to detect where pieces are on a chessboard. The end goal is being able to play chess on a real board with a friend in another state.

            I’m also going to be carving out time for some writing. I have a few blog posts in a half-finished state, and a few ideas I want to keep exploring.

            1. 1

              Nice! I’ve been playing chess a lot since March online and being a hardware nerd too that sounds like a fun project. Hall effect sensors wouldn’t have been my first guess for piece detection, but I haven’t worked with them a whole lot. Let us know how it goes!

              1. 2

                It should be fun! I have a friend who’s working on a board, too, so the goal is for us to be able to play at the end of it.

                I’m just about completely new to hardware, so I basically just searched for a sensor that would detect magnets, and then I plan to use pieces with magnets in them. If you were detecting pieces, how would you approach it? Do you see drawbacks to hall effect sensors?

                1. 1

                  I think hall effect sensors have a decent shot of being able to detect a piece on a square - you should definitely give it a go! Have you thought about how you’d differentiate between piece types? I guess if the program knows the board state to start you can ‘diff’ which square was vacated and which is now occupied, and be able to evaluate if that was legal.

                  I think the fancy tournament DGT boards use RFID, almost like high end casino card games. That would be quite the hobby scale project

                  1. 2

                    Ooooh I hadn’t heard of DGT board before! Now that I know about these… I might end up getting one and just doing smaller electronics experiments.

                    I was/am going to differentiate piece types purely based on the moves happening. It’s not perfect, but I think/hope it’ll do the job. We’ll see!

            2. 4

              Actively trying to get better at managing my ADHD. There are projects I know I could do with enough focus and it’s frustrating to not even be able to get started.

              To be clear: I can and do focus, but my job and day to day life use up my focus quota every day.

              1. 1

                That’s awesome. Hope it helps. Good luck!

              2. 3

                Probably going to actually make my TTRPG system book a thing. Right now it’s a lot of gemtext files so I need to convert them to proper markdown for my pandoc workflow. I will have to redo all the tables, yay.

                1. 3

                  Continuing to work on getting old C compilers to work in Compiler Explorer. I have 8 working at this point and I have a few more to try out. I’d really like to get the ones that run on CP/M to work, but I’m not so sure that will happen.

                  I’m hoping that these can find their way to the main site because they are really interesting from a historical perspective.

                  1. 2

                    Working on building out an SDK in my job which is going well and should save us lots of time with other projects. On the personal side, my GraphQL course is being reviewed at Educative so I’m hoping to have that published soon :)

                    1. 1

                      Why did you choose to go with Educative? I’ve been looking at putting a course together and seeing what would be a good distribution channel.

                      1. 1

                        They approached me and offered the option to make a mini-course with them to see if I liked working with them. Then as an author I could go ahead and make bigger courses if I felt it was a good fit.

                        Their pricing structure seemed fair (70% for a full course, subscription royalties for a mini-course), and they’ve been good at checking in and seeing where they can help, so it’s been a positive experience for me.

                        That said, I haven’t written for anyone else so maybe I’m missing out on value elsewhere.

                        1. 1

                          Thank you for your perspective!

                    2. 2

                      Published my Ruby one-liners cookbook today.

                      Other than some minor pending tasks, I look forward to spending rest of the week reading fantasy books and may be watch some anime. I have The Book in the Bottle by Raymond St. Elmo lined up, rest I’ll decide later.

                      1. 2

                        Working, taking care of the family, and, most importantly, reading Dune…..ok, not most important. But, it’s really good so far and I’m squeezing it in wherever I can.

                        1. 2

                          If it’s your first time reading Dune, I envy you. It’s a great experience.

                          I recently re-read Dune and Heretics of Dune - I wrote a short review here: http://gerikson.com/blog/books/read/Dune-and-Heretics.html

                        2. 2

                          I am writing documentation for my open source project named TeXMe, a lightweight JavaScript utility to create self-rendering Markdown + LaTeX documents. It can be used to turn a Markdown + LaTeX document into a self-rendering HTML file, that is, no conversion or additional tools required by the author or the viewer.

                          I released a new feature over the weekend to resolve a parsing issue. Although I wrote the documentation for it (see the previous link) in the weekend itself, I now think I can do a better job at explaining this feature along with the various corner cases in which this feature can be useful, so I am rewriting some sections of the document again.

                          I often find that writing good documentation takes more time than writing the code. An extreme example of this I have is another project of mine named MinTOTP which has only 20 lines of code but 700 lines of documentation!

                          1. 2

                            TL;DR - Failed at buying Autodesk Fusion 360 to get access to Eagle CAD. Learning KiCAD instead.

                            I attempted to buy Eagle CAD last weekend, but Autodesk bought it years back and put it behind a subscription wall. I had to buy an Autodesk Fusion 360 subscription instead. This was an exercise in failure. Despite it being 2020, and despite me paying by paypal, the licence just kept showing up as pending. Noone was available to talk to (as it was the weekend) despite having support advertised as being online chat (disabled), email (no email contact) and phone (no details provided) and a forum that with the best will in the world has no power to do anything.

                            The CSA I’ve been dealing with is doing the best they can, by which I mean they’re trying but the environment is so dysfunctional it’s unbelievable. They wanted to offer me a 5 day free licence while I waited but then found out after offering it that they couldn’t generate the licence. They then told me that it was because I paid via a paypal account with a different email address to the autocad user account, but when questioned said they didn’t know and hadn’t checked. I told them I wanted a refund and they said the order would have to be processed to completion before they could refund me.

                            I am simply amazed that in this day and age buying software can be so difficult. I’m now at the point where this week I’m going to sit down and learn KiCAD properly while I wait for my refund, or if it doesn’t arrive by Wednesday afternoon raise a dispute with Paypal.

                            1. 1

                              Nothing. weather is #censored#, internet is broken (construction workers ripped the glassfiber cable), LTE network is overloaded and down to 500 cps, heating is working, so:

                              eat&sleep, eat&sleep, eat&sleep…

                              1. 1

                                I’m slogging away in the trenches of application support.
                                I have 3 pressing issues to work on:

                                • Resolve or find a workaround to a recurring issue with an application you have heard of.
                                  This is my top priority; some of the users have equity.
                                • Resolve another issue with another application.
                                • Write a script to install an update for a poorly written Excel add-in.
                                  We have a platinum-level support contract with the vendor - support is rare, expensive, and difficult to obtain.
                                1. 1

                                  Right now, I’m trying to find (or create) some sort of RPC framework that allows for bidirectional streaming (and simple request-response) that works over HTTP (1 or 2) or Websockets.

                                  I’ve been using gRPC because it allows generation of clients, but protobufs have been driving me a bit crazy (it’s impossible to represent a map[string][]string in protobufs without an additional type and the data can still be nil because proto 3 removed required fields). There’s Thrift but as far as I know, the transport for that can’t be http. Similarly, there’s Twirp, but that doesn’t support streaming.

                                  Then we move on to codegen like Swagger, JSON Schema-Hyper, and AsyncAPI, but those all have issues as well. Swagger and JSONSchema-Hyper don’t support streaming, and AsyncAPI doesn’t allow you to define POST bodies.

                                  That ended up being a bit more ranty than I intended, but that’s where I am at the moment. I just wanted to add map[string][]string to my API cleanly, sending me down this crazy rabbit hole.

                                  1. 1

                                    Last weeks I spent time on creating a library to manage HTTP core types in Zig, which is pretty much a port of Rust’s http crate.

                                    With that done, and my HTT/1.1 parser too, I can give a new shot at implementing the HTTP/1.1 spec (RFC 7230) as a state machine, following the work of python h11.

                                    Hope to have a proper HTTP client at some point :)

                                    1. 1

                                      I’m playing with and learning Go by building a very simplistic background task management system using Redis lists and PubSub. I was looking at RabbitMQ, but didn’t want to learn AMQP right now. I wish antirez had continued work on disque.

                                      I’m using goroutines and channels to manage the system from the same process, but eventually I want to decouple the ‘worker’, ‘tasker’ and ‘notifier’ routines into their own processes. I’m looking at Hashicorp’s Nomad as a way to orchestrate all processes from a single binary entry point (as an alternative to containerization). My goal is to have a simplistic production deployment workflow while maintaining a scalable task management system.

                                      1. 1

                                        Things I have already done:

                                        • Set up this little beauty to run ProxMox. It’s an urban cave dweller’s self hosting dream :) Add networked storage and you’ve got a TON of potential.
                                        • Installed Rancher into a VM to handle container orchestration

                                        Things I plan to do:

                                        • Install Gitea or some similarly lightweight git server into a VM run on the above but stored on my NAS. I’ll take the perf hit for endless instant backups :)
                                        • Install Pihole in a VM.
                                        • Look at what’s involved to get joplin-web or some other Joplin web UI up and running. I want to be able to view my personal notes from behind my cloudy overlord’s firewall without having to resort to a mobile device.
                                        • Research the possibility of building a full screen magnifier package Magnus perhaps? I’m having endless problems with Manjaro on my Pinebook Pro and mrfixit2001’s Debian release is a 32 bit userland but runs FAST and boots nearly instantly.
                                        1. 1

                                          Rancher / Kubernetes and Gitea went in like a dream. I am seriously, seriously impressed at the degree to which 100% open source software in the infrastructure space has matured over the last few years. Wow.

                                          Just, wow.

                                          I mean, the two of them took me a grand total of a little over an hour to install, and that’s only because:

                                          A) I got confused about all the warnings against putting your control plane, etcd and worker roles all on the same node, but for a toy cluster like this I think it hardly matters.

                                          B) I ran over a slight bug in the latest Gitea’s admin configuration panel, spoke to the devs, and they know which pull request the breakage is contained in. Kinda makes me wish I knew Go so I could jump in and fix it. Kinda :)

                                          Looking forward to playing with auto-scaling and the like just to have the experience of doing it in an environment where I don’t have to worry about any of it costing me anything beyond the minimal initial outlay for hardware.

                                        2. 1

                                          Trying to print some large parts on our new printer following initial tests last week. Set a 39 hour job to print today, should be ready Wednesday morning.

                                          1. 1

                                            Getting ready for my wife’s infusions. I just built the first pass at a kb-style website for budgeting and tracking finances (here). So this week I plan on trying that out for tracking expenses and budgeting.

                                            Other than that, working.