The Symfony ChoiceType is a complex, interesting beast. By far my biggest complaint about it is the error messages shown to the user during validation are not great. Defaulting to, "This value is not valid," with no help for the user on what values are actually allowed. That's okay for plain HTML interfaces where the… Continue reading Improving Symfony ChoiceType Error Messages
Promises are Not for Control Flow
Common advice in languages with exceptions is that exceptions are not for control flow. A rejected promise is not any different than a thrown exception: in both cases something when exceptionally wrong and must be dealt with. This week I was fighting with promises while building a slack app because I was attempting to use… Continue reading Promises are Not for Control Flow
Beautiful Imports in NodeJS
One of the things I enjoy about ECMAScript modules is their ease on the eyes. They look good -- the same way Python's import statement can look nice. It's also nice to have to explicitly import the things necessary for a file/module to its work. Need the whole module? That's a choice that has to… Continue reading Beautiful Imports in NodeJS
Use Many S3 Buckets
Should applications use one S3 bucket, putting different categories of files under different directories?1 Or should an application use multiple S3 buckets -- one for each different category of files? As the title implies, the answer is many S3 buckets. While some things, like lifecycle rules, can be configured based on directories (key prefixes, really),… Continue reading Use Many S3 Buckets
Building an Upload System Backed by S3 and Client-Side Uploads
One of the things I try to do when building applications is keep servers stateless. This makes those servers easy to throw away -- a piece of infrastructure failing (which it always will) is not a big deal with stateless servers. Just spin up a new one. When the requirement came down the pipeline to… Continue reading Building an Upload System Backed by S3 and Client-Side Uploads
How to Monitor Client-Side Upload Progress (with XMLHttpRequest)
Showing a user something like a progress bar during a file upload is handy and let's them know that stuff is working. Higher level abstractions like fetch don't really provide a look into how much of a request body has been sent, but good ol' XMLHttpRequest does. In order to monitor upload progress, attach an… Continue reading How to Monitor Client-Side Upload Progress (with XMLHttpRequest)
Delete Your Development Environment
Eventually more than one person works on a piece of software. When new folks start contributing to a library or application what is that experience like? Is it easy to clone the repo and get started? Project leads and senior developers have a responsibility to ensure that the developer experience (DX) for a new team… Continue reading Delete Your Development Environment