{"data":{"allMdx":{"edges":[{"node":{"frontmatter":{"title":"1 年前の Cloudflare の国別ブロックに App Store で 6 連続リジェクトされた話","excerpt":"How a One-Year-Old Cloudflare Country Block Got My App Rejected 6 Times by the App Store","date":"2026-05-20","path":"blog/2026-05-20","cover":{"childImageSharp":{"fluid":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='195'%20viewBox='0%200%20400%20195'%20preserveAspectRatio='none'%3e%3cpath%20d='M18%2020l1%204%201-1%201-2%202%202c1%202%205%201%205-1h1c1%202%205%203%205%201h1l3%201c2%200%202%200%202-4v-4l-3%202c-2%201-3%202-4%201H20l2-1%201-1-2-1c-3%200-3%200-3%204'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","aspectRatio":2.057142857142857,"src":"/static/58e81e73445ba737c67f6d3f3ca75be8/994e1/img.png","srcSet":"/static/58e81e73445ba737c67f6d3f3ca75be8/aab46/img.png 72w,\n/static/58e81e73445ba737c67f6d3f3ca75be8/eed38/img.png 144w,\n/static/58e81e73445ba737c67f6d3f3ca75be8/994e1/img.png 288w,\n/static/58e81e73445ba737c67f6d3f3ca75be8/8cf13/img.png 432w,\n/static/58e81e73445ba737c67f6d3f3ca75be8/bb8b5/img.png 576w,\n/static/58e81e73445ba737c67f6d3f3ca75be8/de73d/img.png 1343w","sizes":"(max-width: 288px) 100vw, 288px"}}}}}},{"node":{"frontmatter":{"title":"自作5ch.io専ブラ「Ember」にローカルLLMを組み込んだ話","excerpt":"Local LLM in Ember — Bringing on-device summary & chat to a 5ch browser","date":"2026-05-18","path":"blog/2026-05-18","cover":{"childImageSharp":{"fluid":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='231'%20viewBox='0%200%20400%20231'%20preserveAspectRatio='none'%3e%3cpath%20d='M36%2077c0%207%200%209%202%209l1-4c0-5%202-8%204-7s2%202%202%206c0%207%202%206%203-1%200-6-2-9-7-7-2%201-2%201-2-3l-1-3c-2%200-2%202-2%2010m22-9l-3%201c-4%200-5%202-2%203l2%201-2%201c-4%204-2%206%201%203l4-1c2%200%202%200%200%202-4%202-5%204-3%206s13%203%2013%201l-6-1c-6%200-7-2-5-4%203-1%204-1%204%201l1%201%201-2c0-1%201-2%203-2l3-2c0-1-1-2-3-1l-4-1h-4l-1-1%206-1%204-1c0-2-1-2-4-2-2%200-3%200-2-1l-1-1-2%201M8%2070l-1%205c0%203%200%204%205%202%203-2%205%202%204%204s-2%202-5%202c-4-1-5%200-2%202%204%202%2011-1%2011-6%200-2-4-5-7-5-2%201-3%200-3-1l1-2%204-1%204-1-5-1c-5%200-6%200-6%202m212%2047c0%202%201%202%2028%202%2026%200%2027%200%2027-2s-1-2-27-2c-27%200-28%200-28%202m-39%2046c0%2018%200%2033%202%2034l9%202%207%201c-7%202%2041%204%2054%202l6-2c-1-1-1-1%202-1%205%200%208-2%208-7v-3l1%203%201%202%206-4%207-4h46a1052%201052%200%2000-8-1h-53v-40l-44-1h-43l-1%2019M6%20149l-1%208c1%206%202%206%2018%205%2010%200%2012%200%2013-2%200-1%201-2%203-2%204%200%202-1-3-1l-5-1h-1l-2%201-1-1v-1c-1-1-2%200-2%201-1%202-4%201-4-1s1-3%206-3c6%200%208%201%205%202v1l3-1c1-2%206-3%206-1l3-1c1-2%204-3%206-4%201-1-6-1-20-1-22%200-23%200-24%202'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","aspectRatio":1.7142857142857142,"src":"/static/9d6096c816c0db11d308fd19dad130ea/994e1/img.png","srcSet":"/static/9d6096c816c0db11d308fd19dad130ea/aab46/img.png 72w,\n/static/9d6096c816c0db11d308fd19dad130ea/eed38/img.png 144w,\n/static/9d6096c816c0db11d308fd19dad130ea/994e1/img.png 288w,\n/static/9d6096c816c0db11d308fd19dad130ea/8cf13/img.png 432w,\n/static/9d6096c816c0db11d308fd19dad130ea/bb8b5/img.png 576w,\n/static/9d6096c816c0db11d308fd19dad130ea/26549/img.png 1189w","sizes":"(max-width: 288px) 100vw, 288px"}}}}}},{"node":{"frontmatter":{"title":"自作RSSリーダーにオンデバイスLLMを組み込んで、要約・シグナル分離・チャット・翻訳を全部端末内でやらせた話","excerpt":"A deep dive into the serverless architecture behind FeedOwn","date":"2026-05-10","path":"blog/2026-05-10","cover":{"childImageSharp":{"fluid":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='304'%20viewBox='0%200%20400%20304'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%20152v152h18v-44c0-41%200-44%202-45%203-3%2041-3%2043%200%202%201%202%206%202%2045v44h336V0H0v152M368%202l-1%206v5h31V2l-15-1-15%201m-35%202v5c0%202%201%203%207%203h6V4l-6-1-7%201M74%20215c-2%202-3%2010-1%2010v21c2%202%2042%201%2044-1%203-3%203-27%200-30s-41-3-43%200m54%200c-2%202-3%2029-1%2031s42%201%2044-1c3-3%203-27%200-30s-41-3-43%200m54%200c-2%202-3%2029-1%2031s42%201%2044-1c3-3%203-27%200-30s-41-3-43%200m54-1c-2%201-2%203-2%2012%200%2010%200%2011%202%2011v1c-2%202-3%204%200%204l1%201%202%203%203%201h-3l-2-1c-1-3-4%205-3%2010%200%208-1%208%2023%208%2020%200%2021%200%2022-2%202-3%203-13%201-13v-1l1-15c0-21%202-20-24-20l-21%201m53%200c-2%202-3%2044-1%2048l2%202h21c26%200%2024%203%2024-26%200-27%202-25-24-25l-22%201m54%201c-2%202-3%204-1%206v4c-1%203-1%208%201%2011%201%202%202%202%2022%202h21l2-2%201-12c-1-11%200-11-24-11-19%200-20%200-22%202'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","aspectRatio":1.309090909090909,"src":"/static/59a0132d7f040c75e807ac732ff2413a/994e1/img.png","srcSet":"/static/59a0132d7f040c75e807ac732ff2413a/aab46/img.png 72w,\n/static/59a0132d7f040c75e807ac732ff2413a/eed38/img.png 144w,\n/static/59a0132d7f040c75e807ac732ff2413a/994e1/img.png 288w,\n/static/59a0132d7f040c75e807ac732ff2413a/8cf13/img.png 432w,\n/static/59a0132d7f040c75e807ac732ff2413a/bb8b5/img.png 576w,\n/static/59a0132d7f040c75e807ac732ff2413a/7dea9/img.png 1187w","sizes":"(max-width: 288px) 100vw, 288px"}}}}}}]}}}