Streams and Temp File Cleanup: Fixing a Real Production Issue thumbnail

Mismanaging resources is one of the easiest ways to bring down a production system. In a development environment, it’s easy to ignore open streams and temporary files, but at production scale, they can have a hugely negative impact. Unfortunately, it’s far too easy to overlook these issues while developing, even…

Lucidchart is Turing Complete thumbnail

I’ve been watching the Turing completeness of Lucidchart for over a year now. As far as I have been able to prove, Lucidchart has been dipping in and out of being Turing complete for most of that time. In the past, however, I have been able to simulate Turing machines…

Keeping Up With Change: On-the-Job Learning thumbnail

After I had been at Lucid for a few months and was at least somewhat familiar with our code base, all the JavaScript was converted to TypeScript in the space of a few days. Angular 1 also changed drastically and became Angular 2. The languages, libraries, security regulations (like the…

Why Puppeteer is Better than Selenium thumbnail

At the start of this year, we could only write end-to-end tests using Selenium in Scala here at Lucid. This was just fine for the developers here who mostly write in Scala. The problem was that learning Scala and Selenium was a high bar of entry for developers to just…

Why JSON isn't a Good Configuration Language thumbnail

Why JSON isn’t a Good Configuration Language Many projects use JSON for configuration files. Perhaps the most obvious example is the package.json file used by npm and yarn, but there are many others, including CloudFormation (originally JSON only, but now supports YAML as well) and composer (PHP). However, JSON is…

Idiomatic JavaScript: Boolean Expression Tricks thumbnail

If you’re new to JavaScript, you’ll come across various keywords, syntax sugar, and shorthands that make you scratch your head. This article introduces a few of the most common boolean expression tricks I encountered when I began coding in JavaScript. Truthy and falsy Chances are, you’ve seen something like this…

How to Actually Improve Type Safety with the TypeScript Strict Flags thumbnail

Last summer a team of engineers converted our front-end code from Closure-annotated JavaScript to TypeScript, you can read about it here. It has been a long journey to take that converted code that was smattered with anys and turn it into idiomatic and type-safe TypeScript. The strict compiler flags have…

4 Problems with Java's Exceptions and How Scala Can Help thumbnail

Error handling is important for many common operations—from dealing with user input to making network requests. An application shouldn’t crash just because a user enters invalid data or a web service returns a 500. Users expect software to gracefully handle errors, either in the background or with a user-friendly and…

Lucidchart’s Database Migration to Amazon Aurora thumbnail

Lucidchart was built on AWS from day one, so I was very excited for the opportunity to go to Seattle and have Lucidchart featured on the AWS video series, “This is My Architecture.” I talked about our database migration to Amazon Aurora—you can watch the interview below, and for those…