# Blog of Daniel Lyons > The personal site of Daniel Lyons, a Swift developer building indie iOS apps. Technical blog about Swift, iOS development, software engineering, and Apple platform best practices. You can find [more information about this site here](/about). ## All articles ### 2026 - [How to Protect Yourself from npm Supply Chain Attacks](https://dandylyons.net//til/how-to-protect-yourself-from-npm-supply-chain-attacks/) - [Cherish Contradictions](https://dandylyons.net//thoughts/cherish-contradictions/) - [Smart People Ask Dumb Questions](https://dandylyons.net//thoughts/smart-people-ask-dumb-questions/) - [Adding Privacy-Friendly Comments to a Hugo Site with Chirpy](https://dandylyons.net//posts/adding-chirpy-comments/) ### 2025 - [Ensuring Swift Compatibility on Linux](https://dandylyons.net//posts/ensuring-swift-compatibility-on-linux/) - [ITERATE: Your Path to Progress, Not Perfection](https://dandylyons.net//essays/iterate/) - [What is The Neverending Story?](https://dandylyons.net//thoughts/what-is-the-neverending-story/) - [I Heard You Don't Like Netflix...](https://dandylyons.net//thoughts/i-heard-you-dont-like-netflix/) - [Reject Schadenfreude](https://dandylyons.net//thoughts/reject-schadenfreude/) - [Death to Inboxes](https://dandylyons.net//essays/death-to-inboxes/) - [It Looks Like AI](https://dandylyons.net//thoughts/it-looks-like-ai/) - [Curiosity Silenced the Uncurious Cat](https://dandylyons.net//thoughts/curiosity-silenced-the-uncurious-cat/) - [How to Publish Unlisted Posts in Hugo](https://dandylyons.net//posts/unlisted-posts-in-hugo/) - [There's Poor, and Then There's Capitalist Poor](https://dandylyons.net//thoughts/theres-poor-and-then-theres-capitalist-poor/) - [The Marxist, The Capitalist, and The Jealous](https://dandylyons.net//essays/the-marxist-the-capitalist-and-the-jealous/) - [Happy Hurricane Douglas Day!](https://dandylyons.net//essays/happy-hurricane-douglas-day/) - [You Come From a Family Of Survivors](https://dandylyons.net//thoughts/you-come-from-a-family-of-survivors/) - [How to Build an AI Personal Coach](https://dandylyons.net//unlisted/how-to-build-an-ai-personal-coach/) - [macOS 26's Hidden Speechify Killer: Accessibility Reader](https://dandylyons.net//thoughts/macos-26-accessibility-reader/) - [My Takeaways From "Dawnshard" by Brandon Sanderson](https://dandylyons.net//thoughts/dawnshard-takeaways/) - [AI Is a Tool. Are You a Tool?](https://dandylyons.net//thoughts/ai-is-a-tool-are-you-a-tool/) - [Why Do I Write?](https://dandylyons.net//thoughts/why-do-i-write/) - [Actually Useful AI: Modern Search](https://dandylyons.net//thoughts/actually-useful-ai-modern-search/) - [AI Is Human Intelligence Applied](https://dandylyons.net//thoughts/ai-is-human-intelligence-applied/) - [Migrating Notes from Hugo/Quartz to Obsidian Publish](https://dandylyons.net//posts/migrating-notes-from-hugo-quartz-to-obsidian-publish/) - [Goodbye Dataview! Hello Obsidian Bases!](https://dandylyons.net//posts/goodbye-dataview-hello-obsidian-bases/) - [Entering the Mind of Nikola Tesla](https://dandylyons.net//thoughts/entering-the-mind-of-nikola-tesla/) - [On the Ambuguities of Sorry](https://dandylyons.net//essays/on-the-ambuguities-of-sorry/) - [Smooth Site Migration: Redirecting GitHub Pages to Netlify Path-by-Path (with Hugo & SEO in Mind)](https://dandylyons.net//posts/smooth-site-migration-redirecting-github-pages-to-netlify-path-by-path/) - [Listen Up: Your Guide to Turning Any Text Into Audio](https://dandylyons.net//thoughts/listen-up-your-guide-to-turning-any-text-into-audio/) - [AI Is Not Human But We Sure Think It Is](https://dandylyons.net//thoughts/ai-is-not-human-but-we-sure-think-it-is/) - [AI Is a Moving Goalpost](https://dandylyons.net//thoughts/ai-is-a-moving-goalpost/) - [AI Is Not Logical, It's Probable](https://dandylyons.net//thoughts/ai-is-not-logical-its-probable/) - [How to Always Be Right](https://dandylyons.net//essays/how-to-always-be-right/) - [Post Expertise Scarcity](https://dandylyons.net//thoughts/post-expertise-scarcity/) - [Penny for Your Thoughts?](https://dandylyons.net//thoughts/penny-for-your-thoughts/) - [Icons in SwiftUI](https://dandylyons.net//posts/icons-in-swiftui/) - [Introducing: "Let There Be Sight" now in beta!](https://dandylyons.net//posts/let-there-be-sight-beta/) - [Swift Error Handling: The Solution](https://dandylyons.net//posts/swift-error-handling-the-solution/) - [Swift Error Handling: The Problem](https://dandylyons.net//posts/swift-error-handling-the-problem/) - [Actually Useful Obsidian: Formatting](https://dandylyons.net//posts/actually-useful-obsidian-formatting/) - [What's the difference between class and class_name in Godot?](https://dandylyons.net//posts/godot-class-vs-class_name/) - [Easy Deep Copy Cloning in Swift](https://dandylyons.net//posts/easy-deep-copy-cloning-in-swift/) ### 2024 - [Introducing SelectiveEquatable](https://dandylyons.net//posts/selectiveequatable/) - [Safe Constants in GDScript](https://dandylyons.net//unlisted/safe-constants-in-gdscript/) - [Am I Using Swift 5 or 6?](https://dandylyons.net//posts/am-i-using-swift-5-or-6/) - [Gradual Static Typing in GDScript](https://dandylyons.net//posts/gradual-static-typing-in-gdscript/) - [Selective Equality Checking in Swift](https://dandylyons.net//posts/selective-equality-checking-in-swift/) - [Unordered Equality Checking in Swift](https://dandylyons.net//posts/unordered-equality-checking-in-swift/) - [A Deep Dive into Value and Reference Types in Swift](https://dandylyons.net//posts/swift-value-reference-deep-dive/) - [Swift Assertions Cheatsheet: How, Why, and When to Crash](https://dandylyons.net//posts/mastering-swift-assertions/) - [Exhaustive, Flexible, Multi-Typed Error Handling in Swift](https://dandylyons.net//posts/typed-error-handling/) - [An Introduction to Swift on the Server](https://dandylyons.net//unlisted/swift-server-introduction/) - [How to Visualize a Dependency Graph of Swift Dependencies](https://dandylyons.net//posts/swift-dependency-graph-visualization/) - [Differentiating Parameterized Tests in Swift Testing](https://dandylyons.net//unlisted/differentiating-parameterized-tests-in-swift-testing/) - [Abstractions Increase Complexity: Here's Why That's Not A Bad Thing](https://dandylyons.net//posts/abstractions-increase-complexity/) - [The Swift Ranges Cheatsheet](https://dandylyons.net//posts/swift-ranges-cheatsheet/) - [Swift 6's New @retroactive Attribute](https://dandylyons.net//posts/swift-6-retroactive-attribute/) - [Demystifying Modern macOS Development](https://dandylyons.net//posts/demystifying-modern-macos-development/) - [Benchmarking in Swift with swift-collections-benchmark](https://dandylyons.net//posts/benchmarking-in-swift-with-swift-collections-benchmark/) - [Using Custom Components in Swift's Regex](https://dandylyons.net//posts/using-custom-components-in-swifts-regex/) - [The Many Faces Of Swift's Regex](https://dandylyons.net//posts/the-many-faces-of-swifts-regex/) - [Using Optionals with SwiftUI Bindings](https://dandylyons.net//posts/using-optionals-with-swiftui-bindings/) - [Exhaustive Testing Made Easy](https://dandylyons.net//posts/exhaustive-testing-made-easy/) - [How to Take Full Advantage of Swift Package Index](https://dandylyons.net//posts/spi-tips/) - [Boost Your Productivity with These macOS Typing Shortcuts](https://dandylyons.net//posts/macos-typing-shortcuts/) - [How to Scroll to a Percentage in a ScrollView](https://dandylyons.net//posts/scroll-to-percentage-in-scrollview/) - [Job Copilot](https://dandylyons.net//projects/job-copilot/) - [Hello Hugo](https://dandylyons.net//posts/hello-hugo/) - [AestheText](https://dandylyons.net//projects/aesthetext/) - [Concrete and "Soft" Types in Swift](https://dandylyons.net//posts/swift-generics/concrete-types-swift/) - [Explicit and Implicit Types in Swift](https://dandylyons.net//posts/swift-generics/explicit-types-swift/) - [Hawaiian Vocab](https://dandylyons.net//projects/hawaiian-vocab/) ### 2023 - [TCACalc](https://dandylyons.net//projects/tcacalc/) - [How to add Apple’s “Night Mode” to your SwiftUI Views](https://dandylyons.net//posts/implement-swiftui-night-mode/) - [How to use a JS for...of loop with an index](https://dandylyons.net//posts/js-for-of-loop/) - [PlusNightMode](https://dandylyons.net//projects/plusnightmode/) ### 2021 - [7 Ways to Organize SwiftUI Code](https://dandylyons.net//posts/7-ways-to-organize-swiftui-code/) ### 0001 - [Search](https://dandylyons.net//search/) - [About Daniel Lyons](https://dandylyons.net//about/) - [](https://dandylyons.net//posts/how-md-utils-was-built/)