<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Koshin Studio — Notes (English)</title>
  <link>https://koshinstudio.com/en/notes/</link>
  <description>Development logs from building browser games and an iOS app, with measured numbers</description>
  <language>en</language>
  <atom:link href="https://koshinstudio.com/en/feed.xml" rel="self" type="application/rss+xml"/>
  <item>
    <title>How bullet-hell patterns work: ring, aimed, rain, spiral and homing, with formulas and live demos</title>
    <link>https://koshinstudio.com/en/notes/danmaku-patterns/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/danmaku-patterns/</guid>
    <pubDate>Fri, 06 Nov 2026 15:00:00 GMT</pubDate>
    <description>The exact math behind ring, aimed (odd vs even), rain, spiral and homing bullet-hell patterns, from a real danmaku game, with live demos.</description>
  </item>
  <item>
    <title>Sushi Stack scores stopped reaching the leaderboard: I changed the game’s numbers and forgot the server’s re-check (twice)</title>
    <link>https://koshinstudio.com/en/notes/rank-verify-mismatch/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/rank-verify-mismatch/</guid>
    <pubDate>Fri, 06 Nov 2026 15:00:00 GMT</pubDate>
    <description>Honest runs of a browser game stopped reaching the online leaderboard: two game values changed without updating the server that re-checks scores. The fix, and a test that compares both sides with the same seeds.</description>
  </item>
  <item>
    <title>Japanese Pokémon card &amp; TCG lottery apps compared: Toreca Dash, Toreget, NowPokeca, Pokeka Tracker and Toreca no Chizu</title>
    <link>https://koshinstudio.com/en/notes/tcg-lottery-app-compare/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/tcg-lottery-app-compare/</guid>
    <pubDate>Fri, 06 Nov 2026 15:00:00 GMT</pubDate>
    <description>Five apps and sites that track Pokémon card and TCG lotteries, pre-orders and restocks at stores in Japan, compared on games, alerts, maps and price — by the developer of one of them, weak points included.</description>
  </item>
  <item>
    <title>The same report for the third time: a SwiftUI button responded only on its text, and my two earlier “fixes” did nothing</title>
    <link>https://koshinstudio.com/en/notes/swiftui-hit-area/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/swiftui-hit-area/</guid>
    <pubDate>Fri, 16 Oct 2026 15:00:00 GMT</pubDate>
    <description>The “Won” and “Lost” buttons responded only on the text. Two earlier fixes (modifier order) did not work; I built the look inside a ButtonStyle and replaced six places. A mail-order article with coordinates had the same kind of root.</description>
  </item>
  <item>
    <title>A function named “load from iCloud if newer” compared nothing: a 20-record history could become 1</title>
    <link>https://koshinstudio.com/en/notes/icloud-overwrite/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/icloud-overwrite/</guid>
    <pubDate>Fri, 16 Oct 2026 15:00:00 GMT</pubDate>
    <description>The iCloud sync function never checked whether data was newer and replaced everything. A fresh device with an empty state could overwrite another device’s 20 records with 1. I added update-time comparison and never overwrite with empty.</description>
  </item>
  <item>
    <title>With no ads, 25 real-device checks were blocked: test ads in developer mode only, and no hard-coded prize names</title>
    <link>https://koshinstudio.com/en/notes/test-ads/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/test-ads/</guid>
    <pubDate>Fri, 16 Oct 2026 15:00:00 GMT</pubDate>
    <description>Before ads were served, 25 of 163 real-device checklist items could not be verified. In developer mode only, the app switches to Google’s test ad units. Prize names are read from one setting and never hard-coded, including in the checklist.</description>
  </item>
  <item>
    <title>Online play that trusts nothing the client says: the server decides moves, clocks and results</title>
    <link>https://koshinstudio.com/en/notes/negaeri-online/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/negaeri-online/</guid>
    <pubDate>Fri, 16 Oct 2026 15:00:00 GMT</pubDate>
    <description>Online play without login. Moves are validated by the rules engine, the clock lives only on the server, a disconnect gets 30 seconds, tokens are signed with HMAC, and ratings use pre-match numbers. With real values from the server code.</description>
  </item>
  <item>
    <title>Setting the rules of Negaeri Shogi by playing AI against AI: one change that worked, six that broke</title>
    <link>https://koshinstudio.com/en/notes/negaeri-balance/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/negaeri-balance/</guid>
    <pubDate>Fri, 16 Oct 2026 15:00:00 GMT</pubDate>
    <description>A 6×6 board game where sandwiched pieces defect. Instead of guessing the numbers, I ran 40 to 100 AI-vs-AI games per rule. Flips per move went from 2% to 81%, removing the king guard ended games in 17 moves, and the first-move edge is still unsolved.</description>
  </item>
  <item>
    <title>Four store-matching mistakes in a TCG lottery app: spelling variants, vague map lookups, shared entry pages, and one page with many products</title>
    <link>https://koshinstudio.com/en/notes/tcg-store-matching/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/tcg-store-matching/</guid>
    <pubDate>Fri, 06 Nov 2026 15:00:00 GMT</pubDate>
    <description>Four real cases where matching store names went wrong in a trading-card lottery app: spelling variants, a map lookup that returned Shizuoka, one entry page used by different stores, and one form for six products.</description>
  </item>
  <item>
    <title>Seven records of cutting misses in crawling and monitoring: pagination, X monitoring, measuring coverage and waiting rooms</title>
    <link>https://koshinstudio.com/en/notes/crawl-monitoring/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/crawl-monitoring/</guid>
    <pubDate>Fri, 06 Nov 2026 15:00:00 GMT</pubDate>
    <description>Seven records of counting and cutting misses while crawling and monitoring lottery and first-come sales: aggregator pagination, gaps in X monitoring, how coverage was measured, intervals vs delivery, and waiting-room pages.</description>
  </item>
  <item>
    <title>Nine things that happened running scheduled jobs and a server: timeouts, time budgets, re-runs on deploy and a VPS migration</title>
    <link>https://koshinstudio.com/en/notes/scheduled-jobs/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/scheduled-jobs/</guid>
    <pubDate>Fri, 06 Nov 2026 15:00:00 GMT</pubDate>
    <description>Nine records from the jobs that run hourly and daily, and the server under them: moving from Cloud Functions to a VPS, a timeout fixed three times, checks that never ran, re-runs on every deploy, and secrets in logs.</description>
  </item>
  <item>
    <title>Pokémon card sleeves and loaders: sizes and what “pt” means</title>
    <link>https://koshinstudio.com/en/notes/card-supplies-guide/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/card-supplies-guide/</guid>
    <pubDate>Thu, 15 Oct 2026 15:00:00 GMT</pubDate>
    <description>What to check before buying Pokémon card sleeves, toploaders and deck boxes: standard vs small size, what 35pt means, and a buying checklist. Not a hands-on review; unverified points are listed.</description>
  </item>
  <item>
    <title>ITMS-91064 “Invalid Binary”: NSPrivacyTracking was true but NSPrivacyTrackingDomains was empty</title>
    <link>https://koshinstudio.com/en/notes/itms-91064/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/itms-91064/</guid>
    <pubDate>Wed, 07 Oct 2026 15:00:00 GMT</pubDate>
    <description>An iOS build was rejected by Apple's automated review with ITMS-91064. NSPrivacyTracking was true while NSPrivacyTrackingDomains was an empty array. How it was fixed, and what was not verified.</description>
  </item>
  <item>
    <title>Firebase 12 does not work with Xcode 15.2 (Swift 6.0 required): why I pinned Firebase 11.4.0 and AdMob 11.5.0</title>
    <link>https://koshinstudio.com/en/notes/xcode152-sdk/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/xcode152-sdk/</guid>
    <pubDate>Thu, 08 Oct 2026 15:00:00 GMT</pubDate>
    <description>On an old Mac stuck on Xcode 15.2, newer Firebase and AdMob SDKs fail to build. Which versions break, which I pinned (Firebase 11.4.0, AdMob 11.5.0), and why.</description>
  </item>
  <item>
    <title>iOS app freezes and is killed (0x8BADF00D): a SwiftUI computed property ran on every redraw</title>
    <link>https://koshinstudio.com/en/notes/torecadash-watchdog/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/torecadash-watchdog/</guid>
    <pubDate>Thu, 08 Oct 2026 15:00:00 GMT</pubDate>
    <description>An iOS app was force-quit by the watchdog (0x8BADF00D). A SwiftUI computed property re-filtered and re-sorted 951 articles on the main thread every body evaluation.</description>
  </item>
  <item>
    <title>No builds arriving in TestFlight: I had used up the 25 free Xcode Cloud hours (my first diagnosis was wrong)</title>
    <link>https://koshinstudio.com/en/notes/torecadash-ci/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/torecadash-ci/</guid>
    <pubDate>Thu, 08 Oct 2026 15:00:00 GMT</pubDate>
    <description>New builds stopped appearing in TestFlight. My first diagnosis (“[ci skip] is blocking builds”) was wrong; the workflow built the iOS app on every commit.</description>
  </item>
  <item>
    <title>Firebase Auth: force-quitting the app created anonymous accounts in bulk (waiting for currentUser to restore)</title>
    <link>https://koshinstudio.com/en/notes/apple-signin/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/apple-signin/</guid>
    <pubDate>Thu, 08 Oct 2026 15:00:00 GMT</pubDate>
    <description>Force-quitting the app made Firebase create a new anonymous account each launch: 17 of 19 users were throwaway. Cause: reading currentUser too early.</description>
  </item>
  <item>
    <title>A canvas becomes twice as large on Retina: inset:0 does not stretch it (a bug in a logo that bursts when you tap it)</title>
    <link>https://koshinstudio.com/en/notes/logo-pop/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/logo-pop/</guid>
    <pubDate>Thu, 08 Oct 2026 15:00:00 GMT</pubDate>
    <description>Burst particles appeared in the wrong place on high-DPI screens. A canvas with only inset:0 keeps its pixel size, so it was 2x larger in CSS on Retina.</description>
  </item>
  <item>
    <title>Making a 10-second stopwatch ranking fair: 3 decimals, ties and write counts</title>
    <link>https://koshinstudio.com/en/notes/stopwatch-rank/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/stopwatch-rank/</guid>
    <pubDate>Thu, 08 Oct 2026 15:00:00 GMT</pubDate>
    <description>Why I truncate to three decimals so coarse clocks get no advantage, how ties (a 1/333 chance) are broken, and how I counted KV writes on the free tier.</description>
  </item>
  <item>
    <title>From 16,177 titles to 6,091: how the anime quiz database was built by dropping over 60%</title>
    <link>https://koshinstudio.com/en/notes/anime-db/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/anime-db/</guid>
    <pubDate>Thu, 08 Oct 2026 15:00:00 GMT</pubDate>
    <description>An anime quiz picks from about 6,000 titles. Where they came from, the criterion that cut 62.3% of 16,177, what remains, and the biases of the method.</description>
  </item>
  <item>
    <title>“80% was chosen over 82%”: the quiz’s match percentage disagreed with its ranking</title>
    <link>https://koshinstudio.com/en/notes/match-percent/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/match-percent/</guid>
    <pubDate>Thu, 08 Oct 2026 15:00:00 GMT</pubDate>
    <description>An anime quiz’s match percentage used a different yardstick from its ranking. With the old display, 35 to 40% of 1,000 synthetic respondents saw a reversed top 3.</description>
  </item>
  <item>
    <title>The streaming buttons were shown even for titles you could not watch: making the quiz result screen true</title>
    <link>https://koshinstudio.com/en/notes/result-screen/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/result-screen/</guid>
    <pubDate>Thu, 08 Oct 2026 15:00:00 GMT</pubDate>
    <description>The anime quiz showed the same two streaming buttons for every title; about 29% were wrong. How I narrowed buttons by availability and fixed image problems.</description>
  </item>
  <item>
    <title>Cutting six buttons to one: first-time players did not know what to press</title>
    <link>https://koshinstudio.com/en/notes/first-visit/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/first-visit/</guid>
    <pubDate>Thu, 08 Oct 2026 15:00:00 GMT</pubDate>
    <description>A browser game title screen had six things to press. I made the first step one button, and fixed saves vanishing inside an iframe and play continuing in a hidden tab.</description>
  </item>
  <item>
    <title>Measuring Qiita’s “posting too frequently” limit: a new account could not create another article for about 30 minutes</title>
    <link>https://koshinstudio.com/en/notes/qiita-post-interval/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/qiita-post-interval/</guid>
    <pubDate>Thu, 08 Oct 2026 15:00:00 GMT</pubDate>
    <description>After publishing, a new Qiita account could not create the next article. Checking the editor every 5 minutes, two measurements gave about 30 minutes; one was lost.</description>
  </item>
  <item>
    <title>Rejected by CrazyGames with no reason given: I recorded the game and found four problems</title>
    <link>https://koshinstudio.com/en/notes/crazygames/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/crazygames/</guid>
    <pubDate>Thu, 08 Oct 2026 15:00:00 GMT</pubDate>
    <description>A game portal rejected my game with only “overall quality below expectations.” I recorded what the reviewer saw, found four causes and fixed them by measuring.</description>
  </item>
  <item>
    <title>Japanese text garbled in the CrazyGames preview: the file was correct, the cause was never found, so I escaped to ASCII</title>
    <link>https://koshinstudio.com/en/notes/ascii-text/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/ascii-text/</guid>
    <pubDate>Thu, 08 Oct 2026 15:00:00 GMT</pubDate>
    <description>One character broke in a game portal’s preview though the file bytes were correct. How I made the game immune without finding the cause.</description>
  </item>
  <item>
    <title>Works on my machine, breaks when deployed: four incidents shipping a static site to Cloudflare Pages</title>
    <link>https://koshinstudio.com/en/notes/deploy-gotchas/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/deploy-gotchas/</guid>
    <pubDate>Thu, 08 Oct 2026 15:00:00 GMT</pubDate>
    <description>Stale cache, breadcrumbs that multiplied each build, a symlink into my own environment, and local-only images: four deploy incidents on Cloudflare Pages.</description>
  </item>
  <item>
    <title>Comparing static site hosts by their official terms: Cloudflare Pages, Netlify, Vercel, GitHub Pages and Firebase Hosting</title>
    <link>https://koshinstudio.com/en/notes/hosting-compare/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/hosting-compare/</guid>
    <pubDate>Thu, 08 Oct 2026 15:00:00 GMT</pubDate>
    <description>Cloudflare Pages, Netlify, Vercel, GitHub Pages and Firebase Hosting compared by official terms (Oct 2026): ads allowed, free limits, file limits, config.</description>
  </item>
  <item>
    <title>Comparing comment systems for static sites by their official information: giscus, utterances, Disqus, Remark42 and more</title>
    <link>https://koshinstudio.com/en/notes/comment-services/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/comment-services/</guid>
    <pubDate>Thu, 08 Oct 2026 15:00:00 GMT</pubDate>
    <description>giscus, utterances, Disqus, Remark42, Cusdis, Staticman and Commento compared by official pages (Oct 2026): storage, ads and tracking, maintenance status.</description>
  </item>
  <item>
    <title>Comparing iOS ad SDKs and Firebase by their official information: AdMob, AppLovin MAX, LevelPlay and Supabase</title>
    <link>https://koshinstudio.com/en/notes/ios-sdk-compare/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/ios-sdk-compare/</guid>
    <pubDate>Thu, 08 Oct 2026 15:00:00 GMT</pubDate>
    <description>AdMob, AppLovin MAX, LevelPlay, Firebase and Supabase compared by official pages (Oct 2026): payouts, privacy manifests, minimum Xcode, free tiers.</description>
  </item>
  <item>
    <title>Claude API vs Gemini API by official numbers: small-model prices, web search, spend limits and deprecation</title>
    <link>https://koshinstudio.com/en/notes/claude-vs-gemini-api/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/claude-vs-gemini-api/</guid>
    <pubDate>Thu, 08 Oct 2026 15:00:00 GMT</pubDate>
    <description>Claude and Gemini API compared by official pages (Oct 2026): small-model prices, web search cost and caps, spend limits, deprecation notice.</description>
  </item>
  <item>
    <title>I could not listen, so I measured the waveform: building Japanese instruments with WebAudio for Sushi Stack</title>
    <link>https://koshinstudio.com/en/notes/webaudio/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/webaudio/</guid>
    <pubDate>Thu, 08 Oct 2026 15:00:00 GMT</pubDate>
    <description>A browser game with no audio files: koto, taiko and gong synthesized with WebAudio. I could not listen, so I set volume by measuring waveform peaks.</description>
  </item>
  <item>
    <title>Making a ranking server use only half of the free tier: from 5 calls to 2</title>
    <link>https://koshinstudio.com/en/notes/ranking-free-tier/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/ranking-free-tier/</guid>
    <pubDate>Thu, 08 Oct 2026 15:00:00 GMT</pubDate>
    <description>A game ranking on Workers and D1: calls per play from 5 to 2, rows read from 421 to 221. Server-side rank counting and removing the preflight call.</description>
  </item>
  <item>
    <title>Eight product-matching failures in a TCG lottery app: English vs katakana, splitting sets, official catalogs and spreading typos</title>
    <link>https://koshinstudio.com/en/notes/tcg-product-matching/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/tcg-product-matching/</guid>
    <pubDate>Fri, 06 Nov 2026 15:00:00 GMT</pubDate>
    <description>Eight real failures in matching trading-card lottery articles to products: English vs katakana names, splitting 9-pack sets, products seeded from official catalogs, spreading typos, and leaked values.</description>
  </item>
  <item>
    <title>Seven silent failures: real lotteries discarded, pages never read, and errors swallowed without a trace</title>
    <link>https://koshinstudio.com/en/notes/silent-failures/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/silent-failures/</guid>
    <pubDate>Fri, 06 Nov 2026 15:00:00 GMT</pubDate>
    <description>Seven real cases where nothing raised an error yet real data was being dropped or never read: regexes, dates without a year, truncated AI answers, t.co relays, notice pages, swallowed try? failures, and fail-open.</description>
  </item>
  <item>
    <title>Seven lessons from repairing bad data: existing records, bulk-job accidents, counting duplicates and the notification gate</title>
    <link>https://koshinstudio.com/en/notes/data-repair/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/data-repair/</guid>
    <pubDate>Fri, 06 Nov 2026 15:00:00 GMT</pubDate>
    <description>Seven real lessons from repairing bad data: fixing the gate does not fix existing data, cleanup can hide entry bugs, a bulk job that hit everything, how duplicates were counted, and notifications that cannot be undone.</description>
  </item>
  <item>
    <title>Where App Store review stopped me: “Guideline 2.1 Information Needed” on the first submission, and four rejections</title>
    <link>https://koshinstudio.com/en/notes/app-store-review/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/app-store-review/</guid>
    <pubDate>Fri, 06 Nov 2026 15:00:00 GMT</pubDate>
    <description>Records of an indie iOS app stuck in App Store review: the six items asked for in Guideline 2.1 Information Needed on the first submission, and four rejections including iPad screenshots.</description>
  </item>
  <item>
    <title>Python splitlines() breaks JSONL: the culprit was U+2028, an invisible line separator</title>
    <link>https://koshinstudio.com/en/notes/u2028/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/u2028/</guid>
    <pubDate>Thu, 08 Oct 2026 15:00:00 GMT</pubDate>
    <description>Python splitlines() broke a JSONL file because 2 of 7,247 records contained U+2028 (LINE SEPARATOR). Why it happens and the one-line fix: split on the newline only.</description>
  </item>
  <item>
    <title>What changes when an anime quiz goes from 50 questions to 12?</title>
    <link>https://koshinstudio.com/en/notes/shindan12/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/shindan12/</guid>
    <pubDate>Thu, 08 Oct 2026 15:00:00 GMT</pubDate>
    <description>A 50-question anime quiz now gives a result after 12. Measured with 1,000 synthetic respondents: the type mostly matches, but the single recommended title changes a lot.</description>
  </item>
  <item>
    <title>“The pile settles at 89%” was wrong: my measurement was what was wrong</title>
    <link>https://koshinstudio.com/en/notes/sushi-measure/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/sushi-measure/</guid>
    <pubDate>Thu, 08 Oct 2026 15:00:00 GMT</pubDate>
    <description>Rebalancing a merge puzzle, I found my measurement had counted falling pieces. Three causes: a backward size ladder, a pit-shaped tub, and pieces tunneling the floor.</description>
  </item>
  <item>
    <title>Measuring the gap between ads in time, not in plays</title>
    <link>https://koshinstudio.com/en/notes/adgap/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/adgap/</guid>
    <pubDate>Thu, 08 Oct 2026 15:00:00 GMT</pubDate>
    <description>Why I replaced “one ad every 5 plays” with “7 minutes since the last ad” in a browser game, how it behaves, and what I still do not know.</description>
  </item>
  <item>
    <title>Five records of measuring, then cutting, AI and Firestore costs: a broken Gemini meter, 91% of reads in one place, and crawl costs</title>
    <link>https://koshinstudio.com/en/notes/ai-cost-cutting/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/ai-cost-cutting/</guid>
    <pubDate>Fri, 06 Nov 2026 15:00:00 GMT</pubDate>
    <description>Five records of cutting AI (Claude, Gemini), Firestore and crawling costs in an indie app: doubting the meter first, converting to yen, and counting where the money actually went.</description>
  </item>
  <item>
    <title>The conger eel was too big: finding why a merge puzzle’s last piece was out of reach</title>
    <link>https://koshinstudio.com/en/notes/anago/</link>
    <guid isPermaLink="true">https://koshinstudio.com/en/notes/anago/</guid>
    <pubDate>Thu, 08 Oct 2026 15:00:00 GMT</pubDate>
    <description>I could never reach my puzzle’s last piece. Statistics from hundreds of auto-played games showed the real cause: everything was too big for the tub.</description>
  </item>
</channel>
</rss>
