-
A Library for Incremental Computing
·
9 min read
Incremental computing is a software feature which, whenever a piece of data changes, attempts to save time by only recomputing those outputs which depend on the changed data. This post describes how this feature works and how you might go about implementing it.
incremental-computing expository -
Learning C++ from Java - Pointers and References
·
6 min read
Before I started learning C++, I had read about Java being pass-by-value rather than pass-by-reference, but I found it easier to think I was passing objects around by reference. This post begins by summarizing pointers and references in C++, before describing the different semantics for passing arguments to a function.
c++17 -
Learning C++ from Java - Header files
·
6 min read
This post begins with an explanation of forward declarations in C++ before I highlight why and how C++ programmers use header files.
c++17 -
Learning C++ from Java - Building, Namespaces, Linkage, and more
·
7 min read
I recently had to learn C++ for work and have done most of that learning so far through learncpp.com. This next series of posts will highlight what I have found interesting about C++, especially given my Java background. In this post, I cover variable initialization, namespaces, linkage, and more.
c++17 -
MIT 6.824: Lecture 20 - Blockstack
·
7 min read
The final post in this lecture series is about Blockstack. Blockstack is a network for building decentralized applications based on blockchain. Decentralized applications promise to give users more ownership and control of their data. Here, I'll start with an overview of how a decentralized app might work before describing Blockstack.
mit-6.824 distributed-systems learning-diary -
MIT 6.824: Lecture 19 - Bitcoin
·
9 min read
Following the lecture on Certificate Transparency, we're exploring Bitcoin, another open system comprising mutually untrustworthy components. Bitcoin is a digital currency for making online payments. I'll start this post by making a case for digital currencies, before describing Bitcoin and how it addresses the double-spending problem.
mit-6.824 distributed-systems learning-diary -
MIT 6.824: Lecture 18 - Certificate Transparency
·
6 min read
The systems we have seen so far are closed systems for which we have assumed that all the participants are trustworthy. But in an open system like the Web where anyone can take part, and there is no universally trusted authority, trust and security are top-level issues to address. Certificate Transparency is one approach to ensuring trust and improving security on the Web.
mit-6.824 distributed-systems learning-diary -
MIT 6.824: Lecture 17 - Causal Consistency, COPS
·
6 min read
In studying distributed systems, I've come across systems like Spanner, which incurs additional latency for strong consistency, and DynamoDB, which sacrifices strong consistency for low latency in responding to requests. This latency vs consistency tradeoff is one that many systems have to make, including COPS—this lecture's focus—but it offers a unique balance.
mit-6.824 distributed-systems learning-diary -
MIT 6.824: Lecture 16 - Scaling Memcache at Facebook
·
10 min read
This lecture is about building systems at scale. I'll start this post by describing how a website's architecture might evolve to cope with increasing load, before highlighting Facebook's use of memcached to support the world's largest social network.
mit-6.824 distributed-systems learning-diary -
MIT 6.824: Lecture 15 - Spark
·
5 min read
In the first lecture of this series, I wrote about MapReduce as a distributed computation framework. MapReduce partitions the input data across worker nodes, which process data in two stages: map and reduce. While MapReduce was innovative, it was inefficient for iterative and more complex computations. Researchers at UC Berkeley invented Spark to deal with these limitations.
mit-6.824 distributed-systems learning-diary