<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Shai Almog on foojay.io - Friends Of OpenJDK</title><link>https://foojay.io/today/author/shai-almog/</link><description>Articles written by Shai Almog on foojay.io - Friends Of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sat, 29 Aug 2026 16:11:30 +0000</lastBuildDate><atom:link href="https://foojay.io/today/author/shai-almog/index.xml" rel="self" type="application/rss+xml"/><item><title>SQLite Across Every Port: One Contract, One Encrypted File Format</title><link>https://foojay.io/today/sqlite-across-every-port-one-contract-one-encrypted-file-format/</link><pubDate>Sat, 29 Aug 2026 16:11:30 +0000</pubDate><guid>https://foojay.io/today/sqlite-across-every-port-one-contract-one-encrypted-file-format/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/sqlite-across-every-port-one-contract-one-encrypted-file-format/sqlite-portable-encrypted.jpg" alt="A locked SQLite database connected to mobile, web, desktop, and watch applications" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;The original &lt;code&gt;com.codename1.db&lt;/code&gt; implementation delegated SQLite calls to the database supplied by each operating system. We knew this was less portable than the rest of Codename One, but fixing it meant taking ownership of SQLite on every target. That looked like a deep rabbit hole, so we exposed escape hatches instead. The &lt;a href="https://www.codenameone.com/blog/spatial-pluggable-sqlite/" target="_blank" rel="noopener noreferrer"&gt;pluggable SpatiaLite work we described in 2018&lt;/a&gt; is one example.&#10;| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>App Shield: Your Server Should Not Trust the App Calling It</title><link>https://foojay.io/today/app-shield-your-server-should-not-trust-the-app-calling-it/</link><pubDate>Fri, 28 Aug 2026 18:39:02 +0000</pubDate><guid>https://foojay.io/today/app-shield-your-server-should-not-trust-the-app-calling-it/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/app-shield-your-server-should-not-trust-the-app-calling-it/app-shield-server-attestation.jpg" alt="A shield between a mobile application and a protected server API" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;Any security check that runs only on a phone can be patched out on that phone. &lt;a href="https://github.com/codenameone/CodenameOne/pull/5486" target="_blank" rel="noopener noreferrer"&gt;App Shield&lt;/a&gt; moves the final decision to your server by attaching a short-lived, server-verified attestation token to protected requests.&#10;| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>The Third-Generation GUI Builder: One Workspace for Every Form</title><link>https://foojay.io/today/the-third-generation-gui-builder-one-workspace-for-every-form/</link><pubDate>Sat, 22 Aug 2026 03:17:19 +0000</pubDate><guid>https://foojay.io/today/the-third-generation-gui-builder-one-workspace-for-every-form/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/the-third-generation-gui-builder-one-workspace-for-every-form/third-generation-gui-builder.jpg" alt="A visual editor connecting project forms, CSS, Java source, and a live Codename One canvas" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;We have rebuilt the Codename One GUI Builder again. This is its third generation. The interesting part is not another drag-and-drop surface. It is what we kept, what Maven broke, and why a visual editor must understand the whole project instead of opening one generated form at a time.&#10;| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Push V3: One Message From Your Server to Every Surface</title><link>https://foojay.io/today/push-v3-one-message-from-your-server-to-every-surface/</link><pubDate>Fri, 07 Aug 2026 23:14:10 +0000</pubDate><guid>https://foojay.io/today/push-v3-one-message-from-your-server-to-every-surface/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/push-v3-one-message-from-your-server-to-every-surface/push-v3-new-cloud.jpg" alt="Push V3 connects one typed message to phones, widgets, and live surfaces" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;Push notifications should be application infrastructure, not a pile of expiring certificates and provider-specific JSON.&#10;| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;This week we merged &lt;a href="https://github.com/codenameone/CodenameOne/pull/5440" target="_blank" rel="noopener noreferrer"&gt;Push V3&lt;/a&gt; into the Codename One core and completed its new cloud implementation. It gives an application a typed message model, managed provider credentials, subscriptions, server-side segments, campaigns, analytics, and a direct path into &lt;a href="https://www.codenameone.com/blog/widgets-live-activities-dynamic-island/" target="_blank" rel="noopener noreferrer"&gt;Surfaces&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>The Codename One JavaScript Port Is Now Free and Open Source</title><link>https://foojay.io/today/the-codename-one-javascript-port-is-now-free-and-open-source/</link><pubDate>Mon, 03 Aug 2026 15:46:30 +0000</pubDate><guid>https://foojay.io/today/the-codename-one-javascript-port-is-now-free-and-open-source/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/the-codename-one-javascript-port-is-now-free-and-open-source/javascript-free-open-source.jpg" alt="The Codename One JavaScript Port Is Now Free and Open Source" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;The Codename One JavaScript port is now open source and available on every plan, including Free. You can also build the JavaScript target locally without a Codename One account.&#10;| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Own Your Pixels: Native Fidelity on Your Schedule</title><link>https://foojay.io/today/own-your-pixels-native-fidelity-on-your-schedule/</link><pubDate>Fri, 24 Jul 2026 15:45:24 +0000</pubDate><guid>https://foojay.io/today/own-your-pixels-native-fidelity-on-your-schedule/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/own-your-pixels-native-fidelity-on-your-schedule/pixel-perfect-is-a-test.jpg" alt="Own Your Pixels: Native Fidelity on Your Schedule" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;An iOS or Android update can change a screen you shipped without you changing a line of code. If your app builds its UI from UIKit, SwiftUI, Compose, or Material widgets, Apple or Google owns those widget implementations. Codename One does something different. It statically links our lightweight component implementation into your native app. The UI you test is the UI your users keep after the next OS update. An update can still break a platform API or permission contract, but it cannot swap our button implementation for a new one.&#10;| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>How We Beat HotSpot Performance (By Cheating, But Not Like That)</title><link>https://foojay.io/today/how-we-beat-hotspot-performance-by-cheating-but-not-like-that/</link><pubDate>Fri, 17 Jul 2026 17:24:17 +0000</pubDate><guid>https://foojay.io/today/how-we-beat-hotspot-performance-by-cheating-but-not-like-that/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/how-we-beat-hotspot-performance-by-cheating-but-not-like-that/beating-hotspot-performance.jpg" alt="How We Beat HotSpot Performance (By Cheating, But Not Like That)" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;No, we didn&amp;rsquo;t cheat in the benchmark. At least I hope we didn&amp;rsquo;t. Every optimization in this story was gated on bit identical output checksums against HotSpot, and the harness refuses to print a ratio when a checksum differs. If anything, this post is about how good HotSpot actually is. We tilted the table in our favor in every way we could, we hand tuned C code, and we still only beat it on some benchmarks. Getting there was a genuine struggle. If you want to understand the nuts and bolts of what your Java code costs, and the tradeoffs each runtime picks, I hope this is a good read.&#10;| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>More Surfaces, Same Deal: Cars, Sensors, Commerce, Video And Builds</title><link>https://foojay.io/today/more-surfaces-same-deal-cars-sensors-commerce-video-and-builds/</link><pubDate>Fri, 10 Jul 2026 18:17:06 +0000</pubDate><guid>https://foojay.io/today/more-surfaces-same-deal-cars-sensors-commerce-video-and-builds/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/more-surfaces-same-deal-cars-sensors-commerce-video-and-builds/one-codebase-more-surfaces.jpg" alt="More Surfaces, Same Deal: Cars, Sensors, Commerce, Video And Builds" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;Last week&amp;rsquo;s release post was about funding open source without the bait and switch. This week&amp;rsquo;s release tests that idea again, because two of the new features touch paid infrastructure directly: Commerce and versioned builds.&#10;| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Funding Open Source Without The Bait And Switch: Analytics, Native Maps, TV And More</title><link>https://foojay.io/today/funding-open-source-without-the-bait-and-switch-analytics-native-maps-tv-and-more/</link><pubDate>Sun, 05 Jul 2026 13:41:00 +0000</pubDate><guid>https://foojay.io/today/funding-open-source-without-the-bait-and-switch-analytics-native-maps-tv-and-more/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/funding-open-source-without-the-bait-and-switch-analytics-native-maps-tv-and-more/funding-open-source-without-the-bait-and-da742f04.jpg" alt="Funding Open Source Without The Bait And Switch" width="1600" height="800" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;Years ago I wrote a piece called &lt;a href="https://debugagent.com/open-source-bait-and-switch" target="_blank" rel="noopener noreferrer"&gt;Open Source Bait and Switch&lt;/a&gt;. The short version: a project is released as open source while it has no business model, a community forms around it, and then the bill comes due. The project either rots into abandonware because nobody can afford to maintain it, or it sprouts a home-grown &amp;ldquo;source available&amp;rdquo; license that quietly takes back the freedoms it was given on. You have watched this happen. So have I.&#10;| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Native Linux, Apple Watch, A Game Builder And Crash Protection</title><link>https://foojay.io/today/native-linux-apple-watch-a-game-builder-and-crash-protection/</link><pubDate>Fri, 26 Jun 2026 18:43:22 +0000</pubDate><guid>https://foojay.io/today/native-linux-apple-watch-a-game-builder-and-crash-protection/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/native-linux-apple-watch-a-game-builder-and-crash-protection/native-linux-apple-watch-game-builder-cr-ec6e2f86.jpg" alt="Native Linux, Apple Watch, A Game Builder And Crash Protection" width="1600" height="800" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;This week brings a native Linux desktop port, an Apple Watch and Wear OS port, a visual Game Builder with a high-level gaming API, and a new crash-protection system, with a tutorial following each one over the coming days. There is also a large piece of work that you mostly should not have noticed: we rebuilt the build cloud, and that rebuild caused a few failed builds along the way. More on that below.&#10;| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>We Will Not Sabotage Your Code</title><link>https://foojay.io/today/we-will-not-sabotage-your-code/</link><pubDate>Sat, 20 Jun 2026 15:37:22 +0000</pubDate><guid>https://foojay.io/today/we-will-not-sabotage-your-code/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/we-will-not-sabotage-your-code/we-will-not-sabotage-your-code.jpg" alt="We Will Not Sabotage Your Code" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;This is a very low bar. I am genuinely saddened that I need to write it down at all, because until last week it seemed too obvious to say out loud.&#10;| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Last week the &lt;a href="https://arstechnica.com/security/2026/05/fed-up-with-vibe-coders-dev-sneaks-data-nuking-prompt-injection-into-their-code/" target="_blank" rel="noopener noreferrer"&gt;news broke&lt;/a&gt; of an open source developer doing something I find reprehensible. The short version: fed up with &amp;ldquo;vibe coders,&amp;rdquo; he embedded a hidden prompt aimed at AI agents inside his framework, with instructions designed to destroy data on the machines of people who used it.&lt;/p&gt;</description></item><item><title>Native Java Win32, 3D Gaming, Printing and Wallet</title><link>https://foojay.io/today/native-java-win32-3d-gaming-printing-and-wallet/</link><pubDate>Fri, 19 Jun 2026 15:45:42 +0000</pubDate><guid>https://foojay.io/today/native-java-win32-3d-gaming-printing-and-wallet/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/native-java-win32-3d-gaming-printing-and-wallet/weekly-4df2ff44.jpg" alt="Native Java Win32, 3D Gaming, Printing and Wallet" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;This week we&amp;rsquo;re introducing native Windows support (no JVM!), a 3D graphics API, a gaming API, support for Apple Wallet, printing and more in what is probably our biggest update ever… But that&amp;rsquo;s not the thing that excites me the most.&#10;| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>OpenAPI, ORM, SVG and Lottie</title><link>https://foojay.io/today/openapi-orm-svg-and-lottie/</link><pubDate>Thu, 18 Jun 2026 00:52:45 +0000</pubDate><guid>https://foojay.io/today/openapi-orm-svg-and-lottie/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/openapi-orm-svg-and-lottie/build-time-codegen.jpg" alt="OpenAPI, ORM, SVG and Lottie" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;This is the third follow-up to &lt;a href="https://www.codenameone.com/blog/metal-default-new-build-cloud-and-a-new-format/" target="_blank" rel="noopener noreferrer"&gt;Friday&amp;rsquo;s release post&lt;/a&gt;. Saturday&amp;rsquo;s was about how you iterate; yesterday&amp;rsquo;s was about new platform APIs in the core; today&amp;rsquo;s is about a run of pieces that change how you write the structural parts of an app.&#10;| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Mac Native Builds, Live Protocols, And Open Issues Under 350</title><link>https://foojay.io/today/mac-native-builds-live-protocols-and-open-issues-under-350/</link><pubDate>Wed, 17 Jun 2026 15:03:06 +0000</pubDate><guid>https://foojay.io/today/mac-native-builds-live-protocols-and-open-issues-under-350/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/mac-native-builds-live-protocols-and-open-issues-under-350/weekly.jpg" alt="Mac Native Builds, Live Protocols, And Open Issues Under 350" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;Our focus was all over the place this week with work that targeted many different directions: desktop, monetization, communication, media, and more. This fits with our roadmap of one platform that delivers the promise Java never delivered: WORA for Everything Everywhere.&#10;| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>AI, OAuth, And Other Platform APIs In The Core</title><link>https://foojay.io/today/codename-one-ai-oauth-and-other-platform-apis-in-the-core/</link><pubDate>Mon, 15 Jun 2026 09:00:00 +0000</pubDate><guid>https://foojay.io/today/codename-one-ai-oauth-and-other-platform-apis-in-the-core/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/codename-one-ai-oauth-and-other-platform-apis-in-the-core/platform-apis-in-the-core.jpg" alt="AI, OAuth, And Other Platform APIs In The Core" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;This is the second follow-up to &lt;a href="https://www.codenameone.com/blog/metal-default-new-build-cloud-and-a-new-format/" target="_blank" rel="noopener noreferrer"&gt;Friday&amp;rsquo;s release post&lt;/a&gt;. It covers the platform APIs that moved into the framework core this release. There are two headline pieces (AI / LLM and the modern OAuth / OIDC stack), and two smaller pieces (WiFi / connectivity and share-sheet result callbacks). This continues the direction the previous release set when we moved NFC, biometrics, and cryptography into the framework core. The full background on that earlier set is in &lt;a href="https://www.codenameone.com/blog/nfc-crypto-biometrics-and-build-cloud/" target="_blank" rel="noopener noreferrer"&gt;NFC, Crypto, Biometrics, And A New Build Cloud&lt;/a&gt;.&#10;| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>On-Device Debugging And JUnit 5</title><link>https://foojay.io/today/on-device-debugging-and-junit-5/</link><pubDate>Fri, 12 Jun 2026 08:49:00 +0000</pubDate><guid>https://foojay.io/today/on-device-debugging-and-junit-5/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/on-device-debugging-and-junit-5/developer-workflow-debug-and-junit.jpg" alt="On-Device Debugging And JUnit 5" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;This is the first follow-up to &lt;a href="https://www.codenameone.com/blog/metal-default-new-build-cloud-and-a-new-format/" target="_blank" rel="noopener noreferrer"&gt;Friday&amp;rsquo;s release post&lt;/a&gt; and it covers the two changes from this release that affect how you iterate on a Codename One app rather than what the app itself does. On-device debugging that treats Java as Java on a real iPhone or a real Android device, and standard JUnit 5 against the JavaSE simulator. The first is the one we have been wanting for a long time, and is the one that takes the most explaining, so most of the post is about it.&#10;| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Metal Default, A New Build Cloud, And A New Format</title><link>https://foojay.io/today/metal-default-a-new-build-cloud-and-a-new-format/</link><pubDate>Mon, 08 Jun 2026 09:47:43 +0000</pubDate><guid>https://foojay.io/today/metal-default-a-new-build-cloud-and-a-new-format/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/metal-default-a-new-build-cloud-and-a-new-format/metal-default-new-build-cloud-and-a-new-af830751.jpg" alt="Metal Default, A New Build Cloud, And A New Format" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;This week&amp;rsquo;s release post looks different on purpose. The Friday omnibus has been getting longer and longer, and that has been working against us in two ways. SEO ignores 5,000 word pages that cover twelve unrelated topics, so the actual material gets buried instead of indexed against the queries that should find it. And when a single release post covers ten things, it becomes hard to point a colleague at &amp;ldquo;that one Codename One change from a few weeks ago&amp;rdquo; without scrolling for ten minutes.&#10;| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>NFC, Crypto, Biometrics, And A New Build Cloud</title><link>https://foojay.io/today/nfc-crypto-biometrics-and-a-new-build-cloud/</link><pubDate>Wed, 03 Jun 2026 08:37:24 +0000</pubDate><guid>https://foojay.io/today/nfc-crypto-biometrics-and-a-new-build-cloud/</guid><description>&lt;p&gt;Last week was about defaults. This week is about device APIs moving into the framework core, a small simulator change that revolutionizes Bluetooth development, and a preview of the new Build Cloud UI we would love your feedback on. There is a handful of other things in here too — and the Metal default flip I trailed &lt;a href="https://www.codenameone.com/blog/skills-java17-and-theme-accents/" target="_blank" rel="noopener noreferrer"&gt;last week&lt;/a&gt; is in a different state than I expected, which is worth a word at the end.&lt;/p&gt;</description></item><item><title>Skills, Java 17, And Theme Accents with Codename One</title><link>https://foojay.io/today/skills-java-17-and-theme-accents-with-codename-one/</link><pubDate>Wed, 27 May 2026 09:32:00 +0000</pubDate><guid>https://foojay.io/today/skills-java-17-and-theme-accents-with-codename-one/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/skills-java-17-and-theme-accents-with-codename-one/skills-java17-and-theme-accents.jpg" alt="Skills, Java 17, And Theme Accents" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;Last week was about Metal and the Skin Designer. This week the headline items are about what a brand new project looks like when you generate it: the default JDK is Java 17, and every generated project ships with an &lt;code&gt;AGENTS.md&lt;/code&gt; authoring skill that lets any modern AI agent work on the project intelligently. There are also some other things worth covering: a runtime accent palette on the new native themes, three Metal follow-ups (one of which introduces a new matrix-correct translate API), the JDK 11+ String API gap closed, and iOS push permission that no longer fires at app launch.&lt;/p&gt;</description></item><item><title>Metal and Skins</title><link>https://foojay.io/today/metal-and-skins/</link><pubDate>Thu, 21 May 2026 08:59:46 +0000</pubDate><guid>https://foojay.io/today/metal-and-skins/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/metal-and-skins/metal-and-skins.jpg" alt="Metal and Skins" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;This post has a lot to cover. Before we get to any of it I want to take on the uncomfortable subject first: quality. Two incidents from the past two weeks deserve a public explanation, one was a bug that fits into our normal iteration loop and one was a serious mistake on my part. Both deserve the kind of explanation I would want if I were on the other side of the import.&#10;| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Liquid Glass, Material 3, And A Lot Of Plumbing</title><link>https://foojay.io/today/liquid-glass-material-3-and-a-lot-of-plumbing/</link><pubDate>Mon, 11 May 2026 09:10:00 +0000</pubDate><guid>https://foojay.io/today/liquid-glass-material-3-and-a-lot-of-plumbing/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/liquid-glass-material-3-and-a-lot-of-plumbing/liquid-glass-material-3-modern-native-th-99b7f8fd.jpg" alt="Header Image" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;It has been one of those weeks where the diff is bigger than the headline. The headline is short — Codename One now ships modern native themes: an iOS &amp;ldquo;liquid glass&amp;rdquo; look and an Android Material 3 look, bundled into the iOS and Android ports, on by default in the Playground, and selectable from a brand new menu in the simulator. The diff behind that headline is several thousand lines across the platform ports, the simulator, the GUI plumbing, and a small army of screenshot tests.&lt;/p&gt;</description></item><item><title>Extending Java APIs - Add Missing Features Without the Hassle</title><link>https://foojay.io/today/extending-java-apis-add-missing-features-without-the-hassle/</link><pubDate>Fri, 07 Mar 2025 12:03:57 +0000</pubDate><guid>https://foojay.io/today/extending-java-apis-add-missing-features-without-the-hassle/</guid><description>&lt;p&gt;The Java API is vast. That&amp;rsquo;s great, but sometimes a missing method or capability can be frustrating. With Manifold, developers can solve this problem without having to wait for Java to add a feature in a later version. Even more importantly, Manifold provides many such extensions out of the box, making Java better for developers. In this post, we will discuss the extension capability. It lets us change classes in the Java API in a compatible way without risk. If Java adds these APIs later then we can seamlessly switch to them.&lt;/p&gt;</description></item><item><title>Front End Debugging Part 3: Networking</title><link>https://foojay.io/today/front-end-debugging-part-3-networking/</link><pubDate>Thu, 27 Feb 2025 16:34:04 +0000</pubDate><guid>https://foojay.io/today/front-end-debugging-part-3-networking/</guid><description>&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#network-debugging-powerhouse"&gt;&lt;strong&gt;Network Debugging Powerhouse&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#reissuing-and-modifying-requests"&gt;&lt;strong&gt;Re-Issuing and Modifying Requests&lt;/strong&gt;&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#curl-and-postman"&gt;cURL and Postman&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#throttling-and-debugging-race-conditions"&gt;&lt;strong&gt;Throttling and Debugging Race Conditions&lt;/strong&gt;&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#why-throttling-matters"&gt;Why Throttling Matters:&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#how-to-use"&gt;How to Use&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#managing-state-with-storage-tools"&gt;&lt;strong&gt;Managing State with Storage Tools&lt;/strong&gt;&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#challenges-of-state-management"&gt;Challenges of State Management&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#analyzing-request-and-response-headers"&gt;&lt;strong&gt;Analyzing Request and Response Headers&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#debugging-in-incognito-mode-limitations-and-best-practices"&gt;&lt;strong&gt;Debugging in Incognito Mode: Limitations and Best Practices&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#connecting-the-frontend-to-the-database"&gt;&lt;strong&gt;Connecting the Front-End to the Database&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#final-word"&gt;Final Word&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Debugging network communication issues is a critical skill for any front-end developer. While tools like &lt;a href="https://debugagent.com/wireshark-tcpdump-a-debugging-power-couple" target="_blank" rel="noopener noreferrer"&gt;Wireshark&lt;/a&gt; provide low-level insight into network traffic, modern browsers like Chrome and Firefox offer developer tools with powerful features tailored for web development. In this post we will discuss using browser-based tools to debug network communication issues effectively. This is a far better approach than using Wireshark for the vast majority of simple cases.&lt;/p&gt;</description></item><item><title>Front End Debugging Part 2: Console.log() to the Max</title><link>https://foojay.io/today/front-end-debugging-part-2-console-log-to-the-max/</link><pubDate>Tue, 03 Dec 2024 16:28:40 +0000</pubDate><guid>https://foojay.io/today/front-end-debugging-part-2-console-log-to-the-max/</guid><description>&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#understanding-frontend-logging-vs-backend-logging"&gt;&lt;strong&gt;Understanding Front-End Logging vs. Back-End Logging&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#leveraging-console-log-levels"&gt;&lt;strong&gt;Leveraging Console Log Levels&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#customizing-console-output-with-css"&gt;&lt;strong&gt;Customizing Console Output with CSS&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#stack-tracing-with-consoletrace"&gt;&lt;strong&gt;Stack Tracing with console.trace()&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#assertions-for-designbycontract"&gt;&lt;strong&gt;Assertions for Design-by-Contract&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#printing-tables-for-clearer-data-visualization"&gt;&lt;strong&gt;Printing Tables for Clearer Data Visualization&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#copying-objects-to-the-clipboard"&gt;&lt;strong&gt;Copying Objects to the Clipboard&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#inspecting-with-consoledir-and-dirxml"&gt;&lt;strong&gt;Inspecting with console.dir() and dirxml()&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#counting-function-calls"&gt;&lt;strong&gt;Counting Function Calls&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#organizing-logs-with-groups"&gt;&lt;strong&gt;Organizing Logs with Groups&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#chromespecific-debugging-features"&gt;&lt;strong&gt;Chrome-Specific Debugging Features&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#final-word"&gt;&lt;strong&gt;Final Word&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;In &lt;a href="https://foojay.io/today/front-end-debugging-part-1-not-just-console-log/"&gt;my previous article&lt;/a&gt;, I talked about why &lt;code&gt;Console.log()&lt;/code&gt; isn&amp;rsquo;t the most effective debugging tool. In this installment, we will do a bit of an about-face and discuss the ways in which &lt;code&gt;Console.log()&lt;/code&gt; is fantastic. Let&amp;rsquo;s break down some essential concepts and practices that can make your debugging life much easier and more productive.&lt;/p&gt;</description></item><item><title>strace Revisited: Simple is Beautiful</title><link>https://foojay.io/today/strace-revisited-simple-is-beautiful/</link><pubDate>Tue, 26 Nov 2024 14:58:28 +0000</pubDate><guid>https://foojay.io/today/strace-revisited-simple-is-beautiful/</guid><description>&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#understanding-strace-and-its-origins"&gt;Understanding strace and its Origins&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#a-look-back-strace-and-dtrace"&gt;&lt;strong&gt;A Look Back: strace and dtrace&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#originating-from-sun-microsystems"&gt;&lt;strong&gt;Originating from Sun Microsystems&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#technical-functioning-of-strace"&gt;Technical Functioning of strace&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#the-role-of-ptrace-in-strace"&gt;&lt;strong&gt;The Role of ptrace in strace&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#comparing-with-dtrace"&gt;&lt;strong&gt;Comparing with DTrace&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#practical-usage-and-advantages"&gt;Practical Usage and Advantages&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#ease-of-use-and-accessibility"&gt;&lt;strong&gt;Ease of Use and Accessibility&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#favored-in-linux-environments"&gt;&lt;strong&gt;Favored in Linux Environments&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#strace-in-action-a-closer-look-at-system-calls"&gt;strace in Action: A Closer Look at System Calls&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#basic-usage-and-output-analysis"&gt;&lt;strong&gt;Basic Usage and Output Analysis&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#interpreting-system-calls-for-debugging"&gt;&lt;strong&gt;Interpreting System Calls for Debugging&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#advanced-features-and-tips"&gt;Advanced Features and Tips&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#filtering-system-calls-for-efficiency"&gt;&lt;strong&gt;Filtering System Calls for Efficiency&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#exploring-a-variety-of-system-calls"&gt;&lt;strong&gt;Exploring a Variety of System Calls&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#strace-and-java-a-special-case"&gt;strace and Java: A Special Case&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#strace-with-the-jvm"&gt;&lt;strong&gt;strace with the JVM&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#allocations-and-threading-in-java"&gt;&lt;strong&gt;Allocations and Threading in Java&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#final-word"&gt;Final Word&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="in-the-realm-of-system-debugging-particularly-on-linux-platforms-strace-stands-out-as-a-powerful-and-indispensable-tool-its-simplicity-and-efficacy-make-it-the-go-to-solution-for-diagnosing-and-understanding-system-level-operations-especially-when-working-with-servers-and-containers"&gt;In the realm of system debugging, particularly on Linux platforms, strace stands out as a powerful and indispensable tool. Its simplicity and efficacy make it the go-to solution for diagnosing and understanding system-level operations, especially when working with servers and containers.&lt;/h3&gt;&#10;&lt;p&gt;In this article, we&amp;rsquo;ll delve into the nuances of strace, from its history and technical functioning to practical applications and advanced features. Whether you&amp;rsquo;re a seasoned developer or just starting out, this exploration will enhance your diagnostic toolkit and provide deeper insights into the workings of Linux systems.&lt;/p&gt;</description></item><item><title>Front End Debugging Part 1: Not just Console Log</title><link>https://foojay.io/today/front-end-debugging-part-1-not-just-console-log/</link><pubDate>Tue, 05 Nov 2024 14:01:45 +0000</pubDate><guid>https://foojay.io/today/front-end-debugging-part-1-not-just-console-log/</guid><description>&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#instant-debugging-with-the-raw-debugger-endraw-keyword"&gt;&lt;strong&gt;Instant Debugging with the&lt;/strong&gt; &lt;code&gt;debugger&lt;/code&gt; Keyword&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#triggering-debugging-from-the-console"&gt;&lt;strong&gt;Triggering Debugging from the Console&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#dom-breakpoints-monitoring-dom-changes"&gt;&lt;strong&gt;DOM Breakpoints: Monitoring DOM Changes&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#xhr-breakpoints-uncovering-hidden-network-calls"&gt;&lt;strong&gt;XHR Breakpoints: Uncovering Hidden Network Calls&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#simulating-environments-for-debugging"&gt;&lt;strong&gt;Simulating Environments for Debugging&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#debugging-layout-and-style-issues"&gt;&lt;strong&gt;Debugging Layout and Style Issues&lt;/strong&gt;&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#final-word"&gt;Final Word&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;As a Java developer, most of my focus is on the backend side of debugging. Front-end debugging poses different challenges and has sophisticated tools of its own. Unfortunately, print-based debugging has become the norm in front-end. To be fair, it makes more sense there as the cycles are different and the problem is always a single user problem. But even if you choose to use &lt;code&gt;Console.log&lt;/code&gt;, there&amp;rsquo;s a lot of nuance to pick up there.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>The Art of Full Stack Debugging</title><link>https://foojay.io/today/the-art-of-full-stack-debugging/</link><pubDate>Fri, 25 Oct 2024 07:24:06 +0000</pubDate><guid>https://foojay.io/today/the-art-of-full-stack-debugging/</guid><description>&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#full-stack-development-a-shifting-definition"&gt;Full Stack Development, A Shifting Definition&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#the-full-stack-debugging-approach"&gt;The Full Stack Debugging Approach&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#frontend-debugging-tools-and-techniques"&gt;Frontend Debugging: Tools and Techniques&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#it-isnt-just-consolelog"&gt;It isn&amp;rsquo;t &amp;ldquo;Just Console.log&amp;rdquo;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#the-power-of-developer-tools"&gt;The Power of Developer Tools&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#tackling-code-obfuscation"&gt;Tackling Code Obfuscation&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#debugging-across-layers"&gt;Debugging Across Layers&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#isolating-issues-across-the-stack"&gt;Isolating Issues Across the Stack&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#the-importance-of-systemlevel-debugging"&gt;The Importance of System-Level Debugging&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#embracing-complexity"&gt;Embracing Complexity&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#conclusion"&gt;Conclusion&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="full-stack-development-is-often-likened-to-an-intricate-balancing-act-where-developers-are-expected-to-juggle-multiple-responsibilities-across-the-frontend-backend-database-and-beyond-as-the-definition-of-full-stack-development-continues-to-evolve-so-too-does-the-approach-to-debugging"&gt;Full stack development is often likened to an intricate balancing act, where developers are expected to juggle multiple responsibilities across the frontend, backend, database, and beyond. As the definition of full stack development continues to evolve, so too does the approach to debugging.&lt;/h3&gt;&#10;&lt;p&gt;Full stack debugging is an essential skill for developers, as it involves tracking issues through multiple layers of an application, often navigating domains where one&amp;rsquo;s knowledge may only be cursory. In this blog post I aim to explore the nuances of full stack debugging, offering practical tips and insights for developers navigating the complex web of modern software development.&lt;/p&gt;</description></item><item><title>Unleashing the Power of Git Bisect</title><link>https://foojay.io/today/unleashing-the-power-of-git-bisect/</link><pubDate>Tue, 08 Oct 2024 08:15:50 +0000</pubDate><guid>https://foojay.io/today/unleashing-the-power-of-git-bisect/</guid><description>&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#the-essence-of-debugging-with-git"&gt;The Essence of Debugging with Git&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#setting-the-stage-for-debugging"&gt;Setting the Stage for Debugging&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#initiating-bisect-mode"&gt;Initiating Bisect Mode&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#marking-the-known-good-revision"&gt;Marking the Known Good Revision&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#marking-the-known-bad-revision"&gt;Marking the Known Bad Revision&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#bisecting-to-find-the-culprit"&gt;Bisecting to Find the Culprit&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#expected-output"&gt;Expected Output&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#reset-and-analysis"&gt;Reset and Analysis&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#advanced-usage-and-tips"&gt;Advanced Usage and Tips&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#script-automation-for-precision-and-efficiency"&gt;Script Automation for Precision and Efficiency&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#handling-flaky-tests-with-strategy"&gt;Handling Flaky Tests with Strategy&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#skipping-commits-with-care"&gt;Skipping Commits with Care&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#unraveling-a-regression-mystery"&gt;Unraveling a Regression Mystery&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#final-word"&gt;Final Word&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;We don&amp;rsquo;t usually think of Git as a debugging tool. Surprisingly, Git shines not just as a version control system but also as a potent debugging ally when dealing with the tricky matter of regressions.&lt;/p&gt;</description></item><item><title>Debugging Kubernetes - Troubleshooting Guide</title><link>https://foojay.io/today/debugging-kubernetes-troubleshooting-guide/</link><pubDate>Mon, 26 Aug 2024 16:45:45 +0000</pubDate><guid>https://foojay.io/today/debugging-kubernetes-troubleshooting-guide/</guid><description>&lt;p&gt;&lt;strong&gt;Table of Contents&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#identifying-configuration-issues"&gt;Identifying Configuration Issues&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#common-causes-and-solutions"&gt;Common Causes and Solutions&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#detailed-investigation-steps"&gt;Detailed Investigation Steps&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#dealing-with-image-pull-errors"&gt;Dealing with Image Pull Errors&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#troubleshooting-steps"&gt;Troubleshooting Steps&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#handling-node-issues"&gt;Handling Node Issues&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#preventive-measures"&gt;Preventive Measures&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#managing-missing-configuration-keys-or-secrets"&gt;Managing Missing Configuration Keys or Secrets&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#utilizing-buildg-for-interactive-debugging"&gt;Utilizing Buildg for Interactive Debugging&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#conclusion"&gt;Conclusion&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;As Kubernetes continues to revolutionize the way we manage and deploy applications, understanding its intricacies becomes essential for developers and operations teams alike. If you don&amp;rsquo;t have a dedicated DevOps team you probably shouldn&amp;rsquo;t be working with Kubernetes.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Failure is Required: Understanding Fail-Safe &amp; Fail-Fast Strategies</title><link>https://foojay.io/today/failure-is-required-understanding-fail-safe-and-fail-fast-strategies/</link><pubDate>Tue, 30 Jul 2024 08:08:33 +0000</pubDate><guid>https://foojay.io/today/failure-is-required-understanding-fail-safe-and-fail-fast-strategies/</guid><description>&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#failfast"&gt;Fail-Fast&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#failsafe"&gt;Fail-Safe&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#choosing-between-failfast-and-failsafe"&gt;Choosing Between Fail-Fast and Fail-Safe&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#balancing-both"&gt;Balancing Both&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#consistent-layer-behavior"&gt;Consistent Layer Behavior&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#retrys-are-not-failsafe"&gt;Retry&amp;rsquo;s Are not Fail-Safe&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#redefining-failure"&gt;Redefining Failure&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#data-corruption"&gt;Data Corruption&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#dont-fix-the-bug"&gt;Don&amp;rsquo;t Fix the Bug&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#debugging-failure"&gt;Debugging Failure&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#avoiding-cascading-failure"&gt;Avoiding Cascading Failure&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#hybrid-in-production"&gt;Hybrid in Production&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#final-word"&gt;Final Word&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Failures in software systems are inevitable. How these failures are handled can significantly impact system performance, reliability, and the business&amp;rsquo;s bottom line.&lt;/p&gt;&#10;&lt;p&gt;In this article, I want to discuss the upside of failure. Why you should seek failure, why failure is good and why avoiding failure can reduce the reliability of your application. We will start with the discussion of fail-fast vs. fail-safe, this will take us to the second discussion about failures in general.&lt;/p&gt;</description></item></channel></rss>