Jon Kuperman

  1. Outages and blame culture

  2. Managing Immutable State with Object Spread

  3. Compiled vs. Interpreted Languages

    Code on a computer screen
    Photo by Joshua Aragon

    I've been reading this fantastic book called "Crafting Interpreters" lately by Bob Nystrom.

    It talks about the different types of programming languages. We can think about all compilers as falling into three categories.

    1. Compilers that output machine code.
    2. Compilers that output bytecode and need to be interpreted.
    3. Compilers that output an intermediary format and then hand it off to another compiler.
  4. Numbering a list with CSS!

    Numbers on a race track
    Photo by Austris Augusts on Unsplash

    Yesterday, I converted my site to 11ty. I decided to use their base blog starter and when I did, I noticed this cool UI they have for listing your posts.

  5. Eleventy has me feeling more connected with my website

    Eleventy Logo

    I've been using Gatsby on my site for ages. I enjoy using it. It's pretty easy to get up and running with, it loads quickly, and it comes with some great plugins like this one for optimizing images. It deploys easily and has all the benefits of a static site (you don't have to worry about maintaining your own databases or servers). The thing is, though, there's a lot to it.

  6. Easier Type Safety in JavaScript Classes

    I work with TypeScript a lot at Adobe. It's really great for so many reasons, but I often find new shorthand tricks I wish I knew when I was getting started! This is one of those tricks.

    Let's say you have a Person class with a few properties.

    class Person {
    constructor(name, age, job) { = name;
    this.age = age;
    this.job = job;
  7. Writing a Babel plugin to convert arrow functions to function expressions

    I'm still (slowly) learning how to work with ASTs and tools that use them. Today I wanted to learn how Babel takes arrow functions like:

    const log = message => console.log(message);

    and converts it into ES5 function expressions like:

    const log = function(message) {
  8. Getting Started with ASTs

    Forest of trees
    Photo by Arnaud Mesureur on Unsplash

    Hey all!

    I've wanted to move my blog back to my domain for a while now. I miss writing a lot. Medium is excellent but makes me feel like everything I write is high stakes and needs to polish.

    Lately, I'm interested in Abstract Syntax Trees. If you're not familiar, they are a data format used by programs like Babel, ESLint, and Webpack. ASTs are a tree representation of code. Let's take a look at a small example.

  9. Adding a Service Worker to a Jekyll blog hosted on GitHub Pages

    I need to refresh my blog!

    ...famous last words

    After a few days of researching all the latest and greatest technology, I ended up back where I started. Running a Jekyll blog on GitHub Pages. Although there are a lot of great options out there, I'm pretty lazy, and this approach still works great!

  10. Lighthouse Error: Content is not sized correctly for the viewport

    If you're like me, you probably spend quite a bit of time chasing those perfect 100's in Lighthouse. One error I've run into multiple times is Content is not sized correctly for the viewport.

    This error can occur for multiple reasons. The Lighthouse rule checks