41554 blogs · [ { "id": "01a087d9-f3b4-7125-81bd-570c00386514", "title": "Forgejo index.js woes", "url": "https://rymc.io/blog/2025/forgejo-gitea-fix-indexjs/", "published_at": "2025-05-21T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c00cc41db", "title": "Connecting tokio-postgres over an SSH tunnel", "url": "https://rymc.io/blog/2025/tokio-postgres-over-ssh/", "published_at": "2025-04-29T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c0189b9f7", "title": "UUIDv7 TypeIDs in Diesel", "url": "https://rymc.io/blog/2024/uuidv7-typeids-in-diesel/", "published_at": "2024-07-10T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c01a7e001", "title": "ORM-ish Diesel Helpers", "url": "https://rymc.io/blog/2024/orm-ish-diesel-helpers/", "published_at": "2024-07-09T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c02004fd4", "title": "Pagination in Async Diesel", "url": "https://rymc.io/blog/2024/pagination-in-diesel-async/", "published_at": "2024-05-10T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c0292166a", "title": "Plant-Based Berlin Recommendations", "url": "https://rymc.io/blog/2024/plant-based-berlin-recs/", "published_at": "2024-01-15T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c02b6e474", "title": "DriverKit, /Applications, and Quarantine", "url": "https://rymc.io/blog/2021/macos-driverkit-applications-quarantine/", "published_at": "2021-09-15T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c03286da4", "title": "Debugging Broken Signed/Notarized Apps on macOS", "url": "https://rymc.io/blog/2021/macos-app-signing-notarizing-failure-debugging/", "published_at": "2021-06-24T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c03a9c82a", "title": "Cacao: Building macOS (and iOS) Apps in Rust", "url": "https://rymc.io/blog/2021/cacao-rs-macos-ios-rust/", "published_at": "2021-06-10T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c03e1d36b", "title": "What Melee Gave Me", "url": "https://rymc.io/blog/2020/what-melee-gave-me/", "published_at": "2020-11-20T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c04bfaf6b", "title": "You Did Not EARN IT", "url": "https://rymc.io/blog/2020/you-did-not-EARN-IT/", "published_at": "2020-03-15T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c05b9deb9", "title": "Wobbling in Rust", "url": "https://rymc.io/blog/2020/wobbling-in-rust/", "published_at": "2020-01-01T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c06733f67", "title": "Decoupling, or: where's my data?", "url": "https://rymc.io/blog/2019/decoupling/", "published_at": "2019-12-07T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c06bfde87", "title": "Automatic Old Reddit Redirect Safari Extension", "url": "https://rymc.io/blog/2019/old-reddit-safari-redirect-extension/", "published_at": "2019-08-01T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c06cf427b", "title": "On Sign-In with Apple", "url": "https://rymc.io/blog/2019/on-sign-in-with-apple/", "published_at": "2019-06-05T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c0781f0cb", "title": "One Last Ride", "url": "https://rymc.io/blog/2019/one-last-ride/", "published_at": "2019-05-15T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c07b1d4cd", "title": "Vim, ALE, Docker, and Per-Project Linting", "url": "https://rymc.io/blog/2019/vim-ale-docker-per-project-linting/", "published_at": "2019-03-07T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c08479127", "title": "Rust, Cargo, lcrypto/OpenSSL, Mac, and You", "url": "https://rymc.io/blog/2019/rust-cargo-lcrypto-openssl-mac-and-you/", "published_at": "2019-02-18T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c08e16c78", "title": "Dynamic Images in iOS Push Notification Extensions", "url": "https://rymc.io/blog/2019/dynamic-images-in-ios-push-notification-extensions/", "published_at": "2019-01-31T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c0998ed9b", "title": "Using a Custom JSONEncoder for Pandas and Numpy", "url": "https://rymc.io/blog/2019/using-a-custom-jsonencoder-for-pandas-and-numpy/", "published_at": "2019-01-02T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c09cf85cb", "title": "My 2018 Reading List", "url": "https://rymc.io/blog/2018/my-2018-reading-list/", "published_at": "2018-12-31T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c0aa6a387", "title": "Forcing PNG for Twitter Profile Photos", "url": "https://rymc.io/blog/2018/forcing-png-for-twitter-profile-photos/", "published_at": "2018-12-18T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c0ae005db", "title": "Swipeable NSCollectionView", "url": "https://rymc.io/blog/2018/swipeable-nscollectionview/", "published_at": "2018-12-03T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c0af0040c", "title": "Rust, or: What's the Deal with GUIs?", "url": "https://rymc.io/blog/2018/rust-or-whats-the-deal-with-guis/", "published_at": "2018-06-29T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c0b7f6b63", "title": "A Deep Dive into PL/v8", "url": "https://rymc.io/blog/2016/a-deep-dive-into-plv8/", "published_at": "2016-03-22T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c0c25db07", "title": "RedNoise, a Django-centric WhiteNoise addon", "url": "https://rymc.io/blog/2015/rednoise-a-django-centric-whitenoise-addon/", "published_at": "2015-06-04T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c0c8a5ffb", "title": "Recording Live Audio Streams on iOS", "url": "https://rymc.io/blog/2014/recording-live-audio-streams-on-ios/", "published_at": "2014-01-08T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c0caf91f8", "title": "We are the New Blue Collar", "url": "https://rymc.io/blog/2013/we-are-the-new-blue-collar/", "published_at": "2013-04-10T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c0d19ef3c", "title": "Where is Ryan now? (tl;dr: Quit myGengo)", "url": "https://rymc.io/blog/2012/where-is-ryan-now-tldr-quit-mygengo/", "published_at": "2012-04-08T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c0d90f55b", "title": "Using Javascript to control the Nintendo Wii", "url": "https://rymc.io/blog/2011/using-javascript-to-control-the-nintendo-wii/", "published_at": "2011-08-15T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c0e0a480e", "title": "Using the myGengo Translation API with Python", "url": "https://rymc.io/blog/2011/using-the-mygengo-translation-api-with-python/", "published_at": "2011-05-31T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c0e2e39af", "title": "More Power to ExpressionEngine URLs", "url": "https://rymc.io/blog/2011/when-expressionengine-defaults-are-not-enough/", "published_at": "2011-05-07T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c0e73e186", "title": "Emitting Custom Events in Node.js", "url": "https://rymc.io/blog/2011/emitting-custom-events-in-node-js/", "published_at": "2011-04-16T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c0e9e0396", "title": "Hacking the Human Brain", "url": "https://rymc.io/blog/2011/hacking-the-human-brain/", "published_at": "2011-03-06T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c0f1a8fcc", "title": "The Everlasting Fight To Expand My Metaphorical Sight (Part 2)", "url": "https://rymc.io/blog/2011/the-everlasting-fight-to-expand-my-metaphorical-sight-part-2/", "published_at": "2011-02-07T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c1002c88f", "title": "The Everlasting Fight To Expand My Metaphorical Sight (Part 1)", "url": "https://rymc.io/blog/2010/everlasting-fight-travel/", "published_at": "2010-12-05T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c10c2c2e1", "title": "Emulating Ruby's \"method_missing\" in Python", "url": "https://rymc.io/blog/2010/emulating-rubys-method_missing-in-python/", "published_at": "2010-11-02T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c113e622c", "title": "How to properly ask a girl to Homecoming", "url": "https://rymc.io/blog/2010/how-to-properly-ask-a-girl-to-homecoming/", "published_at": "2010-10-14T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c120582ee", "title": "...and what's the deal with San Francisco? (along with my travels)", "url": "https://rymc.io/blog/2010/and-whats-the-deal-with-san-francisco-along-with-my-travels/", "published_at": "2010-10-06T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c12f42cbf", "title": "Moving right along...", "url": "https://rymc.io/blog/2010/moving-right-along/", "published_at": "2010-08-02T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c13eb7987", "title": "On Date/Time/DateTime in Ruby, and why they suck", "url": "https://rymc.io/blog/2010/on-datetimedatetime-in-ruby-and-why-they-suck/", "published_at": "2010-07-18T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c149d68ce", "title": "The perception of \"Inception\"", "url": "https://rymc.io/blog/2010/the-perception-of-inception/", "published_at": "2010-07-18T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c157f9cdd", "title": "Rendering emails with Django templates", "url": "https://rymc.io/blog/2010/rendering-emails-from-django-templates/", "published_at": "2010-07-13T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c15c809cd", "title": "You got your Base64 in my CSS!", "url": "https://rymc.io/blog/2010/you-got-your-base64-in-my-css/", "published_at": "2010-06-17T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c166845ea", "title": "Quit incorrectly passing functions in Javascript", "url": "https://rymc.io/blog/2010/quit-incorrectly-passing-functions-in-javascript/", "published_at": "2010-06-09T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c1691e2a1", "title": "jQuery Introduction, Refresh Fred May 2010", "url": "https://rymc.io/blog/2010/jquery-introduction-refresh-fred-may-2010/", "published_at": "2010-05-13T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c1701ea1d", "title": "Time for a revival", "url": "https://rymc.io/blog/2010/time-for-a-revival/", "published_at": "2010-05-10T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c17179cb1", "title": "Interviewing for front-end development", "url": "https://rymc.io/blog/2010/interviewing-for-front-end-development/", "published_at": "2010-01-25T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c17babbcc", "title": "Open source programming languages for kids", "url": "https://rymc.io/blog/2008/open-source-programming-languages-for-kids/", "published_at": "2008-12-19T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c1898585d", "title": "Supercharge Firebug", "url": "https://rymc.io/blog/2008/supercharge-firebug/", "published_at": "2008-09-15T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c190128de", "title": "Easy blogging with Pivot", "url": "https://rymc.io/blog/2007/easy-blogging-with-pivot/", "published_at": "2007-09-18T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c1944b229", "title": "Keep users informed with PHPList", "url": "https://rymc.io/blog/2007/keep-users-informed-with-phplist/", "published_at": "2007-07-31T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c19fbbc14", "title": "Simple polling with LimeSurvey", "url": "https://rymc.io/blog/2007/simple-polling-with-limesurvey/", "published_at": "2007-06-05T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c1adeccd1", "title": "Review: Moneydance 2007", "url": "https://rymc.io/blog/2007/review-moneydance-2007/", "published_at": "2007-05-02T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c1bd716fe", "title": "Review: Dreamlinux 2.2", "url": "https://rymc.io/blog/2007/review-dreamlinux-2-2/", "published_at": "2007-03-27T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c1c93a634", "title": "Easy discussions with Simple Machines Forums", "url": "https://rymc.io/blog/2007/easy-discussions-with-simple-machines-forums/", "published_at": "2007-01-17T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c1d3bcc6b", "title": "KToon: Simple 2D animation", "url": "https://rymc.io/blog/2006/ktoon-simple-2d-animation/", "published_at": "2006-09-14T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c1dd49deb", "title": "Kino makes video editing simple", "url": "https://rymc.io/blog/2005/kino-makes-video-editing-simple/", "published_at": "2005-08-19T00:00:00+00:00" }, { "id": "01a087d9-f3b4-7125-81bd-570c1e2b991b", "title": "My Workstation OS: VidaLinux", "url": "https://rymc.io/blog/2005/my-workstation-os-vidalinux/", "published_at": "2005-04-29T00:00:00+00:00" } ] posts Claim your blog
Back to Ryan McGrath
Blog · corpus.blog/blogs/rymc.io/posts

Ryan McGrath

rymc.io

2025

2024

2021

2020

2019

2018

2016

2015

2014

2013

2012

2011

2010

2008

2007

2006

2005