41554 blogs · [ { "id": "01a08770-3ac5-70f5-bc0c-9aa883310a0b", "title": "Idle coding", "url": "https://duan.ca/2026/01/24/idle-coding/", "published_at": "2026-01-24T19:52:04+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa8840095d0", "title": "TOMLDecoder Is Now Faster Than C (Thanks to AI)", "url": "https://duan.ca/2026/01/01/TOMLDecoder-Is-Faster-Than-C/", "published_at": "2026-01-01T19:07:05+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa884c57fb2", "title": "TOMLDecoder 0.4 is 800% Faster", "url": "https://duan.ca/2025/12/10/TOMLDecoder-0.4.1/", "published_at": "2025-12-11T01:44:34+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa8855b2522", "title": "Padding a Squircle in FreeCAD 1.0", "url": "https://duan.ca/2025/06/15/padding-a-squircle/", "published_at": "2025-06-16T00:00:00+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa885e05da1", "title": "GRPC Status With Error Details in Swift", "url": "https://duan.ca/2025/01/25/grpc-status-with-details-in-swift/", "published_at": "2025-01-26T03:53:30+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa88696acbf", "title": "Notes on Using the MLIR C API in Swift", "url": "https://duan.ca/2024/08/swift-mlir-cmake/", "published_at": "2024-09-01T01:44:48+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa8874fc735", "title": "AI Coding", "url": "https://duan.ca/2023/03/27/ai-coding/", "published_at": "2023-03-28T03:10:14+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa887833d87", "title": "Don't Say That", "url": "https://duan.ca/2023/03/11/do-not-say-that/", "published_at": "2023-03-12T06:03:03+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa887977f50", "title": "The Qualia that was Coding", "url": "https://duan.ca/2023/03/03/qualia-that-was-coding/", "published_at": "2023-03-04T07:42:34+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa88798f90a", "title": "The Lazy Programmer's Guide to Single-user Mastodon", "url": "https://duan.ca/2022/12/10/lazy-mastodon/", "published_at": "2022-12-11T02:21:11+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa887b281d5", "title": "The Social Graph", "url": "https://duan.ca/2022/11/20/the-social-graph/", "published_at": "2022-11-20T21:06:48+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa88889991f", "title": "Control", "url": "https://duan.ca/2022/06/22/control/", "published_at": "2022-06-22T20:13:09+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa88922d9d5", "title": "Pro-Science, Anti Research", "url": "https://duan.ca/2022/05/20/pro-science-yet-anti-research/", "published_at": "2022-05-20T22:33:25+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa88957aa2c", "title": "Visceral", "url": "https://duan.ca/2022/04/26/visceral/", "published_at": "2022-04-26T17:42:58+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa889a64c24", "title": "Using Instruments on Non-macOS, Non-iOS Executables", "url": "https://duan.ca/2022/03/31/instrumenting-commandline-executables/", "published_at": "2022-04-01T03:39:05+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa88a31f0fb", "title": "Flake For Non-Nix Projects", "url": "https://duan.ca/2022/03/19/nix-dirnev/", "published_at": "2022-03-19T07:37:01+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa88a6e46e6", "title": "Flake, Home Manager, and Extra Packages", "url": "https://duan.ca/2022/03/15/standalone-home-manager-flake-channels/", "published_at": "2022-03-16T01:53:59+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa88b1c5772", "title": "An Invisible Chasm", "url": "https://duan.ca/2022/02/17/invisible-chasm/", "published_at": "2022-02-17T21:40:27+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa88b3cd28f", "title": "Building IndexStoreDB on Linux: The Portable Technique", "url": "https://duan.ca/2022/02/09/building-indexstoredb-on-linux/", "published_at": "2022-02-09T23:58:41+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa88b3dbc83", "title": "Making of a TOML parser", "url": "https://duan.ca/2021/01/03/human-grade-toml-parser-in-swift/", "published_at": "2021-01-03T22:56:10+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa88bbaae64", "title": "Installing Nix on macOS 11 Big Sur", "url": "https://duan.ca/2020/12/13/nix-on-macos-11-big-sur/", "published_at": "2020-12-13T20:00:52+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa88cb3ab7b", "title": "Markra 1.0", "url": "https://duan.ca/2020/11/22/marka/", "published_at": "2020-11-22T20:53:52+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa88d651151", "title": "Fantastic Beasts in C and Where To Find Them in Swift", "url": "https://duan.ca/2020/09/12/fantastic-c-beasts-and-where-to-find-them-in-swift/", "published_at": "2020-09-13T06:11:48+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa88da9eff8", "title": "Faster C Strings in Swift", "url": "https://duan.ca/2020/09/09/free-c-strings/", "published_at": "2020-09-09T08:21:26+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa88e979ce5", "title": "Fall Guys are Among Us", "url": "https://duan.ca/2020/08/16/fall-guys-and-among-us/", "published_at": "2020-08-17T06:42:44+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa88f8d7603", "title": "Taking Screenshots On Linux", "url": "https://duan.ca/2020/06/18/taking-linux-screenshots/", "published_at": "2020-06-18T20:22:01+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa8904b8e8e", "title": "StreamLogger", "url": "https://duan.ca/2020/06/13/stream-logger/", "published_at": "2020-06-13T19:36:55+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa890edea3b", "title": "Introducing Dye", "url": "https://duan.ca/2020/06/01/dye/", "published_at": "2020-06-01T22:08:01+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa89186bbeb", "title": "Naive NixOS Rust Development", "url": "https://duan.ca/2020/05/07/nix-rust-development/", "published_at": "2020-05-07T18:04:58+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa891a8a533", "title": "Site Improvements 2020", "url": "https://duan.ca/2020/04/22/site-improvements-2020/", "published_at": "2020-04-23T04:58:03+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa891c3e011", "title": "Git Commit Message, Vim, and Markdown", "url": "https://duan.ca/2020/04/13/git-commit-comment/", "published_at": "2020-04-13T20:41:02+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa892696f22", "title": "On the Subject of Interface Hygiene", "url": "https://duan.ca/2019/07/01/combine-hygiene/", "published_at": "2019-07-02T03:22:48+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa892ea65bd", "title": "TOML Decoder Playlist", "url": "https://duan.ca/2019/03/10/toml-decoder/", "published_at": "2019-03-11T03:32:37+00:00" }, { "id": "01a08770-3ac5-70f5-bc0c-9aa8938bba6c", "title": "Kick-ass CLI Tools In Swift", "url": "https://duan.ca/2019/01/20/kick-ass-cli-tools-in-swift/", "published_at": "2019-01-21T00:09:38+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d8c05ceb4", "title": "Magical Interactions", "url": "https://duan.ca/2018/09/01/magical-interaction/", "published_at": "2018-09-01T18:08:57+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d8ceeec5d", "title": "A Tale of Two Dates", "url": "https://duan.ca/2018/08/25/a-tale-of-two-dates/", "published_at": "2018-08-26T00:11:43+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d8d7dc607", "title": "Supporting Foundation.Data Without Depending On It", "url": "https://duan.ca/2018/08/18/supporting-data-without-depending-on-it/", "published_at": "2018-08-18T18:00:41+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d8d93e131", "title": "Unix File Permissions In Swift", "url": "https://duan.ca/2018/05/06/unix-file-permissions-in-swift/", "published_at": "2018-05-06T23:43:20+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d8e183aca", "title": "An Interpreter Without A Language", "url": "https://duan.ca/2018/01/30/an-interpreter-without-a-language/", "published_at": "2018-01-30T20:53:38+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d8e736629", "title": "Scopes Without A Language", "url": "https://duan.ca/2018/01/20/scopes/", "published_at": "2018-01-21T03:50:24+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d8eaaf9ad", "title": "Coding Without A Language", "url": "https://duan.ca/2018/01/13/coding-without-a-language/", "published_at": "2018-01-13T20:07:19+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d8eb74708", "title": "Scripting A 'cat' Under 1 Minute", "url": "https://duan.ca/2018/01/06/cat-under-1-minute/", "published_at": "2018-01-07T02:34:39+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d8f70b81e", "title": "Raw Coding Sessions", "url": "https://duan.ca/2018/01/06/raw-coding-session-videos/", "published_at": "2018-01-06T22:44:13+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d8fbcad3e", "title": "Hello World In WebAssembly", "url": "https://duan.ca/2017/12/30/hello-world-in-webassembly/", "published_at": "2017-12-31T02:43:49+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d9005067e", "title": "Building 'pwd' Under 1 Minute In Swift", "url": "https://duan.ca/2017/12/27/building-pwd-under-1-minute-in-swift/", "published_at": "2017-12-27T09:13:07+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d9092a0fe", "title": "Contributing To Open-Source Swift", "url": "https://duan.ca/2017/12/23/contributing-to-open-source-foundation/", "published_at": "2017-12-23T21:21:10+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d90bd555e", "title": "Smart Color Invert And Your iOS Apps", "url": "https://duan.ca/2017/12/20/smart-invert-support-for-you-app/", "published_at": "2017-12-20T21:17:44+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d9117deeb", "title": "BitArray The Final Act", "url": "https://duan.ca/2017/12/19/bitarray-final-act/", "published_at": "2017-12-19T20:17:49+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d91763603", "title": "Making An Open-Source Swift Project", "url": "https://duan.ca/2017/12/17/making-an-open-source-swift-project/", "published_at": "2017-12-18T05:24:43+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d91f3bfbd", "title": "Let's Build A BitArray In Swift", "url": "https://duan.ca/2017/12/12/lets-build-a-bitarray-in-swift/", "published_at": "2017-12-13T06:51:04+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d92810597", "title": "List Comprehension In Swift", "url": "https://duan.ca/2017/12/09/list-comprehension-in-swift/", "published_at": "2017-12-09T20:26:30+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d934eb410", "title": "Building Swift Projects In Source Compatibility Mode", "url": "https://duan.ca/2017/05/22/build-in-swift-compatibility-mode/", "published_at": "2017-05-22T16:04:01+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d93b98ec3", "title": "Replying To Old Mailing List Threads", "url": "https://duan.ca/2017/02/07/replying-to-old-mailing-list-threads/", "published_at": "2017-02-07T18:21:19+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d945e3823", "title": "Site Improvements", "url": "https://duan.ca/2017/01/16/site-changes/", "published_at": "2017-01-17T07:24:13+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d94d22b66", "title": "Making TUI Applications In Swift", "url": "https://duan.ca/2016/12/26/making-tui-programs-in-swift/", "published_at": "2016-12-27T05:39:05+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d959f5638", "title": "Rebase And Sign Multiple Git Commits", "url": "https://duan.ca/2016/12/24/rebase-multiple-git-commits-with-signing/", "published_at": "2016-12-24T09:31:14+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d96737dee", "title": "How To Omit Needless Words", "url": "https://duan.ca/2016/10/22/how-to-omit-needless-words/", "published_at": "2016-10-23T00:08:41+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d973b1e7a", "title": "Distribution Tests", "url": "https://duan.ca/2016/10/10/distribution-tests/", "published_at": "2016-10-10T17:34:49+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d97bfe10f", "title": "A Case For OOP?", "url": "https://duan.ca/2016/05/19/a-case-for-oop/", "published_at": "2016-05-19T19:03:02+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d97f0162f", "title": "Cheap Orders", "url": "https://duan.ca/2016/05/15/cheap-orders/", "published_at": "2016-05-16T00:42:27+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d98ae816e", "title": "Deploy Jekyll Site To Github With Make", "url": "https://duan.ca/2016/05/15/deploy-jekyll-to-github/", "published_at": "2016-05-15T08:00:00+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d9934798c", "title": "char ** in Swift", "url": "https://duan.ca/2015/11/01/char-star-star-in-swift/", "published_at": "2015-11-01T19:18:40+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d99a5a1de", "title": "Let's Play LLVM in Swift: Setup", "url": "https://duan.ca/2015/10/25/lets-play-llvm-in-swift-setup/", "published_at": "2015-10-25T18:53:15+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d9a7ab61a", "title": "Swift Algebraic Data Types", "url": "https://duan.ca/2015/07/12/swift-algebraic-data-types/", "published_at": "2015-07-12T22:51:27+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d9aa9bfab", "title": "Dynamic Swift Framework Without Xcode", "url": "https://duan.ca/2015/07/05/dynamic-swift-framework-without-xcode/", "published_at": "2015-07-06T05:36:09+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d9b262634", "title": "Let's Build A 'cat' In Swift 2", "url": "https://duan.ca/2015/07/04/lets-build-a-cat-in-swift-2/", "published_at": "2015-07-05T03:56:19+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d9b2c9de6", "title": "NeoVim, Swift and Make", "url": "https://duan.ca/2015/04/22/neovim-swift-and-make/", "published_at": "2015-04-22T18:46:17+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d9b3d5b1b", "title": "Swift Function Fun Facts", "url": "https://duan.ca/2015/04/18/swift-function-fun-facts/", "published_at": "2015-04-18T23:20:16+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d9b470707", "title": "When Default Parameter Values Fall Short In Swift", "url": "https://duan.ca/2015/04/18/when-default-parameter-values-fall-short-in-swift/", "published_at": "2015-04-18T08:00:00+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d9b92ee1d", "title": "The Two Swifts", "url": "https://duan.ca/2015/02/10/the-two-swifts/", "published_at": "2015-02-10T18:50:16+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d9bfe5b64", "title": "My Xcode 6.2 And 6.3 Prediction", "url": "https://duan.ca/2015/02/10/my-xcode-62-and-63-prediction/", "published_at": "2015-02-10T10:09:50+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d9c5de7cc", "title": "Build And Run iOS Apps In Commmand Line", "url": "https://duan.ca/2015/02/07/build-and-run-ios-apps-in-commmand-line/", "published_at": "2015-02-08T04:35:02+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d9c892d3f", "title": "tableView:didSelectRowAtIndexPath: In Two Lines", "url": "https://duan.ca/2014/05/03/tableview58didselectrowatindexpath58-in-two-lines/", "published_at": "2014-05-03T19:42:00+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d9d083464", "title": "One Weird Trick To Make Vim Go Faster On Your Mac", "url": "https://duan.ca/2014/05/02/one-weird-trick-to-make-vim-go-faster-on-your-mac/", "published_at": "2014-05-02T16:25:00+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d9d255132", "title": "Installing PyQt5 with Python 3 On OS X", "url": "https://duan.ca/2014/04/23/installing-pyqt5-with-python-3-on-os-x/", "published_at": "2014-04-23T16:36:00+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d9de99057", "title": "Generating Xcode Build Number From Git", "url": "https://duan.ca/2013/09/29/generating-xcode-build-number-from-git/", "published_at": "2013-09-29T21:50:50+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d9ee4807d", "title": "Sencha Touch 2 and PhoneGap integration", "url": "https://duan.ca/2013/05/28/sencha-touch-2-and-phonegap-integration/", "published_at": "2013-05-28T21:24:30+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d9f23e489", "title": "Sencha Touch Workflow with GNU Make and Tmux", "url": "https://duan.ca/2013/05/27/sencha-touch-workflow-with-gnu-make-and-tmux/", "published_at": "2013-05-27T21:00:00+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d9f4b9381", "title": "Dynamic Height for List Item in Sencha Touch 2", "url": "https://duan.ca/2013/05/19/dynamic-height-for-list-item-in-sencha-touch-2/", "published_at": "2013-05-19T22:03:30+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679d9fbdb4f6", "title": "Sencha Touch 2.2 Alpha Sass Bug Workaround", "url": "https://duan.ca/2013/01/14/sencha-touch-22-alpha-sass-bug-workaround/", "published_at": "2013-01-14T19:47:00+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679da08c51aa", "title": "Windows Phone 8 Theme in Sencha Touch 2.2", "url": "https://duan.ca/2013/01/14/windows-phone-8-theme-in-sencha-touch-22/", "published_at": "2013-01-14T19:45:00+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679da17371ae", "title": "\"Hello, World!\" The Hard Way with Sencha Touch", "url": "https://duan.ca/2013/01/11/hello-world-the-hard-way-with-sencha-touch/", "published_at": "2013-01-11T07:00:00+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679da2645f4f", "title": "MongoDB, PHP And Mountain Lion", "url": "https://duan.ca/2012/11/29/mongodb-php-and-mountain-lion/", "published_at": "2012-11-29T15:37:30+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679da2836d40", "title": "CoffeeScript And Mountain Lion", "url": "https://duan.ca/2012/11/28/coffeescript-and-mountain-lion/", "published_at": "2012-11-28T21:11:00+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679da285a6d1", "title": "Keep Git Social", "url": "https://duan.ca/2012/10/31/keep-git-social/", "published_at": "2012-10-31T16:02:30+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679da316c45f", "title": "Windows 8 First Impression", "url": "https://duan.ca/2012/10/27/windows-8-first-impression/", "published_at": "2012-10-28T05:59:59+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679da3421279", "title": "Testing Method Within Constructor With Jasmine.js", "url": "https://duan.ca/2012/09/30/testing-method-within-constructor-with-jasminejs/", "published_at": "2012-09-30T06:00:00+00:00" }, { "id": "01a08770-3ac6-71fd-b24b-679da3b55c0a", "title": "Integrating Sencha Touch 2 and Cordova (pre-2.0)", "url": "https://duan.ca/2012/08/20/integrating-sencha-touch-2-and-cordova-pre-20/", "published_at": "2012-08-21T01:09:34+00:00" } ] posts Claim your blog
Back to duan.ca
Blog · corpus.blog/blogs/duan.ca/posts

duan.ca

duan.ca

2026

2025

2024

2023

2022

2021

2020

2019

2018

2017

2016

2015

2014

2013

2012