Data Storage and Persistence
Storing data is a critical part of every application in one way or another. In this post I discuss some different types of data storage and their trade-offs in terms of resource use.
A hodge-podge of posts about software, computer science, programming languages, and being human.
Storing data is a critical part of every application in one way or another. In this post I discuss some different types of data storage and their trade-offs in terms of resource use.
WebAssembly (WASM) and the WebAssembly System Interface (WASI) are likely to power the next generation of web applications. This is a brief note on what they are and how they might change the way we interact with data on the internet.
In a previous post I proposed some ideas for how to approach our relationship with data. In this post I continue that train of thought with a framework for designing networked applications from the viewpoint of decentralized and distributed sense-making.
Our senses are the beginning of how we form ideas about reality and ultimately how we interpret our experience of it. In this post, I talk about some of my philosophy on data and what we can do to take better care of our wellbeing through conscious effort to understand the relationship between the data we use and how it affects our perception.
Computer network design is challenging because there are many different layers to consider. From a theoretical standpoint, however, there isn't much difference between designing a physical network and full application stack. In this post I give an overview of the OSI network model and talk about how logical formula emerge from this model in the form of relational semantics.
Object oriented programming has been the most popular style of programming for decades. Is there a good theoretical reason for this? What makes OOP convenient, and when is OOP not the right style? In this post I discuss how the category-theoretic notion of a topos captures the principles of OOP and when the resources needed to reason about execution become intractable.
The recent explosion of a "AI"-powered applications is creating a lot of bustle. People are worried about employers divesting from their human resources to pursue speculative investment in these new products. But the core of the issue is not how or when machines will take over, but rather how humans *think* about the capabilities of machines. To that end, we have been sold a big fat lie.
Building a static generator is a good exercise in computational thinking. Subtle complexities arise when thinking about data that is available in the source, data that is available during compilation, and how these two interact to produce the output data.
In this post I discuss how type systems make it easier to write correct and reusable code. I show how function call signatures are a form of logical restriction on values and how function bodies can encode correct execution for those values.