<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Hironobu Iga — Software Engineer</title><description>The personal site of a Tokyo-based software engineer. Writing and talks on AI agent identity, cloud architecture, and mobile development.</description><link>https://iganin.dev/</link><language>en-US</language><item><title>Prefill and decode in LLM inference</title><link>https://iganin.dev/en/articles/llm-prefill-decode/</link><guid isPermaLink="true">https://iganin.dev/en/articles/llm-prefill-decode/</guid><description>An overview of prefill and decode, the two phases of ordinary LLM inference, and why one tends to be bottlenecked by compute while the other tends to be bottlenecked by memory reads — prompted by sessions at KubeCon + CloudNativeCon Japan 2026.</description><pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate><category>LLM</category><category>Inference</category></item><item><title>COAZ-MCP: authorising MCP tool calls with AuthZEN</title><link>https://iganin.dev/en/articles/authzen-coaz-mcp/</link><guid isPermaLink="true">https://iganin.dev/en/articles/authzen-coaz-mcp/</guid><description>Notes on COAZ-MCP, the working group draft that maps MCP messages onto AuthZEN decision requests — the problem it tries to solve, how default and declared mappings work, and where it stands today.</description><pubDate>Fri, 21 Aug 2026 00:00:00 GMT</pubDate><category>AuthZEN</category><category>MCP</category><category>Authorization</category></item><item><title>Looking into AuthZEN, a standard specification for authorisation</title><link>https://iganin.dev/en/articles/authzen-introduction/</link><guid isPermaLink="true">https://iganin.dev/en/articles/authzen-introduction/</guid><description>Notes on AuthZEN, the authorisation standard I first came across at KubeCon + CloudNativeCon Japan 2026 — the problem it tries to solve, how it relates to OIDC, and where it stands today.</description><pubDate>Wed, 19 Aug 2026 00:00:00 GMT</pubDate><category>AuthZEN</category><category>Authorization</category><category>Security</category></item><item><title>Hiding the back button&apos;s text in SwiftUI</title><link>https://iganin.dev/en/articles/swiftui-hide-back-button-title/</link><guid isPermaLink="true">https://iganin.dev/en/articles/swiftui-hide-back-button-title/</guid><description>Hiding it with navigationBarBackButtonHidden also costs you the swipe-back gesture and the long-press stack. Adjusting UINavigationBar&apos;s appearance is the safer route.</description><pubDate>Mon, 26 Feb 2024 00:00:00 GMT</pubDate><category>SwiftUI</category><category>iOS</category></item><item><title>A chat-like screen in SwiftUI that also handles having only a few items</title><link>https://iganin.dev/en/articles/swiftui-chat-like-layout/</link><guid isPermaLink="true">https://iganin.dev/en/articles/swiftui-chat-like-layout/</guid><description>How to satisfy both of the things a chat screen is expected to do in SwiftUI — the newest item stacking at the bottom, and items sitting at the top when there are only a few.</description><pubDate>Wed, 21 Dec 2022 00:00:00 GMT</pubDate><category>SwiftUI</category><category>iOS</category><category>Layout</category></item><item><title>Exporting ARKit face tracking results as an obj file</title><link>https://iganin.dev/en/articles/arkit-face-tracking-to-obj/</link><guid isPermaLink="true">https://iganin.dev/en/articles/arkit-face-tracking-to-obj/</guid><description>How to convert the ARFaceGeometry you get from ARFaceTrackingConfiguration into an MDLAsset and write it out in obj format with export(to:).</description><pubDate>Sat, 18 Dec 2021 00:00:00 GMT</pubDate><category>iOS</category><category>ARKit</category></item><item><title>Hashing passwords with BCrypt in Kotlin</title><link>https://iganin.dev/en/articles/kotlin-bcrypt-password-hashing/</link><guid isPermaLink="true">https://iganin.dev/en/articles/kotlin-bcrypt-password-hashing/</guid><description>Why passwords should be stored as salted hashes rather than encrypted, and how choosing BCrypt removes the need for a separate salt column.</description><pubDate>Thu, 09 Sep 2021 00:00:00 GMT</pubDate><category>Kotlin</category><category>Security</category></item><item><title>Persisting the cache in Flutter&apos;s GraphQLClient</title><link>https://iganin.dev/en/articles/flutter-graphql-cache-persistence/</link><guid isPermaLink="true">https://iganin.dev/en/articles/flutter-graphql-cache-persistence/</guid><description>How to persist a GraphQL client&apos;s cache with HiveStore, and how to avoid the mess on the Riverpod side that comes from its initialisation being asynchronous.</description><pubDate>Fri, 03 Sep 2021 00:00:00 GMT</pubDate><category>Flutter</category><category>GraphQL</category><category>Riverpod</category></item><item><title>Clearing Riverpod provider caches efficiently on logout</title><link>https://iganin.dev/en/articles/riverpod-cache-clear-on-logout/</link><guid isPermaLink="true">https://iganin.dev/en/articles/riverpod-cache-clear-on-logout/</guid><description>Keep one provider whose value changes on logout, have every other provider watch it during initialisation, and forgetting to clear something stops being possible.</description><pubDate>Thu, 02 Sep 2021 00:00:00 GMT</pubDate><category>Flutter</category><category>Riverpod</category><category>Security</category></item><item><title>Checking authentication state on navigation with Flutter&apos;s Navigation 2.0 and AutoRoute</title><link>https://iganin.dev/en/articles/flutter-auto-route-auth-guard/</link><guid isPermaLink="true">https://iganin.dev/en/articles/flutter-auto-route-auth-guard/</guid><description>Using auto_route&apos;s AutoRouteGuard to check the authentication state as navigation happens and send unauthenticated users to the sign-in screen. Covers the case where you inject with riverpod.</description><pubDate>Tue, 24 Aug 2021 00:00:00 GMT</pubDate><category>Flutter</category><category>Authentication</category><category>Riverpod</category></item><item><title>Things to watch when combining GraphQL and Sentry in React</title><link>https://iganin.dev/en/articles/react-graphql-sentry/</link><guid isPermaLink="true">https://iganin.dev/en/articles/react-graphql-sentry/</guid><description>Every GraphQL request is a POST to the same URL, so Sentry cannot tell them apart. How apollo-link-sentry fixes that, and what to be careful about in how much it reports.</description><pubDate>Wed, 26 May 2021 00:00:00 GMT</pubDate><category>React</category><category>GraphQL</category><category>Sentry</category></item><item><title>Classifying HTTP methods in an API</title><link>https://iganin.dev/en/articles/http-methods-in-api/</link><guid isPermaLink="true">https://iganin.dev/en/articles/http-methods-in-api/</guid><description>Sorting GET, POST, PUT, PATCH, DELETE and HEAD by what they do to a resource — and pinning down the difference between the three that are easy to confuse.</description><pubDate>Mon, 10 Aug 2020 00:00:00 GMT</pubDate><category>API design</category><category>HTTP</category></item><item><title>Defining tables with Kotlin&apos;s Exposed</title><link>https://iganin.dev/en/articles/kotlin-exposed-table-definition/</link><guid isPermaLink="true">https://iganin.dev/en/articles/kotlin-exposed-table-definition/</guid><description>A write-up of how to define tables in Exposed, the ORM commonly paired with Ktor.</description><pubDate>Mon, 13 Apr 2020 00:00:00 GMT</pubDate><category>Kotlin</category><category>Exposed</category><category>Ktor</category></item><item><title>A few thoughts on unit testing</title><link>https://iganin.dev/en/articles/unit-test-consideration/</link><guid isPermaLink="true">https://iganin.dev/en/articles/unit-test-consideration/</guid><description>Separating the value of unit tests into three effects — regression protection, documentation, and pressure on internal structure — and asking how much to write in practice.</description><pubDate>Thu, 26 Dec 2019 00:00:00 GMT</pubDate><category>Design</category><category>Testing</category></item><item><title>Switching over an optional enum got easier in Swift 5.1</title><link>https://iganin.dev/en/articles/swift-optional-enum-switch/</link><guid isPermaLink="true">https://iganin.dev/en/articles/swift-optional-enum-switch/</guid><description>Up to Swift 5.0 you had to write .some(.daily). In 5.1 you can write .daily directly.</description><pubDate>Sun, 08 Dec 2019 00:00:00 GMT</pubDate><category>Swift</category></item><item><title>The system font sometimes renders as Times New Roman on iOS 13</title><link>https://iganin.dev/en/articles/ios13-system-font-times-new-roman/</link><guid isPermaLink="true">https://iganin.dev/en/articles/ios13-system-font-times-new-roman/</guid><description>When a system font is set on a UITextView and similar views, it can switch to Times New Roman at runtime. Setting the UIFont explicitly in code works around it.</description><pubDate>Sun, 10 Nov 2019 00:00:00 GMT</pubDate><category>iOS</category><category>UIKit</category></item><item><title>Getting the device token string needed for push notifications</title><link>https://iganin.dev/en/articles/push-notification-device-token/</link><guid isPermaLink="true">https://iganin.dev/en/articles/push-notification-device-token/</guid><description>How to convert the Data handed to you by didRegisterForRemoteNotificationsWithDeviceToken into a String, and what changed about description in iOS 13.</description><pubDate>Mon, 14 Oct 2019 00:00:00 GMT</pubDate><category>iOS</category><category>Push notifications</category></item><item><title>Swift&apos;s switch next to Kotlin&apos;s when</title><link>https://iganin.dev/en/articles/swift-switch-kotlin-when/</link><guid isPermaLink="true">https://iganin.dev/en/articles/swift-switch-kotlin-when/</guid><description>Working mostly on iOS means re-remembering how to write Kotlin&apos;s when every time, so here the two are side by side.</description><pubDate>Wed, 14 Aug 2019 00:00:00 GMT</pubDate><category>Swift</category><category>Kotlin</category></item><item><title>On ArraySlice in Swift</title><link>https://iganin.dev/en/articles/swift-array-slice/</link><guid isPermaLink="true">https://iganin.dev/en/articles/swift-array-slice/</guid><description>Why slicing an Array hands you an ArraySlice rather than an Array — it is a view onto the original storage, not a copy.</description><pubDate>Fri, 15 Feb 2019 00:00:00 GMT</pubDate><category>Swift</category></item><item><title>Void and the empty tuple in Swift</title><link>https://iganin.dev/en/articles/swift-void-and-empty-tuple/</link><guid isPermaLink="true">https://iganin.dev/en/articles/swift-void-and-empty-tuple/</guid><description>Void is a typealias for the empty tuple. Starting there, a short look at how the two behave.</description><pubDate>Tue, 05 Feb 2019 00:00:00 GMT</pubDate><category>Swift</category></item><item><title>Using xcfilelist in Xcode&apos;s Build Phase Run Script</title><link>https://iganin.dev/en/articles/xcode-xcfilelist/</link><guid isPermaLink="true">https://iganin.dev/en/articles/xcode-xcfilelist/</guid><description>Tidying up the ballooning Input Files list you get with Carthage, using the Input File Lists (xcfilelist) added in Xcode 10.</description><pubDate>Thu, 20 Sep 2018 00:00:00 GMT</pubDate><category>iOS</category><category>Xcode</category><category>Carthage</category></item><item><title>Put label badges on your pull request comments</title><link>https://iganin.dev/en/articles/pull-request-comment-labels/</link><guid isPermaLink="true">https://iganin.dev/en/articles/pull-request-comment-labels/</guid><description>Review comments carry no tone, so readers cannot tell a blocker from an aside. Labels fix that — but only if you also make them visible and cheap to add.</description><pubDate>Sun, 15 Jul 2018 00:00:00 GMT</pubDate><category>Code review</category><category>GitHub</category></item><item><title>Thinking through how to detect GDPR territories from an iOS app</title><link>https://iganin.dev/en/articles/gdpr-region-detection-ios/</link><guid isPermaLink="true">https://iganin.dev/en/articles/gdpr-region-detection-ios/</guid><description>A look at the options for deciding, inside the app, whether the user is in an EEA member state.</description><pubDate>Mon, 28 May 2018 00:00:00 GMT</pubDate><category>iOS</category><category>GDPR</category><category>Privacy</category></item><item><title>Converting between camelCase and snake_case with Codable</title><link>https://iganin.dev/en/articles/codable-camel-snake-conversion/</link><guid isPermaLink="true">https://iganin.dev/en/articles/codable-camel-snake-conversion/</guid><description>Using JSONDecoder&apos;s keyDecodingStrategy and keyEncodingStrategy to absorb the difference in naming conventions without hand-writing CodingKeys.</description><pubDate>Wed, 21 Feb 2018 00:00:00 GMT</pubDate><category>iOS</category><category>Swift</category><category>Codable</category></item><item><title>Using UserDefaults in a type-safe way</title><link>https://iganin.dev/en/articles/type-safe-userdefaults/</link><guid isPermaLink="true">https://iganin.dev/en/articles/type-safe-userdefaults/</guid><description>Two approaches for preventing typos in keys and mismatched types — wrapping UserDefaults, and using Mirror.</description><pubDate>Sun, 12 Nov 2017 00:00:00 GMT</pubDate><category>iOS</category><category>Swift</category></item></channel></rss>