What is rendering on the web?
Rendering means different things in different contexts. In the browser, it's the pipeline that takes us from HTML to pixels on the screen; in React it's the process of calling your components.
I am a blog.
Rendering means different things in different contexts. In the browser, it's the pipeline that takes us from HTML to pixels on the screen; in React it's the process of calling your components.
Unlike TypeScript, Go doesn't allow truthiness in conditional statements. You must explicitly compare values like strings and numbers instead of using them directly as booleans.
How to safely tighten validation in PostgreSQL. It walks through adding a not valid constraint, fixing invalid data, validating it, and replacing the old rule—highlighting triggers as a workaround for editing invalid rows.
Postgres domains let you define custom types based on existing types, but with validation constraints. Create reusable types like validated emails that enforce data integrity at the database level.
This article delves into two types of constraints in Postgres: unique and exclude. These two constraints are interesting because they are the ones that operate across multiple rows.
PL/pgSQL functions can reuse types of columns in tables. These can be used as return types or for declaring a variable in the function.
PL/pgSQL allows you to run dynamic commands with the `execute` keyword. This means you can do things like run a query where you don't know the table name ahead of time.
While the SQL standard specifies that multiple triggers should be fired in time-of-creation order, PostgreSQL uses name order. This article demonstrates this behavior.
There are a lot of ways to insert data into a Postgres database, including inserting with values, inserting with select, upserting, and copying data from a file.
Postgres has row-level and statement-level triggers. This article goes into the latter, with a focus on how statement-level triggers have become more useful after the introduction of "transition tables" in PostgreSQL 10.
This article highlights the use of triggers in Postgres, and how certain performance issues can arise. It also provides solutions to avoid these issues.
Buffered channels in Go can simulate semaphores for worker pools. By using a buffered channel, you can limit the number of concurrent goroutines and ensure all tasks complete using `sync.WaitGroup` to wait for all workers to finish.
wc is a command-line tool for counting characters, bytes, lines, and words in a file or from standard input. In this post, lets build our own version.
As a coding challenge, I built a chat server. We take two approaches, one involving a router, and another involving a user directory data structure.
I've been on a journery to understand more deeply git's internals. Recently, I built a toy version using TypeScript and Commander.
Rust macros like `println!` use format strings to transform values. They have their own syntax, which we'll explore in this article.
At work, we generate types from GraphQL using TypeScript for a better development experience. Seeking a similar setup in Go, I found Khan Academy’s genqlient.
Structural typing, seen in TypeScript, allows type compatibility based on structure. Nominal typing, used in languages like Java or Kotlin, requires explicit type names.
In the past few months, I've had one of the most interesting challenges of my engineering career. I lost the ability to control a computer with my hands.
Cloud KMS is a tool provided by GCP that can help for storing sensitive data like passwords or API keys.
In an inverted binary tree, each node is swapped with its corresponding node on the opposite side, akin to rotating the tree around its center axis.
ls -lh shows the disk space used for directory metadata, not the actual file sizes within directories. This can make you think you're dealing with less data than you actually are.
If you go to the browser, and type in a domain name, what happens next? In this post we'll explore the infrastructure involved in a DNS query.
Since I have far more experience with Kubernetes, I wanted to explore what running containers would look like on AWS, especially not using EKS.
At my last job, we had an outage of our ingress controller, Kong. In order to debug this, we had to go deeper than I had previously gone into Kubernetes ingress controllers.
If you merged a PR and you want to undo it, you can revert the merge commit - given you use merge commits.
To reverse a linked list in O(n) time complexity and O(1) space complexity, you need to carefully manage the pointers. Here is a Python implementation along with a walk-through of the algorithm.
This article provides a comprehensive guide to using kubectl for managing Kubernetes resources. It emphasizes minimizing the use of imperative commands in favor of declarative configuration through the apply command.
The article explains the basic concept of VPNs, highlighting their ability to provide access to private networks and hide locations through encryption and encapsulation.
Here we discuss running an Envoy plugin within an Istio sidecar. The solution involves using Istio's EnvoyFilter to run Lua scripts for outgoing requests and the userVolume annotation to inject the library into the sidecar.
Pulumi and Terraform are the two leading Infrastructure as Code tools. We compare the two, looking at their strengths and weaknesses.
The root cause analysis of Slack's January 4th, 2021 outage highlights the complexity of resolving such incidents, often involving multiple interrelated issues rather than a single root cause.
At work, we encountered socket hang up issues after implementing connection pooling between two microservices, A and B. The problem was due to mismatched timeouts.
Consistent hashing ensures even traffic distribution in load balancing. This method allows adding or removing servers without re-indexing existing traffic, maintaining stable performance.
A service mesh, such as Istio, enhances observability, security, and traffic management in a K8s cluster. Key benefits include detailed metrics, mTLS for secure traffic, and advanced routing.
Kustomize offers an alternative to templating for managing Kubernetes manifests by using overlays to create variants of base configurations. This is cleaner than Helm.
Studying for the GCP Architect exam revealed the complexities of Cloud Bigtable, a NoSQL wide column store database, originally detailed in Google's Bigtable paper.
Joining in Kafka Streams is complex due to the involvement of time and the need for proper key and partition alignment. Key concepts include the stream-table duality, windowing, and different join types (inner, left, outer).
Lately I've been thinking a lot about best practices of evolving schemas in with Kafka, something that is often overlooked—this article is the result of all of that.
This article explores how an Avro-formatted message is transformed from binary data in a Kafka topic to a strongly typed object in a consumer application.
This post goes over a git alias I use almost every day. The alias resets the working tree, cleans it, checks out a branch, and pulls the latest changes.
For newcomers to Kotlin, the scope functions can be hard to wrap your head around. With similar sounding names (`let`, `run`, `apply`, `also`, `with`), choosing the right one can be difficult.
Inline functions are a powerful feature in Kotlin. They can increase performance, allow non-local returns, and provide reified type parameters.
This article goes over the Reverse Integer problem on LeetCode. The problem is to reverse the digits of a 32-bit signed integer.
Change data capture (CDC) is a method that makes data changes available across a system, which is especially useful in microservices architectures to avoid direct database sharing.
Data classes are a well-known feature in Kotlin. They're appropriately named, since it’s designed for classes that hold data—that’s where the main value of this feature come into play.
Apache Kafka is one of the most groundbreaking technologies we software developers get to work with these days. It’s used for streaming applications, as well as for piping data all throughout a system.
This article goes over the Longest Substring problem on LeetCode. We want to, given a string, find the length of the longest substring without repeating characters.
The article provides an introduction to lambda functions in Kotlin, highlighting their benefits and syntax. Lambda functions are small, anonymous chunks of code that can be passed around.