56,966 blogs · [ { "id": "01a0b68b-4ccc-726b-b009-4828082746a3", "title": "Klaas Pieter Annema", "url": "https://annema.me", "published_at": "2026-09-07T05:20:44+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49df74dc5b8", "title": "OWE on the GL.iNet Flint 3", "url": "https://annema.me/blog/owe-on-gl-inet-flint-3/", "published_at": "2026-04-02T00:00:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49df8496991", "title": "Configure GL.iNet GL-BE9300 (Flint 3) on KPN fiber", "url": "https://annema.me/blog/configure-gl-inet-gl-be9300-flint-3-on-kpn-fiber/", "published_at": "2026-03-17T00:00:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49df8cad7f6", "title": "Get notified when a GitHub action completes", "url": "https://annema.me/blog/get-notified-gh-action/", "published_at": "2026-02-12T00:00:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49df9204f28", "title": "Converting ISO country codes to country names using Locale", "url": "https://annema.me/blog/converting-iso-country-codes-to-country-names-using-locale/", "published_at": "2025-10-31T00:00:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49df94ff2e2", "title": "What is bad behavior?", "url": "https://annema.me/blog/what-is-bad-behavior/", "published_at": "2025-10-30T00:00:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49df9f470ed", "title": "Accessing Swift Package Manager dependency versions at runtime", "url": "https://annema.me/blog/accessing-swift-package-manager-dependency-versions-at-runtime/", "published_at": "2025-09-28T00:00:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49dfa610abe", "title": "Moving DNS from Cloudflare to Gandi using DNSControl", "url": "https://annema.me/blog/move-domains-from-cloudflare-to-ghandi-using-dnscontrol/", "published_at": "2025-09-24T00:00:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49dfa6a7387", "title": "Dynamic bundle identifiers in Xcode: Using xcconfig for different configurations", "url": "https://annema.me/blog/dynamic-bundle-identifiers-in-xcode-using-xcconfig-for-different-configurations/", "published_at": "2025-07-17T00:00:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49dfb5e19ff", "title": "Detecting when an Android permission can only be granted via Settings", "url": "https://annema.me/blog/detecting-when-an-android-permission-can-only-be-granted-via-settings/", "published_at": "2025-06-19T00:00:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49dfb7753f9", "title": "New website", "url": "https://annema.me/blog/new-website/", "published_at": "2025-06-09T00:00:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49dfc224867", "title": "Find time zones where it's currently a certain time", "url": "https://annema.me/blog/archive/2016-05-05-find-time-zones-where-its-currently-a-certain-time/", "published_at": "2016-05-05T08:18:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49dfc478866", "title": "Gesture Recognizers in Swift", "url": "https://annema.me/blog/archive/2015-07-09-gesture-recognizers-in-swift/", "published_at": "2015-07-08T22:52:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49dfd015e6e", "title": "Ruby's tap method in Swift", "url": "https://annema.me/blog/archive/2015-03-18-rubys-tap-method-in-swift/", "published_at": "2015-03-18T12:38:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49dfda12572", "title": "The Builder Pattern in Swift", "url": "https://annema.me/blog/archive/2015-02-02-the-builder-pattern-in-swift/", "published_at": "2015-02-02T19:51:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49dfe971a30", "title": "Configure your iOS app for multiple environments", "url": "https://annema.me/blog/archive/2014-11-20-configure-your-ios-app-for-multiple-environments/", "published_at": "2014-11-20T18:50:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49dff3aeff1", "title": "Clean up the application delegate with initializers", "url": "https://annema.me/blog/archive/2014-10-30-clean-up-the-application-delegate-with-initializers/", "published_at": "2014-10-30T16:48:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49dffa0f55d", "title": "Adopting a new programming language", "url": "https://annema.me/blog/archive/2014-07-02-adopting-a-new-programming-language/", "published_at": "2014-07-02T17:33:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49e0083627c", "title": "Hour formatting with NSDateFormatter dateFormatFromTemplate", "url": "https://annema.me/blog/archive/2014-05-27-hour-formatting-with-nsdateformatter-dateformatfromtemplate/", "published_at": "2014-05-27T17:00:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49e017bd05e", "title": "Builder and GCC Code Block Evaluation", "url": "https://annema.me/blog/archive/2014-05-19-builder-and-gcc-code-block-evaluation/", "published_at": "2014-05-19T16:04:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49e01ebecbb", "title": "TDD - Classicists vs Mockists", "url": "https://annema.me/blog/archive/2014-04-09-tdd-classicists-vs-mockists/", "published_at": "2014-04-09T15:26:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49e021554b1", "title": "The Builder pattern in Objective-C", "url": "https://annema.me/blog/archive/2014-04-04-the-builder-pattern-in-objective-c/", "published_at": "2014-04-04T15:43:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49e02e272f3", "title": "Android adventures #3 - Testing", "url": "https://annema.me/blog/archive/2014-04-02-android-adventures-3-testing/", "published_at": "2014-04-02T15:14:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49e02e79843", "title": "Android adventures #2 - The first crash", "url": "https://annema.me/blog/archive/2014-03-31-android-adventures-2-the-first-crash/", "published_at": "2014-03-31T15:12:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49e0307793f", "title": "Android adventures #1 — Perform task on launch", "url": "https://annema.me/blog/archive/2014-03-27-android-adventures-1-perform-task-on-launch/", "published_at": "2014-03-27T16:54:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49e035c5050", "title": "The Pomodoro Technique", "url": "https://annema.me/blog/archive/2014-03-25-the-pomodoro-technique/", "published_at": "2014-03-25T17:04:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49e037e95e8", "title": "Problems with iOS Push Notifications", "url": "https://annema.me/blog/archive/2014-02-07-problems-with-ios-push-notifications/", "published_at": "2014-02-07T02:34:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49e03c8300e", "title": "Why I prefer testing with Specta, Expecta and OCMockito", "url": "https://annema.me/blog/archive/2014-01-22-why-i-prefer-testing-with-specta-expecta-and-ocmockito/", "published_at": "2014-01-22T18:20:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49e041344ac", "title": "Initializing Objective-C classes with sane initial state", "url": "https://annema.me/blog/archive/2014-01-14-initializing-objective-c-classes-with-sane-initial-state/", "published_at": "2014-01-14T17:54:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49e04309458", "title": "Appreciating real world interaction", "url": "https://annema.me/blog/archive/2013-03-05-appreciating-real-world-interaction/", "published_at": "2013-03-05T07:18:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49e0462f95a", "title": "Debugging Ember", "url": "https://annema.me/blog/archive/2013-01-12-debugging-ember/", "published_at": "2013-01-12T14:30:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49e04f86367", "title": "CSS Markdown mark", "url": "https://annema.me/blog/archive/2012-03-16-css-markdown-mark/", "published_at": "2012-03-16T11:05:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49e055db755", "title": "Changes to AppEngine's _from_entity", "url": "https://annema.me/blog/archive/2011-09-08-changes-to-appengines-_from_entity/", "published_at": "2011-09-08T13:49:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49e0609699b", "title": "My git setup", "url": "https://annema.me/blog/archive/2011-04-28-my-git-setup/", "published_at": "2011-04-28T15:30:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49e065fda16", "title": "Announcing autonib2cib", "url": "https://annema.me/blog/archive/2011-03-05-announcing-autonib2cib/", "published_at": "2011-03-05T19:20:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49e06987c31", "title": "Improving the Cappuccino Theme System", "url": "https://annema.me/blog/archive/2010-11-05-improving-the-cappuccino-theme-system/", "published_at": "2010-11-05T20:13:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49e07051a79", "title": "Cappuccino Custom Themes", "url": "https://annema.me/blog/archive/2010-09-16-cappuccino-custom-themes/", "published_at": "2010-09-16T17:17:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49e07547153", "title": "NSConference MINI 2010 Sessions Online", "url": "https://annema.me/blog/archive/2010-07-22-nsconference-mini-2010-sessions-online/", "published_at": "2010-07-22T15:46:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49e083c7140", "title": "The future", "url": "https://annema.me/blog/archive/2010-07-19-the-future/", "published_at": "2010-07-19T13:33:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49e090750e6", "title": "Programmatically Scroll a UIWebView", "url": "https://annema.me/blog/archive/2010-05-15-programmatically-scroll-a-uiwebview/", "published_at": "2010-05-15T04:33:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49e09afc7c8", "title": "The Basics of Cappuccino Theming", "url": "https://annema.me/blog/archive/2010-04-06-the-basics-of-cappuccino-theming/", "published_at": "2010-04-06T06:02:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49e0aa49812", "title": "Objective-J Explained: Toll-Free Bridges", "url": "https://annema.me/blog/archive/2010-03-19-objective-j-explained-toll-free-bridges/", "published_at": "2010-03-19T21:34:00+00:00" }, { "id": "01a0872b-3eb4-726d-8b88-e49e0b3be81f", "title": "Welcome!", "url": "https://annema.me/blog/archive/2010-03-08-welcome/", "published_at": "2010-03-08T19:27:00+00:00" } ] posts Claim your blog
Back to annema.me
Blog · corpus.blog/blogs/annema.me/posts

annema.me

annema.me

2026

2025

2016

2015

2014

2013

2012

2011

2010