Blog Posts
2024-09-18
Rendering 2.5 million Tiles In Dragonruby without dropping frames
A post going through the process of how I managed to render 2.5 million tiles in DragonRuby without dropping frames.
2024-09-13
Making Lit Components Morphable
A quick guide to how I made any element which inherits from LitElement "morphable"
2024-09-13
The Different Ways To SSR Web Components
A small post about the different ways we can SSR web components. This isn't about hydration, or the actual techniques, but rather a general way of "expanding" a custom element tag.
2024-08-18
Auto Updating Version Script for NPM
Create an automatic version updater for your NPM packages without using replacer functions.
2024-07-24
Running Lit SSR in Web Awesome
A document of things I hit while working with Lit SSR in the Web Awesome codebase
2024-06-18
How the dialog element and the popover attribute interact
A brief explanation of how the dialog element and the popover attribute interact and what happens when used together.
2024-04-23
Exploring Slash Commands Accessibility
An article in which I explore accessibility of various slash command / suggestion implementations
2024-04-17
Designing Web Components For Morphing
Designing Web Components For Morphing and techniques to deal with reflecting attributes
2024-03-09
Running Windows 11 On Mac Arm Chip For Free
A blog post describing how to run Windows 11 on a Mac M1 / M2 / ARM chip.
2024-02-11
Keep Syntax Highlighting with Diffs in Rouge
Learn how to maintain proper syntax highlighting while using diffs in Rouge.
2024-01-24
Trix and I are not friends
A small summary of some of the issues I've run into using Trix.
2023-11-21
Run A Vim Macro On Every File
Run A Vim Macro On Every File
2023-11-15
Listening for Changes To An Element Property
Listening for Changes To An Element Property
2023-10-25
Web Components Tailwind And SSR
Web Components, Tailwind, And SSR
2023-09-18
Adding Access-Control-Allow-Origin Header to Bridgetown
A brief guide to adding the Access-Control-Allow-Origin header to Bridgetown
2023-08-02
The Shoelace Side Effect Scavenger Hunt
Come along and join me on my journey to debugging side effects and treeshaking in Shoelace
and figure out why everything is broken!
2023-07-15
Wrapping Lit React Wrappers
In this post we'll walk through how you can take a Web Component, wrap it with @lit-labs/react, and wrap
it again to provide your own lifecycle hooks.
2023-07-14
Stubbing the Custom Elements Registry
In this post we'll walk through how we can stub the custom elements registry to do
things like enable multiple registration using things like Proxies and Sinon.
2023-07-05
What is Declarative Shadow DOM?
A cursory glance at Declarative Shadow DOM (DSD) and why it matters.
2023-06-13
Inserting a string on the first line of every file with Vim
Alright here it goes, I needed to add a header to all files. There are roughly ~72 files and I didn't...
2023-06-07
Maintain scroll position in Turbo without data-turbo-permanent
Alright, this will be short and sweet for future me. Maintaining scroll position is notoriously...
2023-05-30
button_to vs link_to and the pitfalls of data-turbo-method
If you're familiar with Turbo, or even HTMX You'll see this pattern come up frequently...
2023-05-22
Rails Frontend Bundling - Which one should I choose?
Propshaft? Or Sprockets? If you use the following options:...
2023-05-22
Revisiting box-sizing best practices
We've all googled "best way to set box-sizing: border-box;" and come across this fun article from CSS...
2023-04-08
How to keep a persistent class on a LitElement
When working with lit, sometimes you want the host element to have a persistent class name. A good...
2022-11-22
Jest, Vitest, and WebComponents
Purpose Jest and the newer Vitest are inextricably linked with frontend testing tools....
2022-10-20
ActionText: All the ways to render an ActionText Attachment
There's so many ways to render an ActionText attachment, we can change the...
2022-10-10
ActionText: Safe listing attributes and tags
To safelist tags and attributes in ActionText we need to inspect the source since I was unable to...
2022-10-04
ActionText: Modify the rendering of ActiveStorage attachments
If you have not already, make sure to run both the ActiveStorage and ActionText installers...
2022-07-20
Why we still bundle with HTTP/2 in 2022
HTTP/2 is out! CDNs are hot! Perhaps you've heard of HTTP/2 and its Asset Multiplexing and the...
2022-04-08
Testing scopes with Rails
The Problem A common problem I've seen and that took me a long time to understand was how...
2022-04-07
Adding additional actions to Trix
It's not documented how to add additional "actions" to Trix. Current actions can be found...
2022-03-13
Converting a callback to a promise
Sometimes you want your synchronous function to run asynchronously. Perhaps you want to run multiple...
2022-03-10
Escaping the traditional Rails form
Theres been a pattern I've seen creeping in Rails apps. The pattern is that there are cases where...
2022-02-21
Adding text alignment to Trix
A user had asked in Discord "Is there a way to add text alignment to Trix" I thought this was a...
2022-01-29
Modifying the default toolbar in Trix
The first thing you may be tempted to do when exploring with Trix is to change the default toolbar....
2022-01-29
Exploring Trix
Why? Well, the reason is simple. Trix is notoriously hard to extend. It has little...
2021-11-30
Cross-browser Vertical Slider using input type="range"
Vertical Sliders Vertical sliders have been around in the form of <input...
2021-11-01
Rebuilding ActiveStorage: First Impressions
Why? ActiveStorage's JS library is just fine...why rebuild it? You're not wrong. It...
2021-10-27
Why Jest is not for me
Why make this at all? I don't enjoy bashing other people's hard work. This isn't meant...
2021-10-06
Frontend Bundler Braindump
What is this? The following is a collection of terminology and definitions of various...
2021-07-08
Writing code block highlighting to a CSS file with Rouge.
Purpose To remind myself how to do this again in the future. How to do it? To...
2021-07-06
Creating reusable flashes in Rails using Shoelace
Purpose To document how I made a reusable flash system leveraging Shoelace + Rails ...
2021-07-03
Pulling down somebody's fork with Git.
Purpose To provide an easy to use way to pull down somebodys fork on your project. ...
2021-07-02
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory in Webpacker
The purpose of this is to remind myself what to do next time I encounter this...
2021-07-02
Migrating HLS videos to Mp4 format in Rails.
Purpose Recently, I was tasked with migrating our HLS videos over to mp4 format and store...
2021-06-25
Querying ActiveStorage Attachments
You want to find all the ActiveRecord models that either do / do not have a..."
2021-05-25
Case / Switch Statement in Ruby
Why is this here? I always forget how to write case statements and always find myself look...
2021-05-15
Arel Notes
Notes from RailsConf 2014 Link to talk: https://www.youtube.com/watch?v=ShPAxNcLm3o...
2021-05-04
PNG optimization from the command line
Optimize your pngs from the command line using pngquant and bash
2021-04-03
How do default_url_options work in Rails?
A quick down and dirty guide to the totally bizarre default_url_options API in Rails.
2021-03-05
Differences between JavaScript and Rails timezones
Common pitfalls and issues with Rails timezones. Differences between the browser and the server, and various other tidbits.
2021-02-24
Active Storage Variants with Rails 6.1
receiving the following error with ActiveStorage Variants with Rails 6.1? ActiveRecord::NotNullViolation (PG::NotNullViolation: ERROR: null value in column 'record_id' of relation 'active_storage_attachments' violates not-null constraint) Let me help!
2020-09-29
Webpack, Rollup, Parcel, Snowpack, and beyond
A brief comparison between popular frontend bundlers. I will walk through my thoughts and feelings related to each bundler
2020-08-10
Dynamic Getters and Setters on an Object
A guide to defining dynamic getters and setters on a Ruby Object
2020-05-23
Dockerizing Bridgetown
Getting started building with Bridgetown by dockerizing it. I'll walk through a Docker setup for Bridgetown using Alpine Linux.
2020-05-03
Getting Started with Rails 6
A guide to getting setup with Rails 6 using Docker
2020-03-05
Adding Emotion, Typescript, and Jest to Gatsby
A detailed description of adding emotion, typescript, jest, and react-testing-library.
2020-01-20
Adding tailwindcss to a Gatsby project
Details on how to add tailwindcss to a Gatsby project.
2020-01-16
Setting up a Gatsby project with Docker
How to setup a new gatsby project with docker within the current directory of your project
2019-12-18
Making EMS Helper - Hiccups
Detailing a few of the issues faced when attempting to populate the database.
2019-12-08
Making EMS Helper - Setting up
Detailing the initial setup of EMS Helper with Rails 6, Webpack, TailwindCSS, Docker, and Docker-Compose
2019-12-05
Making EMS Helper - Introduction
This is the beginning of EMS Helper. A service meant to provide people with the ability to quickly locate the closest appropriate hospital.
2019-11-24
PostgresQL - Setting up postgres on a local environment
I will detail a short and easy way to get PostgresQL running on a Ubuntu based machine for local development.
2019-11-23
PHP for Beginners - Part 8 - What the heck is PDO?
Lets learn about PDO and why its important.
2019-10-11
How to setup TailwindCSS with PostCSS and Webpack
I will detail how to setup TailwindCSS with PostCSS and Webpack. I will do the bare minimum setup to get it working without many plugins.
2019-10-10
JS - How to configure webpack-dev-server live-reloading
In this post, I will go over how to configure webpack and webpack-dev-server to allow for live-reloading similar to live-server
2019-10-02
JS - Using Jest with Import and Export statements
Using jest with import and export statements is not easy. I will detail how to use the ES6 based syntax in the following post.
2019-09-29
JS - Appending multiple children to an element
After searching and scouring the internet for the best way to append multiple children within the DOM at the same time, I came across the DocumentFragment API
2019-09-29
JS - Introduction
A basic introduction as to what this series will be about
2019-08-26
PHP for beginners - Part 7 - Classes?...Like school?
Lets look into classes in PHP. Classes are the building blocks of Object Oriented Programming
2019-08-26
Learning PHP - Part 6 - MySQL? Or Your SQL?
Lets learn some basics of SQL based databases, in this case, MySQL
2019-08-26
Learning PHP - Part 5 - Lets make it functional
Lets learn a little bit about functions
2019-08-19
Learning PHP - Part 4 - Lets get conditional
Dealing with conditionals and booleans
2019-08-18
Learning PHP - Part 3 - Arrays, Arrays, and more Arrays
Lets dive deep into arrays and associative arrays
2019-08-18
Learning PHP - Part 2 - Lets get coding!
Learn php with me! Part 2
2019-08-18
Learning PHP - Part 1 - Lets Compile PHP!
Compiling PHP with PHPENV is not easy, come enjoy my frustrations in this task.