Posts

  • On System Feedback

    It’s common to use run GitOps pipeline, where you manage infrastructure based on code that’s committed into a git repository. We use terraform as an example for infrastructure as code here. It is also not uncommon to generate some of that terraform code from a template to aid initial application setup.

  • Iceberg Catalog

    Iceberg is a data lake table format that is getting mainstream adoption. Iceberg utilizes a catalog to store table metadata. The idea is that iceberg specifies how to organize the data within a table, but you need a catalog to store a list of all the tables you have and where each table is located.

  • My Favorite New Launches From This Year's AWS re:invent

    This year I finally got the chance to attend AWS re:invent in person, and I have enjoyed the experience a great deal. Here are the launches that I found most exciting.

  • The cost of NAT Gateways

    A Network Address Translation (NAT) Gateway is a service that is used to connect instances in a private VPC subnet to the public internet.

  • How to create a serverless Crob Job on AWS

    A cron job is a job scheduled to run a regular basis. While it’s possible to schedule cron jobs from a single server, a serverless cron can run more reliably because it is not subject to a single point of failure. You can also save server cost if you don’t need the cronjob to be running all the time. In this post we discuss how to build cron jobs on AWS. The basic structure of a scheduled job on AWS is as below.

    alt text

  • Web Service Part 1: API design

    In this post I will discuss some of the problems to consider when creating a new API.

  • Covariance and Contravariance in Kotlin

    In programming language theory, variance describes the relationship between subtyping of simple types and subtyping of respective complex types. For instance, variance answers the question of whether Array<String> is a subtype of Array<Object> when String is a subtype of Object. In Kotlin the answer is no, because Kotlin arrays are invariants, in other words, Array subtyping does not corresponding with the subtyping relationship of the parameter types. On the other hand, Java arrays are covariants, meaning that String[] is a subtype of Object[] because String is a subtype of Object.

  • Pattern Matching in Python: Class Pattern

    Structural pattern matching is a new Python feature released in version 3.10. While reading up on the feature I noticed a curious design choice in class pattern. Take the script below for example.

  • Traffic Lights

    The other day the traffic light near my home was broken. It got me thinking why traffic lights are designed the way they are today.

  • Qualities of a senior engineer

    At this point of my career, I have grown into a more senior role in my own team and I have worked with enough junior engineers who are developing themselves and experiencing growth pains. People have different ideas about what an senior engineer should be like. For me, a senior engineer is one who can design and drive delivery of features and products on their own without continous supervision and guidance from others. It does not mean that they know everything and does not require help. It does mean that you can hand them a hard problem and they will work their way to a good solution. Here I will discuss some qualities that I believe are essential for junior engineers to grow into the next level.

  • Welcome to my blog!

    For a beautiful start, here is Portrait of A Lady by Giovanni Boldini.

subscribe via RSS