Bryce Fisher-Fleig

Fullstack Forrays into Web Development

Running Gui Apps from Docker 101

October 21, 2022

I've been using neovim-from-scratch as my IDE recently, and its incredibly brittle. This post takes some baby steps toward getting any desktop GUI app that runs on X11 to work on Ubuntu 20.04 while executing inside a docker container.

How I Nvim-from-Scratch

October 12, 2022

I've recently switched from my bespoke nvim setup to nvim-from-scratch and found the transition difficult. This post summarizes key workflows and keybindings I use frequently to help me learn and memorize them.

Quick Notes on SQLite Capabilities

December 4, 2021

A fairly random and semi-delusionally-upbeat braindump of random things I've learned about SQLite recently

Backup Options for Open Source SQL Databases

August 10, 2021

With so many options for databases, where do we start?

Fun with Histograms - Prometheus Basics

July 27, 2021

Playing around with PromQL to learn the basics of Histograms

Java LSP for Neovim - Java Basics

July 15, 2021

Next step on getting a working development environment with Neovim from a Java neophyte

Simple Logging Façade for Java (slf4j) - Java Basics

July 12, 2021

Quick notes on the basics of using the slf4j logging framework from a Java neophyte

Farewell to Mail-In-A-Box

May 1, 2021

Why I'm planning to replace Mail-in-a-Box with a homespun IMAP and SMTP cluster

Review of Diagrams-as-Code for mdBook

July 3, 2020

A comparison of PlantUML, MermaidJS, GraphViz, and SVGBob for use in mdbook. TL;DR - MermaidJS wins!

Returning Trait Objects

January 22, 2020

In Rust, dealing with polymorphic values in return position can be tricky. Here's a quick primer on the difference between Impl Trait and Trait Objects in return position.

Tracking Personal Finances through Email

November 22, 2019

My erratic journey into taking control of my personal finances without any third parties

Web Analytics without Google - A Just Tracking Theory

July 29, 2019

Being anti-surveillance is hard to reconcile wanting to start a side hustle, but I think it's possible to do both. Here's my justification for doing web analytics on this site.

Please Don't Deply Before You Test

July 26, 2019

In the small to medium software teams that I’ve been on, our development cycle is inefficient and error prone at a conceptual level

Automate Lets Encrypt SSL Certificate Management with Gitlab Pages

July 21, 2019

Gitlab Pages doesn't provide a fully automated way of obtaining and renewing SSL certificates from Lets Encrypt. I'll walk you through some specifics so that you can use this at home.

Dangers of CloudFront for Small Sites

July 5, 2019

For small websites, CloudFront can provide protection from DDoS and increase the overall availability of one's web presence; however, on its own CloudFront does not provide effective means of protecting my wallet

Separate IO from Logic

May 17, 2018

In many cases, combining business logic and IO can result in difficult to understand and maintain code. I'll try to convince that in many cases, separating business logic and IO can result is easier to test and maintain code.

Recurse Center Day 5: Wrapping Up

January 12, 2018

My last day at Recurse Center, mini batch 1 2018

Recurse Center Day 4: No, really I am going to decode a frame

January 11, 2018

Debugging Rust programs with lldb on MacOS

January 10, 2018

I'll explain how to step through a Rust application using LLDB and illustrate some of the most basic commands. This post assumes MacOS throughout. Things are probably very different on Windows, but might be very similar on Linux and friends.

Recurse Day 3: Port simple_decoder.c to Rust

January 10, 2018

Day 3 at RC, and I'm focusing on porting a sample decoder program to Rust and trying to have fun doing other things too.

Recurse Center Day 2: Seeks and Blocks

January 9, 2018

Seeks, Blocks, and overview Matroska layout

Recurse Center Day 1: VP9 != Matroska

January 8, 2018

Live-blogging my way towards possibly decoding a few frames from VP9 video files while at Recurse Center

Strategies for Returning References in Rust

March 4, 2017

In Rust, returning references from functions can be hard to master because the developer encounters Rust's novel feature -- lifetimes. I'll demonstrate the problem and show strategies for handling The Borrow Checker.

Faster CI Debugging with GitlabCI

February 24, 2017

Don't spend hours pushing one change at a time and waiting for your jobs to start in CI. I'll show you how to setup Gitlab Runner locally and cut your CI debug time by an order of magnitude.

Why I Use GitlabCI

February 1, 2017

For years, Github had a near monopoly on source code hosting; but Gitlab is offering real competition. Here's why I've made the switch.

A Quick Intro to the NERDTree plugin for Vim

August 4, 2016

A concentrated summary of quirks and undocumented config options for the de facto file explorer, NERDTree, in Vim

Builtin Neovim Features Everyone Should Know

July 19, 2016

I've been using Vim and now Neovim for several years, but I've never felt like I was taking full advantage of even the basic feature set. Here's my attempt to learn and record some really useful features of (neo)Vim that I should have picked up ages ago.

Golang Testing stdlib Errors

April 5, 2016

Getting 100% test coverage in golang can be tricky when using the stdlib. Here's a list of ways to error several commonly used builtin funcs.

Essentials for Cloud Deployment

January 5, 2016

A good deployment pipeline can make your team much more productive and nimble. Here's my sage advice on the most crucial overlooked features of a deployment pipeline.

Testing AWS Go SDK Integrations

October 25, 2015

If you're using Testify, getting test coverage over your AWS Go SDK integration code can be really hard. I'll show my (somewhat unconventional) strategy to cover ALL the code paths in your application.

Effective Commit Messages

May 25, 2015

Knowing how to write and retrieve commit messages can make refactoring and debugging much easier. Here's my advice on using commit messages for maximum impact.

Setting up Istanbul with Jasmine on NodeJS

April 17, 2015

Istanbul is perhaps the best test coverage tool for NodeJS, but it's tough to figure out how to get started. This post explains how to get it setup.

Handlebars Considered Harmful

March 2, 2015

Handlebars is a DSL builder in disguise tempting you to create an undebuggable mess.

How to Kill Email - Why startups will always fail to displace email

November 21, 2014

It's painful to watch startup after startup brand themselves the 'email killer.' This post is the real story of how to kill email.

Securing SSH with Multiple Keys

September 4, 2014

It's a great idea to use specific ssh-key key pairs per service (or per repository even). Even if your keys are compromised, they don't allow your attacker to access any other services. Unfortunately, these services often assume you'll use the default key pair (id_rsa).

7 Alternatives to Amazon CloudFront CDN

May 27, 2014

A comparison of the top content delivery networks for web content in 2014 with my recommendations. I'll be focusing on the needs for encryption and static html content.

Using AWS CloudFront Behaviors with HTTPS for Planet Drupal RSS

April 30, 2014

Many RSS validators and aggregators (including Planet Drupal) do NOT work over HTTPS. If you're using CloudFront to serve your site exclusively over HTTPS, I'll show you how to configure an additional behavior to switch specific URL patterns back to HTTP.

Avoiding the Duplicate Content Penalty with AWS S3 and CloudFront

April 26, 2014

Google and other search engines penalize content plagiarized from other sources. However, if you're using S3 as an origin server for CloudFront, you may be in danger of the duplicate content penalty! This post explains two strategies to combat this problem.

Setting Up SSL on AWS CloudFront and S3

April 24, 2014

I've just setup this blog using an S3 bucket as the origin server, CloudFront as my CDN, and SSL for under $10. Since there were so many articles to read along the way, I'm gathering up what worked for me all in one place.

A Super Handy Translation Checklist

March 14, 2014

I've put together a checklist of some DO's and DON'Ts that I've learned that help me review someone else's code or even my own code before forking over the big bucks to a translation company.

PHP: What Does function ...() use () syntax mean?

January 31, 2014

Mastering some of more idiosyncratic syntax of PHP is tricky these days with a much faster release cycle in recent years. Here's one syntax that I've seen a lot lately in PHP's 'Closures' (aka lambda functions) but could never wrap my head around until tonight: the mysterious PHP function use syntax. TL;DR - use() passes variables from the scope outside the closure into the closure itself. If you're used to closures in JavaScript, get ready for a new twist.

Using hook_menu to capture custom menus in code

January 14, 2014

A how-to guide on creating a public-facing menu using hook_menu(). We'll also talk about why hook_menu is so bad, 2 techniques for nesting menu items, and how to put a menu item into the menu of your choosing.

Considerations for Multisite Drupal

December 28, 2013

At my day job, we've been using the Domain Access module with Drupal 6 for 5 years. Recently, we've decided it's time to rethink our approach to Drupal multisite. In this article, I'll share some of ideal use cases and pitfalls for the Domain module and some alternatives for you to consider.

Best Practices for Translation in Drupal

December 13, 2013

I'm sharing lessons learned from my experience using Drupal 6 and i18n for translation. The long story short: Make translation easier by keeping things simple. Don't use the t() when you can keep translatable strings fully in the database, and don't break up individual strings into multiple t().

Quick Drupal - Lessons Learned While Whipping Up a Fresh Drupal Instance

November 29, 2013

I've recently started experimenting with using drush core-quick-drupal to create drupal sites strictly for creating patches to share on drupal.org. I'll walk you through my several pitfalls on the road to making this command work on Ubuntu 12.04. Hopefully, with this advice in hand, you'll be able to spin up fresh drupal instances in no time!

Getting to Done Faster with Drush and PHP

November 22, 2013

Drush and PHP have several commands that let you 'play' with your code much faster than you can traditionally in the browser. I only recently noticed them, and I wanted to summarize how to use three separate but related techniques to write bug free code faster on the command line.

Settings.php Hack - Keep Credentials out of Your Code

November 12, 2013

I'll walk you through how to setup your environment and Drupal settings.php file to keep your credentials out of your code. This makes your settings.php file easier to work with in Git across multiple environments by allowing you to have different credentials for work laptop than the server. You can also keep your settings.php file under source control and even try daring schemes like chmod 644 settings.php! Read on to learn more of this trickery.

Site Review - BountyHunterWine.com

October 20, 2013

BountyHunterWine.com offers a wide selection of wine for purchase online, but their user experience leaves something to be desired. Rather than bailing on their site, I decided to articulate the problems that I encountered and try to suggest constructive alternatives to the current implementations. This post is simply the contents of that letter.

Ditching Views For SQL, Part 3

October 13, 2013

In this third and final installment, I'll walk you through some basic Drupal theme hooks that you can use to create memorable template names and inject all the data just as you need it into that template.

Ditching Views For SQL, Part 2

October 9, 2013

In this follow up post, I cover how to go about writing your own SQL in Drupal instead of relying on Views. For philosophy of WHY to do this, check out the first post in the series. I'll cover the theming functions in a third part. I'm starting from the assumption that you're already comfortable with SQL.

Ditching Views For SQL

October 7, 2013

I've been using Views in Drupal since I first started using Drupal (and so have you!). So what's wrong with Views? In a word, Debugging. Like many parts of the current Drupal 7 (and Drupal 6) ecosystem, Views works like a charm until something goes wrong. The heart of the problem is that Views does too much. Learn about the alternatives and why you should consider them when Views become unwieldy.

The Missing Guide to Subnet Masks

October 5, 2013

This post aims to make it a little easier to understand how to read and specify ranges of IP addresses using subnet masks.

7 Steps to Improving Page Load Time on Shared Hosting

June 8, 2013

I recently optimized page load time for the Spelling Word’s Well homepage as part of a redesign. Using the YSlow Add-on helped, but I still had a learning curve to face, and I also uncovered some other tricks. Here’s a summary of the most important steps I took.

Pitfalls while Optimizing JavaScript

April 30, 2013

I've tried to incorporate some best practices from JavaScript Patterns by Stoyan Stefanov of Yahoo! Press. Here's some pitfalls I've run into and some simple fixes.

Comparison of Drupal Modules for Responsive Images

April 14, 2013

A table that walks through the features of several Drupal modules for creating responsive images.

Removing a Drupal Site

April 11, 2013

Simple tricks for deleting a drupal site from a Linux server.

Running PHP 5.2 and 5.3 on the Same Server

January 11, 2013

A quick tutorial on setting up two versions of php (5.2 and 5.3) on the same HostGator shared hosting account

Debugging A PHP Error

September 24, 2012

Guide to understanding and fixing many a common php error, and php tools that help.