James R. Williams
  • Programmatic text formatting in Google Sheets with Google Apps Script

    As part of a recent side project I've been exploring ways to apply rich text formatting to Google Sheets programmatically. Google Workspace (previously G Suite) comes with an extensive suite of APIs for interacting with its products called Google…

    Read
  • Opacity in CSS hex color notation

    RRGGBBAA! What sounds like some guttural scream of a developer trying to vertically center something in a page without Flexbox, is actually a nifty new CSS property that is working its way into the specification in the form of CSS Color Module Level…

    Read
  • Migrating from Hugo to Gatsby

    Back in 2019 I made the decision to stop publishing my personal site on WordPress and move to static site generators in a hunt for their better performance, and the opportunity to use more modern technology. After a few failed attempts at fixing Ruby…

    Read
  • Camping at Grundy Lake Provincial Park

    For our second camping trip of 2020 we headed further north to Grundy Lake Provincial Park. A pleasant three-hour drive out of Toronto, towards Perry Sound in north(ish) Ontario. The weather held up as we arrived on Friday afternoon and set up camp…

    Read
  • Building my own PC

    With COVID-19 cancelling all my travel plans for the year, and finding myself with a lot more time on my hands I decided it was time to retire my old 2009 27" iMac. I had already moved all my side project work onto my new Points work laptop (a 1…

    Read
  • A CSS wheel of fortune

    A lot of what I do at Points is to bring to life small experiences to engage customers following some form of email or them arriving at our partner's storefronts. Recently a partner got in touch asking if we could do a "wheel of fortune" style…

    Read
  • Personal development goals for 2020

    2019 was a very good year for me. I went on two very exciting trips, one to Disney World, and later to Banff National Park, which was a lovely close to my first full year in Canada. On the professional front I got a fantastic job with the lovely…

    Read
  • A start to my General Transit Feed Specification project: GTFS to SQL

    I've recently came across General Transit Feed Specification (GTFS) files when looking for a way to build my own version of Go Transit's (terrible) website to look at train times. Turns out these are dense information files which are next to…

    Read
  • Fixing the PHPStorm command line launcher

    I use Jetbrains' PHPStorm as my primary editor for any digital project and have been since mid-2017. It's an all round solid editor, especially useful when working with WordPress projects and I've found it a bit more powerful than VSCode but one…

    Read
  • Stack Upgrade: Ditching google Chrome for Firefox Quantum

    From Google Chrome to Firefox Developer Edition With Google Chromes proposed changes to the WebRequest about to render ad blockers as we know them defunct I thought it was time I commit to switching to another browser for both work and personal use…

    Read
  • MacOS: Make TextEdit.app open new file on launch

    I use TextEdit a lot to format small snippets of text and code when formatting is not a concern for me. One of my biggest annoyances with this tiny application as how that it always opened to the "open file" dialog when I needed to quickly format…

    Read
  • MacOS: Creating a right click option to copy a file path

    Sometimes you just really need a file path. You've got a file open in Finder, and you just need the path. Ideally without going through the usual drag-and-drop into Terminal and/or take note of the file location then your way back. The goal. A…

    Read
  • Recreating the field set <legend> effect, just without the field set

    The Ask I had a dilemma. A seemingly simple design element that featured a line of text with a border starting from each end and stretching out to the edge of the container. Something like this: Note the background gradient. My first idea here would…

    Read
  • A wild Chrome extension appears

    Laziness is one of the three great virtues of a programmer. The other two virtues are impatience and hubris, read about them here, but that is not what I'm really worried about at here. Laziness, according to Larry Wall is: "The quality that makes…

    Read
  • I think I’ve survived my first winter in Canada!

    He says optimistically... The weeks are flying by for me here in Canada. It must be the cold weather and wishing summer was here, or that spring refuses to stick around for longer than a few hours. I've almost been here six months now so I thought it…

    Read
  • A deep dive into the console API

    I will be honest with you. I debug almost all of my Javascript with a million and one calls. I haven't been able to get very far into using a proper Javascript debugger system just yet, but I might not be alone. Brian Kernighan said: The most…

    Read
  • Fisticuffs with timezones in Javascript

    Today marks the day I had my first experience with the headache that is programming and timezones. I was working with a booking calendar for a service based in the UK, with me sat at my dinner table in Toronto, which is five hours (UTC-5 or EST…

    Read
  • JavaScript Encryption with RSA and AES

    Background A recent client project called for a bit of an exploration into client side encryption implementations. A first for me. A large (>1mb) JSON file needs to sent from a client angular.js application to a server, from there needs to be…

    Read
  • I emigrated to Canada!

    A little under three months ago, after a year or so of forms and online applications I left the UK, and landed in Canada as a new permanent resident! A move I had been thinking about since early 2016, but towards the end of 2017 I started the process…

    Read
  • Moving from WordPress to Hugo

    I have taken a move to rebuild my personal site in Hugo instead of WordPress! Why you ask? Why the heck not. I spend most of my professional life building WordPress sites for clients, why stop now. For me it was the danger of familiarity. When I…

    Read
  • CSS attribute selectors

    Target all images that have an empty tag A links without a attribute Bonus - Target pseudo selector For highlighting hash (#) links when they're active in the current URL fragment.

    Read
  • Getting started with SSH config

    This is rough personal reference for getting myself setup correctly for using SSH keys with git. Nothing worse than trying to git pull and it asks you for your password each time. First off, there are two files where SSH is configured depending on…

    Read
  • Autocomplete branch names on the command line

    Trying to get over the force of habit that is using tab to auto-complete things on Mac. Well, it does'nt work for git out of the box but here is a way to get it working on the command line. You can use this script as part of your in order to be able…

    Read
  • Fetch domain information in the command line

    Sometimes you need to fetch domain information on a domain to debug hosting/SSL etc. You can always use services such as MXToolbox to do this, however, there are a number of ways you can fetch domain information via the command-line. Here are a few…

    Read
  • Finding files by size with the command line

    If you just need to find large files, you can use  with the  option. The next command will list all files larger than 10 Megabytes: If you want to find files between a certain size, you can combine it with a size smaller than search. The next command…

    Read
  • Useful git commands

    This is a quick and dirty git cheat sheet of all the commands I frequently forget how to do with Git: See which remote is configured Stop tracking file permissions Debug Authentication Issues Find Unmerged Branches Export GitLog as a file Change…

    Read
  • Feature Flags WordPress Plugin

    I recently came across a new technique release technique while watching a YouTube video on Netflix’s DevOps. This new thing: Feature flags. A 'feature flag' (or feature toggle) is the ability to turn features of your application on/off. These toggles…

    Read
  • zxcvbn – A sensible password strength estimator

    Password requirements should get out of the user’s way. The often restrictive password requirements limiting users to a password of just 8 characters and forcing symbol use ignores one of the main parts of password security. Length. Bonus XKCD comic…

    Read
  • Long live the WordPress CLI

    My previous method of choice for migrating a site from a development URL to a production one was to open an SQL dump in my editor, find-and-replace all the instances of the URL (sans-protocol) and then upload the new SQL file to the server. The…

    Read
  • Terminal Aliases

    Aliases are nothing more than keyboard shortcuts or abbreviations, and although they’re a bit limited, they’re great for simple commands. Edit the file and add your alias, save and restart and boom, shortcuts! Projects Folder Symbolic links  for…

    Read
  • Postcardware

    The very talented people over at Spatie have a cool way to pay them back for their open source work. Postcards. I recently came across this while looking for a library to create those pesky “Add to calendar” links (a technology that still hasn’t been…

    Read
  • Zipping folder contents

    ZIP the contents of the current folder into a zip with it’s parent directory as it’s name. Useful for zipping just the contents without the folder parent folder. Zip the current directory into a folder called : Especially useful for proprietary email…

    Read
  • Quick Save (QS) – Side project

    During a recent project exploring Javascript encryption, I added an auto-save feature for the form fields so I didn’t need to constantly repast RSA keys and other configs into the page. I have expanded this into its own library (my first). I used…

    Read
  • Sending a variable as an attachment with PHP Mailer

    Recently I've been working on a on-boarding application for an agency client that involved some fallback processes if their CRM write failed. The client requested we send them an email with the form data attached as JSON, so they could manually…

    Read
  • .htaccess redirects scratchpad

    Redirects are a frequent request for me during my working day. Clients moving their sites around, sandbox projects changing domains and other such reasons often call for legacy URLs to be handled with care. While using  files slows down your Apache…

    Read
  • Git/SSH Keys Personal Cheat sheet

    GitHub Deploy Keys Create SSH Key: Set the git remote: Check Auth with username against GitHub: Echo out easy to copy-paste version of the public key: Get MD5 fingerprint of key A key fingerprint is a short sequence used to identify a larger key…

    Read
  • Article – Life as a Web Developer

    Towards the end of 2017 I was asked by the recruitment agency Adlib (who helped me land my job at Silver) to write an article as part of their “live as a” series. Every few weeks they publish a new article about positions they’ve been involved with…

    Read
  • Aside from work, what do you do?

    Whenever I hear someone asked “So aside from work, what do you do?” I cower. This question fills me with dread. Not that I get asked it that often. It is just that momentary panic. Trying to come up with two or three things I have done recently that…

    Read
  • Where was I when 2015 turned into 2016? Is that where I wanted to be?

    2015 was an interesting year for me, finally finished my undergraduate degree in Multimedia Web Design, graduating with a 2:1. More of a relief than anything. Other 2015 highlights of mine include: A successful trip to Cheltenham Races in March, My…

    Read
  • As long as human beings have the element of choice and exercise that element of choice, technology will stay the slave and man its master.

    The following is an essay I wrote during my University degree: As technology intersects more and more aspects of peoples lives is becoming more difficult to avoid the encroachment of technology into our lives. With an estimated 73% of adults in the…

    Read