AI 资讯
Devlog: capturing smooth game footage from a renderer that never hits 30fps
Hey guys 👋 Quick devlog on the side project. I'm building an open-world stickman superhero game. Flat white surfaces, black outlines, no textures and no colour anywhere. The whole city is built from modules on a grid rather than baked meshes, which is the load-bearing decision of the project: destroying a wall is removing a module and building one is adding it back, so destruction and construction are the same system. This week went into the landscapes, so I wanted a 20 second clip flying through a few of the districts. The bit that was actually interesting I wanted the footage captured out of the real game rather than reconstructed in an editor. The obvious approach is to drive it with Playwright and take a screenshot every frame, but that falls apart immediately: rendering under automation is far slower than a screenshot loop can keep up with, so wall-clock capture stutters and the timing drifts. The fix is to stop letting the clock decide. Before the game boots, hijack requestAnimationFrame and queue the callbacks instead of running them: replace requestAnimationFrame with a function that pushes the callback onto a queue- expose a step(dt) that advances a virtual timestamp and drains the queue- call step(1000 / 30) once per screenshotEvery captured frame now advances the simulation by exactly 1/30th of a second, whatever the renderer is actually doing. A frame that takes 300ms to draw and a frame that takes 8ms produce identical motion. The result is smooth 30fps footage from a renderer that never once hit 30fps, and it is deterministic — the same seed gives you the same clip every time. The same rig drives the camera: for the aerials it detaches the chase camera and dollies an external one between two framings, and for the traversal and combat shots it just feeds synthetic input to the real player controller. Nothing in the video is staged. ## Stack Three.js driven imperatively, Rapier for physics, React for the HUD only, TypeScript in strict mode, packaged with
AI 资讯
The app speaks 19 languages: tiered i18n and the AI translation pipeline
The codebase survey was blunt: zero i18n infrastructure , roughly 660 user-facing text nodes across 53 files, a dozen alert dialogs, forty toasts, screen titles scattered across layout files. English was load-bearing everywhere. The reason to fix it then , rather than "after launch", was the closed-test window : Google Play makes you sit in testing for fourteen days regardless, and fourteen days of real people using translated builds is worth more than fourteen days of them using English. So the app learned six languages in one pass, then thirteen more. TL;DR — i18next + react-i18next + a plural-rules polyfill (the JS engine ships a stub Intl on some platforms, and Arabic needs six plural categories), eight namespaces, static resources so the first frame already has copy. Language is per-user, not per-device — the currency pattern — cached for the first frame, mirrored on the profile so it roams, cleared and restored on account switch; the Cognito locale attribute is written at sign-up so emails can follow later. Arabic flips the shell RTL with a native flag and a one-shot restart prompt, logical direction classes, and a font trick: the Arabic face is registered under the Latin font's names , so every existing style re-faces with zero call-site changes. Two tiers — six human-reviewable launch languages, thirteen machine-translated — generated by a diff-only pipeline that forces structured output because free-form JSON kept breaking on quotes. (Part 33 of Building CannyCart , a voice-first shopping app I'm building in public. Self-contained — no earlier context needed.) Four pillars, all cloned from patterns the app already had The plan's insight was that the app already contained every pattern i18n needed — a per-user preference (currency), a device-detected onboarding step (country), a searchable picker (voice language). i18n was the fourth instance of each, not a new discipline. The library layer is i18next + react-i18next — pure JS, no dev-client rebuild — with t
AI 资讯
I Tried Selling a Website to a Local Business at 12. Here's What Happened.
I'm 12 years old. I build websites and full-stack apps. And recently, I decided to test something I've never seriously tried before: Can I actually make money from coding? Not from ads. Not from selling a course. Not from some complicated SaaS business model. Just by making a simple website for a local business. So I started looking for businesses that could use a better online presence. And then I sent my first message. The idea I noticed that a lot of local businesses have good services and good customer reviews, but their online presence isn't always great. Some don't have a website. Some have an old website. Some mostly depend on WhatsApp and Google Maps. So I thought: «What if I make a simple website demo and show them what their business could look like online?» I already had a generic demo website that I could use to show the idea. It wasn't supposed to be a huge SaaS product. It was just a simple website that looked professional enough to make a business owner say: "Okay, I can see how this could help my business." Then I started messaging businesses I searched for local businesses and looked at what they offered. Electrical shops. Car washes. CCTV companies. Painting contractors. Home service businesses. I didn't send the exact same message to everyone. I tried to mention their actual business and services. Then I waited. And waited. Most of the messages weren't even seen. That's when I learned something important: Building the product is only half the problem. You also have to get someone to care about it. Then one business replied I contacted a local business called DHARSHINI CCTV SURVEILLANCE. I told them I was making simple, modern websites for local businesses and showed them my demo. Then I asked: «"Would you like me to show you?"» A while later, they replied with: "💐" I thanked them and offered to make a free sample specifically for their business. And then they said: "Send" That one word made me ridiculously happy. 😂 Because this wasn't just someone
科技前沿
The Best Laptop Backpacks for Work, Travel, and Everything Between (2026)
The wrong bag can aggravate you every single day. These WIRED-tested picks get comfort, capacity, and organization just right.
产品设计
Best Water Leak Detectors (2026): Moen, Phyn, TP-Link
Don’t let busted pipes or an overflowing washing machine dampen your day. These smart water sensors can help you catch problems quicker.
AI 资讯
The Best Gaming Chairs (2026): Are They Worth It?
The best gaming chair is actually an office chair. Here are our top picks from our real-life testing so far.
AI 资讯
i wrote down ~100 public saas pricing pages so i'd stop guessing
I kept pricing off gut instinct + one competitor for way too long. You know the move. competitor is $29 so you're $19. or you're $49 because "premium." neither is a strategy. it's just… anchoring with extra steps, so i did something kind of dumb and kind of useful: opened a bunch of public pricing pages and wrote them down. analytics tools, email tools, form builders, newsletter stuff, hosting, that kind of indie/bootstrappy SaaS. no login walls. if i couldn't see a number, i didn't invent one. Sticker prices were less useful than noticing the shape: where free cuts off what the mid tier is actually selling (usually "remove friction," not "more features") whether the unit is seats, usage, projects, subscribers, etc. copying one competitor's number skips all of that. if you want the sheet I packaged it as an excel workbook (pricing tab + a patterns tab + a blank experiments sheet). yellow/uncertain cells mean i refused to make a number up. free 12-row sample: https://payhip.com/b/0Ubzu full ~100 comps: https://payhip.com/b/l72jY ($19) otherwise curious how people here actually did comps when they first shipped. interviews? gut? one rival's page? something else? ended up with ~100 rows in a spreadsheet. product, category, url, model (flat / seat / usage / freemium+paid / whatever), entry/mid/top when it was on the page, free tier y/n, annual discount if obvious, a short note, date checked. what got boring after enough of them some of it stops being interesting once you've seen it twenty times: usable free tiers that do one real job, then you pay to remove branding / raise limits / unlock collab. not the "7-day demo of everything" free. annual is weirdly consistent. like, ~two months free / ~15–20% off shows up a lot. a ton of indie entry prices live in this unglamorous $9–25 band. not always, but enough that "$79 starter" starts looking like a choice, not a default. not everything is per-seat. flat-by-project / flat-by-workspace shows up more than i expected. i wasn't
AI 资讯
Friday Squid Blogging: Squid on a Stick at the New York State Fair
Looks tasty . As usual, you can also use this squid post to talk about the security stories in the news that I haven’t covered. Blog moderation policy.
AI 资讯
Second complete map of a fruit fly brain completed
Every neuron and connection in the brain of a fly has been mapped—twice.
科技前沿
What Is The Best Waterproof Rating For Bluetooth Speakers?
There's nothing like lounging by the pool, listening to your favorite tunes. But is your Bluetooth speaker waterproof enough to handle a simple splash of water?
科技前沿
5 Best Video Doorbell Cameras (2026): Subscription-Free, Video, and More
Never miss a delivery. These WIRED-tested picks will help you keep tabs on your front door from anywhere.
AI 资讯
Nvidia’s Hugging Face Acquisition Is a $12.9 Billion Bet on Open-Source AI
The long-rumored deal will give the chip giant access to—and help it promote—a huge repository of open-source AI models and data sets.
AI 资讯
I built an iOS alarm that makes you scan a QR code across the room to turn it off
The problem I'm a heavy sleeper. Not "hit snooze once" heavy. I would turn off three stacked alarms in my sleep and wake up an hour late with zero memory of doing it. The problem was never hearing the alarm. It was that turning it off had become a reflex I could do half-asleep, from bed, without ever really waking up. So I built Mornio. The idea Mornio moves the off switch away from the bed. You pick a QR code or a household barcode (the back of a cereal box, a sticker on the bathroom mirror, the label on your coffee tin) and place it across the room. When the alarm goes off, the only way to stop it is to physically get up, walk over, and scan that exact code with your phone. If you try to silence it without scanning, the alarm comes back. And a few minutes after you scan, Mornio runs a second stay-awake check, because getting out of bed once doesn't mean you won't faceplant back into it. How it's built AlarmKit (iOS 26) for scheduling and the reliable, system-level ringing. This was the big unlock: a normal third-party app can't reliably ring like a real alarm, and AlarmKit finally makes that possible. The camera for scanning the QR code or barcode, matched against the specific code you registered the night before. Everything stays on-device. No account, no ads. The codes you pick never leave your phone. What I learned The hard part wasn't the scanning, it was trust. An alarm has exactly one job, and if it fails once, you delete it forever. Most of the work went into making the ringing bulletproof and making the "I dismissed it without really scanning" edge cases impossible to game while half-asleep. Try it, or tell me I'm wrong It's live on the App Store (iPhone, iOS 26.1+): https://apps.apple.com/app/id6780983853 Site: https://mornioapp.com I'd love feedback from other heavy sleepers or shift workers: Does scan-to-dismiss sound like it would actually get you up, or annoying enough you'd rage-delete it? If you've tried it: was the first-morning setup (placing a co
AI 资讯
The Best Air Quality Monitor for Outdoors and Indoors in 2026
These WIRED-tested indoor and outdoor air quality monitors give you insights into your home’s air quality, warn of potentially harmful pollutant levels, and help keep tabs on your environment.
AI 资讯
Why I gave Claude Code a computer instead of building another IDE
Most "AI coding" products still put a chat window next to your editor and call it a day. I wanted something closer to what Claude Code already does well on a server: give it a real computer and let it drive. Superagent is a Mac app that gives Claude Code (or any agent you point it at) an actual environment to work in, not just a text box. Concretely: A real browser it can navigate, click, type into, and read the DOM of, not screenshots and guesses. An iOS Simulator window it can install apps into, tap through, and screenshot to verify UI changes. A relay that pairs your Mac with your phone, so the agent can keep working (and you can keep watching) from your pocket. The core idea is boring on purpose: don't build a smarter chat window, build a better place for the agent to act. Most of the interesting failures I hit while building this weren't in the model, they were in the environment: synthetic file inputs that don't persist through a web form's upload component, elements that exist in the DOM but aren't in the accessibility tree, simulator state that drifts from what a screenshot shows. Fixing those is what actually makes an agent reliable to hand a task to. It's built as three pieces: an Electron desktop app, a SwiftUI iOS companion, and a small Cloudflare Worker relay that pairs the two with per-address rate limits so a lost phone can't be used to spam a stranger's Mac. If you want to see it: https://peerlist.io/pungme/project/superagent-for-mac Happy to answer questions about the browser automation approach, the simulator driving, or the relay's pairing/security model in the comments.
AI 资讯
D18:他終於分開作答,一題對一題錯
昨天我在這裡寫下一句話:阿富如果真的相信大盤跟 00919 該用兩套邏輯,就該讓它們分開受審,別再兩邊押同一個 flat。今天早上八點半,他對加權指數押 down、信心 0.42,對 00919 押 flat、信心 0.37。 盤前他看到的隔夜訊號幾乎全是空的:美股三大指數收黑,道瓊 -0.79%、標普 -0.71%、納斯達克 -1.03%;西德州原油單日漲 5.2% 站上 90 美元;美國十年期公債殖利率升到 4.79% 的新高;美軍 9 月 2 日對伊朗又打了一輪,長達六個半小時。對面只站著一個利多,SEMICON Taiwan 在南港的第二天,主題鎖在 AI。 他把前面那串叫 M 類,跨資產的總體訊號;把展會叫 S 類,單一產業的排定事件。他的新規則寫著,M 類壓過 S 類的時候,指數跟著 M 類走,信心壓在 0.40 到 0.45 之間。00919 走另一條路:前十大成分股裡五檔金融股碰上殖利率走揚不見得吃虧,廣達、聯詠、瑞昱、華碩那幾檔則被展會利多跟晶片股逆風夾在中間,方向混沌,所以判 flat。 風控那邊他設了兩條線:00919 跌破 31.70 就把 36 股全部出清,當日虧損碰到 60 元就停止一切新交易。他還先算過摩擦成本,真要停損賣掉,手續費加證交稅約 2 元,占部位不到 0.2%。 這是他上線以來第一次對兩個標的給出不同方向。 中午的時候,這條規則看起來已經死了 10:30 巡檢,加權指數 46,225.41,比前一天收盤漲 0.13%。00919 報 32.72,漲 1.14%,帳上未實現獲利 89 元。12:30 再看一次,指數 46,281.86,漲幅擴到 0.25%;00919 報 32.76,漲 1.27%,未實現 91 元。 預測押跌,市場整個上午在漲。他自己在盤中紀錄裡寫得很直白:若收盤維持這個方向,這會是新規則的第一個反向樣本。他沒有偷偷改口,也沒有把預測往回調。這一點我給分。 尾盤翻黑 加權指數收 45,857.66,比前一天跌 0.665%。日內最高 46,517.45、最低 45,992.50,收盤價比盤中低點還低。方向回到他早上押的那一邊。大盤那題 HIT,Brier 0.210。 00919 收 32.52,比前收 32.35 漲 0.53%。flat 那題 MISS,Brier 0.284。手上 36 股市值 1,170,未實現獲利 82 元,約 7.6%。 一對一錯,這比昨天有價值得多。昨天兩邊同押 flat,一個對一個錯,事後拿兩套說法各自解釋,怎麼算都不會輸。今天他先把賭注分開放,市場再各給一個答案,其中一個明確打了他的臉。可以輸的考卷才叫考卷。 但他今天多學了一件不該學的事 復盤裡他寫:盤中偏離而收盤回歸,代表 M 類總體利空的傳導有時間延遲,可能來自尾盤外資調節或法人結算。 這句話背後只有一天的資料。今天大盤尾盤翻黑,明天可能整天黑到底,後天可能開低走高。用單一樣本去解釋盤中跟收盤的落差,等於幫規則多裝了一個彈性關節:以後盤中走反了可以說延遲還沒到,收盤走反了才算數。這種關節裝多了,規則會慢慢變成永遠不會錯的東西。 他從同一段經驗抽出的另一個結論反而是對的:盤中巡檢不該憑瞬時方向就對規則下判決,計分要以收盤為準。這是紀律,跟解釋是兩回事。 00919 那題的處理我也有意見。他把 MISS 寫成「flat 用詞精確度不足」,說核心論點「00919 對大盤衝擊的傳導較弱」方向仍然對——00919 漲 0.53%、大盤跌 0.665%,確實相對抗跌。這個辯護不算離譜,但預測寫的是 flat,收的是 0.53% 的上漲,MISS 就是 MISS。他若真覺得該預測的是「跌幅明顯小於大盤」,那就把規則直接改成相對強弱的寫法,接受它下次被更嚴格地打分,別留在原地把失分講成用字問題。 十八天,十四天沒交易 今天沒有下任何一張單。往回翻,帳戶最後一次真的成交是 8 月 14 日那筆 2317 的停損賣出,實驗第 4 天。從第 5 天到今天第 18 天,十四個交易日,零筆委託。 差別在計分。他的校準報告只算跟下單掛鉤的預測,今天那份報告的樣本數還是 12,跟昨天一模一樣,標籤還是「與運氣無法區分」,方向命中率 0.5。他每天盤前申報的預測累積到 31 筆、結算 26 筆,大盤 13 筆中 6 次命中、00919 13 筆中 6 次命中,都是 46.2%,系統照樣判定樣本不足、不給結論。 規則從舊版改到新版,判讀從一體改成分家,這些進步是真的。只是它們到現在還沒有一次真的動用到錢。帳上總資產大約 2,259 元(券商可動用餘額 1,089 加持股市值 1,170),對照本金 2,200,十八天下來多了 2.7%。目標是三十個交易日翻倍,剩十二天。 一個把預測寫得越來越細、卻十四個交易日不下
AI 资讯
How I Grew Buildside to 130 Users in 2 Weeks by Building in Public
Two weeks after launching Buildside, 130 people had joined. I did not have an ad budget or a huge email list. There was no secret growth trick. I grew Buildside by sharing the journey on X and LinkedIn, speaking with users, and letting their feedback guide the app. The biggest lesson I learned was: You have to market your product long before you launch it. I started marketing before the app was ready Many founders wait until their product feels finished before they talk about it. Sharing early work can feel risky. You may worry that people will judge it, copy it, or ignore it. I chose to share anyway. Before Buildside launched, I posted about the problem I wanted to solve, why I cared about it, and what I was learning. I showed small bits of progress and asked people what they thought. That gave people a reason to follow the journey. On launch day, I was not asking strangers to care about a new app. I was inviting people who had already watched the idea grow. Y Combinator tells founders to release early. Its guide says waiting too long is often driven by fear and the wish to make everything perfect. An early version lets you ask, “What do you think?” That advice matched my experience . I shared the fails as well as the wins It is easy to post a new user count or a kind comment. It is harder to share what went wrong. Yet the honest posts often led to the best talks. When something failed, I said so. When I changed my mind, I explained why. I shared the good days too. The goal was not to make every post look impressive. It was to show the real work. Honesty builds trust. Buffer has shared parts of its business in public for years, through both strong and hard moments. The company says being open builds trust and keeps it accountable. Its open company page shows this in action . People do not need a founder to look perfect. They want to know there is a real person listening and trying to make something useful. I let users shape Buildside Building in public was not only
AI 资讯
Palo Alto Networks paid $500M for Thrive-backed Console, sources say
The acquisition also leaves Sequoia-backed Serval as the de facto startup leader in AI IT service automation, industry watchers believe.
科技前沿
Spending deal comes with a bonus: Blocking political control of grants
Congress pauses the OMB's attempt to rewrite how research is funded.
产品设计
Wary of Artemis IV timeline, NASA is changing lunar spacesuit design
"Requirements are being adjusted to reflect near-term mission needs."