Skip to Content

about blog tips contact

Hi! I’m Daniel.

photo of daniel

I live in Kansas City where I help run a small Christian church, raise two kids with my awesome wife, and write software for Divvy.

I run a ton of self-hosted software here at home on some machines that sit on an unnecessarily large server rack in my basement. I love building keyboards, too. I heavily customize my workflow and you can sift through my dotfiles if you like.

Occasionally, I post technical articles here.

Latest Blog Posts (RSS)

Things I Use
Posted on Jul 6 2023

I saw a post recently on ye ole fediverse that asked developers if they have a “uses” page and I was inspired to create mine. I wrote up just about everything I use on a weekly basis.

You can read about all the things I use here!

Teaching TypeScript to Help You with Events (Generically)
Posted on Jan 18 2022

I wanted my custom event system to have all the nice typed goodness and it took me a lot of brain-twisting and a couple of meetings to finally rubber duck it out. Now, I will share my hard-won knowledge with you!

Using Ecto Reflection for Simple Admin CRUD Forms in Elixir's Phoenix
Posted on Mar 28 2019

If you’re working on a Phoenix project, you probably realized the client might want to view (or even – gasp – edit!) their data in a pretty raw form. Frameworks like Django provide this out of the box. Phoenix, however, leaves this up to you!

Elm: Forms, Fields, and Abstractions
Posted on Mar 20 2019

If you’re using Elm, you’re probably dealing with forms and fields. You’re also probably wanting to do functional programming “right” and compose smaller functions together. Hopefully this helps!

Mirroring Gitea to Other Repository Management Services (GitHub, GitLab, etc.)
Posted on Mar 13 2019

I have a Gitea instance I self-host at home. I keep most of my repositories there, but I recognize that most other developers and potential employers will want to see my work on GitHub.

Weechat & Matrix Encryption Guide
Posted on Mar 7 2019

There’s a new-fangled Python WeeChat plugin that supports end-to-end encryption. This guide will walk you through what is currently a semi-annoying setup, as the entire project is still under heavy development.

Latest Tips (RSS)

Fetching Go Modules via `goproxy` Inside VPN
Posted on Jun 22 2023

I think I finally setup the holy grail of universally being able to fetch-by-proxy go modules through a firewall using

On your internal host (such as your work machine), run the following: GOMODCACHE=~/go goproxy server --address localhost:9981

On your external host (such as a network isolated Linux VM):

ssh -L 9981:localhost:9981 $INTERNALHOST &
GOPROXY=http://localhost:9981,direct go mod tidy

Of course, the tunneling is optional and you can use a non-localhost --address when running goproxy server, but then of course you are dealing with this proxy being open on the LAN, which may upset security in some cases.

And bam! Now you can fetch go modules as if you’re on the VPN even if you’re not on the VPN.

You can use something like go env -w GOPROXY=http://localhost:9981,direct to avoid prefixing all your go commands with the environment variable. Obviously, this can cause things to break weirdly if/when the goproxy server dies or the tunnel is disconnected. Tread lightly!

iex and dbg/1 without pry prompts
Posted on Jun 22 2023

I love iex -S mix ... but I usually don’t like when dbg asks me to pry. Just show me my data! Well, today I learned about iex --no-pry:

$ iex --help
Usage: iex [options] [.exs file] [data]
  --no-pry            Doesn't start pry sessions when dbg/2 is called.

Now I can iex --no-pry -S mix ... and just see output instead of dealing with the prompts for prying! Not sure if anybody else felt this pain, but there ya go.