Engineering is supposed to be fun! I might feel like this version of Mr Byrne at times but challenging myself always proves to make me happy. Today I want to do a little dive into a few things I did this week.

I've been having a lot of fun putting silliness in my projects and working on ambitious projects. The big one these days is probably Regulus, the Gleam to WASM compiler I've been writing.

Tables, Dependencies, & JS

Here are three big things I worked on with some context.

  1. 1.

    WebAssembly stores callable function references in a table. An element segment initializes that table with the functions the module needs, lets compiled code pass functions around as values, call them indirectly, and support closures/higher-order functions more cleanly.

  2. 2.

    Lowering is the compiler step that turns typed source-level code into a lower-level IR. Making owner-aware typed interfaces means each known function/type is tracked with where it came from: the current module, another module, or a dependency package. This prevents name confusion when different modules or packages expose similar names.

  3. 3.

    I started working heavily on the JavaScript ABI (Application Binary Interface). An ABI is the low-level contract for how compiled code talks to its host or other compiled code: function names, parameter/return shapes, memory layout, pointers, strings, handles, and value encoding. The JS host ABI is the growing contract between generated WASM and JavaScript.

If you're interested, the companion book I'm writing should go into more detail about the concepts. The docs do an okay job with this as well.

man resume

I made a website for my resume with what feels like my "signature" static site setup:

Updating my resume always feels a little tedious, but making it into a website has made it easier to address feedback. My dad likes that it's not dark mode by default. In keeping with the silliness throughout this week, I'd added a man page/plaintext version of my resume.

OWAIS_JAMIL(7)

NAME
       Owais Jamil - Software Engineer

SYNOPSIS
       owais_jamil [--experience] [--skills] [--projects] [--education]

CONTACT
       Email: [redacted]
       Phone: [redacted]
       Web: https://desertthunder.dev

       GitHub: https://github.com/desertthunder
       LinkedIn: [redacted]
       Sifa: https://sifa.id/p/desertthunder.dev

DESCRIPTION
       Senior Software Engineer

The link is buried in the footer of the site but it brings me a little joy. I haven't connected with anyone through sifa yet, but I do like that the control over everything let's me add a link to it.

A storm comes in

Yesterday I deployed my elixir/phoenix PDS, Tempest. Under the hood I think it's a faithful implementation of the PDS spec. Most PDSes have this on their home page:

         __                         __
        /\ \__                     /\ \__
    __  \ \ ,_\  _____   _ __   ___\ \ ,_\   ___
  /'__'\ \ \ \/ /\ '__'\/\''__\/ __'\ \ \/  / __'\
 /\ \L\.\_\ \ \_\ \ \L\ \ \ \//\ \L\ \ \ \_/\ \L\ \
 \ \__/.\_\\ \__\\ \ ,__/\ \_\\ \____/\ \__\ \____/
  \/__/\/_/ \/__/ \ \ \/  \/_/ \/___/  \/__/\/___/
                   \ \_\
                    \/_/

This is an AT Protocol Personal yadda yadda yadda

I thought it would be cool to make it look like Windows 95 (with some flair via Firefox emojis).

I still have some work to do as far as emails & password reset, namely configuring SMTP and picking a provider. Not sure what I want to use yet.

Currently it lives on a single container in Railway on the hobby plan. I'll see how much mileage I get of that before considering self-hosting.

Retro ATProto UI

I can't remember where I saw it/who said it, but the concept of "Claude-slop" UI stuck with me and I've been trying to experiment with different ideas. The other weird thing I did was making yet another ATproto explorer that looks just like the first ever Ubuntu version I played with, Intrepid Ibex.

This was so much fun to do. I'm thinking about making a UI library that uses these components (it's all vanilla CSS) and exposes the drag and drop primitives. If you want something like this, please let me know!

Getting Zig-gy with Markdown

Recently I wrote a write-up on the challenges of building a parser for Markdown because of its precedence rules and delimiters. That continued into recent work I did, which revolved around full GFM compliance. This meant adding a test runner and refactoring the delimiter parser to handle gfm's edge cases. I think the project is turning out to be pretty cool and in my opinion, one of the more absurd ways I've chosen to learn a new programming language.

markdownz
A commonmark compliant markdown parser and event api
https://codeberg.org/desertthunder/markdownz

What's next?

In the short-term, I'm thinking about writing a deep-dive in to ATProto-Flutter dev after I release the next versions of Lazurite and push the alpha of Marker. Before I release Lazurite I have to integrate the new group chat lexicon.


Thanks for reading!