Hi there đź‘‹

I’m a developer based in Fort Worth, Texas. I write about…

  • Software Development
  • Emacs
  • Working in Tech in the 21st Century

When I’m not working or spending time with my family I’m probably working on my homelab.

To get in contact, click on one of the links below. Although, I’m mainly on Bluesky these days.

Deploying Tanstack Start w/ Kamal

I come from the Ruby on Rails world and the latest popular tool in that community is Kamal. Kamal is a useful tool to quickly deploy a Rails application to a server and manage other deployed services through what Kamal calls “accessories.” At my day job, I was tasked with building a small internal tool application using any framework I preferred, followed by deploying it to a suitable environment. I decided to use Tanstack Start and to run it on a plain old VPS. There are probably better hosting solutions, but due to the nature of the application, a VPS was perfectly sufficient. Since that was the case, I decided to go ahead and just use Kamal to manage deployments and make it easy for anyone else working on the application to do deploy as well. ...

April 18, 2025 Â· 7 min Â· JD

Kamal Tip - Private Network only Database Server

Edit: In the original version of this post I made a mistake. This post has been corrected. See the details at the below for an explanation of the mistake and the solution. Mistake Summary & Solution In the original version of this post I had stated that the App servers IP in the Kamal configuration should be set to it’s public IP. This is incorrect. With the SSH proxy pointing at the public IP as well, this resulted in a jumphost connection problem, meaning it tried to connect to the public IP through a proxy of the public IP. This obviously didn’t work and resulted in inconsistent behavior with Kamal. The solution was to replace the App servers IP address to be the private IP instead. As a result, the only place the public IP of the server is referenced is in the Kamal SSH proxy configuration. ...

November 22, 2024 Â· 7 min Â· JD
emacs transient menu

Transient Menus in Emacs pt. 1

Magit is an innovative package that provides an amazing interface over git. The complexity of its UI is completely hidden away thanks to another package born out of Magit called Transient. Transient is so innovative that it was added to emacs core in 2021. Understanding at least the basics of Transient can provide alot of value in building tools to enhance various workflows. From the official manual Transient is the library used to implement the keyboard-driven “menus” in Magit. It is distributed as a separate package, so that it can be used to implement similar menus in other packages. ...

November 13, 2024 Â· 11 min Â· JD

Quick Tip: Git - Rebasing Branches

I’m a big believer in keeping a clean commit history. This practice isn’t always necessary depending on the type of work being done, but I frequently reference old commits, so keeping the merge commits out of my history just helps me to get rid of the noise. This means, that I rebase my branches often which can cause an issue when branching off branches, as once a branch is merged into the main branch, you need to catch up your currently working branch some how. ...

October 11, 2024 Â· 2 min Â· JD

Managing Local Services in Emacs with Prodigy

Prodigy is an incredible tool of convenience for me. I’ve been slowly migrating my entire workflow into Emacs and Prodigy has become a staple in my day to day. What is Prodigy? Manage external services from within Emacs I came up with the idea when I got to work one Monday morning and before I could start working I had to manually start ten or so services. To get rid of this tedious work, I started working on this Emacs plugin, which provides a nice and simple GUI to manage services. ...

March 15, 2024 Â· 6 min Â· JD

Finding an Emacs Bug

I was recently working on a porcelain for local database management in Emacs, tablemacs (name tbd). The general idea here is to give a magit style interface for interacting with a local database. This mode is built off SQLi (sql-interactive-mode) and uses a hidden comint buffer to execute commands. Everything was working great till I encountered a really weird issue. Let me preface everything with, I’m still very new to elisp and am still very much a beginner. Not only is it a radically different language than what I’m used to, the paradigms are also just very unique to emacs. If some of the code here looks wrong, it’s a mistake in translation as some of it was modified for ease of understanding. ...

January 2, 2024 Â· 6 min Â· JD

State Design Pattern

Manging the state of objects and state specific behavior is always an interesting problem to deal with. The Rails community has done a great job of developing libraries to help manage this. Most of these libraries come in the form of State Machines. These typically have the pattern of defining states, events to change states, and constraints by which those states can or cannot change. Usually, this code is maintained in your model, and in some cases states can have their very own model and DB table and keep an audit history of some kind. ...

June 8, 2021 Â· 7 min Â· JD

Double Polymorphic Associations in Rails

Polymorphic associations is a common theme among many applications. Things can get complicated, especially as far as naming is concerned, when you consider having a double polymorphic association. Rails provides all the necessary mechanisms by which to manage this in a way that makes sense for most business needs as well as leaving it readable for future programmers that come by in the future. In programming languages and type theory, polymorphism is the provision of a single interface to entities of different types or the use of a single symbol to represent multiple different types. ...

May 31, 2021 Â· 3 min Â· JD

Using SSH Tunneling

Recently, I needed to figure out how to route some internet traffic through another computer to access a private network. Dynamic port forwarding with SSH seemed to be the best solution for this type of thing. I don’t know enough about SSH so this was a good place to dig in a little deeper and learn a few things. Once the tunnel was setup I decided to utilize Firefox’s profiles feature in order to setup a SOCKS Proxy and ensure that only the web traffic I wanted was routed through the SSH tunnel. ...

March 1, 2021 Â· 3 min Â· JD

Trying out GCC Emacs

I love Emacs. I’ve been using it since late 2017 and have had an on and off again relationship with it. It’s a great tool for anyone who likes to tinker around with software. Like any relationship, there are some pain points I have that consistently want to push me away from Emacs, one of which is performance. I’ve used Doom Emacs for a really long time and hlissner has done an incredible job of building a fantastic configuration setup, and compared to other configuration frameworks I’ve used, Doom is the most performant and most versatile. That being said, no matter how much optimization is done on the configuration side, Emacs can still be extremely slow, especially compared to it’s Vim counterpart. ...

February 20, 2021 Â· 3 min Â· JD