Welcome friend

My avatar
Join me on my written adventures in software

Dependabot for private packages

Dependabot is a great tool for keeping your dependencies up to date. But what if you have private packages? This piece dives into setting up Dependabot for private Github packages.


Opening the current PR in Arc

Lets step through a workaround to open the current GitHub pull request in the Arc browser using a custom Fish shell function. We even touch a little bit of AppleScript.


Implementing a binary heap in Ocaml

Lets learn about and implement a new datastructure in the (mostly) purely functional beast of a language, OCaml πŸͺ


SvelteKit dynamic page components

Lets look at how to dynamically load and display Svelte components for pages in SvelteKit


Thoughts On Moving Away From Ash

Ash is a freaking cool technology. But here's why I'm moving away from using it.


File based routing with Plug

A lot of frontend frameworks take the design decision for the project file structure to dictate the structure of the API. Let's mirror that with Elixir's Plug library


Debugging Tailwind's Language Server Protocol

I use Neovim as my code editing driver. At work, our tech stack revolves around the Phoenix framework on top of Elixir Recently we've made the move to incorporate TailwindCSS into the mix - hardly a controversial decision since TW is basically bundled into Phoenix at this point!


Metaprogramming in Elixir with macros

Macros are one of the most powerful concepts in Elixir. Its what differentiates the language from the underlying Erlang BEAM your code is compiled to run upon.


Comparing a file with master branch

I find myself very regularly needing to understand what has changed in a specific file compared to (most commonly `master`) another Git branch. There's no quickfire `git` command which will just take the file and branch you want and hand you back the file unfortunately, so we are left to come up with other means.


Moving to Zola

First article of the new year, and I tell myself that this time, this time I'll actually stick to writing! As every developer knows, you can't just go and start writing articles, you need to build the platform which they will be hosted on first!


Exploring Haskell’s `newtype` as a type wrapper

Sometimes when programming in various languages, it can be incredibly useful to be able to adapt the core primitive or third party types in your platform. A particular library’s API not quite to your liking? Need an additional sorting function on that damned list type? Sounds like a nice, ergonomic way of wrapping that external type to provide more functionality is in order.


Type safe local storage

In my day job we were continually hitting an error with users whenever we rolled out changes to a particular form based feature.


Checkout that PR

The `gh` CLI is awesome. Everyone and their nan knows this. For me one of the best parts about it, is its potential for compose-ability with other CLI tools.


Find and stop systemd services

A delve into the CLI toolbox to kill a rogue Caddy process


Running my package json test command - the hard way

Sometimes it can be super handy to have a quick and dirty way of accessing your package json scripts. Maybe you just want to know what the right name to call is. For that jq is our friend.


Fast and dirty favicon

We’ve all been there. We need a favicon for our new shiny website, but its in the wrong bloody format. Legends across the internet have spoken of a tool. A single tool so mighty, it can handle any image, video or audio manipulation any young squire could possibly dream up. That tool... is ffmpeg.


Solid is Solid

πŸͺ– Solid in a good way. No more manually managing dependency arrays to trigger re-renders.


Farewell for now XMonad

For the last 3 months or so I've been using Xmonad on my Arch box. Its been greater. Its a super powerful window manager, with #limitlesspotential to do anything and everything you could want on a linux desktop ...but you have to have the skills to do it!


ABC's of Javascript - Apply, Bind & Call

Here's a super quick reference of how each of the confusing initially confusing JS function `apply` , `bind` & `call`


Damn you pango!

Today the unthinkable happened. On booting into my arch box, I couldn't open Firefox.


SSH me to Github

πŸ”₯ SSH randomly no longer wanting to work when pushing/pulling/fetching etc?


useLess useCallback

I found this `useCallback`Β in the one of the components at work. This is actually not needed.


The Quest For PWD In A Fresh Shell

πŸ”₯ I open a new shell. I'm greeted by the home directory. Dang! I wanted to be back in pwd. With the power of zsh on our side we will conquer this worthy challenge!


Focusing on inputs in react

🎯 Inputs can require focus... Focusing the user onto an input is usually pretty simple


Flattening nested objects

🎯 When your object has nested objected, sometimes you just need to flatten that s**t down!


Async Array.reduce

🎯 Handling async actions in a reduce function


Git Squash in style

πŸ”₯ Instructions on how to implement single commit branches


Releasing Podcasts

Despite its popularity, the technology which drives the world of podcasting is surprisingly archaic. Although it is true that there are paid services which abstract the nitty gritty of what is actually happening away from *you*, the podcast releaser. I'm sure there are many DIY-minded content producers who would prefer, like me, to go it alone and see the release of their product from start to finish (or just want to do it on the cheap and not pay a third-party service when you don't need to).