• Wisp

    I’m still looking for a practical Gleam-based web framework to play around with, and it feels like Wisp is the most interesting one so far (made by the Gleam creator).

    Why Gleam, over Elixir? Mostly because I think types make life a lot easier than pattern-matching, but that’s more of a stubborn opinion. I have no doubt that Elixir’s pattern-matching is “good enough” in dynamic-land, but given that most of my brain has been rewritten in TypeScript over the last 6 years, the adjustment to a truly dynamic language sounds a lot more daunting than just picking a statically-typed or incrementally-typed language.

  • Bento, Snap's ML Platform

    I got to listen to a (fanstastic, by the way) talk outlining this platform a couple days ago at a meetup. What struck me about the way Snap described their models is the sheer size of their recommendation systems. Deepseek V3 was trained on about 60 TB of tokens, but Snap’s recommendation system eats about 20 times that.

    Caveat, of course: a recommendation model is very sparse, meaning not all of the model needs to be activated at the same time, whereas most LLMs are still dense. Bigger model doesn’t necessarily mean a harder scaling problem, just a different one.

  • Remeda

    If you’re greenfielding a JavaScript application, I can’t recommend enough starting with Remeda. The main reason here is that unlike lodash, Remeda is composable and functional, but unlike something like Ramda, you aren’t forced to use data last all the time. In the same breath:

    const items = [1, 2, 3];
    
    const doubled = R.map(items, (x) => x * 2);
    const doubleSquared = R.pipe(
      R.map((x) => x * 2),
      R.map((x) => x ** 2),
    );

    It makes functional programming practical in the semi-functional style that works really well in modern TypeScript.

  • obsidian-omnisearch

    Omnisearch is a search engine that “just works”. It always instantly shows you the most relevant results, thanks to its smart weighting algorithm.

    I’ve been taking more notes lately on pen and paper, partially because I got a very nice Memosyne notepad and fountain pen from Japan, but also because it’s easier for me to not feel distracted when I’m not using a keyboard.

    But I also want to be able to index and search my notes. But I also don’t want to move off Obsidian (all of the AI note taking apps have yet to sway me, despite the Tana invitation collecting dust in my inbox). So I’m trying to find stuff that OCRs properly, or can use an LVM to clean it up for me.

    I’ll post back about this if it’s lifechanging, but probably not. Let’s be real, it’ll probably just sit in my configuraiton for a while and be banally useful.

  • Egoless Engineering

    Perfectly reasonable people thought that maybe we should put more of a wall between designers and the css source code. […] But instead a miracle happened. There was an inspired person who decided to do the opposite. They just yolo’d giving the designer the deploy keys. […] We spent our free time building everything we needed to in terms of monitoring, test suites, et cetera to make that safe for them to do. Everyone rejoiced and got shit done. Nothing bad happened.

    When this talk was first shared with me, my mind was blown because everything I had ever heard about building an organization, was that we need people to respect their lanes and learn to communicate with each other. I don’t think that value is wrong (talking cross-functionally is important in almost any organization), but this talk blurred the lines for me between what is good communication, and what is building fiefdoms.

    Make your discipline more accessible This should be part of your job!

    I will say, the challenges here are really, really underemphasized. (Not to say it’s not worth it, of course, but that there’s more to it.) If I don’t have the right tooling needed, making a code change, ensuring it’s safe, and deploying it to production is barely safe for an engineer, now imagine someone without the skills to debug if the flow fails half the time.

    Sometimes the walls come up because people want to perpetuate those little stupid fiefdoms, but sometimes it’s just because it’s the easiest thing to do, everything is on fire, and you don’t have the time.

    (The perfect retort to that, which I believe, is if you set your team and processes up to be accessible from the start, it’s pretty cheap to maintain it, and people will even help you point out failures far sooner. Looked at this way, fiefdoms are organizational debt that can be paid down easily at the start, but not much later.)

  • Gleam, coming from Erlang

    Most of my professional experience has been in Node, but it’s clear to me that despite working fantastically in practice, there’s so many limits to the event loop that make it really hard to write performant code correctly. I’d love an environment that combines the expressiveness of TypeScript/JavaScript with the concurrency of something like BEAM, and I’d love it to be mainstream.

  • A Mostly Sane Guide to Root Cause Analysis

    It finally happened. A Friday afternoon not long before a huge launch, somebody deployed a last minute change that crashed the database, and you were on call. It took a harrowing three hours to roll back the code, find the backups and run the restore, but by sheer force of will you were finally able to get it all back up. But now the real work begins. Customers are mad, leadership is anxious about something like this happening again, and as the on call, all eyes are on you to write a post mortem to explain what happened and how this will never happen again. So today, we're gonna do a root cause analysis, the heart and engine of the post mortem discussion.

    Read more