RSSAmplifier

Blog

Bryan Burgers

burgers.ioRSS feed ↗59 posts

Latest posts

A complete novice writes Wasm by hand: Adding an Allocator

A complete novice at WebAssembly expands into writing a bump allocator.

A complete novice writes Wasm by hand: Parsing Numbers

A complete novice at WebAssembly tries to write Wasm to solve Advent of Code problems.

Calling Rust from iOS

Rust? Swift? iOS? Well let's give this a try.

Custom Logging in Rust Using tracing and tracing-subscriber, part 2

Learning tracing and tracing subscriber by implementing my own custom logger.

Custom Logging in Rust Using tracing and tracing-subscriber

Learning tracing and tracing subscriber by implementing my own custom logger.

twister.sh

Sometimes, you just need to wash the dishes even though the kids are begging to play Twister.

Cross-compiling Rust from ARM to x86-64

Most people cross-compile from x86-64 to ARM. We're going the other way!

Deploying WASM to Fastly's Edge

Take Fastly's Terrarium to a new level by deploying from a local build.

PCI Access Without a Driver

Poke around in PCI memory space without writing a driver.

Extending the Iterator Trait in Rust

Extending the Iterator trait in Rust by adding a new function for a new type of iterator transformation.

Wrapped Iterators in Rust

About the design of iterators in Rust (which I like) and writing a new one.

Practical Node Performance

What, practically, should we do with information about Node and V8's continual performance improvements.

How async and await make code clearer

Javascript's async and await are finally here, and they aren't just a bit of syntactic sugar. They can significantly increase the readability of code.

Load Testing with Docker and ECS

Generating load on a service is hard. Docker and ECS makes it easier.

YAML for Configuration

JSON is good at a lot of things, which led me to think it's great for configuration files. But it's not. YAML is the way to go.

The Rise of Metadata

Facebook's using it. Twitter too. Slack. And, now iOS 10. The metadata on your website is getting more important.

Using Ansible and Vagrant to Launch Ubuntu 16.04

I've been impressed with Vagrant and with Ansible, but my provisions always took an extra step on Ubuntu 16.04. How to get Vagrant to install Python before provisioning the box.

Decoupling Transactional Email with RabbitMQ

Using RabbitMQ to separate application logic from transactional email logic.

Serving HTTP/2 with nginx on Ubuntu 14.04

How I was able to get nginx serving HTTP/2 and a Let's Encrypt certificate on my Ubuntu 14.04 server.

A Better User Agent for NSURLRequest

The default user agent header set by NSURLRequest is awful. Do yourself a favor and change it.

Short, Localized Dates and Four-Digit Years

PHP's IntlDateFormatter::SHORT renders some locales with 2-digit years. I explore how to hack it to render all locales with 4-digit years.

Tracking Freeform Notifications in Git

How I embed ExpressionEngine templates into a Freeform Notification templates so they can be tracked in git.

Node, Upstart, and Ubuntu 14.04

An upstart configuration for node on Ubuntu 14.04 that uses navtive options rather than resorting to "script".

Configuration is Not Code

Configuration does not belong in the database. We've known this for years. But configuration also does not belong in git.

Stash Layouts

Stash is a powerful tool for templating in ExpressionEngine. Used the right way, it can improve the readability of templates. Used the wrong way, it can make a mess of things.

Above the Fold, Breaking the Rules

It's been hammered over and over that, on the web, there is no fold. And rightly so. But lets break the rules and make one anyway.

From Trello to Twitter

After reading "Trello as a CMS," I was inspired to automate my tweets from a Trello board.

The Plugin: Your First ExpressionEngine Add-On

Writing an ExpressionEngine Add-On can be daunting. But the Plugin is a no-nonsense, easy place to start.

Cache-Busting CSS and JavaScript in ExpressionEngine

Far-future cache headers are important for the performance of a site. But they also require the the ability to bust the cache when an asset changes. But how do you do that in ExpressionEngine?

Introducing Max Length

Max Length is an accessory that provides a small, unobtrusive indicator for how many characters an input has left before reaching its maximum length.

On Development Decisions

Black and white. Good and bad. The right way and the wrong way. It would be great if web development fell into nice neat little categories. It doesn't.

Squashing Commits

Your git history is like a book. It can read like a rambling stream-of-consciousness tome. Or you can squash your commits to read like a sharp-witted novella. Do us all a favor and squash your commits.

Release Cycles

I work on the internet, where I mostly build and maintain websites. Changes on the web are instantaneous. But recently, I worked on an iPhone app where this isn't the case. And it got me thinking about release cycles and their impact.

Oops I created a Spambot

"Build it and they will come" doesn't work on the internet. its5.info needed a strategy. There were several options I knew wouldn't work. But Twitter provided a world of opportunity.

Why I Built It: its5.info

On a cold day in late March, 2014, someone just trotted out the old phrase, "It's 5 o'clock somewhere," and I immediately wondered where? That's when I had the idea to build a website that tells me where in the world it's 5 pm.

Responsive Images – Without the Cruft

"That's a lot of markup for an image." The primary concern I've heard about responsive images since I wrote my responsive images article is that they're just too verbose. Things just got better. <fig…

Git is a Communication Tool

Communication is important. There are so many ways it happens: face to face, phone, email, text, instant message. It's often not thought of as such, but git is also a tool for communication. I've bee…

Playing 2048 with Code

What does a good move in 2048 look like? What makes one move any better than another? After getting hooked on 2048 for a while, I decided to program an AI solver for the game, and those are the funda…

Introducing Switch

Switch is a simple ExpressionEngine field type for choosing between two or more values. Do you need to mark an entry as featured or standard? Switch does it. Do you have two or three options, but a d…

Each-Scoping in jQuery

Recently, I started getting away from the jQuery pattern of checking the length of an object before writing code. Instead, I've found myself wrapping my selector in jQuery's each method,…

Responsive Images using Picturefill

For a recent project I worked on, the mock-up for the home page carousel's images were huge. 1900×696 pixels huge. Personally, I've never used responsive images before (long overdue), but I decided t…

Baby Fox Goes Camping

About a year ago, my wife and I had a crazy idea to write a children's book for our daughter. Even crazier, I decided to illustrate it. Just recently, we finally finished it and had it self-published…

Excluding Myself from Google Analytics

With as many visits as my site gets – and by that, I mean very, very few, actually – any visit that I make to the site can really skew the analytics. On the one hand, I'm my best visitor: I've been t…

Inline SVG with jQuery

I've long been a huge admirer of SVG (W3C's Scalable Vector Graphics). As retina screens proliferate, SVG allows web developers to create images that look great on all screens, regardless of the reso…

More Thoughts on Mobile Browsing

Yesterday, I stumbled into a conversation about mobile browsing with Peder Aadahl (of 168 Opportunities fame) and Curtis Jacob (of Hardy Boys Casefiles Encyclopedia fame), and it helped me articulate…

Mobile Growth, Revisited

I concluded last year that mobile usage is increasing, and it's time to start thinking about your mobile customers. Now, with one in four visitors coming on a mobile or tablet device, and mobile usa…

Cache-Busting in Node.js

Far-future cache headers are important for the performance of a site. But they also require the the ability to bust the cache when an asset changes. But how do you do that in Node.js?

Tracking Bounces with Google Analytics

I recently created a landing page for a Score Lab PPC campaign where potential customers either convert or bounce. If a customer converts, hooray!, I throw a little party in my head. But most potenti…

Screen-Size Histogram

This past week, while researching for another post about IE8 and responsive design I'm thinking about writing, I pulled stats from a large number of Google Analytics profiles on all of the widths of …

Stick With It

I still remember it. That "s", that little "s". In the basement of my childhood home, on an old vanilla computer with one of those monstrous CRT screens, I stared at that C code for hours, but nothin…