Hi, I'm Elliot 👋
I’m a Software Engineer with a fascination for database systems, distributed systems and performance. I have a diverse background in software but currently work on decentralised finance in Elixir and Rust.Posts
- Let's Build a Proof of Concept Dynamic Image Generator with Elixir & Phoenix
- How to Write Custom Validations for Ecto Changesets
- SQLite and iOS: Advanced GRDB
- SQLite and iOS: Getting started with GRDB
- The UX of vague user input and educated guesses
- The scripts I use for blogging with Vim and Hugo
- Upgrading my Hackintosh from El Capitan to High Sierra
- How to group posts by date Daring Fireball style in Hugo
- Introducing Snooker: Lightweight spam detection for blog comments
- How to show the full post unless there’s a user defined summary in Hugo
- Google Drive and Hugo: The new publishing setup for this blog
- How to find an available TCP port in Rust
- Receiving 3rd party webhooks on a locally hosted web app
- Handling optional trailing commas in macro_rules!
- Introducing iron-middlefiddle: Route specific middleware made easy in Iron
- DeltaE 0.2.0
- Setting Iron’s response MIME type with middleware
- Now in beta: DeltaE – a library for quantifying the difference between two colors
- A workaround for box-shadow not passing through to the inside of a border
- How to seed a Postgres database with Knex
- How to set up environment varying code in your Rust web app
- MVC mappings for CtrlP
- Saving users a click with autofocus
- Hashing sensitive data in Rust with argon2rs
- Deleting the contents of a directory in Rust
- Matching, saving and replacing text with the regex crate
- How CSS selector specificity is calculated
- The building blocks of a healthy community
- Screencast #2: A tour of my .vimrc
- “Write a Fahrenheit to Celsius converter in Rust” solution
- Moving lines of code around in Vim
- Tracking commits to a GitHub repo with RSS
- Dynamic input values, .value and .getAttribute(‘value’)
- Improving webfont performance with FontFaceObserver and sessionStorage
- Screencast #1: How I manage my dotfiles with GitHub
- Configuration for a cleaner command history in ZSH
- Conditionals and regular expressions in Javascript
- jQuery to pure JS: Target each direct child of an element
- How to stop Javascript from running until an iFrame’s DOM is ready
- Jekyll: Create a list of all posts in the same category
- Jekyll: Display the full post unless a custom excerpt is specified
- Guard clauses in Javascript
- Now serving over HTTPS and HTTP2
- Setup CtrlP to use ripgrep in Vim
- Sorting lines in Vim
- jQuery to pure JS: Event listeners on dynamically created elements
- Search through a full text index of your browsing history with Falcon
- Using ripgrep and fzf instead of The Silver Searcher and CtrlP in Vim
- Deploy Middleman 4 to GitHub Pages
- How to switch from rvm to rbenv
- Better find and replace in Vim
- Readership branding WIP
- Greener Grass
- Specify: Quickly generate a shape with specific dimensions in Sketch
- Faster layer renaming in Photoshop
- My iOS to Mac screenshot workflow
- Save for Web in Photoshop CC 2015
- Quick Export in Photoshop CC 2015
- A post WWDC link roundup
- Advice for developers getting into design
- Collapse folders and styles after running Bjango Actions
- On hearing and accessibility
- Remove the default gradient background in ZBrush 4R7
- Let’s breakdown the ‘Save in Ember’ browser extension
- How to copy an RGB value in Photoshop
- The end of an era for Land Rover
- How to Create High Resolution ICNS Files
- A Guide to Optimising Photoshop Performance
- 300,000×300,000 pixel Photoshop files
- How to Export SVGs from Photoshop
- Designing Apps for the Visually Impaired
- Working with Type in Photoshop
- A Guide to Pixel Hinting