ytyng.com

Latest Articles

Page 2
2026-05-06 07:48 (6 months ago)
EmDash is slow (as of v0.9.0)

Tried Cloudflare's new CMS EmDash on Cloudflare Workers and saw TTFB of 500ms–3000ms. Even a text-only about page lands above 400ms. With comparisons, a breakdown of the bottleneck, and links to third-party benchmarks.

2026-05-06 03:11 (6 months ago)
Sending email from EmDash with Brevo

How I shipped a custom plugin that calls Brevo's HTTP API to make magic-link auth work on an EmDash site deployed to Cloudflare Workers. Covers what's wrong with the existing plugins, why Brevo, the sandboxed-vs-plugins trap, and how to store the API key.

2026-05-01 02:40 (6 months ago)
Building a single-file portable Python script with embedded dependency management

Build a single-file executable Python script with PEP 723 inline metadata and uv shebang support, including dependency management. Add the metadata block and run it directly with uv.

2026-04-26 05:38 (6 months ago)
Opening a specific 1Password item from the terminal in the 1Password desktop app

Open a specific 1Password desktop item straight from the CLI by rewriting the private-link URL scheme. Launch the app directly without going through a browser.

2026-03-27 15:00 (7 months ago)
Claude Code agent instructions & skills in Gemini CLI, Codex CLI, Copilot CLI — portability check

Find out which Claude Code settings actually carry over to Gemini CLI, Codex CLI, and GitHub Copilot. Breaks down what can be shared via symlinks for CLAUDE.md, slash commands, skills, and MCP configs—and what cannot.

2026-03-27 15:00 (7 months ago)
Playwright CLI vs agent-browser vs Claude in Chrome — AI browser automation token benchmark (2026)

Hands-on benchmark: Claude Code operates the same web app via Playwright CLI, agent-browser, and Claude in Chrome. Token efficiency, usability, and stability compared side by side.

2026-03-18 12:00 (8 months ago)
EKS Max Pods per Instance Type and Cost Performance Analysis (Tokyo Region)

Calculating per-Pod cost from EKS ENI-based Max Pods formula and instance On-Demand pricing. Reveals that 2xlarge and 8xlarge are traps with same Pod count as xlarge/4xlarge at double the price, and that Graviton c7g offers the best Pod density cost performance.

2026-03-01 23:35 (8 months ago)
Adding Cache-Control headers to static files when running SvelteKit with adapter-node in Docker

SvelteKit's adapter-node doesn't set Cache-Control headers for files in the static/ directory. This post explains how to use Node.js --import hooks to patch http.ServerResponse.prototype.writeHead and add cache headers to specific paths.

2026-02-22 03:38 (8 months ago)
Skill + CLI over MCP: Replacing Sentry MCP with a multi-profile CLI wrapper

Since sentry-cli lacks native multi-profile support, I created a zsh wrapper function that enables AWS CLI-style --profile switching. Also registered it as a Claude Code skill for seamless AI agent integration.

2026-02-18 03:00 (8 months ago)
Turning a Raspberry Pi into digital signage — maximizing Chromium with Playwright automation

Turn a Raspberry Pi into a kiosk signage display with Playwright (Python) + Chromium `--kiosk` for always-on fullscreen web pages. Persist login via cookies, auto-start via `.desktop`, and deploy updates with `scp`.

2026-02-13 02:34 (9 months ago)
Docker 29 breaks docker push to ECR with 403 Forbidden on GitHub Actions

GitHub Actions ubuntu-latest runner updated to Docker 29, which defaults to containerd image store, causing docker push to ECR to fail with 403 Forbidden.

2026-02-10 23:29 (9 months ago)
How to Add "Copy Full File Path to Clipboard" to Finder's Services Menu

How to create a Quick Action using macOS Automator that copies the full file path to the clipboard with a right-click in Finder.

2026-02-09 09:34 (9 months ago)
How to turn Orange Pi Zero 2W into a Web Signage Display

A guide to turning Orange Pi Zero 2W into a web signage display with auto-starting Chromium kiosk mode. Covers stable systemd boot configuration (getty conflict, D-Bus/GPU workarounds, unlimited retries) and interrupt-driven GPIO button control using gpiomon.

2026-02-08 08:40 (9 months ago)
Suno Remix vs Inspo vs Mashup vs Sample: What Each Feature Does

Remix (Cover, Extend, Reuse, Speed) reshapes one track, Inspo borrows a playlist's vibe, Mashup fuses two tracks, Sample grows a song from a 30-second clip.

2026-01-23 02:52 (9 months ago)
Firefox on macOS: stop ESC from exiting full screen (about:config)

ESC exits Firefox full screen on macOS. Set browser.fullscreen.exit_on_escape to false in about:config so ESC can close dialogs without leaving full screen.

2026-01-09 03:03 (10 months ago)
Exposing Chromium DevTools Protocol port 9222 from Docker — Chromium M113+ workaround

Since Chromium M113, `--remote-debugging-address=0.0.0.0` is forcibly remapped to 127.0.0.1, blocking external CDP connections. Workaround: forward 9222 to 127.0.0.1:9223 with `socat`.

2026-01-09 03:02 (10 months ago)
git skip-worktree: ignore local changes to tracked files (vs assume-unchanged)

.gitignore and .git/info/exclude only cover untracked files. Run git update-index --skip-worktree to keep local edits to a tracked file out of git status.

2026-01-09 01:55 (10 months ago)
Parsing Claude Code stream-json output with jq — extract .event.delta.text in real time

Extract `.event.delta.text` from Claude Code's `--output-format=stream-json` using `jq -j` to avoid the per-fragment newline issue with `jq -r`. Includes a working one-liner.

2025-08-30 04:18 (14 months ago)
Headless UI Libraries for SvelteKit + Tailwind (2025)

I researched Headless UI libraries that can be used with Svelte and summarized them.

2025-08-24 14:31 (14 months ago)
Designing a Shared Store Library for Svelte 5’s Runes Mode

When trying to implement a shared store in Svelte 5’s Runes Mode, I couldn’t export $state, so I couldn’t write the code as intended and ended up creating a compromise solution.