Unstructured Thoughts

Tea Timer

Brewing tea is a simple process of using water to extract the bits from tea leaves. Top minds have been doing this for several years, coming up with a general idea of how long one is meant to leave the leaves in the water. Unfortunately, as a rather forgetful person, my usual tea steep of 15-30 minutes falls outside of the expert opinions on the matter. The normal way to fix this would be a phone timer, but my forgetfulness has gained the ability to silence the timer and move on without informing my brain. I embarked on a new project, creating a timer that would force me to collect my tea.

Read More

Bluetooth Rotary Phone

Old technology is just the best! It clacks, thunks, and makes all the other tactile noises one could ever need. I had the idea to make a rotary cell phone way back in high school, but when I priced out the fancy electronics required it was far outside of my budget in terms of both money and expertise. I buried the idea in my mind’s bog of unused concepts and did a few things for a couple years.

Read More

Untangling WebSockets

I have a confession to make. I enjoy reading RFCs. I love the ascii-art technical diagrams, the ruthless exposition of edge-cases, and the frenzied all-caps MUST, REQUIRED, and SHALL.

Read More

Let's Make a JavaScript Bundler!

WebPack, Browserify, and the billion other JavaScript bundlers out there are black boxes into which we feed source code. While these existing tools work quickly and correctly, it’s educational to see the challenges that went in to developing them. This blog will lead you through the journey of creating a JavaScript bundler. Along the way you will learn about abstract syntax trees, digraphs, code generation, traversal orders, scoping rules, and function isolation.

Read More

CMS.609 Program 0.5

A class I am taking this semester, CMS.609: The Word Made Digital, involves the creation of four to eight computer programs. These programs are intended to explore the intersection of technology with literature. I will write a blog post for each program to discuss my process and artistic intent. This first entry details the creation of Program 0.5. What follows is a story of the wonderful benefits of overdesigning a simple system.

Read More

Low-level Optimization in a High-level Language

A year ago I took Performance Engineering Optimization. The first lecture launched into a study of matrix multiplication. Starting with a simple python program, the professor ran through a series of optimization techniques that sped up the program by a factor of 52,479. However, the first step in this process was to switch to C. I began wondering what would happen if we had stayed with Python or another high-level language. I have finally followed through with JavaScript. Read on for a whirlwind tour of low-level optimizations and a few JavaScript-specific tricks.

Read More

The First Project

Phones break. Firefox OS phones break too (for now). This breaking usually leaves behind visible trails that reveal what caused the initial break. In physical terms, if something hits your window it will leave cracks that will be different based on whether the object was a golfball or a brick. If you are lucky, you may have a security camera that happened to take pictures of the window-smashing object.

Read More

The First Week

How do I…

Read More

Why Rust is better than C++, a case study

For the past week I have been working on transferring LLVM’s wonderful Kaleidoscope tutorial to Rust as a way to gauge the possibility of finally introducing a proper REPL into the language. I am still working on getting the JIT compiler functioning, but I thought I may as well document some thoughts about where Rust is infinitely superior to C++ and where it still needs some improvement.

Read More

Plausible Deniability in JavaScript

Plausible deniability is a wonderful characteristic to have. It would be nice to never have to choose between freedom and Freedom even when under a deluge of subpeonas and warrants. Most developers believe they can never achieve this lofty goal, choosing instead to leave themselves and their users vulnerable and exposed. I believe this is both wrong and unnecessary. To prove my point I created blowfish.js, a simple and secure client-side encryption library. Building on blowfish.js, I developed ByteHaven, an example of zero-knowledge file storage.

Read More