create-react-app Gitlab Page template

I regularly complete little side projects in React - normally convenience shortcuts or data visualisation projects. My preferrred deployment platform for such static sites is Gitlab Pages, as it allows for flexible builds, and I can use custom SSL certificates so that I don’t need to terminate my SSL with Cloudflare. Here is the template I use to build my...

GWRC Matangi Train Numbering System

Note: This numbering system is known as “TMS” (even though TMS stands for “Traffic Management System”) of which the numbering system is just a small, bespoke part. I travel on the Greater Wellington Metlink transit system nearly every weekday, and am often curious about what train I happen to be travelling on. I was recently checking out the Wikipedia page...

Bash/Zsh shell expansion

Shell expansion is an incredibly handy shortcut. Previously to today, I’ve only ever used glob (*), which will expand to include all directories and files within the glob scope (e.g. * would list all files and directories in the current directory, test/* would list all files and directories in test/). There are more though! Today I’m covering { range }...

Paste mode in VIM

A VIM mode I did not know about for quite some time during my VIM usage is “paste” mode. This mode doesn’t do much, but is invaluable if you are moving code around, copy and pasting between files outside vim. Paste mode can be activated using set :paste and deactivated with set :nopaste. This mode by default simply deactivates autoindentation,...

Splitting large CSV files with awk

I recently learned of a useful technique when processing large text files that have a consistent separator using awk. awk is a text processing programming language dating all the way back from 1977. While the format string passed to awk technically represents a full programming language, it is most typically used directly from the command line or from shell scripts....

Relatively elegant ActiveRecord create callbacks

ActiveRecord callbacks are pretty popular in the Rails community, but they do have pitfalls. Probably the most significant one is that the responsibilities of a model can creep quite a lot once callbacks begin getting defined. Callbacks can also be hard to test, since they are triggered under a range of conditions, and have multiple phases per condition (before/around/after initialize,...

Javascript based file downloads in IE9

Getting feature parity on Internet Explorer is never very fun, or easy. I recently worked on a project where we needed to support inline downloads - specifically, a generated CSV string, as a file in all greenfields browsers as well as IE9-11. Fortunately, IE 10 and 11 support the Blob API, which make downloads pretty simple using the ‘msSaveBlob` non-standard...

Trip Report: East Holdsworth Loop

This trip report covers a fantastic day loop that I found to be a little under-documented when researching - especially the East Holdsworth track, which has become one of my favourite Tararua tracks. Started: 9:15am from Holdsworth Carpark Finished: 4:50pm at Holdsworth Carpark Times: 1hr up Atiwhakatu Track 2.75hrs up East Holdsworth Track 20min to Mount Holdsworth Summit 30min from...

Internationalised ActionMailer Subjects

I’m a big fan of keeping strings out of my application code. It’s a pattern I first came across with Android string resources, and since then I’ve been using tools just like the i18n gem to abstract content away from code. Something mentioned directly in the Rails I18n guides that I really like to see used myself is the built-in...

My understanding of CSS units

I was listening to Episode #107 of the Syntax Podcast this afternoon, which covered CSS units, and was inspired to actually stop and think about how I use units when writing CSS. I felt pretty reassured that generally my approach is in line with what Wes and Scott were discussing. Let’s go! rem I use rem by default for most...