<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Calvin's Dev Logs</title>
    <link>https://calvin.my/</link>
    <description>Calvin's dev logs. A place to track my coding journey. Code snippets, demos, tutorials, guides, solutions of various software topics. Learn from odd errors &amp; make discoveries.</description>
    <language>en-us</language>
    <pubDate>Sun, 05 Apr 2026 12:54:42 +0800</pubDate>
    <atom:link href="https://calvin.my/feed" rel="self" type="application/rss+xml"/>
    <item>
      <title>Interesting features in Claude Code CLI</title>
      <link>https://calvin.my/posts/interesting-features-in-claude-code-cli</link>
      <description>The post highlights several lesser-known Claude Code CLI features that improve usability and personalization. It covers customizing the terminal status line, enabling push-to-talk voice input, accessing an official sticker store, and using an environment variable that changes the input layout. It also notes an insights command that reviews the past month of sessions and summarizes usage patterns, helping users understand and improve how they work with Claude.</description>
      <pubDate>Sun, 05 Apr 2026 12:54:42 +0800</pubDate>
      <guid>https://calvin.my/posts/interesting-features-in-claude-code-cli</guid>
    </item>
    <item>
      <title>Warning: connection is not using a post-quantum key exchange algorithm</title>
      <link>https://calvin.my/posts/warning-connection-is-not-using-a-post-quantum-key-exchange-algorithm</link>
      <description>The post explains an OpenSSH warning about connections not using a post-quantum key exchange method, noting that it is a precaution against future “store now, decrypt later” risks rather than an immediate security problem. It outlines three responses: upgrade the server to OpenSSH 10 or later, configure the client to prefer quantum-resistant key exchanges and test whether the server supports them, or suppress the warning in the SSH config if needed.</description>
      <pubDate>Thu, 26 Mar 2026 14:18:18 +0800</pubDate>
      <guid>https://calvin.my/posts/warning-connection-is-not-using-a-post-quantum-key-exchange-algorithm</guid>
    </item>
    <item>
      <title>Warning 'mysql_native_password' authentication type is disabled by default in MySQL 8.4</title>
      <link>https://calvin.my/posts/warning-mysql_native_password-authentication-type-is-disabled-by-default-in-mysql-8-4</link>
      <description>Upgrading from MySQL 8.0 to 8.4 can trigger a warning because `mysql_native_password` is deprecated and disabled by default. The post explains that affected accounts should be identified and moved to a newer authentication method, preferably `caching_sha2_password`. It recommends first updating to the latest 8.0 minor release, then reviewing user plugins, changing each impacted account, and testing connections to ensure clients still authenticate successfully.</description>
      <pubDate>Thu, 26 Mar 2026 01:07:53 +0800</pubDate>
      <guid>https://calvin.my/posts/warning-mysql_native_password-authentication-type-is-disabled-by-default-in-mysql-8-4</guid>
    </item>
    <item>
      <title>The Chrome DevTool MCP General Availability</title>
      <link>https://calvin.my/posts/the-chrome-devtool-mcp-general-availability</link>
      <description>The Chrome DevTools MCP server is now generally available in Chrome stable (v146). After enabling remote debugging, you can connect it to developer CLIs like Gemini or Claude so agents can access your browser session. In tests Claude listed open tabs, took screenshots, navigated and reloaded pages, inspected templates, and adjusted layout—widening a form and its inputs—demonstrating live, programmatic browser interaction for debugging and UI fixes.</description>
      <pubDate>Sun, 15 Mar 2026 13:07:37 +0800</pubDate>
      <guid>https://calvin.my/posts/the-chrome-devtool-mcp-general-availability</guid>
    </item>
    <item>
      <title>Enabling agentic coding in Xcode</title>
      <link>https://calvin.my/posts/enabling-agentic-coding-in-xcode</link>
      <description>This guide shows how to enable Xcode v26.3’s agentic coding feature: update Xcode, open the Coding Agent panel, pick a provider (the demo uses Anthropic Claude), link your subscription, install the Claude Agent tool, and authorize Xcode to consume your code quota. After setup a chat interface appears; you can send requests, report issues via a per-message Report button, switch to the Claude Agent with the edit control, and start building with the agent tool.</description>
      <pubDate>Sun, 01 Mar 2026 12:36:28 +0800</pubDate>
      <guid>https://calvin.my/posts/enabling-agentic-coding-in-xcode</guid>
    </item>
    <item>
      <title>Gemini 3.1 Flash image (Nano Banana 2) preview</title>
      <link>https://calvin.my/posts/gemini-3-1-flash-image-nano-banana-2-preview</link>
      <description>Google's Nano Banana 2 (Gemini 3.1 Flash Image) preview outlines API changes and tests. The gemini-3.1-flash-image-preview model adds a 0.5K (512px) size, several new aspect ratios including ultra-wide and tall formats, and Google Search grounding (including image search), and can return images or combined text+image outputs. Tests produced a small app icon, 8:1 panoramic landscape, 1:8 film-strip graphic, and a currency-rate board using live search, demonstrating practical uses for varied assets and grounded visual queries.</description>
      <pubDate>Fri, 27 Feb 2026 15:06:26 +0800</pubDate>
      <guid>https://calvin.my/posts/gemini-3-1-flash-image-nano-banana-2-preview</guid>
    </item>
    <item>
      <title>Rails Solid Queue async mode</title>
      <link>https://calvin.my/posts/rails-solid-queue-async-mode</link>
      <description>Solid Queue reintroduced an Async Mode that runs Supervisor, Worker, Dispatcher and Scheduler in a single process to reduce memory usage and improve suitability for resource-constrained deployments. To use it, upgrade the gem to v1.3.0 or later and start your supervisor with the mode set to async, then reread/update the supervisor configuration. Verify the mode by checking the supervisor process name, which will indicate async.</description>
      <pubDate>Wed, 07 Jan 2026 11:36:50 +0800</pubDate>
      <guid>https://calvin.my/posts/rails-solid-queue-async-mode</guid>
    </item>
    <item>
      <title>Adding a catch all black hole blocks in Nginx</title>
      <link>https://calvin.my/posts/adding-a-catch-all-black-hole-blocks-in-nginx</link>
      <description>This post describes adding a catch‑all black‑hole server block in Nginx to handle requests that don't match defined domains. The approach uses a default server with a placeholder SSL certificate and immediately drops unwanted connections, preventing misrouted traffic from reaching real applications, reducing bandwidth used by IP‑based scanners, and avoiding accidental exposure of valid site certificates during HTTPS handshakes. Restart Nginx after adding the block to activate it.</description>
      <pubDate>Mon, 05 Jan 2026 13:21:56 +0800</pubDate>
      <guid>https://calvin.my/posts/adding-a-catch-all-black-hole-blocks-in-nginx</guid>
    </item>
    <item>
      <title>Using simplecov code coverage with Rails &amp; Minitest</title>
      <link>https://calvin.my/posts/using-simplecov-code-coverage-with-rails-minitest</link>
      <description>This post shows how to integrate SimpleCov with a Rails 8 app using Minitest. It covers adding the gem and enabling SimpleCov in the test helper with branch coverage, per‑suite command names and a merge timeout, plus optional filters to exclude very small files. You can add custom groups (for example, providers). Run unit and system suites with per‑suite environment names so reports merge, and find the combined HTML coverage in the coverage directory.</description>
      <pubDate>Fri, 02 Jan 2026 14:23:46 +0800</pubDate>
      <guid>https://calvin.my/posts/using-simplecov-code-coverage-with-rails-minitest</guid>
    </item>
    <item>
      <title>A simple Ruby::Box demo</title>
      <link>https://calvin.my/posts/a-simple-ruby-box-demo</link>
      <description>This post demos Ruby 4.0's experimental Ruby Box, which creates in-process isolated execution spaces. It contrasts an unsafe eval of LLM-generated code with running that code inside a Ruby Box, showing the unsafe approach can reach a global user object and leak credentials while the box blocks that access. The author says the feature could enable safer LLM-driven code execution but remains experimental and needs measures like restricting libraries and scanning for malicious patterns.</description>
      <pubDate>Sat, 27 Dec 2025 15:21:58 +0800</pubDate>
      <guid>https://calvin.my/posts/a-simple-ruby-box-demo</guid>
    </item>
    <item>
      <title>Litestream 0.5.x updates</title>
      <link>https://calvin.my/posts/litestream-0-5-x-updates</link>
      <description>This post explains using Litestream v0.5.x to back up SQLite databases to S3: install the matching release, enable and start the Litestream service, then edit its configuration to provide AWS credentials, set a sync interval, and define S3 replica targets. After restarting, snapshots appear in the configured S3 bucket. To restore, ensure you have valid S3 credentials and use Litestream’s restore functionality to recover a database.</description>
      <pubDate>Thu, 25 Dec 2025 16:29:32 +0800</pubDate>
      <guid>https://calvin.my/posts/litestream-0-5-x-updates</guid>
    </item>
    <item>
      <title>Build a simple app that describes an image and works offline</title>
      <link>https://calvin.my/posts/build-a-simple-app-that-describes-an-image-and-works-offline</link>
      <description>This post demonstrates building an Android app that uses the Gemini Image Description API to generate English image descriptions locally. It outlines prerequisites (SDK 29+, limited flagship-device support, no emulator), initializing the image describer, checking feature status, triggering model download when needed, running on-device inference with timeout handling, and cleaning up resources. The UI flow prompts users to download the model and grant storage permission; once downloaded, descriptions work offline on supported devices.</description>
      <pubDate>Sun, 14 Dec 2025 21:11:09 +0800</pubDate>
      <guid>https://calvin.my/posts/build-a-simple-app-that-describes-an-image-and-works-offline</guid>
    </item>
    <item>
      <title>API Error: claude block must have a corresponding `tool_use` block in the previous message</title>
      <link>https://calvin.my/posts/api-error-claude-block-must-have-a-corresponding-tool_use-block-in-the-previous-message</link>
      <description>The post explains how to resolve Claude Code's blocking error indicating a missing tool-use block. Remedies include starting a new conversation, using a compact feature to clear history while preserving a summary, or using a rewind feature to step back one or two checkpoints and restore a chosen checkpoint's conversation, code, or both. Restoring removes the problematic recent conversation so you can continue from the earlier state. A related bug report is noted.</description>
      <pubDate>Tue, 02 Dec 2025 18:39:00 +0800</pubDate>
      <guid>https://calvin.my/posts/api-error-claude-block-must-have-a-corresponding-tool_use-block-in-the-previous-message</guid>
    </item>
    <item>
      <title>Gemini 3 Pro image (Nano Banana Pro) early preview</title>
      <link>https://calvin.my/posts/gemini-3-pro-image-nano-banana-pro-early-preview</link>
      <description>Google's Nano Banana Pro image model (Gemini 3 Pro) was evaluated via its API to assess image generation, reference-image guidance, conversational edits, and mixed realistic/illustrative outputs. The API supports configurable resolutions up to 4K and enforces a mandatory internal thinking process that returns a large signature which must be supplied to continue conversations. Tests produced high-quality 4K JPEGs but with multi-minute streaming latency, larger file sizes, increased token usage, and substantial signature storage considerations.</description>
      <pubDate>Sun, 23 Nov 2025 22:37:47 +0800</pubDate>
      <guid>https://calvin.my/posts/gemini-3-pro-image-nano-banana-pro-early-preview</guid>
    </item>
    <item>
      <title>Adding sub-resource integrity with Importmap &amp; Rails</title>
      <link>https://calvin.my/posts/adding-sub-resource-integrity-with-importmap-rails</link>
      <description>Subresource Integrity requires a cryptographic hash for resources; while CDN or static assets provide fixed hashes, build-time generated files need per-build hash calculation. Rails can handle this: configure the hashing algorithm, enable integrity on stylesheet tags, and activate integrity support for importmap-managed modules. After setup, Rails adds integrity attributes to stylesheet and modulepreload links so browsers can verify fetched assets' integrity.</description>
      <pubDate>Sat, 15 Nov 2025 22:53:12 +0800</pubDate>
      <guid>https://calvin.my/posts/adding-sub-resource-integrity-with-importmap-rails</guid>
    </item>
    <item>
      <title>Adding sub-resource integrity with Vite build</title>
      <link>https://calvin.my/posts/adding-sub-resource-integrity-with-vite-build</link>
      <description>Vite doesn't natively produce subresource integrity hashes for build-generated assets, so the post shows using a plugin to compute them during build. It recommends vite-plugin-manifest-sri: install the package, enable it in Vite config, and run the build. The generated manifest includes integrity hashes and the served HTML will include integrity attributes; you can also opt for stronger algorithms such as SHA‑512, enabling SRI protection for build artifacts.</description>
      <pubDate>Thu, 13 Nov 2025 10:28:47 +0800</pubDate>
      <guid>https://calvin.my/posts/adding-sub-resource-integrity-with-vite-build</guid>
    </item>
    <item>
      <title>Install the missing ext-intl PHP extension in MacOS</title>
      <link>https://calvin.my/posts/install-the-missing-ext-intl-php-extension-in-macos</link>
      <description>Homebrew removed the intl extension from its PHP formulae, so after updating PHP on macOS apps that require ext-intl may report the extension is missing. To fix this, either switch to another PHP provider (for example Laravel Herd) or compile PHP yourself, or install Homebrew’s separate php-intl formula which provides the intl extension and can be added alongside the installed PHP.</description>
      <pubDate>Wed, 12 Nov 2025 15:58:58 +0800</pubDate>
      <guid>https://calvin.my/posts/install-the-missing-ext-intl-php-extension-in-macos</guid>
    </item>
    <item>
      <title>New ways to install Claude Code on macOS</title>
      <link>https://calvin.my/posts/new-ways-to-install-claude-code-on-macos</link>
      <description>Anthropic previously distributed Claude Code via NPM, but now offers two macOS alternatives: a one-line installer script and a Homebrew cask, both of which remove the NPM prerequisite. To switch, uninstall the global NPM package first, then install Claude Code using either alternative and run the CLI. These options simplify installation for users who prefer not to use NPM.</description>
      <pubDate>Tue, 04 Nov 2025 20:47:53 +0800</pubDate>
      <guid>https://calvin.my/posts/new-ways-to-install-claude-code-on-macos</guid>
    </item>
    <item>
      <title>Breaking change in net-http gem to exclude default content type</title>
      <link>https://calvin.my/posts/breaking-change-in-net-http-gem-to-exclude-default-content-type</link>
      <description>The net-http gem (from v0.7.0) no longer sets a default Content-Type header. That change can alter HTTP request behavior for clients and libraries that depended on the prior default—examples include HTTP wrappers and Google reCAPTCHA verification, which may return invalid-input-response when the header is missing. The remedy is to explicitly set the appropriate Content-Type header (for example, the form-encoding content type) on affected requests.</description>
      <pubDate>Sat, 01 Nov 2025 16:57:41 +0800</pubDate>
      <guid>https://calvin.my/posts/breaking-change-in-net-http-gem-to-exclude-default-content-type</guid>
    </item>
    <item>
      <title>Claude Code's vision - The Chrome DevTool MCP</title>
      <link>https://calvin.my/posts/claude-code-s-vision-the-chrome-devtool-mcp</link>
      <description>The post explains using Claude Code with Chrome DevTools MCP on a Mac to let AI agents access browser data for frontend debugging. It outlines installing and enabling macOS permissions, pointing Claude at a local site, and launching a standalone browser instance. Through the MCP the agent can capture screenshots, inspect console errors, and use debugging and performance tools, simplifying communication of UI issues between developers and agents.</description>
      <pubDate>Sat, 18 Oct 2025 23:05:20 +0800</pubDate>
      <guid>https://calvin.my/posts/claude-code-s-vision-the-chrome-devtool-mcp</guid>
    </item>
    <item>
      <title>Gemini Robotics-ER 1.5: High real world accuracy?</title>
      <link>https://calvin.my/posts/gemini-robotics-er-1-5-high-real-world-accuracy</link>
      <description>Google’s preview Gemini Robotics ER 1.5, claimed to specialize in physical-world understanding, was evaluated on three vision tasks: counting overlapping cookies, estimating steps to the end of a path, and reading a rim size from a wet tire. In each test the author reports Robotics ER produced the correct answer while competing models (GPT‑5 mini and Grok 4) erred, suggesting Robotics ER offers notably stronger real-world visual reasoning and measurement accuracy.</description>
      <pubDate>Sat, 18 Oct 2025 21:10:15 +0800</pubDate>
      <guid>https://calvin.my/posts/gemini-robotics-er-1-5-high-real-world-accuracy</guid>
    </item>
    <item>
      <title>Error: certificate verify failed (unable to get certificate CRL) (OpenSSL::SSL::SSLError)</title>
      <link>https://calvin.my/posts/error-certificate-verify-failed-unable-to-get-certificate-crl-openssl-ssl-sslerror</link>
      <description>A change in the underlying OpenSSL library can cause Ruby’s OpenSSL gem to fail certificate verification when connecting to Google services. The issue is fixed in a patched openssl gem (version 3.3.1) and documented upstream. To ensure your application uses the corrected release instead of an older one, explicitly declare the openssl gem in your project’s Gemfile so dependency resolution picks the patched version.</description>
      <pubDate>Wed, 15 Oct 2025 14:23:34 +0800</pubDate>
      <guid>https://calvin.my/posts/error-certificate-verify-failed-unable-to-get-certificate-crl-openssl-ssl-sslerror</guid>
    </item>
    <item>
      <title>OpenAI Sora 2 API first experience</title>
      <link>https://calvin.my/posts/openai-sora-2-api-first-experience</link>
      <description>OpenAI's Sora 2 API generates short videos (4, 8, 12s) at multiple resolutions, including higher pro-only sizes. In my tests it handled simple, long and non-English prompts well, produced synced audio, and supports a remix endpoint to tweak actions (but not model, size, or duration). The moderation system blocks disallowed requests (e.g., fabricated public-figure speech). Notable findings: API videos lack visible watermarks, but a recurring "in-progress" bug can stall generation while still billing.</description>
      <pubDate>Wed, 08 Oct 2025 21:31:32 +0800</pubDate>
      <guid>https://calvin.my/posts/openai-sora-2-api-first-experience</guid>
    </item>
    <item>
      <title>Creating an AI Assistant That Produces PDF Files</title>
      <link>https://calvin.my/posts/creating-an-ai-assistant-that-produces-pdf-files</link>
      <description>This post describes how to equip an AI assistant to produce PDF files by having the model emit text or HTML and invoking an executable function to convert it into a PDF. It outlines a Ruby implementation that generates and attaches the PDF to a conversation, advises sanitizing input HTML, and explains enabling model function-calling, capturing call events and results. A recipe PDF test demonstrates the flow, and the approach can be adapted to other document formats.</description>
      <pubDate>Sun, 05 Oct 2025 13:10:47 +0800</pubDate>
      <guid>https://calvin.my/posts/creating-an-ai-assistant-that-produces-pdf-files</guid>
    </item>
    <item>
      <title>Gemini "Nano Banana" generally available</title>
      <link>https://calvin.my/posts/gemini-nano-banana-generally-available</link>
      <description>Google's Gemini "Nano Banana" model is now generally available; users must update the API model name to access it. The release extends image-generation aspect ratios beyond the three options in OpenAI’s GPT Image 1, supporting wider formats like 9:16 for mobile wallpapers and 21:9 for banners. This increased aspect-ratio flexibility enables more practical image-generation use cases across different application layouts.</description>
      <pubDate>Sat, 04 Oct 2025 03:51:01 +0800</pubDate>
      <guid>https://calvin.my/posts/gemini-nano-banana-generally-available</guid>
    </item>
    <item>
      <title>API Error: Claude's response exceeded the 32000 output token maximum</title>
      <link>https://calvin.my/posts/api-error-claude-s-response-exceeded-the-32000-output-token-maximum</link>
      <description>The post explains a Claude Code error that appears when output exceeds the default 32,000-token limit. It suggests first reviewing the prompt to avoid unnecessary long responses, then increasing the CLAUDE_CODE_MAX_OUTPUT_TOKENS setting and resuming the session with a supported model such as Sonnet. It also notes that Opus 4.6, updated in March 2026, can produce up to 128,000 output tokens.</description>
      <pubDate>Tue, 30 Sep 2025 17:45:01 +0800</pubDate>
      <guid>https://calvin.my/posts/api-error-claude-s-response-exceeded-the-32000-output-token-maximum</guid>
    </item>
    <item>
      <title>AI assistants in my daily life</title>
      <link>https://calvin.my/posts/ai-assistants-in-my-daily-life</link>
      <description>The author details how AI assistants streamline their daily life, from managing system settings, researching movies, and organizing calendars, to drafting documents, editing images, translating languages, getting recipes, managing shopping lists, fact-checking, and more, illustrating the practical benefits of AI integration throughout the day.</description>
      <pubDate>Sun, 14 Sep 2025 11:57:01 +0800</pubDate>
      <guid>https://calvin.my/posts/ai-assistants-in-my-daily-life</guid>
    </item>
    <item>
      <title>Gemini "Nano Banana" image editing capability</title>
      <link>https://calvin.my/posts/gemini-nano-banana-image-editing-capability</link>
      <description>The article evaluates Gemini "Nano Banana" (Flash 2.5 Image) model’s ability to edit images, including pose changes, light adjustments, and logo insertion. Results show accurate retention of the subject, natural edits, and improved handling of lighting, marking a notable advancement in AI-powered image editing.</description>
      <pubDate>Mon, 08 Sep 2025 21:29:40 +0800</pubDate>
      <guid>https://calvin.my/posts/gemini-nano-banana-image-editing-capability</guid>
    </item>
    <item>
      <title>Allow composer to install private Github repository</title>
      <link>https://calvin.my/posts/allow-composer-to-install-private-github-repository</link>
      <description>The post explains how to let Composer install a private GitHub repository by authenticating access in different environments. For local development, it recommends creating a fine-grained personal access token with read-only repository contents permission and configuring Composer with that token. For remote deployment, it outlines using an SSH key pair, SSH configuration, a GitHub deployment key, and a Git config rewrite so repository URLs resolve through the private host setup.</description>
      <pubDate>Thu, 07 Aug 2025 12:22:41 +0800</pubDate>
      <guid>https://calvin.my/posts/allow-composer-to-install-private-github-repository</guid>
    </item>
    <item>
      <title>Android 16 KB compatibility</title>
      <link>https://calvin.my/posts/android-16-kb-compatibility</link>
      <description>Android 15 introduces support for 16 KB page sizes, and the Google Play Store now checks apps for compatibility. Apps using native code (via NDK) must upgrade to NDK r28 and rebuild, or update dependent libraries. Several tools are available to verify 16 KB alignment before submitting.</description>
      <pubDate>Thu, 24 Jul 2025 01:28:46 +0800</pubDate>
      <guid>https://calvin.my/posts/android-16-kb-compatibility</guid>
    </item>
  </channel>
</rss>
