Ramblings and musings
Articles and Other Writing by Ryan McGrath
Organized by year. Questions? Feel free to email me.
Posts from 2024
UUIDv7 TypeIDs in Diesel
Integrating UUIDv7-based TypeIDs as a custom Diesel type.
ORM-ish Diesel Helpers
Diesel isn't exactly an ORM, but a few helpers get us kind of there. Ish.
Pagination in Async Diesel
A short-ish snippet that might help you avoid a headache.
Plant-Based Berlin Recommendations
A small guide to plant-based eating in Berlin.
Posts from 2021
DriverKit, /Applications, and Quarantine
Your app is in /Applications, but DriverKit says it's not? It might be quarantined.
Debugging Broken Signed/Notarized Apps on macOS
Sealed resource is missing or broken? Find out why.
Cacao: Building macOS (and iOS) Apps in Rust
You can pry Objective-C out of my cold, dead hands.
Posts from 2020
What Melee Gave Me
A game that means more to me than I could possibly convey.
You Did Not EARN IT
Petition your Representatives to vote against the EARN IT act.
Wobbling in Rust
Writing slightly dangerous code in Rust that (literally, mostly) will not die.
Posts from 2019
Decoupling, or: where's my data?
Couple was an app for significant others to chat with. It's 2019 - where's the data?
Automatic Old Reddit Redirect Safari Extension
Miss the old Reddit in Safari? This extension can help.
On Sign-In with Apple
An amazing product with features many seem to be missing.
Vim, ALE, Docker, and Per-Project Linting
How to make ALE use python/flake8 in Docker without running Vim over SSH.
Rust, Cargo, lcrypto/OpenSSL, Mac, and You
OpenSSL on Mac is a weird mess, and it can make compiling Rust programs annoying. This is a short guide to help.
Dynamic Images in iOS Push Notification Extensions
A guide to rendering dynamic images in push notification extensions for iPhone and iPad.
Using a Custom JSONEncoder for Pandas and Numpy
Serialization that plays nicely together.
Posts from 2018
My 2018 Reading List
An end-of-year look at what I read, and what I recommend.
Forcing PNG for Twitter Profile Photos
How to ensure your images are crisp and clear on Twitter.
Swipeable NSCollectionView
A look at how swipe-to-reveal can be implemented in NSCollectionView.
Rust, or: What's the Deal with GUIs?
Exploring what a GUI API could look like in Rust.
Posts from 2016
A Deep Dive into PL/v8
A look at how to use JavaScript in PostgreSQL via PL/v8.
Posts from 2015
RedNoise, a Django-centric WhiteNoise addon
An open-source project that extends Whitenoise.
Posts from 2014
Recording Live Audio Streams on iOS
A guide to using MTAudioProcessingTap to record tricky audio.
Posts from 2013
We are the New Blue Collar
Archived commentary on the rise of the learn-to-code movement.
Posts from 2012
Where is Ryan now? (tl;dr: Quit myGengo)
Archived rantings about my life.
Posts from 2011
Using Javascript to control the Nintendo Wii
A guide to writing JavaScript for the Opera browser on the Nintendo Wii.
Using the myGengo Translation API with Python
A tutorial on using the myGengo (Gengo) API for human-powered translation.
More Power to ExpressionEngine URLs
A breakdown of extending ExpressionEngine 2 for some crazy URL structures.
Emitting Custom Events in Node.js
A short guide to using EventEmitter in Node.js
Hacking the Human Brain
Experiments with language learning, memorization, and Android.
The Everlasting Fight To Expand My Metaphorical Sight (Part 2)
Archived rantings about my life.
Posts from 2010
The Everlasting Fight To Expand My Metaphorical Sight (Part 1)
Archived rantings about my life.
Emulating Ruby's "method_missing" in Python
An amusing hack using getter overriding.
How to properly ask a girl to Homecoming
A small game to pop a question.
...and what's the deal with San Francisco? (along with my travels)
Archived rantings about my life.
On Date/Time/DateTime in Ruby, and why they suck
Porting relative datetime utils out of Rails.
Rendering emails with Django templates
Using the Django template engine to render HTML emails.
You got your Base64 in my CSS!
Tricking IE6 and IE7 into rendering base64-encoded images.
Quit incorrectly passing functions in Javascript
Demonstrating how to pass function references in JavaScript to avoid closure-inception.
jQuery Introduction, Refresh Fred May 2010
A presentation on jQuery given for Refresh Fred in 2010.
Interviewing for front-end development
A sample test for interviewing frontend developers.
Posts from 2008
Open source programming languages for kids
Archived review that looks at programming environments for children. Originally posted at Linux.com.
Supercharge Firebug
Archived review that looks at tools for FireBug, the original browser developer tool. Originally posted at Linux.com.
Posts from 2007
Easy blogging with Pivot
An archived review of a PHP blogging engine. Originally written for Linux.com.
Keep users informed with PHPList
An archived review of a mailing list project. Originally written for Linux.com.
Simple polling with LimeSurvey
A review of a software project for running polls. Originally written for Linux.com.
Review: Moneydance 2007
A review of Moneydance, a personal finance software project. Originally written for Linux.com.
Review: Dreamlinux 2.2
A review of DreamLinux 2.2, originally written for Linux.com.
Easy discussions with Simple Machines Forums
An archived review of a forum system. Originally written for Linux.com.
Posts from 2006
KToon: Simple 2D animation
A review of KToon, an animation software project for Linux. Originally written for Linux.com.
Posts from 2005
Kino makes video editing simple
A review of movie-editing software for Linux. Originally written for Linux.com.
My Workstation OS: VidaLinux
A review of VidaLinux, a Gentoo fork. Originally written for Linux.com.