41554 blogs · [ { "id": "01a08766-5472-7041-87d2-b2256fdd99f6", "title": "AI Attribution in Git", "url": "https://dafoster.net/articles/2026/04/17/ai-attribution-in-git/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2026-04-17T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2256fe53070", "title": "Oops, I wrote a database", "url": "https://dafoster.net/articles/2026/02/23/oops-i-wrote-a-database/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2026-02-23T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22570b8c1f4", "title": "Issue counts always go up", "url": "https://dafoster.net/articles/2025/08/20/issue-counts-always-go-up/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2025-08-20T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22571adcfed", "title": "Designing Software in the Large", "url": "https://dafoster.net/articles/2025/07/22/designing-software-in-the-large/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2025-07-22T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b225728272d9", "title": "The trouble with the Symbol type", "url": "https://dafoster.net/articles/2025/03/16/the-trouble-with-the-symbol-type/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2025-03-16T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22572d691ee", "title": "Dumping a traceback when an error message is printed", "url": "https://dafoster.net/articles/2025/03/13/dump-traceback-on-print/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2025-03-13T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22573b5c0b1", "title": "Effective Code Reviews", "url": "https://dafoster.net/articles/2024/08/18/effective-code-reviews/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2024-08-18T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2257453eaab", "title": "PyCon US 2024 Highlights", "url": "https://dafoster.net/articles/2024/06/16/pycon-us-2024-highlights/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2024-06-16T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b225745e63d6", "title": "Redis relicensing: Why is this a problem?", "url": "https://dafoster.net/articles/2024/03/24/redis-relicensing-why-is-this-a-problem/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2024-03-24T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b225754d93d4", "title": "Bulkheads: A pattern for handling unexpected errors in software", "url": "https://dafoster.net/articles/2024/02/28/bulkheads-a-pattern-for-handling-unexpected-errors-in-software/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2024-02-28T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2257567fbe7", "title": "Debugging a deadlock in Python", "url": "https://dafoster.net/articles/2023/10/20/debugging-a-deadlock-in-python/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2023-10-20T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b225761f8f79", "title": "Custom file icons, folder icons, and app icons on different operating systems", "url": "https://dafoster.net/articles/2023/10/12/custom-file-icons-and-folder-icons/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2023-10-12T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22576b70ca4", "title": "How to make a binary .deb Debian package using Docker", "url": "https://dafoster.net/articles/2023/08/31/how-to-make-a-binary-deb-debian-package-using-docker/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2023-08-31T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2257789fe6c", "title": "Debugging bash scripts with the bashdb debugger", "url": "https://dafoster.net/articles/2023/02/22/debugging-bash-scripts-with-the-bashdb-debugger/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2023-02-22T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22577e56e24", "title": "Crystal Web Archiver 1.3.0b Released!", "url": "https://dafoster.net/articles/2022/07/10/crystal-1-3-0-released/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2022-07-10T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22578b8822f", "title": "CompressedTextField for Django & MySQL is released!", "url": "https://dafoster.net/articles/2022/07/07/compressed-text-field-for-django-and-mysql-is-released/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2022-07-07T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22578d31ce3", "title": "Interview with David Foster", "url": "https://dafoster.net/articles/2021/05/02/interview-with-david-foster/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2021-05-02T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22579500697", "title": "Crystal Web Archiver 1.1.0b Released!", "url": "https://dafoster.net/articles/2021/03/23/crystal-web-archiver-beta-released/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2021-03-23T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22579955770", "title": "You might not need centralized continuous integration", "url": "https://dafoster.net/articles/2021/03/16/you-might-not-need-centralized-continuous-integration/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2021-03-16T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22579ebdff9", "title": "Reliable rendering of web pages that view concurrently modified data", "url": "https://dafoster.net/articles/2021/03/09/reliable-rendering-of-web-pages-that-view-concurrently-modified-data/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2021-03-09T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2257abfc17c", "title": "Real-time updates in Django with WebSockets, Channels, and pub-sub", "url": "https://dafoster.net/articles/2021/03/02/real-time-updates-in-django-with-websockets-channels-and-pub-sub/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2021-03-02T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2257b7d0e9b", "title": "Building web apps with Vue and Django (2024) - The Ultimate Guide", "url": "https://dafoster.net/articles/2021/02/16/building-web-apps-with-vue-and-django-the-ultimate-guide/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2021-02-16T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2257bb5547d", "title": "Database clamps: Deterministic performance tests for database-dependent code", "url": "https://dafoster.net/articles/2021/02/09/database-clamps-deterministic-performance-tests-for-database-dependent-code/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2021-02-09T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2257c4f6bce", "title": "Privacy Sandbox: Google's answer to privacy-conscious advertising", "url": "https://dafoster.net/articles/2021/02/04/privacy-sandbox-googles-answer-to-privacy-conscious-advertising/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2021-02-04T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2257c756254", "title": "Tests as Policy Automation", "url": "https://dafoster.net/articles/2021/02/02/tests-as-policy-automation/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2021-02-02T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2257d6ef012", "title": "Python's type checking renaissance", "url": "https://dafoster.net/articles/2021/01/26/python's-type-checking-renaissance/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2021-01-26T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2257e4124df", "title": "I no longer trust The Great Suspender", "url": "https://dafoster.net/articles/2021/01/20/i-no-longer-trust-the-great-suspender/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2021-01-20T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2257f164c39", "title": "Power Naps", "url": "https://dafoster.net/articles/2020/02/02/power-naps/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2020-02-02T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2257f838636", "title": "Stress", "url": "https://dafoster.net/articles/2020/01/18/stress/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2020-01-18T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b225807df12e", "title": "OS Abstractions are Failing Us", "url": "https://dafoster.net/articles/2019/06/27/os-abstractions-are-failing-us/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2019-06-27T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22580d99be2", "title": "Dependent Types: Impressions of a software practitioner", "url": "https://dafoster.net/articles/2019/01/06/dependent-types-impressions-of-a-software-practitioner/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2019-01-06T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2258110cf40", "title": "Timecharts", "url": "https://dafoster.net/articles/2018/12/15/timecharts/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2018-12-15T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b225813b0149", "title": "Why isn't the external link symbol in Unicode?", "url": "https://dafoster.net/articles/2018/11/24/why-isnt-the-external-link-symbol-in-unicode/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2018-11-24T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22581fa1097", "title": "The Flat Module Pattern in JavaScript", "url": "https://dafoster.net/articles/2018/09/23/the-flat-module-pattern-in-javascript/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2018-09-23T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2258279efa2", "title": "Performance Testing", "url": "https://dafoster.net/articles/2018/06/02/performance-testing/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2018-06-02T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22582f23bda", "title": "Unsound type systems are still useful", "url": "https://dafoster.net/articles/2018/04/07/unsound-type-systems-are-still-useful/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2018-04-07T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22582feb767", "title": "How to implement a large software feature", "url": "https://dafoster.net/articles/2018/01/20/how-to-implement-a-large-software-feature/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2018-01-20T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22583e5dc53", "title": "How to annotate a new recipe", "url": "https://dafoster.net/articles/2017/12/18/how-to-annotate-a-new-recipe/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2017-12-18T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22584c50a23", "title": "Learning to cook better: My journey", "url": "https://dafoster.net/articles/2017/12/09/how-to-learn-to-cook-my-journey/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2017-12-09T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b225854022fe", "title": "The Trouble with Global Variables", "url": "https://dafoster.net/articles/2017/04/09/the-trouble-with-global-variables/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2017-04-09T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22585cf70dd", "title": "How to Design Large Programs with Abstraction and Encapsulation", "url": "https://dafoster.net/articles/2017/03/25/how-to-design-large-programs-with-abstraction-and-encapsulation/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2017-03-25T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2258606989f", "title": "How to upload from OS X Photos to Facebook (2016)", "url": "https://dafoster.net/articles/2016/08/21/how-to-upload-from-os-x-photos-to-facebook/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2016-08-21T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22586598b0b", "title": "Glue in Functional Programming Languages", "url": "https://dafoster.net/articles/2016/05/21/glue-in-functional-programming-languages/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2016-05-21T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b225872954cf", "title": "Abandonment vs. Unchecked Exceptions for Error Handling", "url": "https://dafoster.net/articles/2016/05/17/abandonment-vs-unchecked-exceptions-for-error-handling/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2016-05-17T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b225878ed139", "title": "A Programmer's Guide to Practical Hats", "url": "https://dafoster.net/articles/2016/05/02/a-programmers-guide-to-practical-hats/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2016-05-02T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22587fa4ad6", "title": "Notes on “The Clean Coder”", "url": "https://dafoster.net/articles/2016/04/22/notes-on-the-clean-coder/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2016-04-22T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22588680bf5", "title": "Roles on Software Teams", "url": "https://dafoster.net/articles/2016/04/02/roles-on-software-teams/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2016-04-02T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22588c29a5a", "title": "State of the Union in Programming Languages (2015)", "url": "https://dafoster.net/articles/2015/09/13/state-of-the-union-in-programming-languages/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2015-09-13T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b225894fe435", "title": "Algorithms 101 for Software Applications", "url": "https://dafoster.net/articles/2015/08/08/algorithms-101/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2015-08-08T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2258a140271", "title": "Unicode 101", "url": "https://dafoster.net/articles/2015/06/27/unicode-101/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2015-06-27T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2258accb97c", "title": "Optional Structural Static Typing in Python", "url": "https://dafoster.net/articles/2015/04/26/optional-structural-static-typing-in-python/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2015-04-26T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2258bca5907", "title": "Block Distracting Websites", "url": "https://dafoster.net/articles/2015/03/23/block-distracting-websites/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2015-03-23T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2258c95591f", "title": "Semantic Versioning vs. Romantic Versioning", "url": "https://dafoster.net/articles/2015/03/14/semantic-versioning-vs-romantic-versioning/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2015-03-14T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2258d44dcec", "title": "Proof terms in Idris", "url": "https://dafoster.net/articles/2015/02/27/proof-terms-in-idris/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2015-02-27T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2258db6f3f1", "title": "Spectrum of Languages by Hardware Distance", "url": "https://dafoster.net/articles/2014/12/20/languages-by-hardware-distance/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2014-12-20T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2258ea7a609", "title": "Error handling styles in programming", "url": "https://dafoster.net/articles/2014/11/22/error-handling-styles/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2014-11-22T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2258ed67f48", "title": "Learning Japanese - the first 6 months", "url": "https://dafoster.net/articles/2014/11/08/learning-japanese-the-first-6-months/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2014-11-08T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2258f5ee8d4", "title": "Submitting a Python App to the Mac App Store", "url": "https://dafoster.net/articles/2014/06/24/submitting-a-python-app-to-the-mac-app-store/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2014-06-24T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22590367db0", "title": "Reading Japanese text from images", "url": "https://dafoster.net/articles/2014/05/10/reading-japanese-text-from-images-quickly/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2014-05-10T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22590b8967e", "title": "Agda: Second Impressions", "url": "https://dafoster.net/articles/2014/02/17/agda-second-impressions/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2014-02-17T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b225916dbc29", "title": "What is Color?", "url": "https://dafoster.net/articles/2014/02/02/what-is-color/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2014-02-02T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b225926ad422", "title": "Agda: First Impressions", "url": "https://dafoster.net/articles/2014/01/24/agda-notes-and-evaluation/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2014-01-24T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22592db092f", "title": "How to move notes from an iPhone to an email account", "url": "https://dafoster.net/articles/2013/11/25/how-to-move-notes-from-an-iphone-to-an-email-account/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-11-25T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22593b6196e", "title": "Impressions of Haskell", "url": "https://dafoster.net/articles/2013/11/12/impressions-of-haskell/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-11-12T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22593b87017", "title": "Scrivener: An IDE for thinkers, creators, and writers", "url": "https://dafoster.net/articles/2013/10/27/scrivener-an-ide-for-thinkers-creators-and-writers/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-10-27T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2259445c2b5", "title": "Shame on the NSA", "url": "https://dafoster.net/articles/2013/10/21/shame-on-the-nsa/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-10-21T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22594502894", "title": "WA Initiative 522: GMO Food Labeling", "url": "https://dafoster.net/articles/2013/10/04/washington-initiative-522-labeling-of-gmo-foods/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-10-04T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22594b54e4a", "title": "Strange Loop 2013 Highlights", "url": "https://dafoster.net/articles/2013/09/30/strange-loop-2013-highlights/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-09-30T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b225958d439e", "title": "Regular Expressions", "url": "https://dafoster.net/articles/2013/09/04/regular-expressions/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-09-04T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b225967c9a8b", "title": "How I learn new programming languages", "url": "https://dafoster.net/articles/2013/08/25/how-i-learn-new-programming-languages/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-08-25T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22596c22478", "title": "Interactive Computing", "url": "https://dafoster.net/articles/2013/08/19/interactive-computing/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-08-19T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b225977065a1", "title": "Fixing a function at runtime without restarting the program", "url": "https://dafoster.net/articles/2013/08/13/fixing-a-function-at-runtime-without-restarting-the-program/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-08-13T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2259770f7bc", "title": "Skills I'm Learning at Splunk", "url": "https://dafoster.net/articles/2013/08/04/skills-i-am-learning-at-splunk/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-08-04T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22597e1df15", "title": "Skills I Learned at Microsoft", "url": "https://dafoster.net/articles/2013/08/03/skills-i-learned-at-microsoft/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-08-03T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b225988c5328", "title": "Sending email from command line scripts", "url": "https://dafoster.net/articles/2013/07/27/sending-email-from-command-line-scripts/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-07-27T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22599528311", "title": "Error Handling", "url": "https://dafoster.net/articles/2013/07/13/error-handling/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-07-13T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22599530783", "title": "Handling Text Correctly", "url": "https://dafoster.net/articles/2013/06/01/handling-text-correctly/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-06-01T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22599ceebfb", "title": "RDiscount 2.1.6 released", "url": "https://dafoster.net/articles/2013/05/28/rdiscount-2.1.6-released/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-05-28T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b22599ebc973", "title": "Implicit Partial Application Considered Harmful", "url": "https://dafoster.net/articles/2013/05/12/implicit-partial-application-and-currying-considered-harmful/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-05-12T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2259a5a0886", "title": "Programming for Perfectionists (P4P): A Book Outline", "url": "https://dafoster.net/articles/2013/05/11/book-outline/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-05-11T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2259acf364c", "title": "Avoid feeling like a port on the Mac", "url": "https://dafoster.net/articles/2013/05/07/avoid-feeling-like-a-port-on-the-mac/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-05-07T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2259baed155", "title": "Copyrights and Licenses for Software", "url": "https://dafoster.net/articles/2013/04/30/copyrights-and-licenses-for-software/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-04-30T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2259c59e056", "title": "Exploring Onionland: The Tor .onion Darknet", "url": "https://dafoster.net/articles/2013/04/21/exploring-onionland-the-tor-onion-darknet/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-04-21T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2259d517b62", "title": "Making an Existing Python Program Unicode Aware", "url": "https://dafoster.net/articles/2013/04/09/making-an-existing-python-program-unicode-aware/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-04-09T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2259e4f816a", "title": "Beautiful Code: SQLite", "url": "https://dafoster.net/articles/2013/04/07/beautiful-code-sqlite/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-04-07T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2259e604a5f", "title": "Migrating from BBEdit to Sublime Text", "url": "https://dafoster.net/articles/2013/03/22/migrating-from-bbedit-to-sublime-text/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-03-22T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2259f21f1d5", "title": "Introducing p4status: A status command for Perforce", "url": "https://dafoster.net/articles/2013/03/16/introducing-p4status-a-status-command-for-perforce/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-03-16T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2259f30cca4", "title": "Killer apps for software platforms", "url": "https://dafoster.net/articles/2013/03/10/killer-apps-for-software-platforms/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-03-10T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2259f725f7c", "title": "Notes on Racket (PLT-Scheme)", "url": "https://dafoster.net/articles/2013/03/01/notes-on-racket/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-03-01T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2259fbb12a6", "title": "Notes on Prolog", "url": "https://dafoster.net/articles/2013/02/25/notes-on-prolog/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-02-25T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b2259fe0cb52", "title": "Visual Guide to Programming Language Properties", "url": "https://dafoster.net/articles/2013/02/20/visual-guide-to-programming-language-properties/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-02-20T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b225a08784e0", "title": "RDiscount 2.0.7 released", "url": "https://dafoster.net/articles/2013/02/02/rdiscount-2.0.7-released/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-02-02T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b225a1131fe8", "title": "Learnings from SICP (and Lisp)", "url": "https://dafoster.net/articles/2013/02/01/learnings-from-sicp/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-02-01T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b225a1997910", "title": "Unique Features of Various Programming Languages", "url": "https://dafoster.net/articles/2013/01/29/unique-features-of-various-programming-languages/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-01-29T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b225a1fb3a91", "title": "Things I Wish I Knew Before Working in Industry", "url": "https://dafoster.net/articles/2013/01/15/things-i-wish-i-knew-before-working-in-industry/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-01-15T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b225a21b7ae2", "title": "Programming is Fun. But What Matters is Solving a Real Problem.", "url": "https://dafoster.net/articles/2013/01/08/programming-is-fun-but-what-matters-is-solving-a-real-problem/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2013-01-08T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b225a2852fc0", "title": "This website is now powered by Jekyll", "url": "https://dafoster.net/articles/2012/12/21/this-website-is-now-powered-by-jekyll/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2012-12-21T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b225a289990f", "title": "Why I no longer use Drupal", "url": "https://dafoster.net/articles/2012/12/16/why-i-no-longer-use-drupal/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2012-12-16T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b225a29346e5", "title": "Retrospect vs. Time Machine", "url": "https://dafoster.net/articles/2010/11/13/retrospect-vs-time-machine/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2010-11-13T00:00:00+00:00" }, { "id": "01a08766-5472-7041-87d2-b225a358d1f3", "title": "Impact of Anime on my Programming Experience", "url": "https://dafoster.net/articles/2010/09/18/impact-anime-my-programming-experience/?utm_source=atom&utm_medium=feed&utm_campaign=feed", "published_at": "2010-09-18T00:00:00+00:00" } ] posts Claim your blog
Back to dafoster.net
Blog · corpus.blog/blogs/dafoster.net/posts

dafoster.net

dafoster.net

2026

2025

2024

2023

2022

2021

2020

2019

2018

2017

2016

2015

2014

2013

2012

2010